https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84187

            Bug ID: 84187
           Summary: -O0 fails inline assembly compile
           Product: gcc
           Version: 5.4.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rong2.liu at intel dot com
  Target Milestone: ---

Hi,

When I use -O0 flag to compile a kernel module, compile fails with following
error message.  The same code compiles fine if not using -O0 flag.

make -C /lib/modules/4.12.0+/build M=/home/bob/GccCompileError
make[1]: Entering directory '/home/bob/kernel/v4.12/linux'
  CC [M]  /home/bob/GccCompileError/GccCompileError.o
In file included from ./include/linux/compiler.h:62:0,
                 from ./include/linux/init.h:4,
                 from /home/bob/GccCompileError/GccCompileError.c:1:
./arch/x86/include/asm/cpufeature.h: In function ‘GccCompileError_init’:
./include/linux/compiler-gcc.h:264:38: warning: asm operand 0 probably doesn’t
match constraints
 #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
                                      ^
./arch/x86/include/asm/cpufeature.h:146:3: note: in expansion of macro
‘asm_volatile_goto’
   asm_volatile_goto("1: jmp 6f\n"
   ^
./include/linux/compiler-gcc.h:264:38: warning: asm operand 2 probably doesn’t
match constraints
 #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
                                      ^
./arch/x86/include/asm/cpufeature.h:146:3: note: in expansion of macro
‘asm_volatile_goto’
   asm_volatile_goto("1: jmp 6f\n"
   ^
./include/linux/compiler-gcc.h:264:38: error: impossible constraint in ‘asm’
 #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
                                      ^
./arch/x86/include/asm/cpufeature.h:146:3: note: in expansion of macro
‘asm_volatile_goto’
   asm_volatile_goto("1: jmp 6f\n"
   ^
scripts/Makefile.build:308: recipe for target
'/home/bob/GccCompileError/GccCompileError.o' failed
make[2]: *** [/home/bob/GccCompileError/GccCompileError.o] Error 1
Makefile:1512: recipe for target '_module_/home/bob/GccCompileError' failed
make[1]: *** [_module_/home/bob/GccCompileError] Error 2
make[1]: Leaving directory '/home/bob/kernel/v4.12/linux'
Makefile:16: recipe for target 'all' failed
make: *** [all] Error 2

Here is the very simple source code to demonstrate the error:
  1 #include <linux/init.h>
  2 #include <linux/module.h>
  3 #include <asm/cpufeature.h>
  4 #include <asm/cpufeatures.h>
  5
  6 MODULE_LICENSE("Proprietary");
  7
  8 static int __init GccCompileError_init(void)
  9 {
 10     bool invPcid = false;
 11
 12     invPcid = static_cpu_has(X86_FEATURE_INVPCID);
 13     printk(KERN_ERR "<1> INVPCID = %s\n", invPcid == true ? "true" :
"false");
 14
 15     //printk("GccCompileError: Hello, world!\n");
 16     return 0;
 17 }
 18
 19 static void __exit GccCompileError_exit(void)
 20 {
 21      printk("GccCompileError: Goodbye, world!\n");
 22 }
 23
 24 module_init(GccCompileError_init);
 25 module_exit(GccCompileError_exit);

And the following is Makefile:
  1 KERNEL_MODULE_NAME := GccCompileError
  2
  3 KERNELDIR:=/lib/modules/$(shell uname -r)/build
  4 PWD=$(shell pwd)
  5
  6 INCLUDES = -I.
  7
  8 ccflags-y += $(INCLUDES) -ggdb -O0
  9 #ccflags-y += $(INCLUDES) -ggdb
 10
 11 obj-m += GccCompileError.o
 12
 13 switch-y := GccCompileError.o
 14
 15 all:
 16     $(MAKE) -C $(KERNELDIR) M=$(PWD)
 17
 18 clean:
 19     $(MAKE) -C $(KERNELDIR) M=$(PWD) clean
 20
 21 install:
 22     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

Reply via email to