RTEMS
6.3
Toggle main menu visibility
Loading...
Searching...
No Matches
cpukit
score
cpu
riscv
include
machine
elf_machdep.h
1
/* $NetBSD: elf_machdep.h,v 1.6 2017/11/06 03:47:48 christos Exp $ */
2
3
/*-
4
* Copyright (c) 2019 Hesham Almatary
5
*
6
* Copyright (c) 2014 The NetBSD Foundation, Inc.
7
* All rights reserved.
8
*
9
* This code is derived from software contributed to The NetBSD Foundation
10
* by Matt Thomas of 3am Software Foundry.
11
*
12
* Redistribution and use in source and binary forms, with or without
13
* modification, are permitted provided that the following conditions
14
* are met:
15
* 1. Redistributions of source code must retain the above copyright
16
* notice, this list of conditions and the following disclaimer.
17
* 2. Redistributions in binary form must reproduce the above copyright
18
* notice, this list of conditions and the following disclaimer in the
19
* documentation and/or other materials provided with the distribution.
20
*
21
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
22
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
23
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
25
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31
* POSSIBILITY OF SUCH DAMAGE.
32
*/
33
34
#ifndef _RISCV_ELF_MACHDEP_H_
35
#define _RISCV_ELF_MACHDEP_H_
36
37
#define EM_RISCV 243
38
#define ELF32_MACHDEP_ID EM_RISCV
39
#define ELF64_MACHDEP_ID EM_RISCV
40
41
#define ELF32_MACHDEP_ENDIANNESS ELFDATA2LSB
42
#define ELF64_MACHDEP_ENDIANNESS ELFDATA2LSB
43
44
#define ELF32_MACHDEP_ID_CASES \
45
case EM_RISCV: \
46
break;
47
48
#define ELF64_MACHDEP_ID_CASES \
49
case EM_RISCV: \
50
break;
51
52
#define KERN_ELFSIZE 32
53
#ifdef _LP64
54
#define ARCH_ELFSIZE 64
/* MD native binary size */
55
#else
56
#define ARCH_ELFSIZE 32
/* MD native binary size */
57
#endif
58
59
/* Processor specific flags for the ELF header e_flags field. */
60
61
/* Processor specific relocation types */
62
63
#define R_RISCV_NONE 0
64
#define R_RISCV_32 1
// A
65
#define R_RISCV_64 2
66
#define R_RISCV_RELATIVE 3
67
#define R_RISCV_COPY 4
68
#define R_RISCV_JMP_SLOT 5
69
#define R_RISCV_TLS_DTPMOD32 6
70
#define R_RISCV_TLS_DTPREL32 7
71
#define R_RISCV_TLS_DTPMOD64 8
72
#define R_RISCV_TLS_DTPREL64 9
73
#define R_RISCV_TLS_TPREL32 10
74
#define R_RISCV_TLS_TPREL64 11
75
76
/* The rest are not used by the dynamic linker */
77
#define R_RISCV_BRANCH 16
// (A - P) & 0xffff
78
#define R_RISCV_JAL 17
// A & 0xff
79
#define R_RISCV_CALL 18
// (A - P) & 0xff
80
#define R_RISCV_CALL_PLT 19
81
#define R_RISCV_GOT_HI20 20
82
#define R_RISCV_TLS_GOT_HI20 21
83
#define R_RISCV_TLS_GD_HI20 22
84
#define R_RISCV_PCREL_HI20 23
85
#define R_RISCV_PCREL_LO12_I 24
86
#define R_RISCV_PCREL_LO12_S 25
87
#define R_RISCV_HI20 26
// A & 0xffff
88
#define R_RISCV_LO12_I 27
// (A >> 16) & 0xffff
89
#define R_RISCV_LO12_S 28
// (S + A - P) >> 2
90
#define R_RISCV_TPREL_HI20 29
91
#define R_RISCV_TPREL_LO12_I 30
92
#define R_RISCV_TPREL_LO12_S 31
93
#define R_RISCV_TPREL_ADD 32
94
#define R_RISCV_ADD8 33
95
#define R_RISCV_ADD16 34
96
#define R_RISCV_ADD32 35
97
#define R_RISCV_ADD64 36
98
#define R_RISCV_SUB8 37
99
#define R_RISCV_SUB16 38
100
#define R_RISCV_SUB32 39
101
#define R_RISCV_SUB64 40
102
#define R_RISCV_GNU_VTINHERIT 41
// A & 0xffff
103
#define R_RISCV_GNU_VTENTRY 42
104
#define R_RISCV_ALIGN 43
105
#define R_RISCV_RVC_BRANCH 44
106
#define R_RISCV_RVC_JUMP 45
107
#define R_RISCV_RVC_LUI 46
108
109
#define R_RISCV_RELAX 51
110
#define R_RISCV_SUB6 52
111
#define R_RISCV_SET6 53
112
#define R_RISCV_SET8 54
113
#define R_RISCV_SET16 55
114
#define R_RISCV_SET32 56
115
116
#define R_RISCV_32_PCREL 57
117
118
/* These are aliases we can use R_TYPESZ */
119
#define R_RISCV_ADDR32 R_RISCV_32
120
#define R_RISCV_ADDR64 R_RISCV_64
121
122
#define R_TYPE(name) R_RISCV_ ## name
123
#if ELFSIZE == 32
124
#define R_TYPESZ(name) R_RISCV_ ## name ## 32
125
#else
126
#define R_TYPESZ(name) R_RISCV_ ## name ## 64
127
#endif
128
129
#ifdef _KERNEL
130
#ifdef ELFSIZE
131
#define ELF_MD_PROBE_FUNC ELFNAME2(cpu_netbsd,probe)
132
#endif
133
134
struct
exec_package;
135
136
int
cpu_netbsd_elf32_probe(
struct
lwp *,
struct
exec_package *,
void
*,
char
*,
137
vaddr_t *);
138
139
int
cpu_netbsd_elf64_probe(
struct
lwp *,
struct
exec_package *,
void
*,
char
*,
140
vaddr_t *);
141
142
#endif
/* _KERNEL */
143
144
#endif
/* _RISCV_ELF_MACHDEP_H_ */
Generated by
1.18.0