]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools GCC: add unified GCC linker script for all archs and versions
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Mon, 3 Aug 2015 08:22:28 +0000 (08:22 +0000)
committerabiesheuvel <abiesheuvel@Edk2>
Mon, 3 Aug 2015 08:22:28 +0000 (08:22 +0000)
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

BaseTools/Scripts/GccBase.lds [new file with mode: 0644]

diff --git a/BaseTools/Scripts/GccBase.lds b/BaseTools/Scripts/GccBase.lds
new file mode 100644 (file)
index 0000000..0f0210e
--- /dev/null
@@ -0,0 +1,63 @@
+/** @file\r
+\r
+  Unified linker script for GCC based builds\r
+\r
+  Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2015, Linaro Ltd. All rights reserved.<BR>\r
+\r
+  This program and the accompanying materials are licensed and made available under\r
+  the terms and conditions of the BSD License that accompanies this distribution.\r
+  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php.\r
+\r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+SECTIONS {\r
+\r
+  /*\r
+   * The PE/COFF binary consists of DOS and PE/COFF headers, and a sequence of\r
+   * section headers adding up to PECOFF_HEADER_SIZE bytes (which differs\r
+   * between 32-bit and 64-bit builds). The actual start of the .text section\r
+   * will be rounded up based on its actual alignment.\r
+   */\r
+  . = PECOFF_HEADER_SIZE;\r
+\r
+  .text : ALIGN(CONSTANT(COMMONPAGESIZE)) {\r
+    *(.text .text.* .stub .gnu.linkonce.t.*)\r
+    *(.rodata .rodata.* .gnu.linkonce.r.*)\r
+    *(.got .got.*)\r
+  }\r
+\r
+  /*\r
+   * The alignment of the .data section should be less than or equal to the\r
+   * alignment of the .text section. This ensures that the relative offset\r
+   * between these sections is the same in the ELF and the PE/COFF versions of\r
+   * this binary.\r
+   */\r
+  .data : ALIGN(CONSTANT(COMMONPAGESIZE)) {\r
+    *(.data .data.* .gnu.linkonce.d.*)\r
+    *(.bss .bss.* *COM*)\r
+  }\r
+\r
+  .eh_frame ALIGN(CONSTANT(COMMONPAGESIZE)) : {\r
+    KEEP (*(.eh_frame))\r
+  }\r
+\r
+  .rela ALIGN(CONSTANT(COMMONPAGESIZE)) : {\r
+    *(.rela .rela.*)\r
+  }\r
+\r
+  /DISCARD/ : {\r
+    *(.note.GNU-stack)\r
+    *(.gnu_debuglink)\r
+    *(.interp)\r
+    *(.dynsym)\r
+    *(.dynstr)\r
+    *(.dynamic)\r
+    *(.hash)\r
+    *(.comment)\r
+  }\r
+}\r