Zephyr API Documentation
4.0.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
elf.h
Go to the documentation of this file.
1
8
/*
9
* Copyright (c) 2024 CISPA Helmholtz Center for Information Security gGmbH
10
*
11
* SPDX-License-Identifier: Apache-2.0
12
*/
13
#ifndef ZEPHYR_ARCH_RISCV_ELF_H
14
#define ZEPHYR_ARCH_RISCV_ELF_H
15
16
#include <
stdint.h
>
17
#include <
zephyr/sys/util_macro.h
>
18
19
#ifdef __cplusplus
20
extern
"C"
{
21
#endif
22
28
#define R_RISCV_NONE 0
29
#define R_RISCV_32 1
30
#define R_RISCV_64 2
31
#define R_RISCV_RELATIVE 3
32
#define R_RISCV_COPY 4
33
#define R_RISCV_JUMP_SLOT 5
34
#define R_RISCV_TLS_DTPMOD32 6
35
#define R_RISCV_TLS_DTPMOD64 7
36
#define R_RISCV_TLS_DTPREL32 8
37
#define R_RISCV_TLS_DTPREL64 9
38
#define R_RISCV_TLS_TPREL32 10
39
#define R_RISCV_TLS_TPREL64 11
40
#define R_RISCV_TLSDESC 12
41
/* 13-15 reserved */
42
#define R_RISCV_BRANCH 16
43
#define R_RISCV_JAL 17
44
#define R_RISCV_CALL 18
45
#define R_RISCV_CALL_PLT 19
46
#define R_RISCV_GOT_HI20 20
47
#define R_RISCV_TLS_GOT_HI20 21
48
#define R_RISCV_TLS_GD_HI20 22
49
#define R_RISCV_PCREL_HI20 23
50
#define R_RISCV_PCREL_LO12_I 24
51
#define R_RISCV_PCREL_LO12_S 25
52
#define R_RISCV_HI20 26
53
#define R_RISCV_LO12_I 27
54
#define R_RISCV_LO12_S 28
55
#define R_RISCV_TPREL_HI20 29
56
#define R_RISCV_TPREL_LO12_I 30
57
#define R_RISCV_TPREL_LO12_S 31
58
#define R_RISCV_TPREL_ADD 32
59
#define R_RISCV_ADD8 33
60
#define R_RISCV_ADD16 34
61
#define R_RISCV_ADD32 35
62
#define R_RISCV_ADD64 36
63
#define R_RISCV_SUB8 37
64
#define R_RISCV_SUB16 38
65
#define R_RISCV_SUB32 39
66
#define R_RISCV_SUB64 40
67
#define R_RISCV_GOT32_PCREL 41
68
/* 42 reserved */
69
#define R_RISCV_ALIGN 43
70
/* next two refer to compressed instructions */
71
#define R_RISCV_RVC_BRANCH 44
72
#define R_RISCV_RVC_JUMP 45
73
/* 46-50 reserved */
74
#define R_RISCV_RELAX 51
75
#define R_RISCV_SUB6 52
76
#define R_RISCV_SET6 53
77
#define R_RISCV_SET8 54
78
#define R_RISCV_SET16 55
79
#define R_RISCV_SET32 56
80
#define R_RISCV_32_PCREL 57
81
#define R_RISCV_IRELATIVE 58
82
#define R_RISCV_PLT32 59
83
#define R_RISCV_SET_ULEB128 60
84
#define R_RISCV_SUB_ULEB128 61
85
#define R_RISCV_TLSDESC_HI20 62
86
#define R_RISCV_TLSDESC_LOAD_LO12 63
87
#define R_RISCV_TLSDESC_ADD_LO12 64
88
#define R_RISCV_TLSDESC_CALL 65
89
/* 66-190 reserved */
90
#define R_RISCV_VENDOR 191
91
/* 192-255 reserved */
98
#if defined(CONFIG_64BIT)
99
typedef
uint64_t
r_riscv_wordclass_t;
100
#else
101
typedef
uint32_t
r_riscv_wordclass_t;
102
#endif
110
#define R_RISCV_IMM8_GET_BIT(imm8, bit) (((imm8) & BIT(bit)) >> (bit))
111
118
#define R_RISCV_BTYPE_IMM8_MASK(imm8) \
119
((R_RISCV_IMM8_GET_BIT(imm8, 12) << 31) | (R_RISCV_IMM8_GET_BIT(imm8, 10) << 30) | \
120
(R_RISCV_IMM8_GET_BIT(imm8, 9) << 29) | (R_RISCV_IMM8_GET_BIT(imm8, 8) << 28) | \
121
(R_RISCV_IMM8_GET_BIT(imm8, 7) << 27) | (R_RISCV_IMM8_GET_BIT(imm8, 6) << 26) | \
122
(R_RISCV_IMM8_GET_BIT(imm8, 5) << 25) | (R_RISCV_IMM8_GET_BIT(imm8, 4) << 11) | \
123
(R_RISCV_IMM8_GET_BIT(imm8, 3) << 10) | (R_RISCV_IMM8_GET_BIT(imm8, 2) << 9) | \
124
(R_RISCV_IMM8_GET_BIT(imm8, 1) << 8) | (R_RISCV_IMM8_GET_BIT(imm8, 11) << 7))
125
132
#define R_RISCV_JTYPE_IMM8_MASK(imm8) \
133
((R_RISCV_IMM8_GET_BIT(imm8, 20) << 31) | (R_RISCV_IMM8_GET_BIT(imm8, 10) << 30) | \
134
(R_RISCV_IMM8_GET_BIT(imm8, 9) << 29) | (R_RISCV_IMM8_GET_BIT(imm8, 8) << 28) | \
135
(R_RISCV_IMM8_GET_BIT(imm8, 7) << 27) | (R_RISCV_IMM8_GET_BIT(imm8, 6) << 26) | \
136
(R_RISCV_IMM8_GET_BIT(imm8, 5) << 25) | (R_RISCV_IMM8_GET_BIT(imm8, 4) << 24) | \
137
(R_RISCV_IMM8_GET_BIT(imm8, 3) << 23) | (R_RISCV_IMM8_GET_BIT(imm8, 2) << 22) | \
138
(R_RISCV_IMM8_GET_BIT(imm8, 1) << 21) | (R_RISCV_IMM8_GET_BIT(imm8, 11) << 20) | \
139
(R_RISCV_IMM8_GET_BIT(imm8, 19) << 19) | (R_RISCV_IMM8_GET_BIT(imm8, 18) << 18) | \
140
(R_RISCV_IMM8_GET_BIT(imm8, 17) << 17) | (R_RISCV_IMM8_GET_BIT(imm8, 16) << 16) | \
141
(R_RISCV_IMM8_GET_BIT(imm8, 15) << 15) | (R_RISCV_IMM8_GET_BIT(imm8, 14) << 14) | \
142
(R_RISCV_IMM8_GET_BIT(imm8, 13) << 13) | (R_RISCV_IMM8_GET_BIT(imm8, 12) << 12))
143
149
#define R_RISCV_STYPE_IMM8_MASK(imm8) \
150
((R_RISCV_IMM8_GET_BIT(imm8, 11) << 31) | (R_RISCV_IMM8_GET_BIT(imm8, 10) << 30) | \
151
(R_RISCV_IMM8_GET_BIT(imm8, 9) << 29) | (R_RISCV_IMM8_GET_BIT(imm8, 8) << 28) | \
152
(R_RISCV_IMM8_GET_BIT(imm8, 7) << 27) | (R_RISCV_IMM8_GET_BIT(imm8, 6) << 26) | \
153
(R_RISCV_IMM8_GET_BIT(imm8, 5) << 25) | (R_RISCV_IMM8_GET_BIT(imm8, 4) << 11) | \
154
(R_RISCV_IMM8_GET_BIT(imm8, 3) << 10) | (R_RISCV_IMM8_GET_BIT(imm8, 2) << 9) | \
155
(R_RISCV_IMM8_GET_BIT(imm8, 1) << 8) | (R_RISCV_IMM8_GET_BIT(imm8, 0) << 7))
156
163
#define R_RISCV_CJTYPE_IMM8_MASK(imm8) \
164
((R_RISCV_IMM8_GET_BIT(imm8, 11) << 12) | (R_RISCV_IMM8_GET_BIT(imm8, 4) << 11) | \
165
(R_RISCV_IMM8_GET_BIT(imm8, 9) << 10) | (R_RISCV_IMM8_GET_BIT(imm8, 8) << 9) | \
166
(R_RISCV_IMM8_GET_BIT(imm8, 10) << 8) | (R_RISCV_IMM8_GET_BIT(imm8, 6) << 7) | \
167
(R_RISCV_IMM8_GET_BIT(imm8, 7) << 6) | (R_RISCV_IMM8_GET_BIT(imm8, 3) << 5) | \
168
(R_RISCV_IMM8_GET_BIT(imm8, 2) << 4) | (R_RISCV_IMM8_GET_BIT(imm8, 1) << 3) | \
169
(R_RISCV_IMM8_GET_BIT(imm8, 5) << 2))
170
177
#define R_RISCV_CBTYPE_IMM8_MASK(imm8) \
178
((R_RISCV_IMM8_GET_BIT(imm8, 8) << 12) | (R_RISCV_IMM8_GET_BIT(imm8, 4) << 11) | \
179
(R_RISCV_IMM8_GET_BIT(imm8, 3) << 10) | (R_RISCV_IMM8_GET_BIT(imm8, 7) << 6) | \
180
(R_RISCV_IMM8_GET_BIT(imm8, 6) << 5) | (R_RISCV_IMM8_GET_BIT(imm8, 2) << 4) | \
181
(R_RISCV_IMM8_GET_BIT(imm8, 1) << 3) | (R_RISCV_IMM8_GET_BIT(imm8, 5) << 2))
182
188
#define R_RISCV_CLEAR_BTYPE_IMM8(operand) ((operand) & ~R_RISCV_BTYPE_IMM8_MASK((uint32_t) -1))
189
196
#define R_RISCV_SET_BTYPE_IMM8(operand, imm8) \
197
((R_RISCV_CLEAR_BTYPE_IMM8(operand)) | R_RISCV_BTYPE_IMM8_MASK(imm8))
198
204
#define R_RISCV_CLEAR_JTYPE_IMM8(operand) ((operand) & ~R_RISCV_JTYPE_IMM8_MASK((uint32_t) -1))
205
212
#define R_RISCV_SET_JTYPE_IMM8(operand, imm8) \
213
((R_RISCV_CLEAR_JTYPE_IMM8(operand)) | R_RISCV_JTYPE_IMM8_MASK(imm8))
214
220
#define R_RISCV_CLEAR_STYPE_IMM8(operand) ((operand) & ~R_RISCV_STYPE_IMM8_MASK((uint32_t) -1))
221
228
#define R_RISCV_SET_STYPE_IMM8(operand, imm8) \
229
((R_RISCV_CLEAR_STYPE_IMM8(operand)) | R_RISCV_STYPE_IMM8_MASK(imm8))
230
236
#define R_RISCV_CLEAR_CJTYPE_IMM8(operand) ((operand) & ~R_RISCV_CJTYPE_IMM8_MASK((uint32_t) -1))
237
244
#define R_RISCV_SET_CJTYPE_IMM8(operand, imm8) \
245
((R_RISCV_CLEAR_CJTYPE_IMM8(operand)) | R_RISCV_CJTYPE_IMM8_MASK(imm8))
246
252
#define R_RISCV_CLEAR_CBTYPE_IMM8(operand) ((operand) & ~R_RISCV_CBTYPE_IMM8_MASK((uint32_t) -1))
253
260
#define R_RISCV_SET_CBTYPE_IMM8(operand, imm8) \
261
((R_RISCV_CLEAR_CBTYPE_IMM8(operand)) | R_RISCV_CBTYPE_IMM8_MASK(imm8))
262
268
#define R_RISCV_CLEAR_UTYPE_IMM8(operand) ((operand) & ~(0xFFFFF000))
269
276
#define R_RISCV_SET_UTYPE_IMM8(operand, imm8) \
277
((R_RISCV_CLEAR_UTYPE_IMM8(operand)) | ((imm8) & 0xFFFFF000))
278
284
#define R_RISCV_CLEAR_ITYPE_IMM8(operand) ((operand) & ~(0xFFF00000))
285
292
#define R_RISCV_SET_ITYPE_IMM8(operand, imm8) ((R_RISCV_CLEAR_ITYPE_IMM8(operand)) | ((imm8) << 20))
293
294
#ifdef __cplusplus
295
}
296
#endif
297
298
#endif
/* ZEPHYR_ARCH_RISCV_ELF_H */
stdint.h
uint32_t
__UINT32_TYPE__ uint32_t
Definition
stdint.h:90
uint64_t
__UINT64_TYPE__ uint64_t
Definition
stdint.h:91
util_macro.h
Macro utilities.
zephyr
arch
riscv
elf.h
Generated on Mon Dec 23 2024 09:02:41 for Zephyr API Documentation by
1.12.0