All AutoGen.obj files consist of global GUID definitions, fixed
and patchable PCDs and other data that is essentially read-only at
runtime but has not been declared as such for various reasons.

By moving these contents to .text we achieve two things:
- global GUIDs and other data items which must be constant for correct
  program operation can no longer be modified, for instance, when
  running a DXE_RUNTIME_MODULE binary under the OS with the Properties
  Table feature for memory protection enabled;
- the .data section becomes smaller, and may be dropped completely for
  many XIP modules, which reduces wasted FV space if the PE/COFF section
  alignment is large.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <>
Reviewed-by: Jordan Justen <>
Tested-by: Liming Gao <>
Tested-by: Leif Lindholm <>
 BaseTools/Scripts/ | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/BaseTools/Scripts/ b/BaseTools/Scripts/
index 3d99f01db21f..4ee6d998532c 100644
--- a/BaseTools/Scripts/
+++ b/BaseTools/Scripts/
@@ -29,6 +29,13 @@ SECTIONS {
     *(.text .text.* .stub .gnu.linkonce.t.*)
     *(.rodata .rodata.* .gnu.linkonce.r.*)
     *(.got .got.*)
+    /*
+     * The contents of AutoGen.c files are constant from the POV of the 
+     * but most of its contents end up in .data or .bss by default since few of
+     * the variable definitions that get emitted are declared as CONST.
+     */
+    *:AutoGen.obj(.data .data.* .bss .bss.*)

edk2-devel mailing list

Reply via email to