--- ./arch/um/kernel/mem.c.modfix 2003-12-02 17:20:43.000000000 +0100 +++ ./arch/um/kernel/mem.c 2003-12-23 12:30:32.000000000 +0100 @@ -119,6 +119,7 @@ kmem_top = CHOOSE_MODE(kmem_end_tt, kmem_end_skas); return(kmem_top); } +EXPORT_SYMBOL(get_kmem_end); #ifdef CONFIG_HIGHMEM /* Changed during early boot */ @@ -715,6 +716,7 @@ return(&mem_map[pfn - region->start_pfn]); } +EXPORT_SYMBOL(pfn_to_page); unsigned long phys_to_pfn(unsigned long p) { --- ./arch/um/kernel/user_syms.c.modfix 2003-12-02 17:20:43.000000000 +0100 +++ ./arch/um/kernel/user_syms.c 2003-12-23 12:30:32.000000000 +0100 @@ -16,6 +16,62 @@ * since this includes various user-level headers. */ +/* Had to update this: this changed in late 2.5 to add CRC and other beasts + * and was never updated here- 13 Dec 2003-Blaisorblade*/ + +/* v850 toolchain uses a `_' prefix for all user symbols */ +#ifndef MODULE_SYMBOL_PREFIX +#define MODULE_SYMBOL_PREFIX "" +#endif + +struct kernel_symbol +{ + unsigned long value; + const char *name; +}; + +#if !defined(UML_CONFIG_MODULES) +#define EXPORT_SYMBOL(sym) +#define EXPORT_SYMBOL_GPL(sym) +#define EXPORT_SYMBOL_NOVERS(sym) + +#else /*UML_CONFIG_MODULES*/ +#ifndef __GENKSYMS__ +#ifdef UML_CONFIG_MODVERSIONS +/* Mark the CRC weak since genksyms apparently decides not to + * generate a checksums for some symbols */ +#define __CRC_SYMBOL(sym, sec) \ + extern void *__crc_##sym __attribute__((weak)); \ + static const unsigned long __kcrctab_##sym \ + __attribute__((section("__kcrctab" sec), unused)) \ + = (unsigned long) &__crc_##sym; +#else +#define __CRC_SYMBOL(sym, sec) +#endif + +/* For every exported symbol, place a struct in the __ksymtab section */ +#define __EXPORT_SYMBOL(sym, sec) \ + __CRC_SYMBOL(sym, sec) \ + static const char __kstrtab_##sym[] \ + __attribute__((section("__ksymtab_strings"))) \ + = MODULE_SYMBOL_PREFIX #sym; \ + static const struct kernel_symbol __ksymtab_##sym \ + __attribute__((section("__ksymtab" sec), unused)) \ + = { (unsigned long)&sym, __kstrtab_##sym } + +#define EXPORT_SYMBOL(sym) \ + __EXPORT_SYMBOL(sym, "") + +#define EXPORT_SYMBOL_GPL(sym) \ + __EXPORT_SYMBOL(sym, "_gpl") + +#endif + +/* We don't mangle the actual symbol anymore, so no need for + * special casing EXPORT_SYMBOL_NOVERS. FIXME: Deprecated */ +#define EXPORT_SYMBOL_NOVERS(sym) EXPORT_SYMBOL(sym) +#endif +#if 0 struct module_symbol { unsigned long value; @@ -57,6 +113,7 @@ #define EXPORT_SYMBOL_NOVERS(var) __EXPORT_SYMBOL(var, __MODULE_STRING(var)) #endif +#endif EXPORT_SYMBOL(__errno_location); @@ -109,5 +166,7 @@ EXPORT_SYMBOL(memset); EXPORT_SYMBOL(strstr); +EXPORT_SYMBOL(printf); +EXPORT_SYMBOL(strlen); EXPORT_SYMBOL(find_iomem); --- ./include/asm-um/common.lds.S.modfix 2003-12-02 17:20:44.000000000 +0100 +++ ./include/asm-um/common.lds.S 2003-12-23 12:30:32.000000000 +0100 @@ -15,18 +15,6 @@ RODATA - __start___ksymtab = .; /* Kernel symbol table */ - __ksymtab : { *(__ksymtab) } - __stop___ksymtab = .; - - __start___gpl_ksymtab = .; /* Kernel symbol table: GPL-only symbols */ - __gpl_ksymtab : { *(__gpl_ksymtab) } - __stop___gpl_ksymtab = .; - - __start___kallsyms = .; /* All kernel symbols */ - __kallsyms : { *(__kallsyms) } - __stop___kallsyms = .; - .unprotected : { *(.unprotected) } . = ALIGN(4096); PROVIDE (_unprotected_end = .);