Используйте плагины gcc для изменения порядка объявления переменных
Я знаю, что это очень трудно сделать, и что мне следует этого избегать, но у меня есть свои причины для этого. Я хочу изменить порядок некоторых объявлений полей во время компиляции, например:
class A {
char c;
int i;
}
должен обратиться к:
class A {
int i;
char c;
}
если я решил поменять порядок i
а также c
Я хочу знать, как изменить location
объявления поля, имеющего tree
Кто-нибудь знает, как я могу это сделать? Спасибо!
Я использую версию плагинов g++ 4.9.2
1 ответ
Если бы я собирался попробовать это, я бы попробовал два разных подхода.
Зацепиться за
PLUGIN_FINISH_TYPE
событие и переписать тип там. Чтобы переписать его, измените порядок полей и принудительно введите тип реле. Вам нужно будет немного прочитать исходный код GCC, чтобы понять, как сделать макет недействительным и создать новый.Если это не сработало, добавьте новый проход, который выполняется сразу после упрощения, и попробуйте переписать там типы. Я подозреваю, что это вряд ли сработает, хотя.
- Подключитесь к событию PLUGIN_FINISH_TYPE и перепишите там тип. Чтобы переписать его, измените порядок полей и принудительно выполните ретрансляцию типа. Вам нужно будет немного прочитать исходный код GCC, чтобы понять, как сделать макет недействительным и принудительно создать новый.
Это реализовано в randomize_layout_plugin.c в ядре Linux.
Это решение работает, но не позволяет получить отладочную информацию. Фактически, в отладочной информации порядок членов остается таким же, как изначально определен в исходном коде, но структура хорошо перемешана в двоичном коде.