Commit 26f53f23 authored by Stafford Horne's avatar Stafford Horne

openrisc: Define openrisc relocation types

This defines the current OpenRISC relocation types using the current
R_OR1K_* naming conventions.

The old R_OR32_* definitions are left for backwards compatibility.
Note, the R_OR32_VTENTRY and R_OR32_VTINHERIT macros were defined with
the wrong values the have always been 7 and 8 respectively, not 8 and 7.
They are not used for module loading and I have updated them to use the
correct values.
Signed-off-by: default avatarStafford Horne <shorne@gmail.com>
parent c94195a3
...@@ -34,15 +34,72 @@ ...@@ -34,15 +34,72 @@
#include <asm/ptrace.h> #include <asm/ptrace.h>
/* The OR1K relocation types... not all relevant for module loader */ /* The OR1K relocation types... not all relevant for module loader */
#define R_OR32_NONE 0 #define R_OR1K_NONE 0
#define R_OR32_32 1 #define R_OR1K_32 1
#define R_OR32_16 2 #define R_OR1K_16 2
#define R_OR32_8 3 #define R_OR1K_8 3
#define R_OR32_CONST 4 #define R_OR1K_LO_16_IN_INSN 4
#define R_OR32_CONSTH 5 #define R_OR1K_HI_16_IN_INSN 5
#define R_OR32_JUMPTARG 6 #define R_OR1K_INSN_REL_26 6
#define R_OR32_VTINHERIT 7 #define R_OR1K_GNU_VTENTRY 7
#define R_OR32_VTENTRY 8 #define R_OR1K_GNU_VTINHERIT 8
#define R_OR1K_32_PCREL 9
#define R_OR1K_16_PCREL 10
#define R_OR1K_8_PCREL 11
#define R_OR1K_GOTPC_HI16 12
#define R_OR1K_GOTPC_LO16 13
#define R_OR1K_GOT16 14
#define R_OR1K_PLT26 15
#define R_OR1K_GOTOFF_HI16 16
#define R_OR1K_GOTOFF_LO16 17
#define R_OR1K_COPY 18
#define R_OR1K_GLOB_DAT 19
#define R_OR1K_JMP_SLOT 20
#define R_OR1K_RELATIVE 21
#define R_OR1K_TLS_GD_HI16 22
#define R_OR1K_TLS_GD_LO16 23
#define R_OR1K_TLS_LDM_HI16 24
#define R_OR1K_TLS_LDM_LO16 25
#define R_OR1K_TLS_LDO_HI16 26
#define R_OR1K_TLS_LDO_LO16 27
#define R_OR1K_TLS_IE_HI16 28
#define R_OR1K_TLS_IE_LO16 29
#define R_OR1K_TLS_LE_HI16 30
#define R_OR1K_TLS_LE_LO16 31
#define R_OR1K_TLS_TPOFF 32
#define R_OR1K_TLS_DTPOFF 33
#define R_OR1K_TLS_DTPMOD 34
#define R_OR1K_AHI16 35
#define R_OR1K_GOTOFF_AHI16 36
#define R_OR1K_TLS_IE_AHI16 37
#define R_OR1K_TLS_LE_AHI16 38
#define R_OR1K_SLO16 39
#define R_OR1K_GOTOFF_SLO16 40
#define R_OR1K_TLS_LE_SLO16 41
#define R_OR1K_PCREL_PG21 42
#define R_OR1K_GOT_PG21 43
#define R_OR1K_TLS_GD_PG21 44
#define R_OR1K_TLS_LDM_PG21 45
#define R_OR1K_TLS_IE_PG21 46
#define R_OR1K_LO13 47
#define R_OR1K_GOT_LO13 48
#define R_OR1K_TLS_GD_LO13 49
#define R_OR1K_TLS_LDM_LO13 50
#define R_OR1K_TLS_IE_LO13 51
#define R_OR1K_SLO13 52
#define R_OR1K_PLTA26 53
#define R_OR1K_GOT_AHI16 54
/* Old relocation names */
#define R_OR32_NONE R_OR1K_NONE
#define R_OR32_32 R_OR1K_32
#define R_OR32_16 R_OR1K_16
#define R_OR32_8 R_OR1K_8
#define R_OR32_CONST R_OR1K_LO_16_IN_INSN
#define R_OR32_CONSTH R_OR1K_HI_16_IN_INSN
#define R_OR32_JUMPTARG R_OR1K_INSN_REL_26
#define R_OR32_VTENTRY R_OR1K_GNU_VTENTRY
#define R_OR32_VTINHERIT R_OR1K_GNU_VTINHERIT
typedef unsigned long elf_greg_t; typedef unsigned long elf_greg_t;
......
...@@ -39,16 +39,16 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, ...@@ -39,16 +39,16 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
value = sym->st_value + rel[i].r_addend; value = sym->st_value + rel[i].r_addend;
switch (ELF32_R_TYPE(rel[i].r_info)) { switch (ELF32_R_TYPE(rel[i].r_info)) {
case R_OR32_32: case R_OR1K_32:
*location = value; *location = value;
break; break;
case R_OR32_CONST: case R_OR1K_LO_16_IN_INSN:
*((uint16_t *)location + 1) = value; *((uint16_t *)location + 1) = value;
break; break;
case R_OR32_CONSTH: case R_OR1K_HI_16_IN_INSN:
*((uint16_t *)location + 1) = value >> 16; *((uint16_t *)location + 1) = value >> 16;
break; break;
case R_OR32_JUMPTARG: case R_OR1K_INSN_REL_26:
value -= (uint32_t)location; value -= (uint32_t)location;
value >>= 2; value >>= 2;
value &= 0x03ffffff; value &= 0x03ffffff;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment