1/* $OpenBSD: exec.h,v 1.11 2017/02/08 05:09:26 guenther Exp $ */
2/* $NetBSD: elf_machdep.h,v 1.7 2001/02/11 00:18:49 eeh Exp $ */
3
4#define ARCH_ELFSIZE 64 /* MD native binary size */
5#define ELF_TARG_CLASS ELFCLASS64
6#define ELF_TARG_MACH EM_SPARCV9
7
8#define ELF_TARG_DATA ELFDATA2MSB
9
10/* The following are what is used for AT_SUN_HWCAP: */
11#define AV_SPARC_HWMUL_32x32 1 /* 32x32-bit smul/umul is efficient */
12#define AV_SPARC_HWDIV_32x32 2 /* 32x32-bit sdiv/udiv is efficient */
13#define AV_SPARC_HWFSMULD 4 /* fsmuld is efficient */
14
15/*
16 * Here are some SPARC specific flags I can't
17 * find a better home for. They are used for AT_FLAGS
18 * and in the exec header.
19 */
20#define EF_SPARCV9_MM 0x3
21#define EF_SPARCV9_TSO 0x0
22#define EF_SPARCV9_PSO 0x1
23#define EF_SPARCV9_RMO 0x2
24
25#define EF_SPARC_32PLUS_MASK 0xffff00 /* bits indicating V8+ type */
26#define EF_SPARC_32PLUS 0x000100 /* generic V8+ features */
27#define EF_SPARC_EXT_MASK 0xffff00 /* bits for vendor extensions */
28#define EF_SPARC_SUN_US1 0x000200 /* UltraSPARC 1 extensions */
29#define EF_SPARC_HAL_R1 0x000400 /* HAL R1 extensions */
30#define EF_SPARC_SUN_US3 0x000800 /* UltraSPARC 3 extensions */
31
32/* Relocation types */
33#define R_SPARC_NONE 0
34#define R_SPARC_8 1
35#define R_SPARC_16 2
36#define R_SPARC_32 3
37#define R_SPARC_DISP8 4
38#define R_SPARC_DISP16 5
39#define R_SPARC_DISP32 6
40#define R_SPARC_WDISP30 7
41#define R_SPARC_WDISP22 8
42#define R_SPARC_HI22 9
43#define R_SPARC_22 10
44#define R_SPARC_13 11
45#define R_SPARC_LO10 12
46#define R_SPARC_GOT10 13
47#define R_SPARC_GOT13 14
48#define R_SPARC_GOT22 15
49#define R_SPARC_PC10 16
50#define R_SPARC_PC22 17
51#define R_SPARC_WPLT30 18
52#define R_SPARC_COPY 19
53#define R_SPARC_GLOB_DAT 20
54#define R_SPARC_JMP_SLOT 21
55#define R_SPARC_RELATIVE 22
56#define R_SPARC_UA32 23
57#define R_SPARC_PLT32 24
58#define R_SPARC_HIPLT22 25
59#define R_SPARC_LOPLT10 26
60#define R_SPARC_PCPLT32 27
61#define R_SPARC_PCPLT22 28
62#define R_SPARC_PCPLT10 29
63#define R_SPARC_10 30
64#define R_SPARC_11 31
65#define R_SPARC_64 32
66#define R_SPARC_OLO10 33
67#define R_SPARC_HH22 34
68#define R_SPARC_HM10 35
69#define R_SPARC_LM22 36
70#define R_SPARC_PC_HH22 37
71#define R_SPARC_PC_HM10 38
72#define R_SPARC_PC_LM22 39
73#define R_SPARC_WDISP16 40
74#define R_SPARC_WDISP19 41
75#define R_SPARC_GLOB_JMP 42
76#define R_SPARC_7 43
77#define R_SPARC_5 44
78#define R_SPARC_6 45
79#define R_SPARC_DISP64 46
80#define R_SPARC_PLT64 47
81#define R_SPARC_HIX22 48
82#define R_SPARC_LOX10 49
83#define R_SPARC_H44 50
84#define R_SPARC_M44 51
85#define R_SPARC_L44 52
86#define R_SPARC_REGISTER 53
87#define R_SPARC_UA64 54
88#define R_SPARC_UA16 55
89#define R_SPARC_TLS_DTPMOD32 74
90#define R_SPARC_TLS_DTPMOD64 75
91#define R_SPARC_TLS_DTPOFF32 76
92#define R_SPARC_TLS_DTPOFF64 77
93#define R_SPARC_TLS_TPOFF32 78
94#define R_SPARC_TLS_TPOFF64 79
95
96
97#define R_TYPE(name) __CONCAT(R_SPARC_,name)
98
99#define __LDPGSZ 8192 /* linker page size */