xmake icon indicating copy to clipboard operation
xmake copied to clipboard

Linux 内核模块编译错误 #define asm_inline asm __inline

Open yinntian opened this issue 3 years ago • 0 comments

Xmake 版本

xmake v2.7.1+202209191332

操作系统版本和架构

Linux wl-kernel 6.0.0-rc5 #1 SMP PREEMPT_DYNAMIC Sat Sep 17 14:58:17 CST 2022 x86_64 x86_64 x86_64 GNU/Linux

描述问题

使用copy_to_user函数后编译失败

#define asm_inline asm __inline

是不是缺少了编译选项导致宏错误

make编译没问题

期待的结果

编译通过

工程配置

xmake.lua

target("hello")
    add_rules("platform.linux.driver")
    add_files("src/*.c")
--     set_values("linux.driver.linux-headers", "/usr/src/linux-headers-6.0.0-rc5")
    set_values("linux.driver.linux-headers", "/usr/src/linux-headers-5.15.0-47-generic") 

main.c

#include <linux/module.h>     /* Needed by all modules */
#include <linux/init.h>       /* Needed for the macros */
#include <linux/fs.h>

static int __init module_load(void) {
    printk(KERN_DEBUG "Hello.\n");
    copy_to_user(NULL, NULL, 0);
    return 0;
}

附加信息和错误日志

xmake -vD

luna@wl-kernel:~/master/project/te$ xmake -vD
[ 25%]: cache compiling.release src/main.c
/usr/bin/gcc -c -DKBUILD_MODNAME=\"hello\" -isystem /usr/lib/gcc/x86_64-linux-gnu/11/include -I/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include -I/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/generated -I/usr/src/linux-headers-5.15.0-47-generic/include -I/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/uapi -I/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/generated/uapi -I/usr/src/linux-headers-5.15.0-47-generic/include/uapi -I/usr/src/linux-headers-5.15.0-47-generic/include/generated/uapi -include /usr/src/linux-headers-5.15.0-47-generic/include/linux/compiler-version.h -include /usr/src/linux-headers-5.15.0-47-generic/include/linux/kconfig.h -I/usr/src/linux-headers-5.15.0-47-generic/ubuntu/include -include /usr/src/linux-headers-5.15.0-47-generic/include/linux/compiler_types.h -D__KERNEL__ -fmacro-prefix-map=./= -Wall -Wundef -Werror=strict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -fshort-wchar -fno-PIE -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Wno-format-security -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -fcf-protection=none -m64 -falign-jumps=1 -falign-loops=1 -mno-80387 -mno-fp-ret-in-387 -mpreferred-stack-boundary=3 -mskip-rax-setup -mtune=generic -mno-red-zone -mcmodel=kernel -DCONFIG_X86_X32_ABI -Wno-sign-compare -fno-asynchronous-unwind-tables -mindirect-branch=thunk-extern -mindirect-branch-register -mfunction-return=thunk-extern -fno-jump-tables -mharden-sls=all -fno-delete-null-pointer-checks -Wno-frame-address -Wno-format-truncation -Wno-format-overflow -Wno-address-of-packed-member -fno-allow-store-data-races -Wframe-larger-than=1024 -fstack-protector-strong -Wimplicit-fallthrough=5 -Wno-main -Wno-unused-but-set-variable -Wno-unused-const-variable -fno-omit-frame-pointer -fno-optimize-sibling-calls -fno-stack-clash-protection -mrecord-mcount -mfentry -DCC_USING_FENTRY -Wdeclaration-after-statement -Wvla -Wno-pointer-sign -Wno-stringop-truncation -Wno-zero-length-bounds -Wno-array-bounds -Wno-stringop-overflow -Wno-restrict -Wno-maybe-uninitialized -fno-strict-overflow -fno-stack-check -fconserve-stack -Werror=date-time -Werror=incompatible-pointer-types -Werror=designated-init -Wno-packed-not-aligned -fsanitize=bounds -fsanitize=shift -fsanitize=bool -fsanitize=enum -DMODULE -DKBUILD_BASENAME=\"main\" -o build/.objs/hello/linux/x86_64/release/src/main.c.o src/main.c
error: @programdir/modules/private/async/runjobs.lua:256: @programdir/modules/private/action/build/object.lua:91: @programdir/modules/core/tools/gcc.lua:676: src/main.c: In function ‘module_load’:
src/main.c:7:5: warning: ignoring return value of ‘copy_to_user’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
    7 |     copy_to_user(NULL, NULL, 0);
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from <command-line>:
/usr/src/linux-headers-5.15.0-47-generic/include/linux/thread_info.h: In function ‘copy_overflow’:
/usr/src/linux-headers-5.15.0-47-generic/include/linux/compiler_types.h:258:20: warning: ‘asm’ operand 2 probably does not match constraints
  258 | #define asm_inline asm __inline
      |                    ^~~
