RE: error: impossible constraint in 'asm' when compiling kernel code with -O0 option
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: c...@etri.re.kr Sent: Wednesday, October 6, 2021 11:58 AM To: kernelnewbies@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 CALLscripts/checksyscalls.sh CALLscripts/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 : ./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@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Re: error: impossible constraint in 'asm' when compiling kernel code with -O0 option
On Tue, Oct 5, 2021 at 9:00 PM wrote: > > 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 > > CALLscripts/checksyscalls.sh > > CALLscripts/atomic/check-atomics.sh > > CHK include/generated/compile.h > > CC drivers/iommu/io-pgtable-arm.o > try make drivers/iommu/io-pgtable-arm.i it will show you intermediate output. I did it on kernel/params.i ( wrong config to run yours) you will find the asm goto code therein [jimc@samwise lm-sept]$ less +/jump_label kernel/params.i # 53 "/home/jimc/projects/lx/wk-next/arch/x86/include/asm/jump_label.h" static inline __attribute__((__gnu_inline__)) __attribute__((__unused__)) __attribute__((no_instrument_function)) __attribute__((__always_inline__)) boo l arch_static_branch_jump(struct static_key * const key, const bool branch) { do { asm goto("1:" "jmp %l[l_yes]\n\t" ".pushsection __jump_table, \"aw\" \n\t" " " ".balign 8" " " "\n\t" ".long 1b - . \n\t" ".long %l[l_yes] - . \n \t" " " ".quad" " " "%c0 + %c1 - .\n\t" ".popsection \n\t" : : "i" (key), "i" (branch) : : l_yes); asm (""); } while (0) ; return false; l_yes: return true; } extern int arch_jump_entry_size(struct jump_entry *entry); # 118 "/home/jimc/projects/lx/wk-next/include/linux/jump_label.h" 2 ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
Re: error: impossible constraint in 'asm' when compiling kernel code with -O0 option
On Tue, Oct 5, 2021 at 10:59 PM wrote: > > 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, > ... > ./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). Does goto(x) eventually paste x? I.e., ##x? Also see token pasting at https://gcc.gnu.org/onlinedocs/cpp/Concatenation.html. Jeff ___ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
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 CALLscripts/checksyscalls.sh CALLscripts/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 : ./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@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies