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