• Masahiro Yamada's avatar
    modpost: fix static EXPORT_SYMBOL warnings for UML build · 47346e96
    Masahiro Yamada authored
    Johannes Berg reports lots of modpost warnings on ARCH=um builds:
    
    WARNING: "rename" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "lseek" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "ftruncate64" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "getuid" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "lseek64" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "unlink" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "pwrite64" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "close" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "opendir" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "pread64" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "syscall" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "readdir" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "readdir64" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "futimes" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "__lxstat" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "write" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "closedir" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "__xstat" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "fsync" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "__lxstat64" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "__fxstat64" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "telldir" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "printf" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "readlink" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "__sprintf_chk" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "link" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "rmdir" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "fdatasync" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "truncate" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "statfs" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "__errno_location" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "__xmknod" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "open64" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "truncate64" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "open" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "read" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "chown" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "chmod" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "utime" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "fchmod" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "seekdir" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "ioctl" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "dup2" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "statfs64" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "utimes" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "mkdir" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "fchown" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "__guard" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "symlink" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "access" [vmlinux] is a static EXPORT_SYMBOL
    WARNING: "__stack_smash_handler" [vmlinux] is a static EXPORT_SYMBOL
    
    When you run "make", the modpost is run twice; before linking vmlinux,
    and before building modules. All the warnings above are from the second
    modpost.
    
    The offending symbols are defined not in vmlinux, but in the C library.
    The first modpost is run against the relocatable vmlinux.o, and those
    warnings are nicely suppressed because the SH_UNDEF entries from the
    symbol table clear the ->is_static flag.
    
    The second modpost is run against the executable vmlinux (+ modules),
    where those symbols have been resolved, but the definitions do not
    exist.
    
    This commit fixes it in a straightforward way; suppress the static
    EXPORT_SYMBOL warnings from "vmlinux".
    
    Without this commit, we see valid warnings twice anyway. For example,
    ARCH=arm64 defconfig shows the following warning twice:
    
    WARNING: "HYPERVISOR_platform_op" [vmlinux] is a static EXPORT_SYMBOL_GPL
    
    So, it is reasonable to suppress the second one.
    
    Fixes: 15bfc234 ("modpost: check for static EXPORT_SYMBOL* functions")
    Reported-by: default avatarJohannes Berg <johannes@sipsolutions.net>
    Signed-off-by: default avatarMasahiro Yamada <yamada.masahiro@socionext.com>
    Tested-by: default avatarJohannes Berg <johannes@sipsolutions.net>
    Tested-by: default avatarDenis Efremov <efremov@linux.com>
    47346e96
modpost.c 69.1 KB