================
@@ -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

Reply via email to