15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- X86RelocationFunction.h --------------------------------------------===// 25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// The MCLinker Project 45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source 65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details. 75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// 85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===// 95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 106f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#define DECL_X86_32_APPLY_RELOC_FUNC(Name) \ 116f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesstatic X86Relocator::Result Name(Relocation& pEntry, X86_32Relocator& pParent); 125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 136f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#define DECL_X86_32_APPLY_RELOC_FUNCS \ 146f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_32_APPLY_RELOC_FUNC(none) \ 156f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_32_APPLY_RELOC_FUNC(abs) \ 166f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_32_APPLY_RELOC_FUNC(rel) \ 176f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_32_APPLY_RELOC_FUNC(plt32) \ 186f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_32_APPLY_RELOC_FUNC(got32) \ 196f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_32_APPLY_RELOC_FUNC(gotoff32) \ 206f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_32_APPLY_RELOC_FUNC(gotpc32) \ 216f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_32_APPLY_RELOC_FUNC(tls_gd) \ 226f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_32_APPLY_RELOC_FUNC(tls_ie) \ 236f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_32_APPLY_RELOC_FUNC(tls_gotie) \ 246f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_32_APPLY_RELOC_FUNC(tls_le) \ 256f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_32_APPLY_RELOC_FUNC(tls_ldm) \ 266f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_32_APPLY_RELOC_FUNC(tls_ldo_32) \ 276f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_32_APPLY_RELOC_FUNC(unsupport) 285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao 306f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#define DECL_X86_32_APPLY_RELOC_FUNC_PTRS \ 316f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &none, 0, "R_386_NONE", 0 }, \ 326f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &abs, 1, "R_386_32", 32 }, \ 336f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &rel, 2, "R_386_PC32", 32 }, \ 346f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &got32, 3, "R_386_GOT32", 32 }, \ 356f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &plt32, 4, "R_386_PLT32", 32 }, \ 366f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &none, 5, "R_386_COPY", 0 }, \ 376f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &none, 6, "R_386_GLOB_DAT", 0 }, \ 386f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &none, 7, "R_386_JMP_SLOT", 0 }, \ 396f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &none, 8, "R_386_RELATIVE", 0 }, \ 406f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &gotoff32, 9, "R_386_GOTOFF", 32 }, \ 416f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &gotpc32, 10, "R_386_GOTPC", 32 }, \ 426f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 11, "R_386_32PLT", 0 }, \ 436f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 12, "", 0 }, \ 446f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 13, "", 0 }, \ 456f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 14, "R_386_TLS_TPOFF", 0 }, \ 466f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &tls_ie, 15, "R_386_TLS_IE", 0 }, \ 476f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &tls_gotie, 16, "R_386_TLS_GOTIE", 0 }, \ 486f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &tls_le, 17, "R_386_TLS_LE", 0 }, \ 496f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &tls_gd, 18, "R_386_TLS_GD", 0 }, \ 506f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &tls_ldm, 19, "R_386_TLS_LDM", 0 }, \ 516f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &abs, 20, "R_386_16", 16 }, \ 526f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &rel, 21, "R_386_PC16", 16 }, \ 536f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &abs, 22, "R_386_8", 8 }, \ 546f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &rel, 23, "R_386_PC8", 8 }, \ 556f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 24, "R_386_TLS_GD_32", 0 }, \ 566f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 25, "R_386_TLS_GD_PUSH", 0 }, \ 576f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 26, "R_386_TLS_GD_CALL", 0 }, \ 586f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 27, "R_386_TLS_GD_POP", 0 }, \ 596f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 28, "R_386_TLS_LDM_32", 0 }, \ 606f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 29, "R_386_TLS_LDM_PUSH", 0 }, \ 616f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 30, "R_386_TLS_LDM_CALL", 0 }, \ 626f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 31, "R_386_TLS_LDM_POP", 0 }, \ 636f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &tls_ldo_32, 32, "R_386_TLS_LDO_32", 0 }, \ 646f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 33, "R_386_TLS_IE_32", 0 }, \ 656f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 34, "R_386_TLS_LE_32", 0 }, \ 666f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 35, "R_386_TLS_DTPMOD32", 0 }, \ 676f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 36, "R_386_TLS_DTPOFF32", 0 }, \ 686f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 37, "R_386_TLS_TPOFF32", 0 }, \ 696f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 38, "", 0 }, \ 706f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 39, "R_386_TLS_GOTDESC", 0 }, \ 716f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 40, "R_386_TLS_DESC_CALL", 0 }, \ 726f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 41, "R_386_TLS_DESC", 0 }, \ 736f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 42, "R_386_IRELATIVE", 0 }, \ 746f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 43, "R_386_NUM", 0 }, \ 756f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &none, 44, "R_386_TLS_OPT", 0 } 766f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 776f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#define DECL_X86_64_APPLY_RELOC_FUNC(Name) \ 786f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hinesstatic X86Relocator::Result Name(Relocation& pEntry, X86_64Relocator& pParent); 796f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 806f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#define DECL_X86_64_APPLY_RELOC_FUNCS \ 816f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_64_APPLY_RELOC_FUNC(none) \ 826f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_64_APPLY_RELOC_FUNC(abs) \ 836f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_64_APPLY_RELOC_FUNC(signed32) \ 846f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_64_APPLY_RELOC_FUNC(gotpcrel) \ 856f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_64_APPLY_RELOC_FUNC(plt32) \ 866f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_64_APPLY_RELOC_FUNC(rel) \ 876f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen HinesDECL_X86_64_APPLY_RELOC_FUNC(unsupport) 886f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines 896f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines#define DECL_X86_64_APPLY_RELOC_FUNC_PTRS \ 906f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &none, 0, "R_X86_64_NONE", 0 }, \ 916f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &abs, 1, "R_X86_64_64", 64 }, \ 926f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &rel, 2, "R_X86_64_PC32", 32 }, \ 936f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 3, "R_X86_64_GOT32", 32 }, \ 946f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &plt32, 4, "R_X86_64_PLT32", 32 }, \ 956f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &none, 5, "R_X86_64_COPY", 0 }, \ 966f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &none, 6, "R_X86_64_GLOB_DAT", 0 }, \ 976f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &none, 7, "R_X86_64_JMP_SLOT", 0 }, \ 986f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &none, 8, "R_X86_64_RELATIVE", 0 }, \ 996f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &gotpcrel, 9, "R_X86_64_GOTPCREL", 32 }, \ 1006f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &abs, 10, "R_X86_64_32", 32 }, \ 1016f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &signed32, 11, "R_X86_64_32S", 32 }, \ 1026f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &abs, 12, "R_X86_64_16", 16 }, \ 1036f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &rel, 13, "R_X86_64_PC16", 16 }, \ 1046f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &abs, 14, "R_X86_64_8", 8 }, \ 1056f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &rel, 15, "R_X86_64_PC8", 8 }, \ 1066f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &none, 16, "R_X86_64_DTPMOD64", 0 }, \ 1076f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 17, "R_X86_64_DTPOFF64", 0 }, \ 1086f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &none, 18, "R_X86_64_TPOFF64", 0 }, \ 1096f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 19, "R_X86_64_TLSGD", 0 }, \ 1106f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 20, "R_X86_64_TLSLD", 0 }, \ 1116f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 21, "R_X86_64_DTPOFF32", 0 }, \ 1126f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 22, "R_X86_64_GOTTPOFF", 0 }, \ 1136f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 23, "R_X86_64_TPOFF32", 0 }, \ 1146f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 24, "R_X86_64_PC64", 64 }, \ 1156f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 25, "R_X86_64_GOTOFF64", 64 }, \ 1166f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 26, "R_X86_64_GOTPC32", 32 }, \ 1176f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 27, "R_X86_64_GOT64", 64 }, \ 1186f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 28, "R_X86_64_GOTPCREL64", 64 }, \ 1196f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 29, "R_X86_64_GOTPC64", 64 }, \ 1206f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 30, "R_X86_64_GOTPLT64", 64 }, \ 1216f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 31, "R_X86_64_PLTOFF64", 64 }, \ 1226f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 32, "R_X86_64_SIZE32", 32 }, \ 1236f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 33, "R_X86_64_SIZE64", 64 }, \ 1246f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 34, "R_X86_64_GOTPC32_TLSDESC", 0 }, \ 1256f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &unsupport, 35, "R_X86_64_TLSDESC_CALL", 0 }, \ 1266f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &none, 36, "R_X86_64_TLSDESC", 0 }, \ 1276f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &none, 37, "R_X86_64_IRELATIVE", 0 }, \ 1286f75755c9204b1d8817ae5a65a2f7e5af0ec3f70Stephen Hines { &none, 38, "R_X86_64_RELATIVE64", 0 } 129