summaryrefslogtreecommitdiff
path: root/tests/run-readelf-gdb_index.sh
blob: fcbc3c571d537585249935f56ffb658774525ad5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#! /bin/sh
# Copyright (C) 2012 Red Hat, Inc.
# This file is part of elfutils.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# elfutils is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

. $srcdir/test-subr.sh

# common.h
# struct foo
# {
#   const char *bar;
# };
#
# extern char *global;
# int say (struct foo *prefix);

# hello.c
# #include "common.h"
#
# static char *hello = "Hello";
#
# int
# main (int argc, char **argv)
# {
#   struct foo baz;
#   global = hello;
#   baz.bar = global;
#   return say(&baz);
# }

# world.c
# #include "common.h"
#
# char *global;
#
# static int hello (const char *bar)
# {
#   return bar == global;
# }
#
# int
# say (struct foo *prefix)
# {
#   return hello (prefix->bar);
# }

# gcc -g -fdebug-types-section -c hello.c
# gcc -g -fdebug-types-section -c world.c
# gcc -g -fdebug-types-section -o testfilegdbindex7 hello.o world.o
# gdb testfilegdbindex7
# (gdb) save gdb-index .
# objcopy --add-section .gdb_index=testfilegdbindex7.gdb-index --set-section-flags .gdb_index=readonly testfilegdbindex7 testfilegdbindex7

testfiles testfilegdbindex5 testfilegdbindex7

testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=gdb_index testfilegdbindex5 <<\EOF

GDB section [33] '.gdb_index' at offset 0xe76 contains 8383 bytes :
 Version:         5
 CU offset:       0x18
 TU offset:       0x38
 address offset:  0x50
 symbol offset:   0x78
 constant offset: 0x2078

 CU list at offset 0x18 contains 2 entries:
 [   0] start: 00000000, length:   184
 [   1] start: 0x0000b8, length:   204

 TU list at offset 0x38 contains 1 entries:
 [   0] CU offset:     0, type offset:    29, signature: 0x87e03f92cc37cdf0

 Address list at offset 0x50 contains 2 entries:
 [   0] 0x000000000040049c <main>..0x00000000004004d1 <main+0x35>, CU index:     0
 [   1] 0x00000000004004d4 <hello>..0x000000000040050b <say+0x1c>, CU index:     1

 Symbol table at offset 0x50 contains 1024 slots:
 [ 123] symbol: global, CUs: 1
 [ 489] symbol: main, CUs: 0
 [ 518] symbol: char, CUs: 0
 [ 661] symbol: foo, CUs: 0T
 [ 741] symbol: hello, CUs: 0, 1
 [ 746] symbol: say, CUs: 1
 [ 754] symbol: int, CUs: 0
EOF

testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=gdb_index testfilegdbindex7 <<\EOF

GDB section [33] '.gdb_index' at offset 0xe76 contains 8399 bytes :
 Version:         7
 CU offset:       0x18
 TU offset:       0x38
 address offset:  0x50
 symbol offset:   0x78
 constant offset: 0x2078

 CU list at offset 0x18 contains 2 entries:
 [   0] start: 00000000, length:   184
 [   1] start: 0x0000b8, length:   204

 TU list at offset 0x38 contains 1 entries:
 [   0] CU offset:     0, type offset:    29, signature: 0x87e03f92cc37cdf0

 Address list at offset 0x50 contains 2 entries:
 [   0] 0x000000000040049c <main>..0x00000000004004d1 <main+0x35>, CU index:     0
 [   1] 0x00000000004004d4 <hello>..0x000000000040050b <say+0x1c>, CU index:     1

 Symbol table at offset 0x50 contains 1024 slots:
 [ 123] symbol: global, CUs: 1 (var:G)
 [ 489] symbol: main, CUs: 0 (func:G)
 [ 518] symbol: char, CUs: 0 (type:S)
 [ 661] symbol: foo, CUs: 0T (type:S)
 [ 741] symbol: hello, CUs: 0 (var:S), 1 (func:S)
 [ 746] symbol: say, CUs: 1 (func:G)
 [ 754] symbol: int, CUs: 0 (type:S)
EOF

exit 0