mirror of
https://github.com/acidanthera/audk.git
synced 2025-09-19 15:57:41 +02:00
It does 3 things: 1. Use separate linker file for clang vs GCC for RISCV64. 2. Use common page size instead of max page to ensure -z option align values are properly applied. 3. Enforce alignment for .entry segment as per -z option. When we want to have -z option aligned images, clang while alignes .text and .data segments correctly, .entry segment is by default not aligned unless explicitly specified. This patch makes it explicit to clang that entry seg should also be aligned to requirements. Somehow GCC does not require such explicit entry. Hence detachiong both ld files. Signed-off-by: Dhaval Sharma <dhaval@rivosinc.com>
93 lines
2.6 KiB
Plaintext
93 lines
2.6 KiB
Plaintext
/** @file
|
|
|
|
Unified linker script for CLANG based builds
|
|
|
|
Copyright (c) 2010 - 2021, 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;
|
|
|
|
.entry ALIGN(CONSTANT(COMMONPAGESIZE)) : {
|
|
KEEP(*(.entry))
|
|
}
|
|
|
|
.text : ALIGN(CONSTANT(COMMONPAGESIZE)) {
|
|
*(.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(COMMONPAGESIZE)) {
|
|
*(.data .data.* .gnu.linkonce.d.*)
|
|
*(.bss .bss.*)
|
|
}
|
|
|
|
.eh_frame ALIGN(CONSTANT(COMMONPAGESIZE)) : {
|
|
KEEP (*(.eh_frame))
|
|
}
|
|
|
|
.rela (INFO) : {
|
|
*(.rela .rela.*)
|
|
}
|
|
|
|
.hii : ALIGN(CONSTANT(COMMONPAGESIZE)) {
|
|
KEEP (*(.hii))
|
|
}
|
|
|
|
.got : {
|
|
*(.got)
|
|
}
|
|
ASSERT(SIZEOF(.got) == 0, "Unexpected GOT entries detected!")
|
|
|
|
.got.plt (INFO) : {
|
|
*(.got.plt)
|
|
}
|
|
ASSERT(SIZEOF(.got.plt) == 0 || SIZEOF(.got.plt) == 0xc || SIZEOF(.got.plt) == 0x18, "Unexpected GOT/PLT entries detected!")
|
|
|
|
/*
|
|
* 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)
|
|
*(.hash .gnu.hash)
|
|
*(.comment)
|
|
*(COMMON)
|
|
}
|
|
}
|