macOS Big Surでは、ホームブリッジを介してインストールされたGDBはelf32-i386バイナリからシンボルをロードできません。

macOS Big Surでは、ホームブリッジを介してインストールされたGDBはelf32-i386バイナリからシンボルをロードできません。

私は昔から趣味でカーネルを開発する作業をゆっくりしてきましたが、これまでGDBとQEMUを使ってメモリの場所やレジスタなどを探索してきました。しかし、最近Macを消去し、macOS Big Surの新しいコピーをインストールしましたReading symbols from ~/Kernel/bin/kernel... I'm sorry, Dave, I can't do that. Symbol format `elf32-i386' unknown

この問題の原因が何であるかわかりません。私はホームブルーGDB 10.1でデフォルトバージョンのGDBを使用しています。また、homebrewでi386-elf-gdbを試してみましたが、やはり動作しませんでした。 GDBを直接コンパイルし、--enable-targets = allなどのさまざまな設定オプションを設定し、ターゲットをi686-elfに設定しようとしましたが、何も機能しないようです。私の設定オプションのどれもmacOS Any GDB Bigでは有効になっていません。ソースからコンパイルされた、またはホームクラスからダウンロードされたSurはelf32-i386カーネルバイナリを読み込みます。

答え1

問題が何であるかを調べ、最初にstring.hを含めずにstrncmpを使用しようとすると、clangが本当に気に入らないことがわかりました。また、gccはstring.hなしでelf-bfd.hをコンパイルするのに非常に満足しています。したがって、GDBがmacOSでコンパイルされても、ELFコードが正しくコンパイルされなかったため、ELFファイルのロードを拒否します。修正は単に#include <string.h>elf-bfd.hの上部に追加するだけで、GDBはELFバイナリを正しくロードします。

答え2

Macosの場合、Brewを使用している場合は、i386-elf-gdbをインストールして使用できます。https://formulae.brew.sh/formula/i386-elf-gdb

brew install i386-elf-gdb

関連情報