Hey guys,

I’m having some issues building OVMF on OS X 10.9 with the latest dev tools. 
I’m running Xcode 5.1.1, with the “Late June” Command Line Tools.

$ clang --version
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix

Issue #1

$ build -p OvmfPkg/OvmfPkgX64.dsc
<snip>
Building ... 
/Users/x/code/ext/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib.inf
 [X64]
"clang" -E -x assembler-with-cpp -include 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib/DEBUG/AutoGen.h
 -I/Users/x/code/ext/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64 
-I/Users/x/code/ext/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib 
-I/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib/DEBUG
 -I/Users/x/code/ext/edk2/MdePkg -I/Users/x/code/ext/edk2/MdePkg/Include 
-I/Users/x/code/ext/edk2/MdePkg/Include/X64 
-I/Users/x/code/ext/edk2/MdeModulePkg 
-I/Users/x/code/ext/edk2/MdeModulePkg/Include 
-I/Users/x/code/ext/edk2/UefiCpuPkg -I/Users/x/code/ext/edk2/UefiCpuPkg/Include 
/Users/x/code/ext/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64/ExceptionHandlerAsm.S
 > 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib/OUTPUT/X64/ExceptionHandlerAsm.i
Trim --trim-long --source-code -o 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib/OUTPUT/X64/ExceptionHandlerAsm.iii
 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib/OUTPUT/X64/ExceptionHandlerAsm.i
"as" -arch x86_64 -g -o 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib/OUTPUT/X64/ExceptionHandlerAsm.obj
 -I/Users/x/code/ext/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib/X64 
-I/Users/x/code/ext/edk2/UefiCpuPkg/Library/CpuExceptionHandlerLib 
-I/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib/DEBUG
 -I/Users/x/code/ext/edk2/MdePkg -I/Users/x/code/ext/edk2/MdePkg/Include 
