Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/riscv/include/elf.h
39536 views
1
/*-
2
* Copyright (c) 1996-1997 John D. Polstra.
3
* All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
*
14
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24
* SUCH DAMAGE.
25
*/
26
27
#ifndef _MACHINE_ELF_H_
28
#define _MACHINE_ELF_H_
29
30
/*
31
* ELF definitions for the RISC-V architecture.
32
*/
33
34
#include <sys/elf32.h> /* Definitions common to all 32 bit architectures. */
35
#include <sys/elf64.h> /* Definitions common to all 64 bit architectures. */
36
37
#define __ELF_WORD_SIZE 64 /* Used by <sys/elf_generic.h> */
38
#include <sys/elf_generic.h>
39
40
/*
41
* Auxiliary vector entries for passing information to the interpreter.
42
*/
43
44
typedef struct { /* Auxiliary vector entry on initial stack */
45
int a_type; /* Entry type. */
46
union {
47
int a_val; /* Integer value. */
48
} a_un;
49
} Elf32_Auxinfo;
50
51
typedef struct { /* Auxiliary vector entry on initial stack */
52
long a_type; /* Entry type. */
53
union {
54
long a_val; /* Integer value. */
55
void *a_ptr; /* Address. */
56
void (*a_fcn)(void); /* Function pointer (not used). */
57
} a_un;
58
} Elf64_Auxinfo;
59
60
__ElfType(Auxinfo);
61
62
#define ELF_ARCH EM_RISCV
63
64
#define ELF_MACHINE_OK(x) ((x) == (ELF_ARCH))
65
66
/* Define "machine" characteristics */
67
#define ELF_TARG_CLASS ELFCLASS64
68
#define ELF_TARG_DATA ELFDATA2LSB
69
#define ELF_TARG_MACH EM_RISCV
70
#define ELF_TARG_VER 1
71
72
/* TODO: set correct value */
73
#define ET_DYN_LOAD_ADDR 0x100000
74
75
/* Flags passed in AT_HWCAP */
76
#define HWCAP_ISA_BIT(c) (1 << ((c) - 'a'))
77
#define HWCAP_ISA_I HWCAP_ISA_BIT('i')
78
#define HWCAP_ISA_M HWCAP_ISA_BIT('m')
79
#define HWCAP_ISA_A HWCAP_ISA_BIT('a')
80
#define HWCAP_ISA_F HWCAP_ISA_BIT('f')
81
#define HWCAP_ISA_D HWCAP_ISA_BIT('d')
82
#define HWCAP_ISA_C HWCAP_ISA_BIT('c')
83
#define HWCAP_ISA_H HWCAP_ISA_BIT('h')
84
#define HWCAP_ISA_G \
85
(HWCAP_ISA_I | HWCAP_ISA_M | HWCAP_ISA_A | HWCAP_ISA_F | HWCAP_ISA_D)
86
#define HWCAP_ISA_B HWCAP_ISA_BIT('b')
87
88
#endif /* !_MACHINE_ELF_H_ */
89
90