Andrew:
  The original code is "while (Counter > 0xffffffff) {", we meet with the same 
issue in UNIXGCC tool chain. So, we change the code to "while ((Counter & 
0xffffffff00000000ULL) != 0) {".  Now, you meet with this issue again in XCODE 
tool chain. The possible fix is to use BaseLib API. The code could be changed 
to "while (RShiftU64 (Counter, 32) > 0) {"

Thanks
Liming
From: Andrew Fish [mailto:af...@apple.com]
Sent: Thursday, September 04, 2014 8:07 AM
To: edk2-devel@lists.sourceforge.net
Subject: [edk2] The DXE Core does not link with Xcode 5 for IA32

It looks like the 64-bit bit wise and operation is causing the compiler to emit 
an __umoddi3 I'm looking into to how to work around this issue.

>build -p MdeModulePkg/MdeModulePkg.dsc -a IA32 -t XCODE5 -n 1

Building ... /Users/andrewfish/work/src/edk2/MdeModulePkg/Core/Dxe/DxeMain.inf 
[IA32]
"ld" -arch i386 -u __ModuleEntryPoint -e __ModuleEntryPoint -preload -segalign 
0x20 -pie -all_load -dead_strip -seg1addr 0x240 -read_only_relocs suppress -map 
/Users/andrewfish/work/src/edk2/Build/MdeModule/DEBUG_XCODE5/IA32/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.map
 -o 
/Users/andrewfish/work/src/edk2/Build/MdeModule/DEBUG_XCODE5/IA32/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.dll
  -filelist 
/Users/andrewfish/work/src/edk2/Build/MdeModule/DEBUG_XCODE5/IA32/MdeModulePkg/Core/Dxe/DxeMain/OUTPUT/static_library_files.lst
Undefined symbols for architecture i386:
  "___umoddi3", referenced from:
      _CoreInternalWaitForTick in DxeCore.lib(Stall.obj)

~/work/src/edk2(master)>otool -tvV 
Build/MdeModule/DEBUG_XCODE5/IA32/MdeModulePkg/Core/Dxe/DxeMain/OUTPUT/Misc/Stall.obj
Build/MdeModule/DEBUG_XCODE5/IA32/MdeModulePkg/Core/Dxe/DxeMain/OUTPUT/Misc/Stall.obj:
(__TEXT,__text) section
_CoreInternalWaitForTick:
00000000                pushl       %ebp
00000001                movl        %esp, %ebp
00000003                pushl       %ebx
00000004                pushl       %edi
00000005                pushl       %esi
00000006                subl         $0x1c, %esp
00000009                movl        0x683, %eax
0000000e                movl        _CoreInternalWaitForTick(%eax), %esi
00000010                movl        _CoreInternalWaitForTick(%esi), %ecx
00000012                movl        0x8(%ebp), %ebx
00000015                movl        0xc(%ebp), %edi
00000018                testl          %edi, %edi
0000001a                je             0x6e
0000001c                movl        %ecx, -0x10(%ebp)
0000001f leal           -0x1(%edi), %eax
00000022                movl        %ebx, _CoreInternalWaitForTick(%esp)
00000025                movl        %eax, 0x4(%esp)
00000029                movl        $_CoreInternalWaitForTick, 0xc(%esp)
00000031                movl        $0xffffffff, 0x8(%esp)
00000039                calll          ___umoddi3

~/work/src/edk2(master)>lldb  
Build/MdeModule/DEBUG_XCODE5/IA32/MdeModulePkg/Core/Dxe/DxeMain/OUTPUT/Misc/Stall.obj
Current executable set to 
'Build/MdeModule/DEBUG_XCODE5/IA32/MdeModulePkg/Core/Dxe/DxeMain/OUTPUT/Misc/Stall.obj'
 (i386).
(lldb) dis -b -m -n CoreInternalWaitForTick
Stall.obj`CoreInternalWaitForTick at Stall.c:34
   33           )
   34         {
   35           while ((Counter & 0xffffffff00000000ULL) != 0) {
Stall.obj[0x0]:  55                       pushl  %ebp
Stall.obj[0x1]:  89 e5                    movl   %esp, %ebp
Stall.obj`CoreInternalWaitForTick + 3 at Stall.c:36
   35           while ((Counter & 0xffffffff00000000ULL) != 0) {
   36             gMetronome->WaitForTick (gMetronome, 0xffffffff);
   37             Counter -= 0xffffffff;
Stall.obj[0x3]:  53                       pushl  %ebx
Stall.obj[0x4]:  57                       pushl  %edi
Stall.obj[0x5]:  56                       pushl  %esi
Stall.obj[0x6]:  83 ec 1c                 subl   $0x1c, %esp
Stall.obj[0x9]:  a1 83 06 00 00           movl   0x683, %eax
Stall.obj[0xe]:  8b 30                    movl   (%eax), %esi
Stall.obj[0x10]:  8b 0e                    movl   (%esi), %ecx
Stall.obj[0x12]:  8b 5d 08                 movl   0x8(%ebp), %ebx
Stall.obj[0x15]:  8b 7d 0c                 movl   0xc(%ebp), %edi
Stall.obj[0x18]:  85 ff                    testl  %edi, %edi
Stall.obj[0x1a]:  74 52                    je     0x6e                      ; 
CoreInternalWaitForTick + 110 at Stall.c:39
Stall.obj[0x1c]:  89 4d f0                 movl   %ecx, -0x10(%ebp)
Stall.obj`CoreInternalWaitForTick + 31 at Stall.c:35
   34         {
   35           while ((Counter & 0xffffffff00000000ULL) != 0) {
   36             gMetronome->WaitForTick (gMetronome, 0xffffffff);
Stall.obj[0x1f]:  8d 47 ff                 leal   -0x1(%edi), %eax
Stall.obj[0x22]:  89 1c 24                 movl   %ebx, (%esp)
Stall.obj[0x25]:  89 44 24 04              movl   %eax, 0x4(%esp)
Stall.obj[0x29]:  c7 44 24 0c 00 00 00 00  movl   $0x0, 0xc(%esp)
Stall.obj[0x31]:  c7 44 24 08 ff ff ff ff  movl   $0xffffffff, 0x8(%esp)
Stall.obj[0x39]:  e8 c2 ff ff ff           calll  0x0                       ; 
CoreInternalWaitForTick at Stall.c:34
Stall.obj[0x3e]:  89 45 ec                 movl   %eax, -0x14(%ebp)
Stall.obj[0x41]:  8b 4d f0                 movl   -0x10(%ebp), %ecx


Thanks,

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