binutils-gdb/bfd/elf32-sh-relocs.h
Nick Clifton 8e45593ff3 2010-05-21 Daniel Jacobowitz <dan@codesourcery.com>
Joseph Myers  <joseph@codesourcery.com>
            Andrew Stubbs  <ams@codesourcery.com>

        bfd/
        * config.bfd (sh-*-uclinux* | sh[12]-*-uclinux*): Add
        bfd_elf32_shl_vec, and FDPIC vectors to targ_selvecs.
        * configure.in: Handle FDPIC vectors.
        * elf32-sh-relocs.h: Add FDPIC and movi20 relocations.
        * elf32-sh.c (DEFAULT_STACK_SIZE): Define.
        (SYMBOL_FUNCDESC_LOCAL): Define.  Use it instead of
        SYMBOL_REFERENCES_LOCAL for function descriptors.
        (fdpic_object_p): New.
        (sh_reloc_map): Add FDPIC and movi20 relocations.
        (sh_elf_info_to_howto, sh_elf_relocate_section): Handle new invalid
        range.
        (struct elf_sh_plt_info): Add got20 and short_plt.  Update all
        definitions.
        (FDPIC_PLT_ENTRY_SIZE, FDPIC_PLT_LAZY_OFFSET): Define.
        (fdpic_sh_plt_entry_be, fdpic_sh_plt_entry_le, fdpic_sh_plts): New.
        (FDPIC_SH2A_PLT_ENTRY_SIZE, FDPIC_SH2A_PLT_LAZY_OFFSET): Define.
        (fdpic_sh2a_plt_entry_be, fdpic_sh2a_plt_entry_le)
        (fdpic_sh2a_short_plt_be, fdpic_sh2a_short_plt_le, fdpic_sh2a_plts):
        New.
        (get_plt_info): Handle FDPIC.
        (MAX_SHORT_PLT): Define.
        (get_plt_index, get_plt_offset): Handle short_plt.
        (union gotref): New.
        (struct elf_sh_link_hash_entry): Add funcdesc, rename tls_type to
        got_type and adjust all uses.  Add GOT_FUNCDESC.
        (struct sh_elf_obj_tdata): Add local_funcdesc.  Rename
        local_got_tls_type to local_got_type.
        (sh_elf_local_got_type): Renamed from sh_elf_local_got_tls_type.  All
        users changed.
        (sh_elf_local_funcdesc): Define.
        (struct elf_sh_link_hash_table): Add sfuncdesc, srelfuncdesc, fdpic_p,
        and srofixup.
        (sh_elf_link_hash_newfunc): Initialize new fields.
        (sh_elf_link_hash_table_create): Set fdpic_p.
        (sh_elf_omit_section_dynsym): New.
        (create_got_section): Create .got.funcdesc, .rela.got.funcdesc
        and .rofixup.
        (allocate_dynrelocs): Allocate local function descriptors and space
        for R_SH_FUNCDESC-related relocations, and for rofixups.
        Handle GOT_FUNCDESC.  Create fixups.  Handle GOT entries which
        require function descriptors.
        (sh_elf_always_size_sections): Handle PT_GNU_STACK and __stacksize.
        (sh_elf_modify_program_headers): New.
        (sh_elf_size_dynamic_sections): Allocate function descriptors for
        local symbols.  Allocate .got.funcdesc contents.  Allocate rofixups.
        Handle local GOT entries of type GOT_FUNCDESC.  Create fixups for
        local GOT entries.  Ensure that FDPIC libraries always have a PLTGOT
        entry in the .dynamic section.
        (sh_elf_add_dyn_reloc, sh_elf_got_offset, sh_elf_initialize_funcdesc)
        (sh_elf_add_rofixup, sh_elf_osec_to_segment)
        (sh_elf_osec_readonly_p, install_movi20_field): New functions.
        (sh_elf_relocate_section): Handle new relocations, R_SH_FUNCDESC,
        R_SH_GOTFUNCDESC and R_SH_GOTOFFFUNCDESC.  Use sh_elf_got_offset
        and .got.plt throughout to find _GLOBAL_OFFSET_TABLE_.  Add rofixup
        read-only section warnings.  Handle undefined weak symbols.  Generate
        fixups for R_SH_DIR32 and GOT entries.  Check for cross-segment
        relocations and clear EF_SH_PIC.  Handle 20-bit relocations.
        Always generate R_SH_DIR32 for FDPIC instead of R_SH_RELATIVE.
        (sh_elf_gc_sweep_hook): Handle R_SH_FUNCDESC, R_SH_GOTOFF20,
        R_SH_GOTFUNCDESC, R_SH_GOTFUNCDESC20, and R_SH_GOTOFFFUNCDESC.
        Handle 20-bit relocations.
        (sh_elf_copy_indirect_symbol): Copy function descriptor reference
        counts.
        (sh_elf_check_relocs): Handle new relocations.  Make symbols
        dynamic for FDPIC relocs.  Account for rofixups.  Error for FDPIC
        symbol mismatches.  Allocate a GOT for R_SH_DIR32. Allocate fixups
        for R_SH_DIR32.
        (sh_elf_copy_private_data): Copy PT_GNU_STACK size.
        (sh_elf_merge_private_data): Copy initial flags.  Do not clobber
        non-mach flags.  Set EF_SH_PIC for FDPIC.  Reject FDPIC mismatches.
        (sh_elf_finish_dynamic_symbol): Do not handle got_funcdesc entries
        here.  Rename sgot to sgotplt and srel to srelplt.  Handle short_plt,
        FDPIC descriptors, and got20.  Create R_SH_FUNCDESC_VALUE for FDPIC.
        Use install_movi20_field.  Rename srel to srelgot.  Always generate
        R_SH_DIR32 for FDPIC instead of R_SH_RELATIVE.
        (sh_elf_finish_dynamic_sections): Fill in the GOT pointer in rofixup.
        Do not fill in reserved GOT entries for FDPIC.  Correct DT_PLTGOT.
        Rename sgot to sgotplt.  Assert that the right number of rofixups
        and dynamic relocations were allocated.
        (sh_elf_use_relative_eh_frame, sh_elf_encode_eh_address): New.
        (elf_backend_omit_section_dynsym): Use sh_elf_omit_section_dynsym.
        (elf_backend_can_make_relative_eh_frame)
        (elf_backend_can_make_lsda_relative_eh_frame)
        (elf_backend_encode_eh_address): Define.
        (TARGET_BIG_SYM, TARGET_BIG_NAME, TARGET_LITTLE_SYM)
        (TARGET_LITTLE_NAME, elf_backend_modify_program_headers, elf32_bed):
        Redefine for FDPIC vector.
        * reloc.c: Add SH FDPIC and movi20 relocations.
        * targets.c (_bfd_target_vector): Add FDPIC vectors.
        * configure, bfd-in2.h, libbfd.h: Regenerated.

        binutils/
        * readelf.c (get_machine_flags): Handle EF_SH_PIC and EF_SH_FDPIC.

        gas/
        * config/tc-sh.c (sh_fdpic): New.
        (sh_check_fixup): Handle relocations on movi20.
        (parse_exp): Do not reject PIC operators here.
        (build_Mytes): Check for unhandled PIC operators here.  Use
        sh_check_fixup for movi20.
        (enum options): Add OPTION_FDPIC.
        (md_longopts, md_parse_option, md_show_usage): Add --fdpic.
        (sh_fix_adjustable, md_apply_fix): Handle FDPIC and movi20 relocations.
        (sh_elf_final_processing): Handle --fdpic.
        (sh_uclinux_target_format): New.
        (sh_parse_name): Handle FDPIC relocation operators.
        * config/tc-sh.h (TARGET_FORMAT): Define specially for TE_UCLINUX.
        (sh_uclinux_target_format): Declare for TE_UCLINUX.
        * configure.tgt (sh-*-uclinux* | sh[12]-*-uclinux*): Set
        em=uclinux.
        * doc/c-sh.texi (SH Options): Document --fdpic.

        gas/testsuite/
        * gas/sh/basic.exp: Run new tests.  Handle uClinux like Linux.
        * gas/sh/fdpic.d: New file.
        * gas/sh/fdpic.s: New file.
        * gas/sh/reg-prefix.d: Force big-endian.
        * gas/sh/sh2a-pic.d: New file.
        * gas/sh/sh2a-pic.s: New file.
        * lib/gas-defs.exp (is_elf_format): Include sh*-*-uclinux*.

        include/elf/
        * sh.h (EF_SH_PIC, EF_SH_FDPIC): Define.
        (R_SH_FIRST_INVALID_RELOC_6, R_SH_LAST_INVALID_RELOC_6): New.  Adjust
        other invalid ranges.
        (R_SH_GOT20, R_SH_GOTOFF20, R_SH_GOTFUNCDESC, R_SH_GOTFUNCDESC20)
        (R_SH_GOTOFFFUNCDESC, R_SH_GOTOFFFUNCDESC20, R_SH_FUNCDESC)
        (R_SH_FUNCDESC_VALUE): New.

        ld/
        * Makefile.am (ALL_EMULATIONS): Add eshelf_fd.o and eshlelf_fd.o.
        (eshelf_fd.c, eshlelf_fd.c): New rules.
        * Makefile.in: Regenerate.
        * configure.tgt (sh-*-uclinux*): Add shelf_fd and shlelf_fd
        emulations.
        * emulparams/shelf_fd.sh: New file.
        * emulparams/shlelf_fd.sh: New file.
        * emulparams/shlelf_linux.sh: Update comment.

        ld/testsuite/
        * ld-sh/sh.exp: Handle uClinux like Linux.
        * lib/ld-lib.exp (is_elf_format): Include sh*-*-uclinux*.
        * ld-sh/fdpic-funcdesc-shared.d: New file.
        * ld-sh/fdpic-funcdesc-shared.s: New file.
        * ld-sh/fdpic-funcdesc-static.d: New file.
        * ld-sh/fdpic-funcdesc-static.s: New file.
        * ld-sh/fdpic-gotfuncdesc-shared.d: New file.
        * ld-sh/fdpic-gotfuncdesc-shared.s: New file.
        * ld-sh/fdpic-gotfuncdesc-static.d: New file.
        * ld-sh/fdpic-gotfuncdesc-static.s: New file.
        * ld-sh/fdpic-gotfuncdesci20-shared.d: New file.
        * ld-sh/fdpic-gotfuncdesci20-shared.s: New file.
        * ld-sh/fdpic-gotfuncdesci20-static.d: New file.
        * ld-sh/fdpic-gotfuncdesci20-static.s: New file.
        * ld-sh/fdpic-goti20-shared.d: New file.
        * ld-sh/fdpic-goti20-shared.s: New file.
        * ld-sh/fdpic-goti20-static.d: New file.
        * ld-sh/fdpic-goti20-static.s: New file.
        * ld-sh/fdpic-gotofffuncdesc-shared.d: New file.
        * ld-sh/fdpic-gotofffuncdesc-shared.s: New file.
        * ld-sh/fdpic-gotofffuncdesc-static.d: New file.
        * ld-sh/fdpic-gotofffuncdesc-static.s: New file.
        * ld-sh/fdpic-gotofffuncdesci20-shared.d: New file.
        * ld-sh/fdpic-gotofffuncdesci20-shared.s: New file.
        * ld-sh/fdpic-gotofffuncdesci20-static.d: New file.
        * ld-sh/fdpic-gotofffuncdesci20-static.s: New file.
        * ld-sh/fdpic-gotoffi20-shared.d: New file.
        * ld-sh/fdpic-gotoffi20-shared.s: New file.
        * ld-sh/fdpic-gotoffi20-static.d: New file.
        * ld-sh/fdpic-gotoffi20-static.s: New file.
        * ld-sh/fdpic-plt-be.d: New file.
        * ld-sh/fdpic-plt-le.d: New file.
        * ld-sh/fdpic-plt.s: New file.
        * ld-sh/fdpic-plti20-be.d: New file.
        * ld-sh/fdpic-plti20-le.d: New file.
        * ld-sh/fdpic-stack-default.d: New file.
        * ld-sh/fdpic-stack-size.d: New file.
        * ld-sh/fdpic-stack.s: New file.
