> On 14. Apr 2023, at 16:57, Ard Biesheuvel <a...@kernel.org> wrote:
> 
> On Fri, 14 Apr 2023 at 16:37, Gerd Hoffmann <kra...@redhat.com> wrote:
>> 
>>> On Fri, Apr 14, 2023 at 12:29:21PM +0000, Marvin Häuser wrote:
>>> Hi Gerd,
>>> 
>>> Thanks for your effort!
>>> 
>>> Sorry, but I *really* dislike this “BASETOOLS” notion. There might be
>>> external tools that also want to use the header (like we do with AUDK)
>>> and also edk2 supports host-based unit tests. Imo the macro name
>>> should be generic, like “HOST_OS” or “USERLAND” or something (I’m bad
>>> with names :) ).
>> 
>> I'm certainly open to better naming ideas.
>> 
>> Underlying problem is that x64 ProcessorBind.h sets visibility to
>> hidden (anyone knows why?).
> 
> Yes. Toolchains tend to assume that you are generating code for a
> shared library once you enabled -fpic, and this results in lots of
> pointless indirections via the GOT.

Unless Safari search is borked (this indeed sometimes happens, I swear :-) ), 
-fpic is never passed, only -fpie. Should be mostly preemption, I guess.

> (This has to do with the
> copy-on-write footprint of shared library pages, as a GOT tends to
> gather all relocated quantities in a small region of memory. It is
> also related to ELF symbol preemption, which is another thing we don't
> give a ^$& about).
> 
> *However*, recent linkers do a better job getting rid of these GOT
> references at link time, once you pass the --relax option. On X64 in
> particular, there are special, relaxable GOTPCREL relocations now that
> will not result in to symbol references via the GOT if the linker
> notices that the symbol in question is never preempted and not
> provided externally.
> 
> So it is worth an experiment whether we still need this to begin with.
> 
>> Seems to be fine for freestanding binaries,
>> but when linking host tools against shared libraries things break.  For
>> some reason on ubuntu only, fedora works fine (both gcc and clang).
>> 
>> Automatically detecting freestanding vs. hosted would be even better,
>> anyone knows whenever there is a define which can be used for this?  At
>> least the gcc man page doesn't mention any ...
>> 
> 
> ard@gambale:~/linux-build-x86$ gcc -dM -E -o - -xc - <<< ""|grep HOSTED
> #define __STDC_HOSTED__ 1
> ard@gambale:~/linux-build-x86$ gcc -ffreestanding -dM -E -o - -xc -
> <<< ""|grep HOSTED
> #define __STDC_HOSTED__ 0

You are godsend. :)

Best regards,
Marvin


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#103009): https://edk2.groups.io/g/devel/message/103009
Mute This Topic: https://groups.io/mt/98257896/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to