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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [binutils-2.18.50/] [opcodes/] [dis-buf.c] - Diff between revs 156 and 816

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

Rev 156 Rev 816
/* Disassemble from a buffer, for GNU.
/* Disassemble from a buffer, for GNU.
   Copyright 1993, 1994, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005,
   Copyright 1993, 1994, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005,
   2007  Free Software Foundation, Inc.
   2007  Free Software Foundation, Inc.
 
 
   This file is part of the GNU opcodes library.
   This file is part of the GNU opcodes library.
 
 
   This library is free software; you can redistribute it and/or modify
   This library 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, or (at your option)
   the Free Software Foundation; either version 3, or (at your option)
   any later version.
   any later version.
 
 
   It is distributed in the hope that it will be useful, but WITHOUT
   It is distributed in the hope that it will be useful, but WITHOUT
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
   License for more details.
   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.  */
 
 
#include "sysdep.h"
#include "sysdep.h"
#include "dis-asm.h"
#include "dis-asm.h"
#include <errno.h>
#include <errno.h>
#include "opintl.h"
#include "opintl.h"
 
 
/* Get LENGTH bytes from info's buffer, at target address memaddr.
/* Get LENGTH bytes from info's buffer, at target address memaddr.
   Transfer them to myaddr.  */
   Transfer them to myaddr.  */
int
int
buffer_read_memory (bfd_vma memaddr,
buffer_read_memory (bfd_vma memaddr,
                    bfd_byte *myaddr,
                    bfd_byte *myaddr,
                    unsigned int length,
                    unsigned int length,
                    struct disassemble_info *info)
                    struct disassemble_info *info)
{
{
  unsigned int opb = info->octets_per_byte;
  unsigned int opb = info->octets_per_byte;
  unsigned int end_addr_offset = length / opb;
  unsigned int end_addr_offset = length / opb;
  unsigned int max_addr_offset = info->buffer_length / opb;
  unsigned int max_addr_offset = info->buffer_length / opb;
  unsigned int octets = (memaddr - info->buffer_vma) * opb;
  unsigned int octets = (memaddr - info->buffer_vma) * opb;
 
 
  if (memaddr < info->buffer_vma
  if (memaddr < info->buffer_vma
      || memaddr - info->buffer_vma + end_addr_offset > max_addr_offset)
      || memaddr - info->buffer_vma + end_addr_offset > max_addr_offset)
    /* Out of bounds.  Use EIO because GDB uses it.  */
    /* Out of bounds.  Use EIO because GDB uses it.  */
    return EIO;
    return EIO;
  memcpy (myaddr, info->buffer + octets, length);
  memcpy (myaddr, info->buffer + octets, length);
 
 
  return 0;
  return 0;
}
}
 
 
/* Print an error message.  We can assume that this is in response to
/* Print an error message.  We can assume that this is in response to
   an error return from buffer_read_memory.  */
   an error return from buffer_read_memory.  */
 
 
void
void
perror_memory (int status,
perror_memory (int status,
               bfd_vma memaddr,
               bfd_vma memaddr,
               struct disassemble_info *info)
               struct disassemble_info *info)
{
{
  if (status != EIO)
  if (status != EIO)
    /* Can't happen.  */
    /* Can't happen.  */
    info->fprintf_func (info->stream, _("Unknown error %d\n"), status);
    info->fprintf_func (info->stream, _("Unknown error %d\n"), status);
  else
  else
    {
    {
      char buf[30];
      char buf[30];
 
 
      /* Actually, address between memaddr and memaddr + len was
      /* Actually, address between memaddr and memaddr + len was
         out of bounds.  */
         out of bounds.  */
      sprintf_vma (buf, memaddr);
      sprintf_vma (buf, memaddr);
      info->fprintf_func (info->stream,
      info->fprintf_func (info->stream,
                          _("Address 0x%s is out of bounds.\n"), buf);
                          _("Address 0x%s is out of bounds.\n"), buf);
    }
    }
}
}
 
 
/* This could be in a separate file, to save miniscule amounts of space
/* This could be in a separate file, to save miniscule amounts of space
   in statically linked executables.  */
   in statically linked executables.  */
 
 
/* Just print the address is hex.  This is included for completeness even
/* Just print the address is hex.  This is included for completeness even
   though both GDB and objdump provide their own (to print symbolic
   though both GDB and objdump provide their own (to print symbolic
   addresses).  */
   addresses).  */
 
 
void
void
generic_print_address (bfd_vma addr, struct disassemble_info *info)
generic_print_address (bfd_vma addr, struct disassemble_info *info)
{
{
  char buf[30];
  char buf[30];
 
 
  sprintf_vma (buf, addr);
  sprintf_vma (buf, addr);
  (*info->fprintf_func) (info->stream, "0x%s", buf);
  (*info->fprintf_func) (info->stream, "0x%s", buf);
}
}
 
 
/* Just return true.  */
/* Just return true.  */
 
 
int
int
generic_symbol_at_address (bfd_vma addr ATTRIBUTE_UNUSED,
generic_symbol_at_address (bfd_vma addr ATTRIBUTE_UNUSED,
                           struct disassemble_info *info ATTRIBUTE_UNUSED)
                           struct disassemble_info *info ATTRIBUTE_UNUSED)
{
{
  return 1;
  return 1;
}
}
 
 
/* Just return TRUE.  */
/* Just return TRUE.  */
 
 
bfd_boolean
bfd_boolean
generic_symbol_is_valid (asymbol * sym ATTRIBUTE_UNUSED,
generic_symbol_is_valid (asymbol * sym ATTRIBUTE_UNUSED,
                         struct disassemble_info *info ATTRIBUTE_UNUSED)
                         struct disassemble_info *info ATTRIBUTE_UNUSED)
{
{
  return TRUE;
  return TRUE;
}
}
 
 

powered by: WebSVN 2.1.0

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