Я хочу поместить некоторые пользовательские данные в пользовательский раздел, который будет читаться приложением и автономным анализатором одновременно. Предполагая следующий пример:
const int* get_data()
{
__attribute__((section(".custom")))
static const int data = 123;
return & data;
}
inline const int* inline_get_data()
{
__attribute__((section(".custom")))
static const int inline_data = 123;
return & inline_data;
}
int main()
{
(void) get_data();
(void) inline_get_data();
return 0;
}
Значение data
и inline_data
появится в разделе .custom
. Clang компилирует этот пример и дает правильный результат, как это делает MSVC, когда __attributes__
заменяется на соответствующие прагмы.
К сожалению, GCC 5.2 дает следующую ошибку:
error: inline_data causes a section type conflict with data
Проблема сводится к тому, что две переменные имеют разную связь (data
находится в разделе с отметкой с a
, раздел inline_data
отмечен aG
). GCC 4.9 не работает таким же образом, если вторая функция не помечена как встроенная, а является шаблоном (GCC 5.2 компилирует это).
GCC 5.2 также компилируется отлично, если одно имя раздела временно изменено и исправлено вручную в сгенерированной сборке.
Существует ли какое-либо известное обходное решение для этой проблемы? Я не контролирую подпись функции, переменные *data
создаются макросом, предоставленным мной, и они могут появляться где угодно.