Как попросить gcc повторить отладочную информацию типа после его изменения? - PullRequest
0 голосов
/ 20 июня 2019

В ядре Linux есть gcc-плагин, который перетасовывает элементы некоторых структур во время перехвата события PLUGIN_FINISH_TYPE.

Он отлично работает на производимом двоичном файле (порядок элементов рандомизирован), но не влияет накарликовая отладочная информация.На самом деле, в то время как члены структуры хорошо перетасовываются в двоичном формате, отладочная информация этих структур остается в исходном порядке.

Как плагин может попросить gcc повторить отладочную информацию только что перемешанной структуры?



В основном,плагин работает так:

// put all fields of a struct in a tab newtree[]

// shuffle this array

// redo the tree chain
for (i = 0; i < num_fields - 1; i++)
    TREE_CHAIN(newtree[i]) = newtree[i+1];
TREE_CHAIN(newtree[num_fields - 1]) = NULL_TREE;

// create a new FIELD_DECL
list = make_node(FIELD_DECL);
TREE_CHAIN(list) = newtree[0];

// and replace type fields of all variant of our struct (->type)
main_variant = TYPE_MAIN_VARIANT(type);
for (variant = main_variant; variant; variant = TYPE_NEXT_VARIANT(variant)) 
    TYPE_FIELDS(variant) = list;

// finally, force a relayout of the main variant
TYPE_SIZE(main_variant) = NULL_TREE;
layout_type(main_variant);

// Call to rebuild the debug informations ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...