summaryrefslogtreecommitdiff
path: root/bfd/elflink.c
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2011-02-14 17:03:43 +0000
committerMike Frysinger <vapier@gentoo.org>2011-02-14 17:03:43 +0000
commit65a711d066ca874003a100910f47edd3d0deceb6 (patch)
treeae357af204276188c8830a83d6f6643287a39229 /bfd/elflink.c
parent713d8e495e4b772bdb7097297b7072d9c9c32cf3 (diff)
downloadgdb-65a711d066ca874003a100910f47edd3d0deceb6.tar.gz
bfd/ld: handle ABI prefixes in version scripts
The default language in version scripts is supposed to be C, but no symbol demangling is performed on the symbols by default. This makes targets with a symbol prefix to fail with most version scripts out there. So strip away this prefix by default. This fixes many tests (real world and ld's testsuite) for Blackfin targets and doesn't seem to cause regressions for x86_64. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'bfd/elflink.c')
-rw-r--r--bfd/elflink.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 79256bf6f6e..dffe0ae37b5 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -5710,11 +5710,12 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
{
const char *verstr, *name;
size_t namelen, verlen, newlen;
- char *newname, *p;
+ char *newname, *p, leading_char;
struct elf_link_hash_entry *newh;
+ leading_char = bfd_get_symbol_leading_char (output_bfd);
name = d->pattern;
- namelen = strlen (name);
+ namelen = strlen (name) + (leading_char != '\0');
verstr = t->name;
verlen = strlen (verstr);
newlen = namelen + verlen + 3;
@@ -5722,7 +5723,8 @@ bfd_elf_size_dynamic_sections (bfd *output_bfd,
newname = (char *) bfd_malloc (newlen);
if (newname == NULL)
return FALSE;
- memcpy (newname, name, namelen);
+ newname[0] = leading_char;
+ memcpy (newname + (leading_char != '\0'), name, namelen);
/* Check the hidden versioned definition. */
p = newname + namelen;