Andrew:
  Thanks for your sharing. I would like the official LLVM tool chain instead of 
the customized version.

  I will investigate it more and go back. Now, I push this patch set into 
staging https://github.com/tianocore/edk2-staging/tree/llvm8 for the evaluation.

Thanks
Liming
From: af...@apple.com [mailto:af...@apple.com]
Sent: Tuesday, May 21, 2019 6:53 AM
To: devel@edk2.groups.io; Gao, Liming <liming....@intel.com>
Cc: Justen, Jordan L <jordan.l.jus...@intel.com>; Ard Biesheuvel 
<ard.biesheu...@linaro.org>
Subject: Re: [edk2-devel] [Patch 0/7] Add new CLANG8ELF tool chain for new 
LLVM/CLANG8




On May 20, 2019, at 6:47 AM, Liming Gao 
<liming....@intel.com<mailto:liming....@intel.com>> wrote:

Jordan:


-----Original Message-----
From: Justen, Jordan L
Sent: Monday, May 20, 2019 4:15 AM
To: Ard Biesheuvel 
<ard.biesheu...@linaro.org<mailto:ard.biesheu...@linaro.org>>; Gao, Liming 
<liming....@intel.com<mailto:liming....@intel.com>>; edk2-devel-groups-io 
<devel@edk2.groups.io<mailto:devel@edk2.groups.io>>
Subject: Re: [edk2-devel] [Patch 0/7] Add new CLANG8ELF tool chain for new 
LLVM/CLANG8

On 2019-04-27 17:55:02, Liming Gao wrote:

-----Original Message-----
From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org]
Sent: Saturday, April 27, 2019 12:33 AM


This series confuses me. The existing CLANGxx toolchains already use
GenFw and ELF to PE/COFF conversion, so the name CLANG8ELF is
misleading.
LLVM/CLANG8.0 compiler supports to generate PE image or ELF image.
This tool chain is to generate ELF image and be converted to PE
image. I am investigating another tool chain with CLANG8.0 to
directly generate PE image. To differentiate them, I use the tool
chain name CLANG8ELF and CLANG8PE for them.

Assuming CLANG8ELF and CLANG8PE were functional, would both be needed?
It kind of sounds like this a half-finished investigation.
One point is that they will generate the different debug format symbols (WinDBG 
or GDB).
I have not done the full investigation to generate the different debug format 
symbols in single tool chain.



Liming,

I don't know the current answer but we moved over to using clang a while back 
on Mac so here are some general thoughts incase they help your investigation.

We had to take a different approach for i386 vs x86_64.:
1) i386
For i386 we used -arch i386 and compiler flags to produce the correct ABI. The 
thing about using -arch is the target triple defaults to your current machine, 
thus -arch i386 on a Mac is going to make a Mach-O object. if you use it one 
Linux it is going to make an ELF, on Windows a PE/COFF. To make this work we 
add mtoc to CCTOOLS this is a tool that converts Mach-O to PE/COFF. The PE/COFF 
contains a UUID for the Mach-O and the Mach-O dSYM (kind of like the PDB file) 
and that is what is used for debugging. You can even load the Mach-O directly 
into the debugger and do offline investigation of the image at its linked 
address.

2) x86_64
Since the Mac uses the System V ABI we needed a cross compiler. Clang 
implements cross compilers via the Triple (this is the -target argument you 
pass to clang). We actually end up open sourcing a triple that did what we 
needed.

For building on a Mac the triple is: -target x86_64-pc-win32-macho

 <arch><sub>-<vendor>-<sys>-<abi>
 < x86_64 ><>-< pc     >-< win32 >-< macho >

Examples:
arch = x86_64, i386, arm, thumb, mips, etc.
sub = for ex. on ARM: v5, v6m, v7a, v7m, etc.
vendor = pc, apple, nvidia, ibm, etc.
sys = none, linux, win32, darwin, cuda, etc.
abi = eabi, gnu, android, macho, elf, etc.

OK so they expanded the Triple to have 4 fields, so that is kind of naming 
fail, but they still seem to call it a triple. When we did the port 
"-DEFIAPI=__attribute__((ms_abi))" was not an option and that is why we ended 
up having to male our own triple. As far as I can tell __attribute__((ms_abi)) 
works correctly in the Xcode compiler.

To make the debugging work we ended up defining a new CodeView signature [1] to 
the PE/COFF Debug Directory Entry. At this point the native lldb (llvm 
debugger) does not know how to load Mach-O DWARF from PE/COFF. We could teach 
it, but we have not really found a need as we ended up writing debugger scripts 
to load symbols and lldb can load the Mach-O image (our build system leaves 
them around) for offline debugging.

In terms of PDB vs DWARF generally the compiler emits the DWARF (or PDB) data 
at compile time and the linker just aggregates it together. I see a blog from 
last April [2] talking about LLVM PDB support and it ends with "Do I hear 
cross-compilation?". So you might have to compile from the start for PDB or 
DWARF. This seems to imply you are going to need a triple to invoke a cross 
compiler? Also you are going to need that triple present in the clang binary, 
so you might be able to make a custom version of clang that supports the 
triples you need, but that may not be in the official binary for clang.

Converting ELF to PE/COFF is much more straight forward than converting the 
debugging information so that makes sense that it could just be the backend of 
the linker.

I look forward to getting the results of your investigation.

[1] 
https://github.com/tianocore/edk2/blob/master/MdePkg/Include/IndustryStandard/PeImage.h#L647
[2] http://blog.llvm.org/2017/08/llvm-on-windows-now-supports-pdb-debug.html

Thanks,

Andrew Fish

I'm guessing that if CLANG8PE produces equal or better code, then it
would be preferred.

Therefore, shouldn't we just finish the investigation, and add a
single CLANG8 toolchain at the end? Or, maybe to reflect that it
mostly uses the LLVM tool stack we could name it LLVM8.
I also prefer single CLANG8 tool chain. I will collect more information and see 
whether it is possible.
Now, I would like to add this tool chain for the developer evaluation. Because 
I can't address all
comments now, I will remove this feature from Q2 stable tag. I will add it into 
edk2-staging first.


-Jordan




-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#41098): https://edk2.groups.io/g/devel/message/41098
Mute This Topic: https://groups.io/mt/31354044/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to