bug-binutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug gold/24286] New: Can't relocate protected-visibility reference agai


From: srk31 at srcf dot ucam.org
Subject: [Bug gold/24286] New: Can't relocate protected-visibility reference against a --defsym'd definition
Date: Fri, 01 Mar 2019 13:04:42 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=24286

            Bug ID: 24286
           Summary: Can't relocate protected-visibility reference against
                    a --defsym'd definition
           Product: binutils
           Version: 2.33 (HEAD)
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: gold
          Assignee: ccoutant at gmail dot com
          Reporter: srk31 at srcf dot ucam.org
                CC: ian at airs dot com
  Target Milestone: ---

Created attachment 11658
  --> https://sourceware.org/bugzilla/attachment.cgi?id=11658&action=edit
Test case

If I have an undefined symbol with protected visibility, I get an internal
gold error when attempting to relocate a reference to that symbol when
its definition is provided via --defsym. Example:

foo.c:
int foo(void)
{
        return 42;
}

uses-blah.c:
extern int blah(void) __attribute__((visibility("protected")));

int bar(void)
{
        return blah();
}

$ make foo.o uses-blah.o
...
$ cc -shared -o /dev/null uses-blah.o foo.o \
        -Wl,--defsym,blah=foo \
        -Wl,-fuse-ld=gold

The BFD linker happily processes this. But gold (as of git revision
cd5a152cebb201e98f3dbeca510aa39e838a1f62) bombs:

/usr/local/bin/ld.gold: internal error in relocate, at x86_64.cc:4802
collect2: error: ld returned 1 exit status

The failing assertion at x86_64.cc:4802 is this.

    case elfcpp::R_X86_64_PLT32:
    case elfcpp::R_X86_64_PLT32_BND:
      gold_assert(gsym == NULL
                  || gsym->has_plt_offset()
                  || gsym->final_value_is_known()
                  || (gsym->is_defined()
                      && !gsym->is_from_dynobj()
                      && !gsym->is_preemptible()));

(A valid question is: what is the purpose of making the undefined symbol
have protected visibility? Indeed nothing as far as I can tell... it
looks like I can work around the problem by tweaking my source code so
that I attach visibility only to the definition, not to declarations.)

Test case attached.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]