1 /* $NetBSD: elf_machdep.h,v 1.15 2025/12/05 16:29:13 jkoshy Exp $ */ 2 3 #if !defined(_SYS_ELFDEFINITIONS_H_) 4 /* 5 * Here are some SPARC specific flags I can't 6 * find a better home for. They are used for AT_FLAGS 7 * and in the exec header. 8 */ 9 #define EF_SPARCV9_MM 0x3 10 #define EF_SPARCV9_TSO 0x0 11 #define EF_SPARCV9_PSO 0x1 12 #define EF_SPARCV9_RMO 0x2 13 14 #define EF_SPARC_32PLUS_MASK 0xffff00 /* bits indicating V8+ type */ 15 #define EF_SPARC_32PLUS 0x000100 /* generic V8+ features */ 16 #define EF_SPARC_EXT_MASK 0xffff00 /* bits for vendor extensions */ 17 #define EF_SPARC_SUN_US1 0x000200 /* UltraSPARC 1 extensions */ 18 #define EF_SPARC_HAL_R1 0x000400 /* HAL R1 extensions */ 19 #define EF_SPARC_SUN_US3 0x000800 /* UltraSPARC 3 extensions */ 20 21 /* Relocation types */ 22 #define R_SPARC_NONE 0 23 #define R_SPARC_8 1 24 #define R_SPARC_16 2 25 #define R_SPARC_32 3 26 #define R_SPARC_DISP8 4 27 #define R_SPARC_DISP16 5 28 #define R_SPARC_DISP32 6 29 #define R_SPARC_WDISP30 7 30 #define R_SPARC_WDISP22 8 31 #define R_SPARC_HI22 9 32 #define R_SPARC_22 10 33 #define R_SPARC_13 11 34 #define R_SPARC_LO10 12 35 #define R_SPARC_GOT10 13 36 #define R_SPARC_GOT13 14 37 #define R_SPARC_GOT22 15 38 #define R_SPARC_PC10 16 39 #define R_SPARC_PC22 17 40 #define R_SPARC_WPLT30 18 41 #define R_SPARC_COPY 19 42 #define R_SPARC_GLOB_DAT 20 43 #define R_SPARC_JMP_SLOT 21 44 #define R_SPARC_RELATIVE 22 45 #define R_SPARC_UA32 23 46 #define R_SPARC_PLT32 24 47 #define R_SPARC_HIPLT22 25 48 #define R_SPARC_LOPLT10 26 49 #define R_SPARC_PCPLT32 27 50 #define R_SPARC_PCPLT22 28 51 #define R_SPARC_PCPLT10 29 52 #define R_SPARC_10 30 53 #define R_SPARC_11 31 54 #define R_SPARC_64 32 55 #define R_SPARC_OLO10 33 56 #define R_SPARC_HH22 34 57 #define R_SPARC_HM10 35 58 #define R_SPARC_LM22 36 59 #define R_SPARC_PC_HH22 37 60 #define R_SPARC_PC_HM10 38 61 #define R_SPARC_PC_LM22 39 62 #define R_SPARC_WDISP16 40 63 #define R_SPARC_WDISP19 41 64 #define R_SPARC_GLOB_JMP 42 65 #define R_SPARC_7 43 66 #define R_SPARC_5 44 67 #define R_SPARC_6 45 68 #define R_SPARC_DISP64 46 69 #define R_SPARC_PLT64 47 70 #define R_SPARC_HIX22 48 71 #define R_SPARC_LOX10 49 72 #define R_SPARC_H44 50 73 #define R_SPARC_M44 51 74 #define R_SPARC_L44 52 75 #define R_SPARC_REGISTER 53 76 #define R_SPARC_UA64 54 77 #define R_SPARC_UA16 55 78 79 /* TLS relocations */ 80 #define R_SPARC_TLS_GD_HI22 56 81 #define R_SPARC_TLS_GD_LO10 57 82 #define R_SPARC_TLS_GD_ADD 58 83 #define R_SPARC_TLS_GD_CALL 59 84 #define R_SPARC_TLS_LDM_HI22 60 85 #define R_SPARC_TLS_LDM_LO10 61 86 #define R_SPARC_TLS_LDM_ADD 62 87 #define R_SPARC_TLS_LDM_CALL 63 88 #define R_SPARC_TLS_LDO_HIX22 64 89 #define R_SPARC_TLS_LDO_LOX10 65 90 #define R_SPARC_TLS_LDO_ADD 66 91 #define R_SPARC_TLS_IE_HI22 67 92 #define R_SPARC_TLS_IE_LO10 68 93 #define R_SPARC_TLS_IE_LD 69 94 #define R_SPARC_TLS_IE_LDX 70 95 #define R_SPARC_TLS_IE_ADD 71 96 #define R_SPARC_TLS_LE_HIX22 72 97 #define R_SPARC_TLS_LE_LOX10 73 98 #define R_SPARC_TLS_DTPMOD32 74 99 #define R_SPARC_TLS_DTPMOD64 75 100 #define R_SPARC_TLS_DTPOFF32 76 101 #define R_SPARC_TLS_DTPOFF64 77 102 #define R_SPARC_TLS_TPOFF32 78 103 #define R_SPARC_TLS_TPOFF64 79 104 105 #define R_SPARC_JMP_IREL 248 106 #define R_SPARC_IRELATIVE 249 107 108 #endif /* !defined(_SYS_ELFDEFINITIONS_H_) */ 109 110 /* 111 * Local symbols. 112 */ 113 114 #define ELF32_MACHDEP_ENDIANNESS ELFDATA2MSB 115 #define ELF32_MACHDEP_ID_CASES \ 116 case EM_SPARC: \ 117 case EM_SPARC32PLUS: \ 118 break; 119 120 #define ELF64_MACHDEP_ENDIANNESS ELFDATA2MSB 121 #define ELF64_MACHDEP_ID_CASES \ 122 case EM_SPARCV9: \ 123 break; 124 125 #define ELF32_MACHDEP_ID EM_SPARC 126 #define ELF64_MACHDEP_ID EM_SPARCV9 127 128 #ifdef __arch64__ 129 #define KERN_ELFSIZE 64 130 #define ARCH_ELFSIZE 64 /* MD native binary size */ 131 #else 132 #define KERN_ELFSIZE 32 133 #define ARCH_ELFSIZE 32 /* MD native binary size */ 134 #endif 135 136 #ifdef __arch64__ 137 /* 138 * we need to check .note.netbsd.mcmodel in native binaries before enabling 139 * top-down VM. 140 */ 141 struct exec_package; 142 void sparc64_elf_mcmodel_check(struct exec_package*, const char *, size_t); 143 #define ELF_MD_MCMODEL_CHECK(ep, str, len) \ 144 sparc64_elf_mcmodel_check(ep,str,len) 145 #endif 146 147 /* The following are what is used for AT_SUN_HWCAP: */ 148 #define AV_SPARC_HWMUL_32x32 1 /* 32x32-bit smul/umul is efficient */ 149 #define AV_SPARC_HWDIV_32x32 2 /* 32x32-bit sdiv/udiv is efficient */ 150 #define AV_SPARC_HWFSMULD 4 /* fsmuld is efficient */ 151 152 #define R_TYPE(name) __CONCAT(R_SPARC_,name) 153