Как перечислить компоновщики выделенных кодовых объектов w / gcc?

Я создаю встроенное приложение, состоящее из нескольких модhive кода и статической библиотеки. Некоторые глобальные переменные явно помещаются в выделенные разделы памяти (т. Е. Не раздел по умолчанию .data).

Архитектура памяти процессора – 4 банка, создающая непрерывное пространство физической памяти. В моем приложении только 1-й банк зарезервирован для кода, а остальные 3 банка зарезервированы для явно распределенных глобальных и небольших стеков.

Проблема в том, что секция кода (.text) теперь выросла за пределы 1-го банка, и я получаю следующее сообщение об ошибке компоновщика:

./bin/ld: section .data_bank1 loaded at [0000000000002000,0000000000003fff] overlaps section .text loaded at [0000000000000630,00000000000020df] ./bin/ld: section .fini loaded at [00000000000020e0,00000000000020f9] overlaps section .data_bank1 loaded at [0000000000002000,0000000000003fff] 

Есть ли способ увидеть распределение объектов (возможно, во временном объектном файле) до того, как компоновщик проверит перекрытие раздела и объекта и прервет сборку?

Вы можете передать флаг --print-map в компоновщик. Это позволит исправить детали, где каждый раздел из каждого объектного файла отображается в память.

Пример:

  .text 0x0000000000400370 0x2c //lib64/crt1.o 0x0000000000400370 _start .text 0x000000000040039c 0x17 //lib64/crti.o *fill* 0x00000000004003b3 0xd 90909090 .text 0x00000000004003c0 0x92 //4.6.3/crtbegin.o *fill* 0x0000000000400452 0x2 90909090 .text 0x0000000000400454 0x21 /tmp/ccwAfGkH.o 0x000000000040045f x 0x000000000040046a y 0x0000000000400454 main