aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog6
-rw-r--r--ld/emultempl/xtensaelf.em16
2 files changed, 14 insertions, 8 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index f227698..727e777 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,9 @@
+2006-07-24 Bob Wilson <bob.wilson@acm.org>
+
+ * emultempl/xtensaelf.em (is_inconsistent_linkonce_section): Add space
+ in dep_sec_name for null terminator. Make sure dep_sec_name has a
+ ".t" linkonce tag.
+
2006-07-14 Michael Wetherell <mike.wetherell@ntlworld.com>
* emulparams/elf_x86_64.sh (LIBPATH_SUFFIX, ELF_INTERPRETER_NAME):
diff --git a/ld/emultempl/xtensaelf.em b/ld/emultempl/xtensaelf.em
index f5d2ba9..20ac2f2 100644
--- a/ld/emultempl/xtensaelf.em
+++ b/ld/emultempl/xtensaelf.em
@@ -1200,7 +1200,7 @@ is_inconsistent_linkonce_section (asection *sec)
{
bfd *abfd = sec->owner;
const char *sec_name = bfd_get_section_name (abfd, sec);
- char *prop_tag = 0;
+ const char *name = 0;
if ((bfd_get_section_flags (abfd, sec) & SEC_LINK_ONCE) == 0
|| strncmp (sec_name, ".gnu.linkonce.", linkonce_len) != 0)
@@ -1208,20 +1208,20 @@ is_inconsistent_linkonce_section (asection *sec)
/* Check if this is an Xtensa property section. */
if (strncmp (sec_name + linkonce_len, "p.", 2) == 0)
- prop_tag = "p.";
+ name = sec_name + linkonce_len + 2;
else if (strncmp (sec_name + linkonce_len, "prop.", 5) == 0)
- prop_tag = "prop.";
- if (prop_tag)
+ name = strchr (sec_name + linkonce_len + 5, '.') + 1;
+
+ if (name)
{
- int tag_len = strlen (prop_tag);
- char *dep_sec_name = xmalloc (strlen (sec_name));
+ char *dep_sec_name = xmalloc (strlen (sec_name) + 1);
asection *dep_sec;
/* Get the associated linkonce text section and check if it is
included in the link. If not, this section is inconsistent
and should be stripped. */
- strcpy (dep_sec_name, ".gnu.linkonce.");
- strcat (dep_sec_name, sec_name + linkonce_len + tag_len);
+ strcpy (dep_sec_name, ".gnu.linkonce.t.");
+ strcat (dep_sec_name, name);
dep_sec = bfd_get_section_by_name (abfd, dep_sec_name);
if (dep_sec == NULL || ! input_section_linked (dep_sec))
{