mirror of https://github.com/acidanthera/audk.git
BaseTools GCC: add unified GCC linker script for all archs and versions
This unifies all GCC linker scripts into a single parametrised GCC linker script that can be used for all GCC versions and architectures. The two parameters that can be set on the linker command line are: - PECOFF_HEADER_SIZE, this is a build time property of GenFw, but its value is different between 32-bit and 64-bit; - common-page-size, this can be set using -z on the ld command line, and controls the value of the COMMONPAGESIZE constant when used in a linker script. This value is used for the minimum section alignment. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> Tested-by: Liming Gao <liming.gao@intel.com> Tested-by: Leif Lindholm <leif.lindholm@linaro.org> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18135 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
c28a4ab663
commit
efe690cab3
|
@ -0,0 +1,63 @@
|
|||
/** @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>
|
||||
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
the terms and conditions of the BSD License that accompanies this distribution.
|
||||
The full text of the license may be found at
|
||||
http://opensource.org/licenses/bsd-license.php.
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
**/
|
||||
|
||||
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(COMMONPAGESIZE)) {
|
||||
*(.text .text.* .stub .gnu.linkonce.t.*)
|
||||
*(.rodata .rodata.* .gnu.linkonce.r.*)
|
||||
*(.got .got.*)
|
||||
}
|
||||
|
||||
/*
|
||||
* 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(CONSTANT(COMMONPAGESIZE)) {
|
||||
*(.data .data.* .gnu.linkonce.d.*)
|
||||
*(.bss .bss.* *COM*)
|
||||
}
|
||||
|
||||
.eh_frame ALIGN(CONSTANT(COMMONPAGESIZE)) : {
|
||||
KEEP (*(.eh_frame))
|
||||
}
|
||||
|
||||
.rela ALIGN(CONSTANT(COMMONPAGESIZE)) : {
|
||||
*(.rela .rela.*)
|
||||
}
|
||||
|
||||
/DISCARD/ : {
|
||||
*(.note.GNU-stack)
|
||||
*(.gnu_debuglink)
|
||||
*(.interp)
|
||||
*(.dynsym)
|
||||
*(.dynstr)
|
||||
*(.dynamic)
|
||||
*(.hash)
|
||||
*(.comment)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue