================ @@ -1950,8 +1950,22 @@ ConstantLValueEmitter::tryEmitBase(const APValue::LValueBase &base) { if (D->hasAttr<WeakRefAttr>()) return CGM.GetWeakRefReference(D).getPointer(); - if (auto FD = dyn_cast<FunctionDecl>(D)) - return CGM.GetAddrOfFunction(FD); + if (auto FD = dyn_cast<FunctionDecl>(D)) { + auto *C = CGM.GetAddrOfFunction(FD); + + // we don't normally emit debug info for extern fns referenced via + // variable initialisers; BPF needs it since it generates BTF from + // debug info and bpftool demands BTF for every symbol linked + if (CGM.getTarget().getTriple().isBPF() && FD->getStorageClass() == SC_Extern) { ---------------- efriedma-quic wrote:
Looking at the code again, I guess the ultimate question is whether we want to emit debug info for all external functions/variables, or only functions/variables that are actually referenced. If we want all functions/variables, we want to extend ExternalDeclarations to include them. Maybe put the code in Sema::ActOnFunctionDeclarator, or something like that. If you just want referenced functions/variables, probably the code should be in GetAddrOfFunction() (and something similar for variables). https://github.com/llvm/llvm-project/pull/91310 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits