This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Andes Technology has good news for you, we plan to update the nds32 port of binutils on upstream!


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=fbaf61ad525eb2818598b699d44df32e46583925

commit fbaf61ad525eb2818598b699d44df32e46583925
Author: Nick Clifton <nickc@redhat.com>
Date:   Thu Sep 20 13:27:31 2018 +0100

    Andes Technology has good news for you, we plan to update the nds32 port of binutils on upstream!
    
    We have not only removed all unsupported and obsolete code, but also supported lost of new features,
    including better link-time relaxations and TLS implementations. Besides, the files generated by the
    newly assembler and linker usually get higher performance and more optimized code size.
    
    ld	* emultempl/nds32elf.em (hyper_relax): New variable.
    	(nds32_elf_create_output_section_statements):
    	the parameters of bfd_elf32_nds32_set_target_option
    	(PARSE_AND_LIST_PROLOGUE, PARSE_AND_LIST_OPTIONS,
    	PARSE_AND_LIST_ARGS_CASES): Add new option --mhyper-relax.
    	* emultempl/nds32elf.em (nds32_elf_after_open): Updated.
    	* emultempl/nds32elf.em (tls_desc_trampoline): New variable.
    	* (nds32_elf_create_output_section_statements): Updated.
    	* (nds32_elf_after_parse): Disable relaxations when PIC is enable.
    	* (PARSE_AND_LIST_PROLOGUE, PARSE_AND_LIST_OPTIONS,
    	PARSE_AND_LIST_ARGS_CASES): Add new option --m[no-]tlsdesc-trampoline.
    
    include	* elf/nds32.h: Remove the unused target features.
    	* dis-asm.h (disassemble_init_nds32): Declared.
    	* elf/nds32.h (E_NDS32_NULL): Removed.
    	(E_NDS32_HAS_DSP_INST, E_NDS32_HAS_ZOL): New.
    	* opcode/nds32.h: Ident.
    	(N32_SUB6, INSN_LW): New macros.
    	(enum n32_opcodes): Updated.
    	* elf/nds32.h: Doc fixes.
    	* elf/nds32.h: Add R_NDS32_LSI.
    	* elf/nds32.h: Add new relocations for TLS.
    
    gas 	* config/tc-nds32.c: Remove the unused target features.
    	(nds32_relax_relocs, md_pseudo_table, nds32_elf_record_fixup_exp,
    	nds32_set_elf_flags_by_insn, nds32_insert_relax_entry,
    	nds32_apply_fix): Likewise.
    	(nds32_no_ex9_begin): Removed.
    	* config/tc-nds32.c (add_mapping_symbol_for_align,
    	make_mapping_symbol, add_mapping_symbol): New functions.
    	* config/tc-nds32.h (enum mstate): New.
    	(nds32_segment_info_type): Likewise.
    	* configure.ac (--enable-dsp-ext, --enable-zol-ext): New options.
    	* config.in: Regenerated.
    	* configure: Regenerated.
    	* config/tc-nds32.c (nds32_dx_regs):
    	Set the value according to the configuration.
    	(nds32_perf_ext, nds32_perf_ext2, nds32_string_ext, nds32_audio_ext):
    	Likewise.
    	(nds32_dsp_ext): New variable. Set the value according to the
    	configuration.
    	(nds32_zol_ext): Likewise.
    	(asm_desc, nds32_pseudo_opcode_table): Make them static.
    	(nds32_set_elf_flags_by_insn): Updated.
    	(nds32_check_insn_available): Updated.
    	(nds32_str_tolower): New function.
    	* config/tc-nds32.c (relax_table): Updated.
    	(md_begin): Updated.
    	(md_assemble): Use XNEW macro to allocate space for `insn.info',
    	and then remember to free it.
    	(md_section_align): Cast (-1) to ValueT.
    	(nds32_get_align): Cast (~0U) to addressT.
    	(nds32_relax_branch_instructions): Updated.
    	(md_convert_frag): Add new local variable `final_r_type'.
    	(invalid_prev_frag): Add new bfd_boolean parameter `relax'.
    	All callers changed.
    	* config/tc-nds32.c (struct nds32_relocs_pattern): Add `insn' field.
    	(struct nds32_hint_map): Add `option_list' field.
    	(struct suffix_name, suffix_table): Remove the unused `pic' field.
    	(do_pseudo_b, do_pseudo_bal): Remove the suffix checking.
    	(do_pseudo_la_internal, do_pseudo_pushpopm): Indent.
    	(relax_hint_bias, relax_hint_id_current): New static variables.
    	(reset_bias, relax_hint_begin): New variables.
    	(nds_itoa): New function.
    	(CLEAN_REG, GET_OPCODE): New macros.
    	(struct relax_hint_id): New.
    	(nds32_relax_hint): For .relax_hint directive, we can use `begin'
    	and `end' to mark the relax pattern without giving exactly id number.
    	(nds32_elf_append_relax_relocs): Handle the case that the .relax_hint
    	directives are attached to pseudo instruction.
    	(nds32_elf_save_pseudo_pattern): Change the second parameter from
    	instruction's opcode to byte code.
    	(nds32_elf_build_relax_relation): Add new bfd_boolean parameter
    	`pseudo_hint'.
    	(nds32_lookup_pseudo_opcode): Fix the overflow issue.
    	(enum nds32_insn_type): Add N32_RELAX_ALU1 and N32_RELAX_16BIT.
    	(nds32_elf_record_fixup_exp, relax_ls_table, hint_map,
    	nds32_find_reloc_table, nds32_match_hint_insn, nds32_parse_name):
    	Updated.
    	* config/tc-nds32.h (MAX_RELAX_NUM): Extend it to 6.
    	(enum nds32_relax_hint_type): Merge NDS32_RELAX_HINT_LA and
    	NDS32_RELAX_HINT_LS into NDS32_RELAX_HINT_LALS. Add
    	NDS32_RELAX_HINT_LA_PLT, NDS32_RELAX_HINT_LA_GOT and
    	NDS32_RELAX_HINT_LA_GOTOFF.
    	* config/tc-nds32.h (relax_ls_table): Add floating load/store
    	to gp relax pattern.
    	(hint_map, nds32_find_reloc_table): Likewise.
    	* configure.ac: Define NDS32_LINUX_TOOLCHAIN.
    	* configure: Regenerated.
    	* config.in: Regenerated.
    	* config/tc-nds32.h (enum nds32_ramp): Updated.
    	(enum nds32_relax_hint_type): Likewise.
    	* config/tc-nds32.c: Include "errno.h" and "limits.h".
    	(relax_ls_table): Add TLS relax patterns.
    	(nds32_elf_append_relax_relocs): Attach BFD_RELOC_NDS32_GROUP on
    	each instructions of TLS patterns.
    	(nds32_elf_record_fixup_exp): Updated.
    	(nds32_apply_fix): Likewise.
    	(suffix_table): Add TLSDESC suffix.
    
    binutils* testsuite/binutils-all/objcopy.exp: Set the unsupported reloc number
    	from 215 to 255 for NDS32.
    
    bfd	* elf32-nds32.c (nds32_elf_relax_loadstore):
    	Remove the unused target features.
    	(bfd_elf32_nds32_set_target_option): Remove the unused parameters.
    	(nds32_elf_relax_piclo12, nds32_elf_relax_letlslo12,
    	nds32_elf_relax_letlsadd, nds32_elf_relax_letlsls,
    	nds32_elf_relax_pltgot_suff, nds32_elf_relax_got_suff
    	nds32_elf_relax_gotoff_suff, calculate_plt_memory_address,
    	calculate_plt_offset, calculate_got_memory_address,
    	nds32_elf_check_dup_relocs): Removed.
    	All callers changed.
    	* elf32-nds32.h: Remove the unused macros and defines.
    	(elf_nds32_link_hash_table): Remove the unused variable.
    	(bfd_elf32_nds32_set_target_option): Update prototype.
    	(nds32_elf_ex9_init): Removed.
    	* elf32-nds32.c (nds32_convert_32_to_16): Updated.
    	* elf32-nds32.c (HOWTO2, HOWTO3): Define new HOWTO macros
    	to initialize array nds32_elf_howto_table in any order
    	without lots of EMPTY_HOWTO.
    	(nds32_reloc_map): Updated.
    	* reloc.c: Add BFD_RELOC_NDS32_LSI.
    	* bfd-in2.h: Regenerated.
    	* bfd/libbfd.h: Regenerated.
    	* elf32-nds32.c (nds32_elf_relax_howto_table): Add R_NDS32_LSI.
    	(nds32_reloc_map): Likewise.
    	(nds32_elf_relax_flsi): New function.
    	(nds32_elf_relax_section): Support floating load/store relaxation.
    	* elf32-nds32.c (NDS32_GUARD_SEC_P, elf32_nds32_local_gp_offset):
    	New macro.
    	(struct elf_nds32_link_hash_entry): New `offset_to_gp' field.
    	(struct elf_nds32_obj_tdata): New `offset_to_gp' and `hdr_size' fields.
    	(elf32_nds32_allocate_local_sym_info, nds32_elf_relax_guard,
    	nds32_elf_is_target_special_symbol, nds32_elf_maybe_function_sym):
    	New functions.
    	(nds32_info_to_howto_rel): Add BFD_ASSERT.
    	(bfd_elf32_bfd_reloc_type_table_lookup, nds32_elf_link_hash_newfunc,
    	nds32_elf_link_hash_table_create, nds32_elf_relocate_section,
    	nds32_elf_relax_loadstore, nds32_elf_relax_lo12, nds32_relax_adjust_label,
    	bfd_elf32_nds32_set_target_option, nds32_fag_mark_relax): Updated.
    	(nds32_elf_final_sda_base): Improve it to find the better gp value.
    	(insert_nds32_elf_blank): Must consider `len' when inserting blanks.
    	* elf32-nds32.h (bfd_elf32_nds32_set_target_option): Update prototype.
    	(struct elf_nds32_link_hash_table): Add new variable `hyper_relax'.
    	* elf32-nds32.c (elf32_nds32_allocate_dynrelocs): New function.
    	(create_got_section): Likewise.
    	(allocate_dynrelocs, nds32_elf_size_dynamic_sections,
    	nds32_elf_relocate_section, nds32_elf_finish_dynamic_symbol): Updated.
    	(nds32_elf_check_relocs): Fix the issue that the shared library may
    	has TEXTREL entry in the dynamic section.
    	(nds32_elf_create_dynamic_sections): Enable to call readonly_dynrelocs
    	since the TEXTREL issue is fixed in the nds32_elf_check_relocs.
    	(nds32_elf_finish_dynamic_sections): Update and add DT_RELASZ
    	dynamic entry.
    	(calculate_offset): Remove the unused parameter `pic_ext_target' and
    	related codes.
    	All callers changed.
    	(elf_backend_dtrel_excludes_plt): Disable it temporarily since it
    	will cause some errors for our test cases.
    	* elf32-nds32.c (nds32_elf_merge_private_bfd_data): Allow to link the
    	generic object.
    	* reloc.c: Add TLS relocations.
    	* libbfd.h: Regenerated.
    	* bfd-in2.h: Regenerated.
    	* elf32-nds32.h (struct section_id_list_t): New.
    	(elf32_nds32_lookup_section_id, elf32_nds32_check_relax_group,
    	elf32_nds32_unify_relax_group, nds32_elf_unify_tls_model):
    	New prototypes.
    	(elf32_nds32_compute_jump_table_size, elf32_nds32_local_tlsdesc_gotent):
    	New macro.
    	(nds32_insertion_sort, bfd_elf32_nds32_set_target_option,
    	elf_nds32_link_hash_table): Updated.
    	* elf32-nds32.c (enum elf_nds32_tls_type): New.
    	(struct elf32_nds32_relax_group_t, struct relax_group_list_t): New.
    	(elf32_nds32_add_dynreloc, patch_tls_desc_to_ie, get_tls_type,
    	fls, ones32, list_insert, list_insert_sibling, dump_chain,
    	elf32_nds32_check_relax_group, elf32_nds32_lookup_section_id,
    	elf32_nds32_unify_relax_group, nds32_elf_unify_tls_model): New functions.
    	(elf_nds32_obj_tdata): Add new fields.
    	(elf32_nds32_relax_group_ptr, nds32_elf_local_tlsdesc_gotent): New macros.
    	(nds32_elf_howto_table): Add TLS relocations.
    	(nds32_reloc_map): Likewise.
    	(nds32_elf_copy_indirect_symbol, nds32_elf_size_dynamic_sections,
    	nds32_elf_finish_dynamic_symbol, elf32_nds32_allocate_local_sym_info,
    	nds32_elf_relocate_section, bfd_elf32_nds32_set_target_option,
    	nds32_elf_check_relocs, allocate_dynrelocs): Updated.
    	(nds32_elf_relax_section): Call nds32_elf_unify_tls_model.
    	(dtpoff_base): Rename it to `gottpof' and then update it.
    
    opcodes	* nds32-asm.c (operand_fields): Remove the unused fields.
    	(nds32_opcodes): Remove the unused instructions.
    	* nds32-dis.c (nds32_ex9_info): Removed.
    	(nds32_parse_opcode): Updated.
    	(print_insn_nds32): Likewise.
    	* nds32-asm.c (config.h, stdlib.h, string.h): New includes.
    	(LEX_SET_FIELD, LEX_GET_FIELD): Update defines.
    	(nds32_asm_init, build_operand_hash_table, build_keyword_hash_table,
    	build_opcode_hash_table): New functions.
    	(nds32_keyword_table, nds32_keyword_count_table, nds32_field_table,
    	nds32_opcode_table): New.
    	(hw_ktabs): Declare it to a pointer rather than an array.
    	(build_hash_table): Removed.
    	* nds32-asm.h (enum): Add SYN_INPUT, SYN_OUTPUT, SYN_LOPT,
    	SYN_ROPT and upadte HW_GPR and HW_INT.
    	* nds32-dis.c (keywords): Remove const.
    	(match_field): New function.
    	(nds32_parse_opcode): Updated.
    	* disassemble.c (disassemble_init_for_target):
    	Add disassemble_init_nds32.
    	* nds32-dis.c (eum map_type): New.
    	(nds32_private_data): Likewise.
    	(get_mapping_symbol_type, is_mapping_symbol, nds32_symbol_is_valid,
    	nds32_add_opcode_hash_table, disassemble_init_nds32): New functions.
    	(print_insn_nds32): Updated.
    	* nds32-asm.c (parse_aext_reg): Add new parameter.
    	(parse_re, parse_re2, parse_aext_reg): Only reduced registers
    	are allowed to use.
    	All callers changed.
    	* nds32-asm.c (keyword_usr, keyword_sr): Updated.
    	(operand_fields): Add new fields.
    	(nds32_opcodes): Add new instructions.
    	(keyword_aridxi_mx): New keyword.
    	* nds32-asm.h (enum): Add NASM_ATTR_DSP_ISAEXT, HW_AEXT_ARIDXI_MX
    	and NASM_ATTR_ZOL.
    	(ALU2_1, ALU2_2, ALU2_3): New macros.
    	* nds32-dis.c (nds32_filter_unknown_insn): Updated.

Diff:
---
 bfd/ChangeLog                               |   89 +
 bfd/bfd-in2.h                               |   30 +-
 bfd/elf32-nds32.c                           | 7881 ++++++++++++++++-----------
 bfd/elf32-nds32.h                           |   94 +-
 bfd/libbfd.h                                |   28 +-
 bfd/reloc.c                                 |   48 +-
 binutils/ChangeLog                          |    5 +
 binutils/testsuite/binutils-all/group-5.d   |    3 +-
 binutils/testsuite/binutils-all/objcopy.exp |    6 +-
 binutils/testsuite/binutils-all/strip-2.d   |    3 +-
 binutils/testsuite/binutils-all/strip-5.d   |    3 +-
 binutils/testsuite/binutils-all/strip-7.d   |    3 +-
 binutils/testsuite/binutils-all/strip-9.d   |    3 +-
 gas/ChangeLog                               |   79 +
 gas/config.in                               |    9 +
 gas/config/tc-nds32.c                       | 4435 +++++++++------
 gas/config/tc-nds32.h                       |   38 +-
 gas/configure                               |   39 +
 gas/configure.ac                            |   29 +
 gas/testsuite/gas/all/gas.exp               |    3 +-
 gas/testsuite/gas/elf/group0b.d             |    4 +-
 gas/testsuite/gas/elf/group1b.d             |    3 +-
 gas/testsuite/gas/elf/group3.d              |    3 +-
 gas/testsuite/gas/elf/groupautob.d          |    3 +-
 gas/testsuite/gas/elf/section12a.d          |    2 +-
 gas/testsuite/gas/nds32/br-1.d              |    4 +-
 gas/testsuite/gas/nds32/br-2.d              |    3 +-
 gas/testsuite/gas/nds32/ji-jr.d             |   16 +-
 include/ChangeLog                           |   13 +
 include/dis-asm.h                           |    1 +
 include/elf/nds32.h                         |   65 +-
 include/opcode/nds32.h                      |  204 +-
 ld/ChangeLog                                |   14 +
 ld/emultempl/nds32elf.em                    |  234 +-
 ld/testsuite/ld-elf/group10.d               |    3 +-
 ld/testsuite/ld-elf/group2.d                |    3 +-
 ld/testsuite/ld-elf/group4.d                |    3 +-
 ld/testsuite/ld-elf/group5.d                |    3 +-
 ld/testsuite/ld-elf/group6.d                |    3 +-
 ld/testsuite/ld-elf/group7.d                |   12 +-
 ld/testsuite/ld-elf/group8a.d               |    3 +-
 ld/testsuite/ld-elf/group8b.d               |    3 +-
 ld/testsuite/ld-elf/group9a.d               |    4 +-
 ld/testsuite/ld-elf/group9b.d               |    9 +-
 ld/testsuite/ld-elf/linkonce2.d             |    2 +-
 ld/testsuite/ld-elf/merge.d                 |    2 +-
 ld/testsuite/ld-elf/relocatable.d           |    1 +
 ld/testsuite/ld-elfcomm/elfcomm.exp         |    8 +-
 ld/testsuite/ld-nds32/branch.d              |   22 +-
 ld/testsuite/ld-nds32/gp.d                  |   18 +-
 ld/testsuite/ld-nds32/imm.d                 |    8 +-
 ld/testsuite/ld-nds32/relax_jmp.d           |    6 +-
 ld/testsuite/ld-nds32/relax_load_store.d    |    6 +-
 opcodes/ChangeLog                           |   40 +
 opcodes/disassemble.c                       |    5 +
 opcodes/nds32-asm.c                         |  640 ++-
 opcodes/nds32-asm.h                         |   33 +-
 opcodes/nds32-dis.c                         |  526 +-
 58 files changed, 9220 insertions(+), 5540 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 81b9e56..2b688ca 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,92 @@
