[llvm-dev] How to add new arch for llvm-cov show?

Vedant Kumar via llvm-dev llvm-dev at lists.llvm.org
Thu Jan 24 11:13:56 PST 2019



> On Jan 23, 2019, at 11:36 PM, xuruobin <xuruobin at huawei.com> wrote:
> 
> Hi vedant,
>  
> 1.       The definition is from llvm/Supprot/ELF.h. But this machine information(e_machine) is given to compiler at lib/MC/ELFObjectWriter.cpp. I greped the whole llvm project and found that e_machine was assigned at only two files. One was lib/MC/ELFObjectWriter.cpp(there was an comment said “e_machine=target”) and the other was tools/obj2yaml/elf2yaml.cpp(GDB stopped only at the former one when using x86_64 llvm-cov so I thought it was MC provide this e_machine information to compiler).

First, I think this reinforces my theory that llvm’s object file reading libraries do not “understand” the architecture you’re working on.

Second — and I’m not super familiar with this part of the codebase, so apologies for any mistakes here — you might have missed the ELF file reader?

$ git grep -iE "\<e_?machine\>” lib
…
lib/Object/ELF.cpp:  return getDynamicTagAsString(getHeader()->e_machine, Type);



> 2.       New error was “Failed to load coverage: No coverage data found” since the compiler cannot get NamesSection(at loadBinaryFormat in CoverageMappingReader.cpp). I thought it was my ldscript problem because I put __llvm_prf_names, __llvm_prf_cnts, __llvm_prf_data and __llvm_prf_vnds inside .rodata section. Compiler checked .rodata but not things inside .rodata. What’s the right position to put these 4 __llvm_prf_* sections?

I’m not sure what changed, exactly, between the point you encountered the last error and this one. Could you elaborate?

This is just a shot in the dark, but you may need to teach getInstrProfSectionName about any custom linker directives needed for your architecture.

vedant


>  
> Best,
> Ruobin.
>  
> 发件人: vsk at apple.com [mailto:vsk at apple.com] 代表 Vedant Kumar
> 发送时间: 2019年1月24日 0:12
> 收件人: xuruobin <xuruobin at huawei.com>
> 抄送: vsk at apple.com; llvm-dev at lists.llvm.org; Yuchao (Michael) <michael.yuchao at huawei.com>
> 主题: Re: 答复: [llvm-dev] How to add new arch for llvm-cov show?
>  
>  
> On Jan 23, 2019, at 1:24 AM, xuruobin <xuruobin at huawei.com <mailto:xuruobin at huawei.com>> wrote:
> 
> Hi vedant,
> 
>  The program didn't pass the checking "OF->getArch() != Triple(Arch).getArch()" loadBinaryFormat in CoverageMappingReader.cpp and returned an error. It's because "OF->getArch()" returned null and "Triple(Arch).getArch()" returned XXXX(name of my arch). 
>  The returned value of  " OF->getArch()" is decided by " EF.getHeader()->e_machine" but I found "e_machine" is defined somewhere in MCAssembler
>  
> I haven’t double-checked, but I thought this definition came from llvm/Support/ELF.h?
>  
> 
> 
> (My compiler uses binutils as assembler) . Although I make some hacks to pass this checking, I still get other errors. So my problem is whether llvm-cov has to work with MCAssembler and is it possible to do it with binutils?
>  
> Coverage support should be / is largely compatible with binutils, but you may have to watch out for this BFD bug: https://clang.llvm.org/docs/SourceBasedCodeCoverage.html#drawbacks-and-limitations <https://clang.llvm.org/docs/SourceBasedCodeCoverage.html#drawbacks-and-limitations>
>  
> What is the error you see?
>  
> vedant 
> 
> 
> 
> Best,
> Ruobin
> 
> 
> -----邮件原件-----
> 发件人: vsk at apple.com <mailto:vsk at apple.com> [mailto:vsk at apple.com <mailto:vsk at apple.com>]
> 发送时间: 2019年1月23日 1:24
> 收件人: xuruobin <xuruobin at huawei.com <mailto:xuruobin at huawei.com>>
> 抄送: llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>; Yuchao (Michael)
> <michael.yuchao at huawei.com <mailto:michael.yuchao at huawei.com>>
> 主题: Re: [llvm-dev] How to add new arch for llvm-cov show?
>  
> Hi Ruobin,
>  
> On Jan 21, 2019, at 5:21 PM, xuruobin via llvm-dev <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>>
> wrote:
>  
> Hi all,
>  
> I'm trying to support llvm-cov for a new architecture and I have successfully
> built compiler-rt for my arch. Following steps shown in
> https://clang.llvm.org/docs/SourceBasedCodeCoverage.html <https://clang.llvm.org/docs/SourceBasedCodeCoverage.html> , I encountered
> an error for the last step(step of llvm-cov show).
> The command line was (supposed my arch is XXXX)
>  
> "llvm-cov show -arch=XXXX ./foo -instr-profile=foo.profdata"
>  
> and the error was
>  
> "Failed to load coverage: No object file for requested architecture."
>  
> I think I should add my arch information to somewhere(maybe an llvm-cov
> support list?) but I don't know where to add these information. Can
> someone give me some suggestions?
>  
> You’ll need to teach libObject about this architecture. Specifically, the
> coverage reader checks that calling getArch() on a loaded ObjectFile matches
> Triple(Arch).getArch() (see loadBinaryFormat in
> CoverageMappingReader.cpp).
>  
> best,
> vedant
>  
>  
>  
> Best Regards,
> Ruobin.
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190124/8ddd6d6a/attachment-0001.html>


More information about the llvm-dev mailing list