[llvm] [BOLT][DWARF] Fix debug info update issue with dwarf4 dwp (PR #155619)
Jinjie Huang via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 3 06:15:55 PDT 2025
https://github.com/Jinjie-Huang updated https://github.com/llvm/llvm-project/pull/155619
>From 93d81b553f6782b4bcb67bf6ab61cd7f34bb0a59 Mon Sep 17 00:00:00 2001
From: huangjinjie <huangjinjie at bytedance.com>
Date: Wed, 27 Aug 2025 20:58:34 +0800
Subject: [PATCH 1/4] fix dwarf4 dwp crash
---
bolt/lib/Rewrite/DWARFRewriter.cpp | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/bolt/lib/Rewrite/DWARFRewriter.cpp b/bolt/lib/Rewrite/DWARFRewriter.cpp
index 0c1a1bac6c72e..6eefa5155298b 100644
--- a/bolt/lib/Rewrite/DWARFRewriter.cpp
+++ b/bolt/lib/Rewrite/DWARFRewriter.cpp
@@ -504,9 +504,7 @@ static void emitDWOBuilder(const std::string &DWOName,
}
emitUnit(DWODIEBuilder, *Streamer, SplitCU);
} else {
- for (std::unique_ptr<llvm::DWARFUnit> &CU :
- SplitCU.getContext().dwo_compile_units())
- emitUnit(DWODIEBuilder, *Streamer, *CU);
+ emitUnit(DWODIEBuilder, *Streamer, SplitCU);
// emit debug_types sections for dwarf4
for (DWARFUnit *CU : DWODIEBuilder.getDWARF4TUVector())
>From 95ac6f4786d901e73856303510475dc6bcf97b12 Mon Sep 17 00:00:00 2001
From: huangjinjie <huangjinjie at bytedance.com>
Date: Tue, 2 Sep 2025 20:47:43 +0800
Subject: [PATCH 2/4] add test
---
bolt/test/X86/dwarf4-dwp.test | 41 +++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
create mode 100644 bolt/test/X86/dwarf4-dwp.test
diff --git a/bolt/test/X86/dwarf4-dwp.test b/bolt/test/X86/dwarf4-dwp.test
new file mode 100644
index 0000000000000..6c619ed55233b
--- /dev/null
+++ b/bolt/test/X86/dwarf4-dwp.test
@@ -0,0 +1,41 @@
+# REQUIRES: system-linux
+
+# RUN: rm -rf %t && mkdir -p %t && cd %t
+# RUN: split-file %s %t
+# RUN: %clangxx -g -gdwarf-4 -gsplit-dwarf %t/main.cpp %t/callee.cpp -o main.exe
+# RUN: llvm-dwp -e %t/main.exe -o %t/main.exe.dwp
+# RUN: llvm-bolt %t/main.exe -o %t/main.exe.bolt -update-debug-sections 2>&1 | FileCheck %s
+
+# CHECK-NOT: Assertion
+
+
+#--- main.cpp
+int hotFunction(int x);
+
+int main(int argc, char **argv) {
+ int sum = 0;
+ for (int i = 0; i < 50000000; ++i) { // 让运行时间更久
+ sum += hotFunction(i);
+ }
+ if (sum)
+ return 0;
+ else
+ return 1;
+}
+
+#--- callee.cpp
+int hotFunction(int x) {
+ if ((x & 1) == 0) {
+ x = x * 3 + 1;
+ if (x % 5 == 0) {
+ x += 7;
+ }
+ } else {
+ x = x * x;
+ if (x % 3 == 0) {
+ x -= 4;
+ }
+ }
+ return x;
+}
+
>From 168fa8993d91fdafedd5ad9dd20abaa5543f1466 Mon Sep 17 00:00:00 2001
From: huangjinjie <huangjinjie at bytedance.com>
Date: Wed, 3 Sep 2025 20:41:27 +0800
Subject: [PATCH 3/4] modify test, use assembly with split-file
---
bolt/test/X86/dwarf4-dwp.s | 450 ++++++++++++++++++++++++++++++++++
bolt/test/X86/dwarf4-dwp.test | 41 ----
2 files changed, 450 insertions(+), 41 deletions(-)
create mode 100755 bolt/test/X86/dwarf4-dwp.s
delete mode 100644 bolt/test/X86/dwarf4-dwp.test
diff --git a/bolt/test/X86/dwarf4-dwp.s b/bolt/test/X86/dwarf4-dwp.s
new file mode 100755
index 0000000000000..d3168af692280
--- /dev/null
+++ b/bolt/test/X86/dwarf4-dwp.s
@@ -0,0 +1,450 @@
+# RUN: rm -rf %t && mkdir -p %t && cd %t
+# RUN: split-file %s %t
+# RUN: %clangxx -g -gdwarf-4 -gsplit-dwarf %t/main.s %t/callee.s -o main.exe
+# RUN: llvm-dwp -e %t/main.exe -o %t/main.exe.dwp
+# RUN: llvm-bolt %t/main.exe -o %t/main.exe.bolt -update-debug-sections 2>&1 | FileCheck %s
+
+# CHECK-NOT: Assertion
+
+#--- main.cpp
+int callee(int x);
+int main() { return callee(0); }
+#--- callee.cpp
+int callee(int x) { return x; }
+#--- gen
+clang++ -c -g -gdwarf-4 -gsplit-dwarf -fdebug-compilation-dir=. -Xclang -split-dwarf-file -Xclang main.exe-main.dwo -S main.cpp -v -o -
+echo '#--- callee.s'
+clang++ -c -g -gdwarf-4 -gsplit-dwarf -fdebug-compilation-dir=. -Xclang -split-dwarf-file -Xclang main.exe-callee.dwo -S callee.cpp -o -
+#--- main.s
+ .file "main.cpp"
+ .text
+ .globl main # -- Begin function main
+ .p2align 4
+ .type main, at function
+main: # @main
+.Lfunc_begin0:
+ .file 1 "." "main.cpp"
+ .loc 1 2 0 # main.cpp:2:0
+ .cfi_startproc
+# %bb.0: # %entry
+ pushq %rbp
+ .cfi_def_cfa_offset 16
+ .cfi_offset %rbp, -16
+ movq %rsp, %rbp
+ .cfi_def_cfa_register %rbp
+ subq $16, %rsp
+ movl $0, -4(%rbp)
+.Ltmp0:
+ .loc 1 2 21 prologue_end # main.cpp:2:21
+ xorl %edi, %edi
+ callq _Z6calleei at PLT
+ .loc 1 2 14 epilogue_begin is_stmt 0 # main.cpp:2:14
+ addq $16, %rsp
+ popq %rbp
+ .cfi_def_cfa %rsp, 8
+ retq
+.Ltmp1:
+.Lfunc_end0:
+ .size main, .Lfunc_end0-main
+ .cfi_endproc
+ # -- End function
+ .section .debug_abbrev,"", at progbits
+ .byte 1 # Abbreviation Code
+ .byte 17 # DW_TAG_compile_unit
+ .byte 0 # DW_CHILDREN_no
+ .byte 16 # DW_AT_stmt_list
+ .byte 23 # DW_FORM_sec_offset
+ .byte 27 # DW_AT_comp_dir
+ .byte 14 # DW_FORM_strp
+ .ascii "\264B" # DW_AT_GNU_pubnames
+ .byte 25 # DW_FORM_flag_present
+ .ascii "\260B" # DW_AT_GNU_dwo_name
+ .byte 14 # DW_FORM_strp
+ .ascii "\261B" # DW_AT_GNU_dwo_id
+ .byte 7 # DW_FORM_data8
+ .byte 17 # DW_AT_low_pc
+ .byte 1 # DW_FORM_addr
+ .byte 18 # DW_AT_high_pc
+ .byte 6 # DW_FORM_data4
+ .ascii "\263B" # DW_AT_GNU_addr_base
+ .byte 23 # DW_FORM_sec_offset
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 0 # EOM(3)
+ .section .debug_info,"", at progbits
+.Lcu_begin0:
+ .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
+.Ldebug_info_start0:
+ .short 4 # DWARF version number
+ .long .debug_abbrev # Offset Into Abbrev. Section
+ .byte 8 # Address Size (in bytes)
+ .byte 1 # Abbrev [1] 0xb:0x25 DW_TAG_compile_unit
+ .long .Lline_table_start0 # DW_AT_stmt_list
+ .long .Lskel_string0 # DW_AT_comp_dir
+ # DW_AT_GNU_pubnames
+ .long .Lskel_string1 # DW_AT_GNU_dwo_name
+ .quad 1465063543908291764 # DW_AT_GNU_dwo_id
+ .quad .Lfunc_begin0 # DW_AT_low_pc
+ .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc
+ .long .Laddr_table_base0 # DW_AT_GNU_addr_base
+.Ldebug_info_end0:
+ .section .debug_str,"MS", at progbits,1
+.Lskel_string0:
+ .asciz "." # string offset=0
+.Lskel_string1:
+ .asciz "main.exe-main.dwo" # string offset=2
+ .section .debug_str.dwo,"eMS", at progbits,1
+.Linfo_string0:
+ .asciz "main" # string offset=0
+.Linfo_string1:
+ .asciz "int" # string offset=5
+.Linfo_string2:
+ .byte 0 # string offset=9
+.Linfo_string3:
+ .asciz "main.cpp" # string offset=10
+.Linfo_string4:
+ .asciz "main.exe-main.dwo" # string offset=19
+ .section .debug_str_offsets.dwo,"e", at progbits
+ .long 0
+ .long 5
+ .long 9
+ .long 10
+ .long 19
+ .section .debug_info.dwo,"e", at progbits
+ .long .Ldebug_info_dwo_end0-.Ldebug_info_dwo_start0 # Length of Unit
+.Ldebug_info_dwo_start0:
+ .short 4 # DWARF version number
+ .long 0 # Offset Into Abbrev. Section
+ .byte 8 # Address Size (in bytes)
+ .byte 1 # Abbrev [1] 0xb:0x22 DW_TAG_compile_unit
+ .byte 2 # DW_AT_producer
+ .short 33 # DW_AT_language
+ .byte 3 # DW_AT_name
+ .byte 4 # DW_AT_GNU_dwo_name
+ .quad 1465063543908291764 # DW_AT_GNU_dwo_id
+ .byte 2 # Abbrev [2] 0x19:0xf DW_TAG_subprogram
+ .byte 0 # DW_AT_low_pc
+ .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc
+ .byte 1 # DW_AT_frame_base
+ .byte 86
+ .byte 0 # DW_AT_name
+ .byte 1 # DW_AT_decl_file
+ .byte 2 # DW_AT_decl_line
+ .long 40 # DW_AT_type
+ # DW_AT_external
+ .byte 3 # Abbrev [3] 0x28:0x4 DW_TAG_base_type
+ .byte 1 # DW_AT_name
+ .byte 5 # DW_AT_encoding
+ .byte 4 # DW_AT_byte_size
+ .byte 0 # End Of Children Mark
+.Ldebug_info_dwo_end0:
+ .section .debug_abbrev.dwo,"e", at progbits
+ .byte 1 # Abbreviation Code
+ .byte 17 # DW_TAG_compile_unit
+ .byte 1 # DW_CHILDREN_yes
+ .byte 37 # DW_AT_producer
+ .ascii "\202>" # DW_FORM_GNU_str_index
+ .byte 19 # DW_AT_language
+ .byte 5 # DW_FORM_data2
+ .byte 3 # DW_AT_name
+ .ascii "\202>" # DW_FORM_GNU_str_index
+ .ascii "\260B" # DW_AT_GNU_dwo_name
+ .ascii "\202>" # DW_FORM_GNU_str_index
+ .ascii "\261B" # DW_AT_GNU_dwo_id
+ .byte 7 # DW_FORM_data8
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 2 # Abbreviation Code
+ .byte 46 # DW_TAG_subprogram
+ .byte 0 # DW_CHILDREN_no
+ .byte 17 # DW_AT_low_pc
+ .ascii "\201>" # DW_FORM_GNU_addr_index
+ .byte 18 # DW_AT_high_pc
+ .byte 6 # DW_FORM_data4
+ .byte 64 # DW_AT_frame_base
+ .byte 24 # DW_FORM_exprloc
+ .byte 3 # DW_AT_name
+ .ascii "\202>" # DW_FORM_GNU_str_index
+ .byte 58 # DW_AT_decl_file
+ .byte 11 # DW_FORM_data1
+ .byte 59 # DW_AT_decl_line
+ .byte 11 # DW_FORM_data1
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 63 # DW_AT_external
+ .byte 25 # DW_FORM_flag_present
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 3 # Abbreviation Code
+ .byte 36 # DW_TAG_base_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 3 # DW_AT_name
+ .ascii "\202>" # DW_FORM_GNU_str_index
+ .byte 62 # DW_AT_encoding
+ .byte 11 # DW_FORM_data1
+ .byte 11 # DW_AT_byte_size
+ .byte 11 # DW_FORM_data1
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 0 # EOM(3)
+ .section .debug_addr,"", at progbits
+.Laddr_table_base0:
+ .quad .Lfunc_begin0
+ .section .debug_gnu_pubnames,"", at progbits
+ .long .LpubNames_end0-.LpubNames_start0 # Length of Public Names Info
+.LpubNames_start0:
+ .short 2 # DWARF Version
+ .long .Lcu_begin0 # Offset of Compilation Unit Info
+ .long 48 # Compilation Unit Length
+ .long 25 # DIE offset
+ .byte 48 # Attributes: FUNCTION, EXTERNAL
+ .asciz "main" # External Name
+ .long 0 # End Mark
+.LpubNames_end0:
+ .section .debug_gnu_pubtypes,"", at progbits
+ .long .LpubTypes_end0-.LpubTypes_start0 # Length of Public Types Info
+.LpubTypes_start0:
+ .short 2 # DWARF Version
+ .long .Lcu_begin0 # Offset of Compilation Unit Info
+ .long 48 # Compilation Unit Length
+ .long 40 # DIE offset
+ .byte 144 # Attributes: TYPE, STATIC
+ .asciz "int" # External Name
+ .long 0 # End Mark
+.LpubTypes_end0:
+ .section ".note.GNU-stack","", at progbits
+ .addrsig
+ .addrsig_sym _Z6calleei
+ .section .debug_line,"", at progbits
+.Lline_table_start0:
+#--- callee.s
+ .file "callee.cpp"
+ .text
+ .globl _Z6calleei # -- Begin function _Z6calleei
+ .p2align 4
+ .type _Z6calleei, at function
+_Z6calleei: # @_Z6calleei
+.Lfunc_begin0:
+ .file 1 "." "callee.cpp"
+ .loc 1 1 0 # callee.cpp:1:0
+ .cfi_startproc
+# %bb.0: # %entry
+ pushq %rbp
+ .cfi_def_cfa_offset 16
+ .cfi_offset %rbp, -16
+ movq %rsp, %rbp
+ .cfi_def_cfa_register %rbp
+ movl %edi, -4(%rbp)
+.Ltmp0:
+ .loc 1 1 28 prologue_end # callee.cpp:1:28
+ movl -4(%rbp), %eax
+ .loc 1 1 21 epilogue_begin is_stmt 0 # callee.cpp:1:21
+ popq %rbp
+ .cfi_def_cfa %rsp, 8
+ retq
+.Ltmp1:
+.Lfunc_end0:
+ .size _Z6calleei, .Lfunc_end0-_Z6calleei
+ .cfi_endproc
+ # -- End function
+ .section .debug_abbrev,"", at progbits
+ .byte 1 # Abbreviation Code
+ .byte 17 # DW_TAG_compile_unit
+ .byte 0 # DW_CHILDREN_no
+ .byte 16 # DW_AT_stmt_list
+ .byte 23 # DW_FORM_sec_offset
+ .byte 27 # DW_AT_comp_dir
+ .byte 14 # DW_FORM_strp
+ .ascii "\264B" # DW_AT_GNU_pubnames
+ .byte 25 # DW_FORM_flag_present
+ .ascii "\260B" # DW_AT_GNU_dwo_name
+ .byte 14 # DW_FORM_strp
+ .ascii "\261B" # DW_AT_GNU_dwo_id
+ .byte 7 # DW_FORM_data8
+ .byte 17 # DW_AT_low_pc
+ .byte 1 # DW_FORM_addr
+ .byte 18 # DW_AT_high_pc
+ .byte 6 # DW_FORM_data4
+ .ascii "\263B" # DW_AT_GNU_addr_base
+ .byte 23 # DW_FORM_sec_offset
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 0 # EOM(3)
+ .section .debug_info,"", at progbits
+.Lcu_begin0:
+ .long .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
+.Ldebug_info_start0:
+ .short 4 # DWARF version number
+ .long .debug_abbrev # Offset Into Abbrev. Section
+ .byte 8 # Address Size (in bytes)
+ .byte 1 # Abbrev [1] 0xb:0x25 DW_TAG_compile_unit
+ .long .Lline_table_start0 # DW_AT_stmt_list
+ .long .Lskel_string0 # DW_AT_comp_dir
+ # DW_AT_GNU_pubnames
+ .long .Lskel_string1 # DW_AT_GNU_dwo_name
+ .quad -8413212350243343807 # DW_AT_GNU_dwo_id
+ .quad .Lfunc_begin0 # DW_AT_low_pc
+ .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc
+ .long .Laddr_table_base0 # DW_AT_GNU_addr_base
+.Ldebug_info_end0:
+ .section .debug_str,"MS", at progbits,1
+.Lskel_string0:
+ .asciz "." # string offset=0
+.Lskel_string1:
+ .asciz "main.exe-callee.dwo" # string offset=2
+ .section .debug_str.dwo,"eMS", at progbits,1
+.Linfo_string0:
+ .asciz "_Z6calleei" # string offset=0
+.Linfo_string1:
+ .asciz "callee" # string offset=11
+.Linfo_string2:
+ .asciz "int" # string offset=18
+.Linfo_string3:
+ .asciz "x" # string offset=22
+.Linfo_string4:
+ .byte 0 # string offset=24
+.Linfo_string5:
+ .asciz "callee.cpp" # string offset=25
+.Linfo_string6:
+ .asciz "main.exe-callee.dwo" # string offset=36
+ .section .debug_str_offsets.dwo,"e", at progbits
+ .long 0
+ .long 11
+ .long 18
+ .long 22
+ .long 24
+ .long 25
+ .long 36
+ .section .debug_info.dwo,"e", at progbits
+ .long .Ldebug_info_dwo_end0-.Ldebug_info_dwo_start0 # Length of Unit
+.Ldebug_info_dwo_start0:
+ .short 4 # DWARF version number
+ .long 0 # Offset Into Abbrev. Section
+ .byte 8 # Address Size (in bytes)
+ .byte 1 # Abbrev [1] 0xb:0x2f DW_TAG_compile_unit
+ .byte 4 # DW_AT_producer
+ .short 33 # DW_AT_language
+ .byte 5 # DW_AT_name
+ .byte 6 # DW_AT_GNU_dwo_name
+ .quad -8413212350243343807 # DW_AT_GNU_dwo_id
+ .byte 2 # Abbrev [2] 0x19:0x1c DW_TAG_subprogram
+ .byte 0 # DW_AT_low_pc
+ .long .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc
+ .byte 1 # DW_AT_frame_base
+ .byte 86
+ .byte 0 # DW_AT_linkage_name
+ .byte 1 # DW_AT_name
+ .byte 1 # DW_AT_decl_file
+ .byte 1 # DW_AT_decl_line
+ .long 53 # DW_AT_type
+ # DW_AT_external
+ .byte 3 # Abbrev [3] 0x29:0xb DW_TAG_formal_parameter
+ .byte 2 # DW_AT_location
+ .byte 145
+ .byte 124
+ .byte 3 # DW_AT_name
+ .byte 1 # DW_AT_decl_file
+ .byte 1 # DW_AT_decl_line
+ .long 53 # DW_AT_type
+ .byte 0 # End Of Children Mark
+ .byte 4 # Abbrev [4] 0x35:0x4 DW_TAG_base_type
+ .byte 2 # DW_AT_name
+ .byte 5 # DW_AT_encoding
+ .byte 4 # DW_AT_byte_size
+ .byte 0 # End Of Children Mark
+.Ldebug_info_dwo_end0:
+ .section .debug_abbrev.dwo,"e", at progbits
+ .byte 1 # Abbreviation Code
+ .byte 17 # DW_TAG_compile_unit
+ .byte 1 # DW_CHILDREN_yes
+ .byte 37 # DW_AT_producer
+ .ascii "\202>" # DW_FORM_GNU_str_index
+ .byte 19 # DW_AT_language
+ .byte 5 # DW_FORM_data2
+ .byte 3 # DW_AT_name
+ .ascii "\202>" # DW_FORM_GNU_str_index
+ .ascii "\260B" # DW_AT_GNU_dwo_name
+ .ascii "\202>" # DW_FORM_GNU_str_index
+ .ascii "\261B" # DW_AT_GNU_dwo_id
+ .byte 7 # DW_FORM_data8
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 2 # Abbreviation Code
+ .byte 46 # DW_TAG_subprogram
+ .byte 1 # DW_CHILDREN_yes
+ .byte 17 # DW_AT_low_pc
+ .ascii "\201>" # DW_FORM_GNU_addr_index
+ .byte 18 # DW_AT_high_pc
+ .byte 6 # DW_FORM_data4
+ .byte 64 # DW_AT_frame_base
+ .byte 24 # DW_FORM_exprloc
+ .byte 110 # DW_AT_linkage_name
+ .ascii "\202>" # DW_FORM_GNU_str_index
+ .byte 3 # DW_AT_name
+ .ascii "\202>" # DW_FORM_GNU_str_index
+ .byte 58 # DW_AT_decl_file
+ .byte 11 # DW_FORM_data1
+ .byte 59 # DW_AT_decl_line
+ .byte 11 # DW_FORM_data1
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 63 # DW_AT_external
+ .byte 25 # DW_FORM_flag_present
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 3 # Abbreviation Code
+ .byte 5 # DW_TAG_formal_parameter
+ .byte 0 # DW_CHILDREN_no
+ .byte 2 # DW_AT_location
+ .byte 24 # DW_FORM_exprloc
+ .byte 3 # DW_AT_name
+ .ascii "\202>" # DW_FORM_GNU_str_index
+ .byte 58 # DW_AT_decl_file
+ .byte 11 # DW_FORM_data1
+ .byte 59 # DW_AT_decl_line
+ .byte 11 # DW_FORM_data1
+ .byte 73 # DW_AT_type
+ .byte 19 # DW_FORM_ref4
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 4 # Abbreviation Code
+ .byte 36 # DW_TAG_base_type
+ .byte 0 # DW_CHILDREN_no
+ .byte 3 # DW_AT_name
+ .ascii "\202>" # DW_FORM_GNU_str_index
+ .byte 62 # DW_AT_encoding
+ .byte 11 # DW_FORM_data1
+ .byte 11 # DW_AT_byte_size
+ .byte 11 # DW_FORM_data1
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 0 # EOM(3)
+ .section .debug_addr,"", at progbits
+.Laddr_table_base0:
+ .quad .Lfunc_begin0
+ .section .debug_gnu_pubnames,"", at progbits
+ .long .LpubNames_end0-.LpubNames_start0 # Length of Public Names Info
+.LpubNames_start0:
+ .short 2 # DWARF Version
+ .long .Lcu_begin0 # Offset of Compilation Unit Info
+ .long 48 # Compilation Unit Length
+ .long 25 # DIE offset
+ .byte 48 # Attributes: FUNCTION, EXTERNAL
+ .asciz "callee" # External Name
+ .long 0 # End Mark
+.LpubNames_end0:
+ .section .debug_gnu_pubtypes,"", at progbits
+ .long .LpubTypes_end0-.LpubTypes_start0 # Length of Public Types Info
+.LpubTypes_start0:
+ .short 2 # DWARF Version
+ .long .Lcu_begin0 # Offset of Compilation Unit Info
+ .long 48 # Compilation Unit Length
+ .long 53 # DIE offset
+ .byte 144 # Attributes: TYPE, STATIC
+ .asciz "int" # External Name
+ .long 0 # End Mark
+.LpubTypes_end0:
+ .section ".note.GNU-stack","", at progbits
+ .addrsig
+ .section .debug_line,"", at progbits
+.Lline_table_start0:
diff --git a/bolt/test/X86/dwarf4-dwp.test b/bolt/test/X86/dwarf4-dwp.test
deleted file mode 100644
index 6c619ed55233b..0000000000000
--- a/bolt/test/X86/dwarf4-dwp.test
+++ /dev/null
@@ -1,41 +0,0 @@
-# REQUIRES: system-linux
-
-# RUN: rm -rf %t && mkdir -p %t && cd %t
-# RUN: split-file %s %t
-# RUN: %clangxx -g -gdwarf-4 -gsplit-dwarf %t/main.cpp %t/callee.cpp -o main.exe
-# RUN: llvm-dwp -e %t/main.exe -o %t/main.exe.dwp
-# RUN: llvm-bolt %t/main.exe -o %t/main.exe.bolt -update-debug-sections 2>&1 | FileCheck %s
-
-# CHECK-NOT: Assertion
-
-
-#--- main.cpp
-int hotFunction(int x);
-
-int main(int argc, char **argv) {
- int sum = 0;
- for (int i = 0; i < 50000000; ++i) { // 让运行时间更久
- sum += hotFunction(i);
- }
- if (sum)
- return 0;
- else
- return 1;
-}
-
-#--- callee.cpp
-int hotFunction(int x) {
- if ((x & 1) == 0) {
- x = x * 3 + 1;
- if (x % 5 == 0) {
- x += 7;
- }
- } else {
- x = x * x;
- if (x % 3 == 0) {
- x -= 4;
- }
- }
- return x;
-}
-
>From 2884b59baadbff0bdbd71684068e1eefb5fc7c2b Mon Sep 17 00:00:00 2001
From: huangjinjie <huangjinjie at bytedance.com>
Date: Wed, 3 Sep 2025 21:15:02 +0800
Subject: [PATCH 4/4] add arm test
---
bolt/test/AArch64/dwarf4-dwp-aarch64.s | 451 ++++++++++++++++++
.../X86/{dwarf4-dwp.s => dwarf4-dwp-x86.s} | 2 +-
2 files changed, 452 insertions(+), 1 deletion(-)
create mode 100755 bolt/test/AArch64/dwarf4-dwp-aarch64.s
rename bolt/test/X86/{dwarf4-dwp.s => dwarf4-dwp-x86.s} (99%)
diff --git a/bolt/test/AArch64/dwarf4-dwp-aarch64.s b/bolt/test/AArch64/dwarf4-dwp-aarch64.s
new file mode 100755
index 0000000000000..e03ccae2e525a
--- /dev/null
+++ b/bolt/test/AArch64/dwarf4-dwp-aarch64.s
@@ -0,0 +1,451 @@
+# RUN: rm -rf %t && mkdir -p %t && cd %t
+# RUN: split-file %s %t
+# RUN: %clangxx --target=aarch64-unknown-linux -g -gdwarf-4 -gsplit-dwarf %t/main.s %t/callee.s -o main.exe
+# RUN: llvm-dwp -e %t/main.exe -o %t/main.exe.dwp
+# RUN: llvm-bolt %t/main.exe -o %t/main.exe.bolt -update-debug-sections 2>&1 | FileCheck %s
+
+# CHECK-NOT: Assertion
+
+#--- main.cpp
+int callee(int x);
+int main() { return callee(0); }
+#--- callee.cpp
+int callee(int x) { return x; }
+#--- gen
+clang++ --target=aarch64-unknown-linux -c -g -gdwarf-4 -gsplit-dwarf -fdebug-compilation-dir=. -Xclang -split-dwarf-file -Xclang main.exe-main.dwo -S main.cpp -o -
+echo '#--- callee.s'
+clang++ --target=aarch64-unknown-linux -c -g -gdwarf-4 -gsplit-dwarf -fdebug-compilation-dir=. -Xclang -split-dwarf-file -Xclang main.exe-callee.dwo -S callee.cpp -o -
+#--- main.s
+ .file "main.cpp"
+ .text
+ .globl main // -- Begin function main
+ .p2align 2
+ .type main, at function
+main: // @main
+.Lfunc_begin0:
+ .file 1 "." "main.cpp"
+ .loc 1 2 0 // main.cpp:2:0
+ .cfi_startproc
+// %bb.0: // %entry
+ sub sp, sp, #32
+ .cfi_def_cfa_offset 32
+ stp x29, x30, [sp, #16] // 16-byte Folded Spill
+ add x29, sp, #16
+ .cfi_def_cfa w29, 16
+ .cfi_offset w30, -8
+ .cfi_offset w29, -16
+ mov w0, wzr
+ stur wzr, [x29, #-4]
+.Ltmp0:
+ .loc 1 2 21 prologue_end // main.cpp:2:21
+ bl _Z6calleei
+ .cfi_def_cfa wsp, 32
+ .loc 1 2 14 epilogue_begin is_stmt 0 // main.cpp:2:14
+ ldp x29, x30, [sp, #16] // 16-byte Folded Reload
+ add sp, sp, #32
+ .cfi_def_cfa_offset 0
+ .cfi_restore w30
+ .cfi_restore w29
+ ret
+.Ltmp1:
+.Lfunc_end0:
+ .size main, .Lfunc_end0-main
+ .cfi_endproc
+ // -- End function
+ .section .debug_abbrev,"", at progbits
+ .byte 1 // Abbreviation Code
+ .byte 17 // DW_TAG_compile_unit
+ .byte 0 // DW_CHILDREN_no
+ .byte 16 // DW_AT_stmt_list
+ .byte 23 // DW_FORM_sec_offset
+ .byte 27 // DW_AT_comp_dir
+ .byte 14 // DW_FORM_strp
+ .ascii "\264B" // DW_AT_GNU_pubnames
+ .byte 25 // DW_FORM_flag_present
+ .ascii "\260B" // DW_AT_GNU_dwo_name
+ .byte 14 // DW_FORM_strp
+ .ascii "\261B" // DW_AT_GNU_dwo_id
+ .byte 7 // DW_FORM_data8
+ .byte 17 // DW_AT_low_pc
+ .byte 1 // DW_FORM_addr
+ .byte 18 // DW_AT_high_pc
+ .byte 6 // DW_FORM_data4
+ .ascii "\263B" // DW_AT_GNU_addr_base
+ .byte 23 // DW_FORM_sec_offset
+ .byte 0 // EOM(1)
+ .byte 0 // EOM(2)
+ .byte 0 // EOM(3)
+ .section .debug_info,"", at progbits
+.Lcu_begin0:
+ .word .Ldebug_info_end0-.Ldebug_info_start0 // Length of Unit
+.Ldebug_info_start0:
+ .hword 4 // DWARF version number
+ .word .debug_abbrev // Offset Into Abbrev. Section
+ .byte 8 // Address Size (in bytes)
+ .byte 1 // Abbrev [1] 0xb:0x25 DW_TAG_compile_unit
+ .word .Lline_table_start0 // DW_AT_stmt_list
+ .word .Lskel_string0 // DW_AT_comp_dir
+ // DW_AT_GNU_pubnames
+ .word .Lskel_string1 // DW_AT_GNU_dwo_name
+ .xword 1465063543908291764 // DW_AT_GNU_dwo_id
+ .xword .Lfunc_begin0 // DW_AT_low_pc
+ .word .Lfunc_end0-.Lfunc_begin0 // DW_AT_high_pc
+ .word .Laddr_table_base0 // DW_AT_GNU_addr_base
+.Ldebug_info_end0:
+ .section .debug_str,"MS", at progbits,1
+.Lskel_string0:
+ .asciz "." // string offset=0
+.Lskel_string1:
+ .asciz "main.exe-main.dwo" // string offset=2
+ .section .debug_str.dwo,"eMS", at progbits,1
+.Linfo_string0:
+ .asciz "main" // string offset=0
+.Linfo_string1:
+ .asciz "int" // string offset=5
+.Linfo_string2:
+ .byte 0 // string offset=9
+.Linfo_string3:
+ .asciz "main.cpp" // string offset=10
+.Linfo_string4:
+ .asciz "main.exe-main.dwo" // string offset=19
+ .section .debug_str_offsets.dwo,"e", at progbits
+ .word 0
+ .word 5
+ .word 9
+ .word 10
+ .word 19
+ .section .debug_info.dwo,"e", at progbits
+ .word .Ldebug_info_dwo_end0-.Ldebug_info_dwo_start0 // Length of Unit
+.Ldebug_info_dwo_start0:
+ .hword 4 // DWARF version number
+ .word 0 // Offset Into Abbrev. Section
+ .byte 8 // Address Size (in bytes)
+ .byte 1 // Abbrev [1] 0xb:0x22 DW_TAG_compile_unit
+ .byte 2 // DW_AT_producer
+ .hword 33 // DW_AT_language
+ .byte 3 // DW_AT_name
+ .byte 4 // DW_AT_GNU_dwo_name
+ .xword 1465063543908291764 // DW_AT_GNU_dwo_id
+ .byte 2 // Abbrev [2] 0x19:0xf DW_TAG_subprogram
+ .byte 0 // DW_AT_low_pc
+ .word .Lfunc_end0-.Lfunc_begin0 // DW_AT_high_pc
+ .byte 1 // DW_AT_frame_base
+ .byte 109
+ .byte 0 // DW_AT_name
+ .byte 1 // DW_AT_decl_file
+ .byte 2 // DW_AT_decl_line
+ .word 40 // DW_AT_type
+ // DW_AT_external
+ .byte 3 // Abbrev [3] 0x28:0x4 DW_TAG_base_type
+ .byte 1 // DW_AT_name
+ .byte 5 // DW_AT_encoding
+ .byte 4 // DW_AT_byte_size
+ .byte 0 // End Of Children Mark
+.Ldebug_info_dwo_end0:
+ .section .debug_abbrev.dwo,"e", at progbits
+ .byte 1 // Abbreviation Code
+ .byte 17 // DW_TAG_compile_unit
+ .byte 1 // DW_CHILDREN_yes
+ .byte 37 // DW_AT_producer
+ .ascii "\202>" // DW_FORM_GNU_str_index
+ .byte 19 // DW_AT_language
+ .byte 5 // DW_FORM_data2
+ .byte 3 // DW_AT_name
+ .ascii "\202>" // DW_FORM_GNU_str_index
+ .ascii "\260B" // DW_AT_GNU_dwo_name
+ .ascii "\202>" // DW_FORM_GNU_str_index
+ .ascii "\261B" // DW_AT_GNU_dwo_id
+ .byte 7 // DW_FORM_data8
+ .byte 0 // EOM(1)
+ .byte 0 // EOM(2)
+ .byte 2 // Abbreviation Code
+ .byte 46 // DW_TAG_subprogram
+ .byte 0 // DW_CHILDREN_no
+ .byte 17 // DW_AT_low_pc
+ .ascii "\201>" // DW_FORM_GNU_addr_index
+ .byte 18 // DW_AT_high_pc
+ .byte 6 // DW_FORM_data4
+ .byte 64 // DW_AT_frame_base
+ .byte 24 // DW_FORM_exprloc
+ .byte 3 // DW_AT_name
+ .ascii "\202>" // DW_FORM_GNU_str_index
+ .byte 58 // DW_AT_decl_file
+ .byte 11 // DW_FORM_data1
+ .byte 59 // DW_AT_decl_line
+ .byte 11 // DW_FORM_data1
+ .byte 73 // DW_AT_type
+ .byte 19 // DW_FORM_ref4
+ .byte 63 // DW_AT_external
+ .byte 25 // DW_FORM_flag_present
+ .byte 0 // EOM(1)
+ .byte 0 // EOM(2)
+ .byte 3 // Abbreviation Code
+ .byte 36 // DW_TAG_base_type
+ .byte 0 // DW_CHILDREN_no
+ .byte 3 // DW_AT_name
+ .ascii "\202>" // DW_FORM_GNU_str_index
+ .byte 62 // DW_AT_encoding
+ .byte 11 // DW_FORM_data1
+ .byte 11 // DW_AT_byte_size
+ .byte 11 // DW_FORM_data1
+ .byte 0 // EOM(1)
+ .byte 0 // EOM(2)
+ .byte 0 // EOM(3)
+ .section .debug_addr,"", at progbits
+.Laddr_table_base0:
+ .xword .Lfunc_begin0
+ .section .debug_gnu_pubnames,"", at progbits
+ .word .LpubNames_end0-.LpubNames_start0 // Length of Public Names Info
+.LpubNames_start0:
+ .hword 2 // DWARF Version
+ .word .Lcu_begin0 // Offset of Compilation Unit Info
+ .word 48 // Compilation Unit Length
+ .word 25 // DIE offset
+ .byte 48 // Attributes: FUNCTION, EXTERNAL
+ .asciz "main" // External Name
+ .word 0 // End Mark
+.LpubNames_end0:
+ .section .debug_gnu_pubtypes,"", at progbits
+ .word .LpubTypes_end0-.LpubTypes_start0 // Length of Public Types Info
+.LpubTypes_start0:
+ .hword 2 // DWARF Version
+ .word .Lcu_begin0 // Offset of Compilation Unit Info
+ .word 48 // Compilation Unit Length
+ .word 40 // DIE offset
+ .byte 144 // Attributes: TYPE, STATIC
+ .asciz "int" // External Name
+ .word 0 // End Mark
+.LpubTypes_end0:
+ .section ".note.GNU-stack","", at progbits
+ .addrsig
+ .addrsig_sym _Z6calleei
+ .section .debug_line,"", at progbits
+.Lline_table_start0:
+#--- callee.s
+ .file "callee.cpp"
+ .text
+ .globl _Z6calleei // -- Begin function _Z6calleei
+ .p2align 2
+ .type _Z6calleei, at function
+_Z6calleei: // @_Z6calleei
+.Lfunc_begin0:
+ .file 1 "." "callee.cpp"
+ .loc 1 1 0 // callee.cpp:1:0
+ .cfi_startproc
+// %bb.0: // %entry
+ sub sp, sp, #16
+ .cfi_def_cfa_offset 16
+ str w0, [sp, #12]
+.Ltmp1:
+ .loc 1 1 28 prologue_end // callee.cpp:1:28
+ ldr w0, [sp, #12]
+ .loc 1 1 21 epilogue_begin is_stmt 0 // callee.cpp:1:21
+ add sp, sp, #16
+ .cfi_def_cfa_offset 0
+ ret
+.Ltmp2:
+.Lfunc_end0:
+ .size _Z6calleei, .Lfunc_end0-_Z6calleei
+ .cfi_endproc
+ // -- End function
+ .section .debug_abbrev,"", at progbits
+ .byte 1 // Abbreviation Code
+ .byte 17 // DW_TAG_compile_unit
+ .byte 0 // DW_CHILDREN_no
+ .byte 16 // DW_AT_stmt_list
+ .byte 23 // DW_FORM_sec_offset
+ .byte 27 // DW_AT_comp_dir
+ .byte 14 // DW_FORM_strp
+ .ascii "\264B" // DW_AT_GNU_pubnames
+ .byte 25 // DW_FORM_flag_present
+ .ascii "\260B" // DW_AT_GNU_dwo_name
+ .byte 14 // DW_FORM_strp
+ .ascii "\261B" // DW_AT_GNU_dwo_id
+ .byte 7 // DW_FORM_data8
+ .byte 17 // DW_AT_low_pc
+ .byte 1 // DW_FORM_addr
+ .byte 18 // DW_AT_high_pc
+ .byte 6 // DW_FORM_data4
+ .ascii "\263B" // DW_AT_GNU_addr_base
+ .byte 23 // DW_FORM_sec_offset
+ .byte 0 // EOM(1)
+ .byte 0 // EOM(2)
+ .byte 0 // EOM(3)
+ .section .debug_info,"", at progbits
+.Lcu_begin0:
+ .word .Ldebug_info_end0-.Ldebug_info_start0 // Length of Unit
+.Ldebug_info_start0:
+ .hword 4 // DWARF version number
+ .word .debug_abbrev // Offset Into Abbrev. Section
+ .byte 8 // Address Size (in bytes)
+ .byte 1 // Abbrev [1] 0xb:0x25 DW_TAG_compile_unit
+ .word .Lline_table_start0 // DW_AT_stmt_list
+ .word .Lskel_string0 // DW_AT_comp_dir
+ // DW_AT_GNU_pubnames
+ .word .Lskel_string1 // DW_AT_GNU_dwo_name
+ .xword 7650227797527095061 // DW_AT_GNU_dwo_id
+ .xword .Lfunc_begin0 // DW_AT_low_pc
+ .word .Lfunc_end0-.Lfunc_begin0 // DW_AT_high_pc
+ .word .Laddr_table_base0 // DW_AT_GNU_addr_base
+.Ldebug_info_end0:
+ .section .debug_str,"MS", at progbits,1
+.Lskel_string0:
+ .asciz "." // string offset=0
+.Lskel_string1:
+ .asciz "main.exe-callee.dwo" // string offset=2
+ .section .debug_str.dwo,"eMS", at progbits,1
+.Linfo_string0:
+ .asciz "_Z6calleei" // string offset=0
+.Linfo_string1:
+ .asciz "callee" // string offset=11
+.Linfo_string2:
+ .asciz "int" // string offset=18
+.Linfo_string3:
+ .asciz "x" // string offset=22
+.Linfo_string4:
+ .byte 0 // string offset=24
+.Linfo_string5:
+ .asciz "callee.cpp" // string offset=25
+.Linfo_string6:
+ .asciz "main.exe-callee.dwo" // string offset=36
+ .section .debug_str_offsets.dwo,"e", at progbits
+ .word 0
+ .word 11
+ .word 18
+ .word 22
+ .word 24
+ .word 25
+ .word 36
+ .section .debug_info.dwo,"e", at progbits
+ .word .Ldebug_info_dwo_end0-.Ldebug_info_dwo_start0 // Length of Unit
+.Ldebug_info_dwo_start0:
+ .hword 4 // DWARF version number
+ .word 0 // Offset Into Abbrev. Section
+ .byte 8 // Address Size (in bytes)
+ .byte 1 // Abbrev [1] 0xb:0x2f DW_TAG_compile_unit
+ .byte 4 // DW_AT_producer
+ .hword 33 // DW_AT_language
+ .byte 5 // DW_AT_name
+ .byte 6 // DW_AT_GNU_dwo_name
+ .xword 7650227797527095061 // DW_AT_GNU_dwo_id
+ .byte 2 // Abbrev [2] 0x19:0x1c DW_TAG_subprogram
+ .byte 0 // DW_AT_low_pc
+ .word .Lfunc_end0-.Lfunc_begin0 // DW_AT_high_pc
+ .byte 1 // DW_AT_frame_base
+ .byte 111
+ .byte 0 // DW_AT_linkage_name
+ .byte 1 // DW_AT_name
+ .byte 1 // DW_AT_decl_file
+ .byte 1 // DW_AT_decl_line
+ .word 53 // DW_AT_type
+ // DW_AT_external
+ .byte 3 // Abbrev [3] 0x29:0xb DW_TAG_formal_parameter
+ .byte 2 // DW_AT_location
+ .byte 145
+ .byte 12
+ .byte 3 // DW_AT_name
+ .byte 1 // DW_AT_decl_file
+ .byte 1 // DW_AT_decl_line
+ .word 53 // DW_AT_type
+ .byte 0 // End Of Children Mark
+ .byte 4 // Abbrev [4] 0x35:0x4 DW_TAG_base_type
+ .byte 2 // DW_AT_name
+ .byte 5 // DW_AT_encoding
+ .byte 4 // DW_AT_byte_size
+ .byte 0 // End Of Children Mark
+.Ldebug_info_dwo_end0:
+ .section .debug_abbrev.dwo,"e", at progbits
+ .byte 1 // Abbreviation Code
+ .byte 17 // DW_TAG_compile_unit
+ .byte 1 // DW_CHILDREN_yes
+ .byte 37 // DW_AT_producer
+ .ascii "\202>" // DW_FORM_GNU_str_index
+ .byte 19 // DW_AT_language
+ .byte 5 // DW_FORM_data2
+ .byte 3 // DW_AT_name
+ .ascii "\202>" // DW_FORM_GNU_str_index
+ .ascii "\260B" // DW_AT_GNU_dwo_name
+ .ascii "\202>" // DW_FORM_GNU_str_index
+ .ascii "\261B" // DW_AT_GNU_dwo_id
+ .byte 7 // DW_FORM_data8
+ .byte 0 // EOM(1)
+ .byte 0 // EOM(2)
+ .byte 2 // Abbreviation Code
+ .byte 46 // DW_TAG_subprogram
+ .byte 1 // DW_CHILDREN_yes
+ .byte 17 // DW_AT_low_pc
+ .ascii "\201>" // DW_FORM_GNU_addr_index
+ .byte 18 // DW_AT_high_pc
+ .byte 6 // DW_FORM_data4
+ .byte 64 // DW_AT_frame_base
+ .byte 24 // DW_FORM_exprloc
+ .byte 110 // DW_AT_linkage_name
+ .ascii "\202>" // DW_FORM_GNU_str_index
+ .byte 3 // DW_AT_name
+ .ascii "\202>" // DW_FORM_GNU_str_index
+ .byte 58 // DW_AT_decl_file
+ .byte 11 // DW_FORM_data1
+ .byte 59 // DW_AT_decl_line
+ .byte 11 // DW_FORM_data1
+ .byte 73 // DW_AT_type
+ .byte 19 // DW_FORM_ref4
+ .byte 63 // DW_AT_external
+ .byte 25 // DW_FORM_flag_present
+ .byte 0 // EOM(1)
+ .byte 0 // EOM(2)
+ .byte 3 // Abbreviation Code
+ .byte 5 // DW_TAG_formal_parameter
+ .byte 0 // DW_CHILDREN_no
+ .byte 2 // DW_AT_location
+ .byte 24 // DW_FORM_exprloc
+ .byte 3 // DW_AT_name
+ .ascii "\202>" // DW_FORM_GNU_str_index
+ .byte 58 // DW_AT_decl_file
+ .byte 11 // DW_FORM_data1
+ .byte 59 // DW_AT_decl_line
+ .byte 11 // DW_FORM_data1
+ .byte 73 // DW_AT_type
+ .byte 19 // DW_FORM_ref4
+ .byte 0 // EOM(1)
+ .byte 0 // EOM(2)
+ .byte 4 // Abbreviation Code
+ .byte 36 // DW_TAG_base_type
+ .byte 0 // DW_CHILDREN_no
+ .byte 3 // DW_AT_name
+ .ascii "\202>" // DW_FORM_GNU_str_index
+ .byte 62 // DW_AT_encoding
+ .byte 11 // DW_FORM_data1
+ .byte 11 // DW_AT_byte_size
+ .byte 11 // DW_FORM_data1
+ .byte 0 // EOM(1)
+ .byte 0 // EOM(2)
+ .byte 0 // EOM(3)
+ .section .debug_addr,"", at progbits
+.Laddr_table_base0:
+ .xword .Lfunc_begin0
+ .section .debug_gnu_pubnames,"", at progbits
+ .word .LpubNames_end0-.LpubNames_start0 // Length of Public Names Info
+.LpubNames_start0:
+ .hword 2 // DWARF Version
+ .word .Lcu_begin0 // Offset of Compilation Unit Info
+ .word 48 // Compilation Unit Length
+ .word 25 // DIE offset
+ .byte 48 // Attributes: FUNCTION, EXTERNAL
+ .asciz "callee" // External Name
+ .word 0 // End Mark
+.LpubNames_end0:
+ .section .debug_gnu_pubtypes,"", at progbits
+ .word .LpubTypes_end0-.LpubTypes_start0 // Length of Public Types Info
+.LpubTypes_start0:
+ .hword 2 // DWARF Version
+ .word .Lcu_begin0 // Offset of Compilation Unit Info
+ .word 48 // Compilation Unit Length
+ .word 53 // DIE offset
+ .byte 144 // Attributes: TYPE, STATIC
+ .asciz "int" // External Name
+ .word 0 // End Mark
+.LpubTypes_end0:
+ .section ".note.GNU-stack","", at progbits
+ .addrsig
+ .section .debug_line,"", at progbits
+.Lline_table_start0:
diff --git a/bolt/test/X86/dwarf4-dwp.s b/bolt/test/X86/dwarf4-dwp-x86.s
similarity index 99%
rename from bolt/test/X86/dwarf4-dwp.s
rename to bolt/test/X86/dwarf4-dwp-x86.s
index d3168af692280..549258e6ccd56 100755
--- a/bolt/test/X86/dwarf4-dwp.s
+++ b/bolt/test/X86/dwarf4-dwp-x86.s
@@ -12,7 +12,7 @@ int main() { return callee(0); }
#--- callee.cpp
int callee(int x) { return x; }
#--- gen
-clang++ -c -g -gdwarf-4 -gsplit-dwarf -fdebug-compilation-dir=. -Xclang -split-dwarf-file -Xclang main.exe-main.dwo -S main.cpp -v -o -
+clang++ -c -g -gdwarf-4 -gsplit-dwarf -fdebug-compilation-dir=. -Xclang -split-dwarf-file -Xclang main.exe-main.dwo -S main.cpp -o -
echo '#--- callee.s'
clang++ -c -g -gdwarf-4 -gsplit-dwarf -fdebug-compilation-dir=. -Xclang -split-dwarf-file -Xclang main.exe-callee.dwo -S callee.cpp -o -
#--- main.s
More information about the llvm-commits
mailing list