From de20a8ffc5cf89134f035193ce1cdc2d76c88ee0 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Tue, 15 Apr 2014 18:16:37 -0400 Subject: [PATCH] add namespace-protected name for sysinfo function it will be needed to implement some things in sysconf, and the syscall can't easily be used directly because the x32 syscall uses the wrong structure layout. the l (uncreative, for "linux") prefix is used since the symbol name __sysinfo is already taken for AT_SYSINFO from the aux vector. the way the x32 override of this function works is also changed to be simpler and avoid the useless jump instruction. --- arch/x32/src/sysinfo.c | 5 ++++- src/linux/sysinfo.c | 5 ++++- src/linux/x32/sysinfo.s | 6 +----- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/arch/x32/src/sysinfo.c b/arch/x32/src/sysinfo.c index 0f11cf3c..d1c1b148 100644 --- a/arch/x32/src/sysinfo.c +++ b/arch/x32/src/sysinfo.c @@ -1,5 +1,6 @@ #include #include "syscall.h" +#include "libc.h" #define klong long long #define kulong unsigned long long @@ -20,7 +21,7 @@ struct kernel_sysinfo { unsigned mem_unit; }; -int __x32_sysinfo(struct sysinfo *info) +int __lsysinfo(struct sysinfo *info) { struct kernel_sysinfo tmp; int ret = syscall(SYS_sysinfo, &tmp); @@ -45,3 +46,5 @@ int __x32_sysinfo(struct sysinfo *info) info->mem_unit = (tmp.mem_unit ? tmp.mem_unit : 1) << shifts; return ret; } + +weak_alias(__lsysinfo, sysinfo); diff --git a/src/linux/sysinfo.c b/src/linux/sysinfo.c index 7e64f330..4b5a798d 100644 --- a/src/linux/sysinfo.c +++ b/src/linux/sysinfo.c @@ -1,7 +1,10 @@ #include #include "syscall.h" +#include "libc.h" -int sysinfo(struct sysinfo *info) +int __lsysinfo(struct sysinfo *info) { return syscall(SYS_sysinfo, info); } + +weak_alias(__lsysinfo, sysinfo); diff --git a/src/linux/x32/sysinfo.s b/src/linux/x32/sysinfo.s index 43c378c1..53d79db2 100644 --- a/src/linux/x32/sysinfo.s +++ b/src/linux/x32/sysinfo.s @@ -1,5 +1 @@ -.text -.global sysinfo -.type sysinfo,@function -sysinfo: - jmp __x32_sysinfo +# see arch/x32/src/sysinfo.c -- 2.25.1