/* Code to find the Linux syscall table */
#ifdef OSI_PROBE_STANDALONE
-#define OSI_PROBE_DEBUG
+# define OSI_PROBE_DEBUG
#endif
#ifndef OSI_PROBE_STANDALONE
-#include <afsconfig.h>
-#include "afs/param.h"
+# include <afsconfig.h>
+# include "afs/param.h"
#endif
-#ifdef AFS_LINUX24_ENV
+
+#if defined(ENABLE_LINUX_SYSCALL_PROBING)
#include <linux/module.h> /* early to avoid printf->printk mapping */
+#include <scsi/scsi.h> /* for scsi_command_size */
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,26)
+/* Slightly kludgy, but too bad */
+#define scsi_command_size scsi_command_size_tbl
+#endif
#ifndef OSI_PROBE_STANDALONE
-#include "afs/sysincludes.h"
-#include "afsincludes.h"
+# include "afs/sysincludes.h"
+# include "afsincludes.h"
#endif
#include <linux/version.h>
#include <linux/sched.h>
-#ifdef CONFIG_H_EXISTS
-#include <linux/config.h>
+#ifdef HAVE_LINUX_CONFIG_H
+# include <linux/config.h>
#endif
#include <linux/linkage.h>
#include <linux/init.h>
#include <linux/unistd.h>
#include <linux/mm.h>
-#ifdef AFS_LINUX26_ENV
-#include <scsi/scsi.h> /* for scsi_command_size */
-#endif
#if defined(AFS_PPC64_LINUX26_ENV)
-#include <asm/abs_addr.h>
+# include <asm/abs_addr.h>
#endif
#ifdef AFS_AMD64_LINUX20_ENV
-#include <asm/ia32_unistd.h>
+# include <asm/ia32_unistd.h>
#endif
/* number of syscalls */
/* If this is set, we are more careful about avoiding duplicate matches */
static int probe_carefully = 1;
-#ifdef module_param
+#if defined(module_param) && LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9)
module_param(probe_carefully, int, 0);
#else
MODULE_PARM(probe_carefully, "i");
* 0x0080 - detail - check_table_readable
*/
static int probe_debug = 0x41;
-#ifdef module_param
+#if defined(module_param) && LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9)
module_param(probe_debug, int, 0);
#else
MODULE_PARM(probe_debug, "i");
MODULE_PARM_DESC(probe_debug_addr, "Debug range starting locations");
static unsigned long probe_debug_range = 0;
-#ifdef module_param
+#if defined(module_param) && LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9)
module_param(probe_debug_range, long, 0);
#else
MODULE_PARM(probe_debug_range, "l");
MODULE_PARM_DESC(probe_debug_range, "Debug range length");
static unsigned long probe_debug_tag = 0;
-#ifdef module_param
+#if defined(module_param) && LINUX_VERSION_CODE > KERNEL_VERSION(2,6,9)
module_param(probe_debug_tag, long, 0);
#else
MODULE_PARM(probe_debug_tag, "l");
extern asmlinkage long sys_chdir(const char *) __attribute__((weak));
#endif
extern asmlinkage ssize_t sys_write(unsigned int, const char *, size_t) __attribute__((weak));
-#ifdef AFS_LINUX26_ENV
extern asmlinkage long sys_wait4(pid_t, int *, int, struct rusage *) __attribute__((weak));
-#else
-extern asmlinkage long sys_wait4(pid_t, unsigned int *, int, struct rusage *) __attribute__((weak));
-#endif
extern asmlinkage long sys_exit (int) __attribute__((weak));
#if defined(EXPORTED_SYS_OPEN)
extern asmlinkage long sys_open (const char *, int, int) __attribute__((weak));
* The module-loading mechanism changed in Linux 2.6, and insmod's
* loss is our gain: three new unimplemented system calls!
*/
-#if defined(AFS_LINUX26_ENV)
#ifdef __NR_
__NR_create_module,
#endif
#ifdef __NR_get_kernel_syms
__NR_get_kernel_syms,
#endif
-#endif /* AFS_LINUX26_ENV */
/*
* On IA64, the old module-loading calls are indeed present and
#elif defined(AFS_AMD64_LINUX26_ENV)
/* On this platform, it's in a different section! */
(unsigned long)&generic_ro_fops,
-#elif defined(AFS_AMD64_LINUX20_ENV)
- /* On this platform, it's in a different section! */
- (unsigned long)&tasklist_lock,
#else
(unsigned long)&init_mm,
#endif
(unsigned long)(&generic_ro_fops) - 0x30000,
0,
0x6000,
-#elif defined(AFS_AMD64_LINUX20_ENV)
- (unsigned long)(&tasklist_lock) - 0x30000,
- 0,
- 0x6000,
#elif defined(AFS_PPC64_LINUX26_ENV)
(unsigned long)(&do_signal),
0xfff,
0x400,
-#elif defined(AFS_PPC_LINUX20_ENV) || defined(AFS_PPC_LINUX20_ENV)
- (unsigned long)&init_mm,
- 0xffff,
- 16384,
#else
(unsigned long)&init_mm,
0,
16384,
#endif
-#ifdef AFS_LINUX26_ENV
(unsigned long)scsi_command_size,
(unsigned long)scsi_command_size - 0x10000,
0x3ffff,
0x40000,
-#else
- 0, 0, 0, 0,
-#endif
/* number and list of unimplemented system calls */
((sizeof(main_zapped_syscalls)/sizeof(main_zapped_syscalls[0])) - 1),
0,
(0x180000 / sizeof(unsigned long *)),
-#ifdef AFS_LINUX26_ENV
(unsigned long)scsi_command_size,
(unsigned long)scsi_command_size - 0x10000,
0x3ffff,
0x40000,
-#else
- 0, 0, 0, 0,
-#endif
/* number and list of unimplemented system calls */
16384,
#endif
-#ifdef AFS_LINUX26_ENV
(unsigned long)scsi_command_size,
(unsigned long)scsi_command_size - 0x10000,
0x3ffff,
0x40000,
-#else
- 0, 0, 0, 0,
-#endif
/* number and list of unimplemented system calls */
((sizeof(sct32_zapped_syscalls)/sizeof(sct32_zapped_syscalls[0])) - 1),
0xfffff,
0x20000,
-#ifdef AFS_LINUX26_ENV
(unsigned long)scsi_command_size,
(unsigned long)scsi_command_size - 0x10000,
0x3ffff,
0x40000,
-#else
- 0, 0, 0, 0,
-#endif
/* number and list of unimplemented system calls */
((sizeof(emu_zapped_syscalls)/sizeof(emu_zapped_syscalls[0])) - 1),
if (probe_debug & 0x0001) { \
printk("<7>osi_probe: %s = 0x%016lx %s\n", P->symbol, (unsigned long)(x), (m)); \
} \
- if ((x)) { \
+ if ((x) && ((int)(x)) != -ENOENT) { \
*method = (m); \
final_answer = (void *)(x); \
} \
} while (0)
#else
#define check_result(x,m) do { \
- if ((x)) { \
+ if ((x) && ((int)(x)) != -ENOENT) { \
*method = (m); \
return (void *)(x); \
} \
module_init(osi_probe_init);
module_exit(osi_probe_exit);
#endif
-#endif
+
+#else
+void *osi_find_syscall_table(int which)
+{
+ return 0;
+}
+#endif /* EXPORTED_INIT_MM */