Автономный код ARM C ++ - пустой раздел .ctors - PullRequest
1 голос
/ 02 июня 2010

Я пишу код C ++ для запуска в автономной среде (в основном, на плате ARM). Все шло хорошо, за исключением того, что я наткнулся на камень преткновения - глобальные статические конструкторы.

Насколько я понимаю, секция .ctors содержит список адресов для каждого статического конструктора, и мой код должен просто перебирать этот список и выполнять вызовы каждой функции по мере ее поступления. Тем не менее, я обнаружил, что этот раздел в моем двоичном файле на самом деле совершенно пуст! Google указал на использование «.init_array» вместо «.ctors» (вещь EABI), но это ничего не изменило.

Есть идеи, почему мои статические конструкторы не существуют? Соответствующий скрипт компоновщика и вывод objdump:

.ctors :
{
    . = ALIGN(4096);
    start_ctors = .;
    *(.init_array);
    *(.ctors);
    end_ctors = .;
}

.dtors :
{
    . = ALIGN(4096);
    start_dtors = .;
    *(.fini_array);
    *(.dtors);
    end_dtors = .;
}

-

2 .ctors        00001000  8014c000  8014c000  00054000  2**2
                CONTENTS, ALLOC, LOAD, DATA
<snip>
8014d000 g     O .ctors 00000004 start_ctors
<snip>
8014d000 g     O .ctors 00000004 end_ctors

Я использую компилятор GCC, ориентированный на вооруженных эльфов (4.4.1).

Обновление: выходной двоичный файл также полон __static_initialization_and_destruction_0 символов, которых я никогда раньше не видел.

Обновление 2: это отрывок из objdump скомпилированного объектного файла (который связан с основным двоичным файлом) с неизменным разделом .ctors:

21 .ctors        00000004  00000000  00000000  00000864  2**2
                 CONTENTS, ALLOC, LOAD, RELOC, DATA

RELOCATION RECORDS FOR [.ctors]:
OFFSET   TYPE              VALUE 
00000000 R_ARM_ABS32       _GLOBAL__I__ZN9SomeStaticClass10m_InstanceE

1 Ответ

1 голос
/ 03 июня 2010

В результате возникла проблема с системой сборки - сценарий компоновщика несколько раз указывался в командной строке компоновщика, что каким-то образом вызывало удушение g ++.

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