On 2 August 2016 at 04:49, Gao, Liming <[email protected]> wrote: > Reviewed-by: Liming Gao <[email protected]> >
Thanks Pushed as 28ade7b802e0 -- Ard. >> -----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

