40 lines · plain
1; RUN: llc -mtriple=bpfel -mcpu=v3 -filetype=obj -o %t1 %s2; RUN: llvm-objcopy --dump-section='.BTF'=%t2 %t13; RUN: %python %p/print_btf.py %t2 | FileCheck -check-prefixes=CHECK-BTF %s4; RUN: llc -mtriple=bpfel -mcpu=v3 < %s | FileCheck -check-prefixes=CHECK %s5 6; BPFTargetMachine Options.NoTrapAfterNoreturn has been set to true,7; so in below code, 'unreachable' will become a noop and8; llvm.trap() will become 'call __bpf_trap' after selectiondag.9define dso_local void @foo(i32 noundef %0) {10 tail call void @llvm.trap()11 unreachable12}13 14; CHECK: .Lfunc_begin0:15; CHECK-NEXT: .cfi_startproc16; CHECK-NEXT: # %bb.0:17; CHECK-NEXT: call __bpf_trap18; CHECK-NEXT: exit19; CHECK-NEXT: .Lfunc_end0:20 21; CHECK-BTF: [1] FUNC_PROTO '(anon)' ret_type_id=0 vlen=022; CHECK-BTF: [2] FUNC '__bpf_trap' type_id=1 linkage=extern23; CHECK-BTF: [3] DATASEC '.ksyms' size=0 vlen=124; CHECK-BTF: type_id=2 offset=0 size=025 26declare void @llvm.trap() #127 28attributes #1 = {noreturn}29 30!llvm.dbg.cu = !{!0}31!llvm.module.flags = !{!2, !3, !4, !5, !6}32 33!0 = distinct !DICompileUnit(language: DW_LANG_C11, file: !1, emissionKind: FullDebug)34!1 = !DIFile(filename: "test_trap.c", directory: "/some/dir")35!2 = !{i32 7, !"Dwarf Version", i32 5}36!3 = !{i32 2, !"Debug Info Version", i32 3}37!4 = !{i32 1, !"wchar_size", i32 4}38!5 = !{i32 7, !"frame-pointer", i32 2}39!6 = !{i32 7, !"debug-info-assignment-tracking", i1 true}40