Skip to content

Commit

Permalink
BaseTools: Add ClangBase.lds for CLANG8 tool chain with max-page-size
Browse files Browse the repository at this point in the history
LLVM LLD linker doesn't support common-page-size option. So, max-page-size
is used. To not impact GCC tool chain, new ClangBase.lds is added.

Signed-off-by: Liming Gao <[email protected]>
Reviewed-by: Feng Bob C <[email protected]>
  • Loading branch information
lgao4 authored and mergify[bot] committed Jun 4, 2021
1 parent c410ad4 commit c1aa3ba
Showing 1 changed file with 79 additions and 0 deletions.
79 changes: 79 additions & 0 deletions BaseTools/Scripts/ClangBase.lds
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
/** @file

Unified linker script for GCC based builds

Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2015, Linaro Ltd. All rights reserved.<BR>
(C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>

SPDX-License-Identifier: BSD-2-Clause-Patent

**/

SECTIONS {

/*
* The PE/COFF binary consists of DOS and PE/COFF headers, and a sequence of
* section headers adding up to PECOFF_HEADER_SIZE bytes (which differs
* between 32-bit and 64-bit builds). The actual start of the .text section
* will be rounded up based on its actual alignment.
*/
. = PECOFF_HEADER_SIZE;

.text : ALIGN(CONSTANT(MAXPAGESIZE)) {
*(.text .text.* .stub .gnu.linkonce.t.*)
*(.rodata .rodata.* .gnu.linkonce.r.*)
*(.got .got.*)

/*
* The contents of AutoGen.c files are mostly constant from the POV of the
* program, but most of it ends up in .data or .bss by default since few of
* the variable definitions that get emitted are declared as CONST.
* Unfortunately, we cannot pull it into the .text section entirely, since
* patchable PCDs are also emitted here, but we can at least move all of the
* emitted GUIDs here.
*/
*:AutoGen.obj(.data.g*Guid)
}

/*
* The alignment of the .data section should be less than or equal to the
* alignment of the .text section. This ensures that the relative offset
* between these sections is the same in the ELF and the PE/COFF versions of
* this binary.
*/
.data ALIGN(ALIGNOF(.text)) : ALIGN(CONSTANT(MAXPAGESIZE)) {
*(.data .data.* .gnu.linkonce.d.*)
*(.bss .bss.*)
}

.eh_frame ALIGN(CONSTANT(MAXPAGESIZE)) : {
KEEP (*(.eh_frame))
}

.rela (INFO) : {
*(.rela .rela.*)
}

.hii : ALIGN(CONSTANT(MAXPAGESIZE)) {
KEEP (*(.hii))
}

/*
* Retain the GNU build id but in a non-allocatable section so GenFw
* does not copy it into the PE/COFF image.
*/
.build-id (INFO) : { *(.note.gnu.build-id) }

/DISCARD/ : {
*(.note.GNU-stack)
*(.gnu_debuglink)
*(.interp)
*(.dynsym)
*(.dynstr)
*(.dynamic)
*(.hash .gnu.hash)
*(.comment)
*(COMMON)
}
}

0 comments on commit c1aa3ba

Please sign in to comment.