85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| # 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
 |