すべての関数を独自のセクションに移動するために、gcc フラグ -ffunction-sections を使用して C ファイルをコンパイルしています。アセンブラはエラーをスローしています:
job_queue.s:2395: Error: operation combines symbols in different segments
行 2395 でのコンパイラのアセンブリ出力は次のとおりです。
.section .debug_ranges,info
.Ldebug_ranges0:
.4byte .LBB7-.Ltext0
シンボル LBB7 は、「.text.add_event_handler」という名前の関数 (したがってセクション) にあります。シンボル Ltext0 は、「.text」という名前の (それ以外の場合は空の) セクションにあります。
GCC --version は以下を提供します:
pic30-elf-gcc.exe (GCC) 4.0.3 (dsPIC30, Microchip v3_30) (B) Build date: Jun 29 2011
コンパイラ フラグ -g0 (デバッグ情報を無効にする) を使用すると、すべてが完全にコンパイルおよび実行されます。
私の質問: この GCC 出力は明らかに間違っていますか? GCC は、シンボル LBB7 のオフセットを .text セクションではなく .add_even_handler セクションの先頭から計算する必要があったようです。
Google で同じ問題を抱えている人が見つからないので、何か誤解していると思います。