]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
ppc: ppc_check_special_symbol): Also allow _SDA_BASE_ in .data section.
authorMark Wielaard <mjw@redhat.com>
Fri, 16 Oct 2015 10:26:27 +0000 (12:26 +0200)
committerMark Wielaard <mjw@redhat.com>
Fri, 16 Oct 2015 11:11:32 +0000 (13:11 +0200)
The Small Data Area Base normally points to .sdata, in which case we
check it is at an offset of 0x8000.  It might however fall in the
.data section, in which case we cannot check the offset.  The size always
should be zero.

Signed-off-by: Mark Wielaard <mjw@redhat.com>
backends/ChangeLog
backends/ppc_symbol.c

index e6f376336eff5c6ebc2ff136973c80b75800f45e..6ea3dc4bfdd1ca07b99677260d8ae65da1b65475 100644 (file)
@@ -1,3 +1,8 @@
+2015-10-16  Mark Wielaard  <mjw@redhat.com>
+
+       * ppc_symbol.c (ppc_check_special_symbol): Also allow _SDA_BASE_
+       in .data section.
+
 2015-10-05  Josh Stone  <jistone@redhat.com>
 
        * Makefile.am (libebl_%.so): Add AM_V_at and AM_V_CCLD silencers.
index 733114b6a1b9c3c2d8731c330135cc1ae79b394f..37d49182fc678e2e28cbc413571891f3705442af 100644 (file)
@@ -1,5 +1,5 @@
 /* PPC specific symbolic name handling.
-   Copyright (C) 2004, 2005, 2007, 2014 Red Hat, Inc.
+   Copyright (C) 2004, 2005, 2007, 2014, 2015 Red Hat, Inc.
    This file is part of elfutils.
    Written by Ulrich Drepper <drepper@redhat.com>, 2004.
 
@@ -143,9 +143,14 @@ ppc_check_special_symbol (Elf *elf, GElf_Ehdr *ehdr, const GElf_Sym *sym,
   if (sname == NULL)
     return false;
 
+  /* Small data area.  Normally points to .sdata, in which case we
+     check it is at an offset of 0x8000.  It might however fall in the
+     .data section, in which case we cannot check the offset.  The
+     size always should be zero.  */
   if (strcmp (name, "_SDA_BASE_") == 0)
-    return (strcmp (sname, ".sdata") == 0
-           && sym->st_value == destshdr->sh_addr + 0x8000
+    return (((strcmp (sname, ".sdata") == 0
+             && sym->st_value == destshdr->sh_addr + 0x8000)
+            || strcmp (sname, ".data") == 0)
            && sym->st_size == 0);
 
   if (strcmp (name, "_SDA2_BASE_") == 0)