Поместите статический член const класса шаблона в определенный раздел в GCC

Для пользовательского этапа сборки мне нужно поместить некоторые данные в определенный раздел. На GCC и Clang это можно сделать с помощью

__attribute__((section(".my_section"))) const int variable_in_this_section = 42;

Чтобы сделать создание более простым и менее подверженным ошибкам, я создал класс шаблона:

#include <cstdint>

#ifdef _MSC_VER
#define SECTION(x) __declspec(section x)
#else
#define SECTION(x) __attribute__((section(x)))
#endif

#define DATA_SECTION SECTION(".my_data")

// the type to store in the .my_data section
struct hook_table_entry_t
{
std::uint32_t game_addr, hook_addr;
};

template<std::uint32_t address, std::uint32_t function>
struct bind_hook_t
{
DATA_SECTION static const hook_table_entry_t s_entry;
};
template<std::uint32_t address, std::uint32_t function>
const hook_table_entry_t bind_hook_t<address, function>::s_entry {address, function};

// instantiate template to create value
template struct bind_hook_t<0xffffffff, 0xf0f0f0f0>;

Когда я скомпилировал это с помощью clang 3.8, мой объектный файл выглядел так:

Section .my_data:
0000 ffffffff f0f0f0f0                    ........

Отлично! Но при тестировании в GCC 5 & 7 Я получил это:

Section .rodata._ZN11bind_hook_tILj4294967295ELj4042322160EE7s_entryE:
0000 ffffffff f0f0f0f0                    ........

Есть ли способ заставить GCC помещать данные в .my_data? Примечание: это работает, когда bind_hook_t это не шаблон, но это наносит ущерб всей его цели.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]