Избегайте создания отладочной информации в LKM с помощью kbuild

Я собираю модуль ядра Linux (LKM) из больших файлов C (> 50 000 LOC). Это какой-то сгенерированный код вычисления RAID. Когда я пытаюсь собрать его из kbuild, gcc съедает всю память и вылетает, в то время как вызов gcc вручную работает нормально.

После проверки объектных файлов вручную gcc и kbuild я обнаружил, что объектные файлы kbuild в 20-30 раз больше, чем объекты вручную gcc (900k против 30M). И причина в том, что объектные файлы kbuild содержат гигантский раздел debug_info с кучей данных.

Вот фрагмент из objdump -x:

RELOCATION RECORDS FOR [.debug_info]:
OFFSET           TYPE              VALUE 
0000000000000006 R_X86_64_32       .debug_abbrev
000000000000000c R_X86_64_32       .debug_str+0x0000000000000c41
0000000000000011 R_X86_64_32       .debug_str+0x0000000000000e26
0000000000000015 R_X86_64_32       .debug_str+0x0000000000000544
0000000000000019 R_X86_64_64       .text 
0000000000000021 R_X86_64_64       .text+0x0000000000060957
0000000000000029 R_X86_64_32       .debug_line
0000000000000030 R_X86_64_32       .debug_str+0x0000000000000b78
0000000000000037 R_X86_64_32       .debug_str+0x000000000000011e
0000000000000040 R_X86_64_32       .debug_str+0x000000000000066b
0000000000000047 R_X86_64_32       .debug_str+0x0000000000000d38
000000000000004e R_X86_64_32       .debug_str+0x0000000000000bef
                  ... another 60000 records ...
00000000000a0c8d R_X86_64_32       .debug_str+0x0000000000000add
00000000000a0ca0 R_X86_64_32       .debug_str+0x0000000000000526
00000000000a0cae R_X86_64_64       Calculation_1s_Func_Buf

Я уже пробовал EXTRA_CFLAG += -S безуспешно.

Итак, есть ли способ избежать создания отладочной информации в моих объектных файлах при сборке с помощью kbuild?


person Alexander Dzyoba    schedule 20.11.2013    source источник
comment
Вы можете изменить одну из переменных KBUILD_XXX, которая является основной настройкой компиляции. KBUILD_CFLAGS := $(filter-out "-g",$KBUILD_CFLAGS) или что-то в этом роде.   -  person artless noise    schedule 04.03.2014


Ответы (1)


Вы пытались отключить CONFIG_DEBUG_INFO?

Ищите его в «Взлом ядра» -> «Проверки во время компиляции и параметры компилятора» -> «Скомпилировать ядро ​​с отладочной информацией» в menuconfig.

person Kristof Provost    schedule 20.11.2013
comment
Я создаю один модуль вне дерева, поэтому я не могу сделать make menuconfig. Можно ли отключить CONFIG_DEBUG_INFO в make-файле модуля? - person Alexander Dzyoba; 20.11.2013
comment
Нет, но когда вы собираете модуль, у вас все еще есть исходное дерево ядра с конфигурацией, поэтому вы можете отключить его там. - person Kristof Provost; 20.11.2013
comment
Я редактировал .config в дереве исходников ядра с помощью CONFIG_DEBUG_INFO=n - это не помогло. - person Alexander Dzyoba; 20.11.2013