Reviewed-by: Liming Gao <[email protected]> > -----Original Message----- > From: Ard Biesheuvel [mailto:[email protected]] > Sent: Monday, August 01, 2016 2:57 PM > To: Shi, Steven <[email protected]>; Zhu, Yonghong > <[email protected]>; Gao, Liming <[email protected]>; Justen, > Jordan L <[email protected]>; [email protected] > Cc: Ard Biesheuvel <[email protected]> > Subject: [PATCH] MdePkg: move to 'hidden' visibility for all symbols under > GCC/X64 > > When using GCC to build for X64, we switched to the position independent > small code model, which is much more efficient in terms of code generation > and runtime relocation footprint, and produces binaries that can execute > correctly from any offset. > > However, the PIC routines are by default geared towards hosted binaries > containing symbol references that may resolve to definitions in other > dynamic objects, and for this reason, external symbol references are > indirected via a GOT entry by default (which also results in a .reloc fixup > entry) unless we annotate them. > > For this reason, we introduced the 'protected' visibility annotation for > all symbol definitions and references, by setting the GCC visibility > pragma. However, as it turns out, this is not sufficient for all versions > of GCC, and in some cases (GCC 5.x using the GCC49 toolchain tag), may > still result in GOT based relocations. > > So switch to 'hidden' visibility instead, which is slightly stronger, and > fixes this issue for the versions of GCC that exhibit the problem. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Ard Biesheuvel <[email protected]> > --- > MdePkg/Include/X64/ProcessorBind.h | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/MdePkg/Include/X64/ProcessorBind.h > b/MdePkg/Include/X64/ProcessorBind.h > index a4aad3e524e8..666cc8e8bd16 100644 > --- a/MdePkg/Include/X64/ProcessorBind.h > +++ b/MdePkg/Include/X64/ProcessorBind.h > @@ -29,12 +29,12 @@ > > #if defined(__GNUC__) && defined(__pic__) > // > -// Mark all symbol declarations and references as protected, meaning they > will > +// Mark all symbol declarations and references as hidden, meaning they will > // not be subject to symbol preemption. This allows the compiler to refer to > // symbols directly using relative references rather than via the GOT, which > // contains absolute symbol addresses that are subject to runtime relocation. > // > -#pragma GCC visibility push (protected) > +#pragma GCC visibility push (hidden) > #endif > > #if defined(__INTEL_COMPILER) > -- > 2.7.4
_______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

