187aa9c9eSJonas Devlieghere# RUN: rm -rf %t.dir 287aa9c9eSJonas Devlieghere# RUN: mkdir %t.dir 387aa9c9eSJonas Devlieghere# RUN: cd %t.dir 4*b587ca93SFangrui Song# RUN: yaml2obj %p/Inputs/split-dwarf5-debug-stroffsets-file1.dwo.yaml -o %t.dir/file1.dwo 5*b587ca93SFangrui Song# RUN: yaml2obj %p/Inputs/split-dwarf5-debug-stroffsets-file2.dwo.yaml -o %t.dir/file2.dwo 6*b587ca93SFangrui Song# RUN: yaml2obj %p/Inputs/split-dwarf5-debug-stroffsets-main.yaml -o %t.dir/test 787aa9c9eSJonas Devlieghere# RUN: lldb-test breakpoints %t.dir/test %s | FileCheck %s 887aa9c9eSJonas Devlieghere 987aa9c9eSJonas Devlieghere# This test checks that source code location is shown correctly 1087aa9c9eSJonas Devlieghere# when split DWARF 5 is used and both DWO/executable file contains 1187aa9c9eSJonas Devlieghere# .debug_str_offsets/.debug_str_offsets.dwo sections. 1287aa9c9eSJonas Devlieghere# Used clang version 8.0.0 (trunk 347299) 1387aa9c9eSJonas Devlieghere# 1487aa9c9eSJonas Devlieghere# split-dwarf5-debug-stroffsets-file1.dwo.yaml, split-dwarf5-debug-stroffsets-file2.dwo.yaml 1587aa9c9eSJonas Devlieghere# and split-dwarf5-debug-stroffsets-main.yaml are reduced yaml files produces 1687aa9c9eSJonas Devlieghere# from the DWO files and the corresponding executable. 1787aa9c9eSJonas Devlieghere# 1887aa9c9eSJonas Devlieghere# Code: 1987aa9c9eSJonas Devlieghere# // decl.h 2087aa9c9eSJonas Devlieghere# struct struct1 { 2187aa9c9eSJonas Devlieghere# ~struct1(); 2287aa9c9eSJonas Devlieghere# static void f(); 2387aa9c9eSJonas Devlieghere# }; 2487aa9c9eSJonas Devlieghere# 2587aa9c9eSJonas Devlieghere# struct struct2 { 2687aa9c9eSJonas Devlieghere# ~struct2(); 2787aa9c9eSJonas Devlieghere# static void f(); 2887aa9c9eSJonas Devlieghere# }; 2987aa9c9eSJonas Devlieghere# 3087aa9c9eSJonas Devlieghere# int g(); 3187aa9c9eSJonas Devlieghere# 3287aa9c9eSJonas Devlieghere# // file1.cpp 3387aa9c9eSJonas Devlieghere# #include "decls.h" 3487aa9c9eSJonas Devlieghere# 3587aa9c9eSJonas Devlieghere# int g() { 3687aa9c9eSJonas Devlieghere# return 1; 3787aa9c9eSJonas Devlieghere# } 3887aa9c9eSJonas Devlieghere# 3987aa9c9eSJonas Devlieghere# struct1::~struct1() { 4087aa9c9eSJonas Devlieghere# int x = g(); 4187aa9c9eSJonas Devlieghere# } 4287aa9c9eSJonas Devlieghere# 4387aa9c9eSJonas Devlieghere# void struct1::f() {} 4487aa9c9eSJonas Devlieghere# 4587aa9c9eSJonas Devlieghere# float test() { 4687aa9c9eSJonas Devlieghere# return 0.0f; 4787aa9c9eSJonas Devlieghere# } 4887aa9c9eSJonas Devlieghere# 4987aa9c9eSJonas Devlieghere# int main() { 5087aa9c9eSJonas Devlieghere# struct1::f(); 5187aa9c9eSJonas Devlieghere# struct2::f(); 5287aa9c9eSJonas Devlieghere# 5387aa9c9eSJonas Devlieghere# struct1 s1; 5487aa9c9eSJonas Devlieghere# struct2 s2; 5587aa9c9eSJonas Devlieghere# 5687aa9c9eSJonas Devlieghere# test(); 5787aa9c9eSJonas Devlieghere# 5887aa9c9eSJonas Devlieghere# return 0; 5987aa9c9eSJonas Devlieghere# } 6087aa9c9eSJonas Devlieghere# 6187aa9c9eSJonas Devlieghere# // file2.cpp 6287aa9c9eSJonas Devlieghere# 6387aa9c9eSJonas Devlieghere# 6487aa9c9eSJonas Devlieghere# #include "decls.h" 6587aa9c9eSJonas Devlieghere# 6687aa9c9eSJonas Devlieghere# struct2::~struct2() { 6787aa9c9eSJonas Devlieghere# int x = g(); 6887aa9c9eSJonas Devlieghere# } 6987aa9c9eSJonas Devlieghere# 7087aa9c9eSJonas Devlieghere# void struct2::f() {} 7187aa9c9eSJonas Devlieghere# 7287aa9c9eSJonas Devlieghere# 7387aa9c9eSJonas Devlieghere# Invocation used was: 7487aa9c9eSJonas Devlieghere# clang++ file1.cpp -o file1.o -g -fno-rtti -c -gdwarf-5 -gsplit-dwarf -ffunction-sections 7587aa9c9eSJonas Devlieghere# clang++ file2.cpp -o file2.o -g -fno-rtti -c -gdwarf-5 -gsplit-dwarf -ffunction-sections 7687aa9c9eSJonas Devlieghere# clang++ file1.o file2.o -g -fno-rtti -gdwarf-5 -o test -gsplit-dwarf -ffunction-sections 7787aa9c9eSJonas Devlieghere 7887aa9c9eSJonas Devlieghereb struct1::f 7987aa9c9eSJonas Devlieghere# CHECK-LABEL: b struct1::f 8087aa9c9eSJonas Devlieghere# CHECK: Address: {{.*}}struct1::f() + 4 at file1.cpp:11:20 8187aa9c9eSJonas Devlieghere 8287aa9c9eSJonas Devlieghereb struct2::f 8387aa9c9eSJonas Devlieghere# CHECK-LABEL: b struct2::f 8487aa9c9eSJonas Devlieghere# CHECK: Address: {{.*}}struct2::f() + 4 at file2.cpp:7:20 85