From: David S. Miller Date: Sat, 7 Apr 2012 16:29:14 +0000 (-0700) Subject: Handle some new sparc relocation types. X-Git-Tag: glibc-2.16-tps~639^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5ed848f3d8b5b3be92fe3006fd18a089ef982316;p=thirdparty%2Fglibc.git Handle some new sparc relocation types. * elf/elf.h (R_SPARC_WDISP10): Define. * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Handle R_SPARC_SIZE32. * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): Handle R_SPARC_SIZE64 and R_SPARC_H34. --- diff --git a/ChangeLog b/ChangeLog index 0544a89ab4c..cdecc655a9d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2012-04-07 David S. Miller + + * elf/elf.h (R_SPARC_WDISP10): Define. + * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Handle + R_SPARC_SIZE32. + * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): Handle + R_SPARC_SIZE64 and R_SPARC_H34. + 2012-04-07 Carlos O'Donell * elf/dynamic-link.h (_ELF_DYNAMIC_DO_RELOC): Simplify diff --git a/elf/elf.h b/elf/elf.h index a71de7286bc..347d6d856e2 100644 --- a/elf/elf.h +++ b/elf/elf.h @@ -1327,6 +1327,7 @@ typedef struct #define R_SPARC_H34 85 #define R_SPARC_SIZE32 86 #define R_SPARC_SIZE64 87 +#define R_SPARC_WDISP10 88 #define R_SPARC_JMP_IREL 248 #define R_SPARC_IRELATIVE 249 #define R_SPARC_GNU_VTINHERIT 250 diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h index 31b540ac375..2dfeeb27a3b 100644 --- a/sysdeps/sparc/sparc32/dl-machine.h +++ b/sysdeps/sparc/sparc32/dl-machine.h @@ -359,6 +359,12 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, if (__builtin_expect (r_type == R_SPARC_NONE, 0)) return; + if (__builtin_expect (r_type == R_SPARC_SIZE32, 0)) + { + *reloc_addr = sym->st_size + reloc->r_addend; + return; + } + #if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC if (__builtin_expect (r_type == R_SPARC_RELATIVE, 0)) { diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h index 4b14593c9bf..35c24d1558a 100644 --- a/sysdeps/sparc/sparc64/dl-machine.h +++ b/sysdeps/sparc/sparc64/dl-machine.h @@ -385,6 +385,12 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, if (__builtin_expect (r_type == R_SPARC_NONE, 0)) return; + if (__builtin_expect (r_type == R_SPARC_SIZE64, 0)) + { + *reloc_addr = sym->st_size + reloc->r_addend; + return; + } + #if !defined RTLD_BOOTSTRAP || !defined HAVE_Z_COMBRELOC if (__builtin_expect (r_type == R_SPARC_RELATIVE, 0)) { @@ -552,6 +558,12 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, (((value & 0x3ff) + ELF64_R_TYPE_DATA (reloc->r_info)) & 0x1fff)); break; + /* ABS34 code model reloc */ + case R_SPARC_H34: + *(unsigned int *) reloc_addr = + ((*(unsigned int *)reloc_addr & 0xffc00000) | + ((value >> 12) & 0x3fffff)); + /* MEDMID code model relocs */ case R_SPARC_H44: *(unsigned int *) reloc_addr =