# RUN: rm -rf %t.dir # RUN: mkdir %t.dir # RUN: cd %t.dir # RUN: yaml2obj %p/Inputs/split-dwarf5-debug-stroffsets-file1.dwo.yaml -o %t.dir/file1.dwo # RUN: yaml2obj %p/Inputs/split-dwarf5-debug-stroffsets-file2.dwo.yaml -o %t.dir/file2.dwo # RUN: yaml2obj %p/Inputs/split-dwarf5-debug-stroffsets-main.yaml -o %t.dir/test # RUN: lldb-test breakpoints %t.dir/test %s | FileCheck %s # This test checks that source code location is shown correctly # when split DWARF 5 is used and both DWO/executable file contains # .debug_str_offsets/.debug_str_offsets.dwo sections. # Used clang version 8.0.0 (trunk 347299) # # split-dwarf5-debug-stroffsets-file1.dwo.yaml, split-dwarf5-debug-stroffsets-file2.dwo.yaml # and split-dwarf5-debug-stroffsets-main.yaml are reduced yaml files produces # from the DWO files and the corresponding executable. # # Code: # // decl.h # struct struct1 { # ~struct1(); # static void f(); # }; # # struct struct2 { # ~struct2(); # static void f(); # }; # # int g(); # # // file1.cpp # #include "decls.h" # # int g() { # return 1; # } # # struct1::~struct1() { # int x = g(); # } # # void struct1::f() {} # # float test() { # return 0.0f; # } # # int main() { # struct1::f(); # struct2::f(); # # struct1 s1; # struct2 s2; # # test(); # # return 0; # } # # // file2.cpp # # # #include "decls.h" # # struct2::~struct2() { # int x = g(); # } # # void struct2::f() {} # # # Invocation used was: # clang++ file1.cpp -o file1.o -g -fno-rtti -c -gdwarf-5 -gsplit-dwarf -ffunction-sections # clang++ file2.cpp -o file2.o -g -fno-rtti -c -gdwarf-5 -gsplit-dwarf -ffunction-sections # clang++ file1.o file2.o -g -fno-rtti -gdwarf-5 -o test -gsplit-dwarf -ffunction-sections b struct1::f # CHECK-LABEL: b struct1::f # CHECK: Address: {{.*}}struct1::f() + 4 at file1.cpp:11:20 b struct2::f # CHECK-LABEL: b struct2::f # CHECK: Address: {{.*}}struct2::f() + 4 at file2.cpp:7:20