This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
> > In a assembly file 'a.s', we define two sections which have code both.
> > For example:
> >
> > line1: .section mysection
> > line2: load r4, [r3]
> > line3: jump func
> > ......
> >
> > line6: .text
> > line7: store r4, [r3]
> > line8: jump func
> > ......
> >
> > "info line a.s:7" will print both the begin and end address of the
line.
> > but "info line a.s:2" just print the begin address and "but contains
no
> > code."
> >
> > I trace the behavior of gdb (6.6 release) and find if the code is not
in
> > .text,
> > then it will not be put to the 'blockvector structure'
>
> Are you sure? It sounds to me like your assembler is not emitting the
> right debug info. GDB doesn't care what section lines are in.
Hi, I tested this on x86:
1, compile & dump:
gcc -o t -gstabs+ s2.s tp_bt1.c
objdump -dhs t &>log1
objdump -G t &>log2
2, debug:
(gdb) info line s2.s:2
Line 2 of "s2.s" is at address 0x8048490 but contains no code.
3, I trace gdb(6.6 release) behavior in 'find_pc_sect_symtab':
1934 ALL_SYMTABS (objfile, s)
(gdb)
1936 bv = BLOCKVECTOR (s);
(gdb)
1937 b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
(gdb)
1939 if (BLOCK_START (b) <= pc
(gdb) p/x *b
$1 = {
startaddr = 0x8048334,
endaddr = 0x8048340,
function = 0x0,
superblock = 0x0,
dict = 0x9931404,
language_specific = {
cplus_specific = {
namespace = 0x0
}
},
gcc_compile_flag = 0x0
}
(gdb)
because address 0x8048490 is not in [0x8048334, 0x8048340], so return
NULL.
4, See the stabs info:
Contents of .stab section:
Symnum n_type n_othr n_desc n_value n_strx String
-1 HdrSym 0 71 0000043c 1
0 SO 0 0 08048334 1 s2.s
1 SLINE 0 2 08048490 0
2 SLINE 0 3 08048495 0
3 SLINE 0 5 08048334 0
4 SLINE 0 6 08048339 0
5 SO 0 0 08048340 6
/home/qinwei/GJ283/code/build_linux/debug-gdb/
6 SO 0 0 08048340 53 tp_bt1.c
7 OPT 0 0 00000000 62 gcc2_compiled.
5, My question:
1, Does gdb create a 'block' range from [0x08048334, 0x08048340] according
to every
'SO' symbol here? And address 0x08048490 is not in the range(s2.s)?
2, How to solve the problem? (make 'line info' print both start & end
address)
Let linker to link 'my_section' in the proper ranges? Or other solutions?
Attachment:
tp_bt1.c
Description: Binary data
Attachment:
log1
Description: Binary data
Attachment:
log2
Description: Binary data
Attachment:
s2.s
Description: Binary data
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |