Back to index

cell-binutils  2.17cvs20070401
elf32-d30v.c
Go to the documentation of this file.
00001 /* D30V-specific support for 32-bit ELF
00002    Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007
00003    Free Software Foundation, Inc.
00004    Contributed by Martin Hunt (hunt@cygnus.com).
00005 
00006    This file is part of BFD, the Binary File Descriptor library.
00007 
00008    This program is free software; you can redistribute it and/or modify
00009    it under the terms of the GNU General Public License as published by
00010    the Free Software Foundation; either version 2 of the License, or
00011    (at your option) any later version.
00012 
00013    This program is distributed in the hope that it will be useful,
00014    but WITHOUT ANY WARRANTY; without even the implied warranty of
00015    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016    GNU General Public License for more details.
00017 
00018    You should have received a copy of the GNU General Public License
00019    along with this program; if not, write to the Free Software
00020    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
00021    MA 02110-1301, USA.  */
00022 
00023 #include "bfd.h"
00024 #include "sysdep.h"
00025 #include "libbfd.h"
00026 #include "elf-bfd.h"
00027 #include "elf/d30v.h"
00028 
00029 #define MAX32 ((bfd_signed_vma) 0x7fffffff)
00030 #define MIN32 (- MAX32 - 1)
00031 
00032 static bfd_reloc_status_type
00033 bfd_elf_d30v_reloc (bfd *abfd,
00034                   arelent *reloc_entry,
00035                   asymbol *symbol,
00036                   void * data,
00037                   asection *input_section,
00038                   bfd *output_bfd,
00039                   char **error_message)
00040 {
00041   bfd_signed_vma relocation;
00042   bfd_vma in1, in2, num;
00043   bfd_vma tmp_addr = 0;
00044   bfd_reloc_status_type r;
00045   asection *reloc_target_output_section;
00046   bfd_size_type addr = reloc_entry->address;
00047   bfd_reloc_status_type flag = bfd_reloc_ok;
00048   bfd_vma output_base = 0;
00049   reloc_howto_type *howto = reloc_entry->howto;
00050   int make_absolute = 0;
00051 
00052   if (output_bfd != NULL)
00053     {
00054       /* Partial linking -- do nothing.  */
00055       reloc_entry->address += input_section->output_offset;
00056       return bfd_reloc_ok;
00057     }
00058 
00059   r = bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
00060                              input_section, output_bfd, error_message);
00061   if (r != bfd_reloc_continue)
00062     return r;
00063 
00064   /* A hacked-up version of bfd_perform_reloc() follows.  */
00065  if (bfd_is_und_section (symbol->section)
00066       && (symbol->flags & BSF_WEAK) == 0
00067       && output_bfd == NULL)
00068     flag = bfd_reloc_undefined;
00069 
00070   /* Is the address of the relocation really within the section?  */
00071   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
00072     return bfd_reloc_outofrange;
00073 
00074   /* Work out which section the relocation is targeted at and the
00075      initial relocation command value.  */
00076 
00077   /* Get symbol value.  (Common symbols are special.)  */
00078   if (bfd_is_com_section (symbol->section))
00079     relocation = 0;
00080   else
00081     relocation = symbol->value;
00082 
00083   reloc_target_output_section = symbol->section->output_section;
00084 
00085   /* Convert input-section-relative symbol value to absolute.  */
00086   output_base = reloc_target_output_section->vma;
00087   relocation += output_base + symbol->section->output_offset;
00088 
00089   /* Add in supplied addend.  */
00090   relocation += reloc_entry->addend;
00091 
00092   /* Here the variable relocation holds the final address of the
00093      symbol we are relocating against, plus any addend.  */
00094   if (howto->pc_relative)
00095     {
00096       tmp_addr = input_section->output_section->vma
00097        + input_section->output_offset
00098        + reloc_entry->address;
00099       relocation -= tmp_addr;
00100     }
00101 
00102   in1 = bfd_get_32 (abfd, (bfd_byte *) data + addr);
00103   in2 = bfd_get_32 (abfd, (bfd_byte *) data + addr + 4);
00104 
00105   /* Extract the addend.  */
00106   num = ((in2 & 0x3FFFF)
00107         | ((in2 & 0xFF00000) >> 2)
00108         | ((in1 & 0x3F) << 26));
00109   in1 &= 0xFFFFFFC0;
00110   in2 = 0x80000000;
00111 
00112   relocation += num;
00113 
00114   if (howto->pc_relative && howto->bitsize == 32)
00115     {
00116       /* The D30V has a PC that doesn't wrap and PC-relative jumps are
00117         signed, so a PC-relative jump can't be more than +/- 2^31 bytes.
00118         If one exceeds this, change it to an absolute jump.  */
00119       if (relocation > MAX32 || relocation < MIN32)
00120        {
00121          relocation = (relocation + tmp_addr) & 0xffffffff;
00122          make_absolute = 1;
00123        }
00124     }
00125 
00126   in1 |= (relocation >> 26) & 0x3F;              /* Top 6 bits.  */
00127   in2 |= ((relocation & 0x03FC0000) << 2);       /* Next 8 bits.  */
00128   in2 |= relocation & 0x0003FFFF;         /* Bottom 18 bits.  */
00129 
00130   /* Change a PC-relative instruction to its
00131      absolute equivalent with this simple hack.  */
00132   if (make_absolute)
00133     in1 |= 0x00100000;
00134 
00135   bfd_put_32 (abfd, in1, (bfd_byte *) data + addr);
00136   bfd_put_32 (abfd, in2, (bfd_byte *) data + addr + 4);
00137 
00138   return flag;
00139 }
00140 
00141 static bfd_reloc_status_type
00142 bfd_elf_d30v_reloc_21 (bfd *abfd,
00143                      arelent *reloc_entry,
00144                      asymbol *symbol,
00145                      void * data,
00146                      asection *input_section,
00147                      bfd *output_bfd,
00148                      char **error_message)
00149 {
00150   bfd_vma relocation;
00151   bfd_vma in1, num;
00152   bfd_reloc_status_type r;
00153   asection *reloc_target_output_section;
00154   bfd_size_type addr = reloc_entry->address;
00155   bfd_reloc_status_type flag = bfd_reloc_ok;
00156   bfd_vma output_base = 0;
00157   reloc_howto_type *howto = reloc_entry->howto;
00158   int mask, max;
00159 
00160   if (output_bfd != NULL)
00161     {
00162       /* Partial linking -- do nothing.  */
00163       reloc_entry->address += input_section->output_offset;
00164       return bfd_reloc_ok;
00165     }
00166 
00167   r = bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
00168                              input_section, output_bfd, error_message);
00169   if (r != bfd_reloc_continue)
00170     return r;
00171 
00172   /* A hacked-up version of bfd_perform_reloc() follows.  */
00173   if (bfd_is_und_section (symbol->section)
00174       && (symbol->flags & BSF_WEAK) == 0
00175       && output_bfd == NULL)
00176     flag = bfd_reloc_undefined;
00177 
00178   /* Is the address of the relocation really within the section?  */
00179   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
00180     return bfd_reloc_outofrange;
00181 
00182   /* Work out which section the relocation is targeted at and the
00183      initial relocation command value.  */
00184 
00185   /* Get symbol value.  (Common symbols are special.)  */
00186   if (bfd_is_com_section (symbol->section))
00187     relocation = 0;
00188   else
00189     relocation = symbol->value;
00190 
00191   reloc_target_output_section = symbol->section->output_section;
00192 
00193   /* Convert input-section-relative symbol value to absolute.  */
00194   output_base = reloc_target_output_section->vma;
00195   relocation += output_base + symbol->section->output_offset;
00196 
00197   /* Add in supplied addend.  */
00198   relocation += reloc_entry->addend;
00199 
00200   /* Here the variable relocation holds the final address of the
00201      symbol we are relocating against, plus any addend.  */
00202 
00203   if (howto->pc_relative)
00204     {
00205       relocation -= (input_section->output_section->vma
00206                    + input_section->output_offset);
00207       if (howto->pcrel_offset)
00208        relocation -= reloc_entry->address;
00209     }
00210 
00211   in1 = bfd_get_32 (abfd, (bfd_byte *) data + addr);
00212 
00213   mask =  (1 << howto->bitsize) - 1;
00214   if (howto->bitsize == 6)
00215     mask <<= 12;
00216   max = (1 << (howto->bitsize + 2)) - 1;
00217 
00218   /* Extract the addend.  */
00219   num = in1 & mask;  /* 18 bits.  */
00220   if (howto->bitsize == 6)
00221     num >>= 12;
00222   num <<= 3; /* shift left 3.  */
00223   in1 &= ~mask;  /* Mask out addend.  */
00224 
00225   relocation += num;
00226   if (howto->type == R_D30V_21_PCREL_R
00227       || howto->type == R_D30V_15_PCREL_R
00228       || howto->type == R_D30V_9_PCREL_R)
00229     relocation += 4;
00230 
00231   if ((int) relocation < 0)
00232     {
00233       if (~ (int) relocation > max)
00234        flag = bfd_reloc_overflow;
00235     }
00236   else
00237     {
00238       if ((int) relocation > max)
00239        flag = bfd_reloc_overflow;
00240     }
00241 
00242   relocation >>= 3;
00243   if (howto->bitsize == 6)
00244     in1 |= ((relocation & (mask >> 12)) << 12);
00245   else
00246     in1 |= relocation & mask;
00247 
00248   bfd_put_32 (abfd, in1, (bfd_byte *) data + addr);
00249 
00250   return flag;
00251 }
00252 
00253 static reloc_howto_type elf_d30v_howto_table[] =
00254 {
00255   /* This reloc does nothing.  */
00256   HOWTO (R_D30V_NONE,              /* Type.  */
00257         0,                  /* Rightshift.  */
00258         2,                  /* Size (0 = byte, 1 = short, 2 = long).  */
00259         32,                 /* Bitsize.  */
00260         FALSE,                     /* PC_relative.  */
00261         0,                  /* Bitpos.  */
00262         complain_overflow_bitfield, /* Complain_on_overflow.  */
00263         bfd_elf_generic_reloc,     /* Special_function.  */
00264         "R_D30V_NONE",             /* Name.  */
00265         FALSE,                     /* Partial_inplace.  */
00266         0,                  /* Src_mask.  */
00267         0,                  /* Dst_mask.  */
00268         FALSE),             /* PCrel_offset.  */
00269 
00270   /* A 6 bit absolute relocation.  */
00271   HOWTO (R_D30V_6,          /* Type.  */
00272         0,                  /* Rightshift.  */
00273         2,                  /* Size (0 = byte, 1 = short, 2 = long).  */
00274         6,                  /* Bitsize.  */
00275         FALSE,                     /* PC_relative.  */
00276         0,                  /* Bitpos.  */
00277         complain_overflow_bitfield, /* Complain_on_overflow.  */
00278         bfd_elf_generic_reloc,     /* Special_function.  */
00279         "R_D30V_6",         /* Name.  */
00280         FALSE,                     /* Partial_inplace.  */
00281         0x3f,               /* Src_mask.  */
00282         0x3f,               /* Dst_mask.  */
00283         FALSE),             /* PCrel_offset.  */
00284 
00285   /* A relative 9 bit relocation, right shifted by 3.  */
00286   HOWTO (R_D30V_9_PCREL,    /* Type.  */
00287         3,                  /* Rightshift.  */
00288         2,                  /* Size (0 = byte, 1 = short, 2 = long).  */
00289         6,                  /* Bitsize.  */
00290         TRUE,               /* PC_relative.  */
00291         0,                  /* Bitpos.  */
00292         complain_overflow_signed, /* Complain_on_overflow.  */
00293         bfd_elf_d30v_reloc_21,     /* Special_function.  */
00294         "R_D30V_9_PCREL",   /* Name.  */
00295         FALSE,                     /* Partial_inplace.  */
00296         0x3f,               /* Src_mask.  */
00297         0x3f,               /* Dst_mask.  */
00298         TRUE),                     /* PCrel_offset.  */
00299 
00300   /* A relative 9 bit relocation, right shifted by 3.  */
00301   HOWTO (R_D30V_9_PCREL_R,  /* Type.  */
00302         3,                  /* Rightshift.  */
00303         2,                  /* Size (0 = byte, 1 = short, 2 = long).  */
00304         6,                  /* Bitsize.  */
00305         TRUE,               /* PC_relative.  */
00306         0,                  /* Bitpos.  */
00307         complain_overflow_signed, /* Complain_on_overflow.  */
00308         bfd_elf_d30v_reloc_21,     /* Special_function.  */
00309         "R_D30V_9_PCREL_R", /* Name.  */
00310         FALSE,                     /* Partial_inplace.  */
00311         0x3f,               /* Src_mask.  */
00312         0x3f,               /* Dst_mask.  */
00313         TRUE),                     /* PCrel_offset.  */
00314 
00315   /* An absolute 15 bit relocation, right shifted by 3.  */
00316   HOWTO (R_D30V_15,         /* Type.  */
00317         3,                  /* Rightshift.  */
00318         2,                  /* Size (0 = byte, 1 = short, 2 = long).  */
00319         12,                 /* Bitsize.  */
00320         FALSE,                     /* PC_relative.  */
00321         0,                  /* Bitpos.  */
00322         complain_overflow_signed, /* Complain_on_overflow.  */
00323         bfd_elf_generic_reloc,     /* Special_function.  */
00324         "R_D30V_15",        /* Name.  */
00325         FALSE,                     /* Partial_inplace.  */
00326         0xfff,                     /* Src_mask.  */
00327         0xfff,                     /* Dst_mask.  */
00328         FALSE),             /* PCrel_offset.  */
00329 
00330   /* A relative 15 bit relocation, right shifted by 3.  */
00331   HOWTO (R_D30V_15_PCREL,   /* Type.  */
00332         3,                  /* Rightshift.  */
00333         2,                  /* Size (0 = byte, 1 = short, 2 = long).  */
00334         12,                 /* Bitsize.  */
00335         TRUE,               /* PC_relative.  */
00336         0,                  /* Bitpos.  */
00337         complain_overflow_signed, /* Complain_on_overflow.  */
00338         bfd_elf_d30v_reloc_21,     /* Special_function.  */
00339         "R_D30V_15_PCREL",  /* Name.  */
00340         FALSE,                     /* Partial_inplace.  */
00341         0xfff,                     /* Src_mask.  */
00342         0xfff,                     /* Dst_mask.  */
00343         TRUE),                     /* PCrel_offset.  */
00344 
00345   /* A relative 15 bit relocation, right shifted by 3.  */
00346   HOWTO (R_D30V_15_PCREL_R, /* Type.  */
00347         3,                  /* Rightshift.  */
00348         2,                  /* Size (0 = byte, 1 = short, 2 = long).  */
00349         12,                 /* Bitsize.  */
00350         TRUE,               /* PC_relative.  */
00351         0,                  /* Bitpos.  */
00352         complain_overflow_signed, /* Complain_on_overflow.  */
00353         bfd_elf_d30v_reloc_21,     /* Special_function.  */
00354         "R_D30V_15_PCREL_R",       /* Name.  */
00355         FALSE,                     /* Partial_inplace.  */
00356         0xfff,                     /* Src_mask.  */
00357         0xfff,                     /* Dst_mask.  */
00358         TRUE),                     /* PCrel_offset.  */
00359 
00360   /* An absolute 21 bit relocation, right shifted by 3.  */
00361   HOWTO (R_D30V_21,         /* Type.  */
00362         3,                  /* Rightshift.  */
00363         2,                  /* Size (0 = byte, 1 = short, 2 = long).  */
00364         18,                 /* Bitsize.  */
00365         FALSE,                     /* PC_relative.  */
00366         0,                  /* Bitpos.  */
00367         complain_overflow_signed, /* Complain_on_overflow.  */
00368         bfd_elf_generic_reloc,     /* Special_function.  */
00369         "R_D30V_21",        /* Name.  */
00370         FALSE,                     /* Partial_inplace.  */
00371         0x3ffff,            /* Src_mask.  */
00372         0x3ffff,            /* Dst_mask.  */
00373         FALSE),             /* PCrel_offset.  */
00374 
00375   /* A relative 21 bit relocation, right shifted by 3.  */
00376   HOWTO (R_D30V_21_PCREL,   /* Type.  */
00377         3,                  /* Rightshift.  */
00378         2,                  /* Size (0 = byte, 1 = short, 2 = long).  */
00379         18,                 /* Bitsize.  */
00380         TRUE,               /* PC_relative.  */
00381         0,                  /* Bitpos.  */
00382         complain_overflow_signed, /* Complain_on_overflow.  */
00383         bfd_elf_d30v_reloc_21,     /* Special_function.  */
00384         "R_D30V_21_PCREL",  /* Name.  */
00385         FALSE,                     /* Partial_inplace.  */
00386         0x3ffff,            /* Src_mask.  */
00387         0x3ffff,            /* Dst_mask.  */
00388         TRUE),                     /* PCrel_offset.  */
00389 
00390   /* A relative 21 bit relocation, right shifted by 3, in the Right container.  */
00391   HOWTO (R_D30V_21_PCREL_R, /* Type.  */
00392         3,                  /* Rightshift.  */
00393         2,                  /* Size (0 = byte, 1 = short, 2 = long).  */
00394         18,                 /* Bitsize.  */
00395         TRUE,               /* PC_relative.  */
00396         0,                  /* Bitpos.  */
00397         complain_overflow_signed, /* Complain_on_overflow.  */
00398         bfd_elf_d30v_reloc_21,     /* Special_function.  */
00399         "R_D30V_21_PCREL_R",       /* Name.  */
00400         FALSE,                     /* Partial_inplace.  */
00401         0x3ffff,            /* Src_mask.  */
00402         0x3ffff,            /* Dst_mask.  */
00403         TRUE),                     /* PCrel_offset.  */
00404 
00405   /* A D30V 32 bit absolute relocation.  */
00406   HOWTO (R_D30V_32,         /* Type.  */
00407         0,                  /* Rightshift.  */
00408         4,                  /* Size (0 = byte, 1 = short, 2 = long).  */
00409         32,                 /* Bitsize.  */
00410         FALSE,                     /* PC_relative.  */
00411         0,                  /* Bitpos.  */
00412         complain_overflow_bitfield, /* Complain_on_overflow.  */
00413         bfd_elf_d30v_reloc, /* Special_function.  */
00414         "R_D30V_32",        /* Name.  */
00415         FALSE,                     /* Partial_inplace.  */
00416         0xffffffff,         /* Src_mask.  */
00417         0xffffffff,         /* Dst_mask.  */
00418         FALSE),             /* PCrel_offset.  */
00419 
00420   /* A relative 32 bit relocation.  */
00421   HOWTO (R_D30V_32_PCREL,   /* Type.  */
00422         0,                  /* Rightshift.  */
00423         4,                  /* Size (0 = byte, 1 = short, 2 = long).  */
00424         32,                 /* Bitsize.  */
00425         TRUE,               /* PC_relative.  */
00426         0,                  /* Bitpos.  */
00427         complain_overflow_signed, /* Complain_on_overflow.  */
00428         bfd_elf_d30v_reloc, /* Special_function.  */
00429         "R_D30V_32_PCREL",  /* Name.  */
00430         FALSE,                     /* Partial_inplace.  */
00431         0xffffffff,         /* Src_mask.  */
00432         0xffffffff,         /* Dst_mask.  */
00433         TRUE),                     /* PCrel_offset.  */
00434 
00435   /* A regular 32 bit absolute relocation.  */
00436   HOWTO (R_D30V_32_NORMAL,  /* Type.  */
00437         0,                  /* Rightshift.  */
00438         2,                  /* Size (0 = byte, 1 = short, 2 = long).  */
00439         32,                 /* Bitsize.  */
00440         FALSE,                     /* PC_relative.  */
00441         0,                  /* Bitpos.  */
00442         complain_overflow_bitfield, /* Complain_on_overflow.  */
00443         bfd_elf_generic_reloc,     /* Special_function.  */
00444         "R_D30V_32_NORMAL", /* Name.  */
00445         FALSE,                     /* Partial_inplace.  */
00446         0xffffffff,         /* Src_mask.  */
00447         0xffffffff,         /* Dst_mask.  */
00448         FALSE),             /* PCrel_offset.  */
00449 
00450 };
00451 
00452 /* Map BFD reloc types to D30V ELF reloc types.  */
00453 
00454 struct d30v_reloc_map
00455 {
00456   bfd_reloc_code_real_type bfd_reloc_val;
00457   unsigned char elf_reloc_val;
00458 };
00459 
00460 static const struct d30v_reloc_map d30v_reloc_map[] =
00461 {
00462   { BFD_RELOC_NONE, R_D30V_NONE, },
00463   { BFD_RELOC_D30V_6, R_D30V_6 },
00464   { BFD_RELOC_D30V_9_PCREL, R_D30V_9_PCREL },
00465   { BFD_RELOC_D30V_9_PCREL_R, R_D30V_9_PCREL_R },
00466   { BFD_RELOC_D30V_15, R_D30V_15 },
00467   { BFD_RELOC_D30V_15_PCREL, R_D30V_15_PCREL },
00468   { BFD_RELOC_D30V_15_PCREL_R, R_D30V_15_PCREL_R },
00469   { BFD_RELOC_D30V_21, R_D30V_21 },
00470   { BFD_RELOC_D30V_21_PCREL, R_D30V_21_PCREL },
00471   { BFD_RELOC_D30V_21_PCREL_R, R_D30V_21_PCREL_R },
00472   { BFD_RELOC_D30V_32, R_D30V_32 },
00473   { BFD_RELOC_D30V_32_PCREL, R_D30V_32_PCREL },
00474   { BFD_RELOC_32, R_D30V_32_NORMAL },
00475 };
00476 
00477 static reloc_howto_type *
00478 bfd_elf32_bfd_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
00479                              bfd_reloc_code_real_type code)
00480 {
00481   unsigned int i;
00482 
00483   for (i = 0;
00484        i < sizeof (d30v_reloc_map) / sizeof (struct d30v_reloc_map);
00485        i++)
00486     {
00487       if (d30v_reloc_map[i].bfd_reloc_val == code)
00488        return &elf_d30v_howto_table[d30v_reloc_map[i].elf_reloc_val];
00489     }
00490 
00491   return NULL;
00492 }
00493 
00494 static reloc_howto_type *
00495 bfd_elf32_bfd_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
00496                              const char *r_name)
00497 {
00498   unsigned int i;
00499 
00500   for (i = 0;
00501        i < sizeof (elf_d30v_howto_table) / sizeof (elf_d30v_howto_table[0]);
00502        i++)
00503     if (elf_d30v_howto_table[i].name != NULL
00504        && strcasecmp (elf_d30v_howto_table[i].name, r_name) == 0)
00505       return &elf_d30v_howto_table[i];
00506 
00507   return NULL;
00508 }
00509 
00510 /* Set the howto pointer for an D30V ELF reloc (type REL).  */
00511 
00512 static void
00513 d30v_info_to_howto_rel (bfd *abfd ATTRIBUTE_UNUSED,
00514                      arelent *cache_ptr,
00515                      Elf_Internal_Rela *dst)
00516 {
00517   unsigned int r_type;
00518 
00519   r_type = ELF32_R_TYPE (dst->r_info);
00520   BFD_ASSERT (r_type < (unsigned int) R_D30V_max);
00521   cache_ptr->howto = &elf_d30v_howto_table[r_type];
00522 }
00523 
00524 /* Set the howto pointer for an D30V ELF reloc (type RELA).  */
00525 
00526 static void
00527 d30v_info_to_howto_rela (bfd *abfd ATTRIBUTE_UNUSED,
00528                       arelent *cache_ptr,
00529                       Elf_Internal_Rela *dst)
00530 {
00531   unsigned int r_type;
00532 
00533   r_type = ELF32_R_TYPE (dst->r_info);
00534   BFD_ASSERT (r_type < (unsigned int) R_D30V_max);
00535   cache_ptr->howto = &elf_d30v_howto_table[r_type];
00536 }
00537 
00538 #define ELF_ARCH            bfd_arch_d30v
00539 #define ELF_MACHINE_CODE    EM_D30V
00540 #define ELF_MACHINE_ALT1    EM_CYGNUS_D30V
00541 #define ELF_MAXPAGESIZE            0x1000
00542 
00543 #define TARGET_BIG_SYM          bfd_elf32_d30v_vec
00544 #define TARGET_BIG_NAME            "elf32-d30v"
00545 
00546 #define elf_info_to_howto   d30v_info_to_howto_rela
00547 #define elf_info_to_howto_rel      d30v_info_to_howto_rel
00548 #define elf_backend_object_p       0
00549 #define elf_backend_final_write_processing       0
00550 
00551 #include "elf32-target.h"