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