This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Referring to a specific symbol in a static library with gold


> When laying out symbols in the address space using a linker script, ld allows to
> refer to a specific symbol coming from a specific object file inside a static
> library with the following syntax:
>
> archive.a:object_file.o(.section.symbol_name)

That isn't quite what that syntax means. When you see
".section.symbol_name" in the linker script (or in a readelf or
objdump list of sections), that is the whole name of the section, and
you'll only see sections with names like that if you use the
-ffunction-sections option when compiling. Given that your script
works with ld, and if you just use the full filename wild card with
gold, it looks like your musl libraries were indeed compiled with
-ffunction-sections, but that's not something you can always assume is
true for system libraries. So the linker isn't really searching for a
section named ".text" that defines a symbol named "exit" -- instead,
it's simply looking for a section named ".text.exit". Subtle
difference, but you should be aware of it.

> Now, while neither of these work with gold:
> musl/lib/libc.a:exit.o(.text.exit);
> musl/lib/libc.a(.text.exit);
>
> This works:
> *(.text.exit);
>
> Is that a missing feature in gold? or am I doing something wrong, maybe there is
> another way to refer to a specific symbol of a specific object file in an
> archive using gold?

If you look at the resulting -Map output file, I suspect you'll see
the name of the object file is written as "musl/lib/libc.a(exit.o)".
That's the spelling you need to use in the script, and because of the
parentheses, you need to quote it. This:

  "musl/lib/libc.a(exit.o)"(.text.exit)

should work. If you want something that will work in both linkers, try
something like this:

  "musl/lib/libc.a*exit.o*"(.text.exit)

or just

  "*exit.o*"(.text.exit)

-cary


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]