diff --git a/AUTHORS b/AUTHORS index b0ec58c4..27f1043c 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,3 +1,3 @@ Martin Baulig (martin@home-of-linux.org) Drazen Kacar (dave@srce.hr) -Benoīt Dejean (tazforever@dlfp.org) +BenoĆ®t Dejean (tazforever@dlfp.org) diff --git a/ChangeLog b/ChangeLog index dc077a18..d816352f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,72 @@ +2004-11-22 BenoĆ®t Dejean + + * AUTHORS: + * MAINTAINERS: UTF-8-ified. + + * acconfig.h: + * acinclude.m4: + * configure.in: + * kernel/ChangeLog: + * kernel/sysctl/.cvsignore: + * kernel/sysctl/Makefile: + * kernel/sysctl/libgtop.c: + * kernel/sysctl/libgtop.h: + * kernel/sysctl/libgtop_syms.c: + * kernel/sysctl/main.c: + * kernel/sysctl/patch-2.2.1: + * kernel/sysctl/patch-2.2.x: + * kernel/table.h: + * kernel/table20/Makefile: + * kernel/table20/README: + * kernel/table20/entry-i386.S: + * kernel/table20/kernel.patch: + * kernel/table20/main.c: + * kernel/table20/unistd-i386.h: + * kernel/table20/version.h: + * kernel/table21/.cvsignore: + * kernel/table21/Makefile: + * kernel/table21/README: + * kernel/table21/entry-i386.S: + * kernel/table21/main.c: + * kernel/table21/module.c: + * kernel/table21/unistd-i386.h: + * kernel/table21/version.h: + * kernel/version.h: + * libgtop-sysdeps.m4: + * sysdeps/Makefile.am: + * sysdeps/kernel/.cvsignore: + * sysdeps/kernel/ChangeLog: + * sysdeps/kernel/Makefile.am: + * sysdeps/kernel/close.c: + * sysdeps/kernel/cpu.c: + * sysdeps/kernel/glibtop_private.h: + * sysdeps/kernel/glibtop_server.h: + * sysdeps/kernel/kernel.h: + * sysdeps/kernel/kernel.s: + * sysdeps/kernel/loadavg.c: + * sysdeps/kernel/mem.c: + * sysdeps/kernel/msg_limits.c: + * sysdeps/kernel/netload.c: + * sysdeps/kernel/open.c: + * sysdeps/kernel/ppp.c: + * sysdeps/kernel/procargs.c: + * sysdeps/kernel/procdata.c: + * sysdeps/kernel/prockernel.c: + * sysdeps/kernel/proclist.c: + * sysdeps/kernel/procmap.c: + * sysdeps/kernel/procmem.c: + * sysdeps/kernel/procsegment.c: + * sysdeps/kernel/procsignal.c: + * sysdeps/kernel/procstate.c: + * sysdeps/kernel/proctime.c: + * sysdeps/kernel/procuid.c: + * sysdeps/kernel/sem_limits.c: + * sysdeps/kernel/shm_limits.c: + * sysdeps/kernel/siglist.c: + * sysdeps/kernel/swap.c: + * sysdeps/kernel/sysinfo.c: + * sysdeps/kernel/uptime.c: Removed kernel patch and implementation. + 2004-11-18 BenoĆ®t Dejean * Makefile.am: Forgot to ship libgtopconfig.h. diff --git a/MAINTAINERS b/MAINTAINERS index 07aff553..bd9e5c5c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1,3 +1,3 @@ Email: martin@home-of-linux.org Email: dave@srce.hr -Benoīt Dejean (tazforever@dlfp.org) +BenoĆ®t Dejean (tazforever@dlfp.org) diff --git a/acconfig.h b/acconfig.h index 4ad8f2a5..24a46ed6 100644 --- a/acconfig.h +++ b/acconfig.h @@ -139,7 +139,6 @@ #undef NEED_LIBGTOP -#undef HAVE_LINUX_TABLE #undef HAVE_LIBGTOP_SMP #undef HAVE_XAUTH diff --git a/acinclude.m4 b/acinclude.m4 index acfb95dc..c79d415a 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -586,53 +586,6 @@ dnl define 'HAVE_GLIBTOP_MACHINE_H'. dnl * 'libgtop_need_server' - is the server really needed? Defines 'NEED_LIBGTOP' dnl if true; defines conditional 'NEED_LIBGTOP'. -AC_DEFUN([LIBGTOP_HACKER_TESTS],[ - AC_REQUIRE([AC_CANONICAL_HOST]) - - AC_ARG_WITH(linux-table, - [ --with-linux-table Use the table () function from Martin Baulig], - [linux_table="$withval"],[linux_table=auto]) - case "$host_os" in - linux*) - if test $linux_table = yes ; then - AC_CHECK_HEADER(linux/table.h, linux_table=yes, linux_table=no) - elif test $linux_table = auto ; then - AC_MSG_CHECKING(for table function in Linux Kernel) - AC_TRY_RUN([ -#include -#include - -#include -#include -#include - -#include - -static inline _syscall3 (int, table, int, type, union table *, tbl, const void *, param); - -int -main (void) -{ - union table tbl; - int ret; - - ret = table (TABLE_VERSION, NULL, NULL); - - if (ret == -1) - exit (-errno); - - exit (ret < 1 ? ret : 0); -} -], linux_table=yes, linux_table=no, linux_table=no) - AC_MSG_RESULT($linux_table) - fi - if test $linux_table = yes ; then - AC_DEFINE(HAVE_LINUX_TABLE) - fi - ;; - esac -]) - AC_DEFUN([GNOME_LIBGTOP_SYSDEPS],[ AC_REQUIRE([AC_CANONICAL_HOST]) @@ -652,11 +605,9 @@ AC_DEFUN([GNOME_LIBGTOP_SYSDEPS],[ AM_CONDITIONAL(HACKER_MODE, test x"$hacker_mode" = xyes) - linux_table=auto if test x$hacker_mode = xyes ; then LIBGTOP_HACKER_TESTS fi - AM_CONDITIONAL(LINUX_TABLE, test $linux_table = yes) AC_ARG_WITH(libgtop-smp, [ --with-libgtop-smp Enable SMP support (default-auto)],[ @@ -688,14 +639,9 @@ AC_DEFUN([GNOME_LIBGTOP_SYSDEPS],[ case "$host_os" in linux*) - if test x$linux_table = xyes ; then - libgtop_sysdeps_dir=kernel - libgtop_use_machine_h=no - else - libgtop_sysdeps_dir=linux - libgtop_use_machine_h=no - libgtop_have_sysinfo=yes - fi + libgtop_sysdeps_dir=linux + libgtop_use_machine_h=no + libgtop_have_sysinfo=yes libgtop_need_server=no ;; freebsd*|netbsd*|openbsd*|bsdi*) diff --git a/configure.in b/configure.in index 297c9496..0a958895 100644 --- a/configure.in +++ b/configure.in @@ -399,7 +399,6 @@ sysdeps/stub_suid/Makefile sysdeps/sun4/Makefile sysdeps/osf1/Makefile sysdeps/linux/Makefile -sysdeps/kernel/Makefile sysdeps/freebsd/Makefile sysdeps/solaris/Makefile sysdeps/aix/Makefile diff --git a/kernel/ChangeLog b/kernel/ChangeLog deleted file mode 100644 index a3efd8d7..00000000 --- a/kernel/ChangeLog +++ /dev/null @@ -1,14 +0,0 @@ -1998-07-21 Martin Baulig - - * table20: New directory for 2.0.xx kernels. - - * table21: New directory for 2.1.xx kernels. - - * *: Moved into `table20' and `table21'. - -1998-06-14 Martin Baulig - - * README: Added README. - - * kernel.patch: Patch for the Linux kernel to add the - new system call. diff --git a/kernel/sysctl/.cvsignore b/kernel/sysctl/.cvsignore deleted file mode 100644 index 9ff296a7..00000000 --- a/kernel/sysctl/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.flags diff --git a/kernel/sysctl/Makefile b/kernel/sysctl/Makefile deleted file mode 100644 index 77dd277a..00000000 --- a/kernel/sysctl/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -# -# Makefile for the LibGTop linux sysctl interface. -# -# Note! Dependencies are done automagically by 'make dep', which also -# removes any old dependencies. DON'T put your own dependencies here -# unless it's something special (ie not a .c file). -# -# Note 2! The CFLAGS definition is now in the main makefile... - -O_TARGET := kernel.o -ifeq ($(CONFIG_LIBGTOP),y) -O_OJBS := main.o libgtop.o -else -O_OBJS := main.o -endif -OX_OBJS := libgtop_syms.o - -ifeq ($(CONFIG_LIBGTOP),m) -M_OBJS := libgtop.o -endif - -include $(TOPDIR)/Rules.make diff --git a/kernel/sysctl/libgtop.c b/kernel/sysctl/libgtop.c deleted file mode 100644 index 25e50db4..00000000 --- a/kernel/sysctl/libgtop.c +++ /dev/null @@ -1,1268 +0,0 @@ -/* - * linux/libgtop/module.c - * Copyright (C) 1999 Martin Baulig - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include - -EXPORT_NO_SYMBOLS; - -static int system_ctl_handler (ctl_table *table, int *name, int nlen, - void *oldval, size_t *oldlenp, void *newval, - size_t newlen, void **context); - -static int proc_ctl_handler (ctl_table *table, int *name, int nlen, - void *oldval, size_t *oldlenp, void *newval, - size_t newlen, void **context); - -static int proc_args_ctl_handler (ctl_table *table, int *name, int nlen, - void *oldval, size_t *oldlenp, - void *newval, size_t newlen, - void **context); - -static int proc_maps_ctl_handler (ctl_table *table, int *name, int nlen, - void *oldval, size_t *oldlenp, - void *newval, size_t newlen, - void **context); - -#if CONFIG_NET - -#include - -static int proc_net_ctl_handler (ctl_table *table, int *name, int nlen, - void *oldval, size_t *oldlenp, - void *newval, size_t newlen, - void **context); - -#endif /* CONFIG_NET */ - -static int libgtop_sysctl_version = 2; -static int libgtop_update_expensive = 5000; - -static struct ctl_table_header *libgtop_sysctl_header = NULL; - -static libgtop_stat_t libgtop_stat; -static unsigned int libgtop_mem_timestamp = 0; -static libgtop_mem_t libgtop_mem; -static unsigned int libgtop_swap_timestamp = 0; -static libgtop_swap_t libgtop_swap; - -static libgtop_proclist_t libgtop_proclist; -static libgtop_proc_state_t libgtop_proc_state; -static libgtop_proc_kernel_t libgtop_proc_kernel; -static libgtop_proc_segment_t libgtop_proc_segment; -static libgtop_proc_mem_t libgtop_proc_mem; -static libgtop_proc_signal_t libgtop_proc_signal; - -static ctl_table libgtop_table[]; -static ctl_table libgtop_root_table[] = { - {CTL_LIBGTOP, "libgtop", NULL, 0, 0555, libgtop_table}, - {0} -}; - -#ifdef MODULE -static -#endif -ctl_table libgtop_table[] = { - {LIBGTOP_VERSION, "version", &libgtop_sysctl_version, - sizeof (int), 0444, NULL, &proc_dointvec}, - {LIBGTOP_UPDATE_EXPENSIVE, "update_expensive", - &libgtop_update_expensive, sizeof (int), 0664, NULL, &proc_dointvec}, - {LIBGTOP_STAT, NULL, &libgtop_stat, sizeof (libgtop_stat), - 0444, NULL, NULL, &system_ctl_handler}, - {LIBGTOP_MEM, NULL, &libgtop_mem, sizeof (libgtop_mem), - 0444, NULL, NULL, &system_ctl_handler}, - {LIBGTOP_SWAP, NULL, &libgtop_swap, sizeof (libgtop_swap), - 0444, NULL, NULL, &system_ctl_handler}, - {LIBGTOP_PROCLIST, NULL, &libgtop_proclist, sizeof (libgtop_proclist), - 0444, NULL, NULL, &system_ctl_handler}, - {LIBGTOP_PROC_STATE, NULL, &libgtop_proc_state, - sizeof (libgtop_proc_state), 0444, NULL, NULL, &proc_ctl_handler}, - {LIBGTOP_PROC_KERNEL, NULL, &libgtop_proc_kernel, - sizeof (libgtop_proc_kernel), 0444, NULL, NULL, &proc_ctl_handler}, - {LIBGTOP_PROC_SEGMENT, NULL, &libgtop_proc_segment, - sizeof (libgtop_proc_segment), 0444, NULL, NULL, &proc_ctl_handler}, - {LIBGTOP_PROC_MEM, NULL, &libgtop_proc_mem, - sizeof (libgtop_proc_mem), 0444, NULL, NULL, &proc_ctl_handler}, - {LIBGTOP_PROC_SIGNAL, NULL, &libgtop_proc_signal, - sizeof (libgtop_proc_signal), 0444, NULL, NULL, &proc_ctl_handler}, - {LIBGTOP_PROC_ARGS, NULL, NULL, 0, 0444, NULL, NULL, - &proc_args_ctl_handler}, - {LIBGTOP_PROC_MAPS, NULL, NULL, 0, 0444, NULL, NULL, - &proc_maps_ctl_handler}, -#if CONFIG_NET - /* You cannot actually "write" this value; we just use this to - * pass the device name as parameter. */ - {LIBGTOP_NETLOAD, NULL, NULL, 0, 0666, NULL, NULL, - &proc_net_ctl_handler}, -#endif - {0} -}; - -#ifdef MODULE -static void -libgtop_sysctl_register(void) -{ - static int initialized = 0; - - if (initialized == 1) - return; - - libgtop_sysctl_header = register_sysctl_table(libgtop_root_table, 1); - initialized = 1; -} - -static void -libgtop_sysctl_unregister(void) -{ - unregister_sysctl_table(libgtop_sysctl_header); -} - -int init_module(void) -{ - libgtop_sysctl_register(); - return 0; -} - -void cleanup_module(void) -{ - libgtop_sysctl_unregister(); -} - -#endif /* MODULE */ - -/* - * These bracket the sleeping functions.. - */ -extern void scheduling_functions_start_here(void); -extern void scheduling_functions_end_here(void); -#define first_sched ((unsigned long) scheduling_functions_start_here) -#define last_sched ((unsigned long) scheduling_functions_end_here) - -static unsigned long -get_wchan (struct task_struct *p) -{ - if (!p || p == current || p->state == TASK_RUNNING) - return 0; -#if defined(__i386__) - { - unsigned long ebp, esp, eip; - unsigned long stack_page; - int count = 0; - - stack_page = (unsigned long)p; - esp = p->tss.esp; - if (!stack_page || esp < stack_page || esp >= 8188+stack_page) - return 0; - /* include/asm-i386/system.h:switch_to() pushes ebp last. */ - ebp = *(unsigned long *) esp; - do { - if (ebp < stack_page || ebp >= 8188+stack_page) - return 0; - eip = *(unsigned long *) (ebp+4); - if (eip < first_sched || eip >= last_sched) - return eip; - ebp = *(unsigned long *) ebp; - } while (count++ < 16); - } -#elif defined(__alpha__) - /* - * This one depends on the frame size of schedule(). Do a - * "disass schedule" in gdb to find the frame size. Also, the - * code assumes that sleep_on() follows immediately after - * interruptible_sleep_on() and that add_timer() follows - * immediately after interruptible_sleep(). Ugly, isn't it? - * Maybe adding a wchan field to task_struct would be better, - * after all... - */ - { - unsigned long schedule_frame; - unsigned long pc; - - pc = thread_saved_pc(&p->tss); - if (pc >= first_sched && pc < last_sched) { - schedule_frame = ((unsigned long *)p->tss.ksp)[6]; - return ((unsigned long *)schedule_frame)[12]; - } - return pc; - } -#elif defined(__mc68000__) - { - unsigned long fp, pc; - unsigned long stack_page; - int count = 0; - - stack_page = (unsigned long)p; - fp = ((struct switch_stack *)p->tss.ksp)->a6; - do { - if (fp < stack_page+sizeof(struct task_struct) || - fp >= 8184+stack_page) - return 0; - pc = ((unsigned long *)fp)[1]; - /* FIXME: This depends on the order of these functions. */ - if (pc < first_sched || pc >= last_sched) - return pc; - fp = *(unsigned long *) fp; - } while (count++ < 16); - } -#elif defined(__powerpc__) - return (p->tss.wchan); -#elif defined (CONFIG_ARM) - { - unsigned long fp, lr; - unsigned long stack_page; - int count = 0; - - stack_page = 4096 + (unsigned long)p; - fp = get_css_fp (&p->tss); - do { - if (fp < stack_page || fp > 4092+stack_page) - return 0; - lr = pc_pointer (((unsigned long *)fp)[-1]); - if (lr < first_sched || lr > last_sched) - return lr; - fp = *(unsigned long *) (fp - 12); - } while (count ++ < 16); - } -#elif defined (__sparc__) - { - unsigned long pc, fp, bias = 0; - unsigned long task_base = (unsigned long) p; - struct reg_window *rw; - int count = 0; - -#ifdef __sparc_v9__ - bias = STACK_BIAS; -#endif - fp = p->tss.ksp + bias; - do { - /* Bogus frame pointer? */ - if (fp < (task_base + sizeof(struct task_struct)) || - fp >= (task_base + (2 * PAGE_SIZE))) - break; - rw = (struct reg_window *) fp; - pc = rw->ins[7]; - if (pc < first_sched || pc >= last_sched) - return pc; - fp = rw->ins[6] + bias; - } while (++count < 16); - } -#endif - return 0; -} - -#if defined(__i386__) -# define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1019]) -# define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1022]) -#elif defined(__alpha__) - /* - * See arch/alpha/kernel/ptrace.c for details. - */ -# define PT_REG(reg) (PAGE_SIZE - sizeof(struct pt_regs) \ - + (long)&((struct pt_regs *)0)->reg) -# define KSTK_EIP(tsk) \ - (*(unsigned long *)(PT_REG(pc) + PAGE_SIZE + (unsigned long)(tsk))) -# define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->tss.usp) -#elif defined(CONFIG_ARM) -# define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1022]) -# define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1020]) -#elif defined(__mc68000__) -#define KSTK_EIP(tsk) \ - ({ \ - unsigned long eip = 0; \ - if ((tsk)->tss.esp0 > PAGE_SIZE && \ - MAP_NR((tsk)->tss.esp0) < max_mapnr) \ - eip = ((struct pt_regs *) (tsk)->tss.esp0)->pc; \ - eip; }) -#define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->tss.usp) -#elif defined(__powerpc__) -#define KSTK_EIP(tsk) ((tsk)->tss.regs->nip) -#define KSTK_ESP(tsk) ((tsk)->tss.regs->gpr[1]) -#elif defined (__sparc_v9__) -# define KSTK_EIP(tsk) ((tsk)->tss.kregs->tpc) -# define KSTK_ESP(tsk) ((tsk)->tss.kregs->u_regs[UREG_FP]) -#elif defined(__sparc__) -# define KSTK_EIP(tsk) ((tsk)->tss.kregs->pc) -# define KSTK_ESP(tsk) ((tsk)->tss.kregs->u_regs[UREG_FP]) -#endif -; - -static inline void -task_mem (struct task_struct *p, libgtop_proc_segment_t *proc_segment) -{ - struct mm_struct * mm = p->mm; - - if (mm && mm != &init_mm) { - struct vm_area_struct * vma = mm->mmap; - unsigned long data = 0, stack = 0; - unsigned long exec = 0, lib = 0; - unsigned long vsize = 0; - - for (vma = mm->mmap; vma; vma = vma->vm_next) { - unsigned long len = (vma->vm_end - vma->vm_start) >> 10; - vsize += len; - if (!vma->vm_file) { - data += len; - if (vma->vm_flags & VM_GROWSDOWN) - stack += len; - continue; - } - if (vma->vm_flags & VM_WRITE) - continue; - if (vma->vm_flags & VM_EXEC) { - exec += len; - if (vma->vm_flags & VM_EXECUTABLE) - continue; - lib += len; - } - } - - proc_segment->vsize = vsize; - proc_segment->data = data; - proc_segment->stack = stack; - proc_segment->exec = exec; - proc_segment->lib = lib; - } -} - -static inline void -statm_pte_range (pmd_t * pmd, unsigned long address, unsigned long size, - int * pages, int * shared, int * dirty, int * total) -{ - pte_t * pte; - unsigned long end; - - if (pmd_none(*pmd)) - return; - if (pmd_bad(*pmd)) { - printk("statm_pte_range: bad pmd (%08lx)\n", pmd_val(*pmd)); - pmd_clear(pmd); - return; - } - pte = pte_offset(pmd, address); - address &= ~PMD_MASK; - end = address + size; - if (end > PMD_SIZE) - end = PMD_SIZE; - do { - pte_t page = *pte; - - address += PAGE_SIZE; - pte++; - if (pte_none(page)) - continue; - ++*total; - if (!pte_present(page)) - continue; - ++*pages; - if (pte_dirty(page)) - ++*dirty; - if (MAP_NR(pte_page(page)) >= max_mapnr) - continue; - if (atomic_read(&mem_map[MAP_NR(pte_page(page))].count) > 1) - ++*shared; - } while (address < end); -} - -static inline void -statm_pmd_range (pgd_t * pgd, unsigned long address, unsigned long size, - int * pages, int * shared, int * dirty, int * total) -{ - pmd_t * pmd; - unsigned long end; - - if (pgd_none(*pgd)) - return; - if (pgd_bad(*pgd)) { - printk("statm_pmd_range: bad pgd (%08lx)\n", pgd_val(*pgd)); - pgd_clear(pgd); - return; - } - pmd = pmd_offset(pgd, address); - address &= ~PGDIR_MASK; - end = address + size; - if (end > PGDIR_SIZE) - end = PGDIR_SIZE; - do { - statm_pte_range (pmd, address, end - address, pages, - shared, dirty, total); - address = (address + PMD_SIZE) & PMD_MASK; - pmd++; - } while (address < end); -} - -static void -statm_pgd_range (pgd_t * pgd, unsigned long address, unsigned long end, - int * pages, int * shared, int * dirty, int * total) -{ - while (address < end) { - statm_pmd_range (pgd, address, end - address, pages, - shared, dirty, total); - address = (address + PGDIR_SIZE) & PGDIR_MASK; - pgd++; - } -} - -static void -get_statm (struct task_struct *tsk, libgtop_proc_mem_t *proc_mem) -{ - int size=0, resident=0, share=0, trs=0, lrs=0, drs=0, dt=0; - unsigned long data=0, stack=0, exec=0, lib=0; - unsigned long vsize = 0; - - if (tsk->mm && tsk->mm != &init_mm) { - struct vm_area_struct * vma = tsk->mm->mmap; - - while (vma) { - unsigned long len = (vma->vm_end - vma->vm_start) >> 10; - pgd_t *pgd = pgd_offset(tsk->mm, vma->vm_start); - int pages = 0, shared = 0, dirty = 0, total = 0; - - vsize += len; - - statm_pgd_range (pgd, vma->vm_start, vma->vm_end, - &pages, &shared, &dirty, &total); - resident += pages; - share += shared; - dt += dirty; - size += total; - if (vma->vm_flags & VM_EXECUTABLE) - trs += pages; /* text */ - else if (vma->vm_flags & VM_GROWSDOWN) - drs += pages; /* stack */ - else if (vma->vm_end > 0x60000000) - lrs += pages; /* library */ - else - drs += pages; - - if (!vma->vm_file) { - data += len; - if (vma->vm_flags & VM_GROWSDOWN) - stack += len; - vma = vma->vm_next; - continue; - } - if (vma->vm_flags & VM_WRITE) { - vma = vma->vm_next; - continue; - } - if (vma->vm_flags & VM_EXEC) { - exec += len; - if (vma->vm_flags & VM_EXECUTABLE) { - vma = vma->vm_next; - continue; - } - lib += len; - } - - vma = vma->vm_next; - } - } - - proc_mem->segment.vsize = vsize; - proc_mem->segment.data = data; - proc_mem->segment.stack = stack; - proc_mem->segment.exec = exec; - proc_mem->segment.lib = lib; - - proc_mem->size = size; - proc_mem->resident = resident; - proc_mem->share = share; - proc_mem->trs = trs; - proc_mem->lrs = lrs; - proc_mem->drs = drs; - proc_mem->dt = dt; -} - -static void -collect_sigign_sigcatch (struct task_struct *p, sigset_t *ign, - sigset_t *catch) -{ - struct k_sigaction *k; - int i; - - sigemptyset(ign); - sigemptyset(catch); - - if (p->sig) { - k = p->sig->action; - for (i = 1; i <= _NSIG; ++i, ++k) { - if (k->sa.sa_handler == SIG_IGN) - sigaddset(ign, i); - else if (k->sa.sa_handler != SIG_DFL) - sigaddset(catch, i); - } - } -} - -static void -task_sig (struct task_struct *p, libgtop_proc_signal_t *proc_signal) -{ - sigset_t ignore, catch; - int i, nsig; - - if (_NSIG_WORDS > LIBGTOP_NSIG) - nsig = LIBGTOP_NSIG; - else - nsig = _NSIG_WORDS; - - collect_sigign_sigcatch (p, &ignore, &catch); - - for (i = 0; i < nsig; i++) { - proc_signal->signal [i] = p->signal.sig [i]; - proc_signal->blocked [i] = p->blocked.sig [i]; - proc_signal->ignore [i] = ignore.sig [i]; - proc_signal->catch [i] = catch.sig [i]; - } -} - -static int -libgtop_sysctl (ctl_table *table, int nlen, int *name) -{ - extern unsigned long total_forks; - int index, tindex, tty, which, arg; - libgtop_stat_t *lstat; - libgtop_mem_t *mem; - libgtop_swap_t *swap; - libgtop_proclist_t *proclist; - struct task_struct *tsk = NULL; - struct sysinfo i; - - switch (table->ctl_name) { - case LIBGTOP_STAT: - lstat = table->data; - lstat->cpu.total = jiffies; - lstat->cpu.user = kstat.cpu_user; - lstat->cpu.nice = kstat.cpu_nice; - lstat->cpu.sys = kstat.cpu_system; - lstat->cpu.idle = jiffies*smp_num_cpus - - (lstat->cpu.user + lstat->cpu.nice + lstat->cpu.sys); -#ifdef __SMP__ - for (i = 0; i < smp_num_cpus; i++) { - lstat->xcpu[i].user = kstat.per_cpu_user[cpu_logical_map(i)]; - lstat->xcpu[i].nice = kstat.per_cpu_nice[cpu_logical_map(i)]; - lstat->xcpu[i].sys = kstat.per_cpu_system[cpu_logical_map(i)]; - lstat->xcpu[i].idle = jiffies - - (lstat->xcpu[i].user + lstat->xcpu[i].nice + - lstat->xcpu[i].sys); - } - - lstat->ncpu = smp_num_cpus; -#else - lstat->ncpu = 0; -#endif - - lstat->frequency = HZ; - - lstat->loadavg [0] = (double) avenrun [0] / (1 << FSHIFT); - lstat->loadavg [1] = (double) avenrun [1] / (1 << FSHIFT); - lstat->loadavg [2] = (double) avenrun [2] / (1 << FSHIFT); - - lstat->pgpgin = kstat.pgpgin; - lstat->pgpgout = kstat.pgpgout; - lstat->pswpin = kstat.pswpin; - lstat->pswpout = kstat.pswpout; - - lstat->context_swtch = kstat.context_swtch; - lstat->boot_time = xtime.tv_sec - jiffies / HZ; - lstat->total_forks = total_forks; - break; - case LIBGTOP_MEM: - if (jiffies - libgtop_mem_timestamp < libgtop_update_expensive) - return 0; - libgtop_mem_timestamp = jiffies; - - mem = table->data; - si_meminfo (&i); - - mem->totalram = i.totalram; - mem->freeram = i.freeram; - mem->sharedram = i.sharedram; - mem->bufferram = i.bufferram; -#if 0 - mem->cachedram = page_cache_size * PAGE_SIZE; -#endif - return 0; - case LIBGTOP_SWAP: - if (jiffies - libgtop_swap_timestamp < libgtop_update_expensive) - return 0; - libgtop_swap_timestamp = jiffies; - - swap = table->data; - si_swapinfo (&i); - - swap->totalswap = i.totalswap; - swap->freeswap = i.freeswap; - return 0; - case LIBGTOP_PROCLIST: - proclist = table->data; - - if (nlen == 1) { - which = 0; - arg = 0; - } else if (nlen == 2) { - which = name [1]; - arg = 0; - } else if (nlen == 3) { - which = name [1]; - arg = name [2]; - } else { - return -EINVAL; - } - - tsk = task [0]; - read_lock (&tasklist_lock); - for (index = tindex = 0; (index <= nr_tasks) && tsk->next_task; - index++, tsk = tsk->next_task) { - if (tsk->pid == 0) continue; - switch (which & LIBGTOP_PROCLIST_MASK) { - case LIBGTOP_PROCLIST_PID: - if (tsk->pid != arg) continue; - break; - case LIBGTOP_PROCLIST_PGRP: - if (tsk->pgrp != arg) continue; - break; - case LIBGTOP_PROCLIST_SESSION: - if (tsk->session != arg) continue; - break; - case LIBGTOP_PROCLIST_TTY: - tty = tsk->tty ? - kdev_t_to_nr (tsk->tty->device) : 0; - if (tty != arg) continue; - break; - case LIBGTOP_PROCLIST_UID: - if (tsk->uid != arg) continue; - break; - case LIBGTOP_PROCLIST_RUID: - if (tsk->euid != arg) continue; - break; - } - - if ((which & LIBGTOP_EXCLUDE_IDLE) && (tsk->state != 0)) - continue; - - if ((which & LIBGTOP_EXCLUDE_NOTTY) && (tsk->tty == NULL)) - continue; - - proclist->pids [tindex++] = tsk->pid; - } - - proclist->count = tindex; - proclist->nr_running = nr_running; - proclist->last_pid = last_pid; - proclist->nr_tasks = tindex; - read_unlock(&tasklist_lock); - return 0; - default: - return -EINVAL; - } - - return 0; -} - -static int -libgtop_sysctl_proc (ctl_table *table, int nlen, int *name, - struct task_struct *tsk) -{ - libgtop_proc_state_t *proc_state; - libgtop_proc_kernel_t *proc_kernel; - libgtop_proc_segment_t *proc_segment; - libgtop_proc_signal_t *proc_signal; - libgtop_proc_mem_t *proc_mem; - int i; - - switch (table->ctl_name) { - case LIBGTOP_PROC_STATE: - proc_state = table->data; - memset (proc_state, 0, sizeof (libgtop_proc_state_t)); - - proc_state->uid = tsk->uid; - proc_state->gid = tsk->gid; - proc_state->flags = tsk->flags; - memcpy (proc_state->comm, tsk->comm, sizeof (proc_state->comm)); - proc_state->uid = tsk->uid; - proc_state->euid = tsk->euid; - proc_state->suid = tsk->suid; - proc_state->fsuid = tsk->fsuid; - - proc_state->gid = tsk->gid; - proc_state->egid = tsk->egid; - proc_state->sgid = tsk->sgid; - proc_state->fsgid = tsk->fsgid; - - proc_state->pid = tsk->pid; - proc_state->pgrp = tsk->pgrp; - proc_state->ppid = tsk->p_pptr->pid; - - proc_state->session = tsk->session; - proc_state->tty = tsk->tty ? - kdev_t_to_nr (tsk->tty->device) : 0; - proc_state->tpgid = tsk->tty ? tsk->tty->pgrp : -1; - - proc_state->priority = tsk->priority; - proc_state->counter = tsk->counter; - proc_state->def_priority = DEF_PRIORITY; - - proc_state->utime = tsk->times.tms_utime; - proc_state->stime = tsk->times.tms_stime; - proc_state->cutime = tsk->times.tms_cutime; - proc_state->cstime = tsk->times.tms_cstime; - - proc_state->start_time = tsk->start_time; - -#ifdef __SMP__ - for (i = 0; i < NR_CPUS; i++) { - proc_state->per_cpu_utime [i] = tsk->per_cpu_utime [i]; - proc_state->per_cpu_stime [i] = tsk->per_cpu_stime [i]; - } -#endif - - proc_state->has_cpu = tsk->has_cpu; - proc_state->processor = tsk->processor; - proc_state->last_processor = tsk->last_processor; - - proc_state->policy = tsk->policy; - proc_state->rt_priority = tsk->rt_priority; - - proc_state->it_real_value = tsk->it_real_value; - proc_state->it_prof_value = tsk->it_prof_value; - proc_state->it_virt_value = tsk->it_virt_value; - proc_state->it_real_incr = tsk->it_real_incr; - proc_state->it_prof_incr = tsk->it_prof_incr; - proc_state->it_virt_incr = tsk->it_virt_incr; - - proc_state->min_flt = tsk->min_flt; - proc_state->cmin_flt = tsk->cmin_flt; - proc_state->maj_flt = tsk->maj_flt; - proc_state->cmaj_flt = tsk->cmaj_flt; - - proc_state->nswap = tsk->nswap; - proc_state->cnswap = tsk->cnswap; - - proc_state->kesp = KSTK_ESP(tsk); - proc_state->keip = KSTK_EIP(tsk); - - if (tsk->mm && tsk->mm != &init_mm) { - proc_state->context = tsk->mm->context; - proc_state->start_code = tsk->mm->start_code; - proc_state->end_code = tsk->mm->end_code; - proc_state->start_data = tsk->mm-> start_data; - proc_state->end_data = tsk->mm->end_data; - proc_state->start_brk = tsk->mm->start_brk; - proc_state->brk = tsk->mm->brk; - proc_state->start_stack = tsk->mm->start_stack; - proc_state->start_mmap = tsk->mm->mmap ? - tsk->mm->mmap->vm_start : 0; - proc_state->arg_start = tsk->mm->arg_start; - proc_state->arg_end = tsk->mm->arg_end; - proc_state->env_start = tsk->mm->env_start; - proc_state->env_end = tsk->mm->env_end; - proc_state->rss = tsk->mm->rss << PAGE_SHIFT; - proc_state->total_vm = tsk->mm->total_vm; - proc_state->locked_vm = tsk->mm->locked_vm; - - } - proc_state->rlim = tsk->rlim ? tsk->rlim[RLIMIT_RSS].rlim_cur : 0; - - proc_state->ngroups = tsk->ngroups; - for (i = 0; i < min (tsk->ngroups, LIBGTOP_MAX_GROUPS); i++) - proc_state->groups [i] = tsk->groups [i]; - - if (tsk->state & TASK_INTERRUPTIBLE) - proc_state->state |= LIBGTOP_TASK_INTERRUPTIBLE; - if (tsk->state & TASK_UNINTERRUPTIBLE) - proc_state->state |= LIBGTOP_TASK_UNINTERRUPTIBLE; - if (tsk->state & TASK_ZOMBIE) - proc_state->state |= LIBGTOP_TASK_ZOMBIE; - if (tsk->state & TASK_STOPPED) - proc_state->state |= LIBGTOP_TASK_STOPPED; - if (tsk->state & TASK_SWAPPING) - proc_state->state |= LIBGTOP_TASK_SWAPPING; - - if (!(tsk->state & (TASK_RUNNING | TASK_INTERRUPTIBLE | - TASK_UNINTERRUPTIBLE | TASK_ZOMBIE | - TASK_STOPPED | TASK_SWAPPING))) - proc_state->state |= LIBGTOP_TASK_RUNNING; - break; - case LIBGTOP_PROC_KERNEL: - proc_kernel = table->data; - memset (proc_kernel, 0, sizeof (libgtop_proc_kernel_t)); - - proc_kernel->wchan = get_wchan (tsk); - break; - case LIBGTOP_PROC_SEGMENT: - proc_segment = table->data; - memset (proc_segment, 0, sizeof (libgtop_proc_segment_t)); - - task_mem (tsk, proc_segment); - break; - case LIBGTOP_PROC_MEM: - proc_mem = table->data; - memset (proc_mem, 0, sizeof (libgtop_proc_mem_t)); - - get_statm (tsk, proc_mem); - /* Use LIBGTOP_PROC_STAT if you only want rss and rlim. */ - proc_mem->rss = tsk->mm->rss << PAGE_SHIFT; - proc_mem->rlim = tsk->rlim ? tsk->rlim[RLIMIT_RSS].rlim_cur : 0; - break; - case LIBGTOP_PROC_SIGNAL: - proc_signal = table->data; - memset (proc_signal, 0, sizeof (libgtop_proc_signal_t)); - - task_sig (tsk, proc_signal); - break; - default: - return -EINVAL; - } - - return 0; -} - -static int -system_ctl_handler (ctl_table *table, int *name, int nlen, - void *oldval, size_t *oldlenp, void *newval, - size_t newlen, void **context) -{ - int ret, len, len_name; - - if (!table->data || !table->maxlen) - return -ENOTDIR; - - if (!oldval || !oldlenp || get_user(len, oldlenp)) - return -EFAULT; - - if (!name || !nlen || get_user(len_name, name)) - return -EFAULT; - - if (len != table->maxlen) - return -EFAULT; - - ret = libgtop_sysctl (table, nlen, name); - if (ret) return ret; - - if(copy_to_user(oldval, table->data, len)) - return -EFAULT; - - return 1; -} - -static int -proc_ctl_handler (ctl_table *table, int *name, int nlen, - void *oldval, size_t *oldlenp, void *newval, - size_t newlen, void **context) -{ - struct task_struct *tsk = NULL; - int ret, len, len_name; - - if (!table->data || !table->maxlen) - return -ENOTDIR; - - if (!oldval || !oldlenp || get_user(len, oldlenp)) - return -EFAULT; - - if (!name || !nlen || get_user(len_name, name)) - return -EFAULT; - - if (len != table->maxlen) - return -EFAULT; - - if (nlen != 2) - return -EFAULT; - - read_lock (&tasklist_lock); - tsk = find_task_by_pid (name [1]); - /* FIXME!! This should be done after the last use */ - read_unlock(&tasklist_lock); - - if (tsk == NULL) - return -ESRCH; - - ret = libgtop_sysctl_proc (table, nlen, name, tsk); - if (ret) return ret; - - if(copy_to_user(oldval, table->data, len)) - return -EFAULT; - - return 1; -} - -static unsigned long -get_phys_addr (struct task_struct * p, unsigned long ptr) -{ - pgd_t *page_dir; - pmd_t *page_middle; - pte_t pte; - - if (!p || !p->mm || ptr >= TASK_SIZE) - return 0; - /* Check for NULL pgd .. shouldn't happen! */ - if (!p->mm->pgd) { - printk("get_phys_addr: pid %d has NULL pgd!\n", p->pid); - return 0; - } - - page_dir = pgd_offset(p->mm,ptr); - if (pgd_none(*page_dir)) - return 0; - if (pgd_bad(*page_dir)) { - printk("bad page directory entry %08lx\n", pgd_val(*page_dir)); - pgd_clear(page_dir); - return 0; - } - page_middle = pmd_offset(page_dir,ptr); - if (pmd_none(*page_middle)) - return 0; - if (pmd_bad(*page_middle)) { - printk("bad page middle entry %08lx\n", pmd_val(*page_middle)); - pmd_clear(page_middle); - return 0; - } - pte = *pte_offset(page_middle,ptr); - if (!pte_present(pte)) - return 0; - return pte_page(pte) + (ptr & ~PAGE_MASK); -} - -static int -get_array (struct task_struct *p, unsigned long start, unsigned long end, - char * buffer) -{ - unsigned long addr; - int size = 0, result = 0; - char c; - - if (start >= end) - return result; - for (;;) { - addr = get_phys_addr (p, start); - if (!addr) - return result; - do { - c = *(char *) addr; - if (!c) - result = size; - if (size < PAGE_SIZE) - buffer[size++] = c; - else - return result; - addr++; - start++; - if (!c && start >= end) - return result; - } while (addr & ~PAGE_MASK); - } - - return result; -} - -static int -proc_args_ctl_handler (ctl_table *table, int *name, int nlen, - void *oldval, size_t *oldlenp, void *newval, - size_t newlen, void **context) -{ - struct task_struct *tsk = NULL; - int ret, len, len_name; - unsigned long page; - - if (!oldval || !oldlenp || get_user (len, oldlenp)) - return -EFAULT; - - if (!name || !nlen || get_user (len_name, name)) - return -EFAULT; - - if (nlen != 2) - return -EFAULT; - - read_lock (&tasklist_lock); - tsk = find_task_by_pid (name [1]); - /* FIXME!! This should be done after the last use */ - read_unlock (&tasklist_lock); - - if (!tsk || !tsk->mm) - return -ESRCH; - - if (!(page = __get_free_page (GFP_KERNEL))) - return -ENOMEM; - - ret = get_array (tsk, tsk->mm->arg_start, - tsk->mm->arg_end, (char *) page); - if (ret < 0) { - free_page (page); - return ret; - } - - if (ret < len) - len = ret; - - if (put_user (len, oldlenp)) - goto err_fault_free_page; - - if (copy_to_user (oldval, (void *) page, len)) - goto err_fault_free_page; - - free_page (page); - return 1; - - err_fault_free_page: - free_page (page); - return -EFAULT; -} - -static int -proc_maps_ctl_handler (ctl_table *table, int *name, int nlen, - void *oldval, size_t *oldlenp, void *newval, - size_t newlen, void **context) -{ - struct task_struct *p = NULL; - struct vm_area_struct * map, * next; - int i, len, len_name, retval = -EINVAL; - libgtop_proc_maps_t *proc_maps; - size_t count, wrote = 0; - loff_t lineno = 0; - int volatile_task; - - if (!oldlenp || get_user (len, oldlenp)) - return -EFAULT; - - if (!name || !nlen || get_user (len_name, name)) - return -EFAULT; - - if (nlen != 2) - return -EFAULT; - - read_lock (&tasklist_lock); - p = find_task_by_pid (name [1]); - /* FIXME!! This should be done after the last use */ - read_unlock (&tasklist_lock); - - if (!p || !p->mm) - return -ESRCH; - - if (len % sizeof (libgtop_proc_maps_t)) - return -EINVAL; - - count = len / sizeof (libgtop_proc_maps_t); - - if (!(proc_maps = kmalloc (sizeof (libgtop_proc_maps_t), GFP_KERNEL))) - return -ENOMEM; - - if (!p->mm || p->mm == &init_mm) - goto write_len_out; - - /* Check whether the mmaps could change if we sleep */ - volatile_task = (p != current || atomic_read (&p->mm->count) > 1); - - if (count == 0) { - /* Only get total count. */ - for (map = p->mm->mmap, i = 0; map; map = map->vm_next, i++) - continue; - wrote = i; - goto write_len_success; - } - - /* quickly go to line lineno */ - for (map = p->mm->mmap, i = 0; map && (i < lineno); - map = map->vm_next, i++) - continue; - - for ( ; map; map = next) { - memset (proc_maps, 0, sizeof (libgtop_proc_maps_t)); - - /* - * Get the next vma now (but it won't be used if we sleep). - */ - next = map->vm_next; - - proc_maps->header.start = map->vm_start; - proc_maps->header.end = map->vm_end; - proc_maps->header.offset = map->vm_offset; - - proc_maps->header.perm = map->vm_flags; - - if (map->vm_file != NULL) { - char *line = d_path (map->vm_file->f_dentry, proc_maps->filename, - LIBGTOP_MAP_PATH_LEN); - - proc_maps->filename [LIBGTOP_MAP_PATH_LEN-1] = '\0'; - proc_maps->header.filename_offset = line - proc_maps->filename; - - proc_maps->header.device = - map->vm_file->f_dentry->d_inode->i_dev; - proc_maps->header.inode = - map->vm_file->f_dentry->d_inode->i_ino; - } - - /* Copy current entry to user space. */ - if (copy_to_user (oldval, proc_maps, sizeof (*proc_maps))) { - retval = -EFAULT; - goto free_page_out; - } - - wrote += sizeof (*proc_maps); - - oldval += sizeof (*proc_maps); - len -= sizeof (*proc_maps); - count--; - - /* If there are no more entries, we don't have to worry about space. */ - if (next == NULL) - goto write_len_success; - - if (len < sizeof (*proc_maps)) { - retval = -EFAULT; - goto write_len_out; - } - - if (count == 0) { - retval = -E2BIG; - goto write_len_out; - } - } - - retval = -ENOSYS; - goto free_page_out; - - return retval; - - write_len_success: - retval = 1; - - write_len_out: - if (put_user (wrote, oldlenp)) { - retval = -EFAULT; - goto free_page_out; - } - - free_page_out: - kfree (proc_maps); - return retval; -} - -#if CONFIG_NET - -static int -proc_net_ctl_handler (ctl_table *table, int *name, int nlen, - void *oldval, size_t *oldlenp, void *newval, - size_t newlen, void **context) -{ - int len, len_name, retval = -ENOSYS; - struct net_device_stats *stats; - libgtop_netload_t netload; - struct device *dev; - char *dev_name; - - if (!oldlenp || get_user (len, oldlenp)) - return -EFAULT; - - if (len != sizeof (libgtop_netload_t)) - return -EFAULT; - - if (!name || !nlen || get_user (len_name, name)) - return -EFAULT; - - if (nlen != 1) - return -EFAULT; - - /* Allocate memory for device name. */ - if (newlen > PAGE_SIZE) - return -ENOMEM; - - if (!(dev_name = kmalloc (newlen+1, GFP_KERNEL))) - return -ENOMEM; - - /* Copy device name from user space. */ - if (copy_from_user (dev_name, newval, newlen)) { - retval = -EFAULT; - goto free_name_out; - } - dev_name [newlen] = '\0'; - - dev = dev_get (dev_name); - if (!dev) { - retval = -ENODEV; - goto free_name_out; - } - - if (!dev->get_stats) { - retval = -ENODEV; - goto free_name_out; - } - - stats = dev->get_stats (dev); - - if (!stats) { - retval = -ENODEV; - goto free_name_out; - } - - netload.rx_packets = stats->rx_packets; - netload.tx_packets = stats->tx_packets; - - netload.rx_bytes = stats->rx_bytes; - netload.tx_bytes = stats->tx_bytes; - - netload.rx_errors = stats->rx_errors; - netload.tx_errors = stats->tx_errors; - - netload.rx_dropped = stats->rx_dropped; - netload.tx_dropped = stats->tx_dropped; - - netload.multicast = stats->multicast; - netload.collisions = stats->collisions; - - netload.rx_length_errors = stats->rx_length_errors; - netload.rx_over_errors = stats->rx_over_errors; - netload.rx_crc_errors = stats->rx_crc_errors; - netload.rx_frame_errors = stats->rx_frame_errors; - netload.rx_fifo_errors = stats->rx_fifo_errors; - netload.rx_missed_errors = stats->rx_missed_errors; - - netload.tx_aborted_errors = stats->tx_aborted_errors; - netload.tx_carrier_errors = stats->tx_carrier_errors; - netload.tx_fifo_errors = stats->tx_fifo_errors; - netload.tx_heartbeat_errors = stats->tx_heartbeat_errors; - netload.tx_window_errors = stats->tx_window_errors; - - netload.rx_compressed = stats->rx_compressed; - netload.tx_compressed = stats->tx_compressed; - - if (copy_to_user (oldval, (void *) &netload, len)) { - retval = -EFAULT; - goto free_name_out; - } - - retval = 1; - - free_name_out: - kfree (dev_name); - return retval; -} - -#endif /* CONFIG_NET */ diff --git a/kernel/sysctl/libgtop.h b/kernel/sysctl/libgtop.h deleted file mode 100644 index 5fe35aa1..00000000 --- a/kernel/sysctl/libgtop.h +++ /dev/null @@ -1,242 +0,0 @@ -#ifndef _LINUX_LIBGTOP_H -#define _LINUX_LIBGTOP_H 1 - -#include - -enum { - LIBGTOP_VERSION = 1, - LIBGTOP_UPDATE_EXPENSIVE, - LIBGTOP_STAT = 101, - LIBGTOP_MEM, - LIBGTOP_SWAP, - LIBGTOP_PROCLIST = 201, - LIBGTOP_PROC_STATE = 211, - LIBGTOP_PROC_KERNEL, - LIBGTOP_PROC_SEGMENT, - LIBGTOP_PROC_MEM, - LIBGTOP_PROC_SIGNAL, - LIBGTOP_PROC_ARGS = 251, - LIBGTOP_PROC_MAPS, - LIBGTOP_NETLOAD = 301 -}; - -enum { - LIBGTOP_PROCLIST_ALL = 0, - LIBGTOP_PROCLIST_PID, - LIBGTOP_PROCLIST_PGRP, - LIBGTOP_PROCLIST_SESSION, - LIBGTOP_PROCLIST_TTY, - LIBGTOP_PROCLIST_UID, - LIBGTOP_PROCLIST_RUID -}; - -#define LIBGTOP_NSIG 4 - -#define LIBGTOP_PROCLIST_MASK 15 -#define LIBGTOP_MAX_GROUPS 32 - -#define LIBGTOP_EXCLUDE_IDLE 0x1000 -#define LIBGTOP_EXCLUDE_SYSTEM 0x2000 -#define LIBGTOP_EXCLUDE_NOTTY 0x4000 - -#define LIBGTOP_TASK_RUNNING 1 -#define LIBGTOP_TASK_INTERRUPTIBLE 2 -#define LIBGTOP_TASK_UNINTERRUPTIBLE 4 -#define LIBGTOP_TASK_ZOMBIE 8 -#define LIBGTOP_TASK_STOPPED 16 -#define LIBGTOP_TASK_SWAPPING 32 - -#define LIBGTOP_VM_READ 0x0001 /* currently active flags */ -#define LIBGTOP_VM_WRITE 0x0002 -#define LIBGTOP_VM_EXEC 0x0004 -#define LIBGTOP_VM_SHARED 0x0008 - -#define LIBGTOP_VM_MAYREAD 0x0010 /* limits for mprotect() etc */ -#define LIBGTOP_VM_MAYWRITE 0x0020 -#define LIBGTOP_VM_MAYEXEC 0x0040 -#define LIBGTOP_VM_MAYSHARE 0x0080 - -#define LIBGTOP_VM_GROWSDOWN 0x0100 /* general info on the segment */ -#define LIBGTOP_VM_GROWSUP 0x0200 -#define LIBGTOP_VM_SHM 0x0400 /* shared memory area, don't swap out */ -#define LIBGTOP_VM_DENYWRITE 0x0800 /* ETXTBSY on write attempts.. */ - -#define LIBGTOP_VM_EXECUTABLE 0x1000 -#define LIBGTOP_VM_LOCKED 0x2000 -#define LIBGTOP_VM_IO 0x4000 /* Memory mapped I/O or similar */ - -#define LIBGTOP_MAP_PATH_LEN (PAGE_SIZE - sizeof (libgtop_proc_maps_header_t)) - -#ifndef min -#define min(a,b) ((a < b) ? a : b) -#endif - -typedef struct libgtop_stat libgtop_stat_t; - -typedef struct libgtop_cpu libgtop_cpu_t; -typedef struct libgtop_mem libgtop_mem_t; -typedef struct libgtop_swap libgtop_swap_t; -typedef struct libgtop_proclist libgtop_proclist_t; - -typedef struct libgtop_proc_state libgtop_proc_state_t; -typedef struct libgtop_proc_kernel libgtop_proc_kernel_t; -typedef struct libgtop_proc_segment libgtop_proc_segment_t; -typedef struct libgtop_proc_mem libgtop_proc_mem_t; -typedef struct libgtop_proc_signal libgtop_proc_signal_t; - -typedef struct libgtop_proc_maps_header libgtop_proc_maps_header_t; -typedef struct libgtop_proc_maps libgtop_proc_maps_t; - -typedef struct libgtop_netload libgtop_netload_t; - -struct libgtop_cpu -{ - unsigned long total; /* Total CPU Time */ - unsigned long user; /* CPU Time in User Mode */ - unsigned long nice; /* CPU Time in User Mode (nice) */ - unsigned long sys; /* CPU Time in System Mode */ - unsigned long idle; /* CPU Time in the Idle Task */ -}; - -struct libgtop_mem -{ - unsigned long totalram; /* Total usable main memory size */ - unsigned long freeram; /* Available memory size */ - unsigned long sharedram; /* Amount of shared memory */ - unsigned long bufferram; /* Memory used by buffers */ - unsigned long cachedram; -}; - -struct libgtop_swap -{ - unsigned long totalswap; /* Total swap space size */ - unsigned long freeswap; /* swap space still available */ -}; - -struct libgtop_proclist -{ - int count; - int nr_running, nr_tasks, last_pid; - unsigned pids [NR_TASKS]; -}; - -struct libgtop_stat -{ - int ncpu; /* Number of CPUs */ - unsigned long frequency; /* Tick frequency (HZ) */ - libgtop_cpu_t cpu; /* CPU statistics */ - libgtop_cpu_t xcpu [NR_CPUS]; /* SMP per-CPU statistics */ - double loadavg [3]; /* Load average */ - unsigned long total_forks; /* Total # of forks */ - unsigned int context_swtch; /* Total # of context switches */ - unsigned long boot_time; /* Boot time (seconds s. epoch) */ - unsigned int pgpgin, pgpgout; /* # of pages paged in/out */ - unsigned int pswpin, pswpout; /* # of swap pgs brought in/out */ -}; - -struct libgtop_proc_state -{ - long state; - unsigned long flags; - char comm [16]; - int uid, euid, suid, fsuid; - int gid, egid, sgid, fsgid; - int pid, pgrp, ppid; - int session; - unsigned int tty; - int tpgid; - long priority, counter, def_priority; - long utime, stime, cutime, cstime, start_time; - long per_cpu_utime [NR_CPUS], per_cpu_stime [NR_CPUS]; - int has_cpu, processor, last_processor; - - unsigned long context; - unsigned long start_code, end_code, start_data, end_data; - unsigned long start_brk, brk, start_stack, start_mmap; - unsigned long arg_start, arg_end, env_start, env_end; - unsigned long rss, rlim, total_vm, locked_vm; - - unsigned long policy, rt_priority; - unsigned long it_real_value, it_prof_value, it_virt_value; - unsigned long it_real_incr, it_prof_incr, it_virt_incr; - - unsigned long keip, kesp; - unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt; - unsigned long nswap, cnswap; - - int ngroups, groups [LIBGTOP_MAX_GROUPS]; -}; - -struct libgtop_proc_kernel -{ - unsigned long wchan; -}; - -struct libgtop_proc_segment -{ - unsigned long vsize, data, exec, stack, lib; -}; - -struct libgtop_proc_mem -{ - libgtop_proc_segment_t segment; - int size, resident, share, trs, lrs, drs, dt; - unsigned long rss, rlim; -}; - -struct libgtop_proc_signal -{ - unsigned long signal [LIBGTOP_NSIG]; - unsigned long blocked [LIBGTOP_NSIG]; - unsigned long ignore [LIBGTOP_NSIG]; - unsigned long catch [LIBGTOP_NSIG]; -}; - -struct libgtop_proc_maps_header -{ - unsigned long start, end, offset, perm; - off_t filename_offset; - ino_t inode; - dev_t device; -} __attribute__ ((aligned (64))); - -struct libgtop_proc_maps -{ - libgtop_proc_maps_header_t header; - char filename [LIBGTOP_MAP_PATH_LEN]; -}; - -struct libgtop_netload -{ - unsigned long rx_packets; /* total packets received */ - unsigned long tx_packets; /* total packets transmitted */ - unsigned long rx_bytes; /* total bytes received */ - unsigned long tx_bytes; /* total bytes transmitted */ - unsigned long rx_errors; /* bad packets received */ - unsigned long tx_errors; /* packet transmit problems */ - unsigned long rx_dropped; /* no space in linux buffers */ - unsigned long tx_dropped; /* no space available in linux */ - unsigned long multicast; /* multicast packets received */ - unsigned long collisions; - - /* detailed rx_errors: */ - unsigned long rx_length_errors; - unsigned long rx_over_errors; /* receiver ring buff overflow */ - unsigned long rx_crc_errors; /* recved pkt with crc error */ - unsigned long rx_frame_errors; /* recv'd frame alignment error */ - unsigned long rx_fifo_errors; /* recv'r fifo overrun */ - unsigned long rx_missed_errors; /* receiver missed packet */ - - /* detailed tx_errors */ - unsigned long tx_aborted_errors; - unsigned long tx_carrier_errors; - unsigned long tx_fifo_errors; - unsigned long tx_heartbeat_errors; - unsigned long tx_window_errors; - - /* for cslip etc */ - unsigned long rx_compressed; - unsigned long tx_compressed; -}; - -#endif diff --git a/kernel/sysctl/libgtop_syms.c b/kernel/sysctl/libgtop_syms.c deleted file mode 100644 index ddffc3f7..00000000 --- a/kernel/sysctl/libgtop_syms.c +++ /dev/null @@ -1,30 +0,0 @@ -/* - * linux/libgtop/libgtop_syms.c - * Copyright (C) 1999 Martin Baulig - */ - -#include -#include - -#include - -#include -#include -#include - -extern unsigned long total_forks; - -EXPORT_SYMBOL(task); -EXPORT_SYMBOL(init_mm); -EXPORT_SYMBOL(pidhash); -EXPORT_SYMBOL(avenrun); -EXPORT_SYMBOL(nr_running); -EXPORT_SYMBOL(nr_tasks); -EXPORT_SYMBOL(last_pid); -EXPORT_SYMBOL(total_forks); -EXPORT_SYMBOL(si_swapinfo); - -extern void scheduling_functions_start_here(void); -extern void scheduling_functions_end_here(void); -EXPORT_SYMBOL(scheduling_functions_start_here); -EXPORT_SYMBOL(scheduling_functions_end_here); diff --git a/kernel/sysctl/main.c b/kernel/sysctl/main.c deleted file mode 100644 index 6d391eb4..00000000 --- a/kernel/sysctl/main.c +++ /dev/null @@ -1,4 +0,0 @@ -/* - * linux/libgtop/main.c - * Copyright (C) 1999 Martin Baulig - */ diff --git a/kernel/sysctl/patch-2.2.1 b/kernel/sysctl/patch-2.2.1 deleted file mode 100644 index 1781b921..00000000 --- a/kernel/sysctl/patch-2.2.1 +++ /dev/null @@ -1,81 +0,0 @@ -diff -ru linux-2.2.1/Makefile hacker/Makefile ---- linux-2.2.1/Makefile Sun Jan 31 22:45:42 1999 -+++ hacker/Makefile Sun Mar 21 16:10:41 1999 -@@ -109,6 +109,7 @@ - DRIVERS =drivers/block/block.a \ - drivers/char/char.a \ - drivers/misc/misc.a -+EXTRAS = - LIBS =$(TOPDIR)/lib/lib.a - SUBDIRS =kernel drivers mm fs net ipc lib - -@@ -186,6 +187,11 @@ - DRIVERS := $(DRIVERS) drivers/net/irda/irda_drivers.a - endif - -+ifdef CONFIG_LIBGTOP -+SUBDIRS := $(SUBDIRS) libgtop -+EXTRAS := $(EXTRAS) libgtop/kernel.o -+endif -+ - include arch/$(ARCH)/Makefile - - .S.s: -@@ -206,6 +212,7 @@ - $(FILESYSTEMS) \ - $(NETWORKS) \ - $(DRIVERS) \ -+ $(EXTRAS) \ - $(LIBS) \ - --end-group \ - -o vmlinux -diff -ru linux-2.2.1/arch/i386/config.in hacker/arch/i386/config.in ---- linux-2.2.1/arch/i386/config.in Sun Jan 31 22:25:25 1999 -+++ hacker/arch/i386/config.in Sat Mar 20 18:26:18 1999 -@@ -84,6 +84,9 @@ - bool 'System V IPC' CONFIG_SYSVIPC - bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT - bool 'Sysctl support' CONFIG_SYSCTL -+if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then -+ tristate 'LibGTop support' CONFIG_LIBGTOP -+fi - tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT - tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF - tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC -diff -ru linux-2.2.1/include/linux/sysctl.h hacker/include/linux/sysctl.h ---- linux-2.2.1/include/linux/sysctl.h Sun Jan 31 22:24:14 1999 -+++ hacker/include/linux/sysctl.h Sat Mar 20 19:12:54 1999 -@@ -56,7 +56,8 @@ - CTL_PROC=4, /* Process info */ - CTL_FS=5, /* Filesystems */ - CTL_DEBUG=6, /* Debugging */ -- CTL_DEV=7 /* Devices */ -+ CTL_DEV=7, /* Devices */ -+ CTL_LIBGTOP=408 /* LibGTop */ - }; - - -diff -ru linux-2.2.1/kernel/sysctl.c hacker/kernel/sysctl.c ---- linux-2.2.1/kernel/sysctl.c Sun Jan 31 22:24:43 1999 -+++ hacker/kernel/sysctl.c Sat Mar 20 19:24:34 1999 -@@ -82,7 +82,9 @@ - static ctl_table fs_table[]; - static ctl_table debug_table[]; - static ctl_table dev_table[]; -- -+#ifdef CONFIG_LIBGTOP -+extern ctl_table libgtop_table[]; -+#endif - - /* /proc declarations: */ - -@@ -148,6 +150,9 @@ - {CTL_FS, "fs", NULL, 0, 0555, fs_table}, - {CTL_DEBUG, "debug", NULL, 0, 0555, debug_table}, - {CTL_DEV, "dev", NULL, 0, 0555, dev_table}, -+#ifdef CONFIG_LIBGTOP -+ {CTL_LIBGTOP, "libgtop", NULL, 0, 0555, libgtop_table}, -+#endif - {0} - }; - diff --git a/kernel/sysctl/patch-2.2.x b/kernel/sysctl/patch-2.2.x deleted file mode 100644 index fe4b0b8c..00000000 --- a/kernel/sysctl/patch-2.2.x +++ /dev/null @@ -1,93 +0,0 @@ -diff -ru kernel-source-2.2.12/Makefile hacker-2.2.12/Makefile ---- kernel-source-2.2.12/Makefile Thu Aug 26 02:29:45 1999 -+++ hacker-2.2.12/Makefile Sat Dec 18 17:33:04 1999 -@@ -113,6 +113,7 @@ - DRIVERS =drivers/block/block.a \ - drivers/char/char.a \ - drivers/misc/misc.a -+EXTRAS = - LIBS =$(TOPDIR)/lib/lib.a - SUBDIRS =kernel drivers mm fs net ipc lib - -@@ -202,6 +203,11 @@ - DRIVERS := $(DRIVERS) drivers/net/irda/irda_drivers.a - endif - -+ifdef CONFIG_LIBGTOP -+SUBDIRS := $(SUBDIRS) libgtop -+EXTRAS := $(EXTRAS) libgtop/kernel.o -+endif -+ - include arch/$(ARCH)/Makefile - - .S.s: -@@ -222,6 +228,7 @@ - $(FILESYSTEMS) \ - $(NETWORKS) \ - $(DRIVERS) \ -+ $(EXTRAS) \ - $(LIBS) \ - --end-group \ - -o vmlinux -diff -ru kernel-source-2.2.12/arch/i386/config.in hacker-2.2.12/arch/i386/config.in ---- kernel-source-2.2.12/arch/i386/config.in Thu Oct 14 00:57:46 1999 -+++ hacker-2.2.12/arch/i386/config.in Sat Dec 18 17:33:04 1999 -@@ -88,6 +88,9 @@ - bool 'System V IPC' CONFIG_SYSVIPC - bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT - bool 'Sysctl support' CONFIG_SYSCTL -+if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then -+ tristate 'LibGTop support' CONFIG_LIBGTOP -+fi - tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT - tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF - tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC -diff -ru kernel-source-2.2.12/include/linux/autoconf.h hacker-2.2.12/include/linux/autoconf.h ---- kernel-source-2.2.12/include/linux/autoconf.h Sat Dec 4 01:20:30 1999 -+++ hacker-2.2.12/include/linux/autoconf.h Sat Dec 18 17:41:44 1999 -@@ -53,6 +53,8 @@ - #define CONFIG_SYSVIPC 1 - #define CONFIG_BSD_PROCESS_ACCT 1 - #define CONFIG_SYSCTL 1 -+#undef CONFIG_LIBGTOP -+#define CONFIG_LIBGTOP_MODULE 1 - #undef CONFIG_BINFMT_AOUT - #define CONFIG_BINFMT_AOUT_MODULE 1 - #define CONFIG_BINFMT_ELF 1 -diff -ru kernel-source-2.2.12/include/linux/sysctl.h hacker-2.2.12/include/linux/sysctl.h ---- kernel-source-2.2.12/include/linux/sysctl.h Mon Aug 9 21:05:13 1999 -+++ hacker-2.2.12/include/linux/sysctl.h Sat Dec 18 17:34:38 1999 -@@ -57,7 +57,8 @@ - CTL_FS=5, /* Filesystems */ - CTL_DEBUG=6, /* Debugging */ - CTL_DEV=7, /* Devices */ -- CTL_BUS=8 /* Buses */ -+ CTL_BUS=8, /* Buses */ -+ CTL_LIBGTOP=408 /* LibGTop */ - }; - - /* CTL_BUS names: */ -diff -ru kernel-source-2.2.12/kernel/sysctl.c hacker-2.2.12/kernel/sysctl.c ---- kernel-source-2.2.12/kernel/sysctl.c Mon Aug 9 21:05:13 1999 -+++ hacker-2.2.12/kernel/sysctl.c Sat Dec 18 17:33:04 1999 -@@ -83,7 +83,9 @@ - static ctl_table fs_table[]; - static ctl_table debug_table[]; - static ctl_table dev_table[]; -- -+#ifdef CONFIG_LIBGTOP -+extern ctl_table libgtop_table[]; -+#endif - - /* /proc declarations: */ - -@@ -149,6 +151,9 @@ - {CTL_FS, "fs", NULL, 0, 0555, fs_table}, - {CTL_DEBUG, "debug", NULL, 0, 0555, debug_table}, - {CTL_DEV, "dev", NULL, 0, 0555, dev_table}, -+#ifdef CONFIG_LIBGTOP -+ {CTL_LIBGTOP, "libgtop", NULL, 0, 0555, libgtop_table}, -+#endif - {0} - }; - diff --git a/kernel/table.h b/kernel/table.h deleted file mode 100644 index 27460042..00000000 --- a/kernel/table.h +++ /dev/null @@ -1,188 +0,0 @@ -#ifndef _LINUX_TABLE_H -#define _LINUX_TABLE_H - -#ifdef _KERNEL -#include -#else -#define NR_TASKS 512 -#endif - -#define TABLE_KERN_PROC_ALL 0 /* all processes */ -#define TABLE_KERN_PROC_PID 1 -#define TABLE_KERN_PROC_PGRP 2 -#define TABLE_KERN_PROC_SESSION 3 -#define TABLE_KERN_PROC_TTY 4 -#define TABLE_KERN_PROC_UID 5 -#define TABLE_KERN_PROC_RUID 6 - -#define TABLE_KERN_PROC_MASK 15 - -#define TABLE_EXCLUDE_IDLE 0x1000 -#define TABLE_EXCLUDE_SYSTEM 0x2000 -#define TABLE_EXCLUDE_NOTTY 0x4000 - -#define TABLE_VERSION 0 -#define TABLE_CPU 1 -#define TABLE_MEM 2 -#define TABLE_SWAP 3 -#define TABLE_LOADAVG 4 -#define TABLE_UPTIME 5 -#define TABLE_PROCLIST 6 -#define TABLE_PROC_UID 7 -#define TABLE_PROC_MEM 8 -#define TABLE_PROC_SEGMENT 9 -#define TABLE_PROC_TIME 10 -#define TABLE_PROC_STATE 11 -#define TABLE_PROC_SIGNAL 12 -#define TABLE_PROC_KERNEL 13 - -/* CPU Usage (in jiffies = 1/100th seconds) */ - -struct table_cpu -{ - unsigned long total; /* Total CPU Time */ - unsigned long user; /* CPU Time in User Mode */ - unsigned long nice; /* CPU Time in User Mode (nice) */ - unsigned long sys; /* CPU Time in System Mode */ - unsigned long idle; /* CPU Time in the Idle Task */ - unsigned long frequency; /* Tick frequency */ -}; - -/* Memory Usage (in bytes) */ - -struct table_mem -{ - unsigned long total; /* Total physical memory */ - unsigned long used; /* Used memory size */ - unsigned long free; /* Free memory size */ - unsigned long shared; /* Shared memory size */ - unsigned long buffer; /* Size of buffers */ - unsigned long cached; /* Size of cached memory */ -}; - -/* Swap Space (in bytes) */ - -struct table_swap -{ - unsigned long total; /* Total swap space */ - unsigned long used; /* Used swap space */ - unsigned long free; /* Free swap space */ - unsigned long pagein; /* Total # of pages swapped in */ - unsigned long pageout; /* Total # of pages swapped out */ -}; - -/* Load average */ - -struct table_loadavg -{ - double loadavg [3]; - unsigned nr_running; - unsigned nr_tasks; - unsigned last_pid; -}; - -/* Uptime */ - -struct table_uptime -{ - unsigned long uptime; - unsigned long idle; -}; - -/* Process list. */ - -struct proclist_args -{ - int which, arg; -}; - -struct table_proclist -{ - int nr_running, nr_tasks, last_pid; - unsigned pids [NR_TASKS]; -}; - -/* Information about processes. */ - -struct table_proc_state -{ - long state; - unsigned long flags; - char comm[16]; - int uid, gid; -}; - -struct table_proc_uid -{ - int uid, euid, suid, fsuid; - int gid, egid, sgid, fsgid; - int pid, pgrp, ppid; - int session; - unsigned int tty; - int tpgid; - long priority; - long counter; - long def_priority; -}; - -struct table_proc_mem -{ - unsigned long context; - unsigned long start_code, end_code, start_data, end_data; - unsigned long start_brk, brk, start_stack, start_mmap; - unsigned long arg_start, arg_end, env_start, env_end; - unsigned long rss, rlim, total_vm, locked_vm; -}; - -struct table_proc_segment -{ - unsigned long vsize; - unsigned long size, resident, shared; - unsigned long trs, lrs, drs, srs, dt; -}; - -struct table_proc_time -{ - long utime, stime, cutime, cstime, start_time; - unsigned long timeout, policy, rt_priority; - unsigned long it_real_value, it_prof_value, it_virt_value; - unsigned long it_real_incr, it_prof_incr, it_virt_incr; -}; - -struct table_proc_signal -{ - unsigned long long signal, - blocked, /* bitmap of masked signals */ - ignored, /* mask of ignored signals */ - caught; /* mask of caught signals */ -}; - -struct table_proc_kernel -{ - unsigned long keip, kesp, wchan; - unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt; - unsigned long nswap, cnswap; -}; - -/* Union */ - -union table -{ - struct table_cpu cpu; - struct table_mem mem; - struct table_swap swap; - struct table_loadavg loadavg; - struct table_uptime uptime; - struct table_proclist proclist; - struct table_proc_uid proc_uid; - struct table_proc_mem proc_mem; - struct table_proc_segment proc_segment; - struct table_proc_time proc_time; - struct table_proc_state proc_state; - struct table_proc_signal proc_signal; - struct table_proc_kernel proc_kernel; -}; - -#endif /* _LINUX_IPC_H */ - - diff --git a/kernel/table20/Makefile b/kernel/table20/Makefile deleted file mode 100644 index d24e3ba8..00000000 --- a/kernel/table20/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -# -# Makefile for the linux system information tables. -# -# Note! Dependencies are done automagically by 'make dep', which also -# removes any old dependencies. DON'T put your own dependencies here -# unless it's something special (ie not a .c file). -# -# Note 2! The CFLAGS definition is now in the main makefile... - -O_TARGET := table.o -O_OBJS := main.o - -include $(TOPDIR)/Rules.make diff --git a/kernel/table20/README b/kernel/table20/README deleted file mode 100644 index 88d26bec..00000000 --- a/kernel/table20/README +++ /dev/null @@ -1,21 +0,0 @@ -This is a new system call `table ()' for the Linux table. It is faster -than reading from /proc and can be used to fetch all information required -for libgtop until whe have some other function (extended sysctl, ...) in -standard kernels. - -I didn't want to change sysctl or some other function myself cause this may -cause other applications relying upon those function to fail. This is -something for the ``real'' kernel gurus ... - -To use this new system call for libgtop, do the following: - -* Copy this directory to /usr/src/linux/table -* Make /usr/src/linux/include/linux/table.h symlink to /usr/src/linux/table/table.h -* Apply the patch `kernel.patch' to the kernel, compile, install and reboot -* Recompile libgtop (remove `config.cache' and run the `autogen.sh' again). - -If you want to change and/or add something - feel free to do so ! - -Have fun, - -Martin diff --git a/kernel/table20/entry-i386.S b/kernel/table20/entry-i386.S deleted file mode 100644 index 994fe27c..00000000 --- a/kernel/table20/entry-i386.S +++ /dev/null @@ -1,706 +0,0 @@ -/* - * linux/arch/i386/entry.S - * - * Copyright (C) 1991, 1992 Linus Torvalds - */ - -/* - * entry.S contains the system-call and fault low-level handling routines. - * This also contains the timer-interrupt handler, as well as all interrupts - * and faults that can result in a task-switch. - * - * NOTE: This code handles signal-recognition, which happens every time - * after a timer-interrupt and after each system call. - * - * I changed all the .align's to 4 (16 byte alignment), as that's faster - * on a 486. - * - * Stack layout in 'ret_from_system_call': - * ptrace needs to have all regs on the stack. - * if the order here is changed, it needs to be - * updated in fork.c:copy_process, signal.c:do_signal, - * ptrace.c and ptrace.h - * - * 0(%esp) - %ebx - * 4(%esp) - %ecx - * 8(%esp) - %edx - * C(%esp) - %esi - * 10(%esp) - %edi - * 14(%esp) - %ebp - * 18(%esp) - %eax - * 1C(%esp) - %ds - * 20(%esp) - %es - * 24(%esp) - %fs - * 28(%esp) - %gs - * 2C(%esp) - orig_eax - * 30(%esp) - %eip - * 34(%esp) - %cs - * 38(%esp) - %eflags - * 3C(%esp) - %oldesp - * 40(%esp) - %oldss - */ - -#include -#include -#include -#define ASSEMBLY -#include - -EBX = 0x00 -ECX = 0x04 -EDX = 0x08 -ESI = 0x0C -EDI = 0x10 -EBP = 0x14 -EAX = 0x18 -DS = 0x1C -ES = 0x20 -FS = 0x24 -GS = 0x28 -ORIG_EAX = 0x2C -EIP = 0x30 -CS = 0x34 -EFLAGS = 0x38 -OLDESP = 0x3C -OLDSS = 0x40 - -CF_MASK = 0x00000001 -IF_MASK = 0x00000200 -NT_MASK = 0x00004000 -VM_MASK = 0x00020000 - -/* - * these are offsets into the task-struct. - */ -state = 0 -counter = 4 -priority = 8 -signal = 12 -blocked = 16 -flags = 20 -dbgreg6 = 52 -dbgreg7 = 56 -exec_domain = 60 - -ENOSYS = 38 - -#define SAVE_ALL \ - cld; \ - push %gs; \ - push %fs; \ - push %es; \ - push %ds; \ - pushl %eax; \ - pushl %ebp; \ - pushl %edi; \ - pushl %esi; \ - pushl %edx; \ - pushl %ecx; \ - pushl %ebx; \ - movl $(KERNEL_DS),%edx; \ - mov %dx,%ds; \ - mov %dx,%es; \ - movl $(USER_DS),%edx; \ - mov %dx,%fs; - -#ifdef __SMP__ - -#define GET_PROCESSOR_ID \ - movl SYMBOL_NAME(apic_reg), %edx; \ - movl 32(%edx), %eax;\ - movl %eax,SYMBOL_NAME(apic_retval); \ - shrl $24,%eax; \ - andb $0x0F,%al; - -/* - * Get the processor ID multiplied by 4 - */ - -#define GET_PROCESSOR_OFFSET(x) \ - movl SYMBOL_NAME(apic_reg), x ; \ - movl 32( x ), x ; \ - shrl $22, x ; \ - andl $0x3C, x ; - -/* macro LEAVE_KERNEL decrements kernel_counter and resets kernel_flag and - saves processor variables if zero */ -#define LEAVE_KERNEL \ - pushfl; \ - cli; \ - GET_PROCESSOR_ID \ - btrl $ SMP_FROM_SYSCALL,SYMBOL_NAME(smp_proc_in_lock)(,%eax,4); \ - decl SYMBOL_NAME(syscall_count); \ - decl SYMBOL_NAME(kernel_counter); \ - jnz 1f; \ - movb SYMBOL_NAME(saved_active_kernel_processor), %al; \ - movb %al, SYMBOL_NAME(active_kernel_processor); \ - cmpb $(NO_PROC_ID), %al; \ - jnz 1f; \ - lock; \ - btrl $0, SYMBOL_NAME(kernel_flag); \ -1: popfl; - -/* macro ENTER_KERNEL waits for entering the kernel, increments - kernel_counter, and reloads the processor variables if necessary - uses : %eax, %edx (pushed and popped) - - Note: We go to great pains to minimise the number of locked operations. - We want to spin without locking, and lock when we attempt an update. - The pentium has a MESI cache so the spin without lock will exit when - another CPU write invalidates our cache, and the lock is avoided when - possible so we don't play ping-pong games with the cache line. - -*/ - -#ifndef __SMP_PROF__ - -#define SMP_PROF_A -#define SMP_PROF_B - -#else - -#define SMP_PROF_A movl $0,SYMBOL_NAME(smp_spins_syscall_cur)(,%eax,4); -#define SMP_PROF_B incl SYMBOL_NAME(smp_spins_syscall)(,%eax,4); \ - incl SYMBOL_NAME(smp_spins_syscall_cur)(,%eax,4); -#endif - -#define ENTER_KERNEL \ - pushl %eax; \ - pushl %ebx; \ - pushl %ecx; \ - pushl %edx; \ - pushfl; \ - cli; \ - movl $6000, %ebx; \ - movl SYMBOL_NAME(smp_loops_per_tick), %ecx; \ - GET_PROCESSOR_ID \ - btsl $ SMP_FROM_SYSCALL,SYMBOL_NAME(smp_proc_in_lock)(,%eax,4); \ - SMP_PROF_A \ -1: lock; \ - btsl $0, SYMBOL_NAME(kernel_flag); \ - jnc 3f; \ - cmpb SYMBOL_NAME(active_kernel_processor), %al; \ - je 4f; \ -2: SMP_PROF_B \ - btl %eax, SYMBOL_NAME(smp_invalidate_needed); \ - jnc 5f; \ - lock; \ - btrl %eax, SYMBOL_NAME(smp_invalidate_needed); \ - jnc 5f; \ - movl %cr3,%edx; \ - movl %edx,%cr3; \ -5: sti; \ - decl %ecx; \ - cli; \ - jne 7f; \ - decl %ebx; \ - jne 6f; \ - call SYMBOL_NAME(non_irq_deadlock_detected); \ -6: movl SYMBOL_NAME(smp_loops_per_tick), %ecx; \ - cmpb SYMBOL_NAME(boot_cpu_id), %al; \ - jne 7f; \ - incl SYMBOL_NAME(jiffies); \ -7: btl $0, SYMBOL_NAME(kernel_flag); \ - jc 2b; \ - jmp 1b; \ -3: movb %al, SYMBOL_NAME(active_kernel_processor); \ -4: incl SYMBOL_NAME(kernel_counter); \ - incl SYMBOL_NAME(syscall_count); \ - popfl; \ - popl %edx; \ - popl %ecx; \ - popl %ebx; \ - popl %eax; - - -#define RESTORE_ALL \ - cmpw $(KERNEL_CS),CS(%esp); \ - je 1f; \ - GET_PROCESSOR_OFFSET(%edx) \ - movl SYMBOL_NAME(current_set)(,%edx), %eax ; ; \ - movl dbgreg7(%eax),%ebx; \ - movl %ebx,%db7; \ -1: LEAVE_KERNEL \ - popl %ebx; \ - popl %ecx; \ - popl %edx; \ - popl %esi; \ - popl %edi; \ - popl %ebp; \ - popl %eax; \ - pop %ds; \ - pop %es; \ - pop %fs; \ - pop %gs; \ - addl $4,%esp; \ - iret - -#else - -#define RESTORE_ALL \ - cmpw $(KERNEL_CS),CS(%esp); \ - je 1f; \ - movl SYMBOL_NAME(current_set),%eax; \ - movl dbgreg7(%eax),%ebx; \ - movl %ebx,%db7; \ -1: \ - popl %ebx; \ - popl %ecx; \ - popl %edx; \ - popl %esi; \ - popl %edi; \ - popl %ebp; \ - popl %eax; \ - pop %ds; \ - pop %es; \ - pop %fs; \ - pop %gs; \ - addl $4,%esp; \ - iret -#endif - -ENTRY(lcall7) - pushfl # We get a different stack layout with call gates, - pushl %eax # which has to be cleaned up later.. - SAVE_ALL -#ifdef __SMP__ - ENTER_KERNEL -#endif - movl EIP(%esp),%eax # due to call gates, this is eflags, not eip.. - movl CS(%esp),%edx # this is eip.. - movl EFLAGS(%esp),%ecx # and this is cs.. - movl %eax,EFLAGS(%esp) # - movl %edx,EIP(%esp) # Now we move them to their "normal" places - movl %ecx,CS(%esp) # - movl %esp,%eax -#ifdef __SMP__ - GET_PROCESSOR_OFFSET(%edx) # Processor offset into edx - movl SYMBOL_NAME(current_set)(,%edx),%edx -#else - movl SYMBOL_NAME(current_set),%edx -#endif - pushl %eax - movl exec_domain(%edx),%edx # Get the execution domain - movl 4(%edx),%edx # Get the lcall7 handler for the domain - call *%edx - popl %eax - jmp ret_from_sys_call - - ALIGN -handle_bottom_half: - incl SYMBOL_NAME(intr_count) - call SYMBOL_NAME(do_bottom_half) - decl SYMBOL_NAME(intr_count) - jmp 9f - ALIGN -reschedule: - pushl $ret_from_sys_call - jmp SYMBOL_NAME(schedule) # test - -ENTRY(system_call) - pushl %eax # save orig_eax - SAVE_ALL -#ifdef __SMP__ - ENTER_KERNEL -#endif - movl $-ENOSYS,EAX(%esp) - cmpl $(NR_syscalls),%eax - jae ret_from_sys_call - movl SYMBOL_NAME(sys_call_table)(,%eax,4),%eax - testl %eax,%eax - je ret_from_sys_call -#ifdef __SMP__ - GET_PROCESSOR_OFFSET(%edx) - movl SYMBOL_NAME(current_set)(,%edx),%ebx -#else - movl SYMBOL_NAME(current_set),%ebx -#endif - andl $~CF_MASK,EFLAGS(%esp) # clear carry - assume no errors - movl %db6,%edx - movl %edx,dbgreg6(%ebx) # save current hardware debugging status - testb $0x20,flags(%ebx) # PF_TRACESYS - jne 1f - call *%eax - movl %eax,EAX(%esp) # save the return value - jmp ret_from_sys_call - ALIGN -1: call SYMBOL_NAME(syscall_trace) - movl ORIG_EAX(%esp),%eax - call SYMBOL_NAME(sys_call_table)(,%eax,4) - movl %eax,EAX(%esp) # save the return value -#ifdef __SMP__ - GET_PROCESSOR_OFFSET(%eax) - movl SYMBOL_NAME(current_set)(,%eax),%eax -#else - movl SYMBOL_NAME(current_set),%eax -#endif - call SYMBOL_NAME(syscall_trace) - - ALIGN - .globl ret_from_sys_call -ret_from_sys_call: - cmpl $0,SYMBOL_NAME(intr_count) - jne 2f -9: movl SYMBOL_NAME(bh_mask),%eax - andl SYMBOL_NAME(bh_active),%eax - jne handle_bottom_half -#ifdef __SMP__ - cmpb $(NO_PROC_ID), SYMBOL_NAME(saved_active_kernel_processor) - jne 2f -#endif - movl EFLAGS(%esp),%eax # check VM86 flag: CS/SS are - testl $(VM_MASK),%eax # different then - jne 1f - cmpw $(KERNEL_CS),CS(%esp) # was old code segment supervisor ? - je 2f -1: sti - orl $(IF_MASK),%eax # these just try to make sure - andl $~NT_MASK,%eax # the program doesn't do anything - movl %eax,EFLAGS(%esp) # stupid - cmpl $0,SYMBOL_NAME(need_resched) - jne reschedule -#ifdef __SMP__ - GET_PROCESSOR_OFFSET(%eax) - movl SYMBOL_NAME(current_set)(,%eax), %eax -#else - movl SYMBOL_NAME(current_set),%eax -#endif - cmpl SYMBOL_NAME(task),%eax # task[0] cannot have signals - je 2f - movl blocked(%eax),%ecx - movl %ecx,%ebx # save blocked in %ebx for signal handling - notl %ecx - andl signal(%eax),%ecx - jne signal_return -2: RESTORE_ALL - ALIGN -signal_return: - movl %esp,%ecx - pushl %ecx - testl $(VM_MASK),EFLAGS(%ecx) - jne v86_signal_return - pushl %ebx - call SYMBOL_NAME(do_signal) - popl %ebx - popl %ebx - RESTORE_ALL - ALIGN -v86_signal_return: - call SYMBOL_NAME(save_v86_state) - movl %eax,%esp - pushl %eax - pushl %ebx - call SYMBOL_NAME(do_signal) - popl %ebx - popl %ebx - RESTORE_ALL - -ENTRY(divide_error) - pushl $0 # no error code - pushl $ SYMBOL_NAME(do_divide_error) - ALIGN -error_code: - push %fs - push %es - push %ds - pushl %eax - xorl %eax,%eax - pushl %ebp - pushl %edi - pushl %esi - pushl %edx - decl %eax # eax = -1 - pushl %ecx - pushl %ebx - cld - xorl %ebx,%ebx # zero ebx - xchgl %eax, ORIG_EAX(%esp) # orig_eax (get the error code. ) - mov %gs,%bx # get the lower order bits of gs - movl %esp,%edx - xchgl %ebx, GS(%esp) # get the address and save gs. - pushl %eax # push the error code - pushl %edx - movl $(KERNEL_DS),%edx - mov %dx,%ds - mov %dx,%es - movl $(USER_DS),%edx - mov %dx,%fs -#ifdef __SMP__ - ENTER_KERNEL - GET_PROCESSOR_OFFSET(%eax) - movl SYMBOL_NAME(current_set)(,%eax), %eax -#else - movl SYMBOL_NAME(current_set),%eax -#endif - movl %db6,%edx - movl %edx,dbgreg6(%eax) # save current hardware debugging status - call *%ebx - addl $8,%esp - jmp ret_from_sys_call - -ENTRY(coprocessor_error) - pushl $0 - pushl $ SYMBOL_NAME(do_coprocessor_error) - jmp error_code - -ENTRY(device_not_available) - pushl $-1 # mark this as an int - SAVE_ALL -#ifdef __SMP__ - ENTER_KERNEL -#endif - pushl $ret_from_sys_call - movl %cr0,%eax - testl $0x4,%eax # EM (math emulation bit) - je SYMBOL_NAME(math_state_restore) - pushl $0 # temporary storage for ORIG_EIP - call SYMBOL_NAME(math_emulate) - addl $4,%esp - ret - -ENTRY(debug) - pushl $0 - pushl $ SYMBOL_NAME(do_debug) - jmp error_code - -ENTRY(nmi) - pushl $0 - pushl $ SYMBOL_NAME(do_nmi) - jmp error_code - -ENTRY(int3) - pushl $0 - pushl $ SYMBOL_NAME(do_int3) - jmp error_code - -ENTRY(overflow) - pushl $0 - pushl $ SYMBOL_NAME(do_overflow) - jmp error_code - -ENTRY(bounds) - pushl $0 - pushl $ SYMBOL_NAME(do_bounds) - jmp error_code - -ENTRY(invalid_op) - pushl $0 - pushl $ SYMBOL_NAME(do_invalid_op) - jmp error_code - -ENTRY(coprocessor_segment_overrun) - pushl $0 - pushl $ SYMBOL_NAME(do_coprocessor_segment_overrun) - jmp error_code - -ENTRY(reserved) - pushl $0 - pushl $ SYMBOL_NAME(do_reserved) - jmp error_code - -ENTRY(double_fault) - pushl $ SYMBOL_NAME(do_double_fault) - jmp error_code - -ENTRY(invalid_TSS) - pushl $ SYMBOL_NAME(do_invalid_TSS) - jmp error_code - -ENTRY(segment_not_present) - pushl $ SYMBOL_NAME(do_segment_not_present) - jmp error_code - -ENTRY(stack_segment) - pushl $ SYMBOL_NAME(do_stack_segment) - jmp error_code - -ENTRY(general_protection) - pushl $ SYMBOL_NAME(do_general_protection) - jmp error_code - -ENTRY(alignment_check) - pushl $ SYMBOL_NAME(do_alignment_check) - jmp error_code - -ENTRY(page_fault) - pushl $ SYMBOL_NAME(do_page_fault) - jmp error_code - -ENTRY(spurious_interrupt_bug) - pushl $0 - pushl $ SYMBOL_NAME(do_spurious_interrupt_bug) - jmp error_code - -.data -ENTRY(sys_call_table) - .long SYMBOL_NAME(sys_setup) /* 0 */ - .long SYMBOL_NAME(sys_exit) - .long SYMBOL_NAME(sys_fork) - .long SYMBOL_NAME(sys_read) - .long SYMBOL_NAME(sys_write) - .long SYMBOL_NAME(sys_open) /* 5 */ - .long SYMBOL_NAME(sys_close) - .long SYMBOL_NAME(sys_waitpid) - .long SYMBOL_NAME(sys_creat) - .long SYMBOL_NAME(sys_link) - .long SYMBOL_NAME(sys_unlink) /* 10 */ - .long SYMBOL_NAME(sys_execve) - .long SYMBOL_NAME(sys_chdir) - .long SYMBOL_NAME(sys_time) - .long SYMBOL_NAME(sys_mknod) - .long SYMBOL_NAME(sys_chmod) /* 15 */ - .long SYMBOL_NAME(sys_chown) - .long SYMBOL_NAME(sys_break) - .long SYMBOL_NAME(sys_stat) - .long SYMBOL_NAME(sys_lseek) - .long SYMBOL_NAME(sys_getpid) /* 20 */ - .long SYMBOL_NAME(sys_mount) - .long SYMBOL_NAME(sys_umount) - .long SYMBOL_NAME(sys_setuid) - .long SYMBOL_NAME(sys_getuid) - .long SYMBOL_NAME(sys_stime) /* 25 */ - .long SYMBOL_NAME(sys_ptrace) - .long SYMBOL_NAME(sys_alarm) - .long SYMBOL_NAME(sys_fstat) - .long SYMBOL_NAME(sys_pause) - .long SYMBOL_NAME(sys_utime) /* 30 */ - .long SYMBOL_NAME(sys_stty) - .long SYMBOL_NAME(sys_gtty) - .long SYMBOL_NAME(sys_access) - .long SYMBOL_NAME(sys_nice) - .long SYMBOL_NAME(sys_ftime) /* 35 */ - .long SYMBOL_NAME(sys_sync) - .long SYMBOL_NAME(sys_kill) - .long SYMBOL_NAME(sys_rename) - .long SYMBOL_NAME(sys_mkdir) - .long SYMBOL_NAME(sys_rmdir) /* 40 */ - .long SYMBOL_NAME(sys_dup) - .long SYMBOL_NAME(sys_pipe) - .long SYMBOL_NAME(sys_times) - .long SYMBOL_NAME(sys_prof) - .long SYMBOL_NAME(sys_brk) /* 45 */ - .long SYMBOL_NAME(sys_setgid) - .long SYMBOL_NAME(sys_getgid) - .long SYMBOL_NAME(sys_signal) - .long SYMBOL_NAME(sys_geteuid) - .long SYMBOL_NAME(sys_getegid) /* 50 */ - .long SYMBOL_NAME(sys_acct) - .long SYMBOL_NAME(sys_phys) - .long SYMBOL_NAME(sys_lock) - .long SYMBOL_NAME(sys_ioctl) - .long SYMBOL_NAME(sys_fcntl) /* 55 */ - .long SYMBOL_NAME(sys_mpx) - .long SYMBOL_NAME(sys_setpgid) - .long SYMBOL_NAME(sys_ulimit) - .long SYMBOL_NAME(sys_olduname) - .long SYMBOL_NAME(sys_umask) /* 60 */ - .long SYMBOL_NAME(sys_chroot) - .long SYMBOL_NAME(sys_ustat) - .long SYMBOL_NAME(sys_dup2) - .long SYMBOL_NAME(sys_getppid) - .long SYMBOL_NAME(sys_getpgrp) /* 65 */ - .long SYMBOL_NAME(sys_setsid) - .long SYMBOL_NAME(sys_sigaction) - .long SYMBOL_NAME(sys_sgetmask) - .long SYMBOL_NAME(sys_ssetmask) - .long SYMBOL_NAME(sys_setreuid) /* 70 */ - .long SYMBOL_NAME(sys_setregid) - .long SYMBOL_NAME(sys_sigsuspend) - .long SYMBOL_NAME(sys_sigpending) - .long SYMBOL_NAME(sys_sethostname) - .long SYMBOL_NAME(sys_setrlimit) /* 75 */ - .long SYMBOL_NAME(sys_getrlimit) - .long SYMBOL_NAME(sys_getrusage) - .long SYMBOL_NAME(sys_gettimeofday) - .long SYMBOL_NAME(sys_settimeofday) - .long SYMBOL_NAME(sys_getgroups) /* 80 */ - .long SYMBOL_NAME(sys_setgroups) - .long SYMBOL_NAME(old_select) - .long SYMBOL_NAME(sys_symlink) - .long SYMBOL_NAME(sys_lstat) - .long SYMBOL_NAME(sys_readlink) /* 85 */ - .long SYMBOL_NAME(sys_uselib) - .long SYMBOL_NAME(sys_swapon) - .long SYMBOL_NAME(sys_reboot) - .long SYMBOL_NAME(old_readdir) - .long SYMBOL_NAME(old_mmap) /* 90 */ - .long SYMBOL_NAME(sys_munmap) - .long SYMBOL_NAME(sys_truncate) - .long SYMBOL_NAME(sys_ftruncate) - .long SYMBOL_NAME(sys_fchmod) - .long SYMBOL_NAME(sys_fchown) /* 95 */ - .long SYMBOL_NAME(sys_getpriority) - .long SYMBOL_NAME(sys_setpriority) - .long SYMBOL_NAME(sys_profil) - .long SYMBOL_NAME(sys_statfs) - .long SYMBOL_NAME(sys_fstatfs) /* 100 */ - .long SYMBOL_NAME(sys_ioperm) - .long SYMBOL_NAME(sys_socketcall) - .long SYMBOL_NAME(sys_syslog) - .long SYMBOL_NAME(sys_setitimer) - .long SYMBOL_NAME(sys_getitimer) /* 105 */ - .long SYMBOL_NAME(sys_newstat) - .long SYMBOL_NAME(sys_newlstat) - .long SYMBOL_NAME(sys_newfstat) - .long SYMBOL_NAME(sys_uname) - .long SYMBOL_NAME(sys_iopl) /* 110 */ - .long SYMBOL_NAME(sys_vhangup) - .long SYMBOL_NAME(sys_idle) - .long SYMBOL_NAME(sys_vm86old) - .long SYMBOL_NAME(sys_wait4) - .long SYMBOL_NAME(sys_swapoff) /* 115 */ - .long SYMBOL_NAME(sys_sysinfo) - .long SYMBOL_NAME(sys_ipc) - .long SYMBOL_NAME(sys_fsync) - .long SYMBOL_NAME(sys_sigreturn) - .long SYMBOL_NAME(sys_clone) /* 120 */ - .long SYMBOL_NAME(sys_setdomainname) - .long SYMBOL_NAME(sys_newuname) - .long SYMBOL_NAME(sys_modify_ldt) - .long SYMBOL_NAME(sys_adjtimex) - .long SYMBOL_NAME(sys_mprotect) /* 125 */ - .long SYMBOL_NAME(sys_sigprocmask) - .long SYMBOL_NAME(sys_create_module) - .long SYMBOL_NAME(sys_init_module) - .long SYMBOL_NAME(sys_delete_module) - .long SYMBOL_NAME(sys_get_kernel_syms) /* 130 */ - .long SYMBOL_NAME(sys_quotactl) - .long SYMBOL_NAME(sys_getpgid) - .long SYMBOL_NAME(sys_fchdir) - .long SYMBOL_NAME(sys_bdflush) - .long SYMBOL_NAME(sys_sysfs) /* 135 */ - .long SYMBOL_NAME(sys_personality) - .long 0 /* for afs_syscall */ - .long SYMBOL_NAME(sys_setfsuid) - .long SYMBOL_NAME(sys_setfsgid) - .long SYMBOL_NAME(sys_llseek) /* 140 */ - .long SYMBOL_NAME(sys_getdents) - .long SYMBOL_NAME(sys_select) - .long SYMBOL_NAME(sys_flock) - .long SYMBOL_NAME(sys_msync) - .long SYMBOL_NAME(sys_readv) /* 145 */ - .long SYMBOL_NAME(sys_writev) - .long SYMBOL_NAME(sys_getsid) - .long SYMBOL_NAME(sys_fdatasync) - .long SYMBOL_NAME(sys_sysctl) - .long SYMBOL_NAME(sys_mlock) /* 150 */ - .long SYMBOL_NAME(sys_munlock) - .long SYMBOL_NAME(sys_mlockall) - .long SYMBOL_NAME(sys_munlockall) - .long SYMBOL_NAME(sys_sched_setparam) - .long SYMBOL_NAME(sys_sched_getparam) /* 155 */ - .long SYMBOL_NAME(sys_sched_setscheduler) - .long SYMBOL_NAME(sys_sched_getscheduler) - .long SYMBOL_NAME(sys_sched_yield) - .long SYMBOL_NAME(sys_sched_get_priority_max) - .long SYMBOL_NAME(sys_sched_get_priority_min) /* 160 */ - .long SYMBOL_NAME(sys_sched_rr_get_interval) - .long SYMBOL_NAME(sys_nanosleep) - .long SYMBOL_NAME(sys_mremap) - .long 0,0 - .long SYMBOL_NAME(sys_vm86) - .long 0,0,0,0 /* 170 */ - .long 0,0,0,0,0,0,0,0,0,0 /* 180 */ - .long 0,0,0,0,0,0,0 - .long SYMBOL_NAME(sys_table) - .space (NR_syscalls-188)*4 diff --git a/kernel/table20/kernel.patch b/kernel/table20/kernel.patch deleted file mode 100644 index 37654b3d..00000000 --- a/kernel/table20/kernel.patch +++ /dev/null @@ -1,51 +0,0 @@ -diff -ur linux-2.0.32/Makefile linux-hacked/Makefile ---- linux-2.0.32/Makefile Fri Nov 7 19:51:05 1997 -+++ linux-hacked/Makefile Thu Jun 11 20:41:12 1998 -@@ -87,7 +87,7 @@ - # standard CFLAGS - # - --CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strength-reduce -+CFLAGS = -Wall -Wstrict-prototypes -g -O2 -fomit-frame-pointer -fno-strength-reduce - - ifdef CONFIG_CPP - CFLAGS := $(CFLAGS) -x c++ -@@ -113,12 +113,12 @@ - # Include the make variables (CC, etc...) - # - --ARCHIVES =kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o net/network.a -+ARCHIVES =kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o net/network.a table/table.o - FILESYSTEMS =fs/filesystems.a - DRIVERS =drivers/block/block.a \ - drivers/char/char.a - LIBS =$(TOPDIR)/lib/lib.a --SUBDIRS =kernel drivers mm fs net ipc lib -+SUBDIRS =kernel drivers mm fs net ipc lib table - - ifeq ($(CONFIG_ISDN),y) - DRIVERS := $(DRIVERS) drivers/isdn/isdn.a -diff -ur linux-2.0.32/arch/i386/kernel/entry.S linux-hacked/arch/i386/kernel/entry.S ---- linux-2.0.32/arch/i386/kernel/entry.S Tue Sep 16 23:42:45 1997 -+++ linux-hacked/arch/i386/kernel/entry.S Thu Jun 11 21:37:20 1998 -@@ -699,4 +699,8 @@ - .long SYMBOL_NAME(sys_mremap) - .long 0,0 - .long SYMBOL_NAME(sys_vm86) -- .space (NR_syscalls-166)*4 -+ .long 0,0,0,0 /* 170 */ -+ .long 0,0,0,0,0,0,0,0,0,0 /* 180 */ -+ .long 0,0,0,0,0,0,0 -+ .long SYMBOL_NAME(sys_table) -+ .space (NR_syscalls-188)*4 -diff -ur linux-2.0.32/include/asm-i386/unistd.h linux-hacked/include/asm-i386/unistd.h ---- linux-2.0.32/include/asm-i386/unistd.h Fri Mar 22 07:34:02 1996 -+++ linux-hacked/include/asm-i386/unistd.h Thu Jun 11 21:37:03 1998 -@@ -169,6 +169,7 @@ - #define __NR_sched_rr_get_interval 161 - #define __NR_nanosleep 162 - #define __NR_mremap 163 -+#define __NR_table 188 - - /* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */ - #define _syscall0(type,name) \ diff --git a/kernel/table20/main.c b/kernel/table20/main.c deleted file mode 100644 index 9889c9fd..00000000 --- a/kernel/table20/main.c +++ /dev/null @@ -1,468 +0,0 @@ -/* - * linux/table/table_impl.c - * Copyright (C) 1998 Martin Baulig - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#include "version.h" - -#if defined(__i386__) -# define KSTK_EIP(tsk) (((unsigned long *)tsk->kernel_stack_page)[1019]) -# define KSTK_ESP(tsk) (((unsigned long *)tsk->kernel_stack_page)[1022]) -#elif defined(__alpha__) - /* - * See arch/alpha/kernel/ptrace.c for details. - */ -# define PT_REG(reg) (PAGE_SIZE - sizeof(struct pt_regs) \ - + (long)&((struct pt_regs *)0)->reg) -# define KSTK_EIP(tsk) (*(unsigned long *)(tsk->kernel_stack_page + PT_REG(pc))) -# define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->tss.usp) -#elif defined(__sparc__) -# define PT_REG(reg) (PAGE_SIZE - sizeof(struct pt_regs) \ - + (long)&((struct pt_regs *)0)->reg) -# define KSTK_EIP(tsk) (*(unsigned long *)(tsk->kernel_stack_page + PT_REG(pc))) -# define KSTK_ESP(tsk) (*(unsigned long *)(tsk->kernel_stack_page + PT_REG(u_regs[UREG_FP]))) -#endif - -static struct task_struct * -get_task (pid_t pid) -{ - struct task_struct ** p; - - p = task; - while (++p < task+NR_TASKS) { - if (*p && (*p)->pid == pid) - return *p; - } - - return NULL; -} - -static inline void statm_pte_range(pmd_t * pmd, unsigned long address, unsigned long size, - int * pages, int * shared, int * dirty, int * total) -{ - pte_t * pte; - unsigned long end; - - if (pmd_none(*pmd)) - return; - if (pmd_bad(*pmd)) { - printk("statm_pte_range: bad pmd (%08lx)\n", pmd_val(*pmd)); - pmd_clear(pmd); - return; - } - pte = pte_offset(pmd, address); - address &= ~PMD_MASK; - end = address + size; - if (end > PMD_SIZE) - end = PMD_SIZE; - do { - pte_t page = *pte; - - address += PAGE_SIZE; - pte++; - if (pte_none(page)) - continue; - ++*total; - if (!pte_present(page)) - continue; - ++*pages; - if (pte_dirty(page)) - ++*dirty; - if (pte_page(page) >= high_memory) - continue; - if (mem_map[MAP_NR(pte_page(page))].count > 1) - ++*shared; - } while (address < end); -} - -static inline void statm_pmd_range(pgd_t * pgd, unsigned long address, unsigned long size, - int * pages, int * shared, int * dirty, int * total) -{ - pmd_t * pmd; - unsigned long end; - - if (pgd_none(*pgd)) - return; - if (pgd_bad(*pgd)) { - printk("statm_pmd_range: bad pgd (%08lx)\n", pgd_val(*pgd)); - pgd_clear(pgd); - return; - } - pmd = pmd_offset(pgd, address); - address &= ~PGDIR_MASK; - end = address + size; - if (end > PGDIR_SIZE) - end = PGDIR_SIZE; - do { - statm_pte_range(pmd, address, end - address, pages, shared, dirty, total); - address = (address + PMD_SIZE) & PMD_MASK; - pmd++; - } while (address < end); -} - -static void statm_pgd_range(pgd_t * pgd, unsigned long address, unsigned long end, - int * pages, int * shared, int * dirty, int * total) -{ - while (address < end) { - statm_pmd_range(pgd, address, end - address, pages, shared, dirty, total); - address = (address + PGDIR_SIZE) & PGDIR_MASK; - pgd++; - } -} - -static unsigned long -get_wchan (struct task_struct *p) -{ - if (!p || p == current || p->state == TASK_RUNNING) - return 0; -#if defined(__i386__) - { - unsigned long ebp, eip; - unsigned long stack_page; - int count = 0; - - stack_page = p->kernel_stack_page; - if (!stack_page) - return 0; - ebp = p->tss.ebp; - do { - if (ebp < stack_page || ebp >= 4092+stack_page) - return 0; - eip = *(unsigned long *) (ebp+4); - if (eip < (unsigned long) interruptible_sleep_on - || eip >= (unsigned long) add_timer) - return eip; - ebp = *(unsigned long *) ebp; - } while (count++ < 16); - } -#elif defined(__alpha__) - /* - * This one depends on the frame size of schedule(). Do a - * "disass schedule" in gdb to find the frame size. Also, the - * code assumes that sleep_on() follows immediately after - * interruptible_sleep_on() and that add_timer() follows - * immediately after interruptible_sleep(). Ugly, isn't it? - * Maybe adding a wchan field to task_struct would be better, - * after all... - */ - { - unsigned long schedule_frame; - unsigned long pc; - - pc = thread_saved_pc(&p->tss); - if (pc >= (unsigned long) interruptible_sleep_on && pc < (unsigned long) add_timer) { - schedule_frame = ((unsigned long *)p->tss.ksp)[6]; - return ((unsigned long *)schedule_frame)[12]; - } - return pc; - } -#endif - return 0; -} - -asmlinkage int -sys_table (int type, union table *buf, const void *param) -{ - union table tbl; - struct sysinfo i; - struct task_struct *tsk = NULL; - struct ip_chain *chain; - struct ip_fwkernel *rule; - char devname [9]; - int index, err; - pid_t pid; - - if (type == TABLE_VERSION) - return _TABLE_VERSION; - - if (!buf) - return -EFAULT; - - memset (&tbl, 0, sizeof (union table)); - - /* For TABLE_PROC_*, read pid and get task_struct */ - - switch (type) { - case TABLE_PROC_UID: - case TABLE_PROC_MEM: - case TABLE_PROC_SEGMENT: - case TABLE_PROC_TIME: - case TABLE_PROC_STATE: - case TABLE_PROC_SIGNAL: - case TABLE_PROC_KERNEL: - err = verify_area (VERIFY_READ, param, sizeof (pid_t)); - if (err) - return err; - memcpy_fromfs (&pid, param, sizeof (pid_t)); - - tsk = get_task (pid); - if (tsk == NULL) - return -ESRCH; - break; - case TABLE_NETACCT: - err = verify_area (VERIFY_READ, param, 5); - if (err) - return err; - copy_from_user (devname, param, 5); - devname [5] = 0; - - break; - } - - /* Main function dispatcher */ - - switch (type) { - case TABLE_PROCLIST: - tsk = task [0]; - for (index = 0; index < nr_tasks; index++) { - tbl.proclist.pids [index] = tsk->pid; - tsk = tsk->next_task; - } - tbl.proclist.nr_running = nr_running; - tbl.proclist.nr_tasks = nr_tasks; - tbl.proclist.last_pid = last_pid; - break; - case TABLE_CPU: - tbl.cpu.total = jiffies; - tbl.cpu.user = kstat.cpu_user; - tbl.cpu.nice = kstat.cpu_nice; - tbl.cpu.sys = kstat.cpu_system; - tbl.cpu.idle = tbl.cpu.total - - (tbl.cpu.user + tbl.cpu.nice + tbl.cpu.sys); - tbl.cpu.frequency = HZ; - break; - case TABLE_MEM: - si_meminfo (&i); - tbl.mem.total = i.totalram; - tbl.mem.used = i.totalram - i.freeram; - tbl.mem.free = i.freeram; - tbl.mem.shared = i.sharedram; - tbl.mem.buffer = i.bufferram; - tbl.mem.cached = page_cache_size << PAGE_SHIFT; - break; - case TABLE_SWAP: - si_swapinfo (&i); - tbl.swap.total = i.totalswap; - tbl.swap.used = i.totalswap - i.freeswap; - tbl.swap.free = i.freeswap; - tbl.swap.pagein = kstat.pswpin; - tbl.swap.pageout = kstat.pswpout; - break; - case TABLE_LOADAVG: - tbl.loadavg.loadavg [0] = (double) avenrun [0] / (1 << FSHIFT); - tbl.loadavg.loadavg [1] = (double) avenrun [1] / (1 << FSHIFT); - tbl.loadavg.loadavg [2] = (double) avenrun [2] / (1 << FSHIFT); - tbl.loadavg.nr_running = nr_running; - tbl.loadavg.nr_tasks = nr_tasks; - tbl.loadavg.last_pid = last_pid; - break; - case TABLE_UPTIME: - tbl.uptime.uptime = jiffies; - tbl.uptime.idle = task[0]->utime + task[0]->stime; - break; - case TABLE_PROC_STATE: - tbl.proc_state.state = tsk->state; - tbl.proc_state.flags = tsk->flags; - memcpy (tbl.proc_state.comm, tsk->comm, - sizeof (tbl.proc_state.comm)); - break; - case TABLE_PROC_UID: - tbl.proc_uid.uid = tsk->uid; - tbl.proc_uid.euid = tsk->euid; - tbl.proc_uid.suid = tsk->suid; - tbl.proc_uid.fsuid = tsk->fsuid; - - tbl.proc_uid.gid = tsk->gid; - tbl.proc_uid.egid = tsk->egid; - tbl.proc_uid.sgid = tsk->sgid; - tbl.proc_uid.fsgid = tsk->fsgid; - - tbl.proc_uid.pid = tsk->pid; - tbl.proc_uid.pgrp = tsk->pgrp; - tbl.proc_uid.ppid = tsk->p_pptr->pid; - - tbl.proc_uid.session = tsk->session; - tbl.proc_uid.tty = tsk->tty ? - kdev_t_to_nr (tsk->tty->device) : 0; - tbl.proc_uid.tpgid = tsk->tty ? tsk->tty->pgrp : -1; - - tbl.proc_uid.priority = tsk->priority; - tbl.proc_uid.counter = tsk->counter; - tbl.proc_uid.def_priority = DEF_PRIORITY; - break; - case TABLE_PROC_SIGNAL: - tbl.proc_signal.signal = tsk->signal; - tbl.proc_signal.blocked = tsk->blocked; - - if (tsk->sig) { - struct sigaction * action = tsk->sig->action; - unsigned long sig_ign = 0, sig_caught = 0; - unsigned long bit = 1; - int i; - - for (i = 0; i < 32; i++) { - switch((unsigned long) action->sa_handler) { - case 0: - break; - case 1: - sig_ign |= bit; - break; - default: - sig_caught |= bit; - } - bit <<= 1; - action++; - } - - tbl.proc_signal.ignored = sig_ign; - tbl.proc_signal.caught = sig_caught; - } else { - tbl.proc_signal.ignored = 0; - tbl.proc_signal.caught = 0; - } - break; - case TABLE_PROC_MEM: - if (tsk->mm && tsk->mm != &init_mm) { - tbl.proc_mem.context = tsk->mm->context; - tbl.proc_mem.start_code = tsk->mm->start_code; - tbl.proc_mem.end_code = tsk->mm->end_code; - tbl.proc_mem.start_data = tsk->mm-> start_data; - tbl.proc_mem.end_data = tsk->mm->end_data; - tbl.proc_mem.start_brk = tsk->mm->start_brk; - tbl.proc_mem.brk = tsk->mm->brk; - tbl.proc_mem.start_stack = tsk->mm->start_stack; - tbl.proc_mem.start_mmap = tsk->mm->start_mmap; - tbl.proc_mem.arg_start = tsk->mm->arg_start; - tbl.proc_mem.arg_end = tsk->mm->arg_end; - tbl.proc_mem.env_start = tsk->mm->env_start; - tbl.proc_mem.env_end = tsk->mm->env_end; - tbl.proc_mem.rss = tsk->mm->rss; - tbl.proc_mem.total_vm = tsk->mm->total_vm; - tbl.proc_mem.locked_vm = tsk->mm->locked_vm; - } - tbl.proc_mem.rlim = tsk->rlim ? - tsk->rlim[RLIMIT_RSS].rlim_cur : 0; - break; - case TABLE_PROC_SEGMENT: - if (tsk->mm && tsk->mm != &init_mm) { - unsigned long vsize = 0; - int size = 0, resident = 0, share = 0; - int trs = 0, lrs = 0, drs = 0, dt = 0; - struct vm_area_struct * vma = tsk->mm->mmap; - - while (vma) { - pgd_t *pgd = pgd_offset(tsk->mm, vma->vm_start); - int pages = 0, shared = 0, dirty = 0, total = 0; - - vsize += vma->vm_end - vma->vm_start; - - statm_pgd_range (pgd, vma->vm_start, vma->vm_end, - &pages, &shared, &dirty, &total); - resident += pages; - share += shared; - dt += dirty; - size += total; - if (vma->vm_flags & VM_EXECUTABLE) - trs += pages; /* text */ - else if (vma->vm_flags & VM_GROWSDOWN) - drs += pages; /* stack */ - else if (vma->vm_end > 0x60000000) - lrs += pages; /* library */ - else - drs += pages; - vma = vma->vm_next; - } - - tbl.proc_segment.vsize = vsize; - tbl.proc_segment.size = size; - tbl.proc_segment.resident = resident; - tbl.proc_segment.shared = share; - tbl.proc_segment.trs = trs; - tbl.proc_segment.lrs = lrs; - tbl.proc_segment.dt = dt; - } - break; - case TABLE_PROC_TIME: - tbl.proc_time.utime = tsk->utime; - tbl.proc_time.stime = tsk->stime; - tbl.proc_time.cutime = tsk->cutime; - tbl.proc_time.cstime = tsk->cstime; - - tbl.proc_time.start_time = tsk->start_time; - tbl.proc_time.timeout = tsk->timeout; - tbl.proc_time.policy = tsk->policy; - tbl.proc_time.rt_priority = tsk->rt_priority; - - tbl.proc_time.it_real_value = tsk->it_real_value; - tbl.proc_time.it_prof_value = tsk->it_prof_value; - tbl.proc_time.it_virt_value = tsk->it_virt_value; - tbl.proc_time.it_real_incr = tsk->it_real_incr; - tbl.proc_time.it_prof_incr = tsk->it_prof_incr; - tbl.proc_time.it_virt_incr = tsk->it_virt_incr; - break; - case TABLE_PROC_KERNEL: - tbl.proc_kernel.min_flt = tsk->min_flt; - tbl.proc_kernel.cmin_flt = tsk->cmin_flt; - tbl.proc_kernel.maj_flt = tsk->maj_flt; - tbl.proc_kernel.cmaj_flt = tsk->cmaj_flt; - - tbl.proc_kernel.kesp = tsk->kernel_stack_page ? KSTK_EIP(tsk) : 0; - tbl.proc_kernel.keip = tsk->kernel_stack_page ? KSTK_ESP(tsk) : 0; - - tbl.proc_kernel.nswap = tsk->nswap; - tbl.proc_kernel.cnswap = tsk->cnswap; - - tbl.proc_kernel.wchan = get_wchan (tsk); - break; - case TABLE_NETACCT: - for (chain = ip_fw_chains; chain; chain = chain->next) { - for (rule = chain->chain; rule; rule = rule->next) { - const char *name = rule->ipfw.fw_vianame; - int k; - - if (name [0] && !strncmp (param, name, 5)) - continue; - - for (k = 0; k < NUM_SLOTS; k++) { - tbl.netacct.packets += - rule->counters[k].pcnt; - tbl.netacct.bytes += - rule->counters[k].bcnt; - } - } - } - break; - default: - return -EINVAL; - } - - err = verify_area (VERIFY_WRITE, buf, sizeof (struct table)); - if (err) - return err; - - memcpy_tofs (buf, &tbl, sizeof (union table)); - return 0; -} diff --git a/kernel/table20/unistd-i386.h b/kernel/table20/unistd-i386.h deleted file mode 100644 index 4e379bc1..00000000 --- a/kernel/table20/unistd-i386.h +++ /dev/null @@ -1,324 +0,0 @@ -#ifndef _ASM_I386_UNISTD_H_ -#define _ASM_I386_UNISTD_H_ - -/* - * This file contains the system call numbers. - */ - -#define __NR_setup 0 /* used only by init, to get system going */ -#define __NR_exit 1 -#define __NR_fork 2 -#define __NR_read 3 -#define __NR_write 4 -#define __NR_open 5 -#define __NR_close 6 -#define __NR_waitpid 7 -#define __NR_creat 8 -#define __NR_link 9 -#define __NR_unlink 10 -#define __NR_execve 11 -#define __NR_chdir 12 -#define __NR_time 13 -#define __NR_mknod 14 -#define __NR_chmod 15 -#define __NR_chown 16 -#define __NR_break 17 -#define __NR_oldstat 18 -#define __NR_lseek 19 -#define __NR_getpid 20 -#define __NR_mount 21 -#define __NR_umount 22 -#define __NR_setuid 23 -#define __NR_getuid 24 -#define __NR_stime 25 -#define __NR_ptrace 26 -#define __NR_alarm 27 -#define __NR_oldfstat 28 -#define __NR_pause 29 -#define __NR_utime 30 -#define __NR_stty 31 -#define __NR_gtty 32 -#define __NR_access 33 -#define __NR_nice 34 -#define __NR_ftime 35 -#define __NR_sync 36 -#define __NR_kill 37 -#define __NR_rename 38 -#define __NR_mkdir 39 -#define __NR_rmdir 40 -#define __NR_dup 41 -#define __NR_pipe 42 -#define __NR_times 43 -#define __NR_prof 44 -#define __NR_brk 45 -#define __NR_setgid 46 -#define __NR_getgid 47 -#define __NR_signal 48 -#define __NR_geteuid 49 -#define __NR_getegid 50 -#define __NR_acct 51 -#define __NR_phys 52 -#define __NR_lock 53 -#define __NR_ioctl 54 -#define __NR_fcntl 55 -#define __NR_mpx 56 -#define __NR_setpgid 57 -#define __NR_ulimit 58 -#define __NR_oldolduname 59 -#define __NR_umask 60 -#define __NR_chroot 61 -#define __NR_ustat 62 -#define __NR_dup2 63 -#define __NR_getppid 64 -#define __NR_getpgrp 65 -#define __NR_setsid 66 -#define __NR_sigaction 67 -#define __NR_sgetmask 68 -#define __NR_ssetmask 69 -#define __NR_setreuid 70 -#define __NR_setregid 71 -#define __NR_sigsuspend 72 -#define __NR_sigpending 73 -#define __NR_sethostname 74 -#define __NR_setrlimit 75 -#define __NR_getrlimit 76 -#define __NR_getrusage 77 -#define __NR_gettimeofday 78 -#define __NR_settimeofday 79 -#define __NR_getgroups 80 -#define __NR_setgroups 81 -#define __NR_select 82 -#define __NR_symlink 83 -#define __NR_oldlstat 84 -#define __NR_readlink 85 -#define __NR_uselib 86 -#define __NR_swapon 87 -#define __NR_reboot 88 -#define __NR_readdir 89 -#define __NR_mmap 90 -#define __NR_munmap 91 -#define __NR_truncate 92 -#define __NR_ftruncate 93 -#define __NR_fchmod 94 -#define __NR_fchown 95 -#define __NR_getpriority 96 -#define __NR_setpriority 97 -#define __NR_profil 98 -#define __NR_statfs 99 -#define __NR_fstatfs 100 -#define __NR_ioperm 101 -#define __NR_socketcall 102 -#define __NR_syslog 103 -#define __NR_setitimer 104 -#define __NR_getitimer 105 -#define __NR_stat 106 -#define __NR_lstat 107 -#define __NR_fstat 108 -#define __NR_olduname 109 -#define __NR_iopl 110 -#define __NR_vhangup 111 -#define __NR_idle 112 -#define __NR_vm86 113 -#define __NR_wait4 114 -#define __NR_swapoff 115 -#define __NR_sysinfo 116 -#define __NR_ipc 117 -#define __NR_fsync 118 -#define __NR_sigreturn 119 -#define __NR_clone 120 -#define __NR_setdomainname 121 -#define __NR_uname 122 -#define __NR_modify_ldt 123 -#define __NR_adjtimex 124 -#define __NR_mprotect 125 -#define __NR_sigprocmask 126 -#define __NR_create_module 127 -#define __NR_init_module 128 -#define __NR_delete_module 129 -#define __NR_get_kernel_syms 130 -#define __NR_quotactl 131 -#define __NR_getpgid 132 -#define __NR_fchdir 133 -#define __NR_bdflush 134 -#define __NR_sysfs 135 -#define __NR_personality 136 -#define __NR_afs_syscall 137 /* Syscall for Andrew File System */ -#define __NR_setfsuid 138 -#define __NR_setfsgid 139 -#define __NR__llseek 140 -#define __NR_getdents 141 -#define __NR__newselect 142 -#define __NR_flock 143 -#define __NR_msync 144 -#define __NR_readv 145 -#define __NR_writev 146 -#define __NR_getsid 147 -#define __NR_fdatasync 148 -#define __NR__sysctl 149 -#define __NR_mlock 150 -#define __NR_munlock 151 -#define __NR_mlockall 152 -#define __NR_munlockall 153 -#define __NR_sched_setparam 154 -#define __NR_sched_getparam 155 -#define __NR_sched_setscheduler 156 -#define __NR_sched_getscheduler 157 -#define __NR_sched_yield 158 -#define __NR_sched_get_priority_max 159 -#define __NR_sched_get_priority_min 160 -#define __NR_sched_rr_get_interval 161 -#define __NR_nanosleep 162 -#define __NR_mremap 163 -#define __NR_table 188 - -/* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */ -#define _syscall0(type,name) \ -type name(void) \ -{ \ -long __res; \ -__asm__ volatile ("int $0x80" \ - : "=a" (__res) \ - : "0" (__NR_##name)); \ -if (__res >= 0) \ - return (type) __res; \ -errno = -__res; \ -return -1; \ -} - -#define _syscall1(type,name,type1,arg1) \ -type name(type1 arg1) \ -{ \ -long __res; \ -__asm__ volatile ("int $0x80" \ - : "=a" (__res) \ - : "0" (__NR_##name),"b" ((long)(arg1))); \ -if (__res >= 0) \ - return (type) __res; \ -errno = -__res; \ -return -1; \ -} - -#define _syscall2(type,name,type1,arg1,type2,arg2) \ -type name(type1 arg1,type2 arg2) \ -{ \ -long __res; \ -__asm__ volatile ("int $0x80" \ - : "=a" (__res) \ - : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2))); \ -if (__res >= 0) \ - return (type) __res; \ -errno = -__res; \ -return -1; \ -} - -#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ -type name(type1 arg1,type2 arg2,type3 arg3) \ -{ \ -long __res; \ -__asm__ volatile ("int $0x80" \ - : "=a" (__res) \ - : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \ - "d" ((long)(arg3))); \ -if (__res>=0) \ - return (type) __res; \ -errno=-__res; \ -return -1; \ -} - -#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ -type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ -{ \ -long __res; \ -__asm__ volatile ("int $0x80" \ - : "=a" (__res) \ - : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \ - "d" ((long)(arg3)),"S" ((long)(arg4))); \ -if (__res>=0) \ - return (type) __res; \ -errno=-__res; \ -return -1; \ -} - -#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ - type5,arg5) \ -type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ -{ \ -long __res; \ -__asm__ volatile ("int $0x80" \ - : "=a" (__res) \ - : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \ - "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5))); \ -if (__res>=0) \ - return (type) __res; \ -errno=-__res; \ -return -1; \ -} - -#ifdef __KERNEL_SYSCALLS__ - -/* - * we need this inline - forking from kernel space will result - * in NO COPY ON WRITE (!!!), until an execve is executed. This - * is no problem, but for the stack. This is handled by not letting - * main() use the stack at all after fork(). Thus, no function - * calls - which means inline code for fork too, as otherwise we - * would use the stack upon exit from 'fork()'. - * - * Actually only pause and fork are needed inline, so that there - * won't be any messing with the stack from main(), but we define - * some others too. - */ -#define __NR__exit __NR_exit -static inline _syscall0(int,idle) -static inline _syscall0(int,fork) -static inline _syscall2(int,clone,unsigned long,flags,char *,esp) -static inline _syscall0(int,pause) -static inline _syscall0(int,setup) -static inline _syscall0(int,sync) -static inline _syscall0(pid_t,setsid) -static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count) -static inline _syscall1(int,dup,int,fd) -static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp) -static inline _syscall3(int,open,const char *,file,int,flag,int,mode) -static inline _syscall1(int,close,int,fd) -static inline _syscall1(int,_exit,int,exitcode) -static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options) - -static inline pid_t wait(int * wait_stat) -{ - return waitpid(-1,wait_stat,0); -} - -/* - * This is the mechanism for creating a new kernel thread. - * - * NOTE! Only a kernel-only process(ie the swapper or direct descendants - * who haven't done an "execve()") should use this: it will work within - * a system call from a "real" process, but the process memory space will - * not be free'd until both the parent and the child have exited. - */ -static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) -{ - long retval; - - __asm__ __volatile__( - "movl %%esp,%%esi\n\t" - "int $0x80\n\t" /* Linux/i386 system call */ - "cmpl %%esp,%%esi\n\t" /* child or parent? */ - "je 1f\n\t" /* parent - jump */ - "pushl %3\n\t" /* push argument */ - "call *%4\n\t" /* call fn */ - "movl %2,%0\n\t" /* exit */ - "int $0x80\n" - "1:\t" - :"=a" (retval) - :"0" (__NR_clone), "i" (__NR_exit), - "r" (arg), "r" (fn), - "b" (flags | CLONE_VM) - :"si"); - return retval; -} - -#endif - -#endif /* _ASM_I386_UNISTD_H_ */ diff --git a/kernel/table20/version.h b/kernel/table20/version.h deleted file mode 100644 index d47411ee..00000000 --- a/kernel/table20/version.h +++ /dev/null @@ -1 +0,0 @@ -#define _TABLE_VERSION 1 diff --git a/kernel/table21/.cvsignore b/kernel/table21/.cvsignore deleted file mode 100644 index a7ab2843..00000000 --- a/kernel/table21/.cvsignore +++ /dev/null @@ -1,4 +0,0 @@ -kernel.patch -.main.o.flags -.table.o.flags -.module.o.flags diff --git a/kernel/table21/Makefile b/kernel/table21/Makefile deleted file mode 100644 index 2eedd527..00000000 --- a/kernel/table21/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -# -# Makefile for the linux system information tables. -# -# Note! Dependencies are done automagically by 'make dep', which also -# removes any old dependencies. DON'T put your own dependencies here -# unless it's something special (ie not a .c file). -# -# Note 2! The CFLAGS definition is now in the main makefile... - -O_TARGET := table.o -OX_OBJS := main.o - -M_TARGET := table_mod.o -MX_OBJS := module.o - -include $(TOPDIR)/Rules.make diff --git a/kernel/table21/README b/kernel/table21/README deleted file mode 100644 index 88d26bec..00000000 --- a/kernel/table21/README +++ /dev/null @@ -1,21 +0,0 @@ -This is a new system call `table ()' for the Linux table. It is faster -than reading from /proc and can be used to fetch all information required -for libgtop until whe have some other function (extended sysctl, ...) in -standard kernels. - -I didn't want to change sysctl or some other function myself cause this may -cause other applications relying upon those function to fail. This is -something for the ``real'' kernel gurus ... - -To use this new system call for libgtop, do the following: - -* Copy this directory to /usr/src/linux/table -* Make /usr/src/linux/include/linux/table.h symlink to /usr/src/linux/table/table.h -* Apply the patch `kernel.patch' to the kernel, compile, install and reboot -* Recompile libgtop (remove `config.cache' and run the `autogen.sh' again). - -If you want to change and/or add something - feel free to do so ! - -Have fun, - -Martin diff --git a/kernel/table21/entry-i386.S b/kernel/table21/entry-i386.S deleted file mode 100644 index fb734fbc..00000000 --- a/kernel/table21/entry-i386.S +++ /dev/null @@ -1,571 +0,0 @@ -/* - * linux/arch/i386/entry.S - * - * Copyright (C) 1991, 1992 Linus Torvalds - */ - -/* - * entry.S contains the system-call and fault low-level handling routines. - * This also contains the timer-interrupt handler, as well as all interrupts - * and faults that can result in a task-switch. - * - * NOTE: This code handles signal-recognition, which happens every time - * after a timer-interrupt and after each system call. - * - * I changed all the .align's to 4 (16 byte alignment), as that's faster - * on a 486. - * - * Stack layout in 'ret_from_system_call': - * ptrace needs to have all regs on the stack. - * if the order here is changed, it needs to be - * updated in fork.c:copy_process, signal.c:do_signal, - * ptrace.c and ptrace.h - * - * 0(%esp) - %ebx - * 4(%esp) - %ecx - * 8(%esp) - %edx - * C(%esp) - %esi - * 10(%esp) - %edi - * 14(%esp) - %ebp - * 18(%esp) - %eax - * 1C(%esp) - %ds - * 20(%esp) - %es - * 24(%esp) - orig_eax - * 28(%esp) - %eip - * 2C(%esp) - %cs - * 30(%esp) - %eflags - * 34(%esp) - %oldesp - * 38(%esp) - %oldss - * - * "current" is in register %ebx during any slow entries. - */ - -#include -#include -#include -#define ASSEMBLY -#include - -EBX = 0x00 -ECX = 0x04 -EDX = 0x08 -ESI = 0x0C -EDI = 0x10 -EBP = 0x14 -EAX = 0x18 -DS = 0x1C -ES = 0x20 -ORIG_EAX = 0x24 -EIP = 0x28 -CS = 0x2C -EFLAGS = 0x30 -OLDESP = 0x34 -OLDSS = 0x38 - -CF_MASK = 0x00000001 -IF_MASK = 0x00000200 -NT_MASK = 0x00004000 -VM_MASK = 0x00020000 - -/* - * these are offsets into the task-struct. - */ -state = 0 -flags = 4 -sigpending = 8 -addr_limit = 12 -exec_domain = 16 -need_resched = 20 - -ENOSYS = 38 - - -#define SAVE_ALL \ - cld; \ - pushl %es; \ - pushl %ds; \ - pushl %eax; \ - pushl %ebp; \ - pushl %edi; \ - pushl %esi; \ - pushl %edx; \ - pushl %ecx; \ - pushl %ebx; \ - movl $(__KERNEL_DS),%edx; \ - movl %dx,%ds; \ - movl %dx,%es; - -#define RESTORE_ALL \ - popl %ebx; \ - popl %ecx; \ - popl %edx; \ - popl %esi; \ - popl %edi; \ - popl %ebp; \ - popl %eax; \ -1: popl %ds; \ -2: popl %es; \ -3: addl $4,%esp; \ - iret; \ -.section fixup,"ax"; \ -4: pushl $0; \ - popl %ds; \ - jmp 2b; \ -5: pushl $0; \ - popl %es; \ - jmp 3b; \ -.previous; \ -.section __ex_table,"a";\ - .align 4; \ - .long 1b,4b; \ - .long 2b,5b; \ -.previous - -#define GET_CURRENT(reg) \ - movl %esp, reg; \ - andl $-8192, reg; - -ENTRY(lcall7) - pushfl # We get a different stack layout with call gates, - pushl %eax # which has to be cleaned up later.. - SAVE_ALL - movl EIP(%esp),%eax # due to call gates, this is eflags, not eip.. - movl CS(%esp),%edx # this is eip.. - movl EFLAGS(%esp),%ecx # and this is cs.. - movl %eax,EFLAGS(%esp) # - movl %edx,EIP(%esp) # Now we move them to their "normal" places - movl %ecx,CS(%esp) # - movl %esp,%ebx - pushl %ebx - andl $-8192,%ebx # GET_CURRENT - movl exec_domain(%ebx),%edx # Get the execution domain - movl 4(%edx),%edx # Get the lcall7 handler for the domain - call *%edx - popl %eax - jmp ret_from_sys_call - - -#ifdef __SMP__ - ALIGN - .globl ret_from_smpfork -ret_from_smpfork: - GET_CURRENT(%ebx) - btrl $0, SYMBOL_NAME(scheduler_lock) - jmp ret_from_sys_call -#endif /* __SMP__ */ - -/* - * Return to user mode is not as complex as all this looks, - * but we want the default path for a system call return to - * go as quickly as possible which is why some of this is - * less clear than it otherwise should be. - */ - -ENTRY(system_call) - pushl %eax # save orig_eax - SAVE_ALL - GET_CURRENT(%ebx) - cmpl $(NR_syscalls),%eax - jae badsys - testb $0x20,flags(%ebx) # PF_TRACESYS - jne tracesys - call *SYMBOL_NAME(sys_call_table)(,%eax,4) - movl %eax,EAX(%esp) # save the return value - ALIGN - .globl ret_from_sys_call - .globl ret_from_intr -ret_from_sys_call: - movl SYMBOL_NAME(bh_mask),%eax - andl SYMBOL_NAME(bh_active),%eax - jne handle_bottom_half -ret_with_reschedule: - cmpl $0,need_resched(%ebx) - jne reschedule - cmpl $0,sigpending(%ebx) - jne signal_return - RESTORE_ALL - ALIGN -signal_return: - testl $(VM_MASK),EFLAGS(%esp) - pushl %esp - jne v86_signal_return - pushl $0 - call SYMBOL_NAME(do_signal) - addl $8,%esp - RESTORE_ALL - ALIGN -v86_signal_return: - call SYMBOL_NAME(save_v86_state) - movl %eax,%esp - pushl %eax - pushl $0 - call SYMBOL_NAME(do_signal) - addl $8,%esp - RESTORE_ALL - ALIGN -tracesys: - movl $-ENOSYS,EAX(%esp) - call SYMBOL_NAME(syscall_trace) - movl ORIG_EAX(%esp),%eax - call *SYMBOL_NAME(sys_call_table)(,%eax,4) - movl %eax,EAX(%esp) # save the return value - call SYMBOL_NAME(syscall_trace) - jmp ret_from_sys_call -badsys: - movl $-ENOSYS,EAX(%esp) - jmp ret_from_sys_call - - ALIGN -ret_from_exception: - movl SYMBOL_NAME(bh_mask),%eax - andl SYMBOL_NAME(bh_active),%eax - jne handle_bottom_half - ALIGN -ret_from_intr: - GET_CURRENT(%ebx) - movl EFLAGS(%esp),%eax # mix EFLAGS and CS - movb CS(%esp),%al - testl $(VM_MASK | 3),%eax # return to VM86 mode or non-supervisor? - jne ret_with_reschedule - RESTORE_ALL - - ALIGN -handle_bottom_half: - pushl $ret_from_intr - jmp SYMBOL_NAME(do_bottom_half) - - ALIGN -reschedule: - pushl $ret_from_sys_call - jmp SYMBOL_NAME(schedule) # test - - -ENTRY(divide_error) - pushl $0 # no error code - pushl $ SYMBOL_NAME(do_divide_error) - ALIGN -error_code: - pushl %ds - pushl %eax - xorl %eax,%eax - pushl %ebp - pushl %edi - pushl %esi - pushl %edx - decl %eax # eax = -1 - pushl %ecx - pushl %ebx -#if 1 - xorl %ecx,%ecx # zero ecx - cld - mov %es,%cx # get the lower order bits of es -#else - cld -# Some older processors leave the top 16 bits of the 32 bit destination -# register undefined, rather than zeroed in the following instruction. -# This won't matter when restoring or loading a segment register from the -# stack. It may be a problem if any code reads the full 32 bit value. -# dosemu? kernel? Would somebody like to verify that this way is really OK? - movl %es,%cx -#endif - xchgl %eax, ORIG_EAX(%esp) # orig_eax (get the error code. ) - movl %esp,%edx - xchgl %ecx, ES(%esp) # get the address and save es. - pushl %eax # push the error code - pushl %edx - movl $(__KERNEL_DS),%edx - movl %dx,%ds - movl %dx,%es - GET_CURRENT(%ebx) - call *%ecx - addl $8,%esp - jmp ret_from_exception - -ENTRY(coprocessor_error) - pushl $0 - pushl $ SYMBOL_NAME(do_coprocessor_error) - jmp error_code - -ENTRY(device_not_available) - pushl $-1 # mark this as an int - SAVE_ALL - GET_CURRENT(%ebx) - pushl $ret_from_exception - movl %cr0,%eax - testl $0x4,%eax # EM (math emulation bit) - je SYMBOL_NAME(math_state_restore) - pushl $0 # temporary storage for ORIG_EIP - call SYMBOL_NAME(math_emulate) - addl $4,%esp - ret - -ENTRY(debug) - pushl $0 - pushl $ SYMBOL_NAME(do_debug) - jmp error_code - -ENTRY(nmi) - pushl $0 - pushl $ SYMBOL_NAME(do_nmi) - jmp error_code - -ENTRY(int3) - pushl $0 - pushl $ SYMBOL_NAME(do_int3) - jmp error_code - -ENTRY(overflow) - pushl $0 - pushl $ SYMBOL_NAME(do_overflow) - jmp error_code - -ENTRY(bounds) - pushl $0 - pushl $ SYMBOL_NAME(do_bounds) - jmp error_code - -ENTRY(invalid_op) - pushl $0 - pushl $ SYMBOL_NAME(do_invalid_op) - jmp error_code - -ENTRY(coprocessor_segment_overrun) - pushl $0 - pushl $ SYMBOL_NAME(do_coprocessor_segment_overrun) - jmp error_code - -ENTRY(reserved) - pushl $0 - pushl $ SYMBOL_NAME(do_reserved) - jmp error_code - -ENTRY(double_fault) - pushl $ SYMBOL_NAME(do_double_fault) - jmp error_code - -ENTRY(invalid_TSS) - pushl $ SYMBOL_NAME(do_invalid_TSS) - jmp error_code - -ENTRY(segment_not_present) - pushl $ SYMBOL_NAME(do_segment_not_present) - jmp error_code - -ENTRY(stack_segment) - pushl $ SYMBOL_NAME(do_stack_segment) - jmp error_code - -ENTRY(general_protection) - pushl $ SYMBOL_NAME(do_general_protection) - jmp error_code - -ENTRY(alignment_check) - pushl $ SYMBOL_NAME(do_alignment_check) - jmp error_code - -ENTRY(page_fault) - pushl $ SYMBOL_NAME(do_page_fault) - jmp error_code - -ENTRY(spurious_interrupt_bug) - pushl $0 - pushl $ SYMBOL_NAME(do_spurious_interrupt_bug) - jmp error_code - -.data -ENTRY(sys_call_table) - .long SYMBOL_NAME(sys_setup) /* 0 */ - .long SYMBOL_NAME(sys_exit) - .long SYMBOL_NAME(sys_fork) - .long SYMBOL_NAME(sys_read) - .long SYMBOL_NAME(sys_write) - .long SYMBOL_NAME(sys_open) /* 5 */ - .long SYMBOL_NAME(sys_close) - .long SYMBOL_NAME(sys_waitpid) - .long SYMBOL_NAME(sys_creat) - .long SYMBOL_NAME(sys_link) - .long SYMBOL_NAME(sys_unlink) /* 10 */ - .long SYMBOL_NAME(sys_execve) - .long SYMBOL_NAME(sys_chdir) - .long SYMBOL_NAME(sys_time) - .long SYMBOL_NAME(sys_mknod) - .long SYMBOL_NAME(sys_chmod) /* 15 */ - .long SYMBOL_NAME(sys_lchown) - .long SYMBOL_NAME(sys_ni_syscall) /* old break syscall holder */ - .long SYMBOL_NAME(sys_stat) - .long SYMBOL_NAME(sys_lseek) - .long SYMBOL_NAME(sys_getpid) /* 20 */ - .long SYMBOL_NAME(sys_mount) - .long SYMBOL_NAME(sys_umount) - .long SYMBOL_NAME(sys_setuid) - .long SYMBOL_NAME(sys_getuid) - .long SYMBOL_NAME(sys_stime) /* 25 */ - .long SYMBOL_NAME(sys_ptrace) - .long SYMBOL_NAME(sys_alarm) - .long SYMBOL_NAME(sys_fstat) - .long SYMBOL_NAME(sys_pause) - .long SYMBOL_NAME(sys_utime) /* 30 */ - .long SYMBOL_NAME(sys_ni_syscall) /* old stty syscall holder */ - .long SYMBOL_NAME(sys_ni_syscall) /* old gtty syscall holder */ - .long SYMBOL_NAME(sys_access) - .long SYMBOL_NAME(sys_nice) - .long SYMBOL_NAME(sys_ni_syscall) /* 35 */ /* old ftime syscall holder */ - .long SYMBOL_NAME(sys_sync) - .long SYMBOL_NAME(sys_kill) - .long SYMBOL_NAME(sys_rename) - .long SYMBOL_NAME(sys_mkdir) - .long SYMBOL_NAME(sys_rmdir) /* 40 */ - .long SYMBOL_NAME(sys_dup) - .long SYMBOL_NAME(sys_pipe) - .long SYMBOL_NAME(sys_times) - .long SYMBOL_NAME(sys_ni_syscall) /* old prof syscall holder */ - .long SYMBOL_NAME(sys_brk) /* 45 */ - .long SYMBOL_NAME(sys_setgid) - .long SYMBOL_NAME(sys_getgid) - .long SYMBOL_NAME(sys_signal) - .long SYMBOL_NAME(sys_geteuid) - .long SYMBOL_NAME(sys_getegid) /* 50 */ - .long SYMBOL_NAME(sys_acct) - .long SYMBOL_NAME(sys_ni_syscall) /* old phys syscall holder */ - .long SYMBOL_NAME(sys_ni_syscall) /* old lock syscall holder */ - .long SYMBOL_NAME(sys_ioctl) - .long SYMBOL_NAME(sys_fcntl) /* 55 */ - .long SYMBOL_NAME(sys_ni_syscall) /* old mpx syscall holder */ - .long SYMBOL_NAME(sys_setpgid) - .long SYMBOL_NAME(sys_ni_syscall) /* old ulimit syscall holder */ - .long SYMBOL_NAME(sys_olduname) - .long SYMBOL_NAME(sys_umask) /* 60 */ - .long SYMBOL_NAME(sys_chroot) - .long SYMBOL_NAME(sys_ustat) - .long SYMBOL_NAME(sys_dup2) - .long SYMBOL_NAME(sys_getppid) - .long SYMBOL_NAME(sys_getpgrp) /* 65 */ - .long SYMBOL_NAME(sys_setsid) - .long SYMBOL_NAME(sys_sigaction) - .long SYMBOL_NAME(sys_sgetmask) - .long SYMBOL_NAME(sys_ssetmask) - .long SYMBOL_NAME(sys_setreuid) /* 70 */ - .long SYMBOL_NAME(sys_setregid) - .long SYMBOL_NAME(sys_sigsuspend) - .long SYMBOL_NAME(sys_sigpending) - .long SYMBOL_NAME(sys_sethostname) - .long SYMBOL_NAME(sys_setrlimit) /* 75 */ - .long SYMBOL_NAME(sys_getrlimit) - .long SYMBOL_NAME(sys_getrusage) - .long SYMBOL_NAME(sys_gettimeofday) - .long SYMBOL_NAME(sys_settimeofday) - .long SYMBOL_NAME(sys_getgroups) /* 80 */ - .long SYMBOL_NAME(sys_setgroups) - .long SYMBOL_NAME(old_select) - .long SYMBOL_NAME(sys_symlink) - .long SYMBOL_NAME(sys_lstat) - .long SYMBOL_NAME(sys_readlink) /* 85 */ - .long SYMBOL_NAME(sys_uselib) - .long SYMBOL_NAME(sys_swapon) - .long SYMBOL_NAME(sys_reboot) - .long SYMBOL_NAME(old_readdir) - .long SYMBOL_NAME(old_mmap) /* 90 */ - .long SYMBOL_NAME(sys_munmap) - .long SYMBOL_NAME(sys_truncate) - .long SYMBOL_NAME(sys_ftruncate) - .long SYMBOL_NAME(sys_fchmod) - .long SYMBOL_NAME(sys_fchown) /* 95 */ - .long SYMBOL_NAME(sys_getpriority) - .long SYMBOL_NAME(sys_setpriority) - .long SYMBOL_NAME(sys_ni_syscall) /* old profil syscall holder */ - .long SYMBOL_NAME(sys_statfs) - .long SYMBOL_NAME(sys_fstatfs) /* 100 */ - .long SYMBOL_NAME(sys_ioperm) - .long SYMBOL_NAME(sys_socketcall) - .long SYMBOL_NAME(sys_syslog) - .long SYMBOL_NAME(sys_setitimer) - .long SYMBOL_NAME(sys_getitimer) /* 105 */ - .long SYMBOL_NAME(sys_newstat) - .long SYMBOL_NAME(sys_newlstat) - .long SYMBOL_NAME(sys_newfstat) - .long SYMBOL_NAME(sys_uname) - .long SYMBOL_NAME(sys_iopl) /* 110 */ - .long SYMBOL_NAME(sys_vhangup) - .long SYMBOL_NAME(sys_idle) - .long SYMBOL_NAME(sys_vm86old) - .long SYMBOL_NAME(sys_wait4) - .long SYMBOL_NAME(sys_swapoff) /* 115 */ - .long SYMBOL_NAME(sys_sysinfo) - .long SYMBOL_NAME(sys_ipc) - .long SYMBOL_NAME(sys_fsync) - .long SYMBOL_NAME(sys_sigreturn) - .long SYMBOL_NAME(sys_clone) /* 120 */ - .long SYMBOL_NAME(sys_setdomainname) - .long SYMBOL_NAME(sys_newuname) - .long SYMBOL_NAME(sys_modify_ldt) - .long SYMBOL_NAME(sys_adjtimex) - .long SYMBOL_NAME(sys_mprotect) /* 125 */ - .long SYMBOL_NAME(sys_sigprocmask) - .long SYMBOL_NAME(sys_create_module) - .long SYMBOL_NAME(sys_init_module) - .long SYMBOL_NAME(sys_delete_module) - .long SYMBOL_NAME(sys_get_kernel_syms) /* 130 */ - .long SYMBOL_NAME(sys_quotactl) - .long SYMBOL_NAME(sys_getpgid) - .long SYMBOL_NAME(sys_fchdir) - .long SYMBOL_NAME(sys_bdflush) - .long SYMBOL_NAME(sys_sysfs) /* 135 */ - .long SYMBOL_NAME(sys_personality) - .long SYMBOL_NAME(sys_ni_syscall) /* for afs_syscall */ - .long SYMBOL_NAME(sys_setfsuid) - .long SYMBOL_NAME(sys_setfsgid) - .long SYMBOL_NAME(sys_llseek) /* 140 */ - .long SYMBOL_NAME(sys_getdents) - .long SYMBOL_NAME(sys_select) - .long SYMBOL_NAME(sys_flock) - .long SYMBOL_NAME(sys_msync) - .long SYMBOL_NAME(sys_readv) /* 145 */ - .long SYMBOL_NAME(sys_writev) - .long SYMBOL_NAME(sys_getsid) - .long SYMBOL_NAME(sys_fdatasync) - .long SYMBOL_NAME(sys_sysctl) - .long SYMBOL_NAME(sys_mlock) /* 150 */ - .long SYMBOL_NAME(sys_munlock) - .long SYMBOL_NAME(sys_mlockall) - .long SYMBOL_NAME(sys_munlockall) - .long SYMBOL_NAME(sys_sched_setparam) - .long SYMBOL_NAME(sys_sched_getparam) /* 155 */ - .long SYMBOL_NAME(sys_sched_setscheduler) - .long SYMBOL_NAME(sys_sched_getscheduler) - .long SYMBOL_NAME(sys_sched_yield) - .long SYMBOL_NAME(sys_sched_get_priority_max) - .long SYMBOL_NAME(sys_sched_get_priority_min) /* 160 */ - .long SYMBOL_NAME(sys_sched_rr_get_interval) - .long SYMBOL_NAME(sys_nanosleep) - .long SYMBOL_NAME(sys_mremap) - .long SYMBOL_NAME(sys_setresuid) - .long SYMBOL_NAME(sys_getresuid) /* 165 */ - .long SYMBOL_NAME(sys_vm86) - .long SYMBOL_NAME(sys_query_module) - .long SYMBOL_NAME(sys_poll) - .long SYMBOL_NAME(sys_nfsservctl) - .long SYMBOL_NAME(sys_setresgid) /* 170 */ - .long SYMBOL_NAME(sys_getresgid) - .long SYMBOL_NAME(sys_prctl) - .long SYMBOL_NAME(sys_rt_sigreturn) - .long SYMBOL_NAME(sys_rt_sigaction) - .long SYMBOL_NAME(sys_rt_sigprocmask) /* 175 */ - .long SYMBOL_NAME(sys_rt_sigpending) - .long SYMBOL_NAME(sys_rt_sigtimedwait) - .long SYMBOL_NAME(sys_rt_sigqueueinfo) - .long SYMBOL_NAME(sys_rt_sigsuspend) - .long SYMBOL_NAME(sys_pread) /* 180 */ - .long SYMBOL_NAME(sys_pwrite) - .long SYMBOL_NAME(sys_chown) - .long SYMBOL_NAME(sys_getcwd) - .long SYMBOL_NAME(sys_capget) - .long SYMBOL_NAME(sys_capset) /* 185 */ - .long SYMBOL_NAME(sys_sigaltstack) - .long SYMBOL_NAME(sys_sendfile) - .long SYMBOL_NAME(sys_ni_syscall) /* streams1 */ - .long SYMBOL_NAME(sys_ni_syscall) /* streams2 */ - .long SYMBOL_NAME(sys_table) /* 190 */ - - .rept NR_syscalls-190 - .long SYMBOL_NAME(sys_ni_syscall) - .endr diff --git a/kernel/table21/main.c b/kernel/table21/main.c deleted file mode 100644 index e6d1882b..00000000 --- a/kernel/table21/main.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * linux/table/table_impl.c - * Copyright (C) 1998 Martin Baulig - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include "version.h" - -extern void scheduling_functions_start_here(void); -extern void scheduling_functions_end_here(void); - -int (*table_function_ptr) (int, union table *, const void *) = 0; - -EXPORT_SYMBOL(table_function_ptr); - -EXPORT_SYMBOL(nr_running); -EXPORT_SYMBOL(pidhash); -EXPORT_SYMBOL(task); -EXPORT_SYMBOL(si_swapinfo); -EXPORT_SYMBOL(scheduling_functions_start_here); -EXPORT_SYMBOL(scheduling_functions_end_here); -EXPORT_SYMBOL(avenrun); -EXPORT_SYMBOL(nr_tasks); -EXPORT_SYMBOL(last_pid); -EXPORT_SYMBOL(page_cache_size); -EXPORT_SYMBOL(init_mm); - -asmlinkage int -sys_table (int type, union table *buf, const void *param) -{ - if (table_function_ptr == 0) - return -ENOSYS; - - return (*table_function_ptr) (type, buf, param); -} diff --git a/kernel/table21/module.c b/kernel/table21/module.c deleted file mode 100644 index 0d59c707..00000000 --- a/kernel/table21/module.c +++ /dev/null @@ -1,607 +0,0 @@ -/* - * linux/table/table_impl.c - * Copyright (C) 1998 Martin Baulig - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#include "version.h" - -extern int (*table_function_ptr) (int, union table *, const void *); - -int table_fkt (int, union table *, const void *); - -EXPORT_NO_SYMBOLS; - -int -init_module(void) -{ - printk ("init_module () = %p - %d, %d\n", - table_fkt, sizeof (union table), sizeof (sigset_t)); - table_function_ptr = table_fkt; - return 0; -} - -void -cleanup_module(void) -{ - table_function_ptr = 0; -} - -#define LOAD_INT(x) ((x) >> FSHIFT) -#define LOAD_FRAC(x) LOAD_INT(((x) & (FIXED_1-1)) * 100) - -#ifdef CONFIG_DEBUG_MALLOC -int get_malloc(char * buffer); -#endif - -static void collect_sigign_sigcatch(struct task_struct *p, sigset_t *ign, - sigset_t *catch) -{ - struct k_sigaction *k; - int i; - - sigemptyset(ign); - sigemptyset(catch); - -#if 0 - printk ("collect_sigign_sigcatch: %p - %p\n", - p, p->sig); -#endif - - if (p->sig) { - k = p->sig->action; - for (i = 1; i <= _NSIG; ++i, ++k) { -#if 0 - printk ("signal: %d - %p (%p, %p)\n", - i, k->sa.sa_handler, SIG_IGN, SIG_DFL); -#endif - if (k->sa.sa_handler == SIG_IGN) - sigaddset(ign, i); - else if (k->sa.sa_handler != SIG_DFL) - sigaddset(catch, i); - } - } -} - -/* - * These bracket the sleeping functions.. - */ -extern void scheduling_functions_start_here(void); -extern void scheduling_functions_end_here(void); -#define first_sched ((unsigned long) scheduling_functions_start_here) -#define last_sched ((unsigned long) scheduling_functions_end_here) - -static unsigned long get_wchan(struct task_struct *p) -{ - if (!p || p == current || p->state == TASK_RUNNING) - return 0; -#if defined(__i386__) - { - unsigned long ebp, eip; - unsigned long stack_page; - int count = 0; - - stack_page = 4096 + (unsigned long)p; - if (!stack_page) - return 0; - ebp = p->tss.ebp; - do { - if (ebp < stack_page || ebp >= 4092+stack_page) - return 0; - eip = *(unsigned long *) (ebp+4); - if (eip < first_sched || eip >= last_sched) - return eip; - ebp = *(unsigned long *) ebp; - } while (count++ < 16); - } -#elif defined(__alpha__) - /* - * This one depends on the frame size of schedule(). Do a - * "disass schedule" in gdb to find the frame size. Also, the - * code assumes that sleep_on() follows immediately after - * interruptible_sleep_on() and that add_timer() follows - * immediately after interruptible_sleep(). Ugly, isn't it? - * Maybe adding a wchan field to task_struct would be better, - * after all... - */ - { - unsigned long schedule_frame; - unsigned long pc; - - pc = thread_saved_pc(&p->tss); - if (pc >= first_sched && pc < last_sched) { - schedule_frame = ((unsigned long *)p->tss.ksp)[6]; - return ((unsigned long *)schedule_frame)[12]; - } - return pc; - } -#elif defined(__mc68000__) - { - unsigned long fp, pc; - unsigned long stack_page; - int count = 0; - extern int sys_pause (void); - - stack_page = p->kernel_stack_page; - if (!stack_page) - return 0; - fp = ((struct switch_stack *)p->tss.ksp)->a6; - do { - if (fp < stack_page || fp >= 4088+stack_page) - return 0; - pc = ((unsigned long *)fp)[1]; - /* FIXME: This depends on the order of these functions. */ - if (pc < first_sched || pc >= last_sched) - return pc; - fp = *(unsigned long *) fp; - } while (count++ < 16); - } -#elif defined(__powerpc__) - return (p->tss.wchan); -#elif defined (CONFIG_ARM) - { - unsigned long fp, lr; - unsigned long stack_page; - int count = 0; - - stack_page = 4096 + (unsigned long)p; - fp = get_css_fp (&p->tss); - do { - if (fp < stack_page || fp > 4092+stack_page) - return 0; - lr = pc_pointer (((unsigned long *)fp)[-1]); - if (lr < first_sched || lr > last_sched) - return lr; - fp = *(unsigned long *) (fp - 12); - } while (count ++ < 16); - } -#endif - return 0; -} - -#if defined(__i386__) -# define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1019]) -# define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1022]) -#elif defined(__alpha__) - /* - * See arch/alpha/kernel/ptrace.c for details. - */ -# define PT_REG(reg) (PAGE_SIZE - sizeof(struct pt_regs) \ - + (long)&((struct pt_regs *)0)->reg) -# define KSTK_EIP(tsk) \ - (*(unsigned long *)(PT_REG(pc) + PAGE_SIZE + (unsigned long)(tsk))) -# define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->tss.usp) -#elif defined(CONFIG_ARM) -# define KSTK_EIP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1022]) -# define KSTK_ESP(tsk) (((unsigned long *)(4096+(unsigned long)(tsk)))[1020]) -#elif defined(__mc68000__) -#define KSTK_EIP(tsk) \ - ({ \ - unsigned long eip = 0; \ - if ((tsk)->tss.esp0 > PAGE_SIZE && \ - MAP_NR((tsk)->tss.esp0) < max_mapnr) \ - eip = ((struct pt_regs *) (tsk)->tss.esp0)->pc; \ - eip; }) -#define KSTK_ESP(tsk) ((tsk) == current ? rdusp() : (tsk)->tss.usp) -#elif defined(__powerpc__) -#define KSTK_EIP(tsk) ((tsk)->tss.regs->nip) -#define KSTK_ESP(tsk) ((tsk)->tss.regs->gpr[1]) -#elif defined (__sparc_v9__) -# define KSTK_EIP(tsk) ((tsk)->tss.kregs->tpc) -# define KSTK_ESP(tsk) ((tsk)->tss.kregs->u_regs[UREG_FP]) -#elif defined(__sparc__) -# define KSTK_EIP(tsk) ((tsk)->tss.kregs->pc) -# define KSTK_ESP(tsk) ((tsk)->tss.kregs->u_regs[UREG_FP]) -#endif - -/* Gcc optimizes away "strlen(x)" for constant x */ -#define ADDBUF(buffer, string) \ -do { memcpy(buffer, string, strlen(string)); \ - buffer += strlen(string); } while (0) - -static inline void statm_pte_range(pmd_t * pmd, unsigned long address, unsigned long size, - int * pages, int * shared, int * dirty, int * total) -{ - pte_t * pte; - unsigned long end; - - if (pmd_none(*pmd)) - return; - if (pmd_bad(*pmd)) { - printk("statm_pte_range: bad pmd (%08lx)\n", pmd_val(*pmd)); - pmd_clear(pmd); - return; - } - pte = pte_offset(pmd, address); - address &= ~PMD_MASK; - end = address + size; - if (end > PMD_SIZE) - end = PMD_SIZE; - do { - pte_t page = *pte; - - address += PAGE_SIZE; - pte++; - if (pte_none(page)) - continue; - ++*total; - if (!pte_present(page)) - continue; - ++*pages; - if (pte_dirty(page)) - ++*dirty; - if (MAP_NR(pte_page(page)) >= max_mapnr) - continue; - if (atomic_read(&mem_map[MAP_NR(pte_page(page))].count) > 1) - ++*shared; - } while (address < end); -} - -static inline void statm_pmd_range(pgd_t * pgd, unsigned long address, unsigned long size, - int * pages, int * shared, int * dirty, int * total) -{ - pmd_t * pmd; - unsigned long end; - - if (pgd_none(*pgd)) - return; - if (pgd_bad(*pgd)) { - printk("statm_pmd_range: bad pgd (%08lx)\n", pgd_val(*pgd)); - pgd_clear(pgd); - return; - } - pmd = pmd_offset(pgd, address); - address &= ~PGDIR_MASK; - end = address + size; - if (end > PGDIR_SIZE) - end = PGDIR_SIZE; - do { - statm_pte_range(pmd, address, end - address, pages, shared, dirty, total); - address = (address + PMD_SIZE) & PMD_MASK; - pmd++; - } while (address < end); -} - -static void statm_pgd_range(pgd_t * pgd, unsigned long address, unsigned long end, - int * pages, int * shared, int * dirty, int * total) -{ - while (address < end) { - statm_pmd_range(pgd, address, end - address, pages, shared, dirty, total); - address = (address + PGDIR_SIZE) & PGDIR_MASK; - pgd++; - } -} - -int -table_fkt (int type, union table *buf, const void *param) -{ - union table tbl; - struct sysinfo i; - struct task_struct *tsk = NULL; - struct proclist_args plistargs; - int index, tindex, err, tty; - sigset_t sigign, sigcatch; - pid_t pid; - - if (type == TABLE_VERSION) - return _TABLE_VERSION; - - if (!buf) - return -EFAULT; - - memset (&tbl, 0, sizeof (union table)); - - /* For TABLE_PROC_*, read pid and get task_struct */ - - switch (type) { - case TABLE_PROC_UID: - case TABLE_PROC_MEM: - case TABLE_PROC_SEGMENT: - case TABLE_PROC_TIME: - case TABLE_PROC_STATE: - case TABLE_PROC_SIGNAL: - case TABLE_PROC_KERNEL: - err = verify_area (VERIFY_READ, param, sizeof (pid_t)); - if (err) - return err; - copy_from_user (&pid, param, sizeof (pid_t)); - - read_lock (&tasklist_lock); - tsk = find_task_by_pid (pid); - /* FIXME!! This should be done after the last use */ - read_unlock(&tasklist_lock); - - if (tsk == NULL) - return -ESRCH; - break; - case TABLE_PROCLIST: - err = verify_area (VERIFY_READ, param, - sizeof (struct proclist_args)); - if (err) - return err; - copy_from_user (&plistargs, param, - sizeof (struct proclist_args)); - break; - } - - /* Main function dispatcher */ - - switch (type) { - case TABLE_PROCLIST: - tsk = task [0]; - read_lock (&tasklist_lock); - for (index = tindex = 0; index < nr_tasks; - index++, tsk = tsk->next_task) { - if (tsk->pid == 0) continue; - switch (plistargs.which & TABLE_KERN_PROC_MASK) { - case TABLE_KERN_PROC_PID: - if (tsk->pid != plistargs.arg) continue; - break; - case TABLE_KERN_PROC_PGRP: - if (tsk->pgrp != plistargs.arg) continue; - break; - case TABLE_KERN_PROC_SESSION: - if (tsk->session != plistargs.arg) continue; - case TABLE_KERN_PROC_TTY: - tty = tsk->tty ? - kdev_t_to_nr (tsk->tty->device) : 0; - if (tty != plistargs.arg) continue; - break; - case TABLE_KERN_PROC_UID: - if (tsk->uid != plistargs.arg) continue; - break; - case TABLE_KERN_PROC_RUID: - if (tsk->euid != plistargs.arg) continue; - break; - } - - if ((plistargs.which & TABLE_EXCLUDE_IDLE) && - (tsk->state != 0)) - continue; - - if ((plistargs.which & TABLE_EXCLUDE_NOTTY) && - (tsk->tty == NULL)) - continue; - - tbl.proclist.pids [tindex++] = tsk->pid; - } - tbl.proclist.nr_running = nr_running; - tbl.proclist.last_pid = last_pid; - tbl.proclist.nr_tasks = tindex; - read_unlock(&tasklist_lock); - break; - case TABLE_CPU: - tbl.cpu.total = jiffies; - tbl.cpu.user = kstat.cpu_user; - tbl.cpu.nice = kstat.cpu_nice; - tbl.cpu.sys = kstat.cpu_system; - tbl.cpu.idle = tbl.cpu.total - - (tbl.cpu.user + tbl.cpu.nice + tbl.cpu.sys); - tbl.cpu.frequency = HZ; - break; - case TABLE_MEM: - si_meminfo (&i); - tbl.mem.total = i.totalram; - tbl.mem.used = i.totalram - i.freeram; - tbl.mem.free = i.freeram; - tbl.mem.shared = i.sharedram; - tbl.mem.buffer = i.bufferram; - tbl.mem.cached = page_cache_size << PAGE_SHIFT; - break; - case TABLE_SWAP: - si_swapinfo (&i); - tbl.swap.total = i.totalswap; - tbl.swap.used = i.totalswap - i.freeswap; - tbl.swap.free = i.freeswap; - break; - case TABLE_LOADAVG: - tbl.loadavg.loadavg [0] = (double) avenrun [0] / (1 << FSHIFT); - tbl.loadavg.loadavg [1] = (double) avenrun [1] / (1 << FSHIFT); - tbl.loadavg.loadavg [2] = (double) avenrun [2] / (1 << FSHIFT); - tbl.loadavg.nr_running = nr_running; - tbl.loadavg.nr_tasks = nr_tasks; - tbl.loadavg.last_pid = last_pid; - break; - case TABLE_UPTIME: - tbl.uptime.uptime = jiffies; - tbl.uptime.idle = task[0]->times.tms_utime + - task[0]->times.tms_stime; - break; - case TABLE_PROC_STATE: - tbl.proc_state.uid = tsk->uid; - tbl.proc_state.gid = tsk->gid; - tbl.proc_state.state = tsk->state; - tbl.proc_state.flags = tsk->flags; - memcpy (tbl.proc_state.comm, tsk->comm, - sizeof (tbl.proc_state.comm)); - break; - case TABLE_PROC_UID: - tbl.proc_uid.uid = tsk->uid; - tbl.proc_uid.euid = tsk->euid; - tbl.proc_uid.suid = tsk->suid; - tbl.proc_uid.fsuid = tsk->fsuid; - - tbl.proc_uid.gid = tsk->gid; - tbl.proc_uid.egid = tsk->egid; - tbl.proc_uid.sgid = tsk->sgid; - tbl.proc_uid.fsgid = tsk->fsgid; - - tbl.proc_uid.pid = tsk->pid; - tbl.proc_uid.pgrp = tsk->pgrp; - tbl.proc_uid.ppid = tsk->p_pptr->pid; - - tbl.proc_uid.session = tsk->session; - tbl.proc_uid.tty = tsk->tty ? - kdev_t_to_nr (tsk->tty->device) : 0; - tbl.proc_uid.tpgid = tsk->tty ? tsk->tty->pgrp : -1; - - tbl.proc_uid.priority = tsk->priority; - tbl.proc_uid.counter = tsk->counter; - tbl.proc_uid.def_priority = DEF_PRIORITY; - break; - case TABLE_PROC_SIGNAL: - memcpy (&tbl.proc_signal.signal, &tsk->signal, - sizeof (tbl.proc_signal.signal)); - - memcpy (&tbl.proc_signal.blocked, &tsk->blocked, - sizeof (tbl.proc_signal.blocked)); - - collect_sigign_sigcatch (tsk, &sigign, &sigcatch); - - memcpy (&tbl.proc_signal.ignored, &sigign, - sizeof (tbl.proc_signal.ignored)); - - memcpy (&tbl.proc_signal.caught, &sigcatch, - sizeof (tbl.proc_signal.caught)); - -#if 0 - printk ("PROC_SIGNAL: (%lu, %lu) - (%lu, %lu)\n", - tbl.proc_signal.ignored.sig [0], - tbl.proc_signal.ignored.sig [1], - tbl.proc_signal.caught.sig [0], - tbl.proc_signal.caught.sig [1]); -#endif - break; - case TABLE_PROC_MEM: - if (tsk->mm && tsk->mm != &init_mm) { - tbl.proc_mem.context = tsk->mm->context; - tbl.proc_mem.start_code = tsk->mm->start_code; - tbl.proc_mem.end_code = tsk->mm->end_code; - tbl.proc_mem.start_data = tsk->mm-> start_data; - tbl.proc_mem.end_data = tsk->mm->end_data; - tbl.proc_mem.start_brk = tsk->mm->start_brk; - tbl.proc_mem.brk = tsk->mm->brk; - tbl.proc_mem.start_stack = tsk->mm->start_stack; - tbl.proc_mem.start_mmap = tsk->mm->mmap ? - tsk->mm->mmap->vm_start : 0; - tbl.proc_mem.arg_start = tsk->mm->arg_start; - tbl.proc_mem.arg_end = tsk->mm->arg_end; - tbl.proc_mem.env_start = tsk->mm->env_start; - tbl.proc_mem.env_end = tsk->mm->env_end; - tbl.proc_mem.rss = tsk->mm->rss << PAGE_SHIFT; - tbl.proc_mem.total_vm = tsk->mm->total_vm; - tbl.proc_mem.locked_vm = tsk->mm->locked_vm; - } - tbl.proc_mem.rlim = tsk->rlim ? tsk->rlim[RLIMIT_RSS].rlim_cur : 0; - break; - case TABLE_PROC_SEGMENT: - if (tsk->mm && tsk->mm != &init_mm) { - unsigned long vsize = 0; - int size = 0, resident = 0, share = 0; - int trs = 0, lrs = 0, drs = 0, srs = 0, dt = 0; - struct vm_area_struct * vma = tsk->mm->mmap; - - while (vma) { - pgd_t *pgd = pgd_offset(tsk->mm, vma->vm_start); - int pages = 0, shared = 0, dirty = 0, total = 0; - - vsize += vma->vm_end - vma->vm_start; - - statm_pgd_range (pgd, vma->vm_start, vma->vm_end, - - &pages, &shared, &dirty, &total); - - resident += pages; - share += shared; - dt += dirty; - size += total; - - /* Well, shared library seem to get mapped - * above 0x40000000 and are executable, - * so I use this hack to get their size. - */ - - if (vma->vm_flags & VM_GROWSDOWN) - srs += pages; /* stack */ - else if ((vma->vm_flags & VM_EXEC) && - (vma->vm_start > 0x40000000)) - lrs += pages; /* library */ - else if (vma->vm_flags & VM_EXECUTABLE) - trs += pages; /* text */ - else - drs += pages; - - vma = vma->vm_next; - } - - tbl.proc_segment.vsize = vsize; - tbl.proc_segment.size = size << PAGE_SHIFT; - tbl.proc_segment.resident = resident << PAGE_SHIFT; - tbl.proc_segment.shared = share << PAGE_SHIFT; - tbl.proc_segment.trs = trs << PAGE_SHIFT; - tbl.proc_segment.lrs = lrs << PAGE_SHIFT; - tbl.proc_segment.drs = drs << PAGE_SHIFT; - tbl.proc_segment.srs = srs << PAGE_SHIFT; - tbl.proc_segment.dt = dt << PAGE_SHIFT; - } - break; - case TABLE_PROC_TIME: - tbl.proc_time.utime = tsk->times.tms_utime; - tbl.proc_time.stime = tsk->times.tms_stime; - tbl.proc_time.cutime = tsk->times.tms_cutime; - tbl.proc_time.cstime = tsk->times.tms_cstime; - - tbl.proc_time.start_time = tsk->start_time; - tbl.proc_time.timeout = tsk->timeout; - tbl.proc_time.policy = tsk->policy; - tbl.proc_time.rt_priority = tsk->rt_priority; - - tbl.proc_time.it_real_value = tsk->it_real_value; - tbl.proc_time.it_prof_value = tsk->it_prof_value; - tbl.proc_time.it_virt_value = tsk->it_virt_value; - tbl.proc_time.it_real_incr = tsk->it_real_incr; - tbl.proc_time.it_prof_incr = tsk->it_prof_incr; - tbl.proc_time.it_virt_incr = tsk->it_virt_incr; - break; - case TABLE_PROC_KERNEL: - tbl.proc_kernel.min_flt = tsk->min_flt; - tbl.proc_kernel.cmin_flt = tsk->cmin_flt; - tbl.proc_kernel.maj_flt = tsk->maj_flt; - tbl.proc_kernel.cmaj_flt = tsk->cmaj_flt; - - tbl.proc_kernel.kesp = KSTK_ESP(tsk); - tbl.proc_kernel.keip = KSTK_EIP(tsk); - - tbl.proc_kernel.nswap = tsk->nswap; - tbl.proc_kernel.cnswap = tsk->cnswap; - - tbl.proc_kernel.wchan = get_wchan (tsk); - break; - default: - return -EINVAL; - } - - err = verify_area (VERIFY_WRITE, buf, sizeof (struct table)); - if (err) - return err; - - copy_to_user (buf, &tbl, sizeof (union table)); - - return 0; -} diff --git a/kernel/table21/unistd-i386.h b/kernel/table21/unistd-i386.h deleted file mode 100644 index e459b24b..00000000 --- a/kernel/table21/unistd-i386.h +++ /dev/null @@ -1,344 +0,0 @@ -#ifndef _ASM_I386_UNISTD_H_ -#define _ASM_I386_UNISTD_H_ - -/* - * This file contains the system call numbers. - */ - -#define __NR_setup 0 /* used only by init, to get system going */ -#define __NR_exit 1 -#define __NR_fork 2 -#define __NR_read 3 -#define __NR_write 4 -#define __NR_open 5 -#define __NR_close 6 -#define __NR_waitpid 7 -#define __NR_creat 8 -#define __NR_link 9 -#define __NR_unlink 10 -#define __NR_execve 11 -#define __NR_chdir 12 -#define __NR_time 13 -#define __NR_mknod 14 -#define __NR_chmod 15 -#define __NR_lchown 16 -#define __NR_break 17 -#define __NR_oldstat 18 -#define __NR_lseek 19 -#define __NR_getpid 20 -#define __NR_mount 21 -#define __NR_umount 22 -#define __NR_setuid 23 -#define __NR_getuid 24 -#define __NR_stime 25 -#define __NR_ptrace 26 -#define __NR_alarm 27 -#define __NR_oldfstat 28 -#define __NR_pause 29 -#define __NR_utime 30 -#define __NR_stty 31 -#define __NR_gtty 32 -#define __NR_access 33 -#define __NR_nice 34 -#define __NR_ftime 35 -#define __NR_sync 36 -#define __NR_kill 37 -#define __NR_rename 38 -#define __NR_mkdir 39 -#define __NR_rmdir 40 -#define __NR_dup 41 -#define __NR_pipe 42 -#define __NR_times 43 -#define __NR_prof 44 -#define __NR_brk 45 -#define __NR_setgid 46 -#define __NR_getgid 47 -#define __NR_signal 48 -#define __NR_geteuid 49 -#define __NR_getegid 50 -#define __NR_acct 51 -#define __NR_phys 52 -#define __NR_lock 53 -#define __NR_ioctl 54 -#define __NR_fcntl 55 -#define __NR_mpx 56 -#define __NR_setpgid 57 -#define __NR_ulimit 58 -#define __NR_oldolduname 59 -#define __NR_umask 60 -#define __NR_chroot 61 -#define __NR_ustat 62 -#define __NR_dup2 63 -#define __NR_getppid 64 -#define __NR_getpgrp 65 -#define __NR_setsid 66 -#define __NR_sigaction 67 -#define __NR_sgetmask 68 -#define __NR_ssetmask 69 -#define __NR_setreuid 70 -#define __NR_setregid 71 -#define __NR_sigsuspend 72 -#define __NR_sigpending 73 -#define __NR_sethostname 74 -#define __NR_setrlimit 75 -#define __NR_getrlimit 76 -#define __NR_getrusage 77 -#define __NR_gettimeofday 78 -#define __NR_settimeofday 79 -#define __NR_getgroups 80 -#define __NR_setgroups 81 -#define __NR_select 82 -#define __NR_symlink 83 -#define __NR_oldlstat 84 -#define __NR_readlink 85 -#define __NR_uselib 86 -#define __NR_swapon 87 -#define __NR_reboot 88 -#define __NR_readdir 89 -#define __NR_mmap 90 -#define __NR_munmap 91 -#define __NR_truncate 92 -#define __NR_ftruncate 93 -#define __NR_fchmod 94 -#define __NR_fchown 95 -#define __NR_getpriority 96 -#define __NR_setpriority 97 -#define __NR_profil 98 -#define __NR_statfs 99 -#define __NR_fstatfs 100 -#define __NR_ioperm 101 -#define __NR_socketcall 102 -#define __NR_syslog 103 -#define __NR_setitimer 104 -#define __NR_getitimer 105 -#define __NR_stat 106 -#define __NR_lstat 107 -#define __NR_fstat 108 -#define __NR_olduname 109 -#define __NR_iopl 110 -#define __NR_vhangup 111 -#define __NR_idle 112 -#define __NR_vm86old 113 -#define __NR_wait4 114 -#define __NR_swapoff 115 -#define __NR_sysinfo 116 -#define __NR_ipc 117 -#define __NR_fsync 118 -#define __NR_sigreturn 119 -#define __NR_clone 120 -#define __NR_setdomainname 121 -#define __NR_uname 122 -#define __NR_modify_ldt 123 -#define __NR_adjtimex 124 -#define __NR_mprotect 125 -#define __NR_sigprocmask 126 -#define __NR_create_module 127 -#define __NR_init_module 128 -#define __NR_delete_module 129 -#define __NR_get_kernel_syms 130 -#define __NR_quotactl 131 -#define __NR_getpgid 132 -#define __NR_fchdir 133 -#define __NR_bdflush 134 -#define __NR_sysfs 135 -#define __NR_personality 136 -#define __NR_afs_syscall 137 /* Syscall for Andrew File System */ -#define __NR_setfsuid 138 -#define __NR_setfsgid 139 -#define __NR__llseek 140 -#define __NR_getdents 141 -#define __NR__newselect 142 -#define __NR_flock 143 -#define __NR_msync 144 -#define __NR_readv 145 -#define __NR_writev 146 -#define __NR_getsid 147 -#define __NR_fdatasync 148 -#define __NR__sysctl 149 -#define __NR_mlock 150 -#define __NR_munlock 151 -#define __NR_mlockall 152 -#define __NR_munlockall 153 -#define __NR_sched_setparam 154 -#define __NR_sched_getparam 155 -#define __NR_sched_setscheduler 156 -#define __NR_sched_getscheduler 157 -#define __NR_sched_yield 158 -#define __NR_sched_get_priority_max 159 -#define __NR_sched_get_priority_min 160 -#define __NR_sched_rr_get_interval 161 -#define __NR_nanosleep 162 -#define __NR_mremap 163 -#define __NR_setresuid 164 -#define __NR_getresuid 165 -#define __NR_vm86 166 -#define __NR_query_module 167 -#define __NR_poll 168 -#define __NR_nfsservctl 169 -#define __NR_setresgid 170 -#define __NR_getresgid 171 -#define __NR_prctl 172 -#define __NR_rt_sigreturn 173 -#define __NR_rt_sigaction 174 -#define __NR_rt_sigprocmask 175 -#define __NR_rt_sigpending 176 -#define __NR_rt_sigtimedwait 177 -#define __NR_rt_sigqueueinfo 178 -#define __NR_rt_sigsuspend 179 -#define __NR_pread 180 -#define __NR_pwrite 181 -#define __NR_chown 182 -#define __NR_getcwd 183 -#define __NR_capget 184 -#define __NR_capset 185 -#define __NR_sigaltstack 186 -#define __NR_sendfile 187 -#define __NR_streams1 188 /* some people actually want it */ -#define __NR_streams2 189 /* some people actually want it */ -#define __NR_table 190 - -/* user-visible error numbers are in the range -1 - -122: see */ - -#define __syscall_return(type, res) \ -do { \ - if ((unsigned long)(res) >= (unsigned long)(-125)) { \ - errno = -(res); \ - res = -1; \ - } \ - return (type) (res); \ -} while (0) - -/* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */ -#define _syscall0(type,name) \ -type name(void) \ -{ \ -long __res; \ -__asm__ volatile ("int $0x80" \ - : "=a" (__res) \ - : "0" (__NR_##name)); \ -__syscall_return(type,__res); \ -} - -#define _syscall1(type,name,type1,arg1) \ -type name(type1 arg1) \ -{ \ -long __res; \ -__asm__ volatile ("int $0x80" \ - : "=a" (__res) \ - : "0" (__NR_##name),"b" ((long)(arg1))); \ -__syscall_return(type,__res); \ -} - -#define _syscall2(type,name,type1,arg1,type2,arg2) \ -type name(type1 arg1,type2 arg2) \ -{ \ -long __res; \ -__asm__ volatile ("int $0x80" \ - : "=a" (__res) \ - : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2))); \ -__syscall_return(type,__res); \ -} - -#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ -type name(type1 arg1,type2 arg2,type3 arg3) \ -{ \ -long __res; \ -__asm__ volatile ("int $0x80" \ - : "=a" (__res) \ - : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \ - "d" ((long)(arg3))); \ -__syscall_return(type,__res); \ -} - -#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \ -type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \ -{ \ -long __res; \ -__asm__ volatile ("int $0x80" \ - : "=a" (__res) \ - : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \ - "d" ((long)(arg3)),"S" ((long)(arg4))); \ -__syscall_return(type,__res); \ -} - -#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \ - type5,arg5) \ -type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \ -{ \ -long __res; \ -__asm__ volatile ("int $0x80" \ - : "=a" (__res) \ - : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \ - "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5))); \ -__syscall_return(type,__res); \ -} - -#ifdef __KERNEL_SYSCALLS__ - -/* - * we need this inline - forking from kernel space will result - * in NO COPY ON WRITE (!!!), until an execve is executed. This - * is no problem, but for the stack. This is handled by not letting - * main() use the stack at all after fork(). Thus, no function - * calls - which means inline code for fork too, as otherwise we - * would use the stack upon exit from 'fork()'. - * - * Actually only pause and fork are needed inline, so that there - * won't be any messing with the stack from main(), but we define - * some others too. - */ -#define __NR__exit __NR_exit -static inline _syscall0(int,idle) -static inline _syscall0(int,pause) -static inline _syscall1(int,setup,int,magic) -static inline _syscall0(int,sync) -static inline _syscall0(pid_t,setsid) -static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count) -static inline _syscall3(int,read,int,fd,char *,buf,off_t,count) -static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count) -static inline _syscall1(int,dup,int,fd) -static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp) -static inline _syscall3(int,open,const char *,file,int,flag,int,mode) -static inline _syscall1(int,close,int,fd) -static inline _syscall1(int,_exit,int,exitcode) -static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options) -static inline _syscall1(int,delete_module,const char *,name) - -static inline pid_t wait(int * wait_stat) -{ - return waitpid(-1,wait_stat,0); -} - -/* - * This is the mechanism for creating a new kernel thread. - * - * NOTE! Only a kernel-only process(ie the swapper or direct descendants - * who haven't done an "execve()") should use this: it will work within - * a system call from a "real" process, but the process memory space will - * not be free'd until both the parent and the child have exited. - */ -static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) -{ - long retval; - - __asm__ __volatile__( - "movl %%esp,%%esi\n\t" - "int $0x80\n\t" /* Linux/i386 system call */ - "cmpl %%esp,%%esi\n\t" /* child or parent? */ - "je 1f\n\t" /* parent - jump */ - "pushl %3\n\t" /* push argument */ - "call *%4\n\t" /* call fn */ - "movl %2,%0\n\t" /* exit */ - "int $0x80\n" - "1:\t" - :"=a" (retval) - :"0" (__NR_clone), "i" (__NR_exit), - "r" (arg), "r" (fn), - "b" (flags | CLONE_VM) - :"si"); - return retval; -} - -#endif - -#endif /* _ASM_I386_UNISTD_H_ */ diff --git a/kernel/table21/version.h b/kernel/table21/version.h deleted file mode 100644 index d47411ee..00000000 --- a/kernel/table21/version.h +++ /dev/null @@ -1 +0,0 @@ -#define _TABLE_VERSION 1 diff --git a/kernel/version.h b/kernel/version.h deleted file mode 100644 index d47411ee..00000000 --- a/kernel/version.h +++ /dev/null @@ -1 +0,0 @@ -#define _TABLE_VERSION 1 diff --git a/libgtop-sysdeps.m4 b/libgtop-sysdeps.m4 index 796376b1..c96bbd9e 100644 --- a/libgtop-sysdeps.m4 +++ b/libgtop-sysdeps.m4 @@ -10,54 +10,6 @@ dnl define 'HAVE_GLIBTOP_MACHINE_H'. dnl * 'libgtop_need_server' - is the server really needed? Defines 'NEED_LIBGTOP' dnl if true; defines conditional 'NEED_LIBGTOP'. -AC_DEFUN([LIBGTOP_HACKER_TESTS],[ - AC_REQUIRE([AC_CANONICAL_HOST]) - - case "$host_os" in - linux*) - AC_ARG_WITH(linux-table, - [ --with-linux-table Use the table () function from Martin Baulig],[ - linux_table="$withval"],[linux_table=auto]) - if test $linux_table = yes ; then - AC_CHECK_HEADER(linux/table.h, linux_table=yes, linux_table=no) - elif test $linux_table = auto ; then - AC_MSG_CHECKING(for table function in Linux Kernel) - AC_TRY_RUN([ -#include -#include - -#include -#include -#include - -#include - -static inline _syscall3 (int, table, int, type, union table *, tbl, const void *, param); - -int -main (void) -{ - union table tbl; - int ret; - - ret = table (TABLE_VERSION, NULL, NULL); - - if (ret == -1) - exit (-errno); - - exit (ret < 1 ? ret : 0); -} -], linux_table=yes, linux_table=no, linux_table=no) - AC_MSG_RESULT($linux_table) - fi - if test $linux_table = yes ; then - AC_DEFINE(HAVE_LINUX_TABLE) - fi - AM_CONDITIONAL(LINUX_TABLE, test $linux_table = yes) - ;; - esac -]) - AC_DEFUN([GNOME_LIBGTOP_SYSDEPS],[ AC_REQUIRE([AC_CANONICAL_HOST]) @@ -111,14 +63,9 @@ AC_DEFUN([GNOME_LIBGTOP_SYSDEPS],[ case "$host_os" in linux*) - if test x$linux_table = xyes ; then - libgtop_sysdeps_dir=kernel - libgtop_use_machine_h=no - else - libgtop_sysdeps_dir=linux - libgtop_use_machine_h=no - libgtop_have_sysinfo=yes - fi + libgtop_sysdeps_dir=linux + libgtop_use_machine_h=no + libgtop_have_sysinfo=yes libgtop_need_server=no ;; freebsd*|netbsd*|openbsd*|bsdi*) diff --git a/sysdeps/Makefile.am b/sysdeps/Makefile.am index b4f4ac1d..5930c5f0 100644 --- a/sysdeps/Makefile.am +++ b/sysdeps/Makefile.am @@ -1,5 +1,5 @@ SUBDIRS = common @sysdeps_dir@ names -DIST_SUBDIRS = common linux kernel names osf1 \ +DIST_SUBDIRS = common linux names osf1 \ stub stub_suid sun4 freebsd solaris aix diff --git a/sysdeps/kernel/.cvsignore b/sysdeps/kernel/.cvsignore deleted file mode 100644 index b851d091..00000000 --- a/sysdeps/kernel/.cvsignore +++ /dev/null @@ -1,28 +0,0 @@ -.deps -.libs -Makefile -Makefile.in -close.lo -cpu.lo -init.lo -ipc_limits.lo -libgtop_sysdeps.la -loadavg.lo -mem.lo -msg_limits.lo -open.lo -procdata.lo -prockernel.lo -proclist.lo -procmem.lo -procsegment.lo -procsignal.lo -procstate.lo -proctime.lo -procuid.lo -sem_limits.lo -shm_limits.lo -swap.lo -sysdeps.lo -sysinfo.lo -uptime.lo diff --git a/sysdeps/kernel/ChangeLog b/sysdeps/kernel/ChangeLog deleted file mode 100644 index 4ead129c..00000000 --- a/sysdeps/kernel/ChangeLog +++ /dev/null @@ -1,71 +0,0 @@ -2004-06-13 BenoĆ®t Dejean - - * sysinfo.c: Added missing const qualifier. - -2004-06-06 BenoĆ®t Dejean - - * proclist.c: (glibtop_get_proclist_s): Used g_memdup. - -2004-05-25 BenoĆ®t Dejean - - * sem_limits.c: - * shm_limits.c: - * swap.c: Added missing const qualifiers. - - * uptime.c: (glibtop_get_uptime_s): Cleaned up. Added boot_time. - -2004-03-09 Bastien Nocera - - * proclist.c: (glibtop_get_proclist_s): fix g_malloc usage on non-Linux - platforms (patch by BenoĆ®t Dejean ) - -2003-10-21 Bastien Nocera - - * Makefile.am: install only one library, libgtop-2.0 - Fix build-time warnings due to the redefinition of guint64 - -2003-10-20 Bastien Nocera - - * glibtop_private.h: s/u_int64_t/guint64/ - -2003-10-20 Bastien Nocera - - * glibtop_private.h: - * glibtop_server.h: - * kernel.h: - * procargs.c: - * proclist.c: - * procmap.c: fixed compilation - -2003-10-20 Bastien Nocera - - * proclist.c: (glibtop_get_proclist_s): replace all the xmalloc crap - by glib memory management functions - -2001-10-17 Abel Cheung - - * Makefile.am: move header to $(includedir)/libgtop-1.0/glibtop. - -1998-10-26 Martin Baulig - - * netload.c: New file. Currently empty. - -1998-10-26 Martin Baulig - - * procargs.c: New file. Currently empty. - -1998-10-25 Martin Baulig - - * ppp.c: New file. Currently empty. - -1998-06-14 Martin Baulig - - * kernel.s: New file - declaration of the table () function - via _syscall3 (); due to a bug in egcs, we cannot put this - into a C file. - -1998-06-13 Martin Baulig - - The code in this directory fetches all information - directly from the kernel. It uses the new table () - system call from the `kernel' directory. diff --git a/sysdeps/kernel/Makefile.am b/sysdeps/kernel/Makefile.am deleted file mode 100644 index e3e68267..00000000 --- a/sysdeps/kernel/Makefile.am +++ /dev/null @@ -1,24 +0,0 @@ - -INCLUDES = @INCLUDES@ - -noinst_LTLIBRARIES = libgtop_sysdeps-2.0.la - -libgtop_sysdeps_2_0_la_SOURCES = open.c close.c kernel.s cpu.c mem.c swap.c \ - uptime.c loadavg.c shm_limits.c msg_limits.c \ - sem_limits.c proclist.c procstate.c procuid.c \ - proctime.c procmem.c procsignal.c prockernel.c \ - procsegment.c siglist.c procargs.c procmap.c \ - netload.c ppp.c - -libgtop_sysdeps_2_0_la_LDFLAGS = $(LT_VERSION_INFO) - -libgtopinclude_HEADERS = glibtop_server.h -libgtopincludedir = $(includedir)/libgtop-2.0 - -noinst_HEADERS = kernel.h - -kernel.o kernel.lo: $(srcdir)/kernel.s - rm -f kernel.o kernel.lo - $(AS) -o kernel.o $(srcdir)/kernel.s - cp kernel.o kernel.lo - diff --git a/sysdeps/kernel/close.c b/sysdeps/kernel/close.c deleted file mode 100644 index 4262d2f0..00000000 --- a/sysdeps/kernel/close.c +++ /dev/null @@ -1,30 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include - -/* Closes pipe to gtop server. */ - -void -glibtop_close_s (glibtop *server) -{ } diff --git a/sysdeps/kernel/cpu.c b/sysdeps/kernel/cpu.c deleted file mode 100644 index 1a7127ba..00000000 --- a/sysdeps/kernel/cpu.c +++ /dev/null @@ -1,65 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -#include "kernel.h" - -static const unsigned long _glibtop_sysdeps_cpu = -(1 << GLIBTOP_CPU_TOTAL) + (1 << GLIBTOP_CPU_USER) + -(1 << GLIBTOP_CPU_NICE) + (1 << GLIBTOP_CPU_SYS) + -(1 << GLIBTOP_CPU_IDLE) + (1 << GLIBTOP_CPU_FREQUENCY); - -/* Init function. */ - -void -glibtop_init_cpu_s (glibtop *server) -{ - server->sysdeps.cpu = _glibtop_sysdeps_cpu; -} - -/* Provides information about cpu usage. */ - -void -glibtop_get_cpu_s (glibtop *server, glibtop_cpu *buf) -{ - union table tbl; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_CPU, 0); - - memset (buf, 0, sizeof (glibtop_cpu)); - - if (table (TABLE_CPU, &tbl, NULL)) - glibtop_error_io_r (server, "table(TABLE_CPU)"); - - buf->flags = _glibtop_sysdeps_cpu; - - buf->total = tbl.cpu.total; - buf->user = tbl.cpu.user; - buf->nice = tbl.cpu.nice; - buf->sys = tbl.cpu.sys; - buf->idle = tbl.cpu.idle; - buf->frequency = tbl.cpu.frequency; -} diff --git a/sysdeps/kernel/glibtop_private.h b/sysdeps/kernel/glibtop_private.h deleted file mode 100644 index ccbf7615..00000000 --- a/sysdeps/kernel/glibtop_private.h +++ /dev/null @@ -1,89 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , March 1999. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#ifndef __GLIBTOP_PRIVATE_H__ -#define __GLIBTOP_PRIVATE_H__ - -#include -#include - -#include -#include -#include - -#undef LIBGTOP_VERSION -#include - -G_BEGIN_DECLS - -int -glibtop_get_proc_data_stat_s (glibtop *server, libgtop_stat_t *stat); - -int -glibtop_get_proc_data_mem_s (glibtop *server, libgtop_mem_t *mem); - -int -glibtop_get_proc_data_swap_s (glibtop *server, libgtop_swap_t *swap); - -int -glibtop_get_proc_data_proclist_s (glibtop *server, - libgtop_proclist_t *proclist, - guint64 which, guint64 arg); - -int -glibtop_get_proc_data_proc_state_s (glibtop *server, - libgtop_proc_state_t *proc_state, - pid_t pid); - -int -glibtop_get_proc_data_proc_mem_s (glibtop *server, - libgtop_proc_mem_t *proc_mem, - pid_t pid); - -int -glibtop_get_proc_data_proc_signal_s (glibtop *server, - libgtop_proc_signal_t *proc_signal, - pid_t pid); - -int -glibtop_get_proc_data_proc_kernel_s (glibtop *server, - libgtop_proc_kernel_t *proc_kernel, - pid_t pid); - -int -glibtop_get_proc_data_proc_args_s (glibtop *server, pid_t pid, - char *result, size_t max_len); - -int -glibtop_get_proc_data_proc_maps_s (glibtop *server, pid_t pid, - libgtop_proc_maps_t *result, - size_t max_len); - -int -glibtop_get_proc_data_netload_s (glibtop *server, - libgtop_netload_t *netload, - const char *device); - -G_END_DECLS - -#endif /* __GLIBTOP_PRIVATE_H__ */ diff --git a/sysdeps/kernel/glibtop_server.h b/sysdeps/kernel/glibtop_server.h deleted file mode 100644 index 5a8c68e9..00000000 --- a/sysdeps/kernel/glibtop_server.h +++ /dev/null @@ -1,52 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#ifndef __GLIBTOP_SERVER_H__ -#define __GLIBTOP_SERVER_H__ - -G_BEGIN_DECLS - -#define GLIBTOP_SUID_CPU 0 -#define GLIBTOP_SUID_MEM 0 -#define GLIBTOP_SUID_SWAP 0 -#define GLIBTOP_SUID_UPTIME 0 -#define GLIBTOP_SUID_LOADAVG 0 -#define GLIBTOP_SUID_SHM_LIMITS 0 -#define GLIBTOP_SUID_MSG_LIMITS 0 -#define GLIBTOP_SUID_SEM_LIMITS 0 -#define GLIBTOP_SUID_PROCLIST 0 -#define GLIBTOP_SUID_PROC_STATE 0 -#define GLIBTOP_SUID_PROC_UID 0 -#define GLIBTOP_SUID_PROC_MEM 0 -#define GLIBTOP_SUID_PROC_TIME 0 -#define GLIBTOP_SUID_PROC_SIGNAL 0 -#define GLIBTOP_SUID_PROC_KERNEL 0 -#define GLIBTOP_SUID_PROC_SEGMENT 0 -#define GLIBTOP_SUID_PROC_ARGS 0 -#define GLIBTOP_SUID_PROC_MAP 0 -#define GLIBTOP_SUID_NETLOAD 0 -#define GLIBTOP_SUID_PPP 0 - -G_END_DECLS - -#endif diff --git a/sysdeps/kernel/kernel.h b/sysdeps/kernel/kernel.h deleted file mode 100644 index 824fbedb..00000000 --- a/sysdeps/kernel/kernel.h +++ /dev/null @@ -1,40 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#ifndef __GLIBTOP_KERNEL_KERNEL_H__ -#define __GLIBTOP_KERNEL_KERNEL_H__ - -#include -#include - -#include - -#include - -G_BEGIN_DECLS - -extern int table (int, union table *, const void *); - -G_END_DECLS - -#endif diff --git a/sysdeps/kernel/kernel.s b/sysdeps/kernel/kernel.s deleted file mode 100644 index d6b368c1..00000000 --- a/sysdeps/kernel/kernel.s +++ /dev/null @@ -1,42 +0,0 @@ - .file "test.c" - .version "01.01" -/ GNU C version egcs-2.90.29 980515 (egcs-1.0.3 release) (i686-pc-linux-gnu) compiled by GNU C version egcs-2.90.29 980515 (egcs-1.0.3 release). -/ options passed: -O2 -Wall -W -/ options enabled: -fdefer-pop -fcse-follow-jumps -fcse-skip-blocks -/ -fexpensive-optimizations -fthread-jumps -fstrength-reduce -fpeephole -/ -fforce-mem -ffunction-cse -finline -fkeep-static-consts -fcaller-saves -/ -fpcc-struct-return -frerun-cse-after-loop -frerun-loop-opt -/ -fschedule-insns2 -fcommon -fverbose-asm -fgnu-linker -fregmove -/ -falias-check -fargument-alias -m80387 -mhard-float -mno-soft-float -/ -mieee-fp -mfp-ret-in-387 -mschedule-prologue -mcpu=pentiumpro -/ -march=pentium - -gcc2_compiled.: -.text - .align 4 -.globl table - .type table,@function -table: - pushl %ebp - movl %esp,%ebp - movl $190,%eax - pushl %ebx - movl 8(%ebp),%ebx - movl 12(%ebp),%ecx - movl 16(%ebp),%edx -#APP - int $0x80 -#NO_APP - testl %eax,%eax - jge .L3 - negl %eax - movl %eax,errno - movl $-1,%eax -.L3: - movl -4(%ebp),%ebx - movl %ebp,%esp - popl %ebp - ret -.Lfe1: - .size table,.Lfe1-table - .ident "GCC: (GNU) egcs-2.90.29 980515 (egcs-1.0.3 release)" diff --git a/sysdeps/kernel/loadavg.c b/sysdeps/kernel/loadavg.c deleted file mode 100644 index 3c81d84a..00000000 --- a/sysdeps/kernel/loadavg.c +++ /dev/null @@ -1,65 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -#include "kernel.h" - -static const unsigned long _glibtop_sysdeps_loadavg = -(1 << GLIBTOP_LOADAVG_LOADAVG) + (1 << GLIBTOP_LOADAVG_NR_RUNNING) + -(1 << GLIBTOP_LOADAVG_NR_TASKS) + (1 << GLIBTOP_LOADAVG_LAST_PID); - -/* Init function. */ - -void -glibtop_init_loadavg_s (glibtop *server) -{ - server->sysdeps.loadavg = _glibtop_sysdeps_loadavg; -} - -/* Provides load load averange. */ - -void -glibtop_get_loadavg_s (glibtop *server, glibtop_loadavg *buf) -{ - union table tbl; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_LOADAVG, 0); - - memset (buf, 0, sizeof (glibtop_loadavg)); - - if (table (TABLE_LOADAVG, &tbl, NULL)) - glibtop_error_io_r (server, "table(TABLE_LOADAVG)"); - - buf->flags = _glibtop_sysdeps_loadavg; - - buf->loadavg [0] = tbl.loadavg.loadavg [0]; - buf->loadavg [1] = tbl.loadavg.loadavg [1]; - buf->loadavg [2] = tbl.loadavg.loadavg [2]; - - buf->nr_running = tbl.loadavg.nr_running; - buf->nr_tasks = tbl.loadavg.nr_tasks; - buf->last_pid = tbl.loadavg.last_pid; -} diff --git a/sysdeps/kernel/mem.c b/sysdeps/kernel/mem.c deleted file mode 100644 index dd85de0a..00000000 --- a/sysdeps/kernel/mem.c +++ /dev/null @@ -1,68 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -#include "kernel.h" - -static const unsigned long _glibtop_sysdeps_mem = -(1 << GLIBTOP_MEM_TOTAL) + (1 << GLIBTOP_MEM_USED) + -(1 << GLIBTOP_MEM_FREE) + (1 << GLIBTOP_MEM_SHARED) + -(1 << GLIBTOP_MEM_BUFFER) + (1 << GLIBTOP_MEM_CACHED) + -(1 << GLIBTOP_MEM_USER); - -/* Init function. */ - -void -glibtop_init_mem_s (glibtop *server) -{ - server->sysdeps.mem = _glibtop_sysdeps_mem; -} - -/* Provides information about memory usage. */ - -void -glibtop_get_mem_s (glibtop *server, glibtop_mem *buf) -{ - union table tbl; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_MEM, 0); - - memset (buf, 0, sizeof (glibtop_mem)); - - if (table (TABLE_MEM, &tbl, NULL)) - glibtop_error_io_r (server, "table(TABLE_MEM)"); - - buf->flags = _glibtop_sysdeps_mem; - - buf->total = tbl.mem.total; - buf->used = tbl.mem.used; - buf->free = tbl.mem.free; - buf->shared = tbl.mem.shared; - buf->buffer = tbl.mem.buffer; - buf->cached = tbl.mem.cached; - - buf->user = buf->total - buf->free - buf->shared - buf->buffer; -} diff --git a/sysdeps/kernel/msg_limits.c b/sysdeps/kernel/msg_limits.c deleted file mode 100644 index bd182db3..00000000 --- a/sysdeps/kernel/msg_limits.c +++ /dev/null @@ -1,65 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include - -#include -#include - -static const unsigned long _glibtop_sysdeps_msg_limits = -(1 << GLIBTOP_IPC_MSGPOOL) + (1 << GLIBTOP_IPC_MSGMAP) + -(1 << GLIBTOP_IPC_MSGMAX) + (1 << GLIBTOP_IPC_MSGMNB) + -(1 << GLIBTOP_IPC_MSGMNI) + (1 << GLIBTOP_IPC_MSGSSZ) + -(1 << GLIBTOP_IPC_MSGTQL); - -/* Init function. */ - -void -glibtop_init_msg_limits_s (glibtop *server) -{ - server->sysdeps.msg_limits = _glibtop_sysdeps_msg_limits; -} - -/* Provides information about sysv ipc limits. */ - -void -glibtop_get_msg_limits_s (glibtop *server, glibtop_msg_limits *buf) -{ - struct msginfo msginfo; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_MSG_LIMITS, 0); - - memset (buf, 0, sizeof (glibtop_msg_limits)); - - buf->flags = _glibtop_sysdeps_msg_limits; - - msgctl (0, IPC_INFO, (struct msqid_ds *) &msginfo); - - buf->msgpool = msginfo.msgpool; - buf->msgmap = msginfo.msgmap; - buf->msgmax = msginfo.msgmax; - buf->msgmnb = msginfo.msgmnb; - buf->msgmni = msginfo.msgmni; - buf->msgssz = msginfo.msgssz; - buf->msgtql = msginfo.msgtql; -} diff --git a/sysdeps/kernel/netload.c b/sysdeps/kernel/netload.c deleted file mode 100644 index beebedba..00000000 --- a/sysdeps/kernel/netload.c +++ /dev/null @@ -1,45 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , October 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -static const unsigned long _glibtop_sysdeps_netload = 0; - -/* Init function. */ - -void -glibtop_init_netload_s (glibtop *server) -{ - server->sysdeps.netload = _glibtop_sysdeps_netload; -} - -/* Provides network statistics. */ - -void -glibtop_get_netload_s (glibtop *server, glibtop_netload *buf, - const char *interface) -{ - memset (buf, 0, sizeof (glibtop_netload)); -} diff --git a/sysdeps/kernel/open.c b/sysdeps/kernel/open.c deleted file mode 100644 index 260b899b..00000000 --- a/sysdeps/kernel/open.c +++ /dev/null @@ -1,63 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include - -/* ===================================================== - * Linux kernel version information for procps utilities - * Copyright (c) 1996 Charles Blake - */ -#include - -#define LINUX_VERSION(x,y,z) (0x10000*(x) + 0x100*(y) + z) - -static int linux_version_code = 0; - -static void set_linux_version(void) { - static struct utsname uts; - int x = 0, y = 0, z = 0; /* cleared in case sscanf() < 3 */ - - if (linux_version_code) return; - if (uname(&uts) == -1) /* failure most likely implies impending death */ - exit(1); - if (sscanf(uts.release, "%d.%d.%d", &x, &y, &z) < 3) - fprintf(stderr, /* *very* unlikely to happen by accident */ - "Non-standard uts for running kernel:\n" - "release %s=%d.%d.%d gives version code %d\n", - uts.release, x, y, z, LINUX_VERSION(x,y,z)); - linux_version_code = LINUX_VERSION(x, y, z); -} - -/* ======================================================= */ - -/* Opens pipe to gtop server. Returns 0 on success and -1 on error. */ - -void -glibtop_open_s (glibtop *server, const char *program_name, - const unsigned long features, const unsigned flags) -{ - server->name = program_name; - - set_linux_version (); - server->os_version_code = (unsigned long) linux_version_code; -} diff --git a/sysdeps/kernel/ppp.c b/sysdeps/kernel/ppp.c deleted file mode 100644 index 6d0905d5..00000000 --- a/sysdeps/kernel/ppp.c +++ /dev/null @@ -1,44 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , October 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -static const unsigned long _glibtop_sysdeps_ppp = 0; - -/* Init function. */ - -void -glibtop_init_ppp_s (glibtop *server) -{ - server->sysdeps.ppp = _glibtop_sysdeps_ppp; -} - -/* Provides PPP/ISDN information. */ - -void -glibtop_get_ppp_s (glibtop *server, glibtop_ppp *buf, unsigned short device) -{ - memset (buf, 0, sizeof (glibtop_ppp)); -} diff --git a/sysdeps/kernel/procargs.c b/sysdeps/kernel/procargs.c deleted file mode 100644 index 72a45f3b..00000000 --- a/sysdeps/kernel/procargs.c +++ /dev/null @@ -1,46 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -static const unsigned long _glibtop_sysdeps_proc_args = 0; - -/* Init function. */ - -void -glibtop_init_proc_args_s (glibtop *server) -{ - server->sysdeps.proc_args = _glibtop_sysdeps_proc_args; -} - -/* Provides detailed information about a process. */ - -const char * -glibtop_get_proc_args_s (glibtop *server, glibtop_proc_args *buf, - pid_t pid, unsigned max_len) -{ - memset (buf, 0, sizeof (glibtop_proc_args)); - return NULL; -} diff --git a/sysdeps/kernel/procdata.c b/sysdeps/kernel/procdata.c deleted file mode 100644 index aabebca9..00000000 --- a/sysdeps/kernel/procdata.c +++ /dev/null @@ -1,180 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include - -#include - -#define LINUX_VERSION(x,y,z) (0x10000*(x) + 0x100*(y) + z) - -#define BIT_SHIFT(x) (1 << (x % 32)) - -static const unsigned long _glibtop_sysdeps_procdata_0 = -BIT_SHIFT(GLIBTOP_PROCDATA_CMD) + -BIT_SHIFT(GLIBTOP_PROCDATA_STATE) + -BIT_SHIFT(GLIBTOP_PROCDATA_UID) + -BIT_SHIFT(GLIBTOP_PROCDATA_PID) + -BIT_SHIFT(GLIBTOP_PROCDATA_PPID) + -BIT_SHIFT(GLIBTOP_PROCDATA_PGRP) + -BIT_SHIFT(GLIBTOP_PROCDATA_SESSION) + -BIT_SHIFT(GLIBTOP_PROCDATA_TTY) + -BIT_SHIFT(GLIBTOP_PROCDATA_TPGID) + -BIT_SHIFT(GLIBTOP_PROCDATA_PRIORITY) + -BIT_SHIFT(GLIBTOP_PROCDATA_NICE) + -BIT_SHIFT(GLIBTOP_PROCDATA_SIGNAL) + -BIT_SHIFT(GLIBTOP_PROCDATA_BLOCKED) + -BIT_SHIFT(GLIBTOP_PROCDATA_SIGIGNORE) + -BIT_SHIFT(GLIBTOP_PROCDATA_SIGCATCH) + -BIT_SHIFT(GLIBTOP_PROCDATA_START_TIME) + -BIT_SHIFT(GLIBTOP_PROCDATA_UTIME) + -BIT_SHIFT(GLIBTOP_PROCDATA_STIME) + -BIT_SHIFT(GLIBTOP_PROCDATA_CUTIME) + -BIT_SHIFT(GLIBTOP_PROCDATA_CSTIME) + -BIT_SHIFT(GLIBTOP_PROCDATA_SIZE) + -BIT_SHIFT(GLIBTOP_PROCDATA_RESIDENT) + -BIT_SHIFT(GLIBTOP_PROCDATA_SHARE) + -BIT_SHIFT(GLIBTOP_PROCDATA_TRS) + -BIT_SHIFT(GLIBTOP_PROCDATA_LRS) + -BIT_SHIFT(GLIBTOP_PROCDATA_DRS) + -BIT_SHIFT(GLIBTOP_PROCDATA_DT) + -BIT_SHIFT(GLIBTOP_PROCDATA_VSIZE) + -BIT_SHIFT(GLIBTOP_PROCDATA_RSS) + -BIT_SHIFT(GLIBTOP_PROCDATA_RSS_RLIM) + -BIT_SHIFT(GLIBTOP_PROCDATA_TIMEOUT) + -BIT_SHIFT(GLIBTOP_PROCDATA_IT_REAL_VALUE); - -static const unsigned long _glibtop_sysdeps_procdata_1 = -BIT_SHIFT(GLIBTOP_PROCDATA_K_FLAGS) + -BIT_SHIFT(GLIBTOP_PROCDATA_MIN_FLT) + -BIT_SHIFT(GLIBTOP_PROCDATA_MAJ_FLT) + -BIT_SHIFT(GLIBTOP_PROCDATA_CMIN_FLT) + -BIT_SHIFT(GLIBTOP_PROCDATA_CMAJ_FLT) + -BIT_SHIFT(GLIBTOP_PROCDATA_START_CODE) + -BIT_SHIFT(GLIBTOP_PROCDATA_END_CODE) + -BIT_SHIFT(GLIBTOP_PROCDATA_START_STACK) + -BIT_SHIFT(GLIBTOP_PROCDATA_KSTK_ESP) + -BIT_SHIFT(GLIBTOP_PROCDATA_KSTK_EIP) + -BIT_SHIFT(GLIBTOP_PROCDATA_WCHAN); - -/* Provides detailed information about a process. */ - -void -glibtop_get_procdata_s (glibtop *server, glibtop_procdata *buf, pid_t pid) -{ - char input [BUFSIZ], *tmp; - struct stat statb; - int nread; - FILE *f; - - glibtop_init_s (&server, 0, 0); - - memset (buf, 0, sizeof (glibtop_procdata)); - - if (pid == 0) { - /* Client is only interested in the flags. */ - buf->flags [0] = _glibtop_sysdeps_procdata_0; - buf->flags [1] = _glibtop_sysdeps_procdata_1; - return; - } - - - sprintf (input, "/proc/%d/stat", pid); - - if (stat (input, &statb)) return; - - buf->uid = statb.st_uid; - - f = fopen (input, "r"); - if (!f) return; - - nread = fread (input, 1, BUFSIZ, f); - - if (nread < 0) { - fclose (f); - return; - } - - input [nread] = 0; - - /* This is from guile-utils/gtop/proc/readproc.c */ - - /* split into "PID (cmd" and "" */ - tmp = strrchr (input, ')'); - *tmp = '\0'; /* replace trailing ')' with NUL */ - /* parse these two strings separately, skipping the leading "(". */ - memset (buf->cmd, 0, sizeof (buf->cmd)); - sscanf (input, "%d (%39c", &buf->pid, buf->cmd); - sscanf(tmp + 2, /* skip space after ')' too */ - "%c %d %d %d %d %d %lu %lu %lu %lu %lu " - "%ld %ld %ld %ld %d %d %lu %lu %ld %lu " - "%lu %lu %lu %lu %lu %lu %lu %d %d %d %d %lu", - &buf->state, &buf->ppid, &buf->pgrp, &buf->session, - &buf->tty, &buf->tpgid, &buf->k_flags, &buf->min_flt, - &buf->cmin_flt, &buf->maj_flt, &buf->cmaj_flt, - &buf->utime, &buf->stime, &buf->cutime, &buf->cstime, - &buf->priority, &buf->nice, &buf->timeout, - &buf->it_real_value, &buf->start_time, &buf->vsize, - &buf->rss, &buf->rss_rlim, &buf->start_code, - &buf->end_code, &buf->start_stack, &buf->kstk_esp, - &buf->kstk_eip, &buf->signal, &buf->blocked, - &buf->sigignore, &buf->sigcatch, &buf->wchan); - - if (buf->tty == 0) - /* the old notty val, update elsewhere bef. moving to 0 */ - buf->tty = -1; - - if (server->os_version_code < LINUX_VERSION(1,3,39)) { - /* map old meanings to new */ - buf->priority = 2*15 - buf->priority; - buf->nice = 15 - buf->nice; - } - if (server->os_version_code < LINUX_VERSION(1,1,30) && buf->tty != -1) - /* when tty wasn't full devno */ - buf->tty = 4*0x100 + buf->tty; - - fclose (f); - - sprintf (input, "/proc/%d/statm", pid); - - f = fopen (input, "r"); - if (!f) return; - - nread = fread (input, 1, BUFSIZ, f); - - if (nread < 0) { - fclose (f); - return; - } - - input [nread] = 0; - - sscanf (input, "%ld %ld %ld %ld %ld %ld %ld", - &buf->size, &buf->resident, &buf->share, - &buf->trs, &buf->lrs, &buf->drs, &buf->dt); - - fclose (f); - - buf->flags [0] = _glibtop_sysdeps_procdata_0; - buf->flags [1] = _glibtop_sysdeps_procdata_1; -} diff --git a/sysdeps/kernel/prockernel.c b/sysdeps/kernel/prockernel.c deleted file mode 100644 index 1c13dfbf..00000000 --- a/sysdeps/kernel/prockernel.c +++ /dev/null @@ -1,68 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -#include "kernel.h" - -static const unsigned long _glibtop_sysdeps_proc_kernel = -(1 << GLIBTOP_PROC_KERNEL_K_FLAGS) + (1 << GLIBTOP_PROC_KERNEL_MIN_FLT) + -(1 << GLIBTOP_PROC_KERNEL_MAJ_FLT) + (1 << GLIBTOP_PROC_KERNEL_CMIN_FLT) + -(1 << GLIBTOP_PROC_KERNEL_CMAJ_FLT) + (1 << GLIBTOP_PROC_KERNEL_KSTK_ESP) + -(1 << GLIBTOP_PROC_KERNEL_KSTK_EIP) + (1 << GLIBTOP_PROC_KERNEL_NWCHAN); - -/* Init function. */ - -void -glibtop_init_proc_kernel_s (glibtop *server) -{ - server->sysdeps.proc_kernel = _glibtop_sysdeps_proc_kernel; -} - -/* Provides detailed information about a process. */ - -void -glibtop_get_proc_kernel_s (glibtop *server, glibtop_proc_kernel *buf, - pid_t pid) -{ - union table tbl; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_PROC_KERNEL, 0); - - memset (buf, 0, sizeof (glibtop_proc_kernel)); - - if (table (TABLE_PROC_KERNEL, &tbl, &pid)) - glibtop_error_io_r (server, "table(TABLE_PROC_KERNEL)"); - - buf->flags = _glibtop_sysdeps_proc_kernel; - - buf->min_flt = tbl.proc_kernel.min_flt; - buf->cmin_flt = tbl.proc_kernel.cmin_flt; - buf->maj_flt = tbl.proc_kernel.maj_flt; - buf->cmaj_flt = tbl.proc_kernel.cmaj_flt; - buf->kstk_esp = tbl.proc_kernel.kesp; - buf->kstk_eip = tbl.proc_kernel.keip; - buf->nwchan = tbl.proc_kernel.wchan; -} diff --git a/sysdeps/kernel/proclist.c b/sysdeps/kernel/proclist.c deleted file mode 100644 index 7a243061..00000000 --- a/sysdeps/kernel/proclist.c +++ /dev/null @@ -1,83 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include - -#include "kernel.h" - -static const unsigned long _glibtop_sysdeps_proclist = -(1 << GLIBTOP_PROCLIST_TOTAL) + (1 << GLIBTOP_PROCLIST_NUMBER) + -(1 << GLIBTOP_PROCLIST_SIZE); - -/* Init function. */ - -void -glibtop_init_proclist_s (glibtop *server) -{ - server->sysdeps.proclist = _glibtop_sysdeps_proclist; -} - -#define BLOCK_COUNT 256 -#define BLOCK_SIZE (BLOCK_COUNT * sizeof (unsigned)) - -/* Fetch list of currently running processes. - * - * The interface of this function is a little bit different from the others: - * buf->flags is only set if the call succeeded, in this case pids_chain, - * a list of the pids of all currently running processes is returned, - * buf->number is the number of elements of this list and buf->size is - * the size of one single element (sizeof (unsigned)). The total size is - * stored in buf->total. - * - * The calling function has to free the memory to which a pointer is returned. - * - * On error, NULL is returned and buf->flags is zero. */ - -unsigned * -glibtop_get_proclist_s (glibtop *server, glibtop_proclist *buf, - gint64 which, gint64 arg) -{ - union table tbl; - unsigned *pids_chain; - struct proclist_args args; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_PROCLIST, 0); - - memset (buf, 0, sizeof (glibtop_proclist)); - - args.which = which; - args.arg = arg; - - if (table (TABLE_PROCLIST, &tbl, &args)) - glibtop_error_io_r (server, "table(TABLE_PROCLIST)"); - - buf->size = sizeof (unsigned); - buf->number = tbl.proclist.nr_tasks; - - buf->total = buf->number * sizeof (unsigned); - - pids_chain = g_memdup(tbl.proclist.pids, buf->total); - - return pids_chain; -} diff --git a/sysdeps/kernel/procmap.c b/sysdeps/kernel/procmap.c deleted file mode 100644 index f5cfd940..00000000 --- a/sysdeps/kernel/procmap.c +++ /dev/null @@ -1,48 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -static const unsigned long _glibtop_sysdeps_proc_map = 0; - -/* Init function. */ - -void -glibtop_init_proc_map_s (glibtop *server) -{ - server->sysdeps.proc_map = _glibtop_sysdeps_proc_map; -} - -/* Provides detailed information about a process. */ - -glibtop_map_entry * -glibtop_get_proc_map_s (glibtop *server, glibtop_proc_map *buf, pid_t pid) -{ - glibtop_init_s (&server, GLIBTOP_SYSDEPS_PROC_MAP, 0); - - memset (buf, 0, sizeof (glibtop_proc_map)); - - return NULL; -} diff --git a/sysdeps/kernel/procmem.c b/sysdeps/kernel/procmem.c deleted file mode 100644 index 972af542..00000000 --- a/sysdeps/kernel/procmem.c +++ /dev/null @@ -1,70 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -#include "kernel.h" - -static const unsigned long _glibtop_sysdeps_proc_mem = -(1 << GLIBTOP_PROC_MEM_SIZE) + (1 << GLIBTOP_PROC_MEM_VSIZE) + -(1 << GLIBTOP_PROC_MEM_RESIDENT) + (1 << GLIBTOP_PROC_MEM_SHARE) + -(1 << GLIBTOP_PROC_MEM_RSS) + (1 << GLIBTOP_PROC_MEM_RSS_RLIM); - -/* Init function. */ - -void -glibtop_init_proc_mem_s (glibtop *server) -{ - server->sysdeps.proc_mem = _glibtop_sysdeps_proc_mem; -} - -/* Provides detailed information about a process. */ - -void -glibtop_get_proc_mem_s (glibtop *server, glibtop_proc_mem *buf, - pid_t pid) -{ - union table tbl; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_PROC_MEM, 0); - - memset (buf, 0, sizeof (glibtop_proc_mem)); - - if (table (TABLE_PROC_MEM, &tbl, &pid)) - glibtop_error_io_r (server, "table(TABLE_PROC_MEM)"); - - buf->rss = tbl.proc_mem.rss; - buf->rss_rlim = tbl.proc_mem.rlim; - - if (table (TABLE_PROC_SEGMENT, &tbl, &pid)) - glibtop_error_io_r (server, "table(TABLE_PROC_SEGMENT)"); - - buf->flags = _glibtop_sysdeps_proc_mem; - - buf->vsize = tbl.proc_segment.vsize; - buf->size = tbl.proc_segment.size; - buf->resident = tbl.proc_segment.resident; - buf->share = tbl.proc_segment.shared; -} diff --git a/sysdeps/kernel/procsegment.c b/sysdeps/kernel/procsegment.c deleted file mode 100644 index 20fdc29f..00000000 --- a/sysdeps/kernel/procsegment.c +++ /dev/null @@ -1,77 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -#include "kernel.h" - -static const unsigned long _glibtop_sysdeps_proc_segment = -(1 << GLIBTOP_PROC_SEGMENT_TEXT_RSS) + -(1 << GLIBTOP_PROC_SEGMENT_SHLIB_RSS) + -(1 << GLIBTOP_PROC_SEGMENT_DATA_RSS) + -(1 << GLIBTOP_PROC_SEGMENT_STACK_RSS) + -(1 << GLIBTOP_PROC_SEGMENT_DIRTY_SIZE) + -(1 << GLIBTOP_PROC_SEGMENT_START_CODE) + -(1 << GLIBTOP_PROC_SEGMENT_END_CODE) + -(1 << GLIBTOP_PROC_SEGMENT_START_STACK); - -/* Init function. */ - -void -glibtop_init_proc_segment_s (glibtop *server) -{ - server->sysdeps.proc_segment = _glibtop_sysdeps_proc_segment; -} - -/* Provides detailed information about a process. */ - -void -glibtop_get_proc_segment_s (glibtop *server, glibtop_proc_segment *buf, - pid_t pid) -{ - union table tbl; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_PROC_SEGMENT, 0); - - memset (buf, 0, sizeof (glibtop_proc_segment)); - - if (table (TABLE_PROC_MEM, &tbl, &pid)) - glibtop_error_io_r (server, "table(TABLE_PROC_MEM)"); - - buf->start_code = tbl.proc_mem.start_code; - buf->end_code = tbl.proc_mem.end_code; - buf->start_stack = tbl.proc_mem.start_stack; - - if (table (TABLE_PROC_SEGMENT, &tbl, &pid)) - glibtop_error_io_r (server, "table(TABLE_PROC_SEGMENT)"); - - buf->flags = _glibtop_sysdeps_proc_segment; - - buf->text_rss = tbl.proc_segment.trs; - buf->shlib_rss = tbl.proc_segment.lrs; - buf->data_rss = tbl.proc_segment.drs; - buf->stack_rss = tbl.proc_segment.srs; - buf->dirty_size = tbl.proc_segment.dt; -} diff --git a/sysdeps/kernel/procsignal.c b/sysdeps/kernel/procsignal.c deleted file mode 100644 index 3e3829c2..00000000 --- a/sysdeps/kernel/procsignal.c +++ /dev/null @@ -1,63 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -#include "kernel.h" - -static const unsigned long _glibtop_sysdeps_proc_signal = -(1 << GLIBTOP_PROC_SIGNAL_SIGNAL) + (1 << GLIBTOP_PROC_SIGNAL_BLOCKED) + -(1 << GLIBTOP_PROC_SIGNAL_SIGIGNORE) + (1 << GLIBTOP_PROC_SIGNAL_SIGCATCH); - -/* Init function. */ - -void -glibtop_init_proc_signal_s (glibtop *server) -{ - server->sysdeps.proc_signal = _glibtop_sysdeps_proc_signal; -} - -/* Provides detailed information about a process. */ - -void -glibtop_get_proc_signal_s (glibtop *server, glibtop_proc_signal *buf, - pid_t pid) -{ - union table tbl; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_PROC_SIGNAL, 0); - - memset (buf, 0, sizeof (glibtop_proc_signal)); - - if (table (TABLE_PROC_SIGNAL, &tbl, &pid)) - glibtop_error_io_r (server, "table(TABLE_PROC_SIGNAL)"); - - buf->flags = _glibtop_sysdeps_proc_signal; - - buf->signal [0] = tbl.proc_signal.signal; - buf->blocked [0] = tbl.proc_signal.blocked; - buf->sigignore [0] = tbl.proc_signal.ignored; - buf->sigcatch [0] = tbl.proc_signal.caught; -} diff --git a/sysdeps/kernel/procstate.c b/sysdeps/kernel/procstate.c deleted file mode 100644 index 59217a5e..00000000 --- a/sysdeps/kernel/procstate.c +++ /dev/null @@ -1,75 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -#include "kernel.h" - -static const unsigned long _glibtop_sysdeps_proc_state = -(1 << GLIBTOP_PROC_STATE_CMD) + (1 << GLIBTOP_PROC_STATE_STATE) + -(1 << GLIBTOP_PROC_STATE_UID) + (1 << GLIBTOP_PROC_STATE_GID); - -/* Init function. */ - -void -glibtop_init_proc_state_s (glibtop *server) -{ - server->sysdeps.proc_state = _glibtop_sysdeps_proc_state; -} - -/* Provides detailed information about a process. */ - -#define NR_STATES 7 - -void -glibtop_get_proc_state_s (glibtop *server, glibtop_proc_state *buf, - pid_t pid) -{ - union table tbl; - static const char states [NR_STATES] = - { 'R', 'S', 'D', 'Z', 'T', 'W', '.' }; - unsigned state; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_PROC_STATE, 0); - - memset (buf, 0, sizeof (glibtop_proc_state)); - - if (table (TABLE_PROC_STATE, &tbl, &pid)) - glibtop_error_io_r (server, "table(TABLE_PROC_STATE)"); - - buf->flags = _glibtop_sysdeps_proc_state; - - memcpy (buf->cmd, tbl.proc_state.comm, sizeof (tbl.proc_state.comm)); - - buf->uid = tbl.proc_state.uid; - buf->gid = tbl.proc_state.state; - - state = (unsigned) tbl.proc_state.state; - - if (state >= NR_STATES) - state = NR_STATES; - - buf->state = states [state]; -} diff --git a/sysdeps/kernel/proctime.c b/sysdeps/kernel/proctime.c deleted file mode 100644 index 5e5f455a..00000000 --- a/sysdeps/kernel/proctime.c +++ /dev/null @@ -1,73 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -#include "kernel.h" - -static const unsigned long _glibtop_sysdeps_proc_time = -(1 << GLIBTOP_PROC_TIME_UTIME) + (1 << GLIBTOP_PROC_TIME_CUTIME) + -(1 << GLIBTOP_PROC_TIME_STIME) + (1 << GLIBTOP_PROC_TIME_CSTIME) + -(1 << GLIBTOP_PROC_TIME_RTIME) + (1 << GLIBTOP_PROC_TIME_FREQUENCY) + -(1 << GLIBTOP_PROC_TIME_TIMEOUT) + (1 << GLIBTOP_PROC_TIME_IT_REAL_VALUE) + -(1 << GLIBTOP_PROC_TIME_START_TIME); - -/* Init function. */ - -void -glibtop_init_proc_time_s (glibtop *server) -{ - server->sysdeps.proc_time = _glibtop_sysdeps_proc_time; -} - -/* Provides detailed information about a process. */ - -void -glibtop_get_proc_time_s (glibtop *server, glibtop_proc_time *buf, - pid_t pid) -{ - union table tbl; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_PROC_TIME, 0); - - memset (buf, 0, sizeof (glibtop_proc_time)); - - if (table (TABLE_PROC_TIME, &tbl, &pid)) - glibtop_error_io_r (server, "table(TABLE_PROC_TIME)"); - - buf->utime = tbl.proc_time.utime; - buf->stime = tbl.proc_time.stime; - - buf->rtime = buf->utime + buf->stime; - - buf->cutime = tbl.proc_time.cutime; - buf->cstime = tbl.proc_time.cstime; - - buf->frequency = 100; - - buf->timeout = tbl.proc_time.timeout; - buf->it_real_value = tbl.proc_time.it_real_value; - buf->start_time = tbl.proc_time.start_time; -} diff --git a/sysdeps/kernel/procuid.c b/sysdeps/kernel/procuid.c deleted file mode 100644 index d934b9c7..00000000 --- a/sysdeps/kernel/procuid.c +++ /dev/null @@ -1,105 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -#include "kernel.h" - -static const unsigned long _glibtop_sysdeps_proc_uid = -(1 << GLIBTOP_PROC_UID_UID) + (1 << GLIBTOP_PROC_UID_EUID) + -(1 << GLIBTOP_PROC_UID_GID) + (1 << GLIBTOP_PROC_UID_EGID) + -(1 << GLIBTOP_PROC_UID_PID) + (1 << GLIBTOP_PROC_UID_PPID) + -(1 << GLIBTOP_PROC_UID_PGRP) + (1 << GLIBTOP_PROC_UID_SESSION) + -(1 << GLIBTOP_PROC_UID_TTY) + (1 << GLIBTOP_PROC_UID_TPGID) + -(1 << GLIBTOP_PROC_UID_PRIORITY) + (1 << GLIBTOP_PROC_UID_NICE); - -/* Init function. */ - -void -glibtop_init_proc_uid_s (glibtop *server) -{ - server->sysdeps.proc_uid = _glibtop_sysdeps_proc_uid; -} - -#define LINUX_VERSION(x,y,z) (0x10000*(x) + 0x100*(y) + z) - -/* Provides detailed information about a process. */ - -void -glibtop_get_proc_uid_s (glibtop *server, glibtop_proc_uid *buf, - pid_t pid) -{ - union table tbl; - long def_priority, priority, nice; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_PROC_UID, 0); - - memset (buf, 0, sizeof (glibtop_proc_uid)); - - if (table (TABLE_PROC_UID, &tbl, &pid)) - glibtop_error_io_r (server, "table(TABLE_PROC_UID)"); - - buf->flags = _glibtop_sysdeps_proc_uid; - - buf->uid = tbl.proc_uid.uid; - buf->euid = tbl.proc_uid.euid; - buf->gid = tbl.proc_uid.gid; - buf->egid = tbl.proc_uid.egid; - - buf->pid = tbl.proc_uid.pid; - buf->ppid = tbl.proc_uid.ppid; - buf->pgrp = tbl.proc_uid.pgrp; - buf->session = tbl.proc_uid.session; - buf->tty = tbl.proc_uid.tty; - buf->tpgid = tbl.proc_uid.tpgid; - - /* scale priority and nice values from timeslices to -20..20 */ - /* to make it look like a "normal" unix priority/nice value */ - - def_priority = tbl.proc_uid.def_priority; - - priority = tbl.proc_uid.counter; - priority = 20 - (priority * 10 + def_priority / 2) / def_priority; - nice = tbl.proc_uid.priority; - nice = 20 - (nice * 20 + def_priority / 2) / def_priority; - - buf->priority = (int) priority; - buf->nice = (int) nice; - - if (buf->tty == 0) - /* the old notty val, update elsewhere bef. moving to 0 */ - buf->tty = -1; - - if (server->os_version_code < LINUX_VERSION(1,3,39)) { - /* map old meanings to new */ - buf->priority = 2*15 - buf->priority; - buf->nice = 15 - buf->nice; - } - if (server->os_version_code < LINUX_VERSION(1,1,30) && buf->tty != -1) - /* when tty wasn't full devno */ - buf->tty = 4*0x100 + buf->tty; - - buf->flags = _glibtop_sysdeps_proc_uid; -} diff --git a/sysdeps/kernel/sem_limits.c b/sysdeps/kernel/sem_limits.c deleted file mode 100644 index 4d227553..00000000 --- a/sysdeps/kernel/sem_limits.c +++ /dev/null @@ -1,86 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include - -#include -#include - -#ifdef _SEM_SEMUN_UNDEFINED - -/* glibc 2.1 will no longer defines semun, instead it defines - * _SEM_SEMUN_UNDEFINED so users can define semun on their own. - * Thanks to Albert K T Hui . */ - -union semun -{ - int val; - struct semid_ds *buf; - unsigned short int *array; - struct seminfo *__buf; -}; -#endif - -static const unsigned long _glibtop_sysdeps_sem_limits = -(1 << GLIBTOP_IPC_SEMMAP) + (1 << GLIBTOP_IPC_SEMMNI) + -(1 << GLIBTOP_IPC_SEMMNS) + (1 << GLIBTOP_IPC_SEMMNU) + -(1 << GLIBTOP_IPC_SEMMSL) + (1 << GLIBTOP_IPC_SEMOPM) + -(1 << GLIBTOP_IPC_SEMUME) + (1 << GLIBTOP_IPC_SEMUSZ) + -(1 << GLIBTOP_IPC_SEMVMX) + (1 << GLIBTOP_IPC_SEMAEM); - -/* Init function. */ - -void -glibtop_init_sem_limits_s (glibtop *server) -{ - server->sysdeps.sem_limits = _glibtop_sysdeps_sem_limits; -} - -/* Provides information about sysv ipc limits. */ - -void -glibtop_get_sem_limits_s (glibtop *server, glibtop_sem_limits *buf) -{ - struct seminfo seminfo; - union semun arg; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_SEM_LIMITS, 0); - - memset (buf, 0, sizeof (glibtop_sem_limits)); - - buf->flags = _glibtop_sysdeps_sem_limits; - - arg.array = (ushort *) &seminfo; - semctl (0, 0, IPC_INFO, arg); - - buf->semmap = seminfo.semmap; - buf->semmni = seminfo.semmni; - buf->semmns = seminfo.semmns; - buf->semmnu = seminfo.semmnu; - buf->semmsl = seminfo.semmsl; - buf->semopm = seminfo.semopm; - buf->semume = seminfo.semume; - buf->semusz = seminfo.semusz; - buf->semvmx = seminfo.semvmx; - buf->semaem = seminfo.semaem; -} diff --git a/sysdeps/kernel/shm_limits.c b/sysdeps/kernel/shm_limits.c deleted file mode 100644 index 85a15618..00000000 --- a/sysdeps/kernel/shm_limits.c +++ /dev/null @@ -1,62 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include - -#include -#include - -static const unsigned long _glibtop_sysdeps_shm_limits = -(1 << GLIBTOP_IPC_SHMMAX) + (1 << GLIBTOP_IPC_SHMMIN) + -(1 << GLIBTOP_IPC_SHMMNI) + (1 << GLIBTOP_IPC_SHMSEG) + -(1 << GLIBTOP_IPC_SHMALL); - -/* Init function. */ - -void -glibtop_init_shm_limits_s (glibtop *server) -{ - server->sysdeps.shm_limits = _glibtop_sysdeps_shm_limits; -} - -/* Provides information about sysv ipc limits. */ - -void -glibtop_get_shm_limits_s (glibtop *server, glibtop_shm_limits *buf) -{ - struct shminfo shminfo; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_SHM_LIMITS, 0); - - memset (buf, 0, sizeof (glibtop_shm_limits)); - - buf->flags = _glibtop_sysdeps_shm_limits; - - shmctl (0, IPC_INFO, (struct shmid_ds *) &shminfo); - - buf->shmmax = shminfo.shmmax; - buf->shmmin = shminfo.shmmin; - buf->shmmni = shminfo.shmmni; - buf->shmseg = shminfo.shmseg; - buf->shmall = shminfo.shmall; -} diff --git a/sysdeps/kernel/siglist.c b/sysdeps/kernel/siglist.c deleted file mode 100644 index d00223c0..00000000 --- a/sysdeps/kernel/siglist.c +++ /dev/null @@ -1,60 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include - -const glibtop_signame glibtop_sys_siglist [] = -{ { 1, "SIGHUP", NULL }, /* Hangup (POSIX). */ - { 2, "SIGINT", NULL }, /* Interrupt (ANSI). */ - { 3, "SIGQUIT", NULL }, /* Quit (POSIX). */ - { 4, "SIGILL", NULL }, /* Illegal instruction (ANSI). */ - { 5, "SIGTRAP", NULL }, /* Trace trap (POSIX). */ - { 6, "SIGABRT", NULL }, /* Abort (ANSI). */ - { 7, "SIGBUS", NULL }, /* BUS error (4.2 BSD). */ - { 8, "SIGFPE", NULL }, /* Floating-point exception (ANSI). */ - { 9, "SIGKILL", NULL }, /* Kill, unblockable (POSIX). */ - { 10, "SIGUSR1", NULL }, /* User-defined signal 1 (POSIX). */ - { 11, "SIGSEGV", NULL }, /* Segmentation violation (ANSI). */ - { 12, "SIGUSR2", NULL }, /* User-defined signal 2 (POSIX). */ - { 13, "SIGPIPE", NULL }, /* Broken pipe (POSIX). */ - { 14, "SIGALRM", NULL }, /* Alarm clock (POSIX). */ - { 15, "SIGTERM", NULL }, /* Termination (ANSI). */ - { 16, "SIGSTKFLT", NULL }, /* ??? */ - { 17, "SIGCHLD", NULL }, /* Child status has changed (POSIX). */ - { 18, "SIGCONT", NULL }, /* Continue (POSIX). */ - { 19, "SIGSTOP", NULL }, /* Stop, unblockable (POSIX). */ - { 20, "SIGTSTP", NULL }, /* Keyboard stop (POSIX). */ - { 21, "SIGTTIN", NULL }, /* Background read from tty (POSIX). */ - { 22, "SIGTTOU", NULL }, /* Background write to tty (POSIX). */ - { 23, "SIGURG", NULL }, /* Urgent condition on socket (4.2 BSD). */ - { 24, "SIGXCPU", NULL }, /* CPU limit exceeded (4.2 BSD). */ - { 25, "SIGXFSZ", NULL }, /* File size limit exceeded (4.2 BSD). */ - { 26, "SIGVTALRM", NULL }, /* Virtual alarm clock (4.2 BSD). */ - { 27, "SIGPROF", NULL }, /* Profiling alarm clock (4.2 BSD). */ - { 28, "SIGWINCH", NULL }, /* Window size change (4.3 BSD, Sun). */ - { 29, "SIGIO", NULL }, /* I/O now possible (4.2 BSD). */ - { 30, "SIGPWR", NULL }, /* Power failure restart (System V). */ - { 31, "SIGUNUSED", NULL }, - { 0, NULL, NULL }, -}; diff --git a/sysdeps/kernel/swap.c b/sysdeps/kernel/swap.c deleted file mode 100644 index f80a03dc..00000000 --- a/sysdeps/kernel/swap.c +++ /dev/null @@ -1,65 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -#include "kernel.h" - -static const unsigned long _glibtop_sysdeps_swap = -(1 << GLIBTOP_SWAP_TOTAL) + (1 << GLIBTOP_SWAP_USED) + -(1 << GLIBTOP_SWAP_FREE) + (1 << GLIBTOP_SWAP_PAGEIN) + -(1 << GLIBTOP_SWAP_PAGEOUT); - -/* Init function. */ - -void -glibtop_init_swap_s (glibtop *server) -{ - server->sysdeps.swap = _glibtop_sysdeps_swap; -} - -/* Provides information about swap usage. */ - -void -glibtop_get_swap_s (glibtop *server, glibtop_swap *buf) -{ - union table tbl; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_SWAP, 0); - - memset (buf, 0, sizeof (glibtop_swap)); - - if (table (TABLE_SWAP, &tbl, NULL)) - glibtop_error_io_r (server, "table(TABLE_SWAP)"); - - buf->flags = _glibtop_sysdeps_swap; - - buf->total = tbl.swap.total; - buf->used = tbl.swap.used; - buf->free = tbl.swap.free; - - buf->pagein = tbl.swap.pagein; - buf->pageout = tbl.swap.pageout; -} diff --git a/sysdeps/kernel/sysinfo.c b/sysdeps/kernel/sysinfo.c deleted file mode 100644 index c3486edf..00000000 --- a/sysdeps/kernel/sysinfo.c +++ /dev/null @@ -1,94 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -static const unsigned long _glibtop_sysdeps_sysinfo = -(1 << GLIBTOP_SYSINFO_CPUINFO); - -static glibtop_sysinfo sysinfo; - -static void -init_sysinfo (glibtop *server) -{ - char buffer [BUFSIZ]; - static int init = 0; - glibtop_entry *cpuinfo = NULL; - FILE *f; - - if (init) return; - - init = TRUE; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_CPU, 0); - - memset (&sysinfo, 0, sizeof (glibtop_sysinfo)); - - g_return_if_fail (f = fopen ("/proc/cpuinfo", "r")); - - while (fgets (buffer, BUFSIZ, f)) { - char *p, *start, *key, *value; - - if (cpuinfo == NULL) { - cpuinfo = &sysinfo.cpuinfo [sysinfo.ncpu++]; - - cpuinfo->labels = g_ptr_array_new (); - - cpuinfo->values = g_hash_table_new (NULL, NULL); - - if (sysinfo.ncpu > GLIBTOP_NCPU) - sysinfo.ncpu = GLIBTOP_NCPU; - } - - p = strchr (buffer, ':'); - if (!p) continue; - - /* Remove leading spaces from `p'. */ - *p = '\0'; start = p; p++; - while (isspace (*p)) p++; - - /* Remove trailing spaces from `buffer'. */ - while ((start > buffer) && (*start) && isspace (*start)) - *start-- = '\0'; - - key = g_strdup (buffer); - value = g_strdup (p); - - g_ptr_array_add (cpuinfo->labels, key); - - g_hash_table_insert (cpuinfo->values, key, value); - } - - fclose (f); - - sysinfo.flags = _glibtop_sysdeps_sysinfo; -} - -const glibtop_sysinfo * -glibtop_get_sysinfo_s (glibtop *server) -{ - init_sysinfo (server); - return &sysinfo; -} diff --git a/sysdeps/kernel/uptime.c b/sysdeps/kernel/uptime.c deleted file mode 100644 index 4f07b570..00000000 --- a/sysdeps/kernel/uptime.c +++ /dev/null @@ -1,67 +0,0 @@ -/* $Id$ */ - -/* Copyright (C) 1998-99 Martin Baulig - This file is part of LibGTop 1.0. - - Contributed by Martin Baulig , April 1998. - - LibGTop 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. - - LibGTop 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 LibGTop; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. -*/ - -#include -#include -#include - -#include - -#include "kernel.h" - -static const unsigned long _glibtop_sysdeps_uptime = -(1 << GLIBTOP_UPTIME_UPTIME) + (1 << GLIBTOP_UPTIME_IDLETIME); - -/* Init function. */ - -void -glibtop_init_uptime_s (glibtop *server) -{ - server->sysdeps.uptime = _glibtop_sysdeps_uptime; -} - -/* Provides uptime and idle time. */ - -void -glibtop_get_uptime_s (glibtop *server, glibtop_uptime *buf) -{ - union table tbl; - - glibtop_init_s (&server, GLIBTOP_SYSDEPS_UPTIME, 0); - - memset (buf, 0, sizeof (glibtop_uptime)); - - if (table (TABLE_UPTIME, &tbl, NULL)) - glibtop_error_io_r (server, "table(TABLE_UPTIME)"); - - buf->flags = _glibtop_sysdeps_uptime; - -#if 0 - fprintf (stderr, "Table (%u) = %lu, %lu\n", - TABLE_UPTIME, tbl.uptime.uptime, tbl.uptime.idle); -#endif - - buf->uptime = (double) tbl.uptime.uptime / HZ; - buf->idletime = (double) tbl.uptime.idle / HZ; - buf->boot_time = (guint64) time(NULL) - (tbl.uptime.uptime / HZ); -}