Почему g cc и clang помещают пользовательские символы const-funcptr в разделы для записи при компиляции с -fpi c? - PullRequest
3 голосов
/ 07 января 2020

Программа ниже демонстрирует проблему:

void f(void){}

__attribute((section("mysect"),used))
void (* const fp)(void)=&f; //const fn ptr placed in a WR segment iff compiled with -fpic AND a custom section is used

//__attribute((section("mysect2"))) int const x=42; //var stays in a RO segment even if placed in a custom section

int main()
{
    extern char __start_mysect,__start_mysect2;
    __start_mysect = 0; //succeeds iff the custom section is used and the program is compiled with -fpic
    //I would expect (and like) a segmentation violation

    /*__start_mysect2 = 0; //segfaults as expected */
}

Почему -fpic приводит к тому, что раздел, в котором находится const funcptr, становится доступным для записи?

Мне сказали, что это из-за времени выполнения Перемещения, но без пользовательского раздела, переменная const перераспределяется во время выполнения во время загрузки, просто отлично.

Я пытаюсь использовать пользовательский раздел, чтобы я мог перебирать кучу указателей на функции const, агрегированных из разные места в одном разделе. Можно ли сделать так, чтобы раздел не стал доступным для записи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...