openrisc: Define openrisc relocation types
authorStafford Horne <shorne@gmail.com>
Thu, 11 Apr 2024 16:03:18 +0000 (17:03 +0100)
committerStafford Horne <shorne@gmail.com>
Mon, 15 Apr 2024 14:20:39 +0000 (15:20 +0100)
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>
arch/openrisc/include/uapi/asm/elf.h
arch/openrisc/kernel/module.c

index 6868f81c281ecb5676d1df2955f3f2f48e5decc9..441e343f82682a34f1c8ba4be3653c606d9fcc93 100644 (file)
 #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;
 
index 532013f523ac5f8e819ac3242ad161fc4da43714..292f0afe27b98eacf8435483f580ce3edbf6df3f 100644 (file)
@@ -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;