* arm-dis.c (print_insn_big_arm): Check for thumb symbol

attributes.
        (print_insn_little_arm): Likewise.
This commit is contained in:
Catherine Moore 1998-08-10 01:27:05 +00:00
parent a582ac33a3
commit 0ff7faafe6
3 changed files with 113 additions and 20 deletions

View File

@ -186,6 +186,34 @@ else
done
fi
armelf_files="ChangeLog arm-dis.c"
if ( echo $* | grep keep\-armelf > /dev/null ) ; then
for i in $armelf_files ; do
if test ! -d $i && (grep sanitize-armelf $i > /dev/null) ; then
if [ -n "${verbose}" ] ; then
echo Keeping armelf stuff in $i
fi
fi
done
else
for i in $armelf_files ; do
if test ! -d $i && (grep sanitize-armelf $i > /dev/null) ; then
if [ -n "${verbose}" ] ; then
echo Removing traces of \"armelf\" from $i...
fi
cp $i new
sed '/start\-sanitize\-armelf/,/end-\sanitize\-armelf/d' < $i > new
if [ -n "${safe}" -a ! -f .Recover/$i ] ; then
if [ -n "${verbose}" ] ; then
echo Caching $i in .Recover...
fi
mv $i .Recover
fi
mv new $i
fi
done
fi
v850e_files="ChangeLog Makefile.in Makefile.am configure.in configure disassemble.c v850-opc.c v850-dis.c"
if ( echo $* | grep keep\-v850e > /dev/null ) ; then
for i in $v850e_files ; do

View File

@ -1,3 +1,11 @@
start-sanitize-armelf
Sun Aug 9 20:17:28 1998 Catherine Moore <clm@cygnus.com>
* arm-dis.c (print_insn_big_arm): Check for thumb symbol
attributes.
(print_insn_little_arm): Likewise.
end-sanitize-armelf
Mon Aug 3 12:43:16 1998 Doug Evans <devans@seba.cygnus.com>
Move all global state data into opcode table struct, and treat

View File

