[edk2-devel] [PATCH v4 1/6] BaseTools/tools_def CLANGDWARF: Permit text relocations

Rebecca Cran rebecca at bsdio.com
Wed Apr 5 17:11:27 UTC 2023


Reviewed-by: Rebecca Cran <rebecca at bsdio.com>


-- 
Rebecca Cran


On 4/3/23 8:29 AM, Ard Biesheuvel wrote:
> We rely on PIE executables to get the codegen that is suitable for
> PE/COFF conversion where the resulting executables can be loaded
> anywhere in the address space.
>
> However, ELF linkers may default to disallowing text relocations in PIE
> executables, as this would require text segments to be updated at
> runtime, which is bad for security and increases the copy-on-write
> footprint of ELF executables and shared libraries.
>
> However, none of those concerns apply to PE/COFF executables in the
> context of EFI, which are copied into memory rather than mmap()'ed, and
> fixed up by the loader before launch.
>
> So pass -z notext to the LLD linker to permit runtime relocations in
> read-only sections.
>
> Signed-off-by: Ard Biesheuvel <ardb at kernel.org>
> ---
>   BaseTools/Conf/tools_def.template | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/BaseTools/Conf/tools_def.template b/BaseTools/Conf/tools_def.template
> index ae43101853870c6d..5a3af55bfb09d753 100755
> --- a/BaseTools/Conf/tools_def.template
> +++ b/BaseTools/Conf/tools_def.template
> @@ -2870,7 +2870,7 @@ DEFINE CLANGDWARF_X64_PREFIX        = ENV(CLANG_BIN)
>   DEFINE CLANGDWARF_IA32_X64_DLINK_COMMON   = -nostdlib -Wl,-q,--gc-sections -z max-page-size=0x40
>   DEFINE CLANGDWARF_DLINK2_FLAGS_COMMON     = -Wl,--script=$(EDK_TOOLS_PATH)/Scripts/ClangBase.lds
>   DEFINE CLANGDWARF_IA32_X64_ASLDLINK_FLAGS = DEF(CLANGDWARF_IA32_X64_DLINK_COMMON) -Wl,--defsym=PECOFF_HEADER_SIZE=0 DEF(CLANGDWARF_DLINK2_FLAGS_COMMON) -Wl,--entry,ReferenceAcpiTable -u ReferenceAcpiTable
> -DEFINE CLANGDWARF_IA32_X64_DLINK_FLAGS    = DEF(CLANGDWARF_IA32_X64_DLINK_COMMON) -Wl,--entry,$(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Wl,-Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map,--whole-archive
> +DEFINE CLANGDWARF_IA32_X64_DLINK_FLAGS    = DEF(CLANGDWARF_IA32_X64_DLINK_COMMON) -Wl,--entry,$(IMAGE_ENTRY_POINT) -u $(IMAGE_ENTRY_POINT) -Wl,-Map,$(DEST_DIR_DEBUG)/$(BASE_NAME).map,--whole-archive -Wl,-z,notext
>   DEFINE CLANGDWARF_IA32_DLINK2_FLAGS       = -Wl,--defsym=PECOFF_HEADER_SIZE=0x220 DEF(CLANGDWARF_DLINK2_FLAGS_COMMON)
>   DEFINE CLANGDWARF_X64_DLINK2_FLAGS        = -Wl,--defsym=PECOFF_HEADER_SIZE=0x228 DEF(CLANGDWARF_DLINK2_FLAGS_COMMON)
>   


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#102559): https://edk2.groups.io/g/devel/message/102559
Mute This Topic: https://groups.io/mt/98036437/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-




More information about the edk2-devel-archive mailing list