+2018-09-20  Nelson Chu <nelson.chu1990@gmail.com>
+
+	* elf32-nds32.c (nds32_elf_relax_loadstore):
+	Remove the unused target features.
+	(bfd_elf32_nds32_set_target_option): Remove the unused parameters.
+	(nds32_elf_relax_piclo12, nds32_elf_relax_letlslo12,
+	nds32_elf_relax_letlsadd, nds32_elf_relax_letlsls,
+	nds32_elf_relax_pltgot_suff, nds32_elf_relax_got_suff
+	nds32_elf_relax_gotoff_suff, calculate_plt_memory_address,
+	calculate_plt_offset, calculate_got_memory_address,
+	nds32_elf_check_dup_relocs): Removed.
+	All callers changed.
+	* elf32-nds32.h: Remove the unused macros and defines.
+	(elf_nds32_link_hash_table): Remove the unused variable.
+	(bfd_elf32_nds32_set_target_option): Update prototype.
+	(nds32_elf_ex9_init): Removed.
+	* elf32-nds32.c (nds32_convert_32_to_16): Updated.
+	* elf32-nds32.c (HOWTO2, HOWTO3): Define new HOWTO macros
+	to initialize array nds32_elf_howto_table in any order
+	without lots of EMPTY_HOWTO.
+	(nds32_reloc_map): Updated.
+	* reloc.c: Add BFD_RELOC_NDS32_LSI.
+	* bfd-in2.h: Regenerated.
+	* bfd/libbfd.h: Regenerated.
+	* elf32-nds32.c (nds32_elf_relax_howto_table): Add R_NDS32_LSI.
+	(nds32_reloc_map): Likewise.
+	(nds32_elf_relax_flsi): New function.
+	(nds32_elf_relax_section): Support floating load/store relaxation.
+	* elf32-nds32.c (NDS32_GUARD_SEC_P, elf32_nds32_local_gp_offset):
+	New macro.
+	(struct elf_nds32_link_hash_entry): New `offset_to_gp' field.
+	(struct elf_nds32_obj_tdata): New `offset_to_gp' and `hdr_size' fields.
+	(elf32_nds32_allocate_local_sym_info, nds32_elf_relax_guard,
+	nds32_elf_is_target_special_symbol, nds32_elf_maybe_function_sym):
+	New functions.
+	(nds32_info_to_howto_rel): Add BFD_ASSERT.
+	(bfd_elf32_bfd_reloc_type_table_lookup, nds32_elf_link_hash_newfunc,
+	nds32_elf_link_hash_table_create, nds32_elf_relocate_section,
+	nds32_elf_relax_loadstore, nds32_elf_relax_lo12, nds32_relax_adjust_label,
+	bfd_elf32_nds32_set_target_option, nds32_fag_mark_relax): Updated.
+	(nds32_elf_final_sda_base): Improve it to find the better gp value.
+	(insert_nds32_elf_blank): Must consider `len' when inserting blanks.
+	* elf32-nds32.h (bfd_elf32_nds32_set_target_option): Update prototype.
+	(struct elf_nds32_link_hash_table): Add new variable `hyper_relax'.
+	* elf32-nds32.c (elf32_nds32_allocate_dynrelocs): New function.
+	(create_got_section): Likewise.
+	(allocate_dynrelocs, nds32_elf_size_dynamic_sections,
+	nds32_elf_relocate_section, nds32_elf_finish_dynamic_symbol): Updated.
+	(nds32_elf_check_relocs): Fix the issue that the shared library may
+	has TEXTREL entry in the dynamic section.
+	(nds32_elf_create_dynamic_sections): Enable to call readonly_dynrelocs
+	since the TEXTREL issue is fixed in the nds32_elf_check_relocs.
+	(nds32_elf_finish_dynamic_sections): Update and add DT_RELASZ
+	dynamic entry.
+	(calculate_offset): Remove the unused parameter `pic_ext_target' and
+	related codes.
+	All callers changed.
+	(elf_backend_dtrel_excludes_plt): Disable it temporarily since it
+	will cause some errors for our test cases.
+	* elf32-nds32.c (nds32_elf_merge_private_bfd_data): Allow to link the
+	generic object.
+	* reloc.c: Add TLS relocations.
+	* libbfd.h: Regenerated.
+	* bfd-in2.h: Regenerated.
+	* elf32-nds32.h (struct section_id_list_t): New.
+	(elf32_nds32_lookup_section_id, elf32_nds32_check_relax_group,
+	elf32_nds32_unify_relax_group, nds32_elf_unify_tls_model):
+	New prototypes.
+	(elf32_nds32_compute_jump_table_size, elf32_nds32_local_tlsdesc_gotent):
+	New macro.
+	(nds32_insertion_sort, bfd_elf32_nds32_set_target_option,
+	elf_nds32_link_hash_table): Updated.
+	* elf32-nds32.c (enum elf_nds32_tls_type): New.
+	(struct elf32_nds32_relax_group_t, struct relax_group_list_t): New.
+	(elf32_nds32_add_dynreloc, patch_tls_desc_to_ie, get_tls_type,
+	fls, ones32, list_insert, list_insert_sibling, dump_chain,
+	elf32_nds32_check_relax_group, elf32_nds32_lookup_section_id,
+	elf32_nds32_unify_relax_group, nds32_elf_unify_tls_model): New functions.
+	(elf_nds32_obj_tdata): Add new fields.
+	(elf32_nds32_relax_group_ptr, nds32_elf_local_tlsdesc_gotent): New macros.
+	(nds32_elf_howto_table): Add TLS relocations.
+	(nds32_reloc_map): Likewise.
+	(nds32_elf_copy_indirect_symbol, nds32_elf_size_dynamic_sections,
+	nds32_elf_finish_dynamic_symbol, elf32_nds32_allocate_local_sym_info,
+	nds32_elf_relocate_section, bfd_elf32_nds32_set_target_option,
+	nds32_elf_check_relocs, allocate_dynrelocs): Updated.
+	(nds32_elf_relax_section): Call nds32_elf_unify_tls_model.
+	(dtpoff_base): Rename it to `gottpof' and then update it.
+
 2018-09-20  Alan Modra  <amodra@gmail.com>
 
 	PR 23685
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index e5f7101..5981922 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -4275,18 +4275,36 @@ This is a 5 bit absolute address.  */
 
 /* For TLS.  */
   BFD_RELOC_NDS32_TPOFF,
+  BFD_RELOC_NDS32_GOTTPOFF,
   BFD_RELOC_NDS32_TLS_LE_HI20,
   BFD_RELOC_NDS32_TLS_LE_LO12,
