2017-01-02 10 views
0

Все, что я пытаюсь сделать, выписывая некоторые символы из изображения и используя (связывая) символы с другого изображения.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 
+1

Благодаря yugr. Я нашел вариант компоновщика для GCC. -Wl, - just-symbols = Кажется, он работает, но он использует огромный файл эльфа. Я бы предпочел просто общий объект и их адрес вроде armcc. – muratcakmak