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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-7.1/] [bfd/] [libnlm.h] - Diff between revs 834 and 842

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 834 Rev 842
/* BFD back-end data structures for NLM (NetWare Loadable Modules) files.
/* BFD back-end data structures for NLM (NetWare Loadable Modules) files.
   Copyright 1993, 1994, 2001, 2002, 2003, 2005, 2007
   Copyright 1993, 1994, 2001, 2002, 2003, 2005, 2007
   Free Software Foundation, Inc.
   Free Software Foundation, Inc.
   Written by Cygnus Support.
   Written by Cygnus Support.
 
 
   This file is part of BFD, the Binary File Descriptor library.
   This file is part of BFD, the Binary File Descriptor library.
 
 
   This program is free software; you can redistribute it and/or modify
   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
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.
   (at your option) any later version.
 
 
   This program is distributed in the hope that it will be useful,
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
 
 
   You should have received a copy of the GNU General Public License
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
   MA 02110-1301, USA.  */
   MA 02110-1301, USA.  */
 
 
#ifndef _LIBNLM_H_
#ifndef _LIBNLM_H_
#define _LIBNLM_H_ 1
#define _LIBNLM_H_ 1
 
 
#ifdef ARCH_SIZE
#ifdef ARCH_SIZE
#  define NLM_ARCH_SIZE ARCH_SIZE
#  define NLM_ARCH_SIZE ARCH_SIZE
#endif
#endif
#include "nlm/common.h"
#include "nlm/common.h"
#include "nlm/internal.h"
#include "nlm/internal.h"
#include "nlm/external.h"
#include "nlm/external.h"
 
 
/* A reloc for an imported NLM symbol.  Normal relocs are associated
/* A reloc for an imported NLM symbol.  Normal relocs are associated
   with sections, and include a symbol.  These relocs are associated
   with sections, and include a symbol.  These relocs are associated
   with (undefined) symbols, and include a section.  */
   with (undefined) symbols, and include a section.  */
 
 
struct nlm_relent
struct nlm_relent
{
{
  /* Section of reloc.  */
  /* Section of reloc.  */
  asection *section;
  asection *section;
  /* Reloc info (sym_ptr_ptr field set only when canonicalized).  */
  /* Reloc info (sym_ptr_ptr field set only when canonicalized).  */
  arelent reloc;
  arelent reloc;
};
};
 
 
/* Information we keep for an NLM symbol.  */
/* Information we keep for an NLM symbol.  */
 
 
typedef struct
typedef struct
{
{
  /* BFD symbol.  */
  /* BFD symbol.  */
  asymbol symbol;
  asymbol symbol;
  /* Number of reloc entries for imported symbol.  */
  /* Number of reloc entries for imported symbol.  */
  bfd_size_type rcnt;
  bfd_size_type rcnt;
  /* Array of reloc information for imported symbol.  */
  /* Array of reloc information for imported symbol.  */
  struct nlm_relent *relocs;
  struct nlm_relent *relocs;
} nlmNAME(symbol_type);
} nlmNAME(symbol_type);
 
 
extern bfd_boolean        nlm_mkobject                    (bfd *);
extern bfd_boolean        nlm_mkobject                    (bfd *);
extern bfd_boolean        nlm_set_arch_mach               (bfd *, enum bfd_architecture, unsigned long);
extern bfd_boolean        nlm_set_arch_mach               (bfd *, enum bfd_architecture, unsigned long);
extern void               nlmNAME (get_symbol_info)       (bfd *, asymbol *, symbol_info *);
extern void               nlmNAME (get_symbol_info)       (bfd *, asymbol *, symbol_info *);
extern long               nlmNAME (get_symtab_upper_bound)(bfd *);
extern long               nlmNAME (get_symtab_upper_bound)(bfd *);
extern long               nlmNAME (canonicalize_symtab)   (bfd *, asymbol **);
extern long               nlmNAME (canonicalize_symtab)   (bfd *, asymbol **);
extern asymbol *          nlmNAME (make_empty_symbol)     (bfd *);
extern asymbol *          nlmNAME (make_empty_symbol)     (bfd *);
extern void               nlmNAME (print_symbol)          (bfd *, void *, asymbol *, bfd_print_symbol_type);
extern void               nlmNAME (print_symbol)          (bfd *, void *, asymbol *, bfd_print_symbol_type);
extern long               nlmNAME (get_reloc_upper_bound) (bfd *, asection *);
extern long               nlmNAME (get_reloc_upper_bound) (bfd *, asection *);
extern long               nlmNAME (canonicalize_reloc)    (bfd *, asection *, arelent **, asymbol **);
extern long               nlmNAME (canonicalize_reloc)    (bfd *, asection *, arelent **, asymbol **);
extern const bfd_target * nlmNAME (object_p)              (bfd *);
extern const bfd_target * nlmNAME (object_p)              (bfd *);
extern bfd_boolean        nlmNAME (set_arch_mach)         (bfd *, enum bfd_architecture, unsigned long);
extern bfd_boolean        nlmNAME (set_arch_mach)         (bfd *, enum bfd_architecture, unsigned long);
extern bfd_boolean        nlmNAME (set_section_contents)  (bfd *, asection *, const void *, file_ptr, bfd_size_type);
extern bfd_boolean        nlmNAME (set_section_contents)  (bfd *, asection *, const void *, file_ptr, bfd_size_type);
extern bfd_boolean        nlmNAME (write_object_contents) (bfd *);
extern bfd_boolean        nlmNAME (write_object_contents) (bfd *);
 
 
/* Some private data is stashed away for future use using the tdata pointer
/* Some private data is stashed away for future use using the tdata pointer
   in the bfd structure.  */
   in the bfd structure.  */
 
 
