This is the mail archive of the
mailing list for the binutils project.
Re: binutils 2.19.92 linker broke with --as-needed flag
- From: Vincent Wen <wenvincent90 at gmail dot com>
- To: Eric Christopher <echristo at gmail dot com>
- Cc: Alan Modra <amodra at gmail dot com>, binutils at sourceware dot org
- Date: Thu, 28 Mar 2013 16:21:52 -0700
- Subject: Re: binutils 2.19.92 linker broke with --as-needed flag
- References: <CAF_=-cAkxcT55aLt4FL01gKCjjgO-3d1NSuXc4ADuPY3vOodFg at mail dot gmail dot com> <20130328000253 dot GK14552 at bubble dot grove dot modra dot org> <CAF_=-cD=32qSTx9Q=ZUPjU1OyZh-_UmRT518KzK3roW=q2Gqtg at mail dot gmail dot com> <20130328023639 dot GL14552 at bubble dot grove dot modra dot org> <CALehDX4fduBUun9a3bc99exx3B+wB1KiwkY_HpfN9ps2bUbkZg at mail dot gmail dot com>
Thanks a lot for clarification!
So I am testing the following patch per our discussion. Please let me
know if anything missing.
--- a/bfd/elfxx-mips.c 2013-02-10 16:50:56.000000000 -0800
+++ b/bfd/elfxx-mips.c 2013-02-10 17:14:06.000000000 -0800
@@ -4681,12 +4681,9 @@
h->non_elf = 0;
h->def_regular = 1;
h->type = STT_OBJECT;
+ h->other = STV_HIDDEN;
elf_hash_table (info)->hgot = h;
- if (info->shared
- && ! bfd_elf_link_record_dynamic_symbol (info, h))
- return FALSE;
amt = sizeof (struct mips_got_info);
g = bfd_alloc (abfd, amt);
if (g == NULL)
On Thu, Mar 28, 2013 at 3:02 PM, Eric Christopher <firstname.lastname@example.org> wrote:
> On Wed, Mar 27, 2013 at 7:36 PM, Alan Modra <email@example.com> wrote:
>> On Wed, Mar 27, 2013 at 06:54:39PM -0700, Vincent Wen wrote:
>>> Who is the MIPS maintainer?
>> Theoretically Eric Christopher, but binutils/MAINTAINERS lists an
>> old email address and it's been a while since we've seen him around
>> here. Eric, can you comment on the code below?
> Yeah, it's been a while. Sorry about that. I'll update everything at some point
> though I'm no longer doing anything with MIPS (or mn10300) so while I can
> pitch in on occasion I could also move myself to write-after-approval
> if you'd like.
>>> On Wed, Mar 27, 2013 at 5:02 PM, Alan Modra <firstname.lastname@example.org> wrote:
>>> > On Wed, Mar 27, 2013 at 10:24:51AM -0700, Vincent Wen wrote:
>>> >> Alan,
>>> >> I'd like to know whether the patch for this issue is accepted or not?
>>> > That really is up to one of the MIPS maintainers. As I said in
>>> > http://sourceware.org/ml/binutils/2013-02/msg00159.html the MIPS backend
>>> > wants _GLOBAL_OFFSET_TABLE_ dynamic for some reason.
>>> > bh = NULL;
>>> > if (! (_bfd_generic_link_add_one_symbol
>>> > (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
>>> > 0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
>>> > return FALSE;
>>> > h = (struct elf_link_hash_entry *) bh;
>>> > h->non_elf = 0;
>>> > h->def_regular = 1;
>>> > h->type = STT_OBJECT;
>>> > elf_hash_table (info)->hgot = h;
>>> > if (info->shared
>>> > && ! bfd_elf_link_record_dynamic_symbol (info, h))
>>> > return FALSE;
>>> > I think that is just plain wrong, but I don't know the history of this
>>> > code.
> It's been that way since the original revision and that's a long long time
> ago. :) I think I noticed it at one point and thought it odd, but I'm not sure
> what it was actually for... some oddity on SGI machines that depended
> upon a dynamic _GLOBAL_OFFSET_TABLE_ that only appeared if there
> were entries? If there's anything weird the easiest assumption is "SGI
> was weird".
> Sorry I couldn't be more help.