OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [bfd/] [elf32-ppc.c] - Diff between revs 148 and 161

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 148 Rev 161
Line 34... Line 34...
#include "libbfd.h"
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf-bfd.h"
#include "elf/ppc.h"
#include "elf/ppc.h"
#include "elf32-ppc.h"
#include "elf32-ppc.h"
#include "elf-vxworks.h"
#include "elf-vxworks.h"
 
#include "dwarf2.h"
 
 
/* RELA relocations are used here.  */
/* RELA relocations are used here.  */
 
 
static bfd_reloc_status_type ppc_elf_addr16_ha_reloc
static bfd_reloc_status_type ppc_elf_addr16_ha_reloc
  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
Line 2677... Line 2678...
  asection *relbss;
  asection *relbss;
  asection *dynsbss;
  asection *dynsbss;
  asection *relsbss;
  asection *relsbss;
  elf_linker_section_t sdata[2];
  elf_linker_section_t sdata[2];
  asection *sbss;
  asection *sbss;
 
  asection *glink_eh_frame;
 
 
  /* The (unloaded but important) .rela.plt.unloaded on VxWorks.  */
  /* The (unloaded but important) .rela.plt.unloaded on VxWorks.  */
  asection *srelplt2;
  asection *srelplt2;
 
 
  /* The .got.plt section (VxWorks only)*/
  /* The .got.plt section (VxWorks only)*/
Line 2867... Line 2869...
  htab->glink = s;
  htab->glink = s;
  if (s == NULL
  if (s == NULL
      || !bfd_set_section_alignment (abfd, s, 4))
      || !bfd_set_section_alignment (abfd, s, 4))
    return FALSE;
    return FALSE;
 
 
 
  if (!info->no_ld_generated_unwind_info)
 
    {
 
      flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS
 
               | SEC_IN_MEMORY | SEC_LINKER_CREATED);
 
      s = bfd_make_section_anyway_with_flags (abfd, ".eh_frame", flags);
 
      htab->glink_eh_frame = s;
 
      if (s == NULL
 
          || !bfd_set_section_alignment (abfd, s, 2))
 
        return FALSE;
 
    }
 
 
  flags = SEC_ALLOC | SEC_LINKER_CREATED;
  flags = SEC_ALLOC | SEC_LINKER_CREATED;
  s = bfd_make_section_anyway_with_flags (abfd, ".iplt", flags);
  s = bfd_make_section_anyway_with_flags (abfd, ".iplt", flags);
  htab->iplt = s;
  htab->iplt = s;
  if (s == NULL
  if (s == NULL
      || !bfd_set_section_alignment (abfd, s, 4))
      || !bfd_set_section_alignment (abfd, s, 4))