struct nlm_obj_tdata
struct nlm_obj_tdata
{
{
  /* Actual data, but ref like ptr */
  /* Actual data, but ref like ptr */
  Nlm_Internal_Fixed_Header     nlm_fixed_hdr[1];
  Nlm_Internal_Fixed_Header     nlm_fixed_hdr[1];
  Nlm_Internal_Variable_Header  nlm_variable_hdr[1];
  Nlm_Internal_Variable_Header  nlm_variable_hdr[1];
  Nlm_Internal_Version_Header   nlm_version_hdr[1];
  Nlm_Internal_Version_Header   nlm_version_hdr[1];
  Nlm_Internal_Copyright_Header nlm_copyright_hdr[1];
  Nlm_Internal_Copyright_Header nlm_copyright_hdr[1];
  Nlm_Internal_Extended_Header  nlm_extended_hdr[1];
  Nlm_Internal_Extended_Header  nlm_extended_hdr[1];
  Nlm_Internal_Custom_Header    nlm_custom_hdr[1];
  Nlm_Internal_Custom_Header    nlm_custom_hdr[1];
  Nlm_Internal_Cygnus_Ext_Header nlm_cygnus_ext_hdr[1];
  Nlm_Internal_Cygnus_Ext_Header nlm_cygnus_ext_hdr[1];
  /* BFD NLM symbols.  */
  /* BFD NLM symbols.  */
  nlmNAME (symbol_type) *       nlm_symbols;
  nlmNAME (symbol_type) *       nlm_symbols;
  /* Lowest text and data VMA values.  */
  /* Lowest text and data VMA values.  */
  bfd_vma                       nlm_text_low;
  bfd_vma                       nlm_text_low;
  bfd_vma                       nlm_data_low;
  bfd_vma                       nlm_data_low;
  /* Caches for data read from object file.  */
  /* Caches for data read from object file.  */
  arelent *                     nlm_reloc_fixups;
  arelent *                     nlm_reloc_fixups;
  asection **                   nlm_reloc_fixup_secs;
  asection **                   nlm_reloc_fixup_secs;
  /* Backend specific information.  This should probably be a pointer,
  /* Backend specific information.  This should probably be a pointer,
     but that would require yet another entry point to initialize the
     but that would require yet another entry point to initialize the
     structure.  */
     structure.  */
  union
  union
    {
    {
      struct    /* Alpha backend information.  */
      struct    /* Alpha backend information.  */
        {
        {
          bfd_vma gp;                   /* GP value.  */
          bfd_vma gp;                   /* GP value.  */
          bfd_vma lita_address;         /* .lita section address.  */
          bfd_vma lita_address;         /* .lita section address.  */
          bfd_size_type lita_size;      /* .lita section size.  */
          bfd_size_type lita_size;      /* .lita section size.  */
        }
        }
      alpha_backend_data;
      alpha_backend_data;
    }
    }
  backend_data;
  backend_data;
};
};
 
 
#define nlm_tdata(bfd)                  ((bfd) -> tdata.nlm_obj_data)
#define nlm_tdata(bfd)                  ((bfd) -> tdata.nlm_obj_data)
#define nlm_fixed_header(bfd)           (nlm_tdata (bfd) -> nlm_fixed_hdr)
#define nlm_fixed_header(bfd)           (nlm_tdata (bfd) -> nlm_fixed_hdr)
#define nlm_variable_header(bfd)        (nlm_tdata (bfd) -> nlm_variable_hdr)
#define nlm_variable_header(bfd)        (nlm_tdata (bfd) -> nlm_variable_hdr)
#define nlm_version_header(bfd)         (nlm_tdata (bfd) -> nlm_version_hdr)
#define nlm_version_header(bfd)         (nlm_tdata (bfd) -> nlm_version_hdr)
#define nlm_copyright_header(bfd)       (nlm_tdata (bfd) -> nlm_copyright_hdr)
#define nlm_copyright_header(bfd)       (nlm_tdata (bfd) -> nlm_copyright_hdr)
#define nlm_extended_header(bfd)        (nlm_tdata (bfd) -> nlm_extended_hdr)
#define nlm_extended_header(bfd)        (nlm_tdata (bfd) -> nlm_extended_hdr)
#define nlm_custom_header(bfd)          (nlm_tdata (bfd) -> nlm_custom_hdr)
#define nlm_custom_header(bfd)          (nlm_tdata (bfd) -> nlm_custom_hdr)
#define nlm_cygnus_ext_header(bfd)      (nlm_tdata (bfd) -> nlm_cygnus_ext_hdr)
#define nlm_cygnus_ext_header(bfd)      (nlm_tdata (bfd) -> nlm_cygnus_ext_hdr)
#define nlm_get_symbols(bfd)            (nlm_tdata (bfd) -> nlm_symbols)
#define nlm_get_symbols(bfd)            (nlm_tdata (bfd) -> nlm_symbols)
#define nlm_set_symbols(bfd, p)         (nlm_tdata (bfd) -> nlm_symbols = (p))
#define nlm_set_symbols(bfd, p)         (nlm_tdata (bfd) -> nlm_symbols = (p))
#define nlm_set_text_low(bfd, i)        (nlm_tdata (bfd) -> nlm_text_low = (i))
#define nlm_set_text_low(bfd, i)        (nlm_tdata (bfd) -> nlm_text_low = (i))
#define nlm_get_text_low(bfd)           (nlm_tdata (bfd) -> nlm_text_low)
#define nlm_get_text_low(bfd)           (nlm_tdata (bfd) -> nlm_text_low)
#define nlm_set_data_low(bfd, i)        (nlm_tdata (bfd) -> nlm_data_low = (i))
#define nlm_set_data_low(bfd, i)        (nlm_tdata (bfd) -> nlm_data_low = (i))
#define nlm_get_data_low(bfd)           (nlm_tdata (bfd) -> nlm_data_low)
#define nlm_get_data_low(bfd)           (nlm_tdata (bfd) -> nlm_data_low)
#define nlm_relocation_fixups(bfd)      (nlm_tdata (bfd) -> nlm_reloc_fixups)
#define nlm_relocation_fixups(bfd)      (nlm_tdata (bfd) -> nlm_reloc_fixups)
#define nlm_relocation_fixup_secs(bfd)  (nlm_tdata (bfd) -> nlm_reloc_fixup_secs)
#define nlm_relocation_fixup_secs(bfd)  (nlm_tdata (bfd) -> nlm_reloc_fixup_secs)
#define nlm_alpha_backend_data(bfd)    (&nlm_tdata (bfd) -> backend_data.alpha_backend_data)
#define nlm_alpha_backend_data(bfd)    (&nlm_tdata (bfd) -> backend_data.alpha_backend_data)
 
 
/* This is used when writing out the external relocs. */
/* This is used when writing out the external relocs. */
 
 
struct reloc_and_sec
struct reloc_and_sec
{
{
  arelent *rel;
  arelent *rel;
  asection *sec;
  asection *sec;
};
};
 
 
/* We store some function pointer in the backend structure.  This lets
/* We store some function pointer in the backend structure.  This lets
   different NLM targets share most of the same code, while providing
   different NLM targets share most of the same code, while providing
   slightly different code where necessary.  */
   slightly different code where necessary.  */
 
 
