Заставить G CC поместить указанные c операторы в указанный c раздел - PullRequest
1 голос
/ 30 апреля 2020

Я знаю, что компилятор (по крайней мере G CC) может быть принудительно помещать определенные c функции в определенные c секции.

Например, рассмотрим функцию foo.

int foo(int a, int b, int c);

Переписав следующим образом, компилятор генерирует исполняемый двоичный файл ELF с функцией, помещенной в секцию вывода .custom. (Это также приводит к тому, что функция in-line не вызывается, потому что мне нужно, чтобы эти функции вызывались из их определенных c позиций памяти, а не просто реплицировались компилятором.)

#define CUSTOMIZE    __attribute__((__section__(".custom"))) __attribute__ ((noinline))
int  CUSTOMIZE  foo(int a, int b, int c);

Итак, мой вопрос таков: возможно ли сделать это автоматически для определенных c операторов или блоков внутри функции?

Очевидно, что один из способов сделать это - просто извлечь эти части (скажем, для l oop, например, или утверждение 3) и поместить их в определенные c функции, но это слишком сложная операция и не масштабируется для меня. Есть идеи?

int foo(int a, int b, int c)
{
   // Statement 1
   // Statement 2
   // Statement 3

   // For Loop Block
   for ( ... )
   {
       // For loop body
   }

   return some_value;
}

РЕДАКТИРОВАТЬ

То, что я ищу, является чем-то эквивалентным следующему. Там, где For l oop выделено в отдельную функцию, я могу разместить ее в своем пользовательском разделе.

Надеюсь, теперь мои намерения прояснятся. Моя цель - просто узнать, есть ли способ сделать это автоматически с помощью компилятора без извлечения этих частей вручную (плюс я также должен управлять аргументами ... et c. Короче говоря, слишком много операций).


int CUSTOMIZE my_isolated_for_loop( some_arguments_here )
{
   // Place my for loop here, with the correct
   // For Loop Block
   for ( ... )
   {
       // For loop body
   }
   return result
}

int foo(int a, int b, int c)
{
   // Statement 1
   // Statement 2
   // Statement 3

   intermediate_result = my_isolated_for_loop( some_arguments_here )

   return some_value;
}

Спасибо.

...