Fwd: Referring to a specific symbol in a static library with gold
Pierre Olivier
polivier@vt.edu
Fri Aug 4 01:17:00 GMT 2017
More information about the Binutils mailing list
Fri Aug 4 01:17:00 GMT 2017
- Previous message (by thread): Referring to a specific symbol in a static library with gold
- Next message (by thread): [PATCH] x86: Don't call strncmp for __tls_get_addr
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Thanks a lot Cary, your suggestion of using the quotes worked perfectly. I previously tried using the parenthesis and as I did not thought about quoting the spelling, I got a parsing error from gold. Thanks also for the clarification about -ffunctions-sections, the static musl libc.a is indeed compiled with this option. Thanks again! Pierre On Thu, Aug 3, 2017 at 7:16 PM, Cary Coutant <ccoutant@gmail.com> wrote: > > > 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
- Previous message (by thread): Referring to a specific symbol in a static library with gold
- Next message (by thread): [PATCH] x86: Don't call strncmp for __tls_get_addr
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list