@ -1,5 +1,5 @@
/* Instruction printing code for the ARM
Copyright (C) 1994, 95, 96, 1997 Free Software Foundation, Inc.
Copyright (C) 1994, 95, 96, 97, 1998 Free Software Foundation, Inc.
Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org)
Modification by James G. Smith (jsmith@cygnus.co.uk)
@ -24,6 +24,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "arm-opc.h"
#include "coff/internal.h"
#include "libcoff.h"
#include "opintl.h"
/* start-sanitize-armelf */
/* FIXME: This shouldn't be done here */
#include "elf-bfd.h"
#include "elf/internal.h"
/* end-sanitize-armelf */
static char *arm_conditional[] =
{"eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc",
@ -308,9 +315,12 @@ print_insn_arm (pc, info, given)
case 'C':
switch (given & 0x00090000)
{
case 0:
default:
func (stream, "_???");
break;
case 0x90000:
func (stream, "_all");
break;
case 0x10000:
func (stream, "_ctl");
break;
@ -350,7 +360,7 @@ print_insn_arm (pc, info, given)
func (stream, "e");
break;
default:
func (stream, "<illegal precision>");
func (stream, _("<illegal precision>"));
break;
}
break;
@ -639,7 +649,11 @@ print_insn_thumb (pc, info, given)
break;
case 'a':
info->print_address_func (((pc + 4) & ~1) + (reg << 2), info);
/* PC-relative address -- the bottom two
bits of the address are dropped before
the calculation. */
info->print_address_func
(((pc + 4) & ~3) + (reg << 2), info);
break;
case 'x':
@ -709,16 +723,37 @@ print_insn_big_arm (pc, info)
unsigned char b[4];
long given;
int status;
coff_symbol_type * cs;
coff_symbol_type *cs;
/* start-sanitize-armelf */
elf_symbol_type *es;
/* end-sanitize-armelf */
int is_thumb;
cs = coffsymbol (*info->symbols);
is_thumb = (cs != NULL) &&
( cs->native->u.syment.n_sclass == C_THUMBEXT
|| cs->native->u.syment.n_sclass == C_THUMBSTAT
|| cs->native->u.syment.n_sclass == C_THUMBLABEL
|| cs->native->u.syment.n_sclass == C_THUMBEXTFUNC
|| cs->native->u.syment.n_sclass == C_THUMBSTATFUNC);
is_thumb = false;
if (info->symbols != NULL)
{
if (bfd_asymbol_flavour (*info->symbols) == bfd_target_coff_flavour)
{
cs = coffsymbol (*info->symbols);
is_thumb = (cs->native->u.syment.n_sclass == C_THUMBEXT
|| cs->native->u.syment.n_sclass == C_THUMBSTAT
|| cs->native->u.syment.n_sclass == C_THUMBLABEL
|| cs->native->u.syment.n_sclass == C_THUMBEXTFUNC
|| cs->native->u.syment.n_sclass == C_THUMBSTATFUNC);
}
/* start-sanitize-armelf */
else if (bfd_asymbol_flavour (*info->symbols) == bfd_target_elf_flavour)
{
es = *(elf_symbol_type **)(info->symbols);
is_thumb = (es->internal_elf_sym.st_other == C_THUMBEXT
|| es->internal_elf_sym.st_other == C_THUMBSTAT
|| es->internal_elf_sym.st_other == C_THUMBLABEL
|| es->internal_elf_sym.st_other == C_THUMBEXTFUNC
|| es->internal_elf_sym.st_other == C_THUMBSTATFUNC);
}
/* end-sanitize-armelf */
}
info->bytes_per_chunk = 4;
info->display_endian = BFD_ENDIAN_BIG;
@ -777,16 +812,38 @@ print_insn_little_arm (pc, info)
unsigned char b[4];
long given;
int status;
coff_symbol_type * cs;
coff_symbol_type *cs;
/* start-sanitize-armelf */
elf_symbol_type *es;
/* end-sanitize-armelf */
int is_thumb;
is_thumb = false;
if (info->symbols != NULL)
{
if (bfd_asymbol_flavour (*info->symbols) == bfd_target_coff_flavour)
{
cs = coffsymbol (*info->symbols);
is_thumb = (cs->native->u.syment.n_sclass == C_THUMBEXT
|| cs->native->u.syment.n_sclass == C_THUMBSTAT
|| cs->native->u.syment.n_sclass == C_THUMBLABEL
|| cs->native->u.syment.n_sclass == C_THUMBEXTFUNC
|| cs->native->u.syment.n_sclass == C_THUMBSTATFUNC);
}
/* start-sanitize-armelf */
else if (bfd_asymbol_flavour (*info->symbols) == bfd_target_elf_flavour)
{
es = *(elf_symbol_type **)(info->symbols);
is_thumb = (es->internal_elf_sym.st_other == C_THUMBEXT
|| es->internal_elf_sym.st_other == C_THUMBSTAT
|| es->internal_elf_sym.st_other == C_THUMBLABEL
|| es->internal_elf_sym.st_other == C_THUMBEXTFUNC
|| es->internal_elf_sym.st_other == C_THUMBSTATFUNC);
}
/* end-sanitize-armelf */
}
cs = coffsymbol (*info->symbols);
is_thumb = (cs != NULL) &&
( cs->native->u.syment.n_sclass == C_THUMBEXT
|| cs->native->u.syment.n_sclass == C_THUMBSTAT
|| cs->native->u.syment.n_sclass == C_THUMBLABEL
|| cs->native->u.syment.n_sclass == C_THUMBEXTFUNC
|| cs->native->u.syment.n_sclass == C_THUMBSTATFUNC);
info->bytes_per_chunk = 4;
info->display_endian = BFD_ENDIAN_LITTLE;