Как собрать покрытие для файлов, которые специально используют регистр указателя кадра?
Я создаю свой проект с помощью GCC (версия 11.x), передавая ему флаг. Цель состоит в том, чтобы запустить наш набор тестов с инструментированными двоичными файлами и измерить охват, который они обеспечивают.
Однако довольно много файлов резервируют регистр указателя кадра (на x86-64 это RBP), прикрепляя его к глобальной переменной. Это делается с помощью нестандартного GCC.register ... asm
аннотация:
register struct mystruct * current_obj asm("rbp");
Затем компилятор жалуется на эти файлы:
ошибка: указатель кадра требуется, но зарезервирован
Если я исключаю эти конкретные файлы из инструментария, компилируя их без
-coverage
, я могу связать результаты и затем запустить их, а затем проверить покрытие. Однако это по существу опускает большую часть приложения, даже самую важную его часть.
Невозможно сразу удалить закрепление реестра из затронутых файлов. Довольно много кода основано на этом модифицированном соглашении ABI, включая некоторый код на ассемблере (однако его покрытие не представляет интереса) и проприетарный JIT-движок (опять же, выходит за рамки этого охвата).
Есть ли еще способ получить информацию о покрытии в такой ситуации?