Можно ли разделить .text, .data, .bss из библиотеки .a файл на отдельные разделы - PullRequest
0 голосов
/ 05 июня 2018

Мой вопрос связан с поиском файлов библиотеки .a в сценариях компоновщика.Обычный скрипт компоновщика состоит из секций .text, .data, .rodata и .bss.

.text :
{
    *(.text .text.*)
    *(.rodata .rodata*)  /* global const uint32_t i = 10 for example */
} > rom

.data :
{
    *(.data .data.*)
} > ram AT > rom

.bss (NOLOAD) :
{
    *(.bss .bss.*)  
} > ram

Что я хотел бы знать, так это can .text, .data, .rodata и .bssразделы в библиотеке, такие как libc.a, должны быть размещены отдельно от остальных разделов?Размещение .text в другой области выполняется с помощью *\libc.a:*, но как перемещаются .data, .rodata и .bss?

.text1 :
{
    *\libc.a:* //.text from libc.a is placed into rom1 instead of rom 
} > rom1

Я ожидал ответа для размещения .data, .rodata и.bss может иметь схожий синтаксис, но приведенный ниже синтаксис неправильный, поскольку разделы libc.a по-прежнему находятся в ram и rom вместо ram1 и rom1.

.text1 :
{
    *\libc.a:*(.text .text.*)     // libc.a.text still resides in rom
    *\libc.a:*(.rodata .rodata.*) // libc.a.rodata still resides in rom
} > rom1

.data1 :
{
    *\libc.a:*(.data .data.*)    // libc.a.data still resides in ram
} > ram1 AT > rom1

.bss1 (NOLOAD) :
{
    *\libc.a:*(.bss .bss.*)      // libc.a.bss still resides in ram
} > ram1

Есть ли какие-либо подсказки для разделения .data, .rodata,и .bss из файла .a в свои разделы?

1 Ответ

0 голосов
/ 05 июня 2018

Это зависит от того, как вы строите свою библиотеку или перепривязываете ее.Вы можете называть разделы .text.libc. * Либо непосредственно собирая libc таким образом, либо заново связывая объектные файлы с помощью сценария промежуточного компоновщика.

Синтаксис * \ libc.a: ... я считаюработает только в том случае, если вы используете * .o имена всех файлов в libc.a.

Примечание: Gcc также имеет некоторые опции для автоматического добавления кода в подразделы, например, по одному разделу на функцию.Старайтесь не делать вещи несовместимыми с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...