honggyu.kim added a comment.

Hi Ted,

Let's me show you the full command and the error with verbose message.

If I run the following command with previous scan-build (i.e. without 
--analyzer-target option)
$ scan-build -v -v -v --use-cc=arm-linux-gnueabi-gcc make ARCH=arm 
CROSS_COMPILE=arm-linux-gnueabi-

  ...
  CC      arch/arm/kernel/opcodes.o

First, it does the normal compilation with given compiler, 
"arm-linux-gnueabi-gcc", as follows:

arm-linux-gnueabi-gcc -Wp,-MD,arch/arm/kernel/.opcodes.o.d -nostdinc -isystem 
/opt/toolchain/arm-linux-gnueabi-4.8-2014.11-x86_64/bin/../lib/gcc/arm-linux-gnueabi/4.8.3/include
 -I./arch/arm/include -Iarch/arm/include/generated/uapi 
-Iarch/arm/include/generated -Iinclude -I./arch/arm/include/uapi 
-Iarch/arm/include/generated/uapi -I./include/uapi -Iinclude/generated/uapi 
-include ./include/linux/kconfig.h -D__KERNEL__ -mlittle-endian 
-Iarch/arm/mach-xxxx/include -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs 
-fno-strict-aliasing -fno-common -Werror-implicit-function-declaration 
-Wno-format-security -std=gnu89 -fno-dwarf2-cfi-asm -mabi=aapcs-linux 
-mno-thumb-interwork -mfpu=vfp -funwind-tables -marm -D__LINUX_ARM_ARCH__=7 
-march=armv7-a -msoft-float -Uarm -fno-delete-null-pointer-checks -O2 
--param=allow-store-data-races=0 -Wframe-larger-than=1024 -fno-stack-protector 
-Wno-unused-but-set-variable -fomit-frame-pointer -fno-var-tracking-assignments 
-g -Wdeclaration-after-state!
 ment -Wno-pointer-sign -fno-strict-overflow -fconserve-stack 
-Werror=implicit-int -Werror=strict-prototypes -DCC_HAVE_ASM_GOTO 
-DKBUILD_STR(s)=#s -DKBUILD_BASENAME=KBUILD_STR(opcodes) 
-DKBUILD_MODNAME=KBUILD_STR(opcodes) -c -o arch/arm/kernel/opcodes.o 
arch/arm/kernel/opcodes.c

Then, it does analysis with clang static analyzer as follows:

[LOCATION]: /home/hong.gyu.kim/work.hard/kernel/clang/linux
#SHELL (cd '/home/hong.gyu.kim/work.hard/kernel/clang/linux' && 
'/home/hong.gyu.kim/usr/bin/clang' '-cc1' '-triple' 'x86_64-unknown-linux-gnu' 
'-analyze' '-disable-free' '-disable-llvm-verifier' '-main-file-name' 
'opcodes.c' '-analyzer-store=region' '-analyzer-opt-analyze-nested-blocks' 
'-analyzer-eagerly-assume' '-analyzer-checker=core' '-analyzer-checker=unix' 
'-analyzer-checker=deadcode' 
'-analyzer-checker=security.insecureAPI.UncheckedReturn' 
'-analyzer-checker=security.insecureAPI.getpw' 
'-analyzer-checker=security.insecureAPI.gets' 
'-analyzer-checker=security.insecureAPI.mktemp' 
'-analyzer-checker=security.insecureAPI.mkstemp' 
'-analyzer-checker=security.insecureAPI.vfork' '-analyzer-output' 'plist' '-w' 
'-mrelocation-model' 'static' '-mthread-model' 'posix' '-relaxed-aliasing' 
'-fmath-errno' '-masm-verbose' '-mconstructor-aliases' '-munwind-tables' 
'-fuse-init-array' '-target-cpu' 'armv7-a' '-no-implicit-float' 
'-target-linker-version' '2.22' '-momit-leaf-frame-pointe!
 r' '-dwarf-column-info' '-nostdsysteminc' '-nobuiltininc' '-resource-dir' 
'/home/hong.gyu.kim/usr/bin/../lib/clang/3.7.0' '-isystem' 
'/opt/toolchain/arm-linux-gnueabi-4.8-2014.11-x86_64/bin/../lib/gcc/arm-linux-gnueabi/4.8.3/include'
 '-include' './include/linux/kconfig.h' '-D' '__KERNEL__' '-D' 
'__LINUX_ARM_ARCH__=7' '-U' 'arm' '-D' 'CC_HAVE_ASM_GOTO' '-D' 
'KBUILD_STR(s)=#s' '-D' 'KBUILD_BASENAME=KBUILD_STR(opcodes)' '-D' 
'KBUILD_MODNAME=KBUILD_STR(opcodes)' '-I' './arch/arm/include' '-I' 
'arch/arm/include/generated/uapi' '-I' 'arch/arm/include/generated' '-I' 
'include' '-I' './arch/arm/include/uapi' '-I' 'arch/arm/include/generated/uapi' 
'-I' './include/uapi' '-I' 'include/generated/uapi' '-I' 
'arch/arm/mach-xxxx/include' '-O2' '-Wno-trigraphs' '-Wno-format-security' 
'-Wno-unused-but-set-variable' '-Wno-pointer-sign' '-std=gnu89' 
'-fdebug-compilation-dir' '/home/hong.gyu.kim/work.hard/kernel/clang/linux' 
'-ferror-limit' '19' '-fmessage-length' '0' '-fwrapv' '-mstackrealign!
 ' '-fobjc-runtime=gcc' '-fno-common' '-fdiagnostics-show-option' 
'-vectorize-loops' '-vectorize-slp' '-analyzer-display-progress' 
'-analyzer-output=html' '-o' '/tmp/scan-build-2015-08-04-210454-16108-1' '-x' 
'c' 'arch/arm/kernel/opcodes.c')

And this shows an error.

  error: unknown target CPU 'armv7-a'

If I just simplify the log message, it looks like this:

1. compilation with arm-linux-gnueabi-gcc

  arm-linux-gnueabi-gcc ... -march=armv7-a ... -c -o arch/arm/kernel/opcodes.o 
arch/arm/kernel/opcodes.c

As you can see the above, there's no problem for compilation.

2. analysis with clang static analyzer

  'clang' '-cc1' '-triple' 'x86_64-unknown-linux-gnu' '-analyze' ... 
'-target-cpu' 'armv7-a' ... 'arch/arm/kernel/opcodes.c'

In analysis step, clang uses the default -triple option 
"x86_64-unknown-linux-gnu", but still uses the the same arguments including 
"-target-cpu armv7-a". It makes a conflict and shows "error: unknown target CPU 
'armv7-a'".

With --analyzer-target option, we can provide target info to clang static 
analyzer as follows:

$ scan-build -v -v -v --analyzer-target=arm-linux-gnueabi 
--use-cc=arm-linux-gnueabi-gcc make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-

  ...
  CC      arch/arm/kernel/opcodes.o

1. compilation works the same as before

  arm-linux-gnueabi-gcc ... -march=armv7-a ... -c -o arch/arm/kernel/opcodes.o 
arch/arm/kernel/opcodes.c

2. analysis uses the target triple that is given by --analyzer-target option 
and analysis works fine then.

  'clang' '-cc1' '-triple' 'armv7--linux-gnueabi' '-analyze' ... '-target-cpu' 
'cortex-a8' ... 'arch/arm/kernel/opcodes.c')

So we have to use the same target triple for compilation and analysis by using 
this option. Please let me know if there's a better way to fix this issue.


http://reviews.llvm.org/D10356




_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to