amezin / vscode-linux-kernel

Visual Studio Code project/compile_commands.json generator for Linux kernel sources and out-of-tree modules

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Language Server couldn't parse command line string definition

darius-kim opened this issue · comments

as below issue, vscode language server couldn't parse string definition.

microsoft/vscode-cpptools#6689 (comment)

Could you provide an example? Which kernel version should I checkout, which file to look at?

Currently, quoted macros look like this in compile_commands.json:

-DKBUILD_MODNAME='\"pt\"'

When I open a *.c file, vscode is able to expand that macro correctly:

Screenshot from 2020-12-26 18-40-28

Ubuntu 18.04 on WSL2 Windows 10
Open with wsl remote tools

kernels from https://github.com/raspberrypi/linux

c/c++ diagnostics log from vscode belows and a part of compile_command.json
at this case compile_command.json pass command -DMODULE -DKBUILD_BASENAME='\"uda1342\"' -DKBUILD_MODNAME='\"uda1342\"' but vscode can't parse it correctly

If it change single quote to \\\ it works as expectedly

, { "directory": "/home/darius/linux_raspberrypi", "command": "aarch64-linux-gnu-gcc -Wp,-MD,drivers/media/i2c/.uda1342.o.d -nostdinc -isystem /usr/lib/gcc-cross/aarch64-linux-gnu/7/include -I./arch/arm64/include -I./arch/arm64/include/generated -I./include -I./arch/arm64/include/uapi -I./arch/arm64/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/kconfig.h -include ./include/linux/compiler_types.h -D__KERNEL__ -mlittle-endian -DKASAN_SHADOW_SCALE_SHIFT=3 -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration -Werror=implicit-int -Wno-format-security -std=gnu89 -mgeneral-regs-only -DCONFIG_AS_LSE=1 -fno-asynchronous-unwind-tables -Wno-psabi -mabi=lp64 -DKASAN_SHADOW_SCALE_SHIFT=3 -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -Wimplicit-fallthrough -Wno-unused-const-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-var-tracking-assignments -pg -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wno-array-bounds -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -fno-strict-overflow -fno-merge-all-constants -fmerge-constants -fno-stack-check -fconserve-stack -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -DMODULE -DKBUILD_BASENAME='\"uda1342\"' -DKBUILD_MODNAME='\"uda1342\"' -c -o drivers/media/i2c/uda1342.o drivers/media/i2c/uda1342.c", "file": "drivers/media/i2c/uda1342.c", "output": "drivers/media/i2c/uda1342.o" }

-------- Diagnostics - 2020-12-27 17:27:47
Version: 1.1.3
Current Configuration:
{
    "name": "Linux",
    "intelliSenseMode": "gcc-arm64",
    "includePath": [
        "include",
        "include/uapi",
        "arch/arm64/include",
        "arch/arm64/include/generated",
        "arch/arm64/include/uapi"
    ],
    "defines": [],
    "forcedInclude": [],
    "compilerPath": "/usr/bin/aarch64-linux-gnu-gcc",
    "cStandard": "c99",
    "cppStandard": "c++17",
    "compileCommands": "${workspaceFolder}/compile_commands.json",
    "browse": {
        "path": [
            "${workspaceFolder}/*"
        ],
        "limitSymbolsToIncludedHeaders": true
    },
    "compilerArgs": [],
    "intelliSenseModeIsExplicit": true,
    "cStandardIsExplicit": true,
    "cppStandardIsExplicit": true,
    "compilerPathIsExplicit": true
}
Translation Unit Mappings:
[ /home/user/linux_raspberrypi/drivers/media/i2c/uda1342.c ]:
    /home/user/linux_raspberrypi/drivers/media/i2c/uda1342.c
Translation Unit Configurations:
[ /home/user/linux_raspberrypi/drivers/media/i2c/uda1342.c ]:
    Process ID: 1690
    Memory Usage: 62 MB
    Compiler Path: /usr/bin/aarch64-linux-gnu-gcc
    Includes:
        /home/user/linux_raspberrypi/arch/arm64/include
        /home/user/linux_raspberrypi/arch/arm64/include/generated
        /home/user/linux_raspberrypi/include
        /home/user/linux_raspberrypi/arch/arm64/include/uapi
        /home/user/linux_raspberrypi/arch/arm64/include/generated/uapi
        /home/user/linux_raspberrypi/include/uapi
        /home/user/linux_raspberrypi/include/generated/uapi
        /usr/lib/gcc-cross/aarch64-linux-gnu/7/include
        /usr/lib/gcc-cross/aarch64-linux-gnu/7/include-fixed
        /usr/aarch64-linux-gnu/include
        /usr/include
    Defines:
        __KERNEL__
        KASAN_SHADOW_SCALE_SHIFT=3
        CONFIG_AS_LSE=1
        KASAN_SHADOW_SCALE_SHIFT=3
        MODULE
        KBUILD_BASENAME=uda1342
        KBUILD_MODNAME=uda1342
    Forced Includes:
        /home/user/linux_raspberrypi/include/linux/kconfig.h
        /home/user/linux_raspberrypi/include/linux/compiler_types.h
    Standard Version: c99
    IntelliSense Mode: gcc-arm64
    Other Flags:
        --gcc
        --gnu_version=70500
    compile_commands.json entry:
        directory: /home/user/linux_raspberrypi
        file: /home/user/linux_raspberrypi/drivers/media/i2c/uda1342.c
        command: aarch64-linux-gnu-gcc -Wp,-MD,drivers/media/i2c/.uda1342.o.d  -nostdinc -isystem /usr/lib/gcc-cross/aarch64-linux-gnu/7/include -I./arch/arm64/include -I./arch/arm64/include/generated  -I./include -I./arch/arm64/include/uapi -I./arch/arm64/include/generated/uapi -I./include/uapi -I./include/generated/uapi -include ./include/linux/kconfig.h -include ./include/linux/compiler_types.h -D__KERNEL__ -mlittle-endian -DKASAN_SHADOW_SCALE_SHIFT=3 -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration -Werror=implicit-int -Wno-format-security -std=gnu89 -mgeneral-regs-only -DCONFIG_AS_LSE=1 -fno-asynchronous-unwind-tables -Wno-psabi -mabi=lp64 -DKASAN_SHADOW_SCALE_SHIFT=3 -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -O2 --param=allow-store-data-races=0 -Wframe-larger-than=2048 -fstack-protector-strong -Wno-unused-but-set-variable -Wimplicit-fallthrough -Wno-unused-const-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-var-tracking-assignments -pg -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wno-array-bounds -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -fno-strict-overflow -fno-merge-all-constants -fmerge-constants -fno-stack-check -fconserve-stack -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init  -DMODULE  -DKBUILD_BASENAME='"uda1342"' -DKBUILD_MODNAME='"uda1342"' -c -o drivers/media/i2c/uda1342.o drivers/media/i2c/uda1342.c
        output: drivers/media/i2c/uda1342.o
Total Memory Usage: 62 MB

2020-12-27

So I've been using a very outdated version of vscode-cpptools (0.29.0)

It looks like a bug in newer vscode-cpptools. Because GCC interprets the same command line differently.

The last version where it worked correctly is 1.1.0-insiders2. If you use vscode solely for kernel development, you could download and install that version as a temporary solution