NetBSD 커널의 compilation database 생성
영어
NetBSD 커널 소스 (
netbsd-src/sys/
)의 구조는 간단하지 않으며 cscope와 같은 정적 소스 분석 도구로 정확한 코드 점프를 수행하는 것은 불가능합니다. 예를 들어, <machine/endian.h>
sys/arch/hpc/stand/include/machine/endian.h
대신 sys/arch/hpcmips/stand/include/machine/endian.h
뿐만 아니라 ${OBJDIR}/sys/arch/amd64/compile/GENERIC/machine/endian.h
에 있는 무슨 일은 cscope는 모릅니다. 컴파일이
${OBJDIR}/sys/arch/amd64/compile/GENERIC
로 -I.
플래그와 함께 행해진 것은 케어하지 않는 것입니다.정확한 코드 점프를 하기 위해서는, 컴파일시의 정보가 필요하게 됩니다. 그 1개의 수법이 compilation database (
compile_commands.json
)입니다.Linux (Ubuntu 18.04)에서 이런 식으로 만들 수있었습니다.
(조만간 NetBSD, macOS에서 생성 절차도 올릴 예정입니다. 거의 함께 있지만, NetBSD에서는 bear issue 에 해당할지도 모릅니다. 나옵니다.)
# https://github.com/rizsotto/Bear/
sudo apt install bear
cd netbsd-src/
# First, create ${OBJDIR}/sys/arch/amd64/compile/GENERIC/Makefile
# and confirm that the kernel can be built
./build.sh kernel=GENERIC
cd ${OBJDIR}/sys/arch/amd64/compile/GENERIC/
${TOOLDIR}/bin/nbmake-amd64 clean
bear ${TOOLDIR}/bin/nbmake-amd64 -j3 # creates compile_commands.json
mv compile_commands.json ${NETBSD-SRC}/sys/ # optional
Compilation database를 지원하는 좋아하는 편집기에서 소스를 열어보십시오. vim이라면 scan-build과 같은 플러그인을 사용하면 OK이고 CLion은 YouCompleteMe에 따르면 OK입니다. 이 기사에서는 CLion을 사용합니다. 열면
cc
오류가 나타날 수 있습니다 :Compiler exited with error code 1: /usr/bin/cc -xc -c -mcmodel=kernel (snip) -v -dD -E
Using built-in specs.
(snip)
End of search list.
cc1: error: code model kernel does not support PIC mode
매뉴얼
편집기는
compile_commands.json
에 따라 /usr/bin/cc
를 실행하지만 ${TOOLDIR}/bin/x86_64--netbsd-gcc[--<target>]
이어야합니다. compile_commands.json
를 다시 작성합니다.cp compile_commands.json compile_commands.json.bak
sed -i s!'"cc",'!'"/home/wsh/src/netbsd/tools/bin/x86_64--netbsd-gcc",'!g compile_commands.json
성공적으로 읽을 수있었습니다. 이제 처음 GIF 동영상처럼 바삭바삭 코드 점프할 수 있어야 합니다.
라이센스
이 작품은 아래에 제공됩니다.
관련 소프트웨어의 공식 문서의 메인테이너에게: 이 기사의 내용을 공식 문서에 기재해 주실 수 있는 경우, 이 기사에 코멘트해 주시거나, twitter 크리에이티브 커먼즈 디스플레이 4.0 국제 라이센스 에 연락해 주세요.
Reference
이 문제에 관하여(NetBSD 커널의 compilation database 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/wataash/items/6844815d28477109cfc0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)