2010-05-25 14:12:43 +00:00

1881 lines
57 KiB
C

/* Copyright 2006, 2007, 2010 Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
/* No relocation. */
HOWTO (R_SH_NONE, /* type */
0, /* rightshift */
0, /* size (0 = byte, 1 = short, 2 = long) */
0, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_NONE", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0, /* dst_mask */
FALSE), /* pcrel_offset */
/* 32 bit absolute relocation. Setting partial_inplace to TRUE and
src_mask to a non-zero value is similar to the COFF toolchain. */
HOWTO (R_SH_DIR32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
SH_ELF_RELOC, /* special_function */
"R_SH_DIR32", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* 32 bit PC relative relocation. */
HOWTO (R_SH_REL32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_REL32", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
TRUE), /* pcrel_offset */
/* 8 bit PC relative branch divided by 2. */
HOWTO (R_SH_DIR8WPN, /* type */
1, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
8, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_DIR8WPN", /* name */
TRUE, /* partial_inplace */
0xff, /* src_mask */
0xff, /* dst_mask */
TRUE), /* pcrel_offset */
/* 12 bit PC relative branch divided by 2. */
/* This cannot be partial_inplace because relaxation can't know the
eventual value of a symbol. */
HOWTO (R_SH_IND12W, /* type */
1, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
12, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
NULL, /* special_function */
"R_SH_IND12W", /* name */
FALSE, /* partial_inplace */
0x0, /* src_mask */
0xfff, /* dst_mask */
TRUE), /* pcrel_offset */
/* 8 bit unsigned PC relative divided by 4. */
HOWTO (R_SH_DIR8WPL, /* type */
2, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
8, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_DIR8WPL", /* name */
TRUE, /* partial_inplace */
0xff, /* src_mask */
0xff, /* dst_mask */
TRUE), /* pcrel_offset */
/* 8 bit unsigned PC relative divided by 2. */
HOWTO (R_SH_DIR8WPZ, /* type */
1, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
8, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_DIR8WPZ", /* name */
TRUE, /* partial_inplace */
0xff, /* src_mask */
0xff, /* dst_mask */
TRUE), /* pcrel_offset */
/* 8 bit GBR relative. FIXME: This only makes sense if we have some
special symbol for the GBR relative area, and that is not
implemented. */
HOWTO (R_SH_DIR8BP, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
8, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_DIR8BP", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xff, /* dst_mask */
TRUE), /* pcrel_offset */
/* 8 bit GBR relative divided by 2. FIXME: This only makes sense if
we have some special symbol for the GBR relative area, and that
is not implemented. */
HOWTO (R_SH_DIR8W, /* type */
1, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
8, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_DIR8W", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xff, /* dst_mask */
TRUE), /* pcrel_offset */
/* 8 bit GBR relative divided by 4. FIXME: This only makes sense if
we have some special symbol for the GBR relative area, and that
is not implemented. */
HOWTO (R_SH_DIR8L, /* type */
2, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
8, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_DIR8L", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xff, /* dst_mask */
TRUE), /* pcrel_offset */
/* 8 bit PC relative divided by 2 - but specified in a very odd way. */
HOWTO (R_SH_LOOP_START, /* type */
1, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
8, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_LOOP_START", /* name */
TRUE, /* partial_inplace */
0xff, /* src_mask */
0xff, /* dst_mask */
TRUE), /* pcrel_offset */
/* 8 bit PC relative divided by 2 - but specified in a very odd way. */
HOWTO (R_SH_LOOP_END, /* type */
1, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
8, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_LOOP_END", /* name */
TRUE, /* partial_inplace */
0xff, /* src_mask */
0xff, /* dst_mask */
TRUE), /* pcrel_offset */
EMPTY_HOWTO (12),
EMPTY_HOWTO (13),
EMPTY_HOWTO (14),
EMPTY_HOWTO (15),
EMPTY_HOWTO (16),
EMPTY_HOWTO (17),
EMPTY_HOWTO (18),
EMPTY_HOWTO (19),
EMPTY_HOWTO (20),
EMPTY_HOWTO (21),
/* The remaining relocs are a GNU extension used for relaxing. The
final pass of the linker never needs to do anything with any of
these relocs. Any required operations are handled by the
relaxation code. */
/* GNU extension to record C++ vtable hierarchy */
HOWTO (R_SH_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_SH_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_SH_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_SH_GNU_VTENTRY", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0, /* dst_mask */
FALSE), /* pcrel_offset */
/* An 8 bit switch table entry. This is generated for an expression
such as ``.word L1 - L2''. The offset holds the difference
between the reloc address and L2. */
HOWTO (R_SH_SWITCH8, /* type */
0, /* rightshift */
0, /* size (0 = byte, 1 = short, 2 = long) */
8, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_SWITCH8", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0, /* dst_mask */
TRUE), /* pcrel_offset */
/* A 16 bit switch table entry. This is generated for an expression
such as ``.word L1 - L2''. The offset holds the difference
between the reloc address and L2. */
HOWTO (R_SH_SWITCH16, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_SWITCH16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0, /* dst_mask */
TRUE), /* pcrel_offset */
/* A 32 bit switch table entry. This is generated for an expression
such as ``.long L1 - L2''. The offset holds the difference
between the reloc address and L2. */
HOWTO (R_SH_SWITCH32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_SWITCH32", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0, /* dst_mask */
TRUE), /* pcrel_offset */
/* Indicates a .uses pseudo-op. The compiler will generate .uses
pseudo-ops when it finds a function call which can be relaxed.
The offset field holds the PC relative offset to the instruction
which loads the register used in the function call. */
HOWTO (R_SH_USES, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
0, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_USES", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0, /* dst_mask */
TRUE), /* pcrel_offset */
/* The assembler will generate this reloc for addresses referred to
by the register loads associated with USES relocs. The offset
field holds the number of times the address is referenced in the
object file. */
HOWTO (R_SH_COUNT, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
0, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_COUNT", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0, /* dst_mask */
TRUE), /* pcrel_offset */
/* Indicates an alignment statement. The offset field is the power
of 2 to which subsequent portions of the object file must be
aligned. */
HOWTO (R_SH_ALIGN, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
0, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_ALIGN", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0, /* dst_mask */
TRUE), /* pcrel_offset */
/* The assembler will generate this reloc before a block of
instructions. A section should be processed as assuming it
contains data, unless this reloc is seen. */
HOWTO (R_SH_CODE, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
0, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_CODE", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0, /* dst_mask */
TRUE), /* pcrel_offset */
/* The assembler will generate this reloc after a block of
instructions when it sees data that is not instructions. */
HOWTO (R_SH_DATA, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
0, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_DATA", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0, /* dst_mask */
TRUE), /* pcrel_offset */
/* The assembler generates this reloc for each label within a block
of instructions. This permits the linker to avoid swapping
instructions which are the targets of branches. */
HOWTO (R_SH_LABEL, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
0, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_LABEL", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0, /* dst_mask */
TRUE), /* pcrel_offset */
/* The next 12 are only supported via linking in SHC-generated objects. */
HOWTO (R_SH_DIR16, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_DIR8, /* type */
0, /* rightshift */
0, /* size (0 = byte, 1 = short, 2 = long) */
8, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR8", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_DIR8UL, /* type */
2, /* rightshift */
0, /* size (0 = byte, 1 = short, 2 = long) */
8, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR8UL", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_DIR8UW, /* type */
1, /* rightshift */
0, /* size (0 = byte, 1 = short, 2 = long) */
8, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR8UW", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_DIR8U, /* type */
0, /* rightshift */
0, /* size (0 = byte, 1 = short, 2 = long) */
8, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR8U", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_DIR8SW, /* type */
1, /* rightshift */
0, /* size (0 = byte, 1 = short, 2 = long) */
8, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR8SW", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_DIR8S, /* type */
0, /* rightshift */
0, /* size (0 = byte, 1 = short, 2 = long) */
8, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR8S", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_DIR4UL, /* type */
2, /* rightshift */
0, /* size (0 = byte, 1 = short, 2 = long) */
4, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR4UL", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x0f, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_DIR4UW, /* type */
1, /* rightshift */
0, /* size (0 = byte, 1 = short, 2 = long) */
4, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR4UW", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x0f, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_DIR4U, /* type */
0, /* rightshift */
0, /* size (0 = byte, 1 = short, 2 = long) */
4, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR4U", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x0f, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_PSHA, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
7, /* bitsize */
FALSE, /* pc_relative */
4, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_PSHA", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x0f, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_PSHL, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
7, /* bitsize */
FALSE, /* pc_relative */
4, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_PSHL", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x0f, /* dst_mask */
FALSE), /* pcrel_offset */
#ifdef INCLUDE_SHMEDIA
/* Used in SHLLI.L and SHLRI.L. */
HOWTO (R_SH_DIR5U, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
5, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR5U", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xfc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in SHARI, SHLLI et al. */
HOWTO (R_SH_DIR6U, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
6, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR6U", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xfc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in BxxI, LDHI.L et al. */
HOWTO (R_SH_DIR6S, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
6, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR6S", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xfc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in ADDI, ANDI et al. */
HOWTO (R_SH_DIR10S, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
10, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR10S", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in LD.UW, ST.W et al. */
HOWTO (R_SH_DIR10SW, /* type */
1, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
11, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR10SW", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in LD.L, FLD.S et al. */
HOWTO (R_SH_DIR10SL, /* type */
2, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
12, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR10SL", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in FLD.D, FST.P et al. */
HOWTO (R_SH_DIR10SQ, /* type */
3, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
13, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_DIR10SQ", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xffc00, /* dst_mask */
FALSE), /* pcrel_offset */
#else
EMPTY_HOWTO (45),
EMPTY_HOWTO (46),
EMPTY_HOWTO (47),
EMPTY_HOWTO (48),
EMPTY_HOWTO (49),
EMPTY_HOWTO (50),
EMPTY_HOWTO (51),
#endif
EMPTY_HOWTO (52),
HOWTO (R_SH_DIR16S, /* type */
0, /* rightshift */
1, /* 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_SH_DIR16S", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xffff, /* dst_mask */
FALSE), /* pcrel_offset */
EMPTY_HOWTO (54),
EMPTY_HOWTO (55),
EMPTY_HOWTO (56),
EMPTY_HOWTO (57),
EMPTY_HOWTO (58),
EMPTY_HOWTO (59),
EMPTY_HOWTO (60),
EMPTY_HOWTO (61),
EMPTY_HOWTO (62),
EMPTY_HOWTO (63),
EMPTY_HOWTO (64),
EMPTY_HOWTO (65),
EMPTY_HOWTO (66),
EMPTY_HOWTO (67),
EMPTY_HOWTO (68),
EMPTY_HOWTO (69),
EMPTY_HOWTO (70),
EMPTY_HOWTO (71),
EMPTY_HOWTO (72),
EMPTY_HOWTO (73),
EMPTY_HOWTO (74),
EMPTY_HOWTO (75),
EMPTY_HOWTO (76),
EMPTY_HOWTO (77),
EMPTY_HOWTO (78),
EMPTY_HOWTO (79),
EMPTY_HOWTO (80),
EMPTY_HOWTO (81),
EMPTY_HOWTO (82),
EMPTY_HOWTO (83),
EMPTY_HOWTO (84),
EMPTY_HOWTO (85),
EMPTY_HOWTO (86),
EMPTY_HOWTO (87),
EMPTY_HOWTO (88),
EMPTY_HOWTO (89),
EMPTY_HOWTO (90),
EMPTY_HOWTO (91),
EMPTY_HOWTO (92),
EMPTY_HOWTO (93),
EMPTY_HOWTO (94),
EMPTY_HOWTO (95),
EMPTY_HOWTO (96),
EMPTY_HOWTO (97),
EMPTY_HOWTO (98),
EMPTY_HOWTO (99),
EMPTY_HOWTO (100),
EMPTY_HOWTO (101),
EMPTY_HOWTO (102),
EMPTY_HOWTO (103),
EMPTY_HOWTO (104),
EMPTY_HOWTO (105),
EMPTY_HOWTO (106),
EMPTY_HOWTO (107),
EMPTY_HOWTO (108),
EMPTY_HOWTO (109),
EMPTY_HOWTO (110),
EMPTY_HOWTO (111),
EMPTY_HOWTO (112),
EMPTY_HOWTO (113),
EMPTY_HOWTO (114),
EMPTY_HOWTO (115),
EMPTY_HOWTO (116),
EMPTY_HOWTO (117),
EMPTY_HOWTO (118),
EMPTY_HOWTO (119),
EMPTY_HOWTO (120),
EMPTY_HOWTO (121),
EMPTY_HOWTO (122),
EMPTY_HOWTO (123),
EMPTY_HOWTO (124),
EMPTY_HOWTO (125),
EMPTY_HOWTO (126),
EMPTY_HOWTO (127),
EMPTY_HOWTO (128),
EMPTY_HOWTO (129),
EMPTY_HOWTO (130),
EMPTY_HOWTO (131),
EMPTY_HOWTO (132),
EMPTY_HOWTO (133),
EMPTY_HOWTO (134),
EMPTY_HOWTO (135),
EMPTY_HOWTO (136),
EMPTY_HOWTO (137),
EMPTY_HOWTO (138),
EMPTY_HOWTO (139),
EMPTY_HOWTO (140),
EMPTY_HOWTO (141),
EMPTY_HOWTO (142),
EMPTY_HOWTO (143),
HOWTO (R_SH_TLS_GD_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 */
bfd_elf_generic_reloc, /* */
"R_SH_TLS_GD_32", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_TLS_LD_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 */
bfd_elf_generic_reloc, /* */
"R_SH_TLS_LD_32", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_TLS_LDO_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 */
bfd_elf_generic_reloc, /* */
"R_SH_TLS_LDO_32", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_TLS_IE_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 */
bfd_elf_generic_reloc, /* */
"R_SH_TLS_IE_32", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_TLS_LE_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 */
bfd_elf_generic_reloc, /* */
"R_SH_TLS_LE_32", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_TLS_DTPMOD32, /* 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, /* */
"R_SH_TLS_DTPMOD32", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_TLS_DTPOFF32, /* 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, /* */
"R_SH_TLS_DTPOFF32", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_TLS_TPOFF32, /* 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, /* */
"R_SH_TLS_TPOFF32", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
EMPTY_HOWTO (152),
EMPTY_HOWTO (153),
EMPTY_HOWTO (154),
EMPTY_HOWTO (155),
EMPTY_HOWTO (156),
EMPTY_HOWTO (157),
EMPTY_HOWTO (158),
EMPTY_HOWTO (159),
HOWTO (R_SH_GOT32, /* 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, /* */
"R_SH_GOT32", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_PLT32, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
bfd_elf_generic_reloc, /* */
"R_SH_PLT32", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
TRUE), /* pcrel_offset */
HOWTO (R_SH_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, /* */
"R_SH_COPY", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_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, /* */
"R_SH_GLOB_DAT", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_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, /* */
"R_SH_JMP_SLOT", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_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, /* */
"R_SH_RELATIVE", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_GOTOFF, /* 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, /* */
"R_SH_GOTOFF", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_GOTPC, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
TRUE, /* pc_relative */
0, /* bitpos */
complain_overflow_bitfield, /* complain_on_overflow */
bfd_elf_generic_reloc, /* */
"R_SH_GOTPC", /* name */
SH_PARTIAL32, /* partial_inplace */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
TRUE), /* pcrel_offset */
HOWTO (R_SH_GOTPLT32, /* 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, /* */
"R_SH_GOTPLT32", /* name */
FALSE, /* partial_inplace */
/* ??? Why not 0? */
SH_SRC_MASK32, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
#ifdef INCLUDE_SHMEDIA
/* Used in MOVI and SHORI (x & 65536). */
HOWTO (R_SH_GOT_LOW16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOT_LOW16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 16) & 65536). */
HOWTO (R_SH_GOT_MEDLOW16, /* type */
16, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOT_MEDLOW16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 32) & 65536). */
HOWTO (R_SH_GOT_MEDHI16, /* type */
32, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOT_MEDHI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 48) & 65536). */
HOWTO (R_SH_GOT_HI16, /* type */
48, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOT_HI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI (x & 65536). */
HOWTO (R_SH_GOTPLT_LOW16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOTPLT_LOW16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 16) & 65536). */
HOWTO (R_SH_GOTPLT_MEDLOW16, /* type */
16, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOTPLT_MEDLOW16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 32) & 65536). */
HOWTO (R_SH_GOTPLT_MEDHI16, /* type */
32, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOTPLT_MEDHI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 48) & 65536). */
HOWTO (R_SH_GOTPLT_HI16, /* type */
48, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOTPLT_HI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI (x & 65536). */
HOWTO (R_SH_PLT_LOW16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
TRUE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_PLT_LOW16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
TRUE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 16) & 65536). */
HOWTO (R_SH_PLT_MEDLOW16, /* type */
16, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
TRUE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_PLT_MEDLOW16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
TRUE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 32) & 65536). */
HOWTO (R_SH_PLT_MEDHI16, /* type */
32, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
TRUE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_PLT_MEDHI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
TRUE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 48) & 65536). */
HOWTO (R_SH_PLT_HI16, /* type */
48, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
TRUE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_PLT_HI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
TRUE), /* pcrel_offset */
/* Used in MOVI and SHORI (x & 65536). */
HOWTO (R_SH_GOTOFF_LOW16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOTOFF_LOW16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 16) & 65536). */
HOWTO (R_SH_GOTOFF_MEDLOW16, /* type */
16, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOTOFF_MEDLOW16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 32) & 65536). */
HOWTO (R_SH_GOTOFF_MEDHI16, /* type */
32, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOTOFF_MEDHI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 48) & 65536). */
HOWTO (R_SH_GOTOFF_HI16, /* type */
48, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOTOFF_HI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI (x & 65536). */
HOWTO (R_SH_GOTPC_LOW16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
TRUE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOTPC_LOW16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
TRUE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 16) & 65536). */
HOWTO (R_SH_GOTPC_MEDLOW16, /* type */
16, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
TRUE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOTPC_MEDLOW16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
TRUE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 32) & 65536). */
HOWTO (R_SH_GOTPC_MEDHI16, /* type */
32, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
TRUE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOTPC_MEDHI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
TRUE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 48) & 65536). */
HOWTO (R_SH_GOTPC_HI16, /* type */
48, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
TRUE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOTPC_HI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
TRUE), /* pcrel_offset */
/* Used in LD.L, FLD.S et al. */
HOWTO (R_SH_GOT10BY4, /* type */
2, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
12, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOT10BY4", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in LD.L, FLD.S et al. */
HOWTO (R_SH_GOTPLT10BY4, /* type */
2, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
12, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOTPLT10BY4", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in FLD.D, FST.P et al. */
HOWTO (R_SH_GOT10BY8, /* type */
3, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
13, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOT10BY8", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in FLD.D, FST.P et al. */
HOWTO (R_SH_GOTPLT10BY8, /* type */
3, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
13, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOTPLT10BY8", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xffc00, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_COPY64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_COPY64", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
((bfd_vma) 0) - 1, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_GLOB_DAT64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GLOB_DAT64", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
((bfd_vma) 0) - 1, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_JMP_SLOT64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_JMP_SLOT64", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
((bfd_vma) 0) - 1, /* dst_mask */
FALSE), /* pcrel_offset */
HOWTO (R_SH_RELATIVE64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_RELATIVE64", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
((bfd_vma) 0) - 1, /* dst_mask */
FALSE), /* pcrel_offset */
#else
EMPTY_HOWTO (169),
EMPTY_HOWTO (170),
EMPTY_HOWTO (171),
EMPTY_HOWTO (172),
EMPTY_HOWTO (173),
EMPTY_HOWTO (174),
EMPTY_HOWTO (175),
EMPTY_HOWTO (176),
EMPTY_HOWTO (177),
EMPTY_HOWTO (178),
EMPTY_HOWTO (179),
EMPTY_HOWTO (180),
EMPTY_HOWTO (181),
EMPTY_HOWTO (182),
EMPTY_HOWTO (183),
EMPTY_HOWTO (184),
EMPTY_HOWTO (185),
EMPTY_HOWTO (186),
EMPTY_HOWTO (187),
EMPTY_HOWTO (188),
EMPTY_HOWTO (189),
EMPTY_HOWTO (190),
EMPTY_HOWTO (191),
EMPTY_HOWTO (192),
EMPTY_HOWTO (193),
EMPTY_HOWTO (194),
EMPTY_HOWTO (195),
EMPTY_HOWTO (196),
#endif
EMPTY_HOWTO (197),
EMPTY_HOWTO (198),
EMPTY_HOWTO (199),
EMPTY_HOWTO (200),
/* FDPIC-relative offset to a GOT entry, for movi20. */
HOWTO (R_SH_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_SH_GOT20", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x00f0ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* FDPIC-relative offset to a data object, for movi20. */
HOWTO (R_SH_GOTOFF20, /* 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_SH_GOTOFF20", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x00f0ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* FDPIC-relative offset to a GOT entry for a function descriptor. */
HOWTO (R_SH_GOTFUNCDESC, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOTFUNCDESC", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* FDPIC-relative offset to a GOT entry for a function descriptor,
for movi20. */
HOWTO (R_SH_GOTFUNCDESC20, /* 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_SH_GOTFUNCDESC20", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x00f0ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* FDPIC-relative offset to a function descriptor. */
HOWTO (R_SH_GOTOFFFUNCDESC, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_GOTOFFFUNCDESC", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* FDPIC-relative offset to a function descriptor, for movi20. */
HOWTO (R_SH_GOTOFFFUNCDESC20, /* 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_SH_GOTOFFFUNCDESC20", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x00f0ffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* Address of an official function descriptor. */
HOWTO (R_SH_FUNCDESC, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
32, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_FUNCDESC", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
/* Function descriptor to be filled in by the dynamic linker. */
HOWTO (R_SH_FUNCDESC_VALUE, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_FUNCDESC_VALUE", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0xffffffff, /* dst_mask */
FALSE), /* pcrel_offset */
#ifdef INCLUDE_SHMEDIA
EMPTY_HOWTO (209),
EMPTY_HOWTO (210),
EMPTY_HOWTO (211),
EMPTY_HOWTO (212),
EMPTY_HOWTO (213),
EMPTY_HOWTO (214),
EMPTY_HOWTO (215),
EMPTY_HOWTO (216),
EMPTY_HOWTO (217),
EMPTY_HOWTO (218),
EMPTY_HOWTO (219),
EMPTY_HOWTO (220),
EMPTY_HOWTO (221),
EMPTY_HOWTO (222),
EMPTY_HOWTO (223),
EMPTY_HOWTO (224),
EMPTY_HOWTO (225),
EMPTY_HOWTO (226),
EMPTY_HOWTO (227),
EMPTY_HOWTO (228),
EMPTY_HOWTO (229),
EMPTY_HOWTO (230),
EMPTY_HOWTO (231),
EMPTY_HOWTO (232),
EMPTY_HOWTO (233),
EMPTY_HOWTO (234),
EMPTY_HOWTO (235),
EMPTY_HOWTO (236),
EMPTY_HOWTO (237),
EMPTY_HOWTO (238),
EMPTY_HOWTO (239),
EMPTY_HOWTO (240),
EMPTY_HOWTO (241),
/* Relocations for SHmedia code. None of these are partial_inplace or
use the field being relocated (except R_SH_PT_16). */
/* The assembler will generate this reloc before a block of SHmedia
instructions. A section should be processed as assuming it contains
data, unless this reloc is seen. Note that a block of SHcompact
instructions are instead preceded by R_SH_CODE.
This is currently not implemented, but should be used for SHmedia
linker relaxation. */
HOWTO (R_SH_SHMEDIA_CODE, /* type */
0, /* rightshift */
1, /* size (0 = byte, 1 = short, 2 = long) */
0, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
sh_elf_ignore_reloc, /* special_function */
"R_SH_SHMEDIA_CODE", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0, /* dst_mask */
FALSE), /* pcrel_offset */
/* The assembler will generate this reloc at a PTA or PTB instruction,
and the linker checks the right type of target, or changes a PTA to a
PTB, if the original insn was PT. */
HOWTO (R_SH_PT_16, /* type */
2, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
18, /* bitsize */
TRUE, /* pc_relative */
10, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_PT_16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
TRUE), /* pcrel_offset */
/* Used in unexpanded MOVI. */
HOWTO (R_SH_IMMS16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_signed, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_IMMS16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in SHORI. */
HOWTO (R_SH_IMMU16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
16, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_unsigned, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_IMMU16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI (x & 65536). */
HOWTO (R_SH_IMM_LOW16, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_IMM_LOW16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x - $) & 65536). */
HOWTO (R_SH_IMM_LOW16_PCREL, /* type */
0, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
TRUE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_IMM_LOW16_PCREL", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
TRUE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 16) & 65536). */
HOWTO (R_SH_IMM_MEDLOW16, /* type */
16, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_IMM_MEDLOW16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI (((x - $) >> 16) & 65536). */
HOWTO (R_SH_IMM_MEDLOW16_PCREL, /* type */
16, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
TRUE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_IMM_MEDLOW16_PCREL", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
TRUE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 32) & 65536). */
HOWTO (R_SH_IMM_MEDHI16, /* type */
32, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_IMM_MEDHI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI (((x - $) >> 32) & 65536). */
HOWTO (R_SH_IMM_MEDHI16_PCREL, /* type */
32, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
TRUE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_IMM_MEDHI16_PCREL", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
TRUE), /* pcrel_offset */
/* Used in MOVI and SHORI ((x >> 48) & 65536). */
HOWTO (R_SH_IMM_HI16, /* type */
48, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_IMM_HI16", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
FALSE), /* pcrel_offset */
/* Used in MOVI and SHORI (((x - $) >> 48) & 65536). */
HOWTO (R_SH_IMM_HI16_PCREL, /* type */
48, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
TRUE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_IMM_HI16_PCREL", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
0x3fffc00, /* dst_mask */
TRUE), /* pcrel_offset */
/* For the .uaquad pseudo. */
HOWTO (R_SH_64, /* type */
0, /* rightshift */
4, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
FALSE, /* pc_relative */
0, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_64", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
((bfd_vma) 0) - 1, /* dst_mask */
FALSE), /* pcrel_offset */
/* For the .uaquad pseudo, (x - $). */
HOWTO (R_SH_64_PCREL, /* type */
48, /* rightshift */
2, /* size (0 = byte, 1 = short, 2 = long) */
64, /* bitsize */
TRUE, /* pc_relative */
10, /* bitpos */
complain_overflow_dont, /* complain_on_overflow */
bfd_elf_generic_reloc, /* special_function */
"R_SH_64_PCREL", /* name */
FALSE, /* partial_inplace */
0, /* src_mask */
((bfd_vma) 0) - 1, /* dst_mask */
TRUE), /* pcrel_offset */
#endif
#undef SH_PARTIAL32
#undef SH_SRC_MASK32
#undef SH_ELF_RELOC