From 7caaeabb17758295edff9703c18a840073c5b8f4 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Sun, 11 Sep 2005 20:14:07 -0700 Subject: [SPARC]: Fix dot-symbol exporting for good. From: Al Viro Instead of playing all of these hand-coded assembler aliasing games, just translate symbol names in the name space ".sym" to "_Sym" at module load time. Signed-off-by: David S. Miller --- arch/sparc/kernel/module.c | 9 ++++++--- arch/sparc/kernel/sparc_ksyms.c | 31 ++++++++++++------------------- 2 files changed, 18 insertions(+), 22 deletions(-) (limited to 'arch/sparc/kernel') diff --git a/arch/sparc/kernel/module.c b/arch/sparc/kernel/module.c index 7931d6f92819..787d5f1347ec 100644 --- a/arch/sparc/kernel/module.c +++ b/arch/sparc/kernel/module.c @@ -10,6 +10,7 @@ #include #include #include +#include void *module_alloc(unsigned long size) { @@ -37,7 +38,7 @@ void module_free(struct module *mod, void *module_region) } /* Make generic code ignore STT_REGISTER dummy undefined symbols, - * and replace references to .func with func as in ppc64's dedotify. + * and replace references to .func with _Func */ int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs, @@ -64,8 +65,10 @@ int module_frob_arch_sections(Elf_Ehdr *hdr, sym[i].st_shndx = SHN_ABS; else { char *name = strtab + sym[i].st_name; - if (name[0] == '.') - memmove(name, name+1, strlen(name)); + if (name[0] == '.') { + name[0] = '_'; + name[1] = toupper(name[1]); + } } } } diff --git a/arch/sparc/kernel/sparc_ksyms.c b/arch/sparc/kernel/sparc_ksyms.c index f84809333624..1c8fd0fd9305 100644 --- a/arch/sparc/kernel/sparc_ksyms.c +++ b/arch/sparc/kernel/sparc_ksyms.c @@ -97,19 +97,12 @@ extern void ___rw_write_enter(void); /* Alias functions whose names begin with "." and export the aliases. * The module references will be fixed up by module_frob_arch_sections. */ -#define DOT_ALIAS2(__ret, __x, __arg1, __arg2) \ - extern __ret __x(__arg1, __arg2); \ - asm(".weak " #__x);\ - asm(#__x "=." #__x); - -DOT_ALIAS2(int, div, int, int) -DOT_ALIAS2(int, mul, int, int) -DOT_ALIAS2(int, rem, int, int) -DOT_ALIAS2(unsigned, udiv, unsigned, unsigned) -DOT_ALIAS2(unsigned, umul, unsigned, unsigned) -DOT_ALIAS2(unsigned, urem, unsigned, unsigned) - -#undef DOT_ALIAS2 +extern int _Div(int, int); +extern int _Mul(int, int); +extern int _Rem(int, int); +extern unsigned _Udiv(unsigned, unsigned); +extern unsigned _Umul(unsigned, unsigned); +extern unsigned _Urem(unsigned, unsigned); /* used by various drivers */ EXPORT_SYMBOL(sparc_cpu_model); @@ -320,12 +313,12 @@ EXPORT_SYMBOL(__lshrdi3); EXPORT_SYMBOL(__muldi3); EXPORT_SYMBOL(__divdi3); -EXPORT_SYMBOL(rem); -EXPORT_SYMBOL(urem); -EXPORT_SYMBOL(mul); -EXPORT_SYMBOL(umul); -EXPORT_SYMBOL(div); -EXPORT_SYMBOL(udiv); +EXPORT_SYMBOL(_Rem); +EXPORT_SYMBOL(_Urem); +EXPORT_SYMBOL(_Mul); +EXPORT_SYMBOL(_Umul); +EXPORT_SYMBOL(_Div); +EXPORT_SYMBOL(_Udiv); #ifdef CONFIG_DEBUG_BUGVERBOSE EXPORT_SYMBOL(do_BUG); -- cgit v1.2.3-59-g8ed1b