From 88da68203dc31691946aa14e84c1728125febc0a Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 1 Apr 2003 15:53:47 +0000 Subject: [PATCH] Add Xtensa port (omitted from previous delta) --- binutils/ChangeLog | 9 +++++ binutils/readelf.c | 10 ++++++ gas/config/xtensa-istack.h | 73 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+) create mode 100644 gas/config/xtensa-istack.h diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 6b7981b8f73..1be9e59e2bf 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,12 @@ +2003-04-01 Bob Wilson + + * readelf.c: Include "elf/xtensa.h". + (guess_is_rela): Add EM_XTENSA and EM_XTENSA_OLD to list of + targets that use RELA relocations. + (dump_relocations): Call elf_xtensa_reloc_type for + EM_XTENSA and EM_XTENSA_OLD. + (get_machine_name): Handle EM_XTENSA and EM_XTENSA_OLD. + 2003-04-01 Nick Clifton * configure.in: Change "arm-pe*" to "arm-*-pe*". Similarly for diff --git a/binutils/readelf.c b/binutils/readelf.c index 00672c16270..16733d91693 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -88,6 +88,7 @@ #include "elf/x86-64.h" #include "elf/xstormy16.h" #include "elf/iq2000.h" +#include "elf/xtensa.h" #include "bucomm.h" #include "getopt.h" @@ -771,6 +772,8 @@ guess_is_rela (e_machine) case EM_IP2K: case EM_IP2K_OLD: case EM_IQ2000: + case EM_XTENSA: + case EM_XTENSA_OLD: return TRUE; case EM_MMA: @@ -1272,6 +1275,11 @@ dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela) case EM_IQ2000: rtype = elf_iq2000_reloc_type (type); break; + + case EM_XTENSA_OLD: + case EM_XTENSA: + rtype = elf_xtensa_reloc_type (type); + break; } if (rtype == NULL) @@ -1757,6 +1765,8 @@ get_machine_name (e_machine) case EM_IP2K_OLD: case EM_IP2K: return "Ubicom IP2xxx 8-bit microcontrollers"; case EM_IQ2000: return "Vitesse IQ2000"; + case EM_XTENSA_OLD: + case EM_XTENSA: return "Tensilica Xtensa Processor"; default: sprintf (buff, _(": %x"), e_machine); return buff; diff --git a/gas/config/xtensa-istack.h b/gas/config/xtensa-istack.h new file mode 100644 index 00000000000..a1cca2ea702 --- /dev/null +++ b/gas/config/xtensa-istack.h @@ -0,0 +1,73 @@ +/* Declarations for stacks of tokenized Xtensa instructions. + Copyright (C) 2003 Free Software Foundation, Inc. + + This file is part of GAS, the GNU Assembler. + + GAS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GAS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GAS; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +#ifndef XTENSA_ISTACK_H +#define XTENSA_ISTACK_H + +#include "xtensa-isa.h" + +#define MAX_ISTACK 12 +#define MAX_INSN_ARGS 6 + +enum itype_enum +{ + ITYPE_INSN, + ITYPE_LITERAL, + ITYPE_LABEL +}; + + +/* Literals have 1 token and no opcode. + Labels have 1 token and no opcode. */ + +typedef struct tinsn_struct +{ + enum itype_enum insn_type; + + bfd_boolean is_specific_opcode; + xtensa_opcode opcode; /* Literals have an invalid opcode. */ + int ntok; + expressionS tok[MAX_INSN_ARGS]; +} TInsn; + + +/* tinsn_stack: This is a stack of instructions to be placed. */ + +typedef struct tinsn_stack +{ + int ninsn; + TInsn insn[MAX_ISTACK]; +} IStack; + + +void istack_init PARAMS ((IStack *)); +bfd_boolean istack_empty PARAMS ((IStack *)); +bfd_boolean istack_full PARAMS ((IStack *)); +TInsn * istack_top PARAMS ((IStack *)); +void istack_push PARAMS ((IStack *, TInsn *)); +TInsn * istack_push_space PARAMS ((IStack *)); +void istack_pop PARAMS ((IStack *)); + +/* TInsn utilities. */ +void tinsn_init PARAMS ((TInsn *)); +void tinsn_copy PARAMS ((TInsn *, const TInsn *)); +expressionS *tinsn_get_tok PARAMS ((TInsn *, int)); + +#endif /* !XTENSA_ISTACK_H */ -- 2.30.2