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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-6.8/] [opcodes/] [vax-dis.c] - Diff between revs 157 and 225

Show entire file | Details | Blame | View Log

Rev 157 Rev 225
Line 1... Line 1...
/* Print VAX instructions.
/* Print VAX instructions.
   Copyright 1995, 1998, 2000, 2001, 2002, 2005, 2007
   Copyright 1995, 1998, 2000, 2001, 2002, 2005, 2007, 2009
   Free Software Foundation, Inc.
   Free Software Foundation, Inc.
   Contributed by Pauline Middelink <middelin@polyware.iaf.nl>
   Contributed by Pauline Middelink <middelin@polyware.iaf.nl>
 
 
   This file is part of the GNU opcodes library.
   This file is part of the GNU opcodes library.
 
 
Line 169... Line 169...
      entry_addr = NULL;
      entry_addr = NULL;
      entry_addr_occupied_slots = entry_addr_total_slots = 0;
      entry_addr_occupied_slots = entry_addr_total_slots = 0;
    }
    }
}
}
#endif
#endif
/* Check if the given address is a known function entry. Either there must
/* Check if the given address is a known function entry point.  This is
   be a symbol of function type at this address, or the address must be
   the case if there is a symbol of the function type at this address.
   a forced entry point.  The later helps in disassembling ROM images, because
   We also check for synthetic symbols as these are used for PLT entries
   there's no symbol table at all.  Forced entry points can be given by
   (weak undefined symbols may not have the function type set).  Finally
   supplying several -M options to objdump: -M entry:0xffbb7730.  */
   the address may have been forced to be treated as an entry point.  The
 
   latter helps in disassembling ROM images, because there's no symbol
 
   table at all.  Forced entry points can be given by supplying several
 
   -M options to objdump: -M entry:0xffbb7730.  */
 
 
static bfd_boolean
static bfd_boolean
is_function_entry (struct disassemble_info *info, bfd_vma addr)
is_function_entry (struct disassemble_info *info, bfd_vma addr)
{
{
  unsigned int i;
  unsigned int i;
 
 
  /* Check if there's a BSF_FUNCTION symbol at our address.  */
  /* Check if there's a function or PLT symbol at our address.  */
  if (info->symbols
  if (info->symbols
      && info->symbols[0]
      && info->symbols[0]
      && (info->symbols[0]->flags & BSF_FUNCTION)
      && (info->symbols[0]->flags & (BSF_FUNCTION | BSF_SYNTHETIC))
      && addr == bfd_asymbol_value (info->symbols[0]))
      && addr == bfd_asymbol_value (info->symbols[0]))
    return TRUE;
    return TRUE;
 
 
  /* Check for forced function entry address.  */
  /* Check for forced function entry address.  */
  for (i = entry_addr_occupied_slots; i--;)
  for (i = entry_addr_occupied_slots; i--;)
Line 195... Line 198...
      return TRUE;
      return TRUE;
 
 
  return FALSE;
  return FALSE;
}
}
 
 
 
/* Check if the given address is the last longword of a PLT entry.
 
   This longword is data and depending on the value it may interfere
 
   with disassembly of further PLT entries.  We make use of the fact
 
   PLT symbols are marked BSF_SYNTHETIC.  */
 
static bfd_boolean
 
is_plt_tail (struct disassemble_info *info, bfd_vma addr)
 
{
 
  if (info->symbols
 
      && info->symbols[0]
 
      && (info->symbols[0]->flags & BSF_SYNTHETIC)
 
      && addr == bfd_asymbol_value (info->symbols[0]) + 8)
 
    return TRUE;
 
 
 
  return FALSE;
 
}
 
 
static int
static int
print_insn_mode (const char *d,
print_insn_mode (const char *d,
                 int size,
                 int size,
                 unsigned char *p0,
                 unsigned char *p0,
                 bfd_vma addr,  /* PC for this arg to be relative to.  */
                 bfd_vma addr,  /* PC for this arg to be relative to.  */
Line 410... Line 429...
      (*info->fprintf_func) (info->stream, " >");
      (*info->fprintf_func) (info->stream, " >");
 
 
      return 2;
      return 2;
    }
    }
 
 
 
  /* Decode PLT entry offset longword.  */
 
  if (is_plt_tail (info, memaddr))
 
    {
 
      int offset;
 
 
 
      FETCH_DATA (info, buffer + 4);
 
      offset = buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];
 
      (*info->fprintf_func) (info->stream, ".long 0x%08x", offset);
 
 
 
      return 4;
 
    }
 
 
  for (votp = &votstrs[0]; votp->name[0]; votp++)
  for (votp = &votstrs[0]; votp->name[0]; votp++)
    {
    {
      vax_opcodeT opcode = votp->detail.code;
      vax_opcodeT opcode = votp->detail.code;
 
 
      /* 2 byte codes match 2 buffer pos. */
      /* 2 byte codes match 2 buffer pos. */

powered by: WebSVN 2.1.0

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