Как де-оптимизировать ядро ​​Linux и скомпилировать его с помощью -O0?

Я хочу читать и понимать управление памятью ядра Linux (в частности дефрагментация\сжатие\миграция).

Итак, я отключу оптимизацию для размера в .config (используя make menuconfig, конечно) и скомпилирую... Это оставляет меня с еще оптимизированным ядром.

ПРИМЕЧАНИЕ.. Когда я говорю оптимизированное ядро, я имею в виду, что когда я использую gdb и скажу next, что он будет прыгать. Я не хочу этого, я хочу, чтобы иметь возможность следовать коду по строкам так же, как и с простым миром приветствия.

Затем я редактирую Makefile и меняю swap -O2 на -O0, и это заставляет вещи сломаться.

Я нашел этот, но я не знаю, какие файлы мне понадобятся, потому что я не знаю, как далеко вниз по кроличьей дыре идет.

Есть ли более общий вариант, который я могу использовать? Я понимаю понятия уплотнения памяти; однако, я хочу посмотреть, где все происходит и как это происходит.

Ответ 1

Вы не можете де-оптимизировать ядро. Возможно, вам удастся оптимизировать определенные функции, например:

void __attribute__((optimize("O0"))) foo(unsigned char data) {
    // unmodifiable compiler code
}

Но для ядра в целом требуется -O2, потому что сам код написан с предположениями, что определенные функции будут оптимизированы определенным образом.

Извините, но вам действительно нужно знать размер отверстия кролика, с которым вы хотите спуститься.