From 131eb6b75e45eec24860ff6972f23b0e723db75c Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Mon, 21 Apr 2008 17:54:25 +0000 Subject: [PATCH] bfd/ * elfxx-mips.c (_bfd_mips_vxworks_adjust_dynamic_symbol): Don't set the value of undefined symbols in shared objects. (_bfd_mips_vxworks_finish_dynamic_symbol): Clear value for undefined symbols unless pointer equality is needed. ld/testsuite/ * ld-vxworks/plt-mips1.s: New. * ld-vxworks/plt-mips1.d: New. --- bfd/ChangeLog | 7 +++++++ bfd/elfxx-mips.c | 11 +++++------ ld/testsuite/ChangeLog | 5 +++++ ld/testsuite/ld-vxworks/plt-mips1.d | 10 ++++++++++ ld/testsuite/ld-vxworks/plt-mips1.s | 1 + 5 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 ld/testsuite/ld-vxworks/plt-mips1.d create mode 100644 ld/testsuite/ld-vxworks/plt-mips1.s diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 1ac4be90306..7171a0c4f29 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2008-04-21 Nathan Sidwell + + * elfxx-mips.c (_bfd_mips_vxworks_adjust_dynamic_symbol): Don't + set the value of undefined symbols in shared objects. + (_bfd_mips_vxworks_finish_dynamic_symbol): Clear value for + undefined symbols unless pointer equality is needed. + 2008-04-18 Dennis Roberts * aix5ppc-core.c: Define macros for the default architecture and diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 396e578a256..5173c0af4da 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -7466,15 +7466,14 @@ _bfd_mips_vxworks_adjust_dynamic_symbol (struct bfd_link_info *info, htab->splt->size += htab->plt_entry_size; /* If the output file has no definition of the symbol, set the - symbol's value to the address of the stub. For executables, - point at the PLT load stub rather than the lazy resolution stub; - this stub will become the canonical function address. */ - if (!h->def_regular) + symbol's value to the address of the stub. Point at the PLT + load stub rather than the lazy resolution stub; this stub + will become the canonical function address. */ + if (!info->shared && !h->def_regular) { h->root.u.def.section = htab->splt; h->root.u.def.value = h->plt.offset; - if (!info->shared) - h->root.u.def.value += 8; + h->root.u.def.value += 8; } /* Make room for the .got.plt entry and the R_JUMP_SLOT relocation. */ diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index 627d9332a82..b2d61e0ec48 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-04-21 Nathan Sidwell + + * ld-vxworks/plt-mips1.s: New. + * ld-vxworks/plt-mips1.d: New. + 2008-04-16 David S. Miller * ld-sparc/gotop32.dd: New. diff --git a/ld/testsuite/ld-vxworks/plt-mips1.d b/ld/testsuite/ld-vxworks/plt-mips1.d new file mode 100644 index 00000000000..d580df29ec1 --- /dev/null +++ b/ld/testsuite/ld-vxworks/plt-mips1.d @@ -0,0 +1,10 @@ +# target: mips*-*-* +# source: plt-mips1.s +# ld: -shared -z now +# readelf: -s + +#... + [0-9]*: 00000000 0 FUNC GLOBAL DEFAULT UND Foo +#... + [0-9]*: 00000000 0 FUNC GLOBAL DEFAULT UND Foo +#... diff --git a/ld/testsuite/ld-vxworks/plt-mips1.s b/ld/testsuite/ld-vxworks/plt-mips1.s new file mode 100644 index 00000000000..2f7950412e9 --- /dev/null +++ b/ld/testsuite/ld-vxworks/plt-mips1.s @@ -0,0 +1 @@ + lw $25,%call16(Foo)($28) -- 2.30.2