GCC извлечь список символов и ссылку на другие изображения

Все, что я пытаюсь сделать, извлечь некоторые символы из изображения и использовать (связать) символы из другого изображения.

С помощью armccc/armlink, когда задается параметр --symdefs=, создается файл, содержащий символы и их адреса.
С другой стороны, если вы удаляете неиспользуемые символы, он просто обновляет существующие символы. И если вы включите этот файл в компиляцию, он связывает символы предыдущего изображения с новым изображением.

Но я не могу найти аналогичный подход для инструментария GNU (arm-none-eabi-). если я использую arm-none-eabi-nm, он создает список символов, например, armcc --symdefs, но не может найти способ использовать этот список символов с компиляцией второго изображения. (Также нет способа отфильтровать символы без grep).

Другой вариант, кажется, также использует arm-none-eabi-objcopy, но не может найти, как использовать его с компиляцией второго изображения.

В GNU toolchain, как мы можем это сделать? Любая идея?

С другой стороны, я хочу применить это для Keil uVision IDE, если это возможно. Благодарю.

1 ответ

Не зная много о armcc, может быть довольно легко эмулировать это поведение стандартными инструментами GNU. Например, чтобы создать файл symdef:

$ cat tmp.c
int foo() { return 0; }
int bar() { return 1; }
int main() { return 0; }
$ gcc tmp.c
$  readelf -sW a.out | grep GLOBAL | awk '{print $8 " " $2 }' | grep -v '^_' > symdef.lst

А затем использовать его, чтобы определить недостающие символы для компоновщика через --defsym флаг:

$ LDFLAGS=$(cat symdef.lst |  awk '{print "-Wl,--defsym=" $1 "=" $2}' | tr '\n' ' ')
$ echo $LDFLAGS
-Wl,--defsym=bar=0000000000400481 -Wl,--defsym=foo=0000000000400476 -Wl,--defsym=main=000000000040048
Другие вопросы по тегам