-I/Users/x/code/ext/edk2/MdePkg/Include/X64 
-I/Users/x/code/ext/edk2/MdeModulePkg 
-I/Users/x/code/ext/edk2/MdeModulePkg/Include 
-I/Users/x/code/ext/edk2/UefiCpuPkg -I/Users/x/code/ext/edk2/UefiCpuPkg/Include 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib/OUTPUT/X64/ExceptionHandlerAsm.iii
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib/OUTPUT/X64/ExceptionHandlerAsm.iii:569:no
 such instruction: `retf'
make: *** 
[/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib/OUTPUT/X64/ExceptionHandlerAsm.obj]
 Error 1

This is the code in question:

DoReturn:
    pushq   %rax
    movabsq ASM_PFX(mDoFarReturnFlag), %rax
    cmpq    $0, %rax          # Check if need to do far return instead of IRET
    popq    %rax
    jz      DoIret
    pushq   %rax
    movq    %rsp, %rax        # save old RSP to rax
    movq    0x20(%rsp), %rsp
    pushq   0x10(%rax)        # save CS in new location
    pushq   0x8(%rax)         # save EIP in new location
    pushq   0x18(%rax)        # save EFLAGS in new location
    movq    (%rax), %rax      # restore rax
    popfq                     # restore EFLAGS
    .byte   0x48              # prefix to composite "retq" with next "retf"
    retf                      # far return

I changed the `retf` to a `ret` to get it to assemble for now.

Issue #2

Next issue is with the ACPI tables:

Building ... /Users/x/code/ext/edk2/OvmfPkg/AcpiTables/AcpiTables.inf [X64]
Trim --asl-file -o 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Ssdt.i
 -i 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/inc.lst
 /Users/x/code/ext/edk2/OvmfPkg/AcpiTables/Ssdt.asl
"clang" -x c -E -I/Users/x/code/ext/edk2/OvmfPkg/AcpiTables 
-I/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/DEBUG
 -I/Users/x/code/ext/edk2/MdePkg -I/Users/x/code/ext/edk2/MdePkg/Include 
-I/Users/x/code/ext/edk2/MdePkg/Include/X64 
-I/Users/x/code/ext/edk2/OvmfPkg/AcpiTables 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Ssdt.i
 > 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Ssdt.iii
"iasl"  
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Ssdt.aml
 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Ssdt.iii
Error    6092 - Could not open file 
"/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Ssdt.aml"
 (No such file or directory) 

I’m not familiar with compiling ASL, so I’m not sure what’s going on here, but 
it seems like a bad invocation of `iasl`. I installed the `acpica` package from 
homebrew, which contains `iasl`.

$ iasl -v

Intel ACPI Component Architecture
ASL Optimizing Compiler version 20130823-64 [Jun 20 2014]
Copyright (c) 2000 - 2013 Intel Corporation

The intermediate files look like this:

Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Ssdt.i:

#undef MIN
#undef MAX
/** @file
<snip>
**/

DefinitionBlock ("Ssdt.aml", "SSDT", 1, "REDHAT", "OVMF    ", 1) {
}

Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/inc.lst:

-I/Users/x/code/ext/edk2/OvmfPkg/AcpiTables
-I/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/DEBUG
-I/Users/x/code/ext/edk2/MdePkg
-I/Users/x/code/ext/edk2/MdePkg/Include
-I/Users/x/code/ext/edk2/MdePkg/Include/X64

Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Ssdt.iii:

# 1 
"/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Ssdt.i"
# 1 "<built-in>" 1
# 1 "<built-in>" 3
# 170 "<built-in>" 3
# 1 "<command line>" 1
# 1 "<built-in>" 2
# 1 
"/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Ssdt.i"
 2
# 20 
"/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Ssdt.i"
DefinitionBlock ("Ssdt.aml", "SSDT", 1, "REDHAT", "OVMF    ", 1) {
}

The build rule for ASL files looks like this:

    <Command.GCC>
        Trim --asl-file -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i -i 
$(INC_LIST) ${src}
        "$(ASLPP)" $(ASLPP_FLAGS) $(INC) -I${s_path} 
$(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i > 
$(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii
        "$(ASL)" $(ASL_FLAGS) $(ASL_OUTFLAGS)${dst} 
$(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii

Any ideas?

Issue #3

If I skip the ASL files, next issue is here:

ld: symbol(s) not found for inferred architecture x86_64
Building ... /Users/x/code/ext/edk2/OvmfPkg/AcpiTables/AcpiTables.inf [X64]
Trim --asl-file -o 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Ssdt.i
 -i 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/inc.lst
 /Users/x/code/ext/edk2/OvmfPkg/AcpiTables/Ssdt.asl
"clang" -x c -E -I/Users/x/code/ext/edk2/OvmfPkg/AcpiTables 
-I/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/DEBUG
 -I/Users/x/code/ext/edk2/MdePkg -I/Users/x/code/ext/edk2/MdePkg/Include 
-I/Users/x/code/ext/edk2/MdePkg/Include/X64 
-I/Users/x/code/ext/edk2/OvmfPkg/AcpiTables 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Ssdt.i
 > 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Ssdt.iii
"clang" -o 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Madt.obj
  -x c -save-temps -g -O0 -fshort-wchar -fno-strict-aliasing -Wall -Werror 
-Wno-missing-braces -c -include AutoGen.h -mdynamic-no-pic 
-I/Users/x/code/ext/edk2/OvmfPkg/AcpiTables 
-I/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/DEBUG
 -I/Users/x/code/ext/edk2/MdePkg -I/Users/x/code/ext/edk2/MdePkg/Include 
-I/Users/x/code/ext/edk2/MdePkg/Include/X64 
/Users/x/code/ext/edk2/OvmfPkg/AcpiTables/Madt.aslc
"ld" -o 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Madt.dll
 -e _main -preload -segalign 0x20 -pie -seg1addr 0x240 -read_only_relocs 
suppress -map 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/DEBUG/PlatformAcpiTables.map
 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/OvmfPkg/AcpiTables/AcpiTables/OUTPUT/./Madt.obj
ld: warning: -macosx_version_min not specified, assuming 10.8
Undefined symbols for architecture x86_64:
  "_main", referenced from:
     -u command line option
ld: symbol(s) not found for inferred architecture x86_64

Not sure if the main is actually required for this guy? Again, not too familiar 
with ACPI, but just defining a dummy main function in each of the `aslc` files 
(it happens with each of them) gets past there. I suspect this is a change in 
behaviour with clang, I remember having a similar issue with some freestanding 
Rust code.

Issue #4

Building ... /Users/x/code/ext/edk2/MdeModulePkg/Core/Dxe/DxeMain.inf [X64]
"ld" -arch x86_64 -u __ModuleEntryPoint -e __ModuleEntryPoint -preload 
-segalign 0x20 -pie -all_load -dead_strip -seg1addr 0x240 -map 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.map
 -o 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.dll
  -filelist 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/MdeModulePkg/Core/Dxe/DxeMain/OUTPUT/static_library_files.lst
ld: illegal text-relocation to '_CommonInterruptEntry' in 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib/OUTPUT/DxeCpuExceptionHandlerLib.lib(ExceptionHandlerAsm.obj)
 from 'Exception0Handle' in 
/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/UefiCpuPkg/Library/CpuExceptionHandlerLib/DxeCpuExceptionHandlerLib/OUTPUT/DxeCpuExceptionHandlerLib.lib(ExceptionHandlerAsm.obj)
 for architecture x86_64
make: *** 
[/Users/x/code/ext/edk2/Build/OvmfX64/DEBUG_XCLANG/X64/MdeModulePkg/Core/Dxe/DxeMain/DEBUG/DxeCore.dll]
 Error 1

Wondering if this is a result of the `ret` instruction change I made earlier. 
That’s as far as I’m able to get so far. Any help is appreciated :)

Thanks,
Egon
------------------------------------------------------------------------------
HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions
Find What Matters Most in Your Big Data with HPCC Systems
Open Source. Fast. Scalable. Simple. Ideal for Dirty Data.
Leverages Graph Analysis for Fast Processing & Easy Data Exploration
http://p.sf.net/sfu/hpccsystems
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to