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
|