NetBSD 커널의 compilation database 생성

4589 단어 debugCNetBSD커널

영어

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 국제 라이센스 에 연락해 주세요.

    좋은 웹페이지 즐겨찾기