xref: /aosp_15_r20/external/elfutils/tests/testfile-dwp.source (revision 7304104da70ce23c86437a01be71edd1a2d7f37e)
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