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 */