summaryrefslogtreecommitdiffstats
path: root/BaseTools/Scripts
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2017-02-23 18:30:51 +0000
committerLaszlo Ersek <lersek@redhat.com>2017-02-24 11:27:56 +0100
commit3cf41b8728a39d1e0d3ee7ae1a1be5f4ecf3b8d9 (patch)
treef3ea1e072d04f99871b4025e770982cb2e0ef489 /BaseTools/Scripts
parent37322be5bc8a8196335669c67b7a2fbf529a7f1c (diff)
downloadedk2-3cf41b8728a39d1e0d3ee7ae1a1be5f4ecf3b8d9.tar.gz
edk2-3cf41b8728a39d1e0d3ee7ae1a1be5f4ecf3b8d9.tar.bz2
edk2-3cf41b8728a39d1e0d3ee7ae1a1be5f4ecf3b8d9.zip
BaseTools: GCC: move most AutoGen.obj contents back to .data section
The generated AutoGen.c files mostly contain read-only data, but due to lacking annotations, all of it is emitted into the .data section by the compiler. Given that GUIDs are UEFI's gaffer tape, having writable GUIDs is a security hazard, and this was the main rationale for putting AutoGen.obj in the .text section. However, as it turns out, patchable PCDs are emitted there as well, which can legally be modified at runtime. So update the wildcard pattern to only match g...Guid sections, and move everything else back to .data (Note that this relies on -fdata-sections, without that option, everything is emitted into .data) Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Tested-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Liming Gao <liming.gao@intel.com> Fixes: 233bd25b000f92fc4bbe181fa48edcd72808de8e [lersek@redhat.com: add reference to previous commit being fixed up] Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Diffstat (limited to 'BaseTools/Scripts')
-rw-r--r--BaseTools/Scripts/GccBase.lds9
1 files changed, 6 insertions, 3 deletions
diff --git a/BaseTools/Scripts/GccBase.lds b/BaseTools/Scripts/GccBase.lds
index 9008487471..41e5c0b4a7 100644
--- a/BaseTools/Scripts/GccBase.lds
+++ b/BaseTools/Scripts/GccBase.lds
@@ -32,11 +32,14 @@ SECTIONS {
*(.got .got.*)
/*
- * The contents of AutoGen.c files are constant from the POV of the program,
- * but most of its contents end up in .data or .bss by default since few of
+ * 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 .data.* .bss .bss.*)
+ *:AutoGen.obj(.data.g*Guid)
}
/*