Hi, I meet with the same issue. I verify it in my ubutu 12.04. GCC46, Nasm 2.09. I meet with the build failure. 1) 0x10 is not power of two. 2) invalid combination of opcode and operands
I provide my patch that can pass build. Please help review it. diff --git a/MdePkg/Library/BaseLib/Ia32/Thunk16.nasm b/MdePkg/Library/BaseLib/Ia32/Thunk16.nasm index 2e5a580..105238d 100644 --- a/MdePkg/Library/BaseLib/Ia32/Thunk16.nasm +++ b/MdePkg/Library/BaseLib/Ia32/Thunk16.nasm @@ -174,7 +174,7 @@ BITS 16 o32 retf ; transfer control to user code -ALIGN 0x10 +ALIGN 16 _NullSegDesc DQ 0 _16CsDesc: DW -1 diff --git a/MdePkg/Library/BaseLib/X64/Thunk16.nasm b/MdePkg/Library/BaseLib/X64/Thunk16.nasm index 8858e74..e11bb24 100644 --- a/MdePkg/Library/BaseLib/X64/Thunk16.nasm +++ b/MdePkg/Library/BaseLib/X64/Thunk16.nasm @@ -190,7 +190,7 @@ o32 lidt [cs:bp + (_16Idtr - .Base)] o32 retf ; transfer control to user code -ALIGN 0x8 +ALIGN 8 CODE16 equ _16Code - $ DATA16 equ _16Data - $ @@ -237,11 +237,12 @@ BITS 64 push rsi push rdi - mov rbx, ds + xor rbx, rbx + mov ebx, ds push rbx ; Save ds segment register on the stack - mov rbx, es + mov ebx, es push rbx ; Save es segment register on the stack - mov rbx, ss + mov ebx, ss push rbx ; Save ss segment register on the stack push fs @@ -307,11 +308,11 @@ BITS 64 pop gs pop fs pop rbx - mov ss, rbx + mov ss, ebx pop rbx - mov es, rbx + mov es, ebx pop rbx - mov ds, rbx + mov ds, ebx pop rdi pop rsi -----Original Message----- From: Mike Maslenkin [mailto:miha...@parallels.com] Sent: Thursday, August 21, 2014 5:40 AM To: edk2-devel@lists.sourceforge.net Subject: Re: [edk2] [PATCH 5/8] MdePkg/BaseLib Thunk16: Replace X64 GAS Thunk16 with NASM version Hello Jordan ! build -p build -p IntelFrameworkModulePkg/IntelFrameworkModulePkg.dsc -a X64 told me about next errors: Building ... /home/mg/sources/jljusten/edk2/MdePkg/Library/BaseReportStatusCodeLibNull/BaseReportStatusCodeLibNull.inf [X64] /home/mg/sources/jljusten/edk2/Build/IntelFrameworkModuleAll/DEBUG_GCC47/X64/MdePkg/Library/BaseLib/BaseLib/OUTPUT/X64/Thunk16.iii:193: error: segment alignment `0x8' is not power of two make: *** [/home/mg/sources/jljusten/edk2/Build/IntelFrameworkModuleAll/DEBUG_GCC47/X64/MdePkg/Library/BaseLib/BaseLib/OUTPUT/X64/Thunk16.obj] Error 1 /home/mg/sources/jljusten/edk2/Build/IntelFrameworkModuleAll/DEBUG_GCC47/X64/MdePkg/Library/BaseLib/BaseLib/OUTPUT/X64/Thunk16.iii:240: error: invalid combination of opcode and operands /home/mg/sources/jljusten/edk2/Build/IntelFrameworkModuleAll/DEBUG_GCC47/X64/MdePkg/Library/BaseLib/BaseLib/OUTPUT/X64/Thunk16.iii:242: error: invalid combination of opcode and operands /home/mg/sources/jljusten/edk2/Build/IntelFrameworkModuleAll/DEBUG_GCC47/X64/MdePkg/Library/BaseLib/BaseLib/OUTPUT/X64/Thunk16.iii:244: error: invalid combination of opcode and operands /home/mg/sources/jljusten/edk2/Build/IntelFrameworkModuleAll/DEBUG_GCC47/X64/MdePkg/Library/BaseLib/BaseLib/OUTPUT/X64/Thunk16.iii:310: error: invalid combination of opcode and operands /home/mg/sources/jljusten/edk2/Build/IntelFrameworkModuleAll/DEBUG_GCC47/X64/MdePkg/Library/BaseLib/BaseLib/OUTPUT/X64/Thunk16.iii:312: error: invalid combination of opcode and operands /home/mg/sources/jljusten/edk2/Build/IntelFrameworkModuleAll/DEBUG_GCC47/X64/MdePkg/Library/BaseLib/BaseLib/OUTPUT/X64/Thunk16.iii:314: error: invalid combination of opcode and operands make: *** [/home/mg/sources/jljusten/edk2/Build/IntelFrameworkModuleAll/DEBUG_GCC47/X64/MdePkg/Library/BaseLib/BaseLib/OUTPUT/X64/Thunk16.obj] Error 1 The last errors come from this +global ASM_PFX(InternalAsmThunk16) +ASM_PFX(InternalAsmThunk16): <skip> ^^^^^^^^^^^^^^^^^^^^^^^ > + push rbx ; Save ds segment register on the stack > + mov rbx, es > ^^^^^^^^^^^^^^^^^^^^^^^ > + push rbx ; Save es segment register on the stack > + mov rbx, ss ^^^^^^^^^^^^^^^^^^^^^^^ > + push rbx ; Save ss segment register on the stack <skip> > + mov ss, rbx > ^^^^^^^^^^^^^^^^^^^^^^^ > + pop rbx > + mov es, rbx ^^^^^^^^^^^^^^^^^^^^^^^ > + pop rbx > + mov ds, rbx ^^^^^^^^^^^^^^^^^^^^^^^ Initially I used a NASM version used in our build system. Do not know for where we got it but it reported itself as NASM version 2.09.04 After that I installed a default NASM that comes with openSuSE 12.2: NASM version 2.09.08 compiled on Jun 16 2011 I got same errors. So, please clarify which minimal version of NASM is required. ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/ _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel ------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/ _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel