Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2012-05-03 17:12:06 +0400
committerNick Clifton <nickc@redhat.com>2012-05-03 17:12:06 +0400
commit1c46670094d3fb8c10bc4663f3efb587c47cb39d (patch)
tree75eef98edd071943241173e7858282d05883727e /include
parent00a76ece10b91c8f6664de0ddd36af596ccac3c8 (diff)
Add support for Motorola XGATE embedded CPU
Diffstat (limited to 'include')
-rw-r--r--include/ChangeLog6
-rw-r--r--include/dis-asm.h1
-rw-r--r--include/elf/ChangeLog4
-rw-r--r--include/elf/xgate.h77
-rw-r--r--include/opcode/ChangeLog4
-rw-r--r--include/opcode/xgate.h120
6 files changed, 212 insertions, 0 deletions
diff --git a/include/ChangeLog b/include/ChangeLog
index e3b178811..7a747a7cc 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,9 @@
+2012-05-03 Sean Keys <skeys@ipdatasys.com>
+
+ * dis-asm.h (print_insn_xgate): Define.
+ (print_insn_xgate): Ditto.
+ Added new files for XGATE port.
+
2012-05-02 Cary Coutant <ccoutant@google.com>
* dwarf2.def: Remove DW_FORM_GNU_ref_index,
diff --git a/include/dis-asm.h b/include/dis-asm.h
index c9cbfbb32..203b11366 100644
--- a/include/dis-asm.h
+++ b/include/dis-asm.h
@@ -293,6 +293,7 @@ extern int print_insn_v850 (bfd_vma, disassemble_info *);
extern int print_insn_vax (bfd_vma, disassemble_info *);
extern int print_insn_w65 (bfd_vma, disassemble_info *);
extern int print_insn_xc16x (bfd_vma, disassemble_info *);
+extern int print_insn_xgate (bfd_vma, disassemble_info *);
extern int print_insn_xstormy16 (bfd_vma, disassemble_info *);
extern int print_insn_xtensa (bfd_vma, disassemble_info *);
extern int print_insn_z80 (bfd_vma, disassemble_info *);
diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog
index eb6edc55c..ab9b2deae 100644
--- a/include/elf/ChangeLog
+++ b/include/elf/ChangeLog
@@ -1,3 +1,7 @@
+2012-05-03 Sean Keys <skeys@ipdatasys.com>
+
+ * xgate.h: Mininal file to support XGATE relocations.
+
2012-04-27 David S. Miller <davem@davemloft.net>
* sparc.h: Add new ELF_SPARC_HWCAP_* defines for crypto,
diff --git a/include/elf/xgate.h b/include/elf/xgate.h
new file mode 100644
index 000000000..33286a8d0
--- /dev/null
+++ b/include/elf/xgate.h
@@ -0,0 +1,77 @@
+/* XGATE ELF support for BFD.
+ Copyright 2010, 2011, 2012 Free Software Foundation, Inc.
+
+ This file is part of BFD, the Binary File Descriptor library.
+
+ This program 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 of the License, or
+ (at your option) any later version.
+
+ This program 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 this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#ifndef _ELF_XGATE_H
+#define _ELF_XGATE_H
+
+#include "elf/reloc-macros.h"
+
+/* Relocation types. */
+START_RELOC_NUMBERS (elf_xgate_reloc_type)
+ RELOC_NUMBER (R_XGATE_NONE, 0)
+ RELOC_NUMBER (R_XGATE_8, 1)
+ RELOC_NUMBER (R_XGATE_PCREL_8, 2)
+ RELOC_NUMBER (R_XGATE_16, 3)
+ RELOC_NUMBER (R_XGATE_32, 4)
+ RELOC_NUMBER (R_XGATE_PCREL_16, 5)
+ /* These are GNU extensions to enable C++ vtable garbage collection. */
+ RELOC_NUMBER (R_XGATE_GNU_VTINHERIT, 6)
+ RELOC_NUMBER (R_XGATE_GNU_VTENTRY, 7)
+
+ RELOC_NUMBER (R_XGATE_24, 8)
+ RELOC_NUMBER (R_XGATE_LO16, 9)
+ RELOC_NUMBER (R_XGATE_GPAGE, 10)
+ RELOC_NUMBER (R_XGATE_PCREL_9, 11)
+ RELOC_NUMBER (R_XGATE_PCREL_10, 12)
+ RELOC_NUMBER (R_XGATE_IMM8_LO, 13)
+ RELOC_NUMBER (R_XGATE_IMM8_HI, 14)
+ RELOC_NUMBER (R_XGATE_IMM3, 15)
+ RELOC_NUMBER (R_XGATE_IMM4, 16)
+ RELOC_NUMBER (R_XGATE_IMM5, 17)
+
+ /* GNU extension for linker relaxation.
+ Mark beginning of a jump instruction (any form). */
+ RELOC_NUMBER (R_XGATE_RL_JUMP, 18)
+
+ /* Mark beginning of Gcc relaxation group instruction. */
+ RELOC_NUMBER (R_XGATE_RL_GROUP, 19)
+END_RELOC_NUMBERS (R_XGATE_max)
+
+/* Processor specific flags for the ELF header e_flags field. */
+
+/* ABI identification. */
+#define EF_XGATE_ABI 0x00000000F
+
+/* Integers are 32-bit long. */
+#define E_XGATE_I32 0x000000001
+
+/* Doubles are 64-bit long. */
+#define E_XGATE_F64 0x000000002
+
+#define EF_XGATE_MACH_MASK 0xF0
+
+#define EF_XGATE_MACH 0x80 /* XGATE microcontroller. */
+
+#define E_M68HCS12X_GLOBAL 0x100
+
+/* Identify interrupt handlers. This is used by the debugger to
+ correctly compute the stack frame. */
+#define STO_XGATE_INTERRUPT 0x40
+
+#endif
diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog
index d4fb38402..af70340d6 100644
--- a/include/opcode/ChangeLog
+++ b/include/opcode/ChangeLog
@@ -1,3 +1,7 @@
+2012-05-03 Sean Keys <skeys@ipdatasys.com>
+
+ * xgate.h: Header file for XGATE assembler.
+
2012-04-27 David S. Miller <davem@davemloft.net>
* sparc.h: Document new arg code' )' for crypto RS3
diff --git a/include/opcode/xgate.h b/include/opcode/xgate.h
new file mode 100644
index 000000000..c51673342
--- /dev/null
+++ b/include/opcode/xgate.h
@@ -0,0 +1,120 @@
+/* xgate.h -- Freescale XGATE opcode list
+ Copyright 2010, 2011, 2012 Free Software Foundation, Inc.
+ Written by Sean Keys (skeys@ipdatasys.com)
+
+ This file is part of the GNU opcodes library.
+
+ 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
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ It 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 this file; see the file COPYING. If not, write to the
+ Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
+ MA 02110-1301, USA. */
+
+#ifndef _OPCODE_XGATE_H
+#define _OPCODE_XGATE_H
+
+/* XGATE CCR flag definitions. */
+#define XGATE_N_BIT 0x08 /* XGN - Sign Flag */
+#define XGATE_Z_BIT 0x04 /* XGZ - Zero Flag */
+#define XGATE_V_BIT 0x02 /* XGV - Overflow Flag */
+#define XGATE_C_BIT 0x01 /* XGC - Carry Flag */
+
+/* Access Detail Notation
+ V — Vector fetch: always an aligned word read, lasts for at least one RISC core cycle
+ P — Program word fetch: always an aligned word read, lasts for at least one RISC core cycle
+ r — 8-bit data read: lasts for at least one RISC core cycle
+ R — 16-bit data read: lasts for at least one RISC core cycle
+ w — 8-bit data write: lasts for at least one RISC core cycle
+ W — 16-bit data write: lasts for at least one RISC core cycle
+ A — Alignment cycle: no read or write, lasts for zero or one RISC core cycles
+ f — Free cycle: no read or write, lasts for one RISC core cycles. */
+#define XGATE_CYCLE_V 0x01
+#define XGATE_CYCLE_P 0x02
+#define XGATE_CYCLE_r 0x04
+#define XGATE_CYCLE_R 0x08
+#define XGATE_CYCLE_w 0x10
+#define XGATE_CYCLE_W 0x20
+#define XGATE_CYCLE_A 0x40
+#define XGATE_CYCLE_f 0x80
+
+/* Opcode format abbreviations. */
+#define XG_INH 0x0001 /* Inherent. */
+#define XG_I 0x0002 /* 3-bit immediate address. */
+#define XG_R_I 0x0004 /* Register followed by 4/8-bit immediate value. */
+#define XG_R_R 0x0008 /* Register followed by a register. */
+#define XG_R_R_R 0x0010 /* Register followed by two registers. */
+#define XG_R 0x0020 /* Single register. */
+#define XG_PC 0x0040 /* PC relative 10 or 11 bit. */
+#define XG_R_C 0x0080 /* General register followed by ccr register. */
+#define XG_C_R 0x0100 /* CCR register followed by a general register. */
+#define XG_R_P 0x0200 /* General register followed by pc register. */
+#define XG_R_R_I 0x0400 /* Two general registers followed by an immediate value. */
+#define XG_PCREL 0x0800 /* Immediate value that is relative to the current pc. */
+
+/* XGATE operand formats as stored in the XGATE_opcode table.
+ They are only used by GAS to recognize operands. */
+#define XGATE_OP_INH ""
+#define XGATE_OP_TRI "r,r,r"
+#define XGATE_OP_DYA "r,r"
+#define XGATE_OP_IMM16 "r,if"
+#define XGATE_OP_IMM8 "r,i8"
+#define XGATE_OP_IMM4 "r,i4"
+#define XGATE_OP_IMM3 "i3"
+#define XGATE_OP_MON "r"
+#define XGATE_OP_MON_R_C "r,c"
+#define XGATE_OP_MON_C_R "c,r"
+#define XGATE_OP_MON_R_P "r,p"
+#define XGATE_OP_IDR "r,r,+"
+#define XGATE_OP_IDO5 "r,r,i5"
+#define XGATE_OP_REL9 "b9"
+#define XGATE_OP_REL10 "ba"
+#define XGATE_OP_DYA_MON "=r,r"
+/* Macro definitions. */
+#define XGATE_OP_IMM16mADD "r,if; addl addh"
+#define XGATE_OP_IMM16mAND "r,if; andl andh"
+#define XGATE_OP_IMM16mCPC "r,if; cmpl cpch"
+#define XGATE_OP_IMM16mSUB "r,if; subl subh"
+#define XGATE_OP_IMM16mLDW "r,if; ldl ldh"
+
+/* CPU variant identification. */
+#define XGATE_V1 0x1
+#define XGATE_V2 0x2
+#define XGATE_V3 0x4
+
+/* Max opcodes per opcode handle. */
+#define MAX_OPCODES 0x05
+
+#define MAX_DETECT_CHARS 0x10
+
+/* The opcode table definitions. */
+struct xgate_opcode
+{
+ char * name; /* Op-code name. */
+ char * constraints; /* Constraint chars. */
+ char * format; /* Bit definitions. */
+ unsigned int sh_format; /* Shorthand format mask. */
+ unsigned int size; /* Opcode size in bytes. */
+ unsigned int bin_opcode; /* Binary opcode with operands masked off. */
+ unsigned char cycles_min; /* Minimum cpu cycles needed. */
+ unsigned char cycles_max; /* Maximum cpu cycles needed. */
+ unsigned char set_flags_mask; /* CCR flags set. */
+ unsigned char clr_flags_mask; /* CCR flags cleared. */
+ unsigned char chg_flags_mask; /* CCR flags changed. */
+ unsigned char arch; /* CPU variant. */
+};
+
+/* The opcode table. The table contains all the opcodes (all pages).
+ You can't rely on the order. */
+extern const struct xgate_opcode xgate_opcodes[];
+extern const int xgate_num_opcodes;
+
+#endif /* _OPCODE_XGATE_H */