Add Xtensa port (omitted from previous delta)
authorNick Clifton <nickc@redhat.com>
Tue, 1 Apr 2003 15:53:47 +0000 (15:53 +0000)
committerNick Clifton <nickc@redhat.com>
Tue, 1 Apr 2003 15:53:47 +0000 (15:53 +0000)
binutils/ChangeLog
binutils/readelf.c
gas/config/xtensa-istack.h [new file with mode: 0644]

index 6b7981b8f7358a816a4975c58e9bee7ae801ce5d..1be9e59e2bf09bc41f4c0f481232644d2995be09 100644 (file)
@@ -1,3 +1,12 @@
+2003-04-01  Bob Wilson  <bob.wilson@acm.org>
+
+        * 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  <nickc@redhat.com>
 
        * configure.in: Change "arm-pe*" to "arm-*-pe*".  Similarly for
index 00672c16270f23bb4479eacb00207b072fe02312..16733d91693d0bb149b9fb025d1b3e73bfb30472 100644 (file)
@@ -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, _("<unknown>: %x"), e_machine);
       return buff;
diff --git a/gas/config/xtensa-istack.h b/gas/config/xtensa-istack.h
new file mode 100644 (file)
index 0000000..a1cca2e
--- /dev/null
@@ -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 */