llvm-project/llvm/test/DebugInfo/debuglineinfo-path.ll
Edd Dawson 3993a47bb5
[PS4/PS5][Driver][DWARF] Always emit .debug_aranges for SCE tuning (#100160)
Some of SIE's post-mortem analysis infrastructure currently makes use of
.debug_aranges, so we'd like to ensure the section's presence in
PlayStation binaries. The simplest way to do this is to force emission
when the debugger tuning is set to SCE (which is in turn typically
initialized from the target triple). This also simplifies the driver.

llvm/test/DebugInfo/debuglineinfo-path.ll has been marked as UNSUPPORTED
on PlayStation. When aranges are emitted, the DWARF in the test case is
such that relocations need to be applied to the aranges section in order
for symbolization to work. An alternative approach would be to implement
the application of relocations in DWARFDebugArangeSet. While experiments
show that this can be made to work with a modest patch, the test cases
would be rather contrived. Since I expect the only utility for such a
change would be to make this test case pass for PlayStation targets, and
few - if any - outside of PlayStation care about aranges, UNSUPPORTED
would seem to be a more practical option.

This was originally commited as 22eb290a96 (#99629) and later reverted
at 84658fb82b (#99711) due to test failures on SIE built bots. These
failures shouldn't recur due to 3b24e5d450 (#99897) and the
aforementioned change to debuglineinfo-path.ll.

SIE tracker: TOOLCHAIN-16951
2024-07-24 09:07:25 +01:00

76 lines
3.7 KiB
LLVM

; Make sure that absolute source dir is detected correctly regardless of the platform.
; On powerpc llvm-nm describes win_func as a global variable, not a function. It breaks the test.
; On PlayStation, (pre-relocated) .debug_aranges cause symbolization to fail, also breaking the test.
; These are not essential to DWARF path handling code we're testing here.
; UNSUPPORTED: target=powerpc{{.*}}, target=x86_64-{{.*-ps[45]}}
; REQUIRES: object-emission
; RUN: %llc_dwarf -O0 -filetype=obj -o %t < %s
; RUN: llvm-nm --radix=o %t | grep posix_absolute_func > %t.posix_absolute_func
; RUN: llvm-nm --radix=o %t | grep posix_relative_func > %t.posix_relative_func
; RUN: llvm-nm --radix=o %t | grep win_func > %t.win_func
; RUN: llvm-symbolizer --functions=linkage --inlining --no-demangle --obj %t < %t.posix_absolute_func | FileCheck %s --check-prefix=POSIX_A
; RUN: llvm-symbolizer --functions=linkage --inlining --no-demangle --obj %t < %t.posix_relative_func | FileCheck %s --check-prefix=POSIX_R
; RUN: llvm-symbolizer --functions=linkage --inlining --no-demangle --obj %t < %t.win_func | FileCheck %s --check-prefix=WIN
;POSIX_A: posix_absolute_func
;POSIX_A: /absolute/posix/path{{[\/]}}posix.c
;POSIX_R: posix_relative_func
;POSIX_R: /ABSOLUTE/CU/PATH{{[\/]}}relative/posix/path{{[\/]}}posix2.c
;WIN: win_func
;WIN: E:\absolute\windows\path{{[\/]}}win.c
define i32 @win_func() #0 !dbg !54 {
ret i32 5, !dbg !511
}
define i32 @posix_absolute_func() #0 !dbg !34 {
ret i32 3, !dbg !311
}
define i32 @posix_relative_func() #0 !dbg !44 {
ret i32 4, !dbg !411
}
!llvm.dbg.cu = !{!50, !30, !40}
!llvm.module.flags = !{!8, !9}
!llvm.ident = !{!10}
!8 = !{i32 2, !"Dwarf Version", i32 4}
!9 = !{i32 2, !"Debug Info Version", i32 3}
!10 = !{!"clang"}
!50 = distinct !DICompileUnit(language: DW_LANG_C99, file: !512, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !52)
!51 = !DIFile(filename: "win.c", directory: "E:\\absolute\\windows\\path")
!52 = !{}
!53 = !{!54}
!54 = distinct !DISubprogram(name: "win_func", scope: !51, file: !51, line: 55, type: !55, unit: !50, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: false, retainedNodes: !52)
!55 = !DISubroutineType(types: !56)
!56 = !{!57}
!57 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!511 = !DILocation(line: 55, column: 2, scope: !54)
!512 = !DIFile(filename: "a.c", directory: "/WIN_CU/PATH")
!30 = distinct !DICompileUnit(language: DW_LANG_C99, file: !312, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !32)
!31 = !DIFile(filename: "posix.c", directory: "/absolute/posix/path")
!32 = !{}
!33 = !{!34}
!34 = distinct !DISubprogram(name: "posix_absolute_func", scope: !31, file: !31, line: 33, type: !35, unit: !30, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: false, retainedNodes: !32)
!35 = !DISubroutineType(types: !36)
!36 = !{!37}
!37 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!311 = !DILocation(line: 33, column: 2, scope: !34)
!312 = !DIFile(filename: "b.c", directory: "/POSIX_CU/PATH")
!40 = distinct !DICompileUnit(language: DW_LANG_C99, file: !412, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !42)
!41 = !DIFile(filename: "posix2.c", directory: "relative/posix/path")
!42 = !{}
!43 = !{!44}
!44 = distinct !DISubprogram(name: "posix_relative_func", scope: !41, file: !41, line: 44, type: !45, unit: !40, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: false, retainedNodes: !42)
!45 = !DISubroutineType(types: !46)
!46 = !{!47}
!47 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
!411 = !DILocation(line: 44, column: 2, scope: !44)
!412 = !DIFile(filename: "c.c", directory: "/ABSOLUTE/CU/PATH")