36 lines
1.4 KiB
Plaintext
36 lines
1.4 KiB
Plaintext
|
gdb debugging of assembly sources:
|
||
|
write a function linestab() that generates a .stabd symbol
|
||
|
independently of the input
|
||
|
write a function filestab() to generate a .stabs symbol
|
||
|
we need to take especial care with #line directives
|
||
|
since we want to handle locore, and locore is passed thru cpp
|
||
|
this could be tough
|
||
|
outline of a solution:
|
||
|
cpp sends us lines of the form
|
||
|
# logical-line "logical-file" trash
|
||
|
these lines are interpreted ahead of the gas preprocess pass
|
||
|
in the starting state, the logical filename is the same
|
||
|
as the real filename (in case there're no #lines)
|
||
|
the initial logical line number is 1
|
||
|
every time we're ready to process a new instruction line,
|
||
|
if the source file has changed,
|
||
|
emit a .stabs for the logical file
|
||
|
emit a .stabd for the logical line
|
||
|
bump the logical line number
|
||
|
can gas eat multiple actual lines in one insn?
|
||
|
|
||
|
i386 nits:
|
||
|
jmp *$foo produces a short relative branch
|
||
|
string quotes in comments
|
||
|
Bill says gas eats text across newlines to find matches
|
||
|
works fine for me
|
||
|
I think it's most likely due to cpp
|
||
|
make / no longer be a comment char
|
||
|
it's now like the VAX: # is the only comment char
|
||
|
incorrectly assembles lcall, int3, into, bsr/f instructions
|
||
|
constant expressions fail if more than a few terms
|
||
|
gives (low+2)*3+4*5 as an example
|
||
|
works fine for me
|
||
|
cpp seems to think $ is a valid literal
|
||
|
use -$ in /usr/bin/cpp
|