error: impossible constraint in 'asm' when compiling kernel code with -O0 option

Chan Kim ckim at etri.re.kr
Wed Jan 19 04:47:46 EST 2022


Hi,

Today I found
https://stackoverflow.com/questions/5580140/is-there-a-way-to-tell-gcc-not-t
o-optimise-a-particular-piece-of-code. 

So for functions you want to debug with -O0 option,  place 

#pragma GCC push_options

#pragma GCC optimize ("O0")

In front of the function, and place

#pragma GCC pop_options

This sure works.

Chan

 

From: ckim at etri.re.kr <ckim at etri.re.kr> 
Sent: Wednesday, October 6, 2021 11:58 AM
To: kernelnewbies at kernelnewbies.org
Subject: error: impossible constraint in 'asm' when compiling kernel code
with -O0 option

 

In linux-5.4.21 code,

To prevent some variables from being 'optimized out' during kernel code
analysis using gdb, I added in drivers/iommu/Makefile,

(replacing -O2 flags to -O0 flags for some files,  I found
http://www.joelfernandes.org/linux/2018/06/10/kernel-gdb.html )

CFLAGS_REMOVE_arm-smmu.o := -O2

CFLAGS_REMOVE_arm-smmu-impl.o := -O2

CFLAGS_REMOVE_io-pgtable-arm-v7s.o := -O2

CFLAGS_REMOVE_io-pgtable-arm.o := -O2

CFLAGS_REMOVE_of_iommu.o := -O2

CFLAGS_REMOVE_arm-smmu-v3.o := -O2

CFLAGS_arm-smmu.o := -O0

CFLAGS_arm-smmu-impl.o := -O0

CFLAGS_io-pgtable-arm-v7s.o := -O0

CFLAGS_io-pgtable-arm.o := -O0

CFLAGS_of_iommu.o := -O0

CFLAGS_arm-smmu-v3.o := -O0

But when I do make ARCH=arm64 CROSS_COMPILE=aarch64-none-elf- Image, I get

CALL    scripts/checksyscalls.sh

  CALL    scripts/atomic/check-atomics.sh

  CHK     include/generated/compile.h

  CC      drivers/iommu/io-pgtable-arm.o

In file included from ././include/linux/compiler_types.h:68,

                 from <command-line>:

./arch/arm64/include/asm/jump_label.h: In function
'system_uses_lse_atomics':

./include/linux/compiler-gcc.h:120:38: warning: asm operand 0 probably
doesn't match constraints

  120 | #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while
(0)

      |                                      ^~~

./arch/arm64/include/asm/jump_label.h:38:2: note: in expansion of macro
'asm_volatile_goto'

   38 |  asm_volatile_goto(

      |  ^~~~~~~~~~~~~~~~~

./include/linux/compiler-gcc.h:120:38: warning: asm operand 0 probably
doesn't match constraints

  120 | #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while
(0)

      |                                      ^~~

./arch/arm64/include/asm/jump_label.h:38:2: note: in expansion of macro
'asm_volatile_goto'

   38 |  asm_volatile_goto(

      |  ^~~~~~~~~~~~~~~~~

./include/linux/compiler-gcc.h:120:38: error: impossible constraint in 'asm'

  120 | #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while
(0)

      |                                      ^~~

./arch/arm64/include/asm/jump_label.h:38:2: note: in expansion of macro
'asm_volatile_goto'

   38 |  asm_volatile_goto(

      |  ^~~~~~~~~~~~~~~~~

./include/linux/compiler-gcc.h:120:38: error: impossible constraint in 'asm'

  120 | #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while
(0)

      |                                      ^~~

./arch/arm64/include/asm/jump_label.h:38:2: note: in expansion of macro
'asm_volatile_goto'

   38 |  asm_volatile_goto(

      |  ^~~~~~~~~~~~~~~~~

make[2]: *** [scripts/Makefile.build:266: drivers/iommu/io-pgtable-arm.o]
Error 1

make[1]: *** [scripts/Makefile.build:509: drivers/iommu] Error 2

make: *** [Makefile:1652: drivers] Error 2

Does anybody know how can I use -O0 flag? (I tried -Og flag but some
variables are still optimized out).

Thank you!

Chan Kim

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20220119/edee3b65/attachment-0001.html>


More information about the Kernelnewbies mailing list