On Aug 27, 2014, at 1:08 PM, Sergey Isakov <isakov...@bk.ru> wrote:

> And one new question. Why _16GdtrBase with underscore while m16Start without 
> it?
> ——
> ;
> ; These are global constant to convey information to C code.
> ;
> ASM_PFX(m16Size)         DW      InternalAsmThunk16 - m16Start
> ASM_PFX(mThunk16Attr)    DW      _BackFromUserCode.ThunkAttrEnd - 4 - m16Start
> ASM_PFX(m16Gdt)          DW      _NullSeg - m16Start
> ASM_PFX(m16GdtrBase)     DW      _16GdtrBase - m16Start
> ASM_PFX(mTransition)     DW      _EntryPoint - m16Start
> 
> —
> I got an error with this
> Thunk16.iii:60: error: symbol `m16Start' undefined
> 

Anything that is exported to C needs to wrapped in ASM_PFX(). Some compilers 
mangle a ‘_’ in front of the C names, and some do not. 

From looking at Thunk16.S I think m16Start is exported to C so it needs to 
referenced as ASM_PFX(m16Start) in the file. 

https://svn.code.sf.net/p/edk2/code/trunk/edk2/MdePkg/Library/BaseLib/X64/Thunk16.S
ASM_GLOBAL ASM_PFX(m16Start)

Thanks,

Andrew Fish

> 
> On 27 авг. 2014 г., at 22:04, Jordan Justen <jljus...@gmail.com> wrote:
> 
>> On Wed, Aug 27, 2014 at 5:18 AM, Sergey Isakov <isakov...@bk.ru> wrote:
>>> Hi sirs,
>>> I tested Thunk16.nasm too. For x86_64 there is no issue.
>>> For ia32 compilation disasm shows not good codes
>>> ---------
>>> 00000000 <m16Start>:
>>>   0: 00 00                 add    %al,(%eax)
>>>   2: 00 00                 add    %al,(%eax)
>>> ...
>>> 
>>> 00000006 <_BackFromUserCode>:
>>>   6: 16                   push   %ss
>>>   7: 0e                   push   %cs
>>>   8: 67 e8 00 00 66 9c     addr16 call 9c66000e
>>> <InternalAsmThunk16+0x9c65ff36>
>>> 
>>> 0000000c <_BackFromUserCode.Base>:
>>>   c: 66 9c                 pushfw
>>>   e: fa                   cli
>>> 
>>> ---------
>>> to compare gcc-4.9.1 cvompilation
>>> ---------
>>> 00000000 <m16Start>:
>>>   0: 00 00                 add    %al,(%eax)
>>>   2: 00 00                 add    %al,(%eax)
>>> ...
>>> 
>>> 00000006 <BackFromUserCode>:
>>>   6: 16                   push   %ss
>>>   7: 0e                   push   %cs
>>>   8: 66 e8 00 00           callw  c <BackFromUserCode+0x6>
>>> ...
>>> 
>>> 0000000e <L_Base1>:
>>>   e: 66 9c                 pushfw
>>>  10: fa                   cli
>>> 
>>> ----------
>>> May be change a32 prefix to o32 in the line:
>>> "a32 call    .Base                       ; push eip"
>>> ?
>> 
>> In the X64 file, I used:
>> call    dword .Base
>> 
>> I notice this produced the same code as:
>> o32 call    dword .Base
>> 
>> But,
>> o32 call    .Base
>> seems to produce invalid code. (OVMF hangs.)
>> 
>> It does seem like:
>> a32 call    .Base
>> is functional as well, but I know we are attempting to make the new
>> nasm code produce similar code to the old asm code where reasonable.
>> 
>> I think I only changed it in the X64 file to try to match the old 'db' code.
>> 
>> -Jordan
>> 
>>> On 27.08.2014, at 9:50, Jordan Justen wrote:
>>> 
>>> On Tue, Aug 19, 2014 at 4:57 PM, Jordan Justen
>>> <jordan.l.jus...@intel.com> wrote:
>>> 
>>> This series:
>>> 
>>> * Adds support for creating object files from .nasm source files to
>>> 
>>>  allow NASM source files to be linked into libraries and images
>>> 
>>> * Adds NASM source files for Thunk16 on IA32 and X64
>>> 
>>> * Convert BaseLib to use NASM Source Files for Thunk16 rather than
>>> 
>>>  GNU Assembler (.S) files
>>> 
>>>  - This will make NASM a build requirement for MdePkg with IA32 &
>>> 
>>>    X64 on all toolchains except MSVC and ICC.
>>> 
>>> 
>>> Thanks for Liming Gao for the tools_def changes for MSVC. (But, these
>>> 
>>> have not been tested very well yet.)
>>> 
>>> 
>>> This series is available in this git branch:
>>> 
>>> https://github.com/jljusten/edk2.git nasm-v1
>>> 
>>> 
>>> I update my nasm branch based on the feedback.
>>> 
>>> The differences vs. v1 are in the attached patch.
>>> 
>>> Is anyone interested in seeing a v2 posted to the list?
>>> 
>>> Liming, in patch 1, I mentioned I only tested with GCC49. Did you have
>>> any testing to add to that?
>>> 
>>> -Jordan
>>> 
>>> Jordan Justen (8):
>>> 
>>> BaseTools/tools_def: Add NASM_FLAGS
>>> 
>>> BaseTools/build_rule: Add .nasm => .obj build rule
>>> 
>>> MdePkg/Base.h: Always define ASM_PFX
>>> 
>>> MdePkg/BaseLib Thunk16: Replace IA32 GAS Thunk16 with NASM version
>>> 
>>> MdePkg/BaseLib Thunk16: Replace X64 GAS Thunk16 with NASM version
>>> 
>>> MdePkg/BaseLib NASM Thunk16: Use NASM local labels
>>> 
>>> MdePkg/BaseLib NASM Thunk16: Use bits 16 for 16-bit code
>>> 
>>> MdePkg/BaseLib NASM Thunk16: Remove remaining 'DB' code
>>> 
>>> 
>>> BaseTools/Conf/build_rule.template       |  15 ++
>>> 
>>> BaseTools/Conf/tools_def.template        | 287 ++++++++++++++++++++++++++-
>>> 
>>> MdePkg/Include/AArch64/ProcessorBind.h   |   4 +
>>> 
>>> MdePkg/Include/Arm/ProcessorBind.h       |   4 +
>>> 
>>> MdePkg/Include/Base.h                    |  25 ++-
>>> 
>>> MdePkg/Include/Ebc/ProcessorBind.h       |   4 +
>>> 
>>> MdePkg/Include/Ia32/ProcessorBind.h      |   4 +
>>> 
>>> MdePkg/Include/Ipf/ProcessorBind.h       |   4 +
>>> 
>>> MdePkg/Include/X64/ProcessorBind.h       |   4 +
>>> 
>>> MdePkg/Library/BaseLib/BaseLib.inf       |   4 +-
>>> 
>>> MdePkg/Library/BaseLib/Ia32/Thunk16.nasm | 260 +++++++++++++++++++++++++
>>> 
>>> MdePkg/Library/BaseLib/X64/Thunk16.nasm  | 321
>>> +++++++++++++++++++++++++++++++
>>> 
>>> 12 files changed, 914 insertions(+), 22 deletions(-)
>>> 
>>> create mode 100644 MdePkg/Library/BaseLib/Ia32/Thunk16.nasm
>>> 
>>> create mode 100644 MdePkg/Library/BaseLib/X64/Thunk16.nasm
>>> 
>>> 
>>> --
>>> 
>>> 2.1.0
>>> 
>>> 
>>> 
>>> ------------------------------------------------------------------------------
>>> 
>>> 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
>>> 
>>> <compare-nasm-to-nasm-v1.patch>------------------------------------------------------------------------------
>>> 
>>> 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
>>> 
>> 
>> ------------------------------------------------------------------------------
>> 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

------------------------------------------------------------------------------
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

Reply via email to