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