summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2001-04-05 06:08:14 +0000
committerEric Andersen <andersen@codepoet.org>2001-04-05 06:08:14 +0000
commita2a978ae23e267c24eb7b11662afdcc9ea47e789 (patch)
treef9927bd24dbc96724b1c0b89327d4c7157ed8eb4
parentfdefbbbe85b852ba6de361c8f53d025b09b9abbe (diff)
Some further syscall adjustments. Split the module syscalls out of
insmod and into libbb. Only enable them for libc5. glibc and uClibc don't need them. -Erik
-rw-r--r--Makefile2
-rw-r--r--insmod.c43
-rw-r--r--libbb/module_syscalls.c88
-rw-r--r--libbb/syscalls.c61
-rw-r--r--modutils/insmod.c43
5 files changed, 120 insertions, 117 deletions
diff --git a/Makefile b/Makefile
index 5e7e417e0..66df84921 100644
--- a/Makefile
+++ b/Makefile
@@ -242,7 +242,7 @@ full_write.c get_console.c get_last_path_component.c get_line_from_file.c \
human_readable.c inode_hash.c isdirectory.c kernel_version.c loop.c \
mode_string.c parse_mode.c parse_number.c print_file.c process_escape_sequence.c \
my_getgrgid.c my_getpwnamegid.c my_getpwuid.c my_getgrnam.c my_getpwnam.c \
-recursive_action.c safe_read.c safe_strncpy.c syscalls.c \
+recursive_action.c safe_read.c safe_strncpy.c syscalls.c module_syscalls.c \
syslog_msg_with_name.c time_string.c trim.c vdprintf.c wfopen.c xfuncs.c \
xregcomp.c error_msg_and_die.c perror_msg.c perror_msg_and_die.c \
verror_msg.c vperror_msg.c mtab.c mtab_file.c
diff --git a/insmod.c b/insmod.c
index ad1486b7b..c2ebd2e24 100644
--- a/insmod.c
+++ b/insmod.c
@@ -60,8 +60,6 @@
#include <string.h>
#include <getopt.h>
#include <sys/utsname.h>
-#include <sys/syscall.h>
-#include <linux/unistd.h>
#include "busybox.h"
#if defined(__powerpc__)
@@ -119,7 +117,7 @@
#ifndef MODUTILS_MODULE_H
static const int MODUTILS_MODULE_H = 1;
-#ident "$Id: insmod.c,v 1.54 2001/04/05 03:14:39 andersen Exp $"
+#ident "$Id: insmod.c,v 1.55 2001/04/05 06:08:14 andersen Exp $"
/* This file contains the structures used by the 2.0 and 2.1 kernels.
We do not use the kernel headers directly because we do not wish
@@ -325,7 +323,7 @@ int delete_module(const char *);
#ifndef MODUTILS_OBJ_H
static const int MODUTILS_OBJ_H = 1;
-#ident "$Id: insmod.c,v 1.54 2001/04/05 03:14:39 andersen Exp $"
+#ident "$Id: insmod.c,v 1.55 2001/04/05 06:08:14 andersen Exp $"
/* The relocatable object is manipulated using elfin types. */
@@ -674,20 +672,8 @@ int n_ext_modules;
int n_ext_modules_used;
-
-/* Some firendly syscalls to cheer everyone's day... */
-#define __NR_new_sys_init_module __NR_init_module
-_syscall2(int, new_sys_init_module, const char *, name,
- const struct new_module *, info)
-#define __NR_old_sys_init_module __NR_init_module
-_syscall5(int, old_sys_init_module, const char *, name, char *, code,
- unsigned, codesize, struct old_mod_routines *, routines,
- struct old_symbol_table *, symtab)
-#ifndef BB_RMMOD
-_syscall1(int, delete_module, const char *, name)
-#else
extern int delete_module(const char *);
-#endif
+
/* This is kind of troublesome. See, we don't actually support
the m68k or the arm the same way we support i386 and (now)
@@ -700,29 +686,6 @@ extern int delete_module(const char *);
-- Bryan Rittmeyer <bryan@ixiacom.com> */
-#ifdef BB_FEATURE_OLD_MODULE_INTERFACE
-_syscall1(int, get_kernel_syms, struct old_kernel_sym *, ks)
-#endif
-
-#if defined(__i386__) || defined(__m68k__) || defined(__arm__) \
- || defined(__powerpc__)
-/* Jump through hoops to fixup error return codes */
-#define __NR__create_module __NR_create_module
-static inline _syscall2(long, _create_module, const char *, name, size_t,
- size)
-unsigned long create_module(const char *name, size_t size)
-{
- long ret = _create_module(name, size);
-
- if (ret == -1 && errno > 125) {
- ret = -errno;
- errno = 0;
- }
- return ret;
-}
-#else
-_syscall2(unsigned long, create_module, const char *, name, size_t, size)
-#endif
static char m_filename[BUFSIZ + 1];
static char m_fullName[BUFSIZ + 1];
diff --git a/libbb/module_syscalls.c b/libbb/module_syscalls.c
new file mode 100644
index 000000000..d0c1a36d4
--- /dev/null
+++ b/libbb/module_syscalls.c
@@ -0,0 +1,88 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * some system calls possibly missing from libc
+ *
+ * Copyright (C) 1999,2000,2001 by Lineo, inc.
+ * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include <stdio.h>
+#include <errno.h>
+#include <unistd.h>
+/* Kernel headers before 2.1.mumble need this on the Alpha to get
+ _syscall* defined. */
+#define __LIBRARY__
+#include <sys/syscall.h>
+#include <asm/unistd.h>
+#include "libbb.h"
+
+#define __NR_new_sys_init_module __NR_init_module
+_syscall2(int, new_sys_init_module, const char *, name,
+ const struct new_module *, info);
+
+#define __NR_old_sys_init_module __NR_init_module
+_syscall5(int, old_sys_init_module, const char *, name, char *, code,
+ unsigned, codesize, struct old_mod_routines *, routines,
+ struct old_symbol_table *, symtab);
+
+#if __GNU_LIBRARY__ < 5
+/* These syscalls are not included as part of libc5 */
+_syscall1(int, delete_module, const char *, name);
+_syscall1(int, get_kernel_syms, struct old_kernel_sym *, ks);
+
+#ifndef __NR_query_module
+#warning This kernel does not support the query_module syscall
+#warning -> The query_module system call is being stubbed out...
+int query_module(const char *name, int which, void *buf, size_t bufsize, size_t *ret)
+{
+ fprintf(stderr, "\n\nTo make this application work, you will need to recompile\n");
+ fprintf(stderr, "with a kernel supporting the query_module system call. -Erik\n\n");
+ errno=ENOSYS;
+ return -1;
+}
+#else
+_syscall5(int, query_module, const char *, name, int, which,
+ void *, buf, size_t, bufsize, size_t*, ret);
+#endif
+
+/* Jump through hoops to fixup error return codes */
+#define __NR__create_module __NR_create_module
+static inline _syscall2(long, _create_module, const char *, name, size_t, size)
+unsigned long create_module(const char *name, size_t size)
+{
+ long ret = _create_module(name, size);
+
+ if (ret == -1 && errno > 125) {
+ ret = -errno;
+ errno = 0;
+ }
+ return ret;
+}
+
+#endif /* __GNU_LIBRARY__ < 5 */
+
+
+/* END CODE */
+/*
+Local Variables:
+c-file-style: "linux"
+c-basic-offset: 4
+tab-width: 4
+End:
+*/
+
diff --git a/libbb/syscalls.c b/libbb/syscalls.c
index efca39902..4a846eb00 100644
--- a/libbb/syscalls.c
+++ b/libbb/syscalls.c
@@ -1,10 +1,9 @@
/* vi: set sw=4 ts=4: */
/*
- * Utility routines.
+ * some system calls possibly missing from libc
*
- * Copyright (C) tons of folks. Tracking down who wrote what
- * isn't something I'm going to worry about... If you wrote something
- * here, please feel free to acknowledge your work.
+ * Copyright (C) 1999,2000,2001 by Lineo, inc.
+ * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -20,19 +19,28 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Based in part on code from sash, Copyright (c) 1999 by David I. Bell
- * Permission has been granted to redistribute this code under the GPL.
- *
*/
#include <stdio.h>
#include <errno.h>
-#include <sys/syscall.h>
-#include <linux/unistd.h>
+#include <unistd.h>
+/* Kernel headers before 2.1.mumble need this on the Alpha to get
+ _syscall* defined. */
+#define __LIBRARY__
+
+#include <sys/syscall.h>
+#include <asm/unistd.h>
#include "libbb.h"
+#if defined(__ia64__)
+int sysfs( int option, unsigned int fs_index, char * buf)
+{
+ return(syscall(__NR_sysfs, option, fs_index, buf));
+}
+#else
_syscall3(int, sysfs, int, option, unsigned int, fs_index, char *, buf);
+#endif
#ifndef __NR_pivot_root
#warning This kernel does not support the pivot_root syscall
@@ -50,7 +58,14 @@ int pivot_root(const char * new_root,const char * put_old)
return -1;
}
#else
-_syscall2(int,pivot_root,const char *,new_root,const char *,put_old)
+# if defined(__ia64__)
+ int pivot_root(const char * new_root,const char * put_old)
+ {
+ return(syscall(__NR_pivot_root, new_root, put_old));
+ }
+# else
+ _syscall2(int,pivot_root,const char *,new_root,const char *,put_old);
+# endif
#endif
@@ -59,27 +74,6 @@ _syscall2(int,pivot_root,const char *,new_root,const char *,put_old)
#if __GNU_LIBRARY__ < 5
/* These syscalls are not included as part of libc5 */
_syscall2(int, bdflush, int, func, int, data);
-_syscall1(int, delete_module, const char *, name)
-
-#ifndef __NR_query_module
-#warning This kernel does not support the query_module syscall
-#warning -> The query_module system call is being stubbed out...
-int query_module(const char *name, int which, void *buf, size_t bufsize, size_t *ret)
-{
- /* BusyBox was compiled against a kernel that did not support
- * the query_module system call. To make this application work,
- * you will need to recompile with a kernel supporting the
- * query_module system call.
- */
- fprintf(stderr, "\n\nTo make this application work, you will need to recompile\n");
- fprintf(stderr, "with a kernel supporting the query_module system call. -Erik\n\n");
- errno=ENOSYS;
- return -1;
-}
-#else
-_syscall5(int, query_module, const char *, name, int, which,
- void *, buf, size_t, bufsize, size_t*, ret);
-#endif
#ifndef __alpha__
# define __NR_klogctl __NR_syslog
@@ -109,11 +103,6 @@ _syscall2(int, umount2, const char *, special_file, int, flags);
#endif /* __GNU_LIBRARY__ < 5 */
-#if 0
-_syscall1(int, sysinfo, struct sysinfo *, info);
-#endif
-
-
/* END CODE */
/*
Local Variables:
diff --git a/modutils/insmod.c b/modutils/insmod.c
index ad1486b7b..c2ebd2e24 100644
--- a/modutils/insmod.c
+++ b/modutils/insmod.c
@@ -60,8 +60,6 @@
#include <string.h>
#include <getopt.h>
#include <sys/utsname.h>
-#include <sys/syscall.h>
-#include <linux/unistd.h>
#include "busybox.h"
#if defined(__powerpc__)
@@ -119,7 +117,7 @@
#ifndef MODUTILS_MODULE_H
static const int MODUTILS_MODULE_H = 1;
-#ident "$Id: insmod.c,v 1.54 2001/04/05 03:14:39 andersen Exp $"
+#ident "$Id: insmod.c,v 1.55 2001/04/05 06:08:14 andersen Exp $"
/* This file contains the structures used by the 2.0 and 2.1 kernels.
We do not use the kernel headers directly because we do not wish
@@ -325,7 +323,7 @@ int delete_module(const char *);
#ifndef MODUTILS_OBJ_H
static const int MODUTILS_OBJ_H = 1;
-#ident "$Id: insmod.c,v 1.54 2001/04/05 03:14:39 andersen Exp $"
+#ident "$Id: insmod.c,v 1.55 2001/04/05 06:08:14 andersen Exp $"
/* The relocatable object is manipulated using elfin types. */
@@ -674,20 +672,8 @@ int n_ext_modules;
int n_ext_modules_used;
-
-/* Some firendly syscalls to cheer everyone's day... */
-#define __NR_new_sys_init_module __NR_init_module
-_syscall2(int, new_sys_init_module, const char *, name,
- const struct new_module *, info)
-#define __NR_old_sys_init_module __NR_init_module
-_syscall5(int, old_sys_init_module, const char *, name, char *, code,
- unsigned, codesize, struct old_mod_routines *, routines,
- struct old_symbol_table *, symtab)
-#ifndef BB_RMMOD
-_syscall1(int, delete_module, const char *, name)
-#else
extern int delete_module(const char *);
-#endif
+
/* This is kind of troublesome. See, we don't actually support
the m68k or the arm the same way we support i386 and (now)
@@ -700,29 +686,6 @@ extern int delete_module(const char *);
-- Bryan Rittmeyer <bryan@ixiacom.com> */
-#ifdef BB_FEATURE_OLD_MODULE_INTERFACE
-_syscall1(int, get_kernel_syms, struct old_kernel_sym *, ks)
-#endif
-
-#if defined(__i386__) || defined(__m68k__) || defined(__arm__) \
- || defined(__powerpc__)
-/* Jump through hoops to fixup error return codes */
-#define __NR__create_module __NR_create_module
-static inline _syscall2(long, _create_module, const char *, name, size_t,
- size)
-unsigned long create_module(const char *name, size_t size)
-{
- long ret = _create_module(name, size);
-
- if (ret == -1 && errno > 125) {
- ret = -errno;
- errno = 0;
- }
- return ret;
-}
-#else
-_syscall2(unsigned long, create_module, const char *, name, size_t, size)
-#endif
static char m_filename[BUFSIZ + 1];
static char m_fullName[BUFSIZ + 1];