GCC 12.1을 사용하는 Linux 커널 5.15.54 컴파일 오류

GCC 12.1을 사용하는 Linux 커널 5.15.54 컴파일 오류

커널을 다시 컴파일하려고 합니다(공식 Arch Linux 가이드에 따라:https://wiki.archlinux.org/title/Kernel/Traditional_compilation) 하지만 컴파일 오류가 발생할 때마다:

In file included from help.c:12:
In function ‘xrealloc’,
    inlined from ‘add_cmdname’ at help.c:24:2:
subcmd-util.h:56:23: error: pointer may be used after ‘realloc’ [-Werror=use-after-free]
   56 |                 ret = realloc(ptr, size);
      |                       ^~~~~~~~~~~~~~~~~~
subcmd-util.h:52:21: note: call to ‘realloc’ here
   52 |         void *ret = realloc(ptr, size);
      |                     ^~~~~~~~~~~~~~~~~~
subcmd-util.h:58:31: error: pointer may be used after ‘realloc’ [-Werror=use-after-free]
   58 |                         ret = realloc(ptr, 1);
      |                               ^~~~~~~~~~~~~~~
subcmd-util.h:52:21: note: call to ‘realloc’ here
   52 |         void *ret = realloc(ptr, size);
      |                     ^~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
make[4]: *** [/home/jenusi/Downloads/linux-5.15/tools/build/Makefile.build:97: /home/jenusi/Downloads/linux-5.15/tools/objtool/help.o] Error 1
make[3]: *** [Makefile:59: /home/jenusi/Downloads/linux-5.15/tools/objtool/libsubcmd-in.o] Error 2
make[2]: *** [Makefile:63: /home/jenusi/Downloads/linux-5.15/tools/objtool/libsubcmd.a] Error 2
make[1]: *** [Makefile:69: objtool] Error 2
make: *** [Makefile:1371: tools/objtool] Error 2

커널: 5.15.54, GCC: 12.1.0

답변1

첫째, 귀하의 make는 "충돌"하지 않았지만 GCC 오류로 종료되었습니다.

GCC 12.1은 코드 [품질]에 대해 보다 엄격한 새로운 검사를 가능하게 하기 때문에 특정 커널을 컴파일하는 데 더 이상 사용되지 않습니다. 이는 다양한 -Werror옵션("경고를 오류로 처리")이 이전 버전의 컴파일러 존재하지 않는 오류에서 문제를 일으킬 수 있음을 의미합니다.

여러 가지 옵션이 있습니다:

  • GCC 11.4와 같은 이전 GCC 버전을 사용하세요.
  • GCC 12.1 사용: Makefile 편집 및 제거-Werror=use-after-free
  • 이러한 버그를 수정하기 위한 커널 패치(제공되거나 제공되지 않을 수 있음)를 기다리는 중

답변2

-Wno-use-after-freemakefile 라인 22에 추가합니다 tools/lib/subcmd/Makefile.

아래와 같습니다.

CFLAGS := -ggdb3 -Wall -Wextra -std=gnu99 -fPIC -Wno-use-after-free

관련 정보