This is the mail archive of the gas2@sourceware.cygnus.com mailing list for the gas2 project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
From: hjl@nynexst.com (H.J. Lu)
Date: Sat, 29 Oct 94 16:10:23 EDT
> Could somebody please try to give me a reproducible test case for this
> problem?
Do you have a Linux system?
No.
I think I have pinpointed where it went wrong. As I suspected, it looks
the old bug I reported earlier. Your fix may be a partial one.
Yes, this was enough for me to recreate the problem on Solaris. This
patch should fix the problem. Ken, this patch should go into the
release.
Ian
Index: elf32-i386.c
===================================================================
RCS file: /rel/cvsfiles/devo/bfd/elf32-i386.c,v
retrieving revision 1.32
diff -p -r1.32 elf32-i386.c
*** elf32-i386.c 1994/10/27 21:25:29 1.32
--- elf32-i386.c 1994/10/30 03:20:54
*************** elf_i386_adjust_dynamic_symbol (info, h)
*** 647,657 ****
if (s->_raw_size == 0)
s->_raw_size += PLT_ENTRY_SIZE;
! /* If we are not generating a shared library, or if the symbol
! is not defined, set the symbol to this location in the .plt.
! This is required to make function pointers compare as equal
! between the normal executable and the shared library. */
! if (! info->shared || h->root.type != bfd_link_hash_defined)
{
h->root.u.def.section = s;
h->root.u.def.value = s->_raw_size;
--- 647,659 ----
if (s->_raw_size == 0)
s->_raw_size += PLT_ENTRY_SIZE;
! /* If this symbol is not defined in a regular file, and we are
! not generating a shared library, then set the symbol to this
! location in the .plt. This is required to make function
! pointers compare as equal between the normal executable and
! the shared library. */
! if (! info->shared
! && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
{
h->root.u.def.section = s;
h->root.u.def.value = s->_raw_size;
Index: elf32-sparc.c
===================================================================
RCS file: /rel/cvsfiles/devo/bfd/elf32-sparc.c,v
retrieving revision 1.25
diff -p -r1.25 elf32-sparc.c
*** elf32-sparc.c 1994/10/27 21:25:31 1.25
--- elf32-sparc.c 1994/10/30 03:20:55
*************** elf32_sparc_adjust_dynamic_symbol (info,
*** 619,629 ****
return false;
}
! /* If we are not generating a shared library, or if the symbol
! is not defined, set the symbol to this location in the .plt.
! This is required to make function pointers compare as equal
! between the normal executable and the shared library. */
! if (! info->shared || h->root.type != bfd_link_hash_defined)
{
h->root.u.def.section = s;
h->root.u.def.value = s->_raw_size;
--- 619,631 ----
return false;
}
! /* If this symbol is not defined in a regular file, and we are
! not generating a shared library, then set the symbol to this
! location in the .plt. This is required to make function
! pointers compare as equal between the normal executable and
! the shared library. */
! if (! info->shared
! && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
{
h->root.u.def.section = s;
h->root.u.def.value = s->_raw_size;