diff options
author | David S. Miller <davem@davemloft.net> | 2012-05-15 14:23:01 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-05-15 14:23:47 -0400 |
commit | 1b35a57b1c1781f0fc8fc554f732b3a5408c5244 (patch) | |
tree | 80e5616798e0dc5ec138f020e6aa9ae482378462 /arch/sparc/kernel/module.c | |
parent | 2119ff6d2bc0dd6a97de1632e50cd7936049738c (diff) |
sparc32: Kill off software 32-bit multiply/divide routines.
For the explicit calls to .udiv/.umul in assembler, I made a
mechanical (read as: safe) transformation. I didn't attempt
to make any simplifications.
In particular, __ndelay and __udelay can be simplified significantly.
Some of the %y reads are unnecessary and these routines have no need
any longer for allocating a register window, they can be leaf
functions.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc/kernel/module.c')
-rw-r--r-- | arch/sparc/kernel/module.c | 21 |
1 files changed, 1 insertions, 20 deletions
diff --git a/arch/sparc/kernel/module.c b/arch/sparc/kernel/module.c index 276359e1ff56..15e0a1693976 100644 --- a/arch/sparc/kernel/module.c +++ b/arch/sparc/kernel/module.c | |||
@@ -32,26 +32,11 @@ static void *module_map(unsigned long size) | |||
32 | GFP_KERNEL, PAGE_KERNEL, -1, | 32 | GFP_KERNEL, PAGE_KERNEL, -1, |
33 | __builtin_return_address(0)); | 33 | __builtin_return_address(0)); |
34 | } | 34 | } |
35 | |||
36 | static char *dot2underscore(char *name) | ||
37 | { | ||
38 | return name; | ||
39 | } | ||
40 | #else | 35 | #else |
41 | static void *module_map(unsigned long size) | 36 | static void *module_map(unsigned long size) |
42 | { | 37 | { |
43 | return vmalloc(size); | 38 | return vmalloc(size); |
44 | } | 39 | } |
45 | |||
46 | /* Replace references to .func with _Func */ | ||
47 | static char *dot2underscore(char *name) | ||
48 | { | ||
49 | if (name[0] == '.') { | ||
50 | name[0] = '_'; | ||
51 | name[1] = toupper(name[1]); | ||
52 | } | ||
53 | return name; | ||
54 | } | ||
55 | #endif /* CONFIG_SPARC64 */ | 40 | #endif /* CONFIG_SPARC64 */ |
56 | 41 | ||
57 | void *module_alloc(unsigned long size) | 42 | void *module_alloc(unsigned long size) |
@@ -93,12 +78,8 @@ int module_frob_arch_sections(Elf_Ehdr *hdr, | |||
93 | 78 | ||
94 | for (i = 1; i < sechdrs[symidx].sh_size / sizeof(Elf_Sym); i++) { | 79 | for (i = 1; i < sechdrs[symidx].sh_size / sizeof(Elf_Sym); i++) { |
95 | if (sym[i].st_shndx == SHN_UNDEF) { | 80 | if (sym[i].st_shndx == SHN_UNDEF) { |
96 | if (ELF_ST_TYPE(sym[i].st_info) == STT_REGISTER) { | 81 | if (ELF_ST_TYPE(sym[i].st_info) == STT_REGISTER) |
97 | sym[i].st_shndx = SHN_ABS; | 82 | sym[i].st_shndx = SHN_ABS; |
98 | } else { | ||
99 | char *name = strtab + sym[i].st_name; | ||
100 | dot2underscore(name); | ||
101 | } | ||
102 | } | 83 | } |
103 | } | 84 | } |
104 | return 0; | 85 | return 0; |