mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
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: Stafford Horne <shorne@gmail.com>
This commit is contained in:
parent
c94195a34e
commit
26f53f2395
2 changed files with 70 additions and 13 deletions
|
@ -34,15 +34,72 @@
|
|||
#include <asm/ptrace.h>
|
||||
|
||||
/* The OR1K relocation types... not all relevant for module loader */
|
||||
#define R_OR32_NONE 0
|
||||
#define R_OR32_32 1
|
||||
#define R_OR32_16 2
|
||||
#define R_OR32_8 3
|
||||
#define R_OR32_CONST 4
|
||||
#define R_OR32_CONSTH 5
|
||||
#define R_OR32_JUMPTARG 6
|
||||
#define R_OR32_VTINHERIT 7
|
||||
#define R_OR32_VTENTRY 8
|
||||
#define R_OR1K_NONE 0
|
||||
#define R_OR1K_32 1
|
||||
#define R_OR1K_16 2
|
||||
#define R_OR1K_8 3
|
||||
#define R_OR1K_LO_16_IN_INSN 4
|
||||
#define R_OR1K_HI_16_IN_INSN 5
|
||||
#define R_OR1K_INSN_REL_26 6
|
||||
#define R_OR1K_GNU_VTENTRY 7
|
||||
#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;
|
||||
|
||||
|
|
|
@ -39,16 +39,16 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
|
|||
value = sym->st_value + rel[i].r_addend;
|
||||
|
||||
switch (ELF32_R_TYPE(rel[i].r_info)) {
|
||||
case R_OR32_32:
|
||||
case R_OR1K_32:
|
||||
*location = value;
|
||||
break;
|
||||
case R_OR32_CONST:
|
||||
case R_OR1K_LO_16_IN_INSN:
|
||||
*((uint16_t *)location + 1) = value;
|
||||
break;
|
||||
case R_OR32_CONSTH:
|
||||
case R_OR1K_HI_16_IN_INSN:
|
||||
*((uint16_t *)location + 1) = value >> 16;
|
||||
break;
|
||||
case R_OR32_JUMPTARG:
|
||||
case R_OR1K_INSN_REL_26:
|
||||
value -= (uint32_t)location;
|
||||
value >>= 2;
|
||||
value &= 0x03ffffff;
|
||||
|
|
Loading…
Add table
Reference in a new issue