struct nlm_backend_data
struct nlm_backend_data
{
{
  /* Signature for this backend.  */
  /* Signature for this backend.  */
  char signature[NLM_SIGNATURE_SIZE];
  char signature[NLM_SIGNATURE_SIZE];
  /* Size of the fixed header.  */
  /* Size of the fixed header.  */
  bfd_size_type fixed_header_size;
  bfd_size_type fixed_header_size;
  /* Size of optional prefix for this backend.  Some backend may
  /* Size of optional prefix for this backend.  Some backend may
     require this to be a function, but so far a constant is OK.  This
     require this to be a function, but so far a constant is OK.  This
     is for a prefix which precedes the standard NLM fixed header.  */
     is for a prefix which precedes the standard NLM fixed header.  */
  bfd_size_type optional_prefix_size;
  bfd_size_type optional_prefix_size;
  /* Architecture.  */
  /* Architecture.  */
  enum bfd_architecture arch;
  enum bfd_architecture arch;
  /* Machine.  */
  /* Machine.  */
  unsigned int mach;
  unsigned int mach;
  /* Some NLM formats do not use the uninitialized data section, so
  /* Some NLM formats do not use the uninitialized data section, so
     all uninitialized data must be put into the regular data section
     all uninitialized data must be put into the regular data section
     instead.  */
     instead.  */
  bfd_boolean no_uninitialized_data;
  bfd_boolean no_uninitialized_data;
  /* Some NLM formats have a prefix on the file.  If this function is
  /* Some NLM formats have a prefix on the file.  If this function is
     not NULL, it will be called by nlm_object_p.  It should return
     not NULL, it will be called by nlm_object_p.  It should return
     TRUE if this file could match this format, and it should leave
     TRUE if this file could match this format, and it should leave
     the BFD such that a bfd_bread will pick up the fixed header.  */
     the BFD such that a bfd_bread will pick up the fixed header.  */
  bfd_boolean (*nlm_backend_object_p) (bfd *);
  bfd_boolean (*nlm_backend_object_p) (bfd *);
  /* Write out the prefix.  This function may be NULL.  This must
  /* Write out the prefix.  This function may be NULL.  This must
     write out the same number of bytes as is in the field
     write out the same number of bytes as is in the field
     optional_prefix_size.  */
     optional_prefix_size.  */
  bfd_boolean (*nlm_write_prefix) (bfd *);
  bfd_boolean (*nlm_write_prefix) (bfd *);
  /* Read a relocation fixup from abfd.  The reloc information is
  /* Read a relocation fixup from abfd.  The reloc information is
     machine specific.  The second argument is the symbol if this is
     machine specific.  The second argument is the symbol if this is
     an import, or NULL if this is a reloc fixup.  This function
     an import, or NULL if this is a reloc fixup.  This function
     should set the third argument to the section which the reloc
     should set the third argument to the section which the reloc
     belongs in, and the fourth argument to the reloc itself; it does
     belongs in, and the fourth argument to the reloc itself; it does
     not need to fill in the sym_ptr_ptr field for a reloc against an
     not need to fill in the sym_ptr_ptr field for a reloc against an
     import symbol.  */
     import symbol.  */
  bfd_boolean (*nlm_read_reloc) (bfd *, nlmNAME (symbol_type) *, asection **, arelent *);
  bfd_boolean (*nlm_read_reloc) (bfd *, nlmNAME (symbol_type) *, asection **, arelent *);
  /* To make objcopy to an i386 NLM work, the i386 backend needs a
  /* To make objcopy to an i386 NLM work, the i386 backend needs a
     chance to work over the relocs.  This is a bit icky.  */
     chance to work over the relocs.  This is a bit icky.  */
  bfd_boolean (*nlm_mangle_relocs) (bfd *, asection *, const void *, bfd_vma,  bfd_size_type);
  bfd_boolean (*nlm_mangle_relocs) (bfd *, asection *, const void *, bfd_vma,  bfd_size_type);
  /* Read an import record from abfd.  It would be nice if this
  /* Read an import record from abfd.  It would be nice if this
     were in a machine-dependent format, but it doesn't seem to be. */
     were in a machine-dependent format, but it doesn't seem to be. */
  bfd_boolean (*nlm_read_import) (bfd *, nlmNAME (symbol_type) *);
  bfd_boolean (*nlm_read_import) (bfd *, nlmNAME (symbol_type) *);
  /* Write an import record to abfd. */
  /* Write an import record to abfd. */
  bfd_boolean (*nlm_write_import) (bfd *, asection *, arelent *);
  bfd_boolean (*nlm_write_import) (bfd *, asection *, arelent *);
  /* Set the section for a public symbol.  This may be NULL, in which
  /* Set the section for a public symbol.  This may be NULL, in which
     case a default method will be used.  */
     case a default method will be used.  */
  bfd_boolean (*nlm_set_public_section) (bfd *, nlmNAME (symbol_type) *);
  bfd_boolean (*nlm_set_public_section) (bfd *, nlmNAME (symbol_type) *);
  /* Get the offset to write out for a public symbol.  This may be
  /* Get the offset to write out for a public symbol.  This may be
     NULL, in which case a default method will be used.  */
     NULL, in which case a default method will be used.  */
  bfd_vma (*nlm_get_public_offset) (bfd *, asymbol *);
  bfd_vma (*nlm_get_public_offset) (bfd *, asymbol *);
  /* Swap the fixed header in and out */
  /* Swap the fixed header in and out */
  void (*nlm_swap_fhdr_in)  (bfd *, void *, Nlm_Internal_Fixed_Header *);
  void (*nlm_swap_fhdr_in)  (bfd *, void *, Nlm_Internal_Fixed_Header *);
  void (*nlm_swap_fhdr_out) (bfd *, struct nlm_internal_fixed_header *, void *);
  void (*nlm_swap_fhdr_out) (bfd *, struct nlm_internal_fixed_header *, void *);
  /* Write out an external reference.  */
  /* Write out an external reference.  */
  bfd_boolean (*nlm_write_external) (bfd *, bfd_size_type, asymbol *, struct reloc_and_sec *);
  bfd_boolean (*nlm_write_external) (bfd *, bfd_size_type, asymbol *, struct reloc_and_sec *);
  bfd_boolean (*nlm_write_export) (bfd *, asymbol *, bfd_vma);
  bfd_boolean (*nlm_write_export) (bfd *, asymbol *, bfd_vma);
};
};
 
 
#define nlm_backend(bfd)   ((struct nlm_backend_data *)((bfd) -> xvec -> backend_data))
#define nlm_backend(bfd)   ((struct nlm_backend_data *)((bfd) -> xvec -> backend_data))
#define nlm_signature(bfd)                 (nlm_backend (bfd) -> signature)
#define nlm_signature(bfd)                 (nlm_backend (bfd) -> signature)
#define nlm_fixed_header_size(bfd)         (nlm_backend (bfd) -> fixed_header_size)
#define nlm_fixed_header_size(bfd)         (nlm_backend (bfd) -> fixed_header_size)
#define nlm_optional_prefix_size(bfd)      (nlm_backend (bfd) -> optional_prefix_size)
#define nlm_optional_prefix_size(bfd)      (nlm_backend (bfd) -> optional_prefix_size)
#define nlm_architecture(bfd)              (nlm_backend (bfd) -> arch)
#define nlm_architecture(bfd)              (nlm_backend (bfd) -> arch)
#define nlm_machine(bfd)                   (nlm_backend (bfd) -> mach)
#define nlm_machine(bfd)                   (nlm_backend (bfd) -> mach)
#define nlm_no_uninitialized_data(bfd)     (nlm_backend (bfd) -> no_uninitialized_data)
#define nlm_no_uninitialized_data(bfd)     (nlm_backend (bfd) -> no_uninitialized_data)
#define nlm_backend_object_p_func(bfd)     (nlm_backend (bfd) -> nlm_backend_object_p)
#define nlm_backend_object_p_func(bfd)     (nlm_backend (bfd) -> nlm_backend_object_p)
#define nlm_write_prefix_func(bfd)         (nlm_backend (bfd) -> nlm_write_prefix)
#define nlm_write_prefix_func(bfd)         (nlm_backend (bfd) -> nlm_write_prefix)
#define nlm_read_reloc_func(bfd)           (nlm_backend (bfd) -> nlm_read_reloc)
#define nlm_read_reloc_func(bfd)           (nlm_backend (bfd) -> nlm_read_reloc)
#define nlm_mangle_relocs_func(bfd)        (nlm_backend (bfd) -> nlm_mangle_relocs)
#define nlm_mangle_relocs_func(bfd)        (nlm_backend (bfd) -> nlm_mangle_relocs)
#define nlm_read_import_func(bfd)          (nlm_backend (bfd) -> nlm_read_import)
#define nlm_read_import_func(bfd)          (nlm_backend (bfd) -> nlm_read_import)
#define nlm_write_import_func(bfd)         (nlm_backend (bfd) -> nlm_write_import)
#define nlm_write_import_func(bfd)         (nlm_backend (bfd) -> nlm_write_import)
#define nlm_set_public_section_func(bfd)   (nlm_backend (bfd) -> nlm_set_public_section)
#define nlm_set_public_section_func(bfd)   (nlm_backend (bfd) -> nlm_set_public_section)
#define nlm_get_public_offset_func(bfd)    (nlm_backend (bfd) -> nlm_get_public_offset)
#define nlm_get_public_offset_func(bfd)    (nlm_backend (bfd) -> nlm_get_public_offset)
#define nlm_swap_fixed_header_in_func(bfd) (nlm_backend (bfd) -> nlm_swap_fhdr_in)
#define nlm_swap_fixed_header_in_func(bfd) (nlm_backend (bfd) -> nlm_swap_fhdr_in)
#define nlm_swap_fixed_header_out_func(bfd)(nlm_backend (bfd) -> nlm_swap_fhdr_out)
#define nlm_swap_fixed_header_out_func(bfd)(nlm_backend (bfd) -> nlm_swap_fhdr_out)
#define nlm_write_external_func(bfd)       (nlm_backend (bfd) -> nlm_write_external)
#define nlm_write_external_func(bfd)       (nlm_backend (bfd) -> nlm_write_external)
#define nlm_write_export_func(bfd)         (nlm_backend (bfd) -> nlm_write_export)
#define nlm_write_export_func(bfd)         (nlm_backend (bfd) -> nlm_write_export)
 
 
/* The NLM code, data, and uninitialized sections have no names defined
/* The NLM code, data, and uninitialized sections have no names defined
   in the NLM, but bfd wants to give them names, so use the traditional
   in the NLM, but bfd wants to give them names, so use the traditional
   UNIX names.  */
   UNIX names.  */
 
 
#define NLM_CODE_NAME                   ".text"
#define NLM_CODE_NAME                   ".text"
#define NLM_INITIALIZED_DATA_NAME       ".data"
#define NLM_INITIALIZED_DATA_NAME       ".data"
#define NLM_UNINITIALIZED_DATA_NAME     ".bss"
#define NLM_UNINITIALIZED_DATA_NAME     ".bss"
 
 
#endif /* _LIBNLM_H_ */
#endif /* _LIBNLM_H_ */
 
 

powered by: WebSVN 2.1.0

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