Gentoo Archives: gentoo-dev

From: Ned Ludd <solar@g.o>
To: gentoo-dev@l.g.o
Subject: Re: [gentoo-dev] Re: Split ELF Debug (default or not?)
Date: Sun, 27 Nov 2005 15:49:32
Message-Id: 1133106270.5422.451.camel@localhost
In Reply to: Re: [gentoo-dev] Re: Split ELF Debug (default or not?) by Edward Catmur
1 On Sun, 2005-11-27 at 15:22 +0000, Edward Catmur wrote:
2 > On Sun, 2005-11-27 at 08:40 -0500, Ned Ludd wrote:
3 > > On Sun, 2005-11-27 at 15:09 +0200, Ivan Yosifov wrote:
4 > > > And one more thing. For proper debugging, don't I need the source to be
5 > > > present ?
6 > >
7 > > -g3 -ggdb embeds the source code in the debug info so I don't see the
8 > > point.
9 >
10 > It doesn't; at least not with gcc 3.4.4. It does embed function
11 > prototypes and macro definitions, though.
12 >
13 > Ed Catmur
14
15 Eh?
16
17
18 solar@simple ~ $ gcc -g3 -nopie -ggdb segfault_me.c -o segfault_me
19 solar@simple ~ $ paxctl -permsx segfault_me
20 solar@simple ~ $ gdb -q ./segfault_me
21 Using host libthread_db library "/lib/libthread_db.so.1".
22 (gdb) b main
23 Breakpoint 1 at 0x804853d: file segfault_me.c, line 25.
24 (gdb) step
25 The program is not being run.
26 (gdb) r
27 Starting program: /home/solar/segfault_me
28
29 Breakpoint 1, main () at segfault_me.c:25
30 25 foo();
31 (gdb) step
32 foo () at segfault_me.c:17
33 17 int i = 0;
34 (gdb)
35 18 for (i = 0 ; i < 3; i++) {
36 (gdb)
37 19 printf("Just an example %d\n", i);
38 (gdb)
39 Just an example 0
40 18 for (i = 0 ; i < 3; i++) {
41 (gdb)
42 19 printf("Just an example %d\n", i);
43 (gdb)
44 Just an example 1
45 18 for (i = 0 ; i < 3; i++) {
46 (gdb)
47 19 printf("Just an example %d\n", i);
48 (gdb)
49 Just an example 2
50 18 for (i = 0 ; i < 3; i++) {
51 (gdb)
52 21 bar();
53 (gdb)
54 bar () at segfault_me.c:13
55 13 baz();
56 (gdb)
57 baz () at segfault_me.c:9
58 9 atexit(break_self);
59 (gdb)
60 10 }
61 (gdb)
62 bar () at segfault_me.c:14
63 14 }
64 (gdb)
65 foo () at segfault_me.c:22
66 22 }
67 (gdb)
68 main () at segfault_me.c:26
69 26 return 0;
70 (gdb)
71 27 }
72 (gdb)
73 0x400407b6 in __libc_start_main () from /lib/libc.so.6
74 (gdb)
75 Single stepping until exit from function __libc_start_main,
76 which has no line number information.
77
78 Program received signal SIGSEGV, Segmentation fault.
79 0x40050681 in kill () from /lib/libc.so.6
80 (gdb)
81
82 solar@simple ~ $ cat segfault_me.c
83 #include <stdio.h>
84 #include <signal.h>
85
86 void break_self() {
87 kill(getpid(), SIGSEGV);
88 }
89
90 int baz() {
91 atexit(break_self);
92 }
93
94 void bar() {
95 baz();
96 }
97
98 void foo() {
99 int i;
100 for (i = 0 ; i < 3; i++) {
101 printf("Just an example %d\n", i);
102 }
103 bar();
104 }
105
106 int main() {
107 foo();
108 return 0;
109 }
110
111
112
113 # While single stepping sure looks like source code to me.
114
115 solar@simple ~ $ gcc -v 2>&1 | tail -n 1
116 gcc version 3.4.4 (Gentoo Hardened 3.4.4, HTB-3.4.4_pre-1.00,
117 ssp-3.4.4-1.0, pie-8.7.8)
118
119 --
120 Ned Ludd <solar@g.o>
121 Gentoo Linux
122
123 --
124 gentoo-dev@g.o mailing list

Replies

Subject Author
Re: [gentoo-dev] Re: Split ELF Debug (default or not?) Ned Ludd <solar@g.o>