-  BFD_RELOC_NDS32_TLS_LE_ADD,
-  BFD_RELOC_NDS32_TLS_LE_LS,
-  BFD_RELOC_NDS32_GOTTPOFF,
-  BFD_RELOC_NDS32_TLS_IE_HI20,
-  BFD_RELOC_NDS32_TLS_IE_LO12S2,
-  BFD_RELOC_NDS32_TLS_TPOFF,
   BFD_RELOC_NDS32_TLS_LE_20,
   BFD_RELOC_NDS32_TLS_LE_15S0,
   BFD_RELOC_NDS32_TLS_LE_15S1,
   BFD_RELOC_NDS32_TLS_LE_15S2,
+  BFD_RELOC_NDS32_TLS_LE_ADD,
+  BFD_RELOC_NDS32_TLS_LE_LS,
+  BFD_RELOC_NDS32_TLS_IE_HI20,
+  BFD_RELOC_NDS32_TLS_IE_LO12,
+  BFD_RELOC_NDS32_TLS_IE_LO12S2,
+  BFD_RELOC_NDS32_TLS_IEGP_HI20,
+  BFD_RELOC_NDS32_TLS_IEGP_LO12,
+  BFD_RELOC_NDS32_TLS_IEGP_LO12S2,
+  BFD_RELOC_NDS32_TLS_IEGP_LW,
+  BFD_RELOC_NDS32_TLS_DESC,
+  BFD_RELOC_NDS32_TLS_DESC_HI20,
+  BFD_RELOC_NDS32_TLS_DESC_LO12,
+  BFD_RELOC_NDS32_TLS_DESC_20,
+  BFD_RELOC_NDS32_TLS_DESC_SDA17S2,
+  BFD_RELOC_NDS32_TLS_DESC_ADD,
+  BFD_RELOC_NDS32_TLS_DESC_FUNC,
+  BFD_RELOC_NDS32_TLS_DESC_CALL,
+  BFD_RELOC_NDS32_TLS_DESC_MEM,
+  BFD_RELOC_NDS32_REMOVE,
+  BFD_RELOC_NDS32_GROUP,
+
+/* For floating load store relaxation.  */
+  BFD_RELOC_NDS32_LSI,
 
 /* This is a 9-bit reloc  */
   BFD_RELOC_V850_9_PCREL,
diff --git a/bfd/elf32-nds32.c b/bfd/elf32-nds32.c
index ae43cdf..6215f28 100644
--- a/bfd/elf32-nds32.c
+++ b/bfd/elf32-nds32.c
@@ -59,7 +59,7 @@ static bfd_reloc_status_type nds32_elf_do_9_pcrel_reloc
 
 /* Nds32 helper functions.  */
 static bfd_vma calculate_memory_address
-(bfd *, Elf_Internal_Rela *, Elf_Internal_Sym *, Elf_Internal_Shdr *);
+  (bfd *, Elf_Internal_Rela *, Elf_Internal_Sym *, Elf_Internal_Shdr *);
 static int nds32_get_section_contents (bfd *, asection *,
 				       bfd_byte **, bfd_boolean);
 static int nds32_get_local_syms (bfd *, asection *ATTRIBUTE_UNUSED,
@@ -87,6 +87,10 @@ enum
    section.  */
 #define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
 
+#define NDS32_GUARD_SEC_P(flags) ((flags) & SEC_ALLOC \
+				  && (flags) & SEC_LOAD \
+				  && (flags) & SEC_READONLY)
+
 /* The nop opcode we use.  */
 #define NDS32_NOP32 0x40000009
 #define NDS32_NOP16 0x9200
@@ -176,6 +180,18 @@ struct elf_nds32_pcrel_relocs_copied
   bfd_size_type count;
 };
 
+enum elf_nds32_tls_type
+{
+  GOT_UNKNOWN = (0),
+  GOT_NORMAL = (1 << 0),
+  GOT_TLS_LE = (1 << 1),
+  GOT_TLS_IE = (1 << 2),
+  GOT_TLS_IEGP = (1 << 3),
+  GOT_TLS_LD = (1 << 4),
+  GOT_TLS_GD = (1 << 5),
+  GOT_TLS_DESC = (1 << 6),
+};
+
 /* Nds32 ELF linker hash entry.  */
 
 struct elf_nds32_link_hash_entry
@@ -186,10 +202,9 @@ struct elf_nds32_link_hash_entry
   struct elf_dyn_relocs *dyn_relocs;
 
   /* For checking relocation type.  */
-#define GOT_UNKNOWN     0
-#define GOT_NORMAL      1
-#define GOT_TLS_IE      2
-  unsigned int tls_type;
+  enum elf_nds32_tls_type tls_type;
+
+  int offset_to_gp;
 };
 
 /* Get the nds32 ELF linker hash table from a link_info structure.  */
@@ -200,12 +215,30 @@ static int check_start_export_sym = 0;
 /* The offset for executable tls relaxation.  */
 #define TP_OFFSET 0x0
 
+typedef struct
+{
+  int min_id;
+  int max_id;
+  int count;
+  int bias;
+  int init;
+} elf32_nds32_relax_group_t;
+
 struct elf_nds32_obj_tdata
 {
   struct elf_obj_tdata root;
 
   /* tls_type for each local got entry.  */
   char *local_got_tls_type;
+
+  /* GOTPLT entries for TLS descriptors.  */
+  bfd_vma *local_tlsdesc_gotent;
+
+  /* for R_NDS32_RELAX_GROUP handling.  */
+  elf32_nds32_relax_group_t relax_group;
+
+  unsigned int hdr_size;
+  int* offset_to_gp;
 };
 
 #define elf_nds32_tdata(bfd) \
@@ -214,8 +247,14 @@ struct elf_nds32_obj_tdata
 #define elf32_nds32_local_got_tls_type(bfd) \
   (elf_nds32_tdata (bfd)->local_got_tls_type)
 
+#define elf32_nds32_local_gp_offset(bfd) \
+  (elf_nds32_tdata (bfd)->offset_to_gp)
+
 #define elf32_nds32_hash_entry(ent) ((struct elf_nds32_link_hash_entry *)(ent))
 
+#define elf32_nds32_relax_group_ptr(bfd) \
+  &(elf_nds32_tdata (bfd)->relax_group)
+
 static bfd_boolean
 nds32_elf_mkobject (bfd *abfd)
 {
@@ -224,1980 +263,2262 @@ nds32_elf_mkobject (bfd *abfd)
 }
 
 /* Relocations used for relocation.  */
