diff options
-rw-r--r-- | mdk-stage1/insmod-modutils/insmod.c | 150 | ||||
-rw-r--r-- | mdk-stage1/insmod-modutils/util/Makefile | 2 | ||||
-rw-r--r-- | mdk-stage1/insmod-modutils/util/modstat.c | 190 | ||||
-rw-r--r-- | mdk-stage1/insmod-modutils/util/sys_oim.c | 38 |
4 files changed, 2 insertions, 378 deletions
diff --git a/mdk-stage1/insmod-modutils/insmod.c b/mdk-stage1/insmod-modutils/insmod.c index b0b7c2a0d..dd9a53b74 100644 --- a/mdk-stage1/insmod-modutils/insmod.c +++ b/mdk-stage1/insmod-modutils/insmod.c @@ -506,38 +506,6 @@ static int create_this_module(struct obj_file *f, const char *m_name) return 1; } -#ifdef COMPAT_2_0 -static int old_create_mod_use_count(struct obj_file *f) -{ - struct obj_section *sec; - struct obj_symbol *got; - - sec = obj_create_alloced_section_first(f, ".moduse", - sizeof(long), sizeof(long)); - - obj_add_symbol(f, "mod_use_count_", - -1, ELFW(ST_INFO)(STB_LOCAL, STT_OBJECT), - sec->idx, 0, sizeof(long)); - - /* - * patb: if there is a _GLOBAL_OFFSET_TABLE_, - * add .got section for PIC type modules; - * we have to do this here, because obj_* calls are not made until - * after obj_check_undefined - * is there a better place for this exception? - */ - got = obj_find_symbol(f, "_GLOBAL_OFFSET_TABLE_"); - if (got) - { - sec = obj_create_alloced_section(f, ".got", - sizeof(long), sizeof(long), - SHF_WRITE); - got->secidx = sec->idx; /* mark the symbol as defined */ - } - return 1; -} -#endif - /* add an entry to the __ksymtab section, creating it if necessary */ static void add_ksymtab(struct obj_file *f, struct obj_symbol *sym) { @@ -1225,110 +1193,6 @@ static int init_module(const char *m_name, struct obj_file *f, return ret == 0; } -#ifdef COMPAT_2_0 -static int old_init_module(const char *m_name, struct obj_file *f, - unsigned long m_size) -{ - char *image; - struct old_mod_routines routines; - struct old_symbol_table *symtab; - int ret; - int nsyms = 0, strsize = 0, total; - - /* Create the symbol table */ - /* Size things first... */ - if (flag_export) { - int i; - for (i = 0; i < HASH_BUCKETS; ++i) { - struct obj_symbol *sym; - - for (sym = f->symtab[i]; sym; sym = sym->next) - if (ELFW(ST_BIND) (sym->info) != STB_LOCAL && - sym->secidx <= SHN_HIRESERVE) { - sym->ksymidx = nsyms++; - strsize += strlen(sym->name) + 1; - } - } - } - total = (sizeof(struct old_symbol_table) + - nsyms * sizeof(struct old_module_symbol) + - n_ext_modules_used * sizeof(struct old_module_ref) + - strsize); - symtab = xmalloc(total); - symtab->size = total; - symtab->n_symbols = nsyms; - symtab->n_refs = n_ext_modules_used; - - if (flag_export && nsyms) { - struct old_module_symbol *ksym; - char *str; - int i; - - ksym = symtab->symbol; - str = ((char *) ksym + - nsyms * sizeof(struct old_module_symbol) + - n_ext_modules_used * sizeof(struct old_module_ref)); - - for (i = 0; i < HASH_BUCKETS; ++i) { - struct obj_symbol *sym; - for (sym = f->symtab[i]; sym; sym = sym->next) - if (sym->ksymidx >= 0) { - ksym->addr = obj_symbol_final_value(f, sym); - ksym->name = (unsigned long) str - (unsigned long) symtab; - - str = stpcpy(str, sym->name) + 1; - ksym++; - } - } - } - - if (n_ext_modules_used) { - struct old_module_ref *ref; - int i; - - ref = (struct old_module_ref *) - ((char *) symtab->symbol + nsyms * sizeof(struct old_module_symbol)); - - for (i = 0; i < n_module_stat; ++i) { - if (module_stat[i].status /* used */) { - ref++->module = module_stat[i].modstruct; - } - } - } - - /* Fill in routines. */ - - routines.init = obj_symbol_final_value(f, obj_find_symbol(f, "init_module")); - routines.cleanup = obj_symbol_final_value(f, - obj_find_symbol(f, "cleanup_module")); - - /* - * Whew! All of the initialization is complete. - * Collect the final module image and give it to the kernel. - */ - image = xmalloc(m_size); - obj_create_image(f, image); - - /* - * image holds the complete relocated module, - * accounting correctly for mod_use_count. - * However the old module kernel support assume that it - * is receiving something which does not contain mod_use_count. - */ - ret = old_sys_init_module(m_name, image + sizeof(long), - (m_size - sizeof(long)) | - (flag_autoclean ? OLD_MOD_AUTOCLEAN : 0), - &routines, - symtab); - if (ret) - error("init_module: %m"); - - free(image); - free(symtab); - - return ret == 0; -} -#endif /* end compat */ /************************************************************************/ @@ -1831,15 +1695,8 @@ int INSMOD_MAIN(int argc, char **argv) * Any changes made to the relocation sequence here should be * checked against depmod. */ -#ifdef COMPAT_2_0 - if (k_new_syscalls - ? !create_this_module(f, m_name) - : !old_create_mod_use_count(f)) - goto out; -#else if (!create_this_module(f, m_name)) goto out; -#endif arch_create_got(f); /* DEPMOD */ if (!obj_check_undefineds(f, quiet)) { /* DEPMOD, obj_clear_undefineds */ @@ -2080,14 +1937,7 @@ int INSMOD_MAIN(int argc, char **argv) if (add_kallsyms(f, &kallsyms, force_kallsyms)) goto out; -#ifdef COMPAT_2_0 - if (k_new_syscalls) - init_module(m_name, f, m_size, blob_name, noload, flag_load_map); - else if (!noload) - old_init_module(m_name, f, m_size); -#else init_module(m_name, f, m_size, blob_name, noload, flag_load_map); -#endif if (errors) { if (!noload) delete_module(m_name); diff --git a/mdk-stage1/insmod-modutils/util/Makefile b/mdk-stage1/insmod-modutils/util/Makefile index dd8107435..d923c9151 100644 --- a/mdk-stage1/insmod-modutils/util/Makefile +++ b/mdk-stage1/insmod-modutils/util/Makefile @@ -25,7 +25,7 @@ DEFS = -Wno-error -D_GNU_SOURCE -DELF_MACHINE_H='"elf_$(ARCH).h"' -DARCH_$(ARCH) OBJS = xmalloc.o xrealloc.o xstrcat.o xstrdup.o xsystem.o xftw.o \ - modstat.o meta_expand.o config.o snap_shot.o arch64.o gzfiles.o sys_nim.o sys_oim.o + modstat.o meta_expand.o config.o snap_shot.o arch64.o gzfiles.o sys_nim.o libutil.a: $(OBJS) logger.o ar cru $@ $^ diff --git a/mdk-stage1/insmod-modutils/util/modstat.c b/mdk-stage1/insmod-modutils/util/modstat.c index ad82306c0..ca3c80fd7 100644 --- a/mdk-stage1/insmod-modutils/util/modstat.c +++ b/mdk-stage1/insmod-modutils/util/modstat.c @@ -199,7 +199,7 @@ static int new_get_kernel_info(int type) for (j = 0, s = syms; j < nsyms; ++j, ++s) s->name += (unsigned long) syms; } - next: + next:; } if (type & K_SYMBOLS) { /* Want info about symbols */ @@ -223,197 +223,9 @@ static int new_get_kernel_info(int type) return 1; } -#ifdef COMPAT_2_0 -/************************************************************************/ - -#define mscan(offs,siz,ptr) \ - if (lseek(kmem_fd, (off_t)(offs), SEEK_SET) == -1 || \ - read(kmem_fd, (ptr), (siz)) != (siz)) { \ - if (kmem_fd != -1) \ - close(kmem_fd); \ - error("kmem: %m"); \ - return 0; \ - } - -#define OLD_MOD_RUNNING 1 -#define OLD_MOD_DELETED 2 -#define OLD_MOD_VISITED 0x20000000 - -/* Fetch all the symbols and divvy them up as appropriate for the modules. */ -static int old_get_kernel_info(int type) -{ - struct old_kernel_sym *kernsym; - struct old_kernel_sym *k; - struct module_stat *module; - struct module_stat *mod; - struct module_symbol *s = NULL; - int kmem_fd = -1; - int nkernsym; - int nmod; - int nm; - int nms; - int i; - - drop(); - module_name_list = xmalloc(1); - *module_name_list = '\0'; - - if ((nkernsym = get_kernel_syms(NULL)) < 0) { - error("get_kernel_syms: %m"); - return 0; - } - kernsym = k = xmalloc(nkernsym * sizeof(struct old_kernel_sym)); - old_kernsym = kernsym; - if (get_kernel_syms(kernsym) != nkernsym) { - error("inconsistency with get_kernel_syms -- is someone else " - "playing with modules?"); - free(kernsym); - return 0; - } - - /* Number of modules */ - for (k = kernsym, nmod = 0, i = 0; i < nkernsym; ++i, ++k) { - if (k->name[0] == '#') { - if (k->name[1]) { - ++nmod; - i = strlen(k->name+1) + 1; - module_name_list = - xrealloc(module_name_list, - l_module_name_list + i); - strcpy(module_name_list+l_module_name_list, /* safe, xrealloc */ - k->name+1); - l_module_name_list += i; /* NUL separated strings */ - } - else - break; - } - } - module_stat = mod = module = xmalloc(nmod * sizeof(struct module_stat)); - memset(module, 0, nmod * sizeof(struct module_stat)); - n_module_stat = nmod; - - /* - * Will we need kernel internal info? - */ - if ((type & K_INFO) || (type & K_REFS)) { - if ((kmem_fd = open("/dev/kmem", O_RDONLY)) < 0) { - perror("ksyms: open /dev/kmem"); - return 0; - } - } - - /* - * Collect the module information. - */ - for (k = kernsym, nm = 0, i = 0; i < nkernsym; ++i, ++k) { - if (k->name[0] == '#') { - struct old_kernel_sym *p; - struct old_module info; - - if (k->name[1] == '\0') - break; /* kernel resident symbols follow */ - /* else normal module */ - - module = mod++; - ++nm; - module->name = k->name + 1; - module->modstruct = k->value; - - if ((type & K_INFO) || (type & K_REFS)) { - long tmp; - /* - * k->value is the address of the - * struct old_module - * in the kernel (for use via /dev/kmem) - */ - mscan(k->value, sizeof(info), &info); - module->addr = info.addr; - module->size = info.size * getpagesize(); - - mscan(info.addr, sizeof(long), &tmp); - module->flags = info.state & - (OLD_MOD_RUNNING | OLD_MOD_DELETED); - module->flags |= NEW_MOD_USED_ONCE; /* Cheat */ - if (tmp & OLD_MOD_AUTOCLEAN) - module->flags |= NEW_MOD_AUTOCLEAN; - if (tmp & OLD_MOD_VISITED) - module->flags |= NEW_MOD_VISITED; - - module->usecount = tmp & ~(OLD_MOD_AUTOCLEAN | OLD_MOD_VISITED); - } - - if ((type & K_REFS) && info.ref) { - struct old_module_ref mr; - int j; - unsigned long ref = info.ref; - - do { - mscan(ref, sizeof(struct old_module_ref), &mr); - for (j = 0; j < nm -1; ++j) { - if (mr.module == module_stat[j].modstruct) { - module->nrefs += 1; - module->refs = xrealloc(module->refs, module->nrefs * sizeof(struct module_stat **)); - module->refs[module->nrefs - 1] = module_stat + j; - break; - } - } - } while ((ref = mr.next) != 0); - } - - if (!(type & K_SYMBOLS)) - continue; - /* - * Find out how many symbols this module has. - */ - for (nms = 0, p = k+1; p->name[0] != '#'; ++p) - ++nms; - s = xmalloc(nms * sizeof(struct module_symbol)); - module->syms = s; - module->nsyms = nms; - } else if (type & K_SYMBOLS) { /* Want info about symbols */ - s->name = (unsigned long) k->name; - s->value = k->value; - ++s; - } - } - if ((type & K_INFO) || (type & K_REFS)) { - if (kmem_fd != -1) - close(kmem_fd); - } - - /* - * Kernel resident symbols follows - */ - if (type & K_SYMBOLS) { /* Want info about symbols */ - if (k->name[0] == '#') - ++k; - nksyms = nkernsym - (k - kernsym); - if (nksyms) { - ksyms = s = xmalloc(nksyms * sizeof(struct module_symbol)); - for (i = 0; i < nksyms; ++i, ++k) { - if (k->name[0] != '#') { - s->name = (unsigned long) k->name; - s->value = k->value; - ++s; - } - } - nksyms = s - ksyms; - } else - ksyms = NULL; - } - - return 1; -} -#endif /* COMPAT_2_0 */ - int get_kernel_info(int type) { k_new_syscalls = !query_module(NULL, 0, NULL, 0, NULL); -#ifdef COMPAT_2_0 - if (!k_new_syscalls) - return old_get_kernel_info(type); -#endif /* COMPAT_2_0 */ - return new_get_kernel_info(type); } diff --git a/mdk-stage1/insmod-modutils/util/sys_oim.c b/mdk-stage1/insmod-modutils/util/sys_oim.c deleted file mode 100644 index b915e36a5..000000000 --- a/mdk-stage1/insmod-modutils/util/sys_oim.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Functions for the Linux module syscall interface. - Copyright 1996, 1997 Linux International. - Contributed by Richard Henderson <rth@tamu.edu> - - This file is part of the Linux modutils. - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include <stdlib.h> -#include <errno.h> - -#include "module.h" - -/* Kernel headers before 2.1.mumble need this on the Alpha to get - _syscall* defined. */ -#define __LIBRARY__ - -#include <asm/unistd.h> - - -/*======================================================================*/ - -#define __NR_old_sys_init_module __NR_init_module -_syscall5(int, old_sys_init_module, const char *, name, char *, code, - unsigned, codesize, struct old_mod_routines *, routines, - struct old_symbol_table *, symtab) |