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 <sho...@gmail.com>
---
 arch/openrisc/include/uapi/asm/elf.h | 75 ++++++++++++++++++++++++----
 arch/openrisc/kernel/module.c        |  8 +--
 2 files changed, 70 insertions(+), 13 deletions(-)

diff --git a/arch/openrisc/include/uapi/asm/elf.h 
b/arch/openrisc/include/uapi/asm/elf.h
index 6868f81c281e..441e343f8268 100644
--- a/arch/openrisc/include/uapi/asm/elf.h
+++ b/arch/openrisc/include/uapi/asm/elf.h
@@ -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;
 
diff --git a/arch/openrisc/kernel/module.c b/arch/openrisc/kernel/module.c
index 532013f523ac..292f0afe27b9 100644
--- a/arch/openrisc/kernel/module.c
+++ b/arch/openrisc/kernel/module.c
@@ -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;
-- 
2.44.0


Reply via email to