+/* Define HOWTO2 (for relocation) and HOWTO3 (for relaxation) to
+   initialize array nds32_elf_howto_table in any order. The benefit
+   is that we can add any new relocations with any numbers and don't
+   need to fill the gap by lots of EMPTY_HOWTO. */
+#define HOWTO2(C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
+  [C] = HOWTO(C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC)
+
 static reloc_howto_type nds32_elf_howto_table[] =
 {
   /* This reloc does nothing.  */
-  HOWTO (R_NDS32_NONE,		/* type */
-	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
-	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_NONE,		/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_bitfield,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_NONE",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0,			/* src_mask  */
+	 0,			/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* A 16 bit absolute relocation.  */
-  HOWTO (R_NDS32_16,		/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield,	/* complain_on_overflow */
-	 nds32_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_16",		/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_16,		/* type  */
+	 0,			/* rightshift  */
+	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 16,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_bitfield,/* complain_on_overflow  */
+	 nds32_elf_generic_reloc,/* special_function  */
+	 "R_NDS32_16",		/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffff,		/* src_mask  */
+	 0xffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* A 32 bit absolute relocation.  */
-  HOWTO (R_NDS32_32,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield,	/* complain_on_overflow */
-	 nds32_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_32",		/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_32,		/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_bitfield,/* complain_on_overflow  */
+	 nds32_elf_generic_reloc,/* special_function  */
+	 "R_NDS32_32",		/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffffff,		/* src_mask  */
+	 0xffffffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* A 20 bit address.  */
-  HOWTO (R_NDS32_20,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_unsigned,	/* complain_on_overflow */
-	 nds32_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_20",		/* name */
-	 FALSE,			/* partial_inplace */
-	 0xfffff,		/* src_mask */
-	 0xfffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_20,		/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 20,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_unsigned,/* complain_on_overflow  */
+	 nds32_elf_generic_reloc,/* special_function  */
+	 "R_NDS32_20",		/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xfffff,		/* src_mask  */
+	 0xfffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* An PC Relative 9-bit relocation, shifted by 2.
      This reloc is complicated because relocations are relative to pc & -4.
      i.e. branches in the right insn slot use the address of the left insn
      slot for pc.  */
-  /* ??? It's not clear whether this should have partial_inplace set or not.
+  /* It's not clear whether this should have partial_inplace set or not.
      Branch relaxing in the assembler can store the addend in the insn,
      and if bfd_install_relocation gets called the addend may get added
      again.  */
-  HOWTO (R_NDS32_9_PCREL,	/* type */
-	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 nds32_elf_9_pcrel_reloc,	/* special_function */
-	 "R_NDS32_9_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xff,			/* src_mask */
-	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+  HOWTO2 (R_NDS32_9_PCREL,	/* type  */
+	 1,			/* rightshift  */
+	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 8,			/* bitsize  */
+	 TRUE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 nds32_elf_9_pcrel_reloc,/* special_function  */
+	 "R_NDS32_9_PCREL",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xff,			/* src_mask  */
+	 0xff,			/* dst_mask  */
+	 TRUE),			/* pcrel_offset  */
 
   /* A relative 15 bit relocation, right shifted by 1.  */
-  HOWTO (R_NDS32_15_PCREL,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 14,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_15_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x3fff,		/* src_mask */
-	 0x3fff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+  HOWTO2 (R_NDS32_15_PCREL,	/* type  */
+	 1,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 14,			/* bitsize  */
+	 TRUE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_15_PCREL",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x3fff,		/* src_mask  */
+	 0x3fff,		/* dst_mask  */
+	 TRUE),			/* pcrel_offset  */
 
   /* A relative 17 bit relocation, right shifted by 1.  */
-  HOWTO (R_NDS32_17_PCREL,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_17_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+  HOWTO2 (R_NDS32_17_PCREL,	/* type  */
+	 1,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 16,			/* bitsize  */
+	 TRUE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_17_PCREL",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffff,		/* src_mask  */
+	 0xffff,		/* dst_mask  */
+	 TRUE),			/* pcrel_offset  */
 
   /* A relative 25 bit relocation, right shifted by 1.  */
-  /* ??? It's not clear whether this should have partial_inplace set or not.
+  /* It's not clear whether this should have partial_inplace set or not.
      Branch relaxing in the assembler can store the addend in the insn,
      and if bfd_install_relocation gets called the addend may get added
      again.  */
-  HOWTO (R_NDS32_25_PCREL,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 24,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_25_PCREL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffff,		/* src_mask */
-	 0xffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+  HOWTO2 (R_NDS32_25_PCREL,	/* type  */
+	 1,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 24,			/* bitsize  */
+	 TRUE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_25_PCREL",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffff,		/* src_mask  */
+	 0xffffff,		/* dst_mask  */
+	 TRUE),			/* pcrel_offset  */
 
   /* High 20 bits of address when lower 12 is or'd in.  */
-  HOWTO (R_NDS32_HI20,		/* type */
-	 12,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_hi20_reloc,	/* special_function */
-	 "R_NDS32_HI20",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000fffff,		/* src_mask */
-	 0x000fffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_HI20,		/* type  */
+	 12,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 20,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_hi20_reloc,	/* special_function  */
+	 "R_NDS32_HI20",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000fffff,		/* src_mask  */
+	 0x000fffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
-  HOWTO (R_NDS32_LO12S3,	/* type */
-	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 9,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_lo12_reloc,	/* special_function */
-	 "R_NDS32_LO12S3",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000001ff,		/* src_mask */
-	 0x000001ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LO12S3,	/* type  */
+	 3,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 9,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_lo12_reloc,	/* special_function  */
+	 "R_NDS32_LO12S3",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000001ff,		/* src_mask  */
+	 0x000001ff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
-  HOWTO (R_NDS32_LO12S2,	/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 10,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_lo12_reloc,	/* special_function */
-	 "R_NDS32_LO12S2",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000003ff,		/* src_mask */
-	 0x000003ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LO12S2,	/* type  */
+	 2,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 10,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_lo12_reloc,	/* special_function  */
+	 "R_NDS32_LO12S2",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000003ff,		/* src_mask  */
+	 0x000003ff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
-  HOWTO (R_NDS32_LO12S1,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 11,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_lo12_reloc,	/* special_function */
-	 "R_NDS32_LO12S1",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000007ff,		/* src_mask */
-	 0x000007ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LO12S1,	/* type  */
+	 1,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 11,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_lo12_reloc,	/* special_function  */
+	 "R_NDS32_LO12S1",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000007ff,		/* src_mask  */
+	 0x000007ff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
-  HOWTO (R_NDS32_LO12S0,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_lo12_reloc,	/* special_function */
-	 "R_NDS32_LO12S0",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00000fff,		/* src_mask */
-	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LO12S0,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 12,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_lo12_reloc,	/* special_function  */
+	 "R_NDS32_LO12S0",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00000fff,		/* src_mask  */
+	 0x00000fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Small data area 15 bits offset.  */
-  HOWTO (R_NDS32_SDA15S3,	/* type */
-	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 nds32_elf_sda15_reloc,	/* special_function */
-	 "R_NDS32_SDA15S3",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00007fff,		/* src_mask */
-	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_SDA15S3,	/* type  */
+	 3,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 15,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 nds32_elf_sda15_reloc,	/* special_function  */
+	 "R_NDS32_SDA15S3",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00007fff,		/* src_mask  */
+	 0x00007fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Small data area 15 bits offset.  */
-  HOWTO (R_NDS32_SDA15S2,	/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 nds32_elf_sda15_reloc,	/* special_function */
-	 "R_NDS32_SDA15S2",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00007fff,		/* src_mask */
-	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_SDA15S2,	/* type  */
+	 2,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 15,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 nds32_elf_sda15_reloc,	/* special_function  */
+	 "R_NDS32_SDA15S2",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00007fff,		/* src_mask  */
+	 0x00007fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Small data area 15 bits offset.  */
-  HOWTO (R_NDS32_SDA15S1,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 nds32_elf_sda15_reloc,	/* special_function */
-	 "R_NDS32_SDA15S1",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00007fff,		/* src_mask */
-	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_SDA15S1,	/* type  */
+	 1,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 15,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 nds32_elf_sda15_reloc,	/* special_function  */
+	 "R_NDS32_SDA15S1",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00007fff,		/* src_mask  */
+	 0x00007fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Small data area 15 bits offset.  */
-  HOWTO (R_NDS32_SDA15S0,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 nds32_elf_sda15_reloc,	/* special_function */
-	 "R_NDS32_SDA15S0",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00007fff,		/* src_mask */
-	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* GNU extension to record C++ vtable hierarchy */
-  HOWTO (R_NDS32_GNU_VTINHERIT,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 NULL,			/* special_function */
-	 "R_NDS32_GNU_VTINHERIT",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* GNU extension to record C++ vtable member usage */
-  HOWTO (R_NDS32_GNU_VTENTRY,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
-	 "R_NDS32_GNU_VTENTRY",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_SDA15S0,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 15,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 nds32_elf_sda15_reloc,	/* special_function  */
+	 "R_NDS32_SDA15S0",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00007fff,		/* src_mask  */
+	 0x00007fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+
+  /* GNU extension to record C++ vtable hierarchy  */
+  HOWTO2 (R_NDS32_GNU_VTINHERIT,/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 0,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 NULL,			/* special_function  */
+	 "R_NDS32_GNU_VTINHERIT",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0,			/* src_mask  */
+	 0,			/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+
+  /* GNU extension to record C++ vtable member usage  */
+  HOWTO2 (R_NDS32_GNU_VTENTRY,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 0,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 _bfd_elf_rel_vtable_reloc_fn,/* special_function  */
+	 "R_NDS32_GNU_VTENTRY",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0,			/* src_mask  */
+	 0,			/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* A 16 bit absolute relocation.  */
-  HOWTO (R_NDS32_16_RELA,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_16_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_16_RELA,	/* type  */
+	 0,			/* rightshift  */
+	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 16,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_bitfield,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_16_RELA",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffff,		/* src_mask  */
+	 0xffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* A 32 bit absolute relocation.  */
-  HOWTO (R_NDS32_32_RELA,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_32_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_32_RELA,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_bitfield,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_32_RELA",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffffff,		/* src_mask  */
+	 0xffffffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* A 20 bit address.  */
-  HOWTO (R_NDS32_20_RELA,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_20_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xfffff,		/* src_mask */
-	 0xfffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_NDS32_9_PCREL_RELA,	/* type */
-	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_9_PCREL_RELA",/* name */
-	 FALSE,			/* partial_inplace */
-	 0xff,			/* src_mask */
-	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+  HOWTO2 (R_NDS32_20_RELA,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 20,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_20_RELA",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xfffff,		/* src_mask  */
+	 0xfffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+
+  HOWTO2 (R_NDS32_9_PCREL_RELA,	/* type  */
+	 1,			/* rightshift  */
+	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 8,			/* bitsize  */
+	 TRUE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_9_PCREL_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xff,			/* src_mask  */
+	 0xff,			/* dst_mask  */
+	 TRUE),			/* pcrel_offset  */
 
   /* A relative 15 bit relocation, right shifted by 1.  */
-  HOWTO (R_NDS32_15_PCREL_RELA,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 14,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_15_PCREL_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x3fff,		/* src_mask */
-	 0x3fff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+  HOWTO2 (R_NDS32_15_PCREL_RELA,/* type  */
+	 1,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 14,			/* bitsize  */
+	 TRUE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_15_PCREL_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x3fff,		/* src_mask  */
+	 0x3fff,		/* dst_mask  */
+	 TRUE),			/* pcrel_offset  */
 
   /* A relative 17 bit relocation, right shifted by 1.  */
-  HOWTO (R_NDS32_17_PCREL_RELA,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_17_PCREL_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+  HOWTO2 (R_NDS32_17_PCREL_RELA,/* type  */
+	 1,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 16,			/* bitsize  */
+	 TRUE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_17_PCREL_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffff,		/* src_mask  */
+	 0xffff,		/* dst_mask  */
+	 TRUE),			/* pcrel_offset  */
 
   /* A relative 25 bit relocation, right shifted by 2.  */
-  HOWTO (R_NDS32_25_PCREL_RELA,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 24,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_25_PCREL_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffff,		/* src_mask */
-	 0xffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+  HOWTO2 (R_NDS32_25_PCREL_RELA,/* type  */
+	 1,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 24,			/* bitsize  */
+	 TRUE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_25_PCREL_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffff,		/* src_mask  */
+	 0xffffff,		/* dst_mask  */
+	 TRUE),			/* pcrel_offset  */
 
   /* High 20 bits of address when lower 16 is or'd in.  */
-  HOWTO (R_NDS32_HI20_RELA,	/* type */
-	 12,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_HI20_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000fffff,		/* src_mask */
-	 0x000fffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_HI20_RELA,	/* type  */
+	 12,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 20,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_HI20_RELA",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000fffff,		/* src_mask  */
+	 0x000fffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
-  HOWTO (R_NDS32_LO12S3_RELA,	/* type */
-	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 9,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_LO12S3_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000001ff,		/* src_mask */
-	 0x000001ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LO12S3_RELA,	/* type  */
+	 3,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 9,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_LO12S3_RELA",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000001ff,		/* src_mask  */
+	 0x000001ff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
-  HOWTO (R_NDS32_LO12S2_RELA,	/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 10,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_LO12S2_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000003ff,		/* src_mask */
-	 0x000003ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LO12S2_RELA,	/* type  */
+	 2,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 10,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_LO12S2_RELA",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000003ff,		/* src_mask  */
+	 0x000003ff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
-  HOWTO (R_NDS32_LO12S1_RELA,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 11,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_LO12S1_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000007ff,		/* src_mask */
-	 0x000007ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LO12S1_RELA,	/* type  */
+	 1,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 11,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_LO12S1_RELA",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000007ff,		/* src_mask  */
+	 0x000007ff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
-  HOWTO (R_NDS32_LO12S0_RELA,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_LO12S0_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00000fff,		/* src_mask */
-	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LO12S0_RELA,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 12,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_LO12S0_RELA",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00000fff,		/* src_mask  */
+	 0x00000fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Small data area 15 bits offset.  */
-  HOWTO (R_NDS32_SDA15S3_RELA,	/* type */
-	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_SDA15S3_RELA",/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00007fff,		/* src_mask */
-	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_SDA15S3_RELA,	/* type  */
+	 3,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 15,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_SDA15S3_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00007fff,		/* src_mask  */
+	 0x00007fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Small data area 15 bits offset.  */
-  HOWTO (R_NDS32_SDA15S2_RELA,	/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_SDA15S2_RELA",/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00007fff,		/* src_mask */
-	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_NDS32_SDA15S1_RELA,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_SDA15S1_RELA",/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00007fff,		/* src_mask */
-	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_NDS32_SDA15S0_RELA,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_SDA15S0_RELA",/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00007fff,		/* src_mask */
-	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* GNU extension to record C++ vtable hierarchy */
-  HOWTO (R_NDS32_RELA_GNU_VTINHERIT,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 NULL,			/* special_function */
-	 "R_NDS32_RELA_GNU_VTINHERIT",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* GNU extension to record C++ vtable member usage */
-  HOWTO (R_NDS32_RELA_GNU_VTENTRY,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 _bfd_elf_rel_vtable_reloc_fn,	/* special_function */
-	 "R_NDS32_RELA_GNU_VTENTRY",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_SDA15S2_RELA,	/* type  */
+	 2,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 15,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_SDA15S2_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00007fff,		/* src_mask  */
+	 0x00007fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+
+  HOWTO2 (R_NDS32_SDA15S1_RELA,	/* type  */
+	 1,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 15,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_SDA15S1_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00007fff,		/* src_mask  */
+	 0x00007fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+
+  HOWTO2 (R_NDS32_SDA15S0_RELA,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 15,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_SDA15S0_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00007fff,		/* src_mask  */
+	 0x00007fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+
+  /* GNU extension to record C++ vtable hierarchy  */
+  HOWTO2 (R_NDS32_RELA_GNU_VTINHERIT,/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 0,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 NULL,			/* special_function  */
+	 "R_NDS32_RELA_GNU_VTINHERIT",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0,			/* src_mask  */
+	 0,			/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+
+  /* GNU extension to record C++ vtable member usage  */
+  HOWTO2 (R_NDS32_RELA_GNU_VTENTRY,/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 0,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 _bfd_elf_rel_vtable_reloc_fn,/* special_function  */
+	 "R_NDS32_RELA_GNU_VTENTRY",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0,			/* src_mask  */
+	 0,			/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Like R_NDS32_20, but referring to the GOT table entry for
      the symbol.  */
-  HOWTO (R_NDS32_GOT20,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_GOT20",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xfffff,		/* src_mask */
-	 0xfffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_GOT20,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 20,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_GOT20",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xfffff,		/* src_mask  */
+	 0xfffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Like R_NDS32_PCREL, but referring to the procedure linkage table
      entry for the symbol.  */
-  HOWTO (R_NDS32_25_PLTREL,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 24,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_25_PLTREL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffff,		/* src_mask */
-	 0xffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+  HOWTO2 (R_NDS32_25_PLTREL,	/* type  */
+	 1,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 24,			/* bitsize  */
+	 TRUE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_25_PLTREL",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffff,		/* src_mask  */
+	 0xffffff,		/* dst_mask  */
+	 TRUE),			/* pcrel_offset  */
 
   /* This is used only by the dynamic linker.  The symbol should exist
      both in the object being run and in some shared library.  The
      dynamic linker copies the data addressed by the symbol from the
      shared library into the object, because the object being
      run has to have the data at some particular address.  */
-  HOWTO (R_NDS32_COPY,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_COPY",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_COPY,		/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_bitfield,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_COPY",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffffff,		/* src_mask  */
+	 0xffffffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Like R_NDS32_20, but used when setting global offset table
      entries.  */
-  HOWTO (R_NDS32_GLOB_DAT,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_GLOB_DAT,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_bitfield,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_GLOB_DAT",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffffff,		/* src_mask  */
+	 0xffffffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Marks a procedure linkage table entry for a symbol.  */
-  HOWTO (R_NDS32_JMP_SLOT,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_JMP_SLOT",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_JMP_SLOT,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_bitfield,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_JMP_SLOT",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffffff,		/* src_mask  */
+	 0xffffffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Used only by the dynamic linker.  When the object is run, this
      longword is set to the load address of the object, plus the
      addend.  */
-  HOWTO (R_NDS32_RELATIVE,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_RELATIVE",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_NDS32_GOTOFF,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_GOTOFF",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xfffff,		/* src_mask */
-	 0xfffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_RELATIVE,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_bitfield,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_RELATIVE",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffffff,		/* src_mask  */
+	 0xffffffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+
+  HOWTO2 (R_NDS32_GOTOFF,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 20,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_GOTOFF",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xfffff,		/* src_mask  */
+	 0xfffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* An PC Relative 20-bit relocation used when setting PIC offset
      table register.  */
-  HOWTO (R_NDS32_GOTPC20,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 20,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_GOTPC20",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xfffff,		/* src_mask */
-	 0xfffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+  HOWTO2 (R_NDS32_GOTPC20,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 20,			/* bitsize  */
+	 TRUE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_GOTPC20",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xfffff,		/* src_mask  */
+	 0xfffff,		/* dst_mask  */
+	 TRUE),			/* pcrel_offset  */
 
   /* Like R_NDS32_HI20, but referring to the GOT table entry for
      the symbol.  */
-  HOWTO (R_NDS32_GOT_HI20,	/* type */
-	 12,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_GOT_HI20",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000fffff,		/* src_mask */
-	 0x000fffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-  HOWTO (R_NDS32_GOT_LO12,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_GOT_LO12",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00000fff,		/* src_mask */
-	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_GOT_HI20,	/* type  */
+	 12,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 20,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_GOT_HI20",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000fffff,		/* src_mask  */
+	 0x000fffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+  HOWTO2 (R_NDS32_GOT_LO12,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 12,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_GOT_LO12",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00000fff,		/* src_mask  */
+	 0x00000fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* An PC Relative relocation used when setting PIC offset table register.
      Like R_NDS32_HI20, but referring to the GOT table entry for
      the symbol.  */
-  HOWTO (R_NDS32_GOTPC_HI20,	/* type */
-	 12,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_GOTPC_HI20",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000fffff,		/* src_mask */
-	 0x000fffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-  HOWTO (R_NDS32_GOTPC_LO12,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_GOTPC_LO12",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00000fff,		/* src_mask */
-	 0x00000fff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  HOWTO (R_NDS32_GOTOFF_HI20,	/* type */
-	 12,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_GOTOFF_HI20",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000fffff,		/* src_mask */
-	 0x000fffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-  HOWTO (R_NDS32_GOTOFF_LO12,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_GOTOFF_LO12",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00000fff,		/* src_mask */
-	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_GOTPC_HI20,	/* type  */
+	 12,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 20,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_GOTPC_HI20",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000fffff,		/* src_mask  */
+	 0x000fffff,		/* dst_mask  */
+	 TRUE),			/* pcrel_offset  */
+  HOWTO2 (R_NDS32_GOTPC_LO12,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 12,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_GOTPC_LO12",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00000fff,		/* src_mask  */
+	 0x00000fff,		/* dst_mask  */
+	 TRUE),			/* pcrel_offset  */
+
+  HOWTO2 (R_NDS32_GOTOFF_HI20,	/* type  */
+	 12,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 20,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_GOTOFF_HI20",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000fffff,		/* src_mask  */
+	 0x000fffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+  HOWTO2 (R_NDS32_GOTOFF_LO12,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 12,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_GOTOFF_LO12",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00000fff,		/* src_mask  */
+	 0x00000fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Alignment hint for relaxable instruction.  This is used with
      R_NDS32_LABEL as a pair.  Relax this instruction from 4 bytes to 2
      in order to make next label aligned on word boundary.  */
-  HOWTO (R_NDS32_INSN16,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_INSN16",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00000fff,		/* src_mask */
-	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_INSN16,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_INSN16",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00000fff,		/* src_mask  */
+	 0x00000fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Alignment hint for label.  */
-  HOWTO (R_NDS32_LABEL,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_LABEL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LABEL,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_LABEL",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffffff,		/* src_mask  */
+	 0xffffffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Relax hint for unconditional call sequence  */
-  HOWTO (R_NDS32_LONGCALL1,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_LONGCALL1",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LONGCALL1,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_LONGCALL1",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffffff,		/* src_mask  */
+	 0xffffffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Relax hint for conditional call sequence.  */
-  HOWTO (R_NDS32_LONGCALL2,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_LONGCALL2",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LONGCALL2,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_LONGCALL2",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffffff,		/* src_mask  */
+	 0xffffffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Relax hint for conditional call sequence.  */
-  HOWTO (R_NDS32_LONGCALL3,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_LONGCALL3",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LONGCALL3,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_LONGCALL3",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffffff,		/* src_mask  */
+	 0xffffffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Relax hint for unconditional branch sequence.  */
-  HOWTO (R_NDS32_LONGJUMP1,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_LONGJUMP1",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LONGJUMP1,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_LONGJUMP1",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffffff,		/* src_mask  */
+	 0xffffffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Relax hint for conditional branch sequence.  */
-  HOWTO (R_NDS32_LONGJUMP2,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_LONGJUMP2",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LONGJUMP2,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_LONGJUMP2",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffffff,		/* src_mask  */
+	 0xffffffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Relax hint for conditional branch sequence.  */
-  HOWTO (R_NDS32_LONGJUMP3,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_LONGJUMP3",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LONGJUMP3,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_LONGJUMP3",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffffff,		/* src_mask  */
+	 0xffffffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Relax hint for load/store sequence.   */
-  HOWTO (R_NDS32_LOADSTORE,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_LOADSTORE",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LOADSTORE,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_LOADSTORE",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffffff,		/* src_mask  */
+	 0xffffffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Relax hint for load/store sequence.  */
-  HOWTO (R_NDS32_9_FIXED_RELA,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_9_FIXED_RELA",/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000000ff,		/* src_mask */
-	 0x000000ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_9_FIXED_RELA,	/* type  */
+	 0,			/* rightshift  */
+	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 16,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_9_FIXED_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000000ff,		/* src_mask  */
+	 0x000000ff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Relax hint for load/store sequence.  */
-  HOWTO (R_NDS32_15_FIXED_RELA,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_15_FIXED_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00003fff,		/* src_mask */
-	 0x00003fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_15_FIXED_RELA,/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_15_FIXED_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00003fff,		/* src_mask  */
+	 0x00003fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Relax hint for load/store sequence.  */
-  HOWTO (R_NDS32_17_FIXED_RELA,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_17_FIXED_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_17_FIXED_RELA,/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_17_FIXED_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x0000ffff,		/* src_mask  */
+	 0x0000ffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Relax hint for load/store sequence.  */
-  HOWTO (R_NDS32_25_FIXED_RELA,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_25_FIXED_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00ffffff,		/* src_mask */
-	 0x00ffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_25_FIXED_RELA,/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_25_FIXED_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00ffffff,		/* src_mask  */
+	 0x00ffffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* High 20 bits of PLT symbol offset relative to PC.  */
-  HOWTO (R_NDS32_PLTREL_HI20,	/* type */
-	 12,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_PLTREL_HI20",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000fffff,		/* src_mask */
-	 0x000fffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_PLTREL_HI20,	/* type  */
+	 12,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 20,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_PLTREL_HI20",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000fffff,		/* src_mask  */
+	 0x000fffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Low 12 bits of PLT symbol offset relative to PC.  */
-  HOWTO (R_NDS32_PLTREL_LO12,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_PLTREL_LO12",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00000fff,		/* src_mask */
-	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_PLTREL_LO12,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 12,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_PLTREL_LO12",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00000fff,		/* src_mask  */
+	 0x00000fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* High 20 bits of PLT symbol offset relative to GOT (GP).  */
-  HOWTO (R_NDS32_PLT_GOTREL_HI20,	/* type */
-	 12,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_PLT_GOTREL_HI20",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000fffff,		/* src_mask */
-	 0x000fffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_PLT_GOTREL_HI20,	/* type  */
+	 12,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 20,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_PLT_GOTREL_HI20",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000fffff,		/* src_mask  */
+	 0x000fffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Low 12 bits of PLT symbol offset relative to GOT (GP).  */
-  HOWTO (R_NDS32_PLT_GOTREL_LO12,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_PLT_GOTREL_LO12",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00000fff,		/* src_mask */
-	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_PLT_GOTREL_LO12,/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 12,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_PLT_GOTREL_LO12",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00000fff,		/* src_mask  */
+	 0x00000fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Small data area 12 bits offset.  */
-  HOWTO (R_NDS32_SDA12S2_DP_RELA,	/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_SDA12S2_DP_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00000fff,		/* src_mask */
-	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_SDA12S2_DP_RELA,/* type  */
+	 2,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 12,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_SDA12S2_DP_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00000fff,		/* src_mask  */
+	 0x00000fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Small data area 12 bits offset.  */
-  HOWTO (R_NDS32_SDA12S2_SP_RELA,	/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_SDA12S2_SP_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00000fff,		/* src_mask */
-	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_SDA12S2_SP_RELA,/* type  */
+	 2,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 12,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_SDA12S2_SP_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00000fff,		/* src_mask  */
+	 0x00000fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
   /* Lower 12 bits of address.  */
 
-  HOWTO (R_NDS32_LO12S2_DP_RELA,	/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 10,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_LO12S2_DP_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000003ff,		/* src_mask */
-	 0x000003ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LO12S2_DP_RELA,	/* type  */
+	 2,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 10,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_LO12S2_DP_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000003ff,		/* src_mask  */
+	 0x000003ff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Lower 12 bits of address.  */
-  HOWTO (R_NDS32_LO12S2_SP_RELA,/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 10,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_LO12S2_SP_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000003ff,		/* src_mask */
-	 0x000003ff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LO12S2_SP_RELA,/* type  */
+	 2,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 10,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_LO12S2_SP_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000003ff,		/* src_mask  */
+	 0x000003ff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
   /* Lower 12 bits of address.  Special identity for or case.  */
-  HOWTO (R_NDS32_LO12S0_ORI_RELA,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 12,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_LO12S0_ORI_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00000fff,		/* src_mask */
-	 0x00000fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_LO12S0_ORI_RELA,/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 12,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_LO12S0_ORI_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00000fff,		/* src_mask  */
+	 0x00000fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
   /* Small data area 19 bits offset.  */
-  HOWTO (R_NDS32_SDA16S3_RELA,	/* type */
-	 3,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_SDA16S3_RELA",/* name */
-	 FALSE,			/* partial_inplace */
-	 0x0000ffff,		/* src_mask */
-	 0x0000ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_SDA16S3_RELA,	/* type  */
+	 3,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 16,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_SDA16S3_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x0000ffff,		/* src_mask  */
+	 0x0000ffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
 
   /* Small data area 15 bits offset.  */
-  HOWTO (R_NDS32_SDA17S2_RELA,	/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 17,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_SDA17S2_RELA",/* name */
-	 FALSE,			/* partial_inplace */
-	 0x0001ffff,		/* src_mask */
-	 0x0001ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_NDS32_SDA18S1_RELA,	/* type */
-	 1,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 18,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_SDA18S1_RELA",/* name */
-	 FALSE,			/* partial_inplace */
-	 0x0003ffff,		/* src_mask */
-	 0x0003ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_NDS32_SDA19S0_RELA,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 19,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_SDA19S0_RELA",/* name */
-	 FALSE,			/* partial_inplace */
-	 0x0007ffff,		/* src_mask */
-	 0x0007ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-  HOWTO (R_NDS32_DWARF2_OP1_RELA,	/* type */
-	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
-	 8,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_DWARF2_OP1_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xff,			/* src_mask */
-	 0xff,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-  HOWTO (R_NDS32_DWARF2_OP2_RELA,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_DWARF2_OP2_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-  HOWTO (R_NDS32_DWARF2_LEB_RELA,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_DWARF2_LEB_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffffffff,		/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-  HOWTO (R_NDS32_UPDATE_TA_RELA,/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 nds32_elf_ignore_reloc,/* special_function */
-	 "R_NDS32_UPDATE_TA_RELA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xffff,		/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_SDA17S2_RELA,	/* type  */
+	 2,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 17,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_SDA17S2_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x0001ffff,		/* src_mask  */
+	 0x0001ffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+
+  HOWTO2 (R_NDS32_SDA18S1_RELA,	/* type  */
+	 1,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 18,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_SDA18S1_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x0003ffff,		/* src_mask  */
+	 0x0003ffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+
+  HOWTO2 (R_NDS32_SDA19S0_RELA,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 19,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_SDA19S0_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x0007ffff,		/* src_mask  */
+	 0x0007ffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+  HOWTO2 (R_NDS32_DWARF2_OP1_RELA,/* type  */
+	 0,			/* rightshift  */
+	 0,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 8,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_DWARF2_OP1_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xff,			/* src_mask  */
+	 0xff,			/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+  HOWTO2 (R_NDS32_DWARF2_OP2_RELA,/* type  */
+	 0,			/* rightshift  */
+	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 16,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_DWARF2_OP2_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffff,		/* src_mask  */
+	 0xffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+  HOWTO2 (R_NDS32_DWARF2_LEB_RELA,/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 32,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_DWARF2_LEB_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffffffff,		/* src_mask  */
+	 0xffffffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+  HOWTO2 (R_NDS32_UPDATE_TA_RELA,/* type  */
+	 0,			/* rightshift  */
+	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 16,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 nds32_elf_ignore_reloc,/* special_function  */
+	 "R_NDS32_UPDATE_TA_RELA",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xffff,		/* src_mask  */
+	 0xffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
   /* Like R_NDS32_PCREL, but referring to the procedure linkage table
      entry for the symbol.  */
-  HOWTO (R_NDS32_9_PLTREL,	/* type */
-	 1,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 8,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,	/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_9_PLTREL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0xff,			/* src_mask */
-	 0xff,			/* dst_mask */
-	 TRUE),			/* pcrel_offset */
+  HOWTO2 (R_NDS32_9_PLTREL,	/* type  */
+	 1,			/* rightshift  */
+	 1,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 8,			/* bitsize  */
+	 TRUE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_signed,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_9_PLTREL",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0xff,			/* src_mask  */
+	 0xff,			/* dst_mask  */
+	 TRUE),			/* pcrel_offset  */
   /* Low 20 bits of PLT symbol offset relative to GOT (GP).  */
-  HOWTO (R_NDS32_PLT_GOTREL_LO20,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 20,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_PLT_GOTREL_LO20",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x000fffff,		/* src_mask */
-	 0x000fffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-  /* low 15 bits of PLT symbol offset relative to GOT (GP) */
-  HOWTO (R_NDS32_PLT_GOTREL_LO15,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_PLT_GOTREL_LO15",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00007fff,		/* src_mask */
-	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_PLT_GOTREL_LO20,/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 20,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_PLT_GOTREL_LO20",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x000fffff,		/* src_mask  */
+	 0x000fffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+  /* low 15 bits of PLT symbol offset relative to GOT (GP)  */
+  HOWTO2 (R_NDS32_PLT_GOTREL_LO15,/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 15,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_PLT_GOTREL_LO15",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00007fff,		/* src_mask  */
+	 0x00007fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
   /* Low 19 bits of PLT symbol offset relative to GOT (GP).  */
-  HOWTO (R_NDS32_PLT_GOTREL_LO19,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 19,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_PLT_GOTREL_LO19",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x0007ffff,		/* src_mask */
-	 0x0007ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-  HOWTO (R_NDS32_GOT_LO15,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_GOT_LO15",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00007fff,		/* src_mask */
-	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-  HOWTO (R_NDS32_GOT_LO19,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 19,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_GOT_LO19",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x0007ffff,		/* src_mask */
-	 0x0007ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-  HOWTO (R_NDS32_GOTOFF_LO15,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 15,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_GOTOFF_LO15",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x00007fff,		/* src_mask */
-	 0x00007fff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-  HOWTO (R_NDS32_GOTOFF_LO19,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 19,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_NDS32_GOTOFF_LO19",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0x0007ffff,		/* src_mask */
-	 0x0007ffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
+  HOWTO2 (R_NDS32_PLT_GOTREL_LO19,/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 19,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_PLT_GOTREL_LO19",/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x0007ffff,		/* src_mask  */
+	 0x0007ffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+  HOWTO2 (R_NDS32_GOT_LO15,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 15,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_GOT_LO15",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00007fff,		/* src_mask  */
+	 0x00007fff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+  HOWTO2 (R_NDS32_GOT_LO19,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 19,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_GOT_LO19",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x0007ffff,		/* src_mask  */
+	 0x0007ffff,		/* dst_mask  */
+	 FALSE),		/* pcrel_offset  */
+  HOWTO2 (R_NDS32_GOTOFF_LO15,	/* type  */
+	 0,			/* rightshift  */
+	 2,			/* size (0 = byte, 1 = short, 2 = long)  */
+	 15,			/* bitsize  */
+	 FALSE,			/* pc_relative  */
+	 0,			/* bitpos  */
+	 complain_overflow_dont,/* complain_on_overflow  */
+	 bfd_elf_generic_reloc,	/* special_function  */
+	 "R_NDS32_GOTOFF_LO15",	/* name  */
+	 FALSE,			/* partial_inplace  */
+	 0x00007fff,		/* src_mask  */
+	 0x00007fff,		/* ds[...]

[diff truncated at 100000 bytes]


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]