mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 18:54:02 +01:00
[DebugInfo] Support to emit debugInfo for extern variables
Extern variable usage in BPF is different from traditional pure user space application. Recent discussion in linux bpf mailing list has two use cases where debug info types are required to use extern variables: - extern types are required to have a suitable interface in libbpf (bpf loader) to provide kernel config parameters to bpf programs. https://lore.kernel.org/bpf/CAEf4BzYCNo5GeVGMhp3fhysQ=_axAf=23PtwaZs-yAyafmXC9g@mail.gmail.com/T/#t - extern types are required so kernel bpf verifier can verify program which uses external functions more precisely. This will make later link with actual external function no need to reverify. https://lore.kernel.org/bpf/87eez4odqp.fsf@toke.dk/T/#m8d5c3e87ffe7f2764e02d722cb0d8cbc136880ed This patch added clang support to emit debuginfo for extern variables with a TargetInfo hook to enable it. The debuginfo for the extern variable is emitted only if that extern variable is referenced in the current compilation unit. Currently, only BPF target enables to generate debug info for extern variables. The emission of such debuginfo is disabled for C++ at this moment since BPF only supports a subset of C language. Emission with C++ can be enabled later if an appropriate use case is identified. -fstandalone-debug permits us to see more debuginfo with the cost of bloated binary size. This patch did not add emission of extern variable debug info with -fstandalone-debug. This can be re-evaluated if there is a real need. Differential Revision: https://reviews.llvm.org/D70696
This commit is contained in:
parent
dba3d4e9de
commit
c2cccefed0
@ -583,7 +583,7 @@ namespace llvm {
|
||||
/// specified)
|
||||
DIGlobalVariableExpression *createGlobalVariableExpression(
|
||||
DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *File,
|
||||
unsigned LineNo, DIType *Ty, bool isLocalToUnit,
|
||||
unsigned LineNo, DIType *Ty, bool isLocalToUnit, bool isDefined = true,
|
||||
DIExpression *Expr = nullptr, MDNode *Decl = nullptr,
|
||||
MDTuple *templateParams = nullptr, uint32_t AlignInBits = 0);
|
||||
|
||||
|
@ -640,13 +640,14 @@ static void checkGlobalVariableScope(DIScope *Context) {
|
||||
|
||||
DIGlobalVariableExpression *DIBuilder::createGlobalVariableExpression(
|
||||
DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *F,
|
||||
unsigned LineNumber, DIType *Ty, bool isLocalToUnit, DIExpression *Expr,
|
||||
unsigned LineNumber, DIType *Ty, bool isLocalToUnit,
|
||||
bool isDefined, DIExpression *Expr,
|
||||
MDNode *Decl, MDTuple *templateParams, uint32_t AlignInBits) {
|
||||
checkGlobalVariableScope(Context);
|
||||
|
||||
auto *GV = DIGlobalVariable::getDistinct(
|
||||
VMContext, cast_or_null<DIScope>(Context), Name, LinkageName, F,
|
||||
LineNumber, Ty, isLocalToUnit, true, cast_or_null<DIDerivedType>(Decl),
|
||||
LineNumber, Ty, isLocalToUnit, isDefined, cast_or_null<DIDerivedType>(Decl),
|
||||
templateParams, AlignInBits);
|
||||
if (!Expr)
|
||||
Expr = createExpression();
|
||||
|
@ -1289,7 +1289,7 @@ LLVMMetadataRef LLVMDIBuilderCreateGlobalVariableExpression(
|
||||
return wrap(unwrap(Builder)->createGlobalVariableExpression(
|
||||
unwrapDI<DIScope>(Scope), {Name, NameLen}, {Linkage, LinkLen},
|
||||
unwrapDI<DIFile>(File), LineNo, unwrapDI<DIType>(Ty), LocalToUnit,
|
||||
unwrap<DIExpression>(Expr), unwrapDI<MDNode>(Decl),
|
||||
true, unwrap<DIExpression>(Expr), unwrapDI<MDNode>(Decl),
|
||||
nullptr, AlignInBits));
|
||||
}
|
||||
|
||||
|
@ -764,7 +764,7 @@ protected:
|
||||
|
||||
DBuilder.createGlobalVariableExpression(
|
||||
Subprogram, "unattached", "unattached", File, 1,
|
||||
DBuilder.createNullPtrType(), false, Expr);
|
||||
DBuilder.createNullPtrType(), false, true, Expr);
|
||||
|
||||
auto *Entry = BasicBlock::Create(C, "", F);
|
||||
IBuilder.SetInsertPoint(Entry);
|
||||
|
Loading…
Reference in New Issue
Block a user