]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
Add ppc64le ELFv2 abi support to backends and elflint.
authorMark Wielaard <mjw@redhat.com>
Fri, 4 Jul 2014 12:30:48 +0000 (14:30 +0200)
committerMark Wielaard <mjw@redhat.com>
Fri, 4 Jul 2014 12:30:48 +0000 (14:30 +0200)
The big endian vs little endian changes are already handled by detecting
the EI_DATA data encoding. And the function descriptors are already not
used when we see there is no .opd section. This change adds new checks
for st_other bits, new relocations and recognizes DT_PPC64_OPT.

Signed-off-by: Menanteau Guy <menantea@linux.vnet.ibm.com>
Signed-off-by: Mark Wielaard <mjw@redhat.com>
backends/ChangeLog
backends/ppc64_init.c
backends/ppc64_reloc.def
backends/ppc64_symbol.c
src/ChangeLog
src/elflint.c

index c590ed6db8c0f2db5234da6a5e712f4ebe612490..d29a80f6a9fa054edde59ec1106a6297e7d9d781 100644 (file)
@@ -1,3 +1,14 @@
+2014-07-04  Menanteau Guy  <menantea@linux.vnet.ibm.com>
+           Mark Wielaard  <mjw@redhat.com>
+
+       * ppc64_init.c (ppc64_init): Hook check_st_other_bits.
+       * ppc64_reloc.def: TLSGD, TLSLD, TOCSAVE, ADDR16_HIGH, ADDR16_HIGHA,
+       TPREL16_HIGH, TPREL16_HIGHA, DTPREL16_HIGH, DTPREL16_HIGHA, JMP_IREL,
+       IRELATIVE, REL16, REL16_LO, REL16_HI and REL16_HA.
+       * ppc64_symbol.c (ppc64_dynamic_tag_name): Recognize DT_PPC64_OPT.
+       (ppc64_dynamic_tag_check): Likewise.
+       (ppc64_check_st_other_bits): New function.
+
 2014-07-04  Mark Wielaard  <mjw@redhat.com>
 
        * aarch64_retval.c (aarch64_return_value_location): Handle
index e52231c9d4e92f33c15218d9c1a170a71e1f074d..7ea2b2363f73f36492cae849fec1c8e6cc585f7b 100644 (file)
@@ -61,6 +61,7 @@ ppc64_init (elf, machine, eh, ehlen)
   HOOK (eh, machine_flag_check);
   HOOK (eh, copy_reloc_p);
   HOOK (eh, check_special_symbol);
+  HOOK (eh, check_st_other_bits);
   HOOK (eh, bss_plt_p);
   HOOK (eh, return_value_location);
   HOOK (eh, register_info);
index 6366f46e9946f681713e8fd4dbe0ac5daa817271..3a693cf69cb9befc783feddcd42eb66aeb499d05 100644 (file)
@@ -132,6 +132,21 @@ RELOC_TYPE (DTPREL16_HIGHER,       REL)
 RELOC_TYPE (DTPREL16_HIGHERA,  REL)
 RELOC_TYPE (DTPREL16_HIGHEST,  REL)
 RELOC_TYPE (DTPREL16_HIGHESTA, REL)
+RELOC_TYPE (TLSGD,             REL)
+RELOC_TYPE (TLSLD,             REL)
+RELOC_TYPE (TOCSAVE,           REL)
+RELOC_TYPE (ADDR16_HIGH,       REL)
+RELOC_TYPE (ADDR16_HIGHA,      REL)
+RELOC_TYPE (TPREL16_HIGH,      REL)
+RELOC_TYPE (TPREL16_HIGHA,     REL)
+RELOC_TYPE (DTPREL16_HIGH,     REL)
+RELOC_TYPE (DTPREL16_HIGHA,    REL)
+RELOC_TYPE (JMP_IREL,          REL)
+RELOC_TYPE (IRELATIVE,         REL)
+RELOC_TYPE (REL16,             REL)
+RELOC_TYPE (REL16_LO,          REL)
+RELOC_TYPE (REL16_HI,          REL)
+RELOC_TYPE (REL16_HA,          REL)
 
 /* Notes from Alan Modra:
 
index 212d4145d4935a2c4457b14c82d78b7e7f0fc5d8..5a020d8d065386e2e7c98dfb53f2545bef9f1eb3 100644 (file)
@@ -72,6 +72,8 @@ ppc64_dynamic_tag_name (int64_t tag, char *buf __attribute__ ((unused)),
       return "PPC64_OPD";
     case DT_PPC64_OPDSZ:
       return "PPC64_OPDSZ";
+    case DT_PPC64_OPT:
+      return "PPC64_OPT";
     default:
       break;
     }
@@ -84,7 +86,8 @@ ppc64_dynamic_tag_check (int64_t tag)
 {
   return (tag == DT_PPC64_GLINK
          || tag == DT_PPC64_OPD
-         || tag == DT_PPC64_OPDSZ);
+         || tag == DT_PPC64_OPDSZ
+         || tag == DT_PPC64_OPT);
 }
 
 
@@ -120,3 +123,9 @@ ppc64_machine_flag_check (GElf_Word flags)
 {
   return flags == 0 || flags == 1 || flags == 2;
 }
+
+bool
+ppc64_check_st_other_bits (unsigned char st_other)
+{
+  return (PPC64_LOCAL_ENTRY_OFFSET (st_other) != 0);
+}
index 30234237f796e851c7bd103d7c0042476b1858c0..2d6965bfff2714fdc765215863fab9351b541920 100644 (file)
@@ -1,3 +1,9 @@
+2014-07-04  Menanteau Guy  <menantea@linux.vnet.ibm.com>
+           Mark Wielaard  <mjw@redhat.com>
+
+       * elflint (check_symtab): Add ".TOC." to the list of possibly
+       dangling symbols because of sourceware PR13621.
+
 2014-06-14  Mark Wielaard  <mjw@redhat.com>
 
        * elflint (check_symtab): Use ebl_func_addr_mask on st_value.
index 5568c65cee26d00fc07c15218b13d959aba539d5..d6a477489426752a8d72eaf6498e03b6e2a4f6af 100644 (file)
@@ -799,7 +799,8 @@ section [%2d] '%s': symbol %zu: function in COMMON section is nonsense\n"),
                                  && strcmp (name, "__fini_array_end") != 0
                                  && strcmp (name, "__bss_start") != 0
                                  && strcmp (name, "__bss_start__") != 0
-                                 && strcmp (name, "__TMC_END__") != 0))
+                                 && strcmp (name, "__TMC_END__") != 0
+                                 && strcmp (name, ".TOC.") != 0))
                            ERROR (gettext ("\
 section [%2d] '%s': symbol %zu: st_value out of bounds\n"),
                                   idx, section_name (ebl, idx), cnt);