summaryrefslogtreecommitdiffstats
path: root/meta/recipes-core/ovmf/ovmf
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2021-05-09 16:53:07 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2021-05-11 11:54:26 +0100
commit8dcb68f477afd16d7729189b5a564ea9c1d0a333 (patch)
treee59651dca75ec0a85d47d288cda68a13a5d861ba /meta/recipes-core/ovmf/ovmf
parent20efb29a5d795ee0ca0d9b8491fe7b5b1ba1d51c (diff)
downloadpoky-8dcb68f477afd16d7729189b5a564ea9c1d0a333.tar.gz
ovmf: Improve reproducibility by enabling prefix mapping
We want to pass ${DEBUG_PREFIX_MAP} to gcc commands and also pass in --debug-prefix-map to nasm (we carry a patch to nasm for this). The tools definitions are built by ovmf-native so we need to pass this in at target build time when we know the right values. By using determininistc file paths in the ovmf build, it removes the opportunitity for gcc/ld to change the output binaries due to path lengths overflowing section sizes and causing small changes in the binary output. This also means that if builds have reproducibility issues in future, it becomes much easier to compare intermediate build artefacts. (From OE-Core rev: 51f51310d6d5cced2b55bf27dbb9a5717740a206) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-core/ovmf/ovmf')
-rw-r--r--meta/recipes-core/ovmf/ovmf/debug_prefix_map.patch93
1 files changed, 93 insertions, 0 deletions
diff --git a/meta/recipes-core/ovmf/ovmf/debug_prefix_map.patch b/meta/recipes-core/ovmf/ovmf/debug_prefix_map.patch
new file mode 100644
index 0000000000..0165fae7ce
--- /dev/null
+++ b/meta/recipes-core/ovmf/ovmf/debug_prefix_map.patch
@@ -0,0 +1,93 @@
1We want to pass ${DEBUG_PREFIX_MAP} to gcc commands and also pass in
2 --debug-prefix-map to nasm (we carry a patch to nasm for this). The
3tools definitions file is built by ovmf-native so we need to pass this in
4at target build time when we know the right values so we use the environment.
5
6By using determininistc file paths during the ovmf build, it removes the
7opportunitity for gcc/ld to change the output binaries due to path lengths
8overflowing section sizes and causing small changes in the binary output.
9Previously we relied on the stripped output being the same which isn't always
10the case if the size of the debug symbols varies.
11
12Upstream-Status: Pending [gcc parts may be upstreamable, nasm patch isn't upstream yet]
13Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
14
15
16Index: git/BaseTools/Conf/tools_def.template
17===================================================================
18--- git.orig/BaseTools/Conf/tools_def.template
19+++ git/BaseTools/Conf/tools_def.template
20@@ -1918,7 +1918,7 @@ NOOPT_*_*_OBJCOPY_ADDDEBUGFLAG = --a
21 *_*_*_DTCPP_PATH = DEF(DTCPP_BIN)
22 *_*_*_DTC_PATH = DEF(DTC_BIN)
23
24-DEFINE GCC_ALL_CC_FLAGS = -g -Os -fshort-wchar -fno-builtin -fno-strict-aliasing -Wall -Werror -Wno-array-bounds -include AutoGen.h -fno-common
25+DEFINE GCC_ALL_CC_FLAGS = -g -Os -fshort-wchar -fno-builtin -fno-strict-aliasing -Wall -Werror -Wno-array-bounds -include AutoGen.h -fno-common ENV(GCC_PREFIX_MAP)
26 DEFINE GCC_IA32_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -m32 -malign-double -freorder-blocks -freorder-blocks-and-partition -O2 -mno-stack-arg-probe
27 DEFINE GCC_X64_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -mno-red-zone -Wno-address -mno-stack-arg-probe
28 DEFINE GCC_ARM_CC_FLAGS = DEF(GCC_ALL_CC_FLAGS) -mlittle-endian -mabi=aapcs -fno-short-enums -funsigned-char -ffunction-sections -fdata-sections -fomit-frame-pointer -Wno-address -mthumb -mfloat-abi=soft -fno-pic -fno-pie
29@@ -1936,8 +1936,8 @@ DEFINE GCC_IA32_X64_ASLDLINK_FLAGS = -fu
30 DEFINE GCC_ARM_ASLDLINK_FLAGS = DEF(GCC_ARM_DLINK_FLAGS) -Wl,--entry,ReferenceAcpiTable -u $(IMAGE_ENTRY_POINT) DEF(GCC_ARM_AARCH64_ASLDLINK_FLAGS)
31 DEFINE GCC_AARCH64_ASLDLINK_FLAGS = DEF(GCC_AARCH64_DLINK_FLAGS) -Wl,--entry,ReferenceAcpiTable -u $(IMAGE_ENTRY_POINT) DEF(GCC_ARM_AARCH64_ASLDLINK_FLAGS)
32 DEFINE GCC_IA32_X64_DLINK_FLAGS = DEF(GCC_IA32_X64_DLINK_COMMON) --entry _$(IMAGE_ENTRY_POINT) --file-alignment 0x20 --section-alignment 0x20 -Map $(DEST_DIR_DEBUG)/$(BASE_NAME).map
33-DEFINE GCC_ASM_FLAGS = -c -x assembler -imacros AutoGen.h
34-DEFINE GCC_PP_FLAGS = -E -x assembler-with-cpp -include AutoGen.h
35+DEFINE GCC_ASM_FLAGS = -c -x assembler -imacros AutoGen.h ENV(GCC_PREFIX_MAP)
36+DEFINE GCC_PP_FLAGS = -E -x assembler-with-cpp -include AutoGen.h ENV(GCC_PREFIX_MAP)
37 DEFINE GCC_VFRPP_FLAGS = -x c -E -P -DVFRCOMPILE --include $(MODULE_NAME)StrDefs.h
38 DEFINE GCC_ASLPP_FLAGS = -x c -E -include AutoGen.h
39 DEFINE GCC_ASLCC_FLAGS = -x c
40@@ -2082,7 +2082,7 @@ DEFINE GCC_PP_FLAGS
41 *_GCC48_IA32_DLINK2_FLAGS = DEF(GCC48_IA32_DLINK2_FLAGS)
42 *_GCC48_IA32_RC_FLAGS = DEF(GCC_IA32_RC_FLAGS)
43 *_GCC48_IA32_OBJCOPY_FLAGS =
44-*_GCC48_IA32_NASM_FLAGS = -f elf32
45+*_GCC48_IA32_NASM_FLAGS = -f elf32 ENV(NASM_PREFIX_MAP)
46
47 DEBUG_GCC48_IA32_CC_FLAGS = DEF(GCC48_IA32_CC_FLAGS) -Os
48 RELEASE_GCC48_IA32_CC_FLAGS = DEF(GCC48_IA32_CC_FLAGS) -Os -Wno-unused-but-set-variable
49@@ -2110,7 +2110,7 @@ RELEASE_GCC48_IA32_CC_FLAGS = DEF(
50 *_GCC48_X64_DLINK2_FLAGS = DEF(GCC48_X64_DLINK2_FLAGS)
51 *_GCC48_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS)
52 *_GCC48_X64_OBJCOPY_FLAGS =
53-*_GCC48_X64_NASM_FLAGS = -f elf64
54+*_GCC48_X64_NASM_FLAGS = -f elf64 ENV(NASM_PREFIX_MAP)
55
56 DEBUG_GCC48_X64_CC_FLAGS = DEF(GCC48_X64_CC_FLAGS) -Os
57 RELEASE_GCC48_X64_CC_FLAGS = DEF(GCC48_X64_CC_FLAGS) -Os -Wno-unused-but-set-variable
58@@ -2222,7 +2222,7 @@ RELEASE_GCC48_AARCH64_CC_FLAGS = DEF(G
59 *_GCC49_IA32_DLINK2_FLAGS = DEF(GCC49_IA32_DLINK2_FLAGS)
60 *_GCC49_IA32_RC_FLAGS = DEF(GCC_IA32_RC_FLAGS)
61 *_GCC49_IA32_OBJCOPY_FLAGS =
62-*_GCC49_IA32_NASM_FLAGS = -f elf32
63+*_GCC49_IA32_NASM_FLAGS = -f elf32 ENV(NASM_PREFIX_MAP)
64
65 DEBUG_GCC49_IA32_CC_FLAGS = DEF(GCC49_IA32_CC_FLAGS) -Os
66 RELEASE_GCC49_IA32_CC_FLAGS = DEF(GCC49_IA32_CC_FLAGS) -Os -Wno-unused-but-set-variable -Wno-unused-const-variable
67@@ -2250,7 +2250,7 @@ RELEASE_GCC49_IA32_CC_FLAGS = DEF(
68 *_GCC49_X64_DLINK2_FLAGS = DEF(GCC49_X64_DLINK2_FLAGS)
69 *_GCC49_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS)
70 *_GCC49_X64_OBJCOPY_FLAGS =
71-*_GCC49_X64_NASM_FLAGS = -f elf64
72+*_GCC49_X64_NASM_FLAGS = -f elf64 ENV(NASM_PREFIX_MAP)
73
74 DEBUG_GCC49_X64_CC_FLAGS = DEF(GCC49_X64_CC_FLAGS) -Os
75 RELEASE_GCC49_X64_CC_FLAGS = DEF(GCC49_X64_CC_FLAGS) -Os -Wno-unused-but-set-variable -Wno-unused-const-variable
76@@ -2368,7 +2368,7 @@ RELEASE_GCC49_AARCH64_DLINK_XIPFLAGS = -
77 *_GCC5_IA32_DLINK2_FLAGS = DEF(GCC5_IA32_DLINK2_FLAGS) -no-pie
78 *_GCC5_IA32_RC_FLAGS = DEF(GCC_IA32_RC_FLAGS)
79 *_GCC5_IA32_OBJCOPY_FLAGS =
80-*_GCC5_IA32_NASM_FLAGS = -f elf32
81+*_GCC5_IA32_NASM_FLAGS = -f elf32 ENV(NASM_PREFIX_MAP)
82
83 DEBUG_GCC5_IA32_CC_FLAGS = DEF(GCC5_IA32_CC_FLAGS) -flto -Os
84 DEBUG_GCC5_IA32_DLINK_FLAGS = DEF(GCC5_IA32_X64_DLINK_FLAGS) -flto -Os -Wl,-m,elf_i386,--oformat=elf32-i386
85@@ -2400,7 +2400,7 @@ RELEASE_GCC5_IA32_DLINK_FLAGS = DEF(G
86 *_GCC5_X64_DLINK2_FLAGS = DEF(GCC5_X64_DLINK2_FLAGS)
87 *_GCC5_X64_RC_FLAGS = DEF(GCC_X64_RC_FLAGS)
88 *_GCC5_X64_OBJCOPY_FLAGS =
89-*_GCC5_X64_NASM_FLAGS = -f elf64
90+*_GCC5_X64_NASM_FLAGS = -f elf64 ENV(NASM_PREFIX_MAP)
91
92 DEBUG_GCC5_X64_CC_FLAGS = DEF(GCC5_X64_CC_FLAGS) -flto -DUSING_LTO -Os
93 DEBUG_GCC5_X64_DLINK_FLAGS = DEF(GCC5_X64_DLINK_FLAGS) -flto -Os