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.
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
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