Module Name: src Committed By: joerg Date: Mon Jun 19 11:57:02 UTC 2017
Modified Files: src/libexec/ld.elf_so: Makefile map_object.c rtld.h symbol.c src/libexec/ld.elf_so/arch/aarch64: mdreloc.c src/libexec/ld.elf_so/arch/alpha: alpha_reloc.c src/libexec/ld.elf_so/arch/arm: mdreloc.c src/libexec/ld.elf_so/arch/hppa: hppa_reloc.c src/libexec/ld.elf_so/arch/i386: mdreloc.c src/libexec/ld.elf_so/arch/m68k: mdreloc.c src/libexec/ld.elf_so/arch/mips: mips_reloc.c src/libexec/ld.elf_so/arch/or1k: mdreloc.c src/libexec/ld.elf_so/arch/powerpc: ppc_reloc.c src/libexec/ld.elf_so/arch/riscv: mdreloc.c src/libexec/ld.elf_so/arch/sh3: mdreloc.c src/libexec/ld.elf_so/arch/sparc: mdreloc.c src/libexec/ld.elf_so/arch/sparc64: mdreloc.c src/libexec/ld.elf_so/arch/vax: mdreloc.c src/libexec/ld.elf_so/arch/x86_64: mdreloc.c Log Message: Replace COMBREL with just-in-time check in _rtld_relocate_nonplt_objects. The COMBREL logic predates thread-safety of the dynamic linker and breaks the use of shared locks for the common symbol lookup case. It is unlikely to provide any benefit for lazy binding or PLT lookups, so provide equivalent functionality in the non-PLT relocation handling loop by checking if the symbol used by the current relocation is the same as the one used during the last lookup. No inter-object cachine is done as it is also unlikely to be benefical. Testing with Firefox startup on AMD64 shows a small performance gain by the new method. To generate a diff of this commit: cvs rdiff -u -r1.136 -r1.137 src/libexec/ld.elf_so/Makefile cvs rdiff -u -r1.57 -r1.58 src/libexec/ld.elf_so/map_object.c cvs rdiff -u -r1.126 -r1.127 src/libexec/ld.elf_so/rtld.h cvs rdiff -u -r1.67 -r1.68 src/libexec/ld.elf_so/symbol.c cvs rdiff -u -r1.2 -r1.3 src/libexec/ld.elf_so/arch/aarch64/mdreloc.c cvs rdiff -u -r1.41 -r1.42 src/libexec/ld.elf_so/arch/alpha/alpha_reloc.c cvs rdiff -u -r1.38 -r1.39 src/libexec/ld.elf_so/arch/arm/mdreloc.c cvs rdiff -u -r1.43 -r1.44 src/libexec/ld.elf_so/arch/hppa/hppa_reloc.c cvs rdiff -u -r1.37 -r1.38 src/libexec/ld.elf_so/arch/i386/mdreloc.c cvs rdiff -u -r1.31 -r1.32 src/libexec/ld.elf_so/arch/m68k/mdreloc.c cvs rdiff -u -r1.65 -r1.66 src/libexec/ld.elf_so/arch/mips/mips_reloc.c cvs rdiff -u -r1.1 -r1.2 src/libexec/ld.elf_so/arch/or1k/mdreloc.c cvs rdiff -u -r1.53 -r1.54 src/libexec/ld.elf_so/arch/powerpc/ppc_reloc.c cvs rdiff -u -r1.2 -r1.3 src/libexec/ld.elf_so/arch/riscv/mdreloc.c cvs rdiff -u -r1.32 -r1.33 src/libexec/ld.elf_so/arch/sh3/mdreloc.c cvs rdiff -u -r1.49 -r1.50 src/libexec/ld.elf_so/arch/sparc/mdreloc.c cvs rdiff -u -r1.60 -r1.61 src/libexec/ld.elf_so/arch/sparc64/mdreloc.c cvs rdiff -u -r1.31 -r1.32 src/libexec/ld.elf_so/arch/vax/mdreloc.c cvs rdiff -u -r1.41 -r1.42 src/libexec/ld.elf_so/arch/x86_64/mdreloc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.