Избегайте создания отладочной информации в 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?
1 ответ
Вы пытались отключить CONFIG_DEBUG_INFO?
Ищите это в 'Kernel Hacking' -> 'Проверки времени компиляции и опции компилятора' -> 'Компилировать ядро с отладочной информацией' в menuconfig.