public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Marvin Häuser" <mhaeuser@posteo.de>
To: devel@edk2.groups.io, afish@apple.com
Cc: Bob Feng <bob.c.feng@intel.com>,
	Liming Gao <gaoliming@byosoft.com.cn>,
	Yuwei Chen <yuwei.chen@intel.com>,
	Vitaly Cheptsov <vit9696@protonmail.com>
Subject: Re: [edk2-devel] [PATCH v2 1/2] BaseTools: Define the read-only data section name per toolchain
Date: Tue, 10 Aug 2021 08:27:57 +0000	[thread overview]
Message-ID: <b54335fa-eec3-c6d4-ffc0-a3574562d5e1@posteo.de> (raw)
In-Reply-To: <7787F470-EEE0-4E13-93C1-508844167749@apple.com>

On 10/08/2021 06:19, Andrew Fish via groups.io wrote:
>
>
>> On Aug 9, 2021, at 2:51 AM, Marvin Häuser <mhaeuser@posteo.de 
>> <mailto:mhaeuser@posteo.de>> wrote:
>>
>> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3318 
>> <https://bugzilla.tianocore.org/show_bug.cgi?id=3318>
>>
>> Different toolchains of the EDK II build system may generate ELF or
>> Mach-O files, which use the ".rodata" naming convention, or PE/COFF
>> files, which use the ".rdata" naming convention. Section permissions
>> are chosen based on this name per file format by NASM. To harden
>> image permission security, and to save space by avoiding both
>> ".rdata" and ".rodata" sections being emitted, expose the appropriate
>> name as a preprocessor constant.
>>
>> Cc: Bob Feng <bob.c.feng@intel.com <mailto:bob.c.feng@intel.com>>
>> Cc: Liming Gao <gaoliming@byosoft.com.cn 
>> <mailto:gaoliming@byosoft.com.cn>>
>> Cc: Yuwei Chen <yuwei.chen@intel.com <mailto:yuwei.chen@intel.com>>
>> Cc: Vitaly Cheptsov <vit9696@protonmail.com 
>> <mailto:vit9696@protonmail.com>>
>> Signed-off-by: Marvin Häuser <mhaeuser@posteo.de 
>> <mailto:mhaeuser@posteo.de>>
>> ---
>> BaseTools/Conf/tools_def.template | 172 ++++++++++----------
>> 1 file changed, 86 insertions(+), 86 deletions(-)
>>
>> diff --git a/BaseTools/Conf/tools_def.template 
>> b/BaseTools/Conf/tools_def.template
>> index 2e6b382ab623..84d464916c4d 100755
>> --- a/BaseTools/Conf/tools_def.template
>> +++ b/BaseTools/Conf/tools_def.template
>> @@ -463,9 +463,9 @@ NOOPT_VS2008_IA32_CC_FLAGS        = /nologo /c 
>> /WX /GS- /W4 /Gs32768 /D UNICODE
>> RELEASE_VS2008_IA32_ASM_FLAGS     = /nologo /c /WX /W3 /Cx /coff /Zd
>>
>> NOOPT_VS2008_IA32_ASM_FLAGS       = /nologo /c /WX /W3 /Cx /coff /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2008_IA32_NASM_FLAGS    = -Ox -f win32 -g
>>
>> -RELEASE_VS2008_IA32_NASM_FLAGS    = -Ox -f win32
>>
>> -NOOPT_VS2008_IA32_NASM_FLAGS      = -O0 -f win32 -g
>>
>> +  DEBUG_VS2008_IA32_NASM_FLAGS    = -Ox -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2008_IA32_NASM_FLAGS    = -Ox -f win32 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2008_IA32_NASM_FLAGS      = -O0 -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2008_IA32_DLINK_FLAGS   = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2008_IA32_DLINK_FLAGS   = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -495,9 +495,9 @@ NOOPT_VS2008_X64_CC_FLAGS       = /nologo /c /WX 
>> /GS- /W4 /Gs32768 /D UNICODE /G
>> RELEASE_VS2008_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd
>>
>> NOOPT_VS2008_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2008_X64_NASM_FLAGS   = -Ox -f win64 -g
>>
>> -RELEASE_VS2008_X64_NASM_FLAGS   = -Ox -f win64
>>
>> -NOOPT_VS2008_X64_NASM_FLAGS     = -O0 -f win64 -g
>>
>> +  DEBUG_VS2008_X64_NASM_FLAGS   = -Ox -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2008_X64_NASM_FLAGS   = -Ox -f win64 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2008_X64_NASM_FLAGS     = -O0 -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2008_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2008_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER 
>> /MERGE:.rdata=.data
>>
>> @@ -574,9 +574,9 @@ NOOPT_VS2008x86_IA32_CC_FLAGS      = /nologo /c 
>> /WX /GS- /W4 /Gs32768 /D UNICODE
>> RELEASE_VS2008x86_IA32_ASM_FLAGS   = /nologo /c /WX /W3 /Cx /coff /Zd
>>
>> NOOPT_VS2008x86_IA32_ASM_FLAGS     = /nologo /c /WX /W3 /Cx /coff /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2008x86_IA32_NASM_FLAGS  = -Ox -f win32 -g
>>
>> -RELEASE_VS2008x86_IA32_NASM_FLAGS  = -Ox -f win32
>>
>> -NOOPT_VS2008x86_IA32_NASM_FLAGS    = -O0 -f win32 -g
>>
>> +  DEBUG_VS2008x86_IA32_NASM_FLAGS  = -Ox -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2008x86_IA32_NASM_FLAGS  = -Ox -f win32 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2008x86_IA32_NASM_FLAGS    = -O0 -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2008x86_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2008x86_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -605,9 +605,9 @@ NOOPT_VS2008x86_X64_CC_FLAGS       = /nologo /c 
>> /WX /GS- /W4 /Gs32768 /D UNICODE
>> RELEASE_VS2008x86_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd
>>
>> NOOPT_VS2008x86_X64_ASM_FLAGS      = /nologo /c /WX /W3 /Cx /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2008x86_X64_NASM_FLAGS   = -Ox -f win64 -g
>>
>> -RELEASE_VS2008x86_X64_NASM_FLAGS   = -Ox -f win64
>>
>> -NOOPT_VS2008x86_X64_NASM_FLAGS     = -O0 -f win64 -g
>>
>> +  DEBUG_VS2008x86_X64_NASM_FLAGS   = -Ox -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2008x86_X64_NASM_FLAGS   = -Ox -f win64 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2008x86_X64_NASM_FLAGS     = -O0 -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2008x86_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2008x86_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -688,9 +688,9 @@ NOOPT_VS2010_IA32_CC_FLAGS        = /nologo /c 
>> /WX /GS- /W4 /Gs32768 /D UNICODE
>> RELEASE_VS2010_IA32_ASM_FLAGS     = /nologo /c /WX /W3 /Cx /coff /Zd
>>
>> NOOPT_VS2010_IA32_ASM_FLAGS       = /nologo /c /WX /W3 /Cx /coff /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2010_IA32_NASM_FLAGS    = -Ox -f win32 -g
>>
>> -RELEASE_VS2010_IA32_NASM_FLAGS    = -Ox -f win32
>>
>> -NOOPT_VS2010_IA32_NASM_FLAGS      = -O0 -f win32 -g
>>
>> +  DEBUG_VS2010_IA32_NASM_FLAGS    = -Ox -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2010_IA32_NASM_FLAGS    = -Ox -f win32 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2010_IA32_NASM_FLAGS      = -O0 -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2010_IA32_DLINK_FLAGS   = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2010_IA32_DLINK_FLAGS   = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -720,9 +720,9 @@ NOOPT_VS2010_X64_CC_FLAGS       = /nologo /c /WX 
>> /GS- /W4 /Gs32768 /D UNICODE /G
>> RELEASE_VS2010_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd
>>
>> NOOPT_VS2010_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2010_X64_NASM_FLAGS   = -Ox -f win64 -g
>>
>> -RELEASE_VS2010_X64_NASM_FLAGS   = -Ox -f win64
>>
>> -NOOPT_VS2010_X64_NASM_FLAGS     = -O0 -f win64 -g
>>
>> +  DEBUG_VS2010_X64_NASM_FLAGS   = -Ox -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2010_X64_NASM_FLAGS   = -Ox -f win64 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2010_X64_NASM_FLAGS     = -O0 -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2010_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2010_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER 
>> /MERGE:.rdata=.data
>>
>> @@ -799,9 +799,9 @@ NOOPT_VS2010x86_IA32_CC_FLAGS      = /nologo /c 
>> /WX /GS- /W4 /Gs32768 /D UNICODE
>> RELEASE_VS2010x86_IA32_ASM_FLAGS   = /nologo /c /WX /W3 /Cx /coff /Zd
>>
>> NOOPT_VS2010x86_IA32_ASM_FLAGS     = /nologo /c /WX /W3 /Cx /coff /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2010x86_IA32_NASM_FLAGS  = -Ox -f win32 -g
>>
>> -RELEASE_VS2010x86_IA32_NASM_FLAGS  = -Ox -f win32
>>
>> -NOOPT_VS2010x86_IA32_NASM_FLAGS    = -O0 -f win32 -g
>>
>> +  DEBUG_VS2010x86_IA32_NASM_FLAGS  = -Ox -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2010x86_IA32_NASM_FLAGS  = -Ox -f win32 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2010x86_IA32_NASM_FLAGS    = -O0 -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2010x86_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2010x86_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -831,9 +831,9 @@ NOOPT_VS2010x86_X64_CC_FLAGS       = /nologo /c 
>> /WX /GS- /W4 /Gs32768 /D UNICODE
>> RELEASE_VS2010x86_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd
>>
>> NOOPT_VS2010x86_X64_ASM_FLAGS      = /nologo /c /WX /W3 /Cx /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2010x86_X64_NASM_FLAGS   = -Ox -f win64 -g
>>
>> -RELEASE_VS2010x86_X64_NASM_FLAGS   = -Ox -f win64
>>
>> -NOOPT_VS2010x86_X64_NASM_FLAGS     = -O0 -f win64 -g
>>
>> +  DEBUG_VS2010x86_X64_NASM_FLAGS   = -Ox -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2010x86_X64_NASM_FLAGS   = -Ox -f win64 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2010x86_X64_NASM_FLAGS     = -O0 -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2010x86_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2010x86_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -913,9 +913,9 @@ NOOPT_VS2012_IA32_CC_FLAGS        = /nologo 
>> /arch:IA32 /c /WX /GS- /W4 /Gs32768
>> RELEASE_VS2012_IA32_ASM_FLAGS     = /nologo /c /WX /W3 /Cx /coff /Zd
>>
>> NOOPT_VS2012_IA32_ASM_FLAGS       = /nologo /c /WX /W3 /Cx /coff /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2012_IA32_NASM_FLAGS    = -Ox -f win32 -g
>>
>> -RELEASE_VS2012_IA32_NASM_FLAGS    = -Ox -f win32
>>
>> -NOOPT_VS2012_IA32_NASM_FLAGS      = -O0 -f win32 -g
>>
>> +  DEBUG_VS2012_IA32_NASM_FLAGS    = -Ox -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2012_IA32_NASM_FLAGS    = -Ox -f win32 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2012_IA32_NASM_FLAGS      = -O0 -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2012_IA32_DLINK_FLAGS   = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2012_IA32_DLINK_FLAGS   = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -945,9 +945,9 @@ NOOPT_VS2012_X64_CC_FLAGS       = /nologo /c /WX 
>> /GS- /W4 /Gs32768 /D UNICODE /G
>> RELEASE_VS2012_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd
>>
>> NOOPT_VS2012_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2012_X64_NASM_FLAGS   = -Ox -f win64 -g
>>
>> -RELEASE_VS2012_X64_NASM_FLAGS   = -Ox -f win64
>>
>> -NOOPT_VS2012_X64_NASM_FLAGS     = -O0 -f win64 -g
>>
>> +  DEBUG_VS2012_X64_NASM_FLAGS   = -Ox -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2012_X64_NASM_FLAGS   = -Ox -f win64 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2012_X64_NASM_FLAGS     = -O0 -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2012_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2012_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER 
>> /MERGE:.rdata=.data
>>
>> @@ -1024,9 +1024,9 @@ NOOPT_VS2012x86_IA32_CC_FLAGS      = /nologo 
>> /arch:IA32 /c /WX /GS- /W4 /Gs32768
>> RELEASE_VS2012x86_IA32_ASM_FLAGS   = /nologo /c /WX /W3 /Cx /coff /Zd
>>
>> NOOPT_VS2012x86_IA32_ASM_FLAGS     = /nologo /c /WX /W3 /Cx /coff /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2012x86_IA32_NASM_FLAGS  = -Ox -f win32 -g
>>
>> -RELEASE_VS2012x86_IA32_NASM_FLAGS  = -Ox -f win32
>>
>> -NOOPT_VS2012x86_IA32_NASM_FLAGS    = -O0 -f win32 -g
>>
>> +  DEBUG_VS2012x86_IA32_NASM_FLAGS  = -Ox -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2012x86_IA32_NASM_FLAGS  = -Ox -f win32 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2012x86_IA32_NASM_FLAGS    = -O0 -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2012x86_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2012x86_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -1056,9 +1056,9 @@ NOOPT_VS2012x86_X64_CC_FLAGS       = /nologo /c 
>> /WX /GS- /W4 /Gs32768 /D UNICODE
>> RELEASE_VS2012x86_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd
>>
>> NOOPT_VS2012x86_X64_ASM_FLAGS      = /nologo /c /WX /W3 /Cx /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2012x86_X64_NASM_FLAGS   = -Ox -f win64 -g
>>
>> -RELEASE_VS2012x86_X64_NASM_FLAGS   = -Ox -f win64
>>
>> -NOOPT_VS2012x86_X64_NASM_FLAGS     = -O0 -f win64 -g
>>
>> +  DEBUG_VS2012x86_X64_NASM_FLAGS   = -Ox -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2012x86_X64_NASM_FLAGS   = -Ox -f win64 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2012x86_X64_NASM_FLAGS     = -O0 -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2012x86_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2012x86_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -1138,9 +1138,9 @@ NOOPT_VS2013_IA32_CC_FLAGS        = /nologo 
>> /arch:IA32 /c /WX /GS- /W4 /Gs32768
>> RELEASE_VS2013_IA32_ASM_FLAGS     = /nologo /c /WX /W3 /Cx /coff /Zd
>>
>> NOOPT_VS2013_IA32_ASM_FLAGS       = /nologo /c /WX /W3 /Cx /coff /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2013_IA32_NASM_FLAGS    = -Ox -f win32 -g
>>
>> -RELEASE_VS2013_IA32_NASM_FLAGS    = -Ox -f win32
>>
>> -NOOPT_VS2013_IA32_NASM_FLAGS      = -O0 -f win32 -g
>>
>> +  DEBUG_VS2013_IA32_NASM_FLAGS    = -Ox -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2013_IA32_NASM_FLAGS    = -Ox -f win32 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2013_IA32_NASM_FLAGS      = -O0 -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2013_IA32_DLINK_FLAGS   = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2013_IA32_DLINK_FLAGS   = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -1170,9 +1170,9 @@ NOOPT_VS2013_X64_CC_FLAGS       = /nologo /c 
>> /WX /GS- /W4 /Gs32768 /D UNICODE /G
>> RELEASE_VS2013_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd
>>
>> NOOPT_VS2013_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2013_X64_NASM_FLAGS   = -Ox -f win64 -g
>>
>> -RELEASE_VS2013_X64_NASM_FLAGS   = -Ox -f win64
>>
>> -NOOPT_VS2013_X64_NASM_FLAGS     = -O0 -f win64 -g
>>
>> +  DEBUG_VS2013_X64_NASM_FLAGS   = -Ox -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2013_X64_NASM_FLAGS   = -Ox -f win64 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2013_X64_NASM_FLAGS     = -O0 -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2013_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2013_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER 
>> /MERGE:.rdata=.data
>>
>> @@ -1249,9 +1249,9 @@ NOOPT_VS2013x86_IA32_CC_FLAGS      = /nologo 
>> /arch:IA32 /c /WX /GS- /W4 /Gs32768
>> RELEASE_VS2013x86_IA32_ASM_FLAGS   = /nologo /c /WX /W3 /Cx /coff /Zd
>>
>> NOOPT_VS2013x86_IA32_ASM_FLAGS     = /nologo /c /WX /W3 /Cx /coff /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2013x86_IA32_NASM_FLAGS  = -Ox -f win32 -g
>>
>> -RELEASE_VS2013x86_IA32_NASM_FLAGS  = -Ox -f win32
>>
>> -NOOPT_VS2013x86_IA32_NASM_FLAGS    = -O0 -f win32 -g
>>
>> +  DEBUG_VS2013x86_IA32_NASM_FLAGS  = -Ox -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2013x86_IA32_NASM_FLAGS  = -Ox -f win32 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2013x86_IA32_NASM_FLAGS    = -O0 -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2013x86_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2013x86_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -1281,9 +1281,9 @@ NOOPT_VS2013x86_X64_CC_FLAGS       = /nologo /c 
>> /WX /GS- /W4 /Gs32768 /D UNICODE
>> RELEASE_VS2013x86_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd
>>
>> NOOPT_VS2013x86_X64_ASM_FLAGS      = /nologo /c /WX /W3 /Cx /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2013x86_X64_NASM_FLAGS   = -Ox -f win64 -g
>>
>> -RELEASE_VS2013x86_X64_NASM_FLAGS   = -Ox -f win64
>>
>> -NOOPT_VS2013x86_X64_NASM_FLAGS     = -O0 -f win64 -g
>>
>> +  DEBUG_VS2013x86_X64_NASM_FLAGS   = -Ox -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2013x86_X64_NASM_FLAGS   = -Ox -f win64 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2013x86_X64_NASM_FLAGS     = -O0 -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2013x86_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2013x86_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -1364,9 +1364,9 @@ NOOPT_VS2015_IA32_CC_FLAGS        = /nologo 
>> /arch:IA32 /c /WX /GS- /W4 /Gs32768
>> RELEASE_VS2015_IA32_ASM_FLAGS     = /nologo /c /WX /W3 /Cx /coff /Zd
>>
>> NOOPT_VS2015_IA32_ASM_FLAGS       = /nologo /c /WX /W3 /Cx /coff /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2015_IA32_NASM_FLAGS    = -Ox -f win32 -g
>>
>> -RELEASE_VS2015_IA32_NASM_FLAGS    = -Ox -f win32
>>
>> -NOOPT_VS2015_IA32_NASM_FLAGS      = -O0 -f win32 -g
>>
>> +  DEBUG_VS2015_IA32_NASM_FLAGS    = -Ox -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2015_IA32_NASM_FLAGS    = -Ox -f win32 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2015_IA32_NASM_FLAGS      = -O0 -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2015_IA32_DLINK_FLAGS   = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2015_IA32_DLINK_FLAGS   = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -1396,9 +1396,9 @@ NOOPT_VS2015_X64_CC_FLAGS       = /nologo /c 
>> /WX /GS- /W4 /Gs32768 /D UNICODE /G
>> RELEASE_VS2015_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd
>>
>> NOOPT_VS2015_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2015_X64_NASM_FLAGS   = -Ox -f win64 -g
>>
>> -RELEASE_VS2015_X64_NASM_FLAGS   = -Ox -f win64
>>
>> -NOOPT_VS2015_X64_NASM_FLAGS     = -O0 -f win64 -g
>>
>> +  DEBUG_VS2015_X64_NASM_FLAGS   = -Ox -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2015_X64_NASM_FLAGS   = -Ox -f win64 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2015_X64_NASM_FLAGS     = -O0 -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2015_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2015_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER 
>> /MERGE:.rdata=.data
>>
>> @@ -1476,9 +1476,9 @@ NOOPT_VS2015x86_IA32_CC_FLAGS      = /nologo 
>> /arch:IA32 /c /WX /GS- /W4 /Gs32768
>> RELEASE_VS2015x86_IA32_ASM_FLAGS   = /nologo /c /WX /W3 /Cx /coff /Zd
>>
>> NOOPT_VS2015x86_IA32_ASM_FLAGS     = /nologo /c /WX /W3 /Cx /coff /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2015x86_IA32_NASM_FLAGS  = -Ox -f win32 -g
>>
>> -RELEASE_VS2015x86_IA32_NASM_FLAGS  = -Ox -f win32
>>
>> -NOOPT_VS2015x86_IA32_NASM_FLAGS    = -O0 -f win32 -g
>>
>> +  DEBUG_VS2015x86_IA32_NASM_FLAGS  = -Ox -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2015x86_IA32_NASM_FLAGS  = -Ox -f win32 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2015x86_IA32_NASM_FLAGS    = -O0 -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2015x86_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2015x86_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -1508,9 +1508,9 @@ NOOPT_VS2015x86_X64_CC_FLAGS       = /nologo /c 
>> /WX /GS- /W4 /Gs32768 /D UNICODE
>> RELEASE_VS2015x86_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd
>>
>> NOOPT_VS2015x86_X64_ASM_FLAGS      = /nologo /c /WX /W3 /Cx /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2015x86_X64_NASM_FLAGS   = -Ox -f win64 -g
>>
>> -RELEASE_VS2015x86_X64_NASM_FLAGS   = -Ox -f win64
>>
>> -NOOPT_VS2015x86_X64_NASM_FLAGS     = -O0 -f win64 -g
>>
>> +  DEBUG_VS2015x86_X64_NASM_FLAGS   = -Ox -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2015x86_X64_NASM_FLAGS   = -Ox -f win64 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2015x86_X64_NASM_FLAGS     = -O0 -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2015x86_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2015x86_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB 
>> /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -1586,9 +1586,9 @@ NOOPT_VS2017_IA32_CC_FLAGS      = /nologo 
>> /arch:IA32 /c /WX /GS- /W4 /Gs32768 /D
>> RELEASE_VS2017_IA32_ASM_FLAGS   = /nologo /c /WX /W3 /Cx /coff /Zd
>>
>> NOOPT_VS2017_IA32_ASM_FLAGS     = /nologo /c /WX /W3 /Cx /coff /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2017_IA32_NASM_FLAGS  = -Ox -f win32 -g
>>
>> -RELEASE_VS2017_IA32_NASM_FLAGS  = -Ox -f win32
>>
>> -NOOPT_VS2017_IA32_NASM_FLAGS    = -O0 -f win32 -g
>>
>> +  DEBUG_VS2017_IA32_NASM_FLAGS  = -Ox -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2017_IA32_NASM_FLAGS  = -Ox -f win32 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2017_IA32_NASM_FLAGS    = -O0 -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2017_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2017_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER 
>> /MERGE:.rdata=.data
>>
>> @@ -1616,9 +1616,9 @@ NOOPT_VS2017_X64_CC_FLAGS       = /nologo /c 
>> /WX /GS- /W4 /Gs32768 /D UNICODE /G
>> RELEASE_VS2017_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd
>>
>> NOOPT_VS2017_X64_ASM_FLAGS      = /nologo /c /WX /W3 /Cx /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2017_X64_NASM_FLAGS   = -Ox -f win64 -g
>>
>> -RELEASE_VS2017_X64_NASM_FLAGS   = -Ox -f win64
>>
>> -NOOPT_VS2017_X64_NASM_FLAGS     = -O0 -f win64 -g
>>
>> +  DEBUG_VS2017_X64_NASM_FLAGS   = -Ox -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2017_X64_NASM_FLAGS   = -Ox -f win64 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2017_X64_NASM_FLAGS     = -O0 -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2017_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /IGNORE:4281 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2017_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /IGNORE:4281 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -1744,9 +1744,9 @@ NOOPT_VS2019_IA32_CC_FLAGS      = /nologo 
>> /arch:IA32 /c /WX /GS- /W4 /Gs32768 /D
>> RELEASE_VS2019_IA32_ASM_FLAGS   = /nologo /c /WX /W3 /Cx /coff /Zd
>>
>> NOOPT_VS2019_IA32_ASM_FLAGS     = /nologo /c /WX /W3 /Cx /coff /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2019_IA32_NASM_FLAGS  = -Ox -f win32 -g
>>
>> -RELEASE_VS2019_IA32_NASM_FLAGS  = -Ox -f win32
>>
>> -NOOPT_VS2019_IA32_NASM_FLAGS    = -O0 -f win32 -g
>>
>> +  DEBUG_VS2019_IA32_NASM_FLAGS  = -Ox -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2019_IA32_NASM_FLAGS  = -Ox -f win32 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2019_IA32_NASM_FLAGS    = -O0 -f win32 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2019_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2019_IA32_DLINK_FLAGS = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /MACHINE:X86 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER 
>> /MERGE:.rdata=.data
>>
>> @@ -1774,9 +1774,9 @@ NOOPT_VS2019_X64_CC_FLAGS       = /nologo /c 
>> /WX /GS- /W4 /Gs32768 /D UNICODE /G
>> RELEASE_VS2019_X64_ASM_FLAGS    = /nologo /c /WX /W3 /Cx /Zd
>>
>> NOOPT_VS2019_X64_ASM_FLAGS      = /nologo /c /WX /W3 /Cx /Zd /Zi
>>
>>
>>
>> -  DEBUG_VS2019_X64_NASM_FLAGS   = -Ox -f win64 -g
>>
>> -RELEASE_VS2019_X64_NASM_FLAGS   = -Ox -f win64
>>
>> -NOOPT_VS2019_X64_NASM_FLAGS     = -O0 -f win64 -g
>>
>> +  DEBUG_VS2019_X64_NASM_FLAGS   = -Ox -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +RELEASE_VS2019_X64_NASM_FLAGS   = -Ox -f win64 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> +NOOPT_VS2019_X64_NASM_FLAGS     = -O0 -f win64 -g 
>> -DRODATA_SECTION_NAME=.rdata
>>
>>
>>
>>   DEBUG_VS2019_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /IGNORE:4281 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D 
>> /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:$(IMAGE_ENTRY_POINT) 
>> /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG
>>
>> RELEASE_VS2019_X64_DLINK_FLAGS  = /NOLOGO /NODEFAULTLIB /IGNORE:4001 
>> /IGNORE:4281 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 
>> /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /DLL 
>> /ENTRY:$(IMAGE_ENTRY_POINT) /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER 
>> /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data
>>
>> @@ -2030,7 +2030,7 @@ DEFINE GCC_PP_FLAGS                        = -E 
>> -x assembler-with-cpp -include A
>> *_GCC48_IA32_DLINK2_FLAGS         = DEF(GCC48_IA32_DLINK2_FLAGS)
>>
>> *_GCC48_IA32_RC_FLAGS             = DEF(GCC_IA32_RC_FLAGS)
>>
>> *_GCC48_IA32_OBJCOPY_FLAGS        =
>>
>> -*_GCC48_IA32_NASM_FLAGS           = -f elf32
>>
>> +*_GCC48_IA32_NASM_FLAGS           = -f elf32 
>> -DRODATA_SECTION_NAME=.rodata
>>
>>
>>
>>   DEBUG_GCC48_IA32_CC_FLAGS       = DEF(GCC48_IA32_CC_FLAGS) -Os
>>
>> RELEASE_GCC48_IA32_CC_FLAGS       = DEF(GCC48_IA32_CC_FLAGS) -Os 
>> -Wno-unused-but-set-variable
>>
>> @@ -2058,7 +2058,7 @@ RELEASE_GCC48_IA32_CC_FLAGS       = 
>> DEF(GCC48_IA32_CC_FLAGS) -Os -Wno-unused-but
>> *_GCC48_X64_DLINK2_FLAGS         = DEF(GCC48_X64_DLINK2_FLAGS)
>>
>> *_GCC48_X64_RC_FLAGS             = DEF(GCC_X64_RC_FLAGS)
>>
>> *_GCC48_X64_OBJCOPY_FLAGS        =
>>
>> -*_GCC48_X64_NASM_FLAGS           = -f elf64
>>
>> +*_GCC48_X64_NASM_FLAGS           = -f elf64 
>> -DRODATA_SECTION_NAME=.rodata
>>
>>
>>
>>   DEBUG_GCC48_X64_CC_FLAGS       = DEF(GCC48_X64_CC_FLAGS) -Os
>>
>> RELEASE_GCC48_X64_CC_FLAGS       = DEF(GCC48_X64_CC_FLAGS) -Os 
>> -Wno-unused-but-set-variable
>>
>> @@ -2170,7 +2170,7 @@ RELEASE_GCC48_AARCH64_CC_FLAGS   = 
>> DEF(GCC48_AARCH64_CC_FLAGS) -Wno-unused-but-s
>> *_GCC49_IA32_DLINK2_FLAGS         = DEF(GCC49_IA32_DLINK2_FLAGS)
>>
>> *_GCC49_IA32_RC_FLAGS             = DEF(GCC_IA32_RC_FLAGS)
>>
>> *_GCC49_IA32_OBJCOPY_FLAGS        =
>>
>> -*_GCC49_IA32_NASM_FLAGS           = -f elf32
>>
>> +*_GCC49_IA32_NASM_FLAGS           = -f elf32 
>> -DRODATA_SECTION_NAME=.rodata
>>
>>
>>
>>   DEBUG_GCC49_IA32_CC_FLAGS       = DEF(GCC49_IA32_CC_FLAGS) -Os
>>
>> RELEASE_GCC49_IA32_CC_FLAGS       = DEF(GCC49_IA32_CC_FLAGS) -Os 
>> -Wno-unused-but-set-variable -Wno-unused-const-variable
>>
>> @@ -2198,7 +2198,7 @@ RELEASE_GCC49_IA32_CC_FLAGS       = 
>> DEF(GCC49_IA32_CC_FLAGS) -Os -Wno-unused-but
>> *_GCC49_X64_DLINK2_FLAGS         = DEF(GCC49_X64_DLINK2_FLAGS)
>>
>> *_GCC49_X64_RC_FLAGS             = DEF(GCC_X64_RC_FLAGS)
>>
>> *_GCC49_X64_OBJCOPY_FLAGS        =
>>
>> -*_GCC49_X64_NASM_FLAGS           = -f elf64
>>
>> +*_GCC49_X64_NASM_FLAGS           = -f elf64 
>> -DRODATA_SECTION_NAME=.rodata
>>
>>
>>
>>   DEBUG_GCC49_X64_CC_FLAGS       = DEF(GCC49_X64_CC_FLAGS) -Os
>>
>> RELEASE_GCC49_X64_CC_FLAGS       = DEF(GCC49_X64_CC_FLAGS) -Os 
>> -Wno-unused-but-set-variable -Wno-unused-const-variable
>>
>> @@ -2316,7 +2316,7 @@ RELEASE_GCC49_AARCH64_DLINK_XIPFLAGS = -z 
>> common-page-size=0x20
>> *_GCC5_IA32_DLINK2_FLAGS         = DEF(GCC5_IA32_DLINK2_FLAGS) -no-pie
>>
>> *_GCC5_IA32_RC_FLAGS             = DEF(GCC_IA32_RC_FLAGS)
>>
>> *_GCC5_IA32_OBJCOPY_FLAGS        =
>>
>> -*_GCC5_IA32_NASM_FLAGS           = -f elf32
>>
>> +*_GCC5_IA32_NASM_FLAGS           = -f elf32 
>> -DRODATA_SECTION_NAME=.rodata
>>
>>
>>
>>   DEBUG_GCC5_IA32_CC_FLAGS       = DEF(GCC5_IA32_CC_FLAGS) -flto -Os
>>
>>   DEBUG_GCC5_IA32_DLINK_FLAGS    = DEF(GCC5_IA32_X64_DLINK_FLAGS) 
>> -flto -Os -Wl,-m,elf_i386,--oformat=elf32-i386
>>
>> @@ -2348,7 +2348,7 @@ RELEASE_GCC5_IA32_DLINK_FLAGS    = 
>> DEF(GCC5_IA32_X64_DLINK_FLAGS) -flto -Os -Wl,
>> *_GCC5_X64_DLINK2_FLAGS          = DEF(GCC5_X64_DLINK2_FLAGS)
>>
>> *_GCC5_X64_RC_FLAGS              = DEF(GCC_X64_RC_FLAGS)
>>
>> *_GCC5_X64_OBJCOPY_FLAGS         =
>>
>> -*_GCC5_X64_NASM_FLAGS            = -f elf64
>>
>> +*_GCC5_X64_NASM_FLAGS            = -f elf64 
>> -DRODATA_SECTION_NAME=.rodata
>>
>>
>>
>>   DEBUG_GCC5_X64_CC_FLAGS        = DEF(GCC5_X64_CC_FLAGS) -flto 
>> -DUSING_LTO -Os
>>
>>   DEBUG_GCC5_X64_DLINK_FLAGS     = DEF(GCC5_X64_DLINK_FLAGS) -flto -Os
>>
>> @@ -2589,7 +2589,7 @@ DEFINE CLANG38_ALL_CC_FLAGS         = 
>> DEF(GCC48_ALL_CC_FLAGS) DEF(CLANG38_WARNIN
>> *_CLANG38_IA32_ASM_FLAGS            = DEF(GCC5_ASM_FLAGS) -m32 
>> -march=i386 DEF(CLANG38_IA32_TARGET)
>>
>> *_CLANG38_IA32_RC_FLAGS             = DEF(GCC_IA32_RC_FLAGS)
>>
>> *_CLANG38_IA32_OBJCOPY_FLAGS        =
>>
>> -*_CLANG38_IA32_NASM_FLAGS           = -f elf32
>>
>> +*_CLANG38_IA32_NASM_FLAGS           = -f elf32 
>> -DRODATA_SECTION_NAME=.rodata
>>
>> *_CLANG38_IA32_PP_FLAGS             = DEF(GCC_PP_FLAGS) 
>> DEF(CLANG38_IA32_TARGET)
>>
>> *_CLANG38_IA32_ASLPP_FLAGS          = DEF(GCC_ASLPP_FLAGS) 
>> DEF(CLANG38_IA32_TARGET)
>>
>> *_CLANG38_IA32_VFRPP_FLAGS          = DEF(GCC_VFRPP_FLAGS) 
>> DEF(CLANG38_IA32_TARGET)
>>
>> @@ -2626,7 +2626,7 @@ NOOPT_CLANG38_IA32_DLINK2_FLAGS     = 
>> DEF(GCC5_IA32_DLINK2_FLAGS) -O0
>> *_CLANG38_X64_ASM_FLAGS            = DEF(GCC5_ASM_FLAGS) -m64 
>> DEF(CLANG38_X64_TARGET)
>>
>> *_CLANG38_X64_RC_FLAGS             = DEF(GCC_X64_RC_FLAGS)
>>
>> *_CLANG38_X64_OBJCOPY_FLAGS        =
>>
>> -*_CLANG38_X64_NASM_FLAGS           = -f elf64
>>
>> +*_CLANG38_X64_NASM_FLAGS           = -f elf64 
>> -DRODATA_SECTION_NAME=.rodata
>>
>> *_CLANG38_X64_PP_FLAGS             = DEF(GCC_PP_FLAGS) 
>> DEF(CLANG38_X64_TARGET)
>>
>> *_CLANG38_X64_ASLPP_FLAGS          = DEF(GCC_ASLPP_FLAGS) 
>> DEF(CLANG38_X64_TARGET)
>>
>> *_CLANG38_X64_VFRPP_FLAGS          = DEF(GCC_VFRPP_FLAGS) 
>> DEF(CLANG38_X64_TARGET)
>>
>> @@ -2777,7 +2777,7 @@ DEFINE CLANGPDB_ALL_CC_FLAGS         = 
>> DEF(GCC48_ALL_CC_FLAGS) DEF(CLANGPDB_WARN
>> *_CLANGPDB_IA32_ASLCC_FLAGS          = DEF(GCC_ASLCC_FLAGS) -m32 
>> -fno-lto DEF(CLANGPDB_IA32_TARGET)
>>
>> *_CLANGPDB_IA32_ASM_FLAGS            = DEF(GCC_ASM_FLAGS) -m32 
>> -march=i386 DEF(CLANGPDB_IA32_TARGET)
>>
>> *_CLANGPDB_IA32_OBJCOPY_FLAGS        =
>>
>> -*_CLANGPDB_IA32_NASM_FLAGS           = -f win32
>>
>> +*_CLANGPDB_IA32_NASM_FLAGS           = -f win32 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> *_CLANGPDB_IA32_PP_FLAGS             = DEF(GCC_PP_FLAGS) 
>> DEF(CLANGPDB_IA32_TARGET)
>>
>> *_CLANGPDB_IA32_ASLPP_FLAGS          = DEF(GCC_ASLPP_FLAGS) 
>> DEF(CLANGPDB_IA32_TARGET)
>>
>> *_CLANGPDB_IA32_VFRPP_FLAGS          = DEF(GCC_VFRPP_FLAGS) 
>> DEF(CLANGPDB_IA32_TARGET)
>>
>> @@ -2811,7 +2811,7 @@ NOOPT_CLANGPDB_IA32_DLINK2_FLAGS     =
>> *_CLANGPDB_X64_ASLCC_FLAGS          = DEF(GCC_ASLCC_FLAGS) -m64 
>> -fno-lto DEF(CLANGPDB_X64_TARGET)
>>
>> *_CLANGPDB_X64_ASM_FLAGS            = DEF(GCC_ASM_FLAGS) -m64 
>> DEF(CLANGPDB_X64_TARGET)
>>
>> *_CLANGPDB_X64_OBJCOPY_FLAGS        =
>>
>> -*_CLANGPDB_X64_NASM_FLAGS           = -f win64
>>
>> +*_CLANGPDB_X64_NASM_FLAGS           = -f win64 
>> -DRODATA_SECTION_NAME=.rdata
>>
>> *_CLANGPDB_X64_PP_FLAGS             = DEF(GCC_PP_FLAGS) 
>> DEF(CLANGPDB_X64_TARGET)
>>
>> *_CLANGPDB_X64_ASLPP_FLAGS          = DEF(GCC_ASLPP_FLAGS) 
>> DEF(CLANGPDB_X64_TARGET)
>>
>> *_CLANGPDB_X64_VFRPP_FLAGS          = DEF(GCC_VFRPP_FLAGS) 
>> DEF(CLANGPDB_X64_TARGET)
>>
>> @@ -2878,7 +2878,7 @@ DEFINE CLANGDWARF_X64_DLINK2_FLAGS        = 
>> -Wl,--defsym=PECOFF_HEADER_SIZE=0x22
>> *_CLANGDWARF_IA32_ASM_FLAGS            = DEF(GCC5_ASM_FLAGS) -m32 
>> -march=i386 DEF(CLANG38_IA32_TARGET)
>>
>> *_CLANGDWARF_IA32_RC_FLAGS             = DEF(GCC_IA32_RC_FLAGS)
>>
>> *_CLANGDWARF_IA32_OBJCOPY_FLAGS        =
>>
>> -*_CLANGDWARF_IA32_NASM_FLAGS           = -f elf32
>>
>> +*_CLANGDWARF_IA32_NASM_FLAGS           = -f elf32 
>> -DRODATA_SECTION_NAME=.rodata
>>
>> *_CLANGDWARF_IA32_PP_FLAGS             = DEF(GCC_PP_FLAGS) 
>> DEF(CLANG38_IA32_TARGET)
>>
>> *_CLANGDWARF_IA32_ASLPP_FLAGS          = DEF(GCC_ASLPP_FLAGS) 
>> DEF(CLANG38_IA32_TARGET)
>>
>> *_CLANGDWARF_IA32_VFRPP_FLAGS          = DEF(GCC_VFRPP_FLAGS) 
>> DEF(CLANG38_IA32_TARGET)
>>
>> @@ -2914,7 +2914,7 @@ NOOPT_CLANGDWARF_IA32_DLINK2_FLAGS     = 
>> DEF(CLANGDWARF_IA32_DLINK2_FLAGS) -O0 -
>> *_CLANGDWARF_X64_ASM_FLAGS            = DEF(GCC5_ASM_FLAGS) -m64 
>> DEF(CLANG38_X64_TARGET)
>>
>> *_CLANGDWARF_X64_RC_FLAGS             = DEF(GCC_X64_RC_FLAGS)
>>
>> *_CLANGDWARF_X64_OBJCOPY_FLAGS        =
>>
>> -*_CLANGDWARF_X64_NASM_FLAGS           = -f elf64
>>
>> +*_CLANGDWARF_X64_NASM_FLAGS           = -f elf64 
>> -DRODATA_SECTION_NAME=.rodata
>>
>> *_CLANGDWARF_X64_PP_FLAGS             = DEF(GCC_PP_FLAGS) 
>> DEF(CLANG38_X64_TARGET)
>>
>> *_CLANGDWARF_X64_ASLPP_FLAGS          = DEF(GCC_ASLPP_FLAGS) 
>> DEF(CLANG38_X64_TARGET)
>>
>> *_CLANGDWARF_X64_VFRPP_FLAGS          = DEF(GCC_VFRPP_FLAGS) 
>> DEF(CLANG38_X64_TARGET)
>>
>> @@ -2985,7 +2985,7 @@ RELEASE_XCODE5_IA32_DLINK_FLAGS      = -arch 
>> i386 -u _$(IMAGE_ENTRY_POINT) -e _$
>>   DEBUG_XCODE5_IA32_ASM_FLAGS  = -arch i386 -g
>>
>>   NOOPT_XCODE5_IA32_ASM_FLAGS  = -arch i386 -g
>>
>> RELEASE_XCODE5_IA32_ASM_FLAGS  = -arch i386
>>
>> -      *_XCODE5_IA32_NASM_FLAGS = -f macho32
>>
>> +      *_XCODE5_IA32_NASM_FLAGS = -f macho32 
>> -DRODATA_SECTION_NAME=.rodata
>>
>>
>>
>
> An EFI Mach-O file does not contain a .rodata section. A Mach-O 
> contains a __DATA segment that is broken up into sections. For a 
> typical EFI image there are __const, __data, __bss sections in the 
> __DATA segment [1].

Yes, and ".rodata" is almost a synonym for "__DATA,__const", with a 
small exception [1]. Maybe it'd be clearer if the macro was renamed to 
"NASM_RODATA_SECTION_NAME", to indicate this is not just a "raw" name, 
but NASM gives it a semantic meaning?

>
> The mtoc [2] tool used to convert mach-O to PE/COFF converts the 
> entire __DATA segment (__const, __data, and __bss) into the .data 
> section. Thus adding any kind of new data section is a no-op at best.

This is a part I missed, because I do not have an Xcode toolchain at 
hand, so thanks for investigating. However this, in my opinion, is a 
flaw with Mach-O/mtoc and not with my patch. It seems like the only 
difference between __TEXT,__const and __DATA,__const is whether the data 
is targeted by a relocation or not. Such a concept does not exist for 
PE/COFF (and I think not even for ELF, but I'm not too familiar with 
it), thus the logical PE/COFF section __DATA,__const should be merged 
into is .rdata (and .rdata may or may not be merged into .text in an 
earlier step, I assume transitivity). I could change the macro 
definition to explicitly declare __TEXT,__const, but that would still 
put the compiler-emitted data in the wrong section. Does Xcode provide 
anything remotely similar to GNU linker scripts which we can use to move 
the section?

Please also note that .rodata is used for Xcode-based toolchains already 
(in fact, all toolchains, and this is the issue), I'm not regressing 
anything. I just expected it to work fine as-is. This patch mainly fixed 
PE/COFF-based toolchains, which get both .rdata from the compiler and 
.rodata with RX permissions from NASM, because ".rodata" only has a 
semantic meaning for ELF and Mach-O outputs, but not for PE/COFF.

>
> If you want something to be read only for Xcode/clang you are better 
> off putting it in the __TEXT section [3]. The __TEXT section is read 
> only and for X64 can not even contain relocations.

Well, this kind of is an issue. We would need to introduce an arbitrary 
constraint on the relocation part that holds only for Xcode-based 
toolchains. Does the compiler emit an error when data in __TEXT,__const 
is targeted by a relocation? Also see above regarding compiler-emitted 
__DATA,__const.

Thanks for your notes and insight!

Best regards,
Marvin


[1]
"For compatibility with other Unix platforms, the following standard 
names are also supported:
[...]
.rodata  = __DATA,__const data
[...]
If the .rodata section contains no relocations, it is instead put into 
the __TEXT,__const section unless this section has already been 
specified explicitly."
https://www.nasm.us/xdoc/2.13.01/html/nasmdoc7.html

>
> [1] otool -lh DxeCore.dll
> ...
> Load command 1
>       cmd LC_SEGMENT_64
>   cmdsize 312
>   segname __DATA
>    vmaddr 0x000000000002b000
>    vmsize 0x0000000000147000
>   fileoff 180224
>  filesize 8192
>   maxprot 0x00000003
>  initprot 0x00000003
>    nsects 3
>     flags 0x0
> Section
>   sectname __const
>    segname __DATA
>       addr 0x000000000002b000
>       size 0x0000000000000718
>     offset 180224
>      align 2^4 (16)
>     reloff 0
>     nreloc 0
>      flags 0x00000000
>  reserved1 0
>  reserved2 0
> Section
>   sectname __data
>    segname __DATA
>       addr 0x000000000002b720
>       size 0x00000000000014f0
>     offset 182048
>      align 2^4 (16)
>     reloff 0
>     nreloc 0
>      flags 0x00000000
>  reserved1 0
>  reserved2 0
> Section
>   sectname __bss
>    segname __DATA
>       addr 0x000000000002cc10
>       size 0x0000000000144e11
>     offset 0
>      align 2^4 (16)
>     reloff 0
>     nreloc 0
>      flags 0x00000001
>  reserved1 0
>  reserved2 0
> …
>
> [2] 
> https://opensource.apple.com/source/cctools/cctools-698/efitools/mtoc.c.auto.html 
> <https://opensource.apple.com/source/cctools/cctools-698/efitools/mtoc.c.auto.html> 
>
>
> [3] otool more output…
> Load command 0
>       cmd LC_SEGMENT_64
>   cmdsize 392
>   segname __TEXT
>    vmaddr 0x0000000000000240
>    vmsize 0x00000000000296c0
>   fileoff 1184
>  filesize 169664
>   maxprot 0x00000005
>  initprot 0x00000005
>    nsects 4
>     flags 0x0
> Section
>   sectname __text
>    segname __TEXT
>       addr 0x0000000000000240
>       size 0x000000000002489f
>     offset 1184
>      align 2^3 (8)
>     reloff 0
>     nreloc 0
>      flags 0x80000400
>  reserved1 0
>  reserved2 0
> Section
>   sectname __cstring
>    segname __TEXT
>       addr 0x0000000000024ae0
>       size 0x000000000000496d
>     offset 150848
>      align 2^4 (16)
>     reloff 0
>     nreloc 0
>      flags 0x00000002
>  reserved1 0
>  reserved2 0
> Section
>   sectname __ustring
>    segname __TEXT
>       addr 0x000000000002944e
>       size 0x0000000000000048
>     offset 169646
>      align 2^1 (2)
>     reloff 0
>     nreloc 0
>      flags 0x00000000
>  reserved1 0
>  reserved2 0
> Section
>   sectname __const
>    segname __TEXT
>       addr 0x00000000000294a0
>       size 0x0000000000000448
>     offset 169728
>      align 2^4 (16)
>     reloff 0
>     nreloc 0
>      flags 0x00000000
>  reserved1 0
>  reserved2 0
>
> Thanks,
>
> Andrew Fish
>
>>
>>
>>   DEBUG_XCODE5_IA32_CC_FLAGS   = -arch i386 -c -g -Os       -Wall 
>> -Werror -include AutoGen.h -funsigned-char -fno-stack-protector 
>> -fno-builtin -fshort-wchar -fasm-blocks -mdynamic-no-pic 
>> -mno-implicit-float -mms-bitfields -msoft-float -Wno-unused-parameter 
>> -Wno-missing-braces -Wno-missing-field-initializers 
>> -Wno-tautological-compare -Wno-sign-compare -Wno-varargs 
>> -ftrap-function=undefined_behavior_has_been_optimized_away_by_clang 
>> $(PLATFORM_FLAGS)
>>
>> @@ -3003,7 +3003,7 @@ RELEASE_XCODE5_X64_DLINK_FLAGS      = -arch 
>> x86_64 -u _$(IMAGE_ENTRY_POINT) -e _
>>   DEBUG_XCODE5_X64_ASM_FLAGS  = -arch x86_64 -g
>>
>>   NOOPT_XCODE5_X64_ASM_FLAGS  = -arch x86_64 -g
>>
>> RELEASE_XCODE5_X64_ASM_FLAGS  = -arch x86_64
>>
>> -      *_XCODE5_X64_NASM_FLAGS = -f macho64
>>
>> +      *_XCODE5_X64_NASM_FLAGS = -f macho64 -DRODATA_SECTION_NAME=.rodata
>>
>> *_XCODE5_*_PP_FLAGS         = -E -x assembler-with-cpp -include AutoGen.h
>>
>> *_XCODE5_*_VFRPP_FLAGS      = -x c -E -P -DVFRCOMPILE -include 
>> $(MODULE_NAME)StrDefs.h
>>
>>
>>
>> -- 
>> 2.31.1
>>
>>
>>
>>
>>
>>
>>
>
> 


  reply	other threads:[~2021-08-10  8:28 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-09  9:51 [PATCH v2 0/7] Fix various issues regarding DebugImageInfoTable Marvin Häuser
2021-08-09  9:51 ` [PATCH v2 1/2] BaseTools: Define the read-only data section name per toolchain Marvin Häuser
2021-08-09  9:51   ` [PATCH v2 2/2] UefiCpuPkg/BaseUefiCpuLib: Use toolchain-specific rodata section name Marvin Häuser
2021-08-10  2:43     ` Ni, Ray
2021-08-10  4:40       ` [edk2-devel] " Andrew Fish
2021-08-10  8:43         ` Marvin Häuser
2021-08-10  4:19   ` [edk2-devel] [PATCH v2 1/2] BaseTools: Define the read-only data section name per toolchain Andrew Fish
2021-08-10  8:27     ` Marvin Häuser [this message]
2021-08-10 19:35       ` Andrew Fish
2021-08-10 21:30         ` Marvin Häuser
2021-08-10 21:58           ` Andrew Fish
2021-08-11  8:11             ` Marvin Häuser
2021-08-11 17:19               ` Andrew Fish
2021-08-12  7:26                 ` Marvin Häuser
2021-08-12 20:25                   ` Marvin Häuser
2021-08-12 22:53                   ` Andrew Fish
     [not found]                   ` <169AB0F8BD9C50BA.13770@groups.io>
2021-08-16 21:13                     ` Andrew Fish
     [not found]       ` <169A090BBBBE12C1.15606@groups.io>
2021-08-10 19:49         ` Andrew Fish
2021-08-10 21:24           ` Marvin Häuser
2021-08-10 21:54             ` Andrew Fish
2021-08-09  9:51 ` [PATCH v2 1/7] MdeModulePkg/DxeCore: Consistent DebugImageInfoTable updates Marvin Häuser
2021-08-09  9:51 ` [PATCH v2 1/2] MdePkg/BaseLib: Fix unaligned API prototypes Marvin Häuser
2021-08-09  9:51   ` [PATCH v2 2/2] BaseTools/CommonLib: " Marvin Häuser
2021-08-09 16:15   ` [PATCH v2 1/2] MdePkg/BaseLib: " Michael D Kinney
2021-08-09 21:32     ` [edk2-devel] " Andrew Fish
2021-08-10  8:53       ` Marvin Häuser
2021-08-10 17:36         ` Andrew Fish
2021-08-10 21:14           ` Marvin Häuser
2021-08-09  9:51 ` [PATCH v2 1/2] SecurityPkg/DxeImageVerificationLib: Fix certificate lookup algorithm Marvin Häuser
2021-08-09  9:51   ` [PATCH v2 2/2] SecurityPkg/SecureBootConfigDxe: " Marvin Häuser
2021-08-12  1:12     ` [edk2-devel] " Min Xu
2021-08-12  1:11   ` [edk2-devel] [PATCH v2 1/2] SecurityPkg/DxeImageVerificationLib: " Min Xu
2021-08-09  9:51 ` [PATCH v2 2/7] MdeModulePkg/DxeCore: Fix DebugImageInfoTable size report Marvin Häuser
2021-08-09  9:51 ` [PATCH v2 3/7] EmbeddedPkg/GdbStub: Check DebugImageInfoTable type safely Marvin Häuser
2021-08-09  9:51 ` [PATCH v2 4/7] ArmPkg/DefaultExceptionHandlerLib: " Marvin Häuser
2021-08-09 11:55   ` Ard Biesheuvel
2021-08-09 12:40     ` [edk2-devel] " Marvin Häuser
2021-08-09 21:19       ` Marvin Häuser
2021-08-16  9:50         ` Ard Biesheuvel
2021-08-09  9:51 ` [PATCH v2 5/7] MdeModulePkg/CoreDxe: Mandatory LoadedImage for DebugImageInfoTable Marvin Häuser
2021-08-09  9:51 ` [PATCH v2 6/7] EmbeddedPkg/GdbStub: " Marvin Häuser
2021-08-09  9:51 ` [PATCH v2 7/7] ArmPkg/DefaultExceptionHandlerLib: " Marvin Häuser

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b54335fa-eec3-c6d4-ffc0-a3574562d5e1@posteo.de \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox