> On Aug 10, 2021, at 2:24 PM, Marvin Häuser <mhaeu...@posteo.de> wrote:
> 
> On 10/08/2021 21:49, Andrew Fish wrote:
>> I forgot I have an Ubuntu VM so we can take a look at an ELF to PE/COFF  
>> toolchain example ….
>> 
>> So it looks like nasm[1] “does the right thing”(tm) and places a .rodata 
>> section in the object file….
>> 
>> But it looks like GenFw[2] smashed the .rodata section into .data section 
>> when it translated to PE/COFF. This was the issue I was worried about….
>> 
>> Actually I should probably look at the ELF executable too[3]. Yikes no 
>> .rodata in the ELF. So it looks likely that the linker scripts are smashing 
>> .rodata into .data.
> 
> They smash it into .text, as linked in the other mail [1].

Sorry I get way to much email…..

> This is fine honestly, just I want some toggle that decides consistently for 
> all toolchains what to do (merge into .text or let it live as a separate 
> section). But that'd be a task for another patch.
> 

I’m still trying to wrap my head around the definition of the nasm 
RODATA_SECTION_NAME. Do we want it to track what ends up in the object file, 
the native executable, or the PE/COFF?

It seems like it is tracking the object file. If that is the case we can just 
fix the XCODE changes to use  `__TEXT,__const`and all the toolchains would be 
consistent. 

I’d like to see the commit message reworked to better define what is going on. 
RODATA_SECTION_NAME tracks what end up object file, and PE/COFF results are 
controlled by the linker script/GenFw or mtoc. 

Thanks,

Andrew Fish

> Best regards,
> Marvin
> 
> 
> [1] 
> https://github.com/tianocore/edk2/blob/d02dbb53cd78de799e6afaa237e98771fb5148db/BaseTools/Scripts/GccBase.lds#L25
> 
>> So there may be multiple issues with ELF toolchains that need to change to 
>> end up with a .rodata in the PE/COFF.
>> 
>> [1]$ objdump -fh  
>> Build/OvmfX64/DEBUG_GCC5/X64/UefiCpuPkg/Library/BaseUefiCpuLib/BaseUefiCpuLib/OUTPUT/X64/InitializeFpu.obj
>> 
>> Build/OvmfX64/DEBUG_GCC5/X64/UefiCpuPkg/Library/BaseUefiCpuLib/BaseUefiCpuLib/OUTPUT/X64/InitializeFpu.obj:
>>      file format elf64-x86-64
>> architecture: i386:x86-64, flags 0x00000011:
>> HAS_RELOC, HAS_SYMS
>> start address 0x0000000000000000
>> 
>> Sections:
>> Idx Name          Size      VMA               LMA       File off  Algn
>>   0 .rodata       00000006  0000000000000000  0000000000000000  00000200  
>> 2**2
>>                   CONTENTS, ALLOC, LOAD, READONLY, DATA
>>   1 .text         0000001d  0000000000000000  0000000000000000  00000210  
>> 2**4
>>                   CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
>> 
>> 
>> 
>> [2]$ objdump -fh 
>> Build/OvmfX64/DEBUG_GCC5/X64/UefiCpuPkg/CpuDxe/CpuDxe/DEBUG/CpuDxe.efi
>> 
>> Build/OvmfX64/DEBUG_GCC5/X64/UefiCpuPkg/CpuDxe/CpuDxe/DEBUG/CpuDxe.efi:     
>> file format pei-x86-64
>> architecture: i386:x86-64, flags 0x0000010b:
>> HAS_RELOC, EXEC_P, HAS_DEBUG, D_PAGED
>> start address 0x0000000000008eb1
>> 
>> Sections:
>> Idx Name          Size      VMA LMA               File off  Algn
>>   0 .text         0000ff80  0000000000000240  0000000000000240  00000240  
>> 2**4
>>                   CONTENTS, ALLOC, LOAD, READONLY, CODE
>>   1 .data         00000540  00000000000101c0  00000000000101c0  000101c0  
>> 2**4
>>                   CONTENTS, ALLOC, LOAD, DATA
>>   2 .reloc        00000080  0000000000010700  0000000000010700  00010700  
>> 2**2
>>                   CONTENTS, ALLOC, LOAD, READONLY, DATA
>> 
>> [3] $ objdump -fh 
>> Build/OvmfX64/DEBUG_GCC5/X64/UefiCpuPkg/CpuDxe/CpuDxe/DEBUG/CpuDxe.dll
>> 
>> Build/OvmfX64/DEBUG_GCC5/X64/UefiCpuPkg/CpuDxe/CpuDxe/DEBUG/CpuDxe.dll:     
>> file format elf64-x86-64
>> architecture: i386:x86-64, flags 0x00000013:
>> HAS_RELOC, EXEC_P, HAS_SYMS
>> start address 0x0000000000008eb1
>> 
>> Sections:
>> Idx Name          Size      VMA LMA               File off  Algn
>>   0 .text         0000ff46  0000000000000240  0000000000000240  000000c0  
>> 2**6
>>                   CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
>>   1 .data         00000490  00000000000101c0  00000000000101c0  00010040  
>> 2**6
>>                   CONTENTS, ALLOC, LOAD, RELOC, DATA
>>   2 .rela         000004f8  0000000000010680  0000000000010680  000104d0  
>> 2**3
>>                   CONTENTS, READONLY
>>   3 .build-id     00000024  0000000000010b78  0000000000010b78  000109c8  
>> 2**2
>>                   CONTENTS, READONLY
>>   4 .gnu_debuglink 00000014  0000000000000000  0000000000000000  000109ec  
>> 2**2
>>                   CONTENTS, READONLY
>> 
>> 
>> 
>> Thanks,
>> 
>> Andrew Fish
>> 
>>> On Aug 10, 2021, at 12:35 PM, Andrew Fish via groups.io <http://groups.io> 
>>> <afish=apple....@groups.io <mailto:afish=apple....@groups.io>> wrote:
>>> 
>>> 
>>> 
>>>> On Aug 10, 2021, at 1:27 AM, Marvin Häuser <mhaeu...@posteo.de 
>>>> <mailto:mhaeu...@posteo.de>> wrote:
>>>> 
>>>> On 10/08/2021 06:19, Andrew Fish via groups.io <http://groups.io/> wrote:
>>>>> 
>>>>> 
>>>>>> On Aug 9, 2021, at 2:51 AM, Marvin Häuser <mhaeu...@posteo.de 
>>>>>> <mailto:mhaeu...@posteo.de> <mailto:mhaeu...@posteo.de 
>>>>>> <mailto:mhaeu...@posteo.de>>> wrote:
>>>>>> 
>>>>>> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3318 
>>>>>> <https://bugzilla.tianocore.org/show_bug.cgi?id=3318> 
>>>>>> <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.f...@intel.com <mailto:bob.c.f...@intel.com> 
>>>>>> <mailto:bob.c.f...@intel.com <mailto:bob.c.f...@intel.com>>>
>>>>>> Cc: Liming Gao <gaolim...@byosoft.com.cn 
>>>>>> <mailto:gaolim...@byosoft.com.cn> <mailto:gaolim...@byosoft.com.cn 
>>>>>> <mailto:gaolim...@byosoft.com.cn>>>
>>>>>> Cc: Yuwei Chen <yuwei.c...@intel.com <mailto:yuwei.c...@intel.com> 
>>>>>> <mailto:yuwei.c...@intel.com <mailto:yuwei.c...@intel.com>>>
>>>>>> Cc: Vitaly Cheptsov <vit9...@protonmail.com 
>>>>>> <mailto:vit9...@protonmail.com> <mailto:vit9...@protonmail.com 
>>>>>> <mailto:vit9...@protonmail.com>>>
>>>>>> Signed-off-by: Marvin Häuser <mhaeu...@posteo.de 
>>>>>> <mailto:mhaeu...@posteo.de> <mailto:mhaeu...@posteo.de 
>>>>>> <mailto:mhaeu...@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?
>>> 
>>> The Xcode linker emits a fatal error on X64 for a relocation in the __TEXT 
>>> section, everything needs to be RIP relative and the compiler does that for 
>>> free. We generally only run into this for hand coded assembler and the fix 
>>> is to use RIP relative addressing in the assembly.
>>> 
>>>> Also see above regarding compiler-emitted __DATA,__const.
>>>> 
>>> 
>>> OK so the current nasm `SECTION .rodata`[1]  gets mapped to 
>>> __TEXT,__const[2] for Xcode clang, and this is done by nasm (I dumped the 
>>> object file). GenFw and mtoc only run on executables, also they tend to be 
>>> conservative as they need to keep the layout the same and the relative 
>>> layout between sections the same, but in this case it is nasm placing the 
>>> data in the text section.
>>> 
>>> So what I’d like to see in the patch is to define RODATA_SECTION_NAME to 
>>> match what is actually happening. So for XCODE that would be 
>>> `__TEXT,__const` not `.rodata`. We should double check what is happening 
>>> for ELF on x86, ARM, RiskV, etc. and do the same thing. I assume all the 
>>> tools that generate PE/COFF directly are good with .rodata? I think it is 
>>> likely as simple as dumping the EFL object file in objdump or gdb for the 
>>> given toolchain (like my Xcode example).
>>> 
>>> TL;DR It looks to me like nasm does some SECTION translations under the 
>>> hood to make code portable, and I’d like to make sure we capture those in 
>>> the new NASM_RODATA_SECTION_NAME. If some one is doing a security review 
>>> having NASM_RODATA_SECTION_NAME is going to imply that a .rodata section is 
>>> being used by that specific toolchain, and I think that is much worse than 
>>> the current “magic” behavior in nasm. We are much better off explaining 
>>> what is really happening, since it is not very obvious.
>>> 
>>> [1] 
>>> https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/Library/BaseUefiCpuLib/X64/InitializeFpu.nasm#L14
>>>  
>>> <https://github.com/tianocore/edk2/blob/master/UefiCpuPkg/Library/BaseUefiCpuLib/X64/InitializeFpu.nasm#L14>
>>> 
>>> [2] $otool -V -s __TEXT 
>>> __constBuild/OvmfX64/DEBUG_XCODE5/X64/UefiCpuPkg/Library/BaseUefiCpuLib/BaseUefiCpuLib/OUTPUT/X64/InitializeFpu.obj
>>> Build//OvmfX64/DEBUG_XCODE5/X64/UefiCpuPkg/Library/BaseUefiCpuLib/BaseUefiCpuLib/OUTPUT/X64/InitializeFpu.obj:
>>> Contents of (__TEXT,__const) section
>>> 0000001d  7f 03 80 1f 00 00
>>> 
>>> $ otool -l 
>>> Build//OvmfX64/DEBUG_XCODE5/X64/UefiCpuPkg/Library/BaseUefiCpuLib/BaseUefiCpuLib/OUTPUT/X64/InitializeFpu.obj
>>> Build/OvmfX64/DEBUG_XCODE5/X64/UefiCpuPkg/Library/BaseUefiCpuLib/BaseUefiCpuLib/OUTPUT/X64/InitializeFpu.obj:
>>> Load command 0
>>>       cmd LC_SEGMENT_64
>>>   cmdsize 232
>>>   segname
>>>    vmaddr 0x0000000000000000
>>>    vmsize 0x0000000000000026
>>>   fileoff 288
>>>  filesize 38
>>>   maxprot 0x00000007
>>>  initprot 0x00000007
>>>    nsects 2
>>>     flags 0x0
>>> Section
>>>   sectname __text
>>>    segname __TEXT
>>>       addr 0x0000000000000000
>>>       size 0x000000000000001d
>>>     offset 288
>>>      align 2^0 (1)
>>>     reloff 328
>>>     nreloc 2
>>>      flags 0x80000500
>>>  reserved1 0
>>>  reserved2 0
>>> Section
>>>   sectname __const
>>>    segname __TEXT
>>>       addr 0x000000000000001d
>>>       size 0x0000000000000006
>>>     offset 320
>>>      align 2^0 (1)
>>>     reloff 0
>>>     nreloc 0
>>>      flags 0x00000000
>>>  reserved1 0
>>>  reserved2 0
>>> Load command 1
>>>      cmd LC_SYMTAB
>>>  cmdsize 24
>>>   symoff 344
>>>    nsyms 3
>>>   stroff 392
>>>  strsize 63
>>> 
>>> Thanks,
>>> 
>>> Andrew Fish
>>> 
>>> 
>>>> 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 
>>>> <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>
>>>>>  
>>>>> <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
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>>>> 
>>>> 
>>> 
>> 
> 
> 
> 
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#79061): https://edk2.groups.io/g/devel/message/79061
Mute This Topic: https://groups.io/mt/84764902/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to