diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 63df21fec3..a4bce4c45f 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2002-12-04 H.J. Lu + + * elfxx-ia64.c (get_local_sym_hash): Use section ID instead of + BFD address when constructing local name. + 2002-12-04 Andreas Schwab * elf32-m68k.c (struct elf_m68k_link_hash_table): Add sym_sec diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c index 93741bdc72..2f6e1a5ec9 100644 --- a/bfd/elfxx-ia64.c +++ b/bfd/elfxx-ia64.c @@ -1834,26 +1834,22 @@ get_local_sym_hash (ia64_info, abfd, rel, create) const Elf_Internal_Rela *rel; bfd_boolean create; { - char *addr_name; - size_t len; struct elfNN_ia64_local_hash_entry *ret; + asection *sec = abfd->sections; + char addr_name [34]; + + BFD_ASSERT ((sizeof (sec->id)*2 + 1 + sizeof (unsigned long)*2 + 1) <= 34); + BFD_ASSERT (sec); /* Construct a string for use in the elfNN_ia64_local_hash_table. name describes what was once anonymous memory. */ - len = sizeof (void*)*2 + 1 + sizeof (bfd_vma)*4 + 1 + 1; - len += 10; /* %p slop */ - - addr_name = bfd_malloc (len); - if (addr_name == NULL) - return 0; - sprintf (addr_name, "%p:%lx", - (void *) abfd, (unsigned long) ELFNN_R_SYM (rel->r_info)); + sprintf (addr_name, "%x:%lx", + sec->id, (unsigned long) ELFNN_R_SYM (rel->r_info)); /* Collect the canonical entry data for this address. */ ret = elfNN_ia64_local_hash_lookup (&ia64_info->loc_hash_table, addr_name, create, create); - free (addr_name); return ret; }