[PATCH] D126361: [DebugInfo][ARM] Not readonly check for RWPI globals
Keith Walker via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed May 25 02:35:43 PDT 2022
keith.walker.arm created this revision.
keith.walker.arm added reviewers: labrinea, dblaikie, aprantl.
Herald added subscribers: hiraditya, kristof.beyls.
Herald added a project: All.
keith.walker.arm requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
When compiling for the RWPI relocation model [1], the debug information is wrong for readonly global variables.
Writable global variables are accessed by the static base register (R9 <https://reviews.llvm.org/source/libcxxabi/> on ARM) in the RWPI relocation model. This is being correctly generated
Readonly global variables are not accessed by the static base register in the RWPI relocation model. This case is incorrectly generating the same debugging information as for writable global variables.
References:
[1] ARM Read-Write Position Independence: https://github.com/ARM-software/abi-aa/blob/main/aapcs32/aapcs32.rst#read-write-position-independence-rwpi
https://reviews.llvm.org/D126361
Files:
llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
llvm/test/DebugInfo/ARM/ropi.ll
Index: llvm/test/DebugInfo/ARM/ropi.ll
===================================================================
--- /dev/null
+++ llvm/test/DebugInfo/ARM/ropi.ll
@@ -0,0 +1,37 @@
+; RUN: llc -mtriple armv7-linux -relocation-model=ropi -o - %s | FileCheck %s
+; RUN: llc -mtriple armv7-linux -relocation-model=ropi-rwpi -o - %s | FileCheck %s
+
+ at global = constant i32 -1414812757, align 4, !dbg !0
+
+; CHECK: .section .debug_info
+; CHECK: .byte 2 @ DW_AT_location
+; DW_OP_addrx 0x0
+; CHECK-NEXT: .byte 161
+; CHECK-NEXT: .byte 0
+
+; CHECK: .section .debug_addr
+; CHECK: .long global
+
+!llvm.dbg.cu = !{!2}
+!llvm.module.flags = !{!8, !9, !10, !11, !12, !13, !14, !15, !16}
+!llvm.ident = !{!17}
+
+!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
+!1 = distinct !DIGlobalVariable(name: "global", scope: !2, file: !5, line: 1, type: !6, isLocal: false, isDefinition: true)
+!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, producer: "clang version 15.0.0 (https://github.com/llvm/llvm-project.git 3948962b454022c2c8de6f67942a9cbd1f0351a0)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, globals: !4, splitDebugInlining: false, nameTableKind: None)
+!3 = !DIFile(filename: "/tmp/ropi.c", directory: "/tmp")
+!4 = !{!0}
+!5 = !DIFile(filename: "ropi.c", directory: "/tmp")
+!6 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !7)
+!7 = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)
+!8 = !{i32 7, !"Dwarf Version", i32 5}
+!9 = !{i32 2, !"Debug Info Version", i32 3}
+!10 = !{i32 1, !"wchar_size", i32 4}
+!11 = !{i32 1, !"min_enum_size", i32 4}
+!12 = !{i32 8, !"branch-target-enforcement", i32 0}
+!13 = !{i32 8, !"sign-return-address", i32 0}
+!14 = !{i32 8, !"sign-return-address-all", i32 0}
+!15 = !{i32 8, !"sign-return-address-with-bkey", i32 0}
+!16 = !{i32 7, !"frame-pointer", i32 2}
+!17 = !{!"clang version 15.0.0 (https://github.com/llvm/llvm-project.git 3948962b454022c2c8de6f67942a9cbd1f0351a0)"}
+
Index: llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
===================================================================
--- llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
+++ llvm/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
@@ -301,8 +301,11 @@
DD->useGNUTLSOpcode() ? dwarf::DW_OP_GNU_push_tls_address
: dwarf::DW_OP_form_tls_address);
}
- } else if (Asm->TM.getRelocationModel() == Reloc::RWPI ||
- Asm->TM.getRelocationModel() == Reloc::ROPI_RWPI) {
+ } else if ((Asm->TM.getRelocationModel() == Reloc::RWPI ||
+ Asm->TM.getRelocationModel() == Reloc::ROPI_RWPI) &&
+ !Asm->getObjFileLowering()
+ .getKindForGlobal(Global, Asm->TM)
+ .isReadOnly()) {
auto FormAndOp = GetPointerSizedFormAndOp();
// Constant
addUInt(*Loc, dwarf::DW_FORM_data1, FormAndOp.Op);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D126361.431918.patch
Type: text/x-patch
Size: 3002 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220525/e7b0744f/attachment.bin>
More information about the llvm-commits
mailing list