xref: /openbmc/linux/arch/riscv/include/uapi/asm/elf.h (revision c480d891)
1e2c0cdfbSPalmer Dabbelt /*
2e2c0cdfbSPalmer Dabbelt  * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com>
3e2c0cdfbSPalmer Dabbelt  * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se>
4e2c0cdfbSPalmer Dabbelt  * Copyright (C) 2012 Regents of the University of California
5e2c0cdfbSPalmer Dabbelt  *
6e2c0cdfbSPalmer Dabbelt  * This program is free software; you can redistribute it and/or modify
7e2c0cdfbSPalmer Dabbelt  * it under the terms of the GNU General Public License as published by
8e2c0cdfbSPalmer Dabbelt  * the Free Software Foundation; either version 2 of the License, or
9e2c0cdfbSPalmer Dabbelt  * (at your option) any later version.
10e2c0cdfbSPalmer Dabbelt  */
11e2c0cdfbSPalmer Dabbelt 
12e2c0cdfbSPalmer Dabbelt #ifndef _UAPI_ASM_ELF_H
13e2c0cdfbSPalmer Dabbelt #define _UAPI_ASM_ELF_H
14e2c0cdfbSPalmer Dabbelt 
15e2c0cdfbSPalmer Dabbelt #include <asm/ptrace.h>
16e2c0cdfbSPalmer Dabbelt 
17e2c0cdfbSPalmer Dabbelt /* ELF register definitions */
18e2c0cdfbSPalmer Dabbelt typedef unsigned long elf_greg_t;
19e2c0cdfbSPalmer Dabbelt typedef struct user_regs_struct elf_gregset_t;
20e2c0cdfbSPalmer Dabbelt #define ELF_NGREG (sizeof(elf_gregset_t) / sizeof(elf_greg_t))
21e2c0cdfbSPalmer Dabbelt 
22e2c0cdfbSPalmer Dabbelt typedef union __riscv_fp_state elf_fpregset_t;
23e2c0cdfbSPalmer Dabbelt 
24c480d891SZong Li #if __riscv_xlen == 64
25c480d891SZong Li #define ELF_RISCV_R_SYM(r_info)		ELF64_R_SYM(r_info)
26c480d891SZong Li #define ELF_RISCV_R_TYPE(r_info)	ELF64_R_TYPE(r_info)
27c480d891SZong Li #else
28c480d891SZong Li #define ELF_RISCV_R_SYM(r_info)		ELF32_R_SYM(r_info)
29c480d891SZong Li #define ELF_RISCV_R_TYPE(r_info)	ELF32_R_TYPE(r_info)
30c480d891SZong Li #endif
31e2c0cdfbSPalmer Dabbelt 
32e2c0cdfbSPalmer Dabbelt /*
33e2c0cdfbSPalmer Dabbelt  * RISC-V relocation types
34e2c0cdfbSPalmer Dabbelt  */
35e2c0cdfbSPalmer Dabbelt 
36e2c0cdfbSPalmer Dabbelt /* Relocation types used by the dynamic linker */
37e2c0cdfbSPalmer Dabbelt #define R_RISCV_NONE		0
38e2c0cdfbSPalmer Dabbelt #define R_RISCV_32		1
39e2c0cdfbSPalmer Dabbelt #define R_RISCV_64		2
40e2c0cdfbSPalmer Dabbelt #define R_RISCV_RELATIVE	3
41e2c0cdfbSPalmer Dabbelt #define R_RISCV_COPY		4
42e2c0cdfbSPalmer Dabbelt #define R_RISCV_JUMP_SLOT	5
43e2c0cdfbSPalmer Dabbelt #define R_RISCV_TLS_DTPMOD32	6
44e2c0cdfbSPalmer Dabbelt #define R_RISCV_TLS_DTPMOD64	7
45e2c0cdfbSPalmer Dabbelt #define R_RISCV_TLS_DTPREL32	8
46e2c0cdfbSPalmer Dabbelt #define R_RISCV_TLS_DTPREL64	9
47e2c0cdfbSPalmer Dabbelt #define R_RISCV_TLS_TPREL32	10
48e2c0cdfbSPalmer Dabbelt #define R_RISCV_TLS_TPREL64	11
49e2c0cdfbSPalmer Dabbelt 
50e2c0cdfbSPalmer Dabbelt /* Relocation types not used by the dynamic linker */
51e2c0cdfbSPalmer Dabbelt #define R_RISCV_BRANCH		16
52e2c0cdfbSPalmer Dabbelt #define R_RISCV_JAL		17
53e2c0cdfbSPalmer Dabbelt #define R_RISCV_CALL		18
54e2c0cdfbSPalmer Dabbelt #define R_RISCV_CALL_PLT	19
55e2c0cdfbSPalmer Dabbelt #define R_RISCV_GOT_HI20	20
56e2c0cdfbSPalmer Dabbelt #define R_RISCV_TLS_GOT_HI20	21
57e2c0cdfbSPalmer Dabbelt #define R_RISCV_TLS_GD_HI20	22
58e2c0cdfbSPalmer Dabbelt #define R_RISCV_PCREL_HI20	23
59e2c0cdfbSPalmer Dabbelt #define R_RISCV_PCREL_LO12_I	24
60e2c0cdfbSPalmer Dabbelt #define R_RISCV_PCREL_LO12_S	25
61e2c0cdfbSPalmer Dabbelt #define R_RISCV_HI20		26
62e2c0cdfbSPalmer Dabbelt #define R_RISCV_LO12_I		27
63e2c0cdfbSPalmer Dabbelt #define R_RISCV_LO12_S		28
64e2c0cdfbSPalmer Dabbelt #define R_RISCV_TPREL_HI20	29
65e2c0cdfbSPalmer Dabbelt #define R_RISCV_TPREL_LO12_I	30
66e2c0cdfbSPalmer Dabbelt #define R_RISCV_TPREL_LO12_S	31
67e2c0cdfbSPalmer Dabbelt #define R_RISCV_TPREL_ADD	32
68e2c0cdfbSPalmer Dabbelt #define R_RISCV_ADD8		33
69e2c0cdfbSPalmer Dabbelt #define R_RISCV_ADD16		34
70e2c0cdfbSPalmer Dabbelt #define R_RISCV_ADD32		35
71e2c0cdfbSPalmer Dabbelt #define R_RISCV_ADD64		36
72e2c0cdfbSPalmer Dabbelt #define R_RISCV_SUB8		37
73e2c0cdfbSPalmer Dabbelt #define R_RISCV_SUB16		38
74e2c0cdfbSPalmer Dabbelt #define R_RISCV_SUB32		39
75e2c0cdfbSPalmer Dabbelt #define R_RISCV_SUB64		40
76e2c0cdfbSPalmer Dabbelt #define R_RISCV_GNU_VTINHERIT	41
77e2c0cdfbSPalmer Dabbelt #define R_RISCV_GNU_VTENTRY	42
78e2c0cdfbSPalmer Dabbelt #define R_RISCV_ALIGN		43
79e2c0cdfbSPalmer Dabbelt #define R_RISCV_RVC_BRANCH	44
80e2c0cdfbSPalmer Dabbelt #define R_RISCV_RVC_JUMP	45
81e2c0cdfbSPalmer Dabbelt #define R_RISCV_LUI		46
82e2c0cdfbSPalmer Dabbelt #define R_RISCV_GPREL_I		47
83e2c0cdfbSPalmer Dabbelt #define R_RISCV_GPREL_S		48
84e2c0cdfbSPalmer Dabbelt #define R_RISCV_TPREL_I		49
85e2c0cdfbSPalmer Dabbelt #define R_RISCV_TPREL_S		50
86e2c0cdfbSPalmer Dabbelt #define R_RISCV_RELAX		51
87e21d5421SZong Li #define R_RISCV_SUB6		52
88e21d5421SZong Li #define R_RISCV_SET6		53
89e21d5421SZong Li #define R_RISCV_SET8		54
90e21d5421SZong Li #define R_RISCV_SET16		55
91e21d5421SZong Li #define R_RISCV_SET32		56
92e21d5421SZong Li #define R_RISCV_32_PCREL	57
93e21d5421SZong Li 
94e2c0cdfbSPalmer Dabbelt 
95e2c0cdfbSPalmer Dabbelt #endif /* _UAPI_ASM_ELF_H */
96