Unable to generate obj file using llc for bpf

Dear there,

I wasn’t able to generate obj file for bpf using llc:

llc -march bpf -filetype=obj foo.bc

Anyone knows what is the missing part in their backend? I want to make it work for my project.

Thanks,
Xiaochu

what do you mean exactly?
Is there some error message or foo.o is rejected by kernel?

Hi Alexei,

I haven’t tried to run code yet. The clang frontend can generate machine code for bpf but llc does not do the job.

When i use : llc -march bpf -filetype=obj arith.bc

It has this error message:

Assertion failed: (isa(Val) && “cast() argument of incompatible type!”), function cast, file /Users/xil174/Experiments/vcore_tool/llvm/include/llvm/Support/Casting.h, line 237.

0 llc 0x00000001052318ce llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 46

1 llc 0x0000000105233199 PrintStackTraceSignalHandler(void*) + 25

2 llc 0x000000010522fe89 llvm::sys::RunSignalHandlers() + 425

3 llc 0x000000010523351e SignalHandler(int) + 366

4 libsystem_platform.dylib 0x00007fff8f363f1a _sigtramp + 26

5 llc 0x000000010566fb75 (anonymous namespace)::RewriteSymbols::ID + 40849

6 llc 0x00000001052331bb raise + 27

7 llc 0x0000000105233272 abort + 18

8 llc 0x0000000105233251 __assert_rtn + 129

9 llc 0x0000000104dd593e llvm::cast_retty<llvm::MCSectionMachO, llvm::MCSection*>::ret_type llvm::cast<llvm::MCSectionMachO, llvm::MCSection>(llvm::MCSection*) + 110

10 llc 0x0000000104dcecdb (anonymous namespace)::MCMachOStreamer::ChangeSection(llvm::MCSection*, llvm::MCExpr const*) + 75

11 llc 0x0000000104de9c2d llvm::MCStreamer::SwitchSection(llvm::MCSection*, llvm::MCExpr const*) + 797

12 llc 0x0000000104de5300 llvm::MCStreamer::InitSections(bool) + 80

13 llc 0x00000001044f02b6 llvm::AsmPrinter::doInitialization(llvm::Module&) + 182

14 llc 0x0000000104c5e683 llvm::FPPassManager::doInitialization(llvm::Module&) + 99

15 llc 0x0000000104c5ee65 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) + 997

16 llc 0x0000000104c5e896 llvm::legacy::PassManagerImpl::run(llvm::Module&) + 310

17 llc 0x0000000104c5f771 llvm::legacy::PassManager::run(llvm::Module&) + 33

18 llc 0x0000000104279403 compileModule(char**, llvm::LLVMContext&) + 10755

19 llc 0x0000000104276996 main + 230

20 libdyld.dylib 0x00007fff907f25c9 start + 1

Stack dump:

  1. Program arguments: …/build/Debug/bin/llc -march bpf -filetype=obj arith.bc

Illegal instruction: 4

I thought BPF was mostly a Linux thing (I certainly don't know of any
MachO-based use). Perhaps try "-mtriple=bpf-linux-gnu" instead of
"-march=bpf", though that's really just wild guess.

Cheers.

Tim.

Yes, it works!

Thanks, Tim and Alexei !