/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/asm/bug.h:27:9: note: in expansion of macro ‘asm_inline’
   27 |         asm_inline volatile("1:\t" ins "\n"                             \
      |         ^~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/asm/bug.h:82:9: note: in expansion of macro ‘_BUG_FLAGS’
   82 |         _BUG_FLAGS(ASM_UD2, __flags, ASM_REACHABLE);            \
      |         ^~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/include/asm-generic/bug.h:100:17: note: in expansion of macro ‘__WARN_FLAGS’
  100 |                 __WARN_FLAGS(BUGFLAG_NO_CUT_HERE | BUGFLAG_TAINT(taint));\
      |                 ^~~~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/include/asm-generic/bug.h:132:17: note: in expansion of macro ‘__WARN_printf’
  132 |                 __WARN_printf(TAINT_WARN, format);                      \
      |                 ^~~~~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/include/linux/thread_info.h:200:9: note: in expansion of macro ‘WARN’
  200 |         WARN(1, "Buffer overflow detected (%d < %lu)!\n", size, count);
      |         ^~~~
/usr/src/linux-headers-5.15.0-47-generic/include/linux/compiler_types.h:258:20: error: impossible constraint in ‘asm’
  258 | #define asm_inline asm __inline
      |                    ^~~
/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/asm/bug.h:27:9: note: in expansion of macro ‘asm_inline’
   27 |         asm_inline volatile("1:\t" ins "\n"                             \
      |         ^~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/asm/bug.h:82:9: note: in expansion of macro ‘_BUG_FLAGS’
   82 |         _BUG_FLAGS(ASM_UD2, __flags, ASM_REACHABLE);            \
      |         ^~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/include/asm-generic/bug.h:100:17: note: in expansion of macro ‘__WARN_FLAGS’
  100 |                 __WARN_FLAGS(BUGFLAG_NO_CUT_HERE | BUGFLAG_TAINT(taint));\
      |                 ^~~~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/include/asm-generic/bug.h:132:17: note: in expansion of macro ‘__WARN_printf’
  132 |                 __WARN_printf(TAINT_WARN, format);                      \
      |                 ^~~~~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/include/linux/thread_info.h:200:9: note: in expansion of macro ‘WARN’
  200 |         WARN(1, "Buffer overflow detected (%d < %lu)!\n", size, count);
      |         ^~~~
/usr/src/linux-headers-5.15.0-47-generic/include/linux/thread_info.h: In function ‘module_load’:
/usr/src/linux-headers-5.15.0-47-generic/include/linux/compiler_types.h:258:20: warning: ‘asm’ operand 2 probably does not match constraints
  258 | #define asm_inline asm __inline
      |                    ^~~
/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/asm/bug.h:27:9: note: in expansion of macro ‘asm_inline’
   27 |         asm_inline volatile("1:\t" ins "\n"                             \
      |         ^~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/arch/x86/include/asm/bug.h:82:9: note: in expansion of macro ‘_BUG_FLAGS’
   82 |         _BUG_FLAGS(ASM_UD2, __flags, ASM_REACHABLE);            \
      |         ^~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/include/asm-generic/bug.h:106:17: note: in expansion of macro ‘__WARN_FLAGS’
  106 |                 __WARN_FLAGS(BUGFLAG_ONCE |                     \
      |                 ^~~~~~~~~~~~
/usr/src/linux-headers-5.15.0-47-generic/include/linux/thread_info.h:216:13: note: in expansion of macro ‘WARN_ON_ONCE’
  216 |         if (WARN_ON_ONCE(bytes > INT_MAX))
      |             ^~~~~~~~~~~~
stack traceback:
    [C]: in function 'error'
    [@programdir/core/base/os.lua:890]:
    [@programdir/modules/core/tools/gcc.lua:676]: in function 'catch'
    [@programdir/core/sandbox/modules/try.lua:123]: in function 'try'
    [@programdir/modules/core/tools/gcc.lua:617]:
    [C]: in function 'xpcall'
    [@programdir/core/base/utils.lua:280]:
    [@programdir/modules/private/action/build/object.lua:91]: in function 'script'
    [@programdir/modules/private/action/build/object.lua:104]: in function 'build_object'
    [@programdir/modules/private/action/build/object.lua:129]: in function 'jobfunc'
    [@programdir/modules/private/async/runjobs.lua:232]:
    [C]: in function 'xpcall'
    [@programdir/core/base/utils.lua:280]: in function 'trycall'
    [@programdir/core/sandbox/modules/try.lua:117]: in function 'try'
    [@programdir/modules/private/async/runjobs.lua:218]: in function 'cotask'
    [@programdir/core/base/scheduler.lua:388]:

stack traceback:
        [C]: in function 'error'
        @programdir/core/base/os.lua:890: in function 'base/os.raiselevel'
        (...tail calls...)
        @programdir/modules/private/async/runjobs.lua:256: in field 'catch'
        @programdir/core/sandbox/modules/try.lua:123: in global 'try'
        @programdir/modules/private/async/runjobs.lua:218: in upvalue 'cotask'
        @programdir/core/base/scheduler.lua:388: in function <@programdir/core/base/scheduler.lua:385>

xmake f -c -vD

luna@wl-kernel:~/master/project/te$ xmake f -c -vD
checking for platform ... linux
checking for architecture ... x86_64
checking for gcc ... /usr/bin/gcc
checkinfo: cannot runv(dmd --version), No such file or directory
checking for dmd ... no
checkinfo: cannot runv(ldc2 --version), No such file or directory
checking for ldc2 ... no
checkinfo: cannot runv(gdc --version), No such file or directory
checking for gdc ... no
checkinfo: cannot runv(zig version), No such file or directory
checking for zig ... no
checkinfo: cannot runv(zig version), No such file or directory
checking for zig ... no
checking for gcc ... /usr/bin/gcc
checking for the c compiler (cc) ... gcc
checking for make ... /usr/bin/make
configure
{
    host = linux
    ndk_stdcxx = true
    mode = release
    arch = x86_64
    plat = linux
    clean = true
    buildir = build
    ccache = true
    kind = static
}

yinntian avatar Sep 22 '22 07:09 yinntian