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
This commit is contained in:
Eric Andersen 2001-04-05 06:08:14 +00:00
parent fdefbbbe85
commit a2a978ae23
5 changed files with 120 additions and 117 deletions

View File

@ -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 \ 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 \ 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 \ 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 \ 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 \ 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 verror_msg.c vperror_msg.c mtab.c mtab_file.c

View File

@ -60,8 +60,6 @@
#include <string.h> #include <string.h>
#include <getopt.h> #include <getopt.h>
#include <sys/utsname.h> #include <sys/utsname.h>
#include <sys/syscall.h>
#include <linux/unistd.h>
#include "busybox.h" #include "busybox.h"
#if defined(__powerpc__) #if defined(__powerpc__)
@ -119,7 +117,7 @@
#ifndef MODUTILS_MODULE_H #ifndef MODUTILS_MODULE_H
static const int MODUTILS_MODULE_H = 1; 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. /* 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 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 #ifndef MODUTILS_OBJ_H
static const int MODUTILS_OBJ_H = 1; 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. */ /* The relocatable object is manipulated using elfin types. */
@ -674,20 +672,8 @@ int n_ext_modules;
int n_ext_modules_used; 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 *); extern int delete_module(const char *);
#endif
/* This is kind of troublesome. See, we don't actually support /* This is kind of troublesome. See, we don't actually support
the m68k or the arm the same way we support i386 and (now) 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> */ -- 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_filename[BUFSIZ + 1];
static char m_fullName[BUFSIZ + 1]; static char m_fullName[BUFSIZ + 1];

88
libbb/module_syscalls.c Normal file
View File

@ -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:
*/

View File

@ -1,10 +1,9 @@
/* vi: set sw=4 ts=4: */ /* 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 * Copyright (C) 1999,2000,2001 by Lineo, inc.
* isn't something I'm going to worry about... If you wrote something * Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
* here, please feel free to acknowledge your work.
* *
* This program is free software; you can redistribute it and/or modify * 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 * 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 * along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * 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 <stdio.h>
#include <errno.h> #include <errno.h>
#include <sys/syscall.h> #include <unistd.h>
#include <linux/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" #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); _syscall3(int, sysfs, int, option, unsigned int, fs_index, char *, buf);
#endif
#ifndef __NR_pivot_root #ifndef __NR_pivot_root
#warning This kernel does not support the pivot_root syscall #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; return -1;
} }
#else #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 #endif
@ -59,27 +74,6 @@ _syscall2(int,pivot_root,const char *,new_root,const char *,put_old)
#if __GNU_LIBRARY__ < 5 #if __GNU_LIBRARY__ < 5
/* These syscalls are not included as part of libc5 */ /* These syscalls are not included as part of libc5 */
_syscall2(int, bdflush, int, func, int, data); _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__ #ifndef __alpha__
# define __NR_klogctl __NR_syslog # define __NR_klogctl __NR_syslog
@ -109,11 +103,6 @@ _syscall2(int, umount2, const char *, special_file, int, flags);
#endif /* __GNU_LIBRARY__ < 5 */ #endif /* __GNU_LIBRARY__ < 5 */
#if 0
_syscall1(int, sysinfo, struct sysinfo *, info);
#endif
/* END CODE */ /* END CODE */
/* /*
Local Variables: Local Variables:

View File

@ -60,8 +60,6 @@
#include <string.h> #include <string.h>
#include <getopt.h> #include <getopt.h>
#include <sys/utsname.h> #include <sys/utsname.h>
#include <sys/syscall.h>
#include <linux/unistd.h>
#include "busybox.h" #include "busybox.h"
#if defined(__powerpc__) #if defined(__powerpc__)
@ -119,7 +117,7 @@
#ifndef MODUTILS_MODULE_H #ifndef MODUTILS_MODULE_H
static const int MODUTILS_MODULE_H = 1; 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. /* 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 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 #ifndef MODUTILS_OBJ_H
static const int MODUTILS_OBJ_H = 1; 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. */ /* The relocatable object is manipulated using elfin types. */
@ -674,20 +672,8 @@ int n_ext_modules;
int n_ext_modules_used; 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 *); extern int delete_module(const char *);
#endif
/* This is kind of troublesome. See, we don't actually support /* This is kind of troublesome. See, we don't actually support
the m68k or the arm the same way we support i386 and (now) 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> */ -- 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_filename[BUFSIZ + 1];
static char m_fullName[BUFSIZ + 1]; static char m_fullName[BUFSIZ + 1];