+ /* B(AL) symbol@PLT */
+ .main_type = NDS32_RELAX_HINT_LA_PLT,
+ .relax_code_size = 16,
+ .relax_code_seq =
+ {
+ OP6 (SETHI),
+ OP6 (ORI),
+ OP6 (ALU1),
+ OP6 (JREG),
+ },
+ .relax_fixup =
+ {
+ {0, 4, NDS32_HINT | NDS32_ADDEND, BFD_RELOC_NDS32_LOADSTORE},
+ {4, 4, NDS32_HINT | NDS32_PTR, BFD_RELOC_NDS32_PTR},
+ {8, 4, NDS32_HINT | NDS32_PTR, BFD_RELOC_NDS32_PTR},
+ {12, 4, NDS32_HINT | NDS32_ABS, BFD_RELOC_NDS32_PLT_GOT_SUFF},
+ {12, 4, NDS32_HINT | NDS32_ABS, BFD_RELOC_NDS32_PTR_RESOLVED},
+ {12, 4, NDS32_HINT | NDS32_INSN16, BFD_RELOC_NDS32_INSN16},
+ {0, 0, 0, 0}
+ }
+ },
+ {
+ /* LA (@GOT). */
+ .main_type = NDS32_RELAX_HINT_LA_GOT,
+ .relax_code_size = 12,
+ .relax_code_seq =
+ {
+ OP6 (SETHI),
+ OP6 (ORI),
+ OP6 (MEM),
+ },
+ .relax_fixup =
+ {
+ {0, 4, NDS32_HINT | NDS32_ADDEND, BFD_RELOC_NDS32_LOADSTORE},
+ {4, 4, NDS32_HINT | NDS32_PTR, BFD_RELOC_NDS32_PTR},
+ {8, 4, NDS32_HINT | NDS32_ABS, BFD_RELOC_NDS32_PTR_RESOLVED},
+ {8, 4, NDS32_HINT | NDS32_ABS, BFD_RELOC_NDS32_GOT_SUFF},
+ {0, 0, 0, 0}
+ }
+ },
+ {
+ /* LA (@GOTOFF). */
+ .main_type = NDS32_RELAX_HINT_LA_GOTOFF,
+ .relax_code_size = 16,
+ .relax_code_seq =
+ {
+ OP6 (SETHI),
+ OP6 (ORI),
+ OP6 (ALU1),
+ OP6 (MEM),
+ },
+ .relax_fixup =
+ {
+ {0, 4, NDS32_HINT | NDS32_ADDEND, BFD_RELOC_NDS32_LOADSTORE},
+ {4, 4, NDS32_HINT | NDS32_PTR, BFD_RELOC_NDS32_PTR},
+ {8, 4, NDS32_HINT | NDS32_ABS, BFD_RELOC_NDS32_PTR_RESOLVED},
+ {8, 4, NDS32_HINT | NDS32_ABS, BFD_RELOC_NDS32_GOTOFF_SUFF},
+ {12, 4, NDS32_HINT | NDS32_ABS, BFD_RELOC_NDS32_PTR_RESOLVED},
+ {12, 4, NDS32_HINT | NDS32_ABS, BFD_RELOC_NDS32_GOTOFF_SUFF},
+ {0, 0, 0, 0}
+ }
+ },
+ {
+ /* TLS LE LS|LA */
+ .main_type = NDS32_RELAX_HINT_TLS_LE_LS,
+ .relax_code_size = 16,
+ .relax_code_seq =
+ {
+ OP6(SETHI),
+ OP6(ORI),
+ OP6(MEM),
+ OP6(ALU1),
+ },
+ .relax_fixup =
+ {
+ {0, 4, NDS32_HINT | NDS32_ADDEND, BFD_RELOC_NDS32_LOADSTORE},
+ {4, 4, NDS32_HINT | NDS32_PTR_MULTIPLE, BFD_RELOC_NDS32_PTR},
+ {8, 4, NDS32_HINT | NDS32_ABS, BFD_RELOC_NDS32_PTR_RESOLVED},
+ {8, 4, NDS32_HINT | NDS32_SYM, BFD_RELOC_NDS32_TLS_LE_LS},
+ {12, 4, NDS32_HINT | NDS32_ABS, BFD_RELOC_NDS32_PTR_RESOLVED},
+ {12, 4, NDS32_HINT | NDS32_SYM, BFD_RELOC_NDS32_TLS_LE_ADD},
+ {0, 0, 0, 0}
+ }
+ },
+ {
+ /* TLS IE LA */
+ .main_type = NDS32_RELAX_HINT_TLS_IE_LA,
+ .relax_code_size = 8,
+ .relax_code_seq =
+ {
+ OP6(SETHI),
+ OP6(LBI),
+ },
+ .relax_fixup =
+ {
+ {0, 4, NDS32_HINT | NDS32_ADDEND, BFD_RELOC_NDS32_LOADSTORE},
+ {4, 4, NDS32_HINT | NDS32_INSN16, BFD_RELOC_NDS32_INSN16},
+ {0, 0, 0, 0}
+ }
+ },
+ {
+ /* TLS IEGP LA */
+ .main_type = NDS32_RELAX_HINT_TLS_IEGP_LA,
+ .relax_code_size = 12,
+ .relax_code_seq =
+ {
+ OP6 (SETHI),
+ OP6 (ORI),
+ OP6 (MEM),
+ },
+ .relax_fixup =
+ {
+ {0, 4, NDS32_HINT | NDS32_ADDEND, BFD_RELOC_NDS32_LOADSTORE},
+ {4, 4, NDS32_HINT | NDS32_PTR_PATTERN, BFD_RELOC_NDS32_PTR},
+ {8, 4, NDS32_HINT | NDS32_ABS, BFD_RELOC_NDS32_PTR_RESOLVED},
+ {8, 4, NDS32_HINT | NDS32_SYM, BFD_RELOC_NDS32_TLS_IEGP_LW},
+ {0, 0, 0, 0}
+ }
+ },
+ {
+ /* TLS DESC LS: */
+ .main_type = NDS32_RELAX_HINT_TLS_DESC_LS,
+ .relax_code_size = 24,
+ .relax_code_seq =
+ {
+ OP6 (SETHI),
+ OP6 (ORI),
+ OP6 (ALU1),
+ OP6 (LBI), /* load argument */
+ OP6 (JREG),
+ OP6 (MEM), /* load/store variable or load argument */
+ },
+ .relax_fixup =
+ {
+ {0, 4, NDS32_HINT | NDS32_ADDEND, BFD_RELOC_NDS32_LOADSTORE},
+ {4, 4, NDS32_HINT | NDS32_PTR_PATTERN, BFD_RELOC_NDS32_PTR},
+ {8, 4, NDS32_HINT | NDS32_ABS, BFD_RELOC_NDS32_PTR_RESOLVED},
+ {8, 4, NDS32_HINT | NDS32_SYM, BFD_RELOC_NDS32_TLS_DESC_ADD},
+ {12, 4, NDS32_HINT | NDS32_SYM, BFD_RELOC_NDS32_TLS_DESC_FUNC},
+ {16, 4, NDS32_HINT | NDS32_SYM, BFD_RELOC_NDS32_TLS_DESC_CALL},
+ {20, 4, NDS32_HINT | NDS32_SYM_DESC_MEM, BFD_RELOC_NDS32_TLS_DESC_MEM},
+ {0, 0, 0, 0}
+ }
+ },
+ {
+ .main_type = 0,
+ .relax_code_seq = {0},
+ .relax_fixup = {{0, 0 , 0, 0}}