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