Удалить раздел, созданный с помощью __attribute __ ((section)) - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть ряд функций и соответствующие юнит-тесты.Я хотел бы встроить тесты в саму кодовую базу.Я придумал следующее решение:

void a() {
  // this code should be tested
}

__attribute__((section(".tests")))
void a_test() {
  // test if a() works
}

Тесты размещены в разделе .tests, который я могу вырезать для релизных сборок.Я попробовал следующее:

$ gcc -c a.c -o a.orig.o # a.c is shown above
$ objcopy -R.tests a.orig.o a.o
objcopy: a.o: symbol `.tests' required but not present
objcopy:a.o: no symbols

Я нашел этот вопрос , который описывает аналогичную проблему, когда отвечающий сказал, что это из-за перекрестной ссылки откуда-то на раздел.

Я думаю, .eh_frame этот раздел виноват, так как удаление будет работать:

$ objcopy -R.tests -R.eh_frame a.orig.o a.o
  • Можно ли удалить этот раздел без последствий?
  • Есть ли лучший способ пойтиоб этом?

1 Ответ

0 голосов
/ 23 декабря 2018

Отменить разделы в скрипте компоновщика.

...