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