diff options
| author | Andreas Larsson <andreas@gaisler.com> | 2012-09-17 15:59:52 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2012-09-21 15:14:19 -0400 |
| commit | dfa520af2c20aa3c75f0497d49165561212a1c6f (patch) | |
| tree | 74128cbf99e50ca31e5c07b4f25a0656ec49e588 | |
| parent | c46de2263f42fb4bbde411b9126f471e9343cb22 (diff) | |
sparc32: Enable the relocation target R_SPARC_DISP32 for sparc32
GNU Binutils 2.20.1 generates .eh_frame sections that uses R_SPARC_DISP32.
Signed-off-by: Andreas Larsson <andreas@gaisler.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | arch/sparc/kernel/module.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/arch/sparc/kernel/module.c b/arch/sparc/kernel/module.c index 15e0a1693976..bae6ab600b7f 100644 --- a/arch/sparc/kernel/module.c +++ b/arch/sparc/kernel/module.c | |||
| @@ -116,6 +116,10 @@ int apply_relocate_add(Elf_Shdr *sechdrs, | |||
| 116 | v = sym->st_value + rel[i].r_addend; | 116 | v = sym->st_value + rel[i].r_addend; |
| 117 | 117 | ||
| 118 | switch (ELF_R_TYPE(rel[i].r_info) & 0xff) { | 118 | switch (ELF_R_TYPE(rel[i].r_info) & 0xff) { |
| 119 | case R_SPARC_DISP32: | ||
| 120 | v -= (Elf_Addr) location; | ||
| 121 | *loc32 = v; | ||
| 122 | break; | ||
| 119 | #ifdef CONFIG_SPARC64 | 123 | #ifdef CONFIG_SPARC64 |
| 120 | case R_SPARC_64: | 124 | case R_SPARC_64: |
| 121 | location[0] = v >> 56; | 125 | location[0] = v >> 56; |
| @@ -128,11 +132,6 @@ int apply_relocate_add(Elf_Shdr *sechdrs, | |||
| 128 | location[7] = v >> 0; | 132 | location[7] = v >> 0; |
| 129 | break; | 133 | break; |
| 130 | 134 | ||
| 131 | case R_SPARC_DISP32: | ||
| 132 | v -= (Elf_Addr) location; | ||
| 133 | *loc32 = v; | ||
| 134 | break; | ||
| 135 | |||
| 136 | case R_SPARC_WDISP19: | 135 | case R_SPARC_WDISP19: |
| 137 | v -= (Elf_Addr) location; | 136 | v -= (Elf_Addr) location; |
| 138 | *loc32 = (*loc32 & ~0x7ffff) | | 137 | *loc32 = (*loc32 & ~0x7ffff) | |
