4

アセンブリで gdb の行番号デバッグ情報を GAS に出力させる方法がわかりません。私は avr-gcc クロス コンパイラを使用していることに注意してください。

次のコマンド ライン オプションを使用してアセンブルしています: avr-gcc -g -ggdb -Os -mmcu=atmega644 -ffunction-sections -fsigned-char -Winvalid-pch -Wall -Wno-long-long -x assembler-with -cpp -Wa,-ggdb -c -o z813.o z813.s

ほぼ同じ一連の引数を使用して C コードをコンパイルすると、「objdump -l -d」を使用して行番号とソース ファイルの拡張を確認できます。

ただし、アセンブリ オブジェクトには何もありません。すなわち


000000d4 <run_timetable>:
      d4:       0e 94 57 00     call    0xae    ; 0xae <run_timetable_row>
      d8:       0e 94 b4 00     call    0x168   ; 0x168 <delay>

vs

00000f9c :
main():
/home/braddock/work/tviki/tviki/scratch/z813-vid.c:68
     f9c:       0e 94 ae 07     call    0xf5c   ; 0xf5c <init>
/home/braddock/work/tviki/tviki/scratch/z813-vid.c:70
     fa0:       0e 94 6a 00     call    0xd4    ; 0xd4 <run_timetable>

avr-gdb で (simulavr リモート gdb 接続を介して)、シンボル名と情報は認識しますが、アセンブル コードをシングル ステップで実行できません。これが関係していると思います。

私はこれを info/man/google で見つけて、可能性のあるフラグを並べ替えようと努力しました。どんな助けでも大歓迎です!

4

1 に答える 1

3

アセンブラのソースコードを「コンパイル」する場合、Cコンパイラを呼び出すのはやややり過ぎです。コンパイラは、入力がCファイルであることを認識し、-gや-Osなど、Cコンパイルに影響を与える渡されたオプションを無視します。コンパイラ行に「-v」を渡して、実際にアセンブラに渡されるオプションを確認します。

で組み立てるとき

avr-as --gstabs -mmcu=atmega644 a.s -o a.o

次に、オブジェクトファイルで見栄えの良いソース行情報を取得します。私のバージョンのavr-as(2.18.0)は-ggdbオプションをまったくサポートしておらず、-g、-gstabs、-gstabs +、-gdwarf-2しかありません。スタブを使用すると、objdumpは行を表示できます。dwarf-2では、そうではありません-それがobjdumpのバグなのかasのバグなのかはわかりません。

アセンブラを「gcc」として呼び出すことを絶対に主張する場合は、-Wa、-gstabsを渡す必要があります。

于 2009-08-14T07:04:59.977 に答える