Module Name: src Committed By: joerg Date: Tue Apr 3 21:10:28 UTC 2018
Modified Files: src/libexec/ld.elf_so: reloc.c rtld.c rtld.h src/libexec/ld.elf_so/arch/arm: Makefile.inc mdreloc.c src/libexec/ld.elf_so/arch/i386: Makefile.inc mdreloc.c src/libexec/ld.elf_so/arch/powerpc: Makefile.inc ppc_reloc.c src/libexec/ld.elf_so/arch/sparc: Makefile.inc mdreloc.c src/libexec/ld.elf_so/arch/sparc64: Makefile.inc mdreloc.c src/libexec/ld.elf_so/arch/x86_64: Makefile.inc mdreloc.c Log Message: Rework ifunc support to address a number of short comings: - Move to a shared _rtld_call_ifunc for rel and rela architectures - Architectures using rel format must patch IRELATIVE non-PLT relocations like RELATIVE in additition to the later ifunc handling - Consistently record the delta to the end of the relocation group for non-PLT IRELATIVE relocations Hidden ifunc is now supported on all ifunc platforms, even when using -fno-plt. The combination of -fno-plt and relro is broken due to incorrect GNU ld output though. To generate a diff of this commit: cvs rdiff -u -r1.111 -r1.112 src/libexec/ld.elf_so/reloc.c cvs rdiff -u -r1.191 -r1.192 src/libexec/ld.elf_so/rtld.c cvs rdiff -u -r1.132 -r1.133 src/libexec/ld.elf_so/rtld.h cvs rdiff -u -r1.20 -r1.21 src/libexec/ld.elf_so/arch/arm/Makefile.inc cvs rdiff -u -r1.43 -r1.44 src/libexec/ld.elf_so/arch/arm/mdreloc.c cvs rdiff -u -r1.14 -r1.15 src/libexec/ld.elf_so/arch/i386/Makefile.inc cvs rdiff -u -r1.40 -r1.41 src/libexec/ld.elf_so/arch/i386/mdreloc.c cvs rdiff -u -r1.15 -r1.16 src/libexec/ld.elf_so/arch/powerpc/Makefile.inc cvs rdiff -u -r1.56 -r1.57 src/libexec/ld.elf_so/arch/powerpc/ppc_reloc.c cvs rdiff -u -r1.14 -r1.15 src/libexec/ld.elf_so/arch/sparc/Makefile.inc cvs rdiff -u -r1.54 -r1.55 src/libexec/ld.elf_so/arch/sparc/mdreloc.c cvs rdiff -u -r1.8 -r1.9 src/libexec/ld.elf_so/arch/sparc64/Makefile.inc cvs rdiff -u -r1.68 -r1.69 src/libexec/ld.elf_so/arch/sparc64/mdreloc.c cvs rdiff -u -r1.7 -r1.8 src/libexec/ld.elf_so/arch/x86_64/Makefile.inc cvs rdiff -u -r1.46 -r1.47 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.