1*7304104dSAndroid Build Coastguard Worker# Nonsensical program used to generate example DWARF package files with type 2*7304104dSAndroid Build Coastguard Worker# units, location lists, range lists, and macros. 3*7304104dSAndroid Build Coastguard Worker 4*7304104dSAndroid Build Coastguard Worker# = foobar.h = 5*7304104dSAndroid Build Coastguard Worker 6*7304104dSAndroid Build Coastguard Workerstruct Foo 7*7304104dSAndroid Build Coastguard Worker{ 8*7304104dSAndroid Build Coastguard Worker int a, b; 9*7304104dSAndroid Build Coastguard Worker int foo (); 10*7304104dSAndroid Build Coastguard Worker}; 11*7304104dSAndroid Build Coastguard Worker 12*7304104dSAndroid Build Coastguard Workerstruct Bar 13*7304104dSAndroid Build Coastguard Worker{ 14*7304104dSAndroid Build Coastguard Worker long a, b; 15*7304104dSAndroid Build Coastguard Worker long bar (); 16*7304104dSAndroid Build Coastguard Worker}; 17*7304104dSAndroid Build Coastguard Worker 18*7304104dSAndroid Build Coastguard Worker#define FROB(x) ((x) ^ 0x2a2a2a2a) 19*7304104dSAndroid Build Coastguard Worker#define FRY(x) ((x) * 0x100000001b3) 20*7304104dSAndroid Build Coastguard Worker 21*7304104dSAndroid Build Coastguard Workerinline long 22*7304104dSAndroid Build Coastguard Workerfibonacci (unsigned int n) 23*7304104dSAndroid Build Coastguard Worker{ 24*7304104dSAndroid Build Coastguard Worker if (n == 0) 25*7304104dSAndroid Build Coastguard Worker return 0; 26*7304104dSAndroid Build Coastguard Worker else 27*7304104dSAndroid Build Coastguard Worker { 28*7304104dSAndroid Build Coastguard Worker long a = 0; 29*7304104dSAndroid Build Coastguard Worker long b = 1; 30*7304104dSAndroid Build Coastguard Worker for (unsigned int i = 2; i < n; i++) 31*7304104dSAndroid Build Coastguard Worker { 32*7304104dSAndroid Build Coastguard Worker long tmp = a + b; 33*7304104dSAndroid Build Coastguard Worker a = b; 34*7304104dSAndroid Build Coastguard Worker b = tmp; 35*7304104dSAndroid Build Coastguard Worker } 36*7304104dSAndroid Build Coastguard Worker return b; 37*7304104dSAndroid Build Coastguard Worker } 38*7304104dSAndroid Build Coastguard Worker} 39*7304104dSAndroid Build Coastguard Worker 40*7304104dSAndroid Build Coastguard Worker# = foo.cc = 41*7304104dSAndroid Build Coastguard Worker 42*7304104dSAndroid Build Coastguard Worker#include "foobar.h" 43*7304104dSAndroid Build Coastguard Worker 44*7304104dSAndroid Build Coastguard Worker#define ZERO() (1 - 1) 45*7304104dSAndroid Build Coastguard Worker 46*7304104dSAndroid Build Coastguard Workerint 47*7304104dSAndroid Build Coastguard Workerx_x (int x) 48*7304104dSAndroid Build Coastguard Worker{ 49*7304104dSAndroid Build Coastguard Worker for (int i = x; i > ZERO(); i--) 50*7304104dSAndroid Build Coastguard Worker x *= x; 51*7304104dSAndroid Build Coastguard Worker return x; 52*7304104dSAndroid Build Coastguard Worker} 53*7304104dSAndroid Build Coastguard Worker 54*7304104dSAndroid Build Coastguard Workerint 55*7304104dSAndroid Build Coastguard WorkerFoo::foo () 56*7304104dSAndroid Build Coastguard Worker{ 57*7304104dSAndroid Build Coastguard Worker int x = a; 58*7304104dSAndroid Build Coastguard Worker if (a > b) 59*7304104dSAndroid Build Coastguard Worker x -= b; 60*7304104dSAndroid Build Coastguard Worker return FROB (x_x (x)); 61*7304104dSAndroid Build Coastguard Worker} 62*7304104dSAndroid Build Coastguard Worker 63*7304104dSAndroid Build Coastguard Worker# = bar.cc = 64*7304104dSAndroid Build Coastguard Worker 65*7304104dSAndroid Build Coastguard Worker#include "foobar.h" 66*7304104dSAndroid Build Coastguard Worker 67*7304104dSAndroid Build Coastguard Worker#define ONE 1 68*7304104dSAndroid Build Coastguard Worker 69*7304104dSAndroid Build Coastguard Workerlong 70*7304104dSAndroid Build Coastguard WorkerBar::bar () 71*7304104dSAndroid Build Coastguard Worker{ 72*7304104dSAndroid Build Coastguard Worker if (a == b) 73*7304104dSAndroid Build Coastguard Worker return ONE; 74*7304104dSAndroid Build Coastguard Worker else 75*7304104dSAndroid Build Coastguard Worker return a > b ? b : a; 76*7304104dSAndroid Build Coastguard Worker} 77*7304104dSAndroid Build Coastguard Worker 78*7304104dSAndroid Build Coastguard Worker# = main.cc = 79*7304104dSAndroid Build Coastguard Worker 80*7304104dSAndroid Build Coastguard Worker#include "foobar.h" 81*7304104dSAndroid Build Coastguard Worker 82*7304104dSAndroid Build Coastguard Worker#define MAIN_ARGS int argc, char **argv 83*7304104dSAndroid Build Coastguard Worker 84*7304104dSAndroid Build Coastguard Workerint 85*7304104dSAndroid Build Coastguard Workermain(MAIN_ARGS) 86*7304104dSAndroid Build Coastguard Worker{ 87*7304104dSAndroid Build Coastguard Worker struct Foo myfoo { argc, FROB (argc) }; 88*7304104dSAndroid Build Coastguard Worker struct Bar mybar { fibonacci (argc), FRY (argc) }; 89*7304104dSAndroid Build Coastguard Worker return myfoo.foo() + mybar.bar(); 90*7304104dSAndroid Build Coastguard Worker} 91*7304104dSAndroid Build Coastguard Worker 92*7304104dSAndroid Build Coastguard Worker# Built with GCC at commit 80048aa13a6b ("debug/111409 - don't generate COMDAT 93*7304104dSAndroid Build Coastguard Worker# macro sections for split DWARF"). 94*7304104dSAndroid Build Coastguard Worker$ g++ -gdwarf-5 -gsplit-dwarf -fdebug-types-section -g3 -O2 foo.cc bar.cc main.cc -o testfile-dwp-5 95*7304104dSAndroid Build Coastguard Worker# GNU dwp as of binutils 2.41 only supports DWARF 4. 96*7304104dSAndroid Build Coastguard Worker$ llvm-dwp -e testfile-dwp-5 -o testfile-dwp-5.dwp 97*7304104dSAndroid Build Coastguard Worker 98*7304104dSAndroid Build Coastguard Worker$ g++ -gdwarf-4 -gsplit-dwarf -fdebug-types-section -g3 -O2 foo.cc bar.cc main.cc -o testfile-dwp-4 99*7304104dSAndroid Build Coastguard Worker$ dwp -e testfile-dwp-4 100*7304104dSAndroid Build Coastguard Worker 101*7304104dSAndroid Build Coastguard Worker$ g++ -gdwarf-4 -gstrict-dwarf -gsplit-dwarf -fdebug-types-section -g3 -O2 foo.cc bar.cc main.cc -o testfile-dwp-4-strict 102*7304104dSAndroid Build Coastguard Worker$ dwp -e testfile-dwp-4-strict 103