Line 2955... Line 2968...
  struct ppc_elf_link_hash_entry *edir, *eind;
  struct ppc_elf_link_hash_entry *edir, *eind;
 
 
  edir = (struct ppc_elf_link_hash_entry *) dir;
  edir = (struct ppc_elf_link_hash_entry *) dir;
  eind = (struct ppc_elf_link_hash_entry *) ind;
  eind = (struct ppc_elf_link_hash_entry *) ind;
 
 
 
  edir->tls_mask |= eind->tls_mask;
 
  edir->has_sda_refs |= eind->has_sda_refs;
 
 
 
  /* If called to transfer flags for a weakdef during processing
 
     of elf_adjust_dynamic_symbol, don't copy non_got_ref.
 
     We clear it ourselves for ELIMINATE_COPY_RELOCS.  */
 
  if (!(ELIMINATE_COPY_RELOCS
 
        && eind->elf.root.type != bfd_link_hash_indirect
 
        && edir->elf.dynamic_adjusted))
 
    edir->elf.non_got_ref |= eind->elf.non_got_ref;
 
 
 
  edir->elf.ref_dynamic |= eind->elf.ref_dynamic;
 
  edir->elf.ref_regular |= eind->elf.ref_regular;
 
  edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak;
 
  edir->elf.needs_plt |= eind->elf.needs_plt;
 
  edir->elf.pointer_equality_needed |= eind->elf.pointer_equality_needed;
 
 
 
  /* If we were called to copy over info for a weak sym, that's all.  */
 
  if (eind->elf.root.type != bfd_link_hash_indirect)
 
    return;
 
 
  if (eind->dyn_relocs != NULL)
  if (eind->dyn_relocs != NULL)
    {
    {
      if (edir->dyn_relocs != NULL)
      if (edir->dyn_relocs != NULL)
        {
        {
          struct elf_dyn_relocs **pp;
          struct elf_dyn_relocs **pp;
Line 2986... Line 3020...
 
 
      edir->dyn_relocs = eind->dyn_relocs;
      edir->dyn_relocs = eind->dyn_relocs;
      eind->dyn_relocs = NULL;
      eind->dyn_relocs = NULL;
    }
    }
 
 
  edir->tls_mask |= eind->tls_mask;
 
  edir->has_sda_refs |= eind->has_sda_refs;
 
 
 
  /* If called to transfer flags for a weakdef during processing
 
     of elf_adjust_dynamic_symbol, don't copy non_got_ref.
 
     We clear it ourselves for ELIMINATE_COPY_RELOCS.  */
 
  if (!(ELIMINATE_COPY_RELOCS
 
        && eind->elf.root.type != bfd_link_hash_indirect
 
        && edir->elf.dynamic_adjusted))
 
    edir->elf.non_got_ref |= eind->elf.non_got_ref;
 
 
 
  edir->elf.ref_dynamic |= eind->elf.ref_dynamic;
 
  edir->elf.ref_regular |= eind->elf.ref_regular;
 
  edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak;
 
  edir->elf.needs_plt |= eind->elf.needs_plt;
 
  edir->elf.pointer_equality_needed |= eind->elf.pointer_equality_needed;
 
 
 
  /* If we were called to copy over info for a weak sym, that's all.  */
 
  if (eind->elf.root.type != bfd_link_hash_indirect)
 
    return;
 
 
 
  /* Copy over the GOT refcount entries that we may have already seen to
  /* Copy over the GOT refcount entries that we may have already seen to
     the symbol which just became indirect.  */
     the symbol which just became indirect.  */
  edir->elf.got.refcount += eind->elf.got.refcount;
  edir->elf.got.refcount += eind->elf.got.refcount;
  eind->elf.got.refcount = 0;
  eind->elf.got.refcount = 0;
 
 
Line 3682... Line 3695...
 
 
          if (h == NULL)
          if (h == NULL)
            {
            {
              /* It does not make sense to have a procedure linkage
              /* It does not make sense to have a procedure linkage
                 table entry for a local symbol.  */
                 table entry for a local symbol.  */
              info->callbacks->einfo (_("%H: %s reloc against local symbol\n"),
              info->callbacks->einfo (_("%P: %H: %s reloc against local symbol\n"),
                                      abfd, sec, rel->r_offset,
                                      abfd, sec, rel->r_offset,
                                      ppc_elf_howto_table[r_type]->name);
                                      ppc_elf_howto_table[r_type]->name);
              bfd_set_error (bfd_error_bad_value);
              bfd_set_error (bfd_error_bad_value);
              return FALSE;
              return FALSE;
            }
            }
Line 4241... Line 4254...
 
 
  htab->emit_stub_syms = emit_stub_syms;
  htab->emit_stub_syms = emit_stub_syms;
 
 
  if (htab->plt_type == PLT_UNSET)
  if (htab->plt_type == PLT_UNSET)
    {
    {
 
      struct elf_link_hash_entry *h;
 
 
      if (plt_style == PLT_OLD)
      if (plt_style == PLT_OLD)
        htab->plt_type = PLT_OLD;
        htab->plt_type = PLT_OLD;
 
      else if (info->shared
 
               && htab->elf.dynamic_sections_created
 
               && (h = elf_link_hash_lookup (&htab->elf, "_mcount",
 
                                             FALSE, FALSE, TRUE)) != NULL
 
               && (h->type == STT_FUNC
 
                   || h->needs_plt)
 
               && h->ref_regular
 
               && !(SYMBOL_CALLS_LOCAL (info, h)
 
                    || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
 
                        && h->root.type == bfd_link_hash_undefweak)))
 
        {
 
          /* Profiling of shared libs (and pies) is not supported with
 
             secure plt, because ppc32 does profiling before a
 
             function prologue and a secure plt pic call stubs needs
 
             r30 to be set up.  */
 
          htab->plt_type = PLT_OLD;
 
        }
      else
      else
        {
        {
          bfd *ibfd;
          bfd *ibfd;
          enum ppc_elf_plt_type plt_type = plt_style;
          enum ppc_elf_plt_type plt_type = plt_style;
 
 
Line 4270... Line 4302...
              }
              }
          htab->plt_type = plt_type;
          htab->plt_type = plt_type;
        }
        }
    }
    }
  if (htab->plt_type == PLT_OLD && plt_style == PLT_NEW)
  if (htab->plt_type == PLT_OLD && plt_style == PLT_NEW)
    info->callbacks->info (_("Using bss-plt due to %B"), htab->old_bfd);
    {
 
      if (htab->old_bfd != NULL)
 
        info->callbacks->einfo (_("%P: bss-plt forced due to %B\n"),
 
                                htab->old_bfd);
 
      else
 
        info->callbacks->einfo (_("%P: bss-plt forced by profiling\n"));
 
    }
 
 
  BFD_ASSERT (htab->plt_type != PLT_VXWORKS);
  BFD_ASSERT (htab->plt_type != PLT_VXWORKS);
 
 
  if (htab->plt_type == PLT_NEW)
  if (htab->plt_type == PLT_NEW)
    {
    {
Line 5001... Line 5039...
      return TRUE;
      return TRUE;
    }
    }
 
 
  if (h->size == 0)
  if (h->size == 0)
    {
    {
      info->callbacks->einfo (_("dynamic variable `%s' is zero size\n"),
      info->callbacks->einfo (_("%P: dynamic variable `%s' is zero size\n"),
                              h->root.root.string);
                              h->root.root.string);
      return TRUE;
      return TRUE;
    }
    }
 
 
  /* We must allocate the symbol in our .dynbss section, which will
  /* We must allocate the symbol in our .dynbss section, which will
Line 5506... Line 5544...
      return FALSE;
      return FALSE;
    }
    }
  return TRUE;
  return TRUE;
}
}
 
 
 
static const unsigned char glink_eh_frame_cie[] =
 
{
 
  0, 0, 0, 16,                             /* length.  */
 
  0, 0, 0, 0,                               /* id.  */
 
  1,                                    /* CIE version.  */
 
  'z', 'R', 0,                           /* Augmentation string.  */
 
  4,                                    /* Code alignment.  */
 
  0x7c,                                 /* Data alignment.  */
 
  65,                                   /* RA reg.  */
 
  1,                                    /* Augmentation size.  */
 
  DW_EH_PE_pcrel | DW_EH_PE_sdata4,     /* FDE encoding.  */
 
  DW_CFA_def_cfa, 1, 0                   /* def_cfa: r1 offset 0.  */
 
};
 
 
/* Set the sizes of the dynamic sections.  */
/* Set the sizes of the dynamic sections.  */
 
 
static bfd_boolean
static bfd_boolean
ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
ppc_elf_size_dynamic_sections (bfd *output_bfd ATTRIBUTE_UNUSED,
                               struct bfd_link_info *info)
                               struct bfd_link_info *info)
