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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

Today I found https://stackoverflow.com/questions/5580140/is-there-a-way-to-tell-gcc-not-to-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@xxxxxxxxxx <ckim@xxxxxxxxxx>
Sent: Wednesday, October 6, 2021 11:58 AM
To: kernelnewbies@xxxxxxxxxxxxxxxxx
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 outduring 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

 

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]

  Powered by Linux