]> sourceware.org Git - glibc.git/commitdiff
(__process_machine_rela): Store R_PPC_UADDR32 and R_PPC_UADDR16 one byte at a time...
authorUlrich Drepper <drepper@redhat.com>
Thu, 17 Oct 2002 22:22:42 +0000 (22:22 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 17 Oct 2002 22:22:42 +0000 (22:22 +0000)
sysdeps/powerpc/powerpc32/dl-machine.c

index 28a31f6d919d3aea0ec8b84e8c87d309445701b0..d444aa5da9f3c702d5e27d9229eb340a377b22b4 100644 (file)
@@ -409,25 +409,37 @@ __process_machine_rela (struct link_map *map,
       return;
 
     case R_PPC_ADDR32:
-    case R_PPC_UADDR32:
     case R_PPC_GLOB_DAT:
     case R_PPC_RELATIVE:
       *reloc_addr = finaladdr;
       return;
 
+    case R_PPC_UADDR32:
+      ((char *) reloc_addr)[0] = value >> 24;
+      ((char *) reloc_addr)[1] = value >> 16;
+      ((char *) reloc_addr)[2] = value >> 8;
+      ((char *) reloc_addr)[3] = value;
+      break;
+
     case R_PPC_ADDR24:
-      if (finaladdr > 0x01fffffc && finaladdr < 0xfe000000)
+      if (__builtin_expect (finaladdr > 0x01fffffc && finaladdr < 0xfe000000, 0))
        dl_reloc_overflow (map,  "R_PPC_ADDR24", reloc_addr, sym, refsym);
       *reloc_addr = (*reloc_addr & 0xfc000003) | (finaladdr & 0x3fffffc);
       break;
 
     case R_PPC_ADDR16:
-    case R_PPC_UADDR16:
-      if (finaladdr > 0x7fff && finaladdr < 0x8000)
+      if (__builtin_expect (finaladdr > 0x7fff && finaladdr < 0xffff8000, 0))
        dl_reloc_overflow (map,  "R_PPC_ADDR16", reloc_addr, sym, refsym);
       *(Elf32_Half*) reloc_addr = finaladdr;
       break;
 
+    case R_PPC_UADDR16:
+      if (__builtin_expect (finaladdr > 0x7fff && finaladdr < 0xffff8000, 0))
+       dl_reloc_overflow (map,  "R_PPC_UADDR16", reloc_addr, sym, refsym);
+      ((char *) reloc_addr)[0] = value >> 8;
+      ((char *) reloc_addr)[1] = value;
+      break;
+
     case R_PPC_ADDR16_LO:
       *(Elf32_Half*) reloc_addr = finaladdr;
       break;
@@ -443,7 +455,7 @@ __process_machine_rela (struct link_map *map,
     case R_PPC_ADDR14:
     case R_PPC_ADDR14_BRTAKEN:
     case R_PPC_ADDR14_BRNTAKEN:
-      if (finaladdr > 0x7fff && finaladdr < 0x8000)
+      if (__builtin_expect (finaladdr > 0x7fff && finaladdr < 0xffff8000, 0))
        dl_reloc_overflow (map,  "R_PPC_ADDR14", reloc_addr, sym, refsym);
       *reloc_addr = (*reloc_addr & 0xffff0003) | (finaladdr & 0xfffc);
       if (rinfo != R_PPC_ADDR14)
This page took 0.044033 seconds and 5 git commands to generate.