Line 5766... Line 5818...
              sh->non_elf = 0;
              sh->non_elf = 0;
            }
            }
        }
        }
    }
    }
 
 
 
  if (htab->glink != NULL
 
      && htab->glink->size != 0
 
      && htab->glink_eh_frame != NULL
 
      && !bfd_is_abs_section (htab->glink_eh_frame->output_section))
 
    {
 
      s = htab->glink_eh_frame;
 
      s->size = sizeof (glink_eh_frame_cie) + 20;
 
      if (info->shared)
 
        {
 
          s->size += 4;
 
          if (htab->glink->size - GLINK_PLTRESOLVE + 8 >= 256)
 
            s->size += 4;
 
        }
 
    }
 
 
  /* We've now determined the sizes of the various dynamic sections.
  /* We've now determined the sizes of the various dynamic sections.
     Allocate memory for them.  */
     Allocate memory for them.  */
  relocs = FALSE;
  relocs = FALSE;
  for (s = htab->elf.dynobj->sections; s != NULL; s = s->next)
  for (s = htab->elf.dynobj->sections; s != NULL; s = s->next)
    {
    {
Line 5789... Line 5856...
          /* Strip this section if we don't need it; see the
          /* Strip this section if we don't need it; see the
             comment below.  */
             comment below.  */
        }
        }
      else if (s == htab->iplt
      else if (s == htab->iplt
               || s == htab->glink
               || s == htab->glink
 
               || s == htab->glink_eh_frame
               || s == htab->sgotplt
               || s == htab->sgotplt
               || s == htab->sbss
               || s == htab->sbss
               || s == htab->dynbss
               || s == htab->dynbss
               || s == htab->dynsbss
               || s == htab->dynsbss
               || s == htab->sdata[0].section
               || s == htab->sdata[0].section
Line 7190... Line 7258...
        howto = ppc_elf_howto_table[r_type];
        howto = ppc_elf_howto_table[r_type];
      switch (r_type)
      switch (r_type)
        {
        {
        default:
        default:
          info->callbacks->einfo
          info->callbacks->einfo
            (_("%B: unknown relocation type %d for symbol %s\n"),
            (_("%P: %B: unknown relocation type %d for symbol %s\n"),
             input_bfd, (int) r_type, sym_name);
             input_bfd, (int) r_type, sym_name);
 
 
          bfd_set_error (bfd_error_bad_value);
          bfd_set_error (bfd_error_bad_value);
          ret = FALSE;
          ret = FALSE;
          continue;
          continue;
Line 7451... Line 7519...
               x+off@got is actually x@got+off, and since the got is
               x+off@got is actually x@got+off, and since the got is
               generated by a hash table traversal, the value in the
               generated by a hash table traversal, the value in the
               got at entry m+n bears little relation to the entry m.  */
               got at entry m+n bears little relation to the entry m.  */
            if (addend != 0)
            if (addend != 0)
              info->callbacks->einfo
              info->callbacks->einfo
                (_("%H: non-zero addend on %s reloc against `%s'\n"),
                (_("%P: %H: non-zero addend on %s reloc against `%s'\n"),
                 input_bfd, input_section, rel->r_offset,
                 input_bfd, input_section, rel->r_offset,
                 howto->name,
                 howto->name,
                 sym_name);
                 sym_name);
          }
          }
        break;
        break;
Line 7647... Line 7715...
                             will set the text segment writable and
                             will set the text segment writable and
                             non-executable to apply text relocations.
                             non-executable to apply text relocations.
                             So we'll segfault when trying to run the
                             So we'll segfault when trying to run the
                             indirection function to resolve the reloc.  */
                             indirection function to resolve the reloc.  */
                          info->callbacks->einfo
                          info->callbacks->einfo
                            (_("%H: relocation %s for indirect "
                            (_("%P: %H: relocation %s for indirect "
                               "function %s unsupported\n"),
                               "function %s unsupported\n"),
                             input_bfd, input_section, rel->r_offset,
                             input_bfd, input_section, rel->r_offset,
                             howto->name,
                             howto->name,
                             sym_name);
                             sym_name);
                          ret = FALSE;
                          ret = FALSE;
Line 7875... Line 7943...
                    && (name[6] == 0 || name[6] == '.'))
                    && (name[6] == 0 || name[6] == '.'))
                   || (CONST_STRNEQ (name, ".sbss")
                   || (CONST_STRNEQ (name, ".sbss")
                       && (name[5] == 0 || name[5] == '.'))))
                       && (name[5] == 0 || name[5] == '.'))))
              {
              {
                info->callbacks->einfo
                info->callbacks->einfo
                  (_("%B: the target (%s) of a %s relocation is "
                  (_("%P: %B: the target (%s) of a %s relocation is "
                     "in the wrong output section (%s)\n"),
                     "in the wrong output section (%s)\n"),
                   input_bfd,
                   input_bfd,
                   sym_name,
                   sym_name,
                   howto->name,
                   howto->name,
                   name);
                   name);
Line 7905... Line 7973...
            name = bfd_get_section_name (abfd, sec->output_section);
            name = bfd_get_section_name (abfd, sec->output_section);
            if (! (CONST_STRNEQ (name, ".sdata2")
            if (! (CONST_STRNEQ (name, ".sdata2")
                   || CONST_STRNEQ (name, ".sbss2")))
                   || CONST_STRNEQ (name, ".sbss2")))
              {
              {
                info->callbacks->einfo
                info->callbacks->einfo
                  (_("%B: the target (%s) of a %s relocation is "
                  (_("%P: %B: the target (%s) of a %s relocation is "
                     "in the wrong output section (%s)\n"),
                     "in the wrong output section (%s)\n"),
                   input_bfd,
                   input_bfd,
                   sym_name,
                   sym_name,
                   howto->name,
                   howto->name,
                   name);
                   name);
Line 7952... Line 8020...
                reg = 0;
                reg = 0;
              }
              }
            else
            else
              {
              {
                info->callbacks->einfo
                info->callbacks->einfo
                  (_("%B: the target (%s) of a %s relocation is "
                  (_("%P: %B: the target (%s) of a %s relocation is "
                     "in the wrong output section (%s)\n"),
                     "in the wrong output section (%s)\n"),
                   input_bfd,
                   input_bfd,
                   sym_name,
                   sym_name,
                   howto->name,
                   howto->name,
                   name);
                   name);
Line 8024... Line 8092...
        case R_PPC_EMB_RELST_LO:
        case R_PPC_EMB_RELST_LO:
        case R_PPC_EMB_RELST_HI:
        case R_PPC_EMB_RELST_HI:
        case R_PPC_EMB_RELST_HA:
        case R_PPC_EMB_RELST_HA:
        case R_PPC_EMB_BIT_FLD:
        case R_PPC_EMB_BIT_FLD:
          info->callbacks->einfo
          info->callbacks->einfo
            (_("%B: relocation %s is not yet supported for symbol %s\n"),
            (_("%P: %B: relocation %s is not yet supported for symbol %s\n"),
             input_bfd,
             input_bfd,
             howto->name,
             howto->name,
             sym_name);
             sym_name);
 
 
          bfd_set_error (bfd_error_invalid_operation);
          bfd_set_error (bfd_error_invalid_operation);
Line 8083... Line 8151...
      if (unresolved_reloc
      if (unresolved_reloc
          && !((input_section->flags & SEC_DEBUGGING) != 0
          && !((input_section->flags & SEC_DEBUGGING) != 0
               && h->def_dynamic))
               && h->def_dynamic))
        {
        {
          info->callbacks->einfo
          info->callbacks->einfo
            (_("%H: unresolvable %s relocation against symbol `%s'\n"),
            (_("%P: %H: unresolvable %s relocation against symbol `%s'\n"),
             input_bfd, input_section, rel->r_offset,
             input_bfd, input_section, rel->r_offset,
             howto->name,
             howto->name,
             sym_name);
             sym_name);
          ret = FALSE;
          ret = FALSE;
        }
        }
Line 8130... Line 8198...
                return FALSE;
                return FALSE;
            }
            }
          else
          else
            {
            {
              info->callbacks->einfo
              info->callbacks->einfo
                (_("%H: %s reloc against `%s': error %d\n"),
                (_("%P: %H: %s reloc against `%s': error %d\n"),
                 input_bfd, input_section, rel->r_offset,
                 input_bfd, input_section, rel->r_offset,
                 howto->name, sym_name, (int) r);
                 howto->name, sym_name, (int) r);
              ret = FALSE;
              ret = FALSE;
            }
            }
        }
        }
