diff options
Diffstat (limited to 'arch/sparc/kernel/module.c')
| -rw-r--r-- | arch/sparc/kernel/module.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/arch/sparc/kernel/module.c b/arch/sparc/kernel/module.c index 15e0a1693976..f1ddc0d23679 100644 --- a/arch/sparc/kernel/module.c +++ b/arch/sparc/kernel/module.c | |||
| @@ -48,9 +48,7 @@ void *module_alloc(unsigned long size) | |||
| 48 | return NULL; | 48 | return NULL; |
| 49 | 49 | ||
| 50 | ret = module_map(size); | 50 | ret = module_map(size); |
| 51 | if (!ret) | 51 | if (ret) |
| 52 | ret = ERR_PTR(-ENOMEM); | ||
| 53 | else | ||
| 54 | memset(ret, 0, size); | 52 | memset(ret, 0, size); |
| 55 | 53 | ||
| 56 | return ret; | 54 | return ret; |
| @@ -116,6 +114,10 @@ int apply_relocate_add(Elf_Shdr *sechdrs, | |||
| 116 | v = sym->st_value + rel[i].r_addend; | 114 | v = sym->st_value + rel[i].r_addend; |
| 117 | 115 | ||
| 118 | switch (ELF_R_TYPE(rel[i].r_info) & 0xff) { | 116 | switch (ELF_R_TYPE(rel[i].r_info) & 0xff) { |
| 117 | case R_SPARC_DISP32: | ||
| 118 | v -= (Elf_Addr) location; | ||
| 119 | *loc32 = v; | ||
| 120 | break; | ||
| 119 | #ifdef CONFIG_SPARC64 | 121 | #ifdef CONFIG_SPARC64 |
| 120 | case R_SPARC_64: | 122 | case R_SPARC_64: |
| 121 | location[0] = v >> 56; | 123 | location[0] = v >> 56; |
| @@ -128,11 +130,6 @@ int apply_relocate_add(Elf_Shdr *sechdrs, | |||
| 128 | location[7] = v >> 0; | 130 | location[7] = v >> 0; |
| 129 | break; | 131 | break; |
| 130 | 132 | ||
| 131 | case R_SPARC_DISP32: | ||
| 132 | v -= (Elf_Addr) location; | ||
| 133 | *loc32 = v; | ||
| 134 | break; | ||
| 135 | |||
| 136 | case R_SPARC_WDISP19: | 133 | case R_SPARC_WDISP19: |
| 137 | v -= (Elf_Addr) location; | 134 | v -= (Elf_Addr) location; |
| 138 | *loc32 = (*loc32 & ~0x7ffff) | | 135 | *loc32 = (*loc32 & ~0x7ffff) | |
