Skip to content

Commit 76b7d73

Browse files
committed
BPF: report better error message for BTF_TYPE_ID_REMOTE relo failure
Matteo Croce reported a bpf backend fatal error in llvm/llvm-project#52779 A simplified case looks like: $ cat bug.c extern int do_smth(int); int test() { return __builtin_btf_type_id(*(typeof(do_smth) *)do_smth, 1); } $ clang -target bpf -O2 -g -c bug.c fatal error: error in backend: Empty type name for BTF_TYPE_ID_REMOTE reloc ... The reason for the fatal error is that the relocation is against a DISubroutineType like type 13 below: !10 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) !11 = !{} !12 = !DILocation(line: 3, column: 10, scope: !7) !13 = !DISubroutineType(types: !14) !14 = !{!10, !10} The DISubroutineType doesn't have a name and there is no way for downstream bpfloader/kernel to do proper relocation for it. But we can improve error message to be more specific for this case. The patch improved the error message to be: fatal error: error in backend: SubroutineType not supported for BTF_TYPE_ID_REMOTE reloc Differential Revision: https://reviews.llvm.org/D116063
1 parent b663287 commit 76b7d73

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

llvm/lib/Target/BPF/BPFPreserveDIType.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,13 @@ static bool BPFPreserveDITypeImpl(Function &F) {
9393
Ty = DTy->getBaseType();
9494
}
9595

96-
if (Ty->getName().empty())
97-
report_fatal_error("Empty type name for BTF_TYPE_ID_REMOTE reloc");
96+
if (Ty->getName().empty()) {
97+
if (isa<DISubroutineType>(Ty))
98+
report_fatal_error(
99+
"SubroutineType not supported for BTF_TYPE_ID_REMOTE reloc");
100+
else
101+
report_fatal_error("Empty type name for BTF_TYPE_ID_REMOTE reloc");
102+
}
98103
MD = Ty;
99104
}
100105

0 commit comments

Comments
 (0)