From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19377 invoked by alias); 24 Sep 2003 02:28:34 -0000 Mailing-List: contact binutils-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sources.redhat.com Received: (qmail 19349 invoked from network); 24 Sep 2003 02:28:26 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by sources.redhat.com with SMTP; 24 Sep 2003 02:28:26 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.11.6/8.11.6) with ESMTP id h8O2SO116128 for ; Tue, 23 Sep 2003 22:28:24 -0400 Received: from post-office.corp.redhat.com (post-office.corp.redhat.com [172.16.52.227]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h8O2SNc26384 for ; Tue, 23 Sep 2003 22:28:23 -0400 Received: from greed.delorie.com (dj.cipe.redhat.com [10.0.0.222]) by post-office.corp.redhat.com (8.11.6/8.11.6) with ESMTP id h8O2SMo14212 for ; Tue, 23 Sep 2003 22:28:22 -0400 Received: (from dj@localhost) by greed.delorie.com (8.11.6/8.11.6) id h8O2SKw20803; Tue, 23 Sep 2003 22:28:20 -0400 Date: Wed, 24 Sep 2003 02:28:00 -0000 Message-Id: <200309240228.h8O2SKw20803@greed.delorie.com> From: DJ Delorie To: binutils@sources.redhat.com In-reply-to: (message from Alexandre Oliva on 10 Sep 2003 04:56:34 -0300) Subject: Re: [patch] new sh relocs References: <200308152051.h7FKp5b14273@greed.delorie.com> <200308161338.h7GDcj618581@greed.delorie.com> <20030816135520.GL27145@bubble.sa.bigpond.net.au> <200309060007.h86077V14026@greed.delorie.com> X-SW-Source: 2003-09/txt/msg00410.txt.bz2 Sorry this took so long, but other projects took priority for a while. Here is the patch as committed. I left the VT* relocs in for now, because gas still supports them even though gcc doesn't, so removing them would be outside the scope of my patch. Index: bfd/ChangeLog =================================================================== RCS file: /cvs/src/src/bfd/ChangeLog,v retrieving revision 1.2265 diff -p -2 -r1.2265 bfd/ChangeLog *** bfd/ChangeLog 23 Sep 2003 20:23:54 -0000 1.2265 --- bfd/ChangeLog 24 Sep 2003 02:27:02 -0000 *************** *** 1,2 **** --- 1,13 ---- + 2003-09-23 DJ Delorie + + * elf32-sh.c (sh_elf_howto_table): R_SH_SWITCH8, + R_SH_GNU_VTINHERIT, R_SH_GNU_VTENTRY, + R_SH_LOOP_START,R_SH_LOOP_END moved to "reserved" spaces, + R_SH_DIR16, R_SH_DIR8, R_SH_DIR8UL, R_SH_DIR8UW, R_SH_DIR8U, + R_SH_DIR8SW, R_SH_DIR8S, R_SH_DIR4UL, R_SH_DIR4UW, R_SH_DIR4U, + R_SH_PSHA, R_SH_PSHL added. + (sh_reloc_map): Add R_SH_DIR16 and R_SH_DIR8. + (sh_elf_relocate_section): Support new relocs. + 2003-09-23 Bob Wilson Index: bfd/elf32-sh.c =================================================================== RCS file: /cvs/src/src/bfd/elf32-sh.c,v retrieving revision 1.91 diff -p -2 -r1.91 bfd/elf32-sh.c *** bfd/elf32-sh.c 20 Aug 2003 08:37:17 -0000 1.91 --- bfd/elf32-sh.c 24 Sep 2003 02:27:03 -0000 *************** static reloc_howto_type sh_elf_howto_tab *** 277,282 **** TRUE), /* pcrel_offset */ ! EMPTY_HOWTO (10), ! EMPTY_HOWTO (11), EMPTY_HOWTO (12), EMPTY_HOWTO (13), --- 277,310 ---- 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), *************** static reloc_howto_type sh_elf_howto_tab *** 289,295 **** EMPTY_HOWTO (20), EMPTY_HOWTO (21), - EMPTY_HOWTO (22), - EMPTY_HOWTO (23), - EMPTY_HOWTO (24), /* The remaining relocs are a GNU extension used for relaxing. The --- 317,320 ---- *************** static reloc_howto_type sh_elf_howto_tab *** 298,301 **** --- 323,373 ---- 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 *************** static reloc_howto_type sh_elf_howto_tab *** 435,442 **** TRUE), /* 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) */ --- 507,526 ---- 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) */ *************** static reloc_howto_type sh_elf_howto_tab *** 444,522 **** 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 */ ! /* 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 */ ! /* 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 (38), ! EMPTY_HOWTO (39), ! EMPTY_HOWTO (40), ! EMPTY_HOWTO (41), ! EMPTY_HOWTO (42), ! EMPTY_HOWTO (43), ! EMPTY_HOWTO (44), #ifdef INCLUDE_SHMEDIA --- 528,678 ---- 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 *************** static reloc_howto_type sh_elf_howto_tab *** 637,641 **** EMPTY_HOWTO (52), ! EMPTY_HOWTO (53), EMPTY_HOWTO (54), EMPTY_HOWTO (55), --- 793,811 ---- 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), *************** static const struct elf_reloc_map sh_rel *** 1862,1865 **** --- 2032,2037 ---- { BFD_RELOC_NONE, R_SH_NONE }, { BFD_RELOC_32, R_SH_DIR32 }, + { BFD_RELOC_16, R_SH_DIR16 }, + { BFD_RELOC_8, R_SH_DIR8 }, { BFD_RELOC_CTOR, R_SH_DIR32 }, { BFD_RELOC_32_PCREL, R_SH_REL32 }, *************** sh_elf_relocate_section (bfd *output_bfd *** 4547,4552 **** /* Many of the relocs are only used for relaxing, and are handled entirely by the relaxation code. */ ! if (r_type > (int) R_SH_LAST_INVALID_RELOC ! && r_type < (int) R_SH_LOOP_START) continue; if (r_type == (int) R_SH_NONE) --- 4719,4724 ---- /* Many of the relocs are only used for relaxing, and are handled entirely by the relaxation code. */ ! if (r_type >= (int) R_SH_GNU_VTINHERIT ! && r_type <= (int) R_SH_LABEL) continue; if (r_type == (int) R_SH_NONE) *************** sh_elf_relocate_section (bfd *output_bfd *** 4843,4846 **** --- 5015,5082 ---- bfd_set_error (bfd_error_bad_value); return FALSE; + + case R_SH_DIR16: + case R_SH_DIR8: + case R_SH_DIR8U: + case R_SH_DIR8S: + case R_SH_DIR4U: + goto final_link_relocate; + + case R_SH_DIR8UL: + case R_SH_DIR4UL: + if (relocation & 3) + { + ((*_bfd_error_handler) + (_("%s: 0x%lx: fatal: unaligned %s relocation 0x%lx"), + bfd_archive_filename (input_section->owner), + (unsigned long) rel->r_offset, howto->name, + (unsigned long)relocation)); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + goto final_link_relocate; + + case R_SH_DIR8UW: + case R_SH_DIR8SW: + case R_SH_DIR4UW: + if (relocation & 1) + { + ((*_bfd_error_handler) + (_("%s: 0x%lx: fatal: unaligned %s relocation 0x%lx"), + bfd_archive_filename (input_section->owner), + (unsigned long) rel->r_offset, howto->name, + (unsigned long)relocation)); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + goto final_link_relocate; + + case R_SH_PSHA: + if ((signed int)relocation < -32 + || (signed int)relocation > 32) + { + ((*_bfd_error_handler) + (_("%s: 0x%lx: fatal: R_SH_PSHA relocation %d not in range -32..32"), + bfd_archive_filename (input_section->owner), + (unsigned long) rel->r_offset, + (unsigned long)relocation)); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + goto final_link_relocate; + + case R_SH_PSHL: + if ((signed int)relocation < -16 + || (signed int)relocation > 16) + { + ((*_bfd_error_handler) + (_("%s: 0x%lx: fatal: R_SH_PSHL relocation %d not in range -32..32"), + bfd_archive_filename (input_section->owner), + (unsigned long) rel->r_offset, + (unsigned long)relocation)); + bfd_set_error (bfd_error_bad_value); + return FALSE; + } + goto final_link_relocate; case R_SH_DIR32: Index: include/elf/ChangeLog =================================================================== RCS file: /cvs/src/src/include/elf/ChangeLog,v retrieving revision 1.186 diff -p -2 -r1.186 include/elf/ChangeLog *** include/elf/ChangeLog 11 Sep 2003 11:20:41 -0000 1.186 --- include/elf/ChangeLog 24 Sep 2003 02:27:03 -0000 *************** *** 1,2 **** --- 1,10 ---- + 2003-09-23 DJ Delorie + + * sh.h (R_SH_SWITCH8, R_SH_GNU_VTINHERIT, R_SH_GNU_VTENTRY, + R_SH_LOOP_START,R_SH_LOOP_END): Move to "reserved" spaces. + (R_SH_DIR16, R_SH_DIR8, R_SH_DIR8UL, R_SH_DIR8UW, R_SH_DIR8U, + R_SH_DIR8SW, R_SH_DIR8S, R_SH_DIR4UL, R_SH_DIR4UW, R_SH_DIR4U, + R_SH_PSHA, R_SH_PSHL): New. + 2003-09-11 James Cownie Index: include/elf/sh.h =================================================================== RCS file: /cvs/src/src/include/elf/sh.h,v retrieving revision 1.14 diff -p -2 -r1.14 include/elf/sh.h *** include/elf/sh.h 3 Mar 2003 21:03:58 -0000 1.14 --- include/elf/sh.h 24 Sep 2003 02:27:03 -0000 *************** *** 84,89 **** /* Relocations. */ ! /* Relocations 25ff are GNU extensions. ! 25..33 are used for relaxation and use the same constants as COFF uses. */ START_RELOC_NUMBERS (elf_sh_reloc_type) RELOC_NUMBER (R_SH_NONE, 0) --- 84,89 ---- /* Relocations. */ ! /* Relocations 10-32 and 128-255 are GNU extensions. ! 25..32 and 10 are used for relaxation. */ START_RELOC_NUMBERS (elf_sh_reloc_type) RELOC_NUMBER (R_SH_NONE, 0) *************** START_RELOC_NUMBERS (elf_sh_reloc_type) *** 97,102 **** RELOC_NUMBER (R_SH_DIR8W, 8) RELOC_NUMBER (R_SH_DIR8L, 9) ! FAKE_RELOC (R_SH_FIRST_INVALID_RELOC, 10) ! FAKE_RELOC (R_SH_LAST_INVALID_RELOC, 24) RELOC_NUMBER (R_SH_SWITCH16, 25) RELOC_NUMBER (R_SH_SWITCH32, 26) --- 97,110 ---- RELOC_NUMBER (R_SH_DIR8W, 8) RELOC_NUMBER (R_SH_DIR8L, 9) ! ! RELOC_NUMBER (R_SH_LOOP_START, 10) ! RELOC_NUMBER (R_SH_LOOP_END, 11) ! ! FAKE_RELOC (R_SH_FIRST_INVALID_RELOC, 12) ! FAKE_RELOC (R_SH_LAST_INVALID_RELOC, 21) ! ! RELOC_NUMBER (R_SH_GNU_VTINHERIT, 22) ! RELOC_NUMBER (R_SH_GNU_VTENTRY, 23) ! RELOC_NUMBER (R_SH_SWITCH8, 24) RELOC_NUMBER (R_SH_SWITCH16, 25) RELOC_NUMBER (R_SH_SWITCH32, 26) *************** START_RELOC_NUMBERS (elf_sh_reloc_type) *** 107,117 **** RELOC_NUMBER (R_SH_DATA, 31) RELOC_NUMBER (R_SH_LABEL, 32) ! RELOC_NUMBER (R_SH_SWITCH8, 33) ! RELOC_NUMBER (R_SH_GNU_VTINHERIT, 34) ! RELOC_NUMBER (R_SH_GNU_VTENTRY, 35) ! RELOC_NUMBER (R_SH_LOOP_START, 36) ! RELOC_NUMBER (R_SH_LOOP_END, 37) ! FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_2, 38) ! FAKE_RELOC (R_SH_LAST_INVALID_RELOC_2, 44) RELOC_NUMBER (R_SH_DIR5U, 45) RELOC_NUMBER (R_SH_DIR6U, 46) --- 115,131 ---- RELOC_NUMBER (R_SH_DATA, 31) RELOC_NUMBER (R_SH_LABEL, 32) ! ! RELOC_NUMBER (R_SH_DIR16, 33) ! RELOC_NUMBER (R_SH_DIR8, 34) ! RELOC_NUMBER (R_SH_DIR8UL, 35) ! RELOC_NUMBER (R_SH_DIR8UW, 36) ! RELOC_NUMBER (R_SH_DIR8U, 37) ! RELOC_NUMBER (R_SH_DIR8SW, 38) ! RELOC_NUMBER (R_SH_DIR8S, 39) ! RELOC_NUMBER (R_SH_DIR4UL, 40) ! RELOC_NUMBER (R_SH_DIR4UW, 41) ! RELOC_NUMBER (R_SH_DIR4U, 42) ! RELOC_NUMBER (R_SH_PSHA, 43) ! RELOC_NUMBER (R_SH_PSHL, 44) RELOC_NUMBER (R_SH_DIR5U, 45) RELOC_NUMBER (R_SH_DIR6U, 46) *************** START_RELOC_NUMBERS (elf_sh_reloc_type) *** 121,125 **** RELOC_NUMBER (R_SH_DIR10SL, 50) RELOC_NUMBER (R_SH_DIR10SQ, 51) ! FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_3, 52) FAKE_RELOC (R_SH_LAST_INVALID_RELOC_3, 143) RELOC_NUMBER (R_SH_TLS_GD_32, 144) --- 135,142 ---- RELOC_NUMBER (R_SH_DIR10SL, 50) RELOC_NUMBER (R_SH_DIR10SQ, 51) ! FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_2, 52) ! FAKE_RELOC (R_SH_LAST_INVALID_RELOC_2, 52) ! RELOC_NUMBER (R_SH_DIR16S, 53) ! FAKE_RELOC (R_SH_FIRST_INVALID_RELOC_3, 54) FAKE_RELOC (R_SH_LAST_INVALID_RELOC_3, 143) RELOC_NUMBER (R_SH_TLS_GD_32, 144)