Line 8621... Line 8689...
              bfd_put_32 (output_bfd, val, p);
              bfd_put_32 (output_bfd, val, p);
            }
            }
        }
        }
      else
      else
        {
        {
          info->callbacks->einfo (_("%s not defined in linker created %s\n"),
          info->callbacks->einfo (_("%P: %s not defined in linker created %s\n"),
                                  htab->elf.hgot->root.root.string,
                                  htab->elf.hgot->root.root.string,
                                  (htab->sgotplt != NULL
                                  (htab->sgotplt != NULL
                                   ? htab->sgotplt->name : htab->got->name));
                                   ? htab->sgotplt->name : htab->got->name));
          bfd_set_error (bfd_error_bad_value);
          bfd_set_error (bfd_error_bad_value);
          ret = FALSE;
          ret = FALSE;
Line 8913... Line 8981...
                          LWZ_12_12 + 4, p + 6*4);
                          LWZ_12_12 + 4, p + 6*4);
            }
            }
        }
        }
    }
    }
 
 
 
  if (htab->glink_eh_frame != NULL
 
      && htab->glink_eh_frame->contents != NULL)
 
    {
 
      unsigned char *p = htab->glink_eh_frame->contents;
 
      bfd_vma val;
 
 
 
      memcpy (p, glink_eh_frame_cie, sizeof (glink_eh_frame_cie));
 
      /* CIE length (rewrite in case little-endian).  */
 
      bfd_put_32 (htab->elf.dynobj, sizeof (glink_eh_frame_cie) - 4, p);
 
      p += sizeof (glink_eh_frame_cie);
 
      /* FDE length.  */
 
      val = htab->glink_eh_frame->size - 4 - sizeof (glink_eh_frame_cie);
 
      bfd_put_32 (htab->elf.dynobj, val, p);
 
      p += 4;
 
      /* CIE pointer.  */
 
      val = p - htab->glink_eh_frame->contents;
 
      bfd_put_32 (htab->elf.dynobj, val, p);
 
      p += 4;
 
      /* Offset to .glink.  */
 
      val = (htab->glink->output_section->vma
 
             + htab->glink->output_offset);
 
      val -= (htab->glink_eh_frame->output_section->vma
 
              + htab->glink_eh_frame->output_offset);
 
      val -= p - htab->glink_eh_frame->contents;
 
      bfd_put_32 (htab->elf.dynobj, val, p);
 
      p += 4;
 
      /* .glink size.  */
 
      bfd_put_32 (htab->elf.dynobj, htab->glink->size, p);
 
      p += 4;
 
      /* Augmentation.  */
 
      p += 1;
 
 
 
      if (info->shared
 
          && htab->elf.dynamic_sections_created)
 
        {
 
          bfd_vma adv = (htab->glink->size - GLINK_PLTRESOLVE + 8) >> 2;
 
          if (adv < 64)
 
            *p++ = DW_CFA_advance_loc + adv;
 
          else if (adv < 256)
 
            {
 
              *p++ = DW_CFA_advance_loc1;
 
              *p++ = adv;
 
            }
 
          else if (adv < 65536)
 
            {
 
              *p++ = DW_CFA_advance_loc2;
 
              bfd_put_16 (htab->elf.dynobj, adv, p);
 
              p += 2;
 
            }
 
          else
 
            {
 
              *p++ = DW_CFA_advance_loc4;
 
              bfd_put_32 (htab->elf.dynobj, adv, p);
 
              p += 4;
 
            }
 
          *p++ = DW_CFA_register;
 
          *p++ = 65;
 
          p++;
 
          *p++ = DW_CFA_advance_loc + 4;
 
          *p++ = DW_CFA_restore_extended;
 
          *p++ = 65;
 
        }
 
      BFD_ASSERT ((bfd_vma) ((p + 3 - htab->glink_eh_frame->contents) & -4)
 
                  == htab->glink_eh_frame->size);
 
 
 
      if (htab->glink_eh_frame->sec_info_type == ELF_INFO_TYPE_EH_FRAME
 
          && !_bfd_elf_write_section_eh_frame (output_bfd, info,
 
                                               htab->glink_eh_frame,
 
                                               htab->glink_eh_frame->contents))
 
        return FALSE;
 
    }
 
 
  return ret;
  return ret;
}
}


#define TARGET_LITTLE_SYM       bfd_elf32_powerpcle_vec
#define TARGET_LITTLE_SYM       bfd_elf32_powerpcle_vec
#define TARGET_LITTLE_NAME      "elf32-powerpcle"
#define TARGET_LITTLE_NAME      "elf32-powerpcle"

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.