1 /* $NetBSD: elf_machdep.h,v 1.16 2025/04/18 17:56:50 riastradh Exp $ */
2 
3 #ifndef   _ALPHA_ELF_MACHDEP_H_
4 #define   _ALPHA_ELF_MACHDEP_H_
5 
6 /*
7  * Alpha ELF uses different (non-standard) definitions for the symbol
8  * hash table section.
9  */
10 #define   Elf_Symindx         uint64_t
11 
12 #define   ELF32_MACHDEP_ENDIANNESS      XXX       /* break compilation */
13 #define   ELF32_MACHDEP_ID_CASES                                                          \
14                     /* no 32-bit ELF machine types supported */
15 
16 #define   ELF64_MACHDEP_ENDIANNESS      ELFDATA2LSB
17 #define   ELF64_MACHDEP_ID_CASES                                                          \
18                     case EM_OLD_ALPHA:                                          \
19                     case EM_ALPHA:                                                        \
20                               break;
21 
22 #define   ELF64_MACHDEP_ID    EM_ALPHA
23 
24 #define   KERN_ELFSIZE                  64
25 #define ARCH_ELFSIZE                    64        /* MD native binary size */
26 
27 /*
28  * Alpha Relocation Types
29  */
30 #define   R_ALPHA_NONE                  0         /* No reloc */
31 #define   R_ALPHA_REFLONG               1         /* Direct 32 bit */
32 #define   R_ALPHA_REFQUAD               2         /* Direct 64 bit */
33 #define   R_ALPHA_GPREL32               3         /* GP relative 32 bit */
34 #define   R_ALPHA_LITERAL               4         /* GP relative 16 bit w/optimization */
35 #define   R_ALPHA_LITUSE                5         /* Optimization hint for LITERAL */
36 #define   R_ALPHA_GPDISP                6         /* Add displacement to GP */
37 #define   R_ALPHA_BRADDR                7         /* PC+4 relative 23 bit shifted */
38 #define   R_ALPHA_HINT                  8         /* PC+4 relative 16 bit shifted */
39 #define   R_ALPHA_SREL16                9         /* PC relative 16 bit */
40 #define   R_ALPHA_SREL32                10        /* PC relative 32 bit */
41 #define   R_ALPHA_SREL64                11        /* PC relative 64 bit */
42 #define   R_ALPHA_OP_PUSH               12        /* OP stack push */
43 #define   R_ALPHA_OP_STORE    13        /* OP stack pop and store */
44 #define   R_ALPHA_OP_PSUB               14        /* OP stack subtract */
45 #define   R_ALPHA_OP_PRSHIFT  15        /* OP stack right shift */
46 #define   R_ALPHA_GPVALUE               16
47 #define   R_ALPHA_GPRELHIGH   17
48 #define   R_ALPHA_GPRELLOW    18
49 #define   R_ALPHA_IMMED_GP_16 19
50 #define   R_ALPHA_IMMED_GP_HI32         20
51 #define   R_ALPHA_IMMED_SCN_HI32        21
52 #define   R_ALPHA_IMMED_BR_HI32         22
53 #define   R_ALPHA_IMMED_LO32  23
54 #define   R_ALPHA_COPY                  24        /* Copy symbol at runtime */
55 #define   R_ALPHA_GLOB_DAT    25        /* Create GOT entry */
56 #define   R_ALPHA_JMP_SLOT    26        /* Create PLT entry */
57 #define   R_ALPHA_RELATIVE    27        /* Adjust by program base */
58 #define   R_ALPHA_BRSGP                 28
59 
60 /* TLS relocations */
61 #define   R_ALPHA_TLS_GD                29
62 #define   R_ALPHA_TLSLDM                30
63 #define   R_ALPHA_DTPMOD64    31
64 #define   R_ALPHA_GOTDTPREL   32
65 #define   R_ALPHA_DTPREL64    33
66 #define   R_ALPHA_DTPRELHI    34
67 #define   R_ALPHA_DTPRELLO    35
68 #define   R_ALPHA_DTPREL16    36
69 #define   R_ALPHA_GOTTPREL    37
70 #define   R_ALPHA_TPREL64               38
71 #define   R_ALPHA_TPRELHI               39
72 #define   R_ALPHA_TPRELLO               40
73 #define   R_ALPHA_TPREL16               41
74 
75 #define   R_TYPE(name)                  __CONCAT(R_ALPHA_,name)
76 
77 /* Alpha dynamic tags */
78 #define   DT_ALPHA_PLTRO                0x70000000          /* secure (read-only) PLT */
79 
80 #endif /* _ALPHA_ELF_MACHDEP_H_ */
81