Изменить префикс на разделы для функций, сгенерированные -ffunction-section - PullRequest
0 голосов
/ 10 июля 2019

Если у меня есть функция foo() и я использую -ffunction-sections, gcc поместит foo() в собственную секцию .text.foo. Можно ли изменить префикс .text? Так что я получаю .customName.foo вместо text.foo.

1 Ответ

0 голосов
/ 10 июля 2019

Нет, это не представляется возможным.См. gcc/varasm.c (я не запускал отладчик, но уверен, что это код, который вычисляет имена разделов.)

void
default_unique_section (tree decl, int reloc)
{
  [...]

  switch (categorize_decl_for_section (decl, reloc))
    {
    case SECCAT_TEXT:
      prefix = one_only ? ".t" : ".text";
      break;

  [...]

  name = IDENTIFIER_POINTER (id);
  name = targetm.strip_name_encoding (name);

  [...]

  string = ACONCAT ((linkonce, prefix, ".", name, NULL));

  set_decl_section_name (decl, string);
}

Кроме того, это может быть плохой идеей, как, например, сценарии компоновщика.разделы на основе их названий (см. ld --verbose).Что-то вроде .text.customprefix.foo может быть лучшим выбором, но я не знаю, зачем вам нужны пользовательские настройки.


В качестве обходного пути вы можете назначать разделы вручную с помощью атрибута section.

'section ("SECTION-NAME")'
     Normally, the compiler places the code it generates in the 'text'
     section.  Sometimes, however, you need additional sections, or you
     need certain particular functions to appear in special sections.
     The 'section' attribute specifies that a function lives in a
     particular section.  For example, the declaration:

          extern void foobar (void) __attribute__ ((section ("bar")));

     puts the function 'foobar' in the 'bar' section.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...