public inbox for libc-ports@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v2 1/2] Add MicroBlaze support to elf/elf.h
       [not found] <1364652885-28535-1-git-send-email-david.holsgrove@xilinx.com>
@ 2013-03-30 14:30 ` David Holsgrove
  2013-04-08 22:15   ` Roland McGrath
  2013-03-30 14:31 ` [PATCH v2 2/2] Add MicroBlaze Port David Holsgrove
  1 sibling, 1 reply; 14+ messages in thread
From: David Holsgrove @ 2013-03-30 14:30 UTC (permalink / raw)
  To: libc-alpha, libc-ports
  Cc: joseph, david.holsgrove, john.williams, edgar.iglesias,
	vinod.kathail, vidhumouli.hunsigida, nagaraju.mekala, tom.shui

Changelog

2013-03-30  David Holsgrove  <david.holsgrove@xilinx.com>

	* elf/elf.h: Add EM_MICROBLAZE and MicroBlaze relocations.

Signed-off-by: David Holsgrove <david.holsgrove@xilinx.com>
---
 elf/elf.h |   32 ++++++++++++++++++++++++++++++++
 1 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/elf/elf.h b/elf/elf.h
index d096a97..4adfd63 100644
--- a/elf/elf.h
+++ b/elf/elf.h
@@ -251,6 +251,7 @@ typedef struct
 #define EM_XTENSA	94		/* Tensilica Xtensa Architecture */
 #define EM_AARCH64	183		/* ARM AARCH64 */
 #define EM_TILEPRO	188		/* Tilera TILEPro */
+#define EM_MICROBLAZE	189		/* Xilinx MicroBlaze 32-bit RISC soft processor core */
 #define EM_TILEGX	191		/* Tilera TILE-Gx */
 #define EM_NUM		192
 
@@ -2955,6 +2956,37 @@ typedef Elf32_Addr Elf32_Conflict;
 #define R_M32R_GOTOFF_LO	64	/* Low 16 bit offset to GOT */
 #define R_M32R_NUM		256	/* Keep this the last entry. */
 
+/* MicroBlaze relocations */
+#define R_MICROBLAZE_NONE		0	/* No reloc. */
+#define R_MICROBLAZE_32 		1	/* Direct 32 bit. */
+#define R_MICROBLAZE_32_PCREL		2	/* PC relative 32 bit. */
+#define R_MICROBLAZE_64_PCREL		3	/* PC relative 64 bit. */
+#define R_MICROBLAZE_32_PCREL_LO	4	/* Low 16 bits of PCREL32. */
+#define R_MICROBLAZE_64 		5	/* Direct 64 bit. */
+#define R_MICROBLAZE_32_LO		6	/* Low 16 bit. */
+#define R_MICROBLAZE_SRO32		7	/* Read-only small data area. */
+#define R_MICROBLAZE_SRW32		8	/* Read-write small data area. */
+#define R_MICROBLAZE_64_NONE		9	/* No reloc. */
+#define R_MICROBLAZE_32_SYM_OP_SYM	10	/* Symbol Op Symbol relocation. */
+#define R_MICROBLAZE_GNU_VTINHERIT	11	/* GNU C++ vtable hierarchy. */
+#define R_MICROBLAZE_GNU_VTENTRY	12	/* GNU C++ vtable member usage. */
+#define R_MICROBLAZE_GOTPC_64		13	/* PC-relative GOT offset.  */
+#define R_MICROBLAZE_GOT_64		14	/* GOT entry offset.  */
+#define R_MICROBLAZE_PLT_64		15	/* PLT offset (PC-relative).  */
+#define R_MICROBLAZE_REL		16	/* Adjust by program base.  */
+#define R_MICROBLAZE_JUMP_SLOT		17	/* Create PLT entry.  */
+#define R_MICROBLAZE_GLOB_DAT		18	/* Create GOT entry.  */
+#define R_MICROBLAZE_GOTOFF_64		19	/* 64 bit offset to GOT. */
+#define R_MICROBLAZE_GOTOFF_32		20	/* 32 bit offset to GOT. */
+#define R_MICROBLAZE_COPY		21	/* Runtime copy.  */
+#define R_MICROBLAZE_TLS		22	/* TLS Reloc. */
+#define R_MICROBLAZE_TLSGD		23	/* TLS General Dynamic. */
+#define R_MICROBLAZE_TLSLD		24	/* TLS Local Dynamic. */
+#define R_MICROBLAZE_TLSDTPMOD32	25	/* TLS Module ID. */
+#define R_MICROBLAZE_TLSDTPREL32	26	/* TLS Offset Within TLS Block. */
+#define R_MICROBLAZE_TLSDTPREL64	27	/* TLS Offset Within TLS Block. */
+#define R_MICROBLAZE_TLSGOTTPREL32	28	/* TLS Offset From Thread Pointer. */
+#define R_MICROBLAZE_TLSTPREL32 	29	/* TLS Offset From Thread Pointer. */
 
 /* TILEPro relocations.  */
 #define R_TILEPRO_NONE		0	/* No reloc */
-- 
1.7.0.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v2 2/2] Add MicroBlaze Port
       [not found] <1364652885-28535-1-git-send-email-david.holsgrove@xilinx.com>
  2013-03-30 14:30 ` [PATCH v2 1/2] Add MicroBlaze support to elf/elf.h David Holsgrove
@ 2013-03-30 14:31 ` David Holsgrove
  2013-04-02 23:49   ` Joseph S. Myers
  1 sibling, 1 reply; 14+ messages in thread
From: David Holsgrove @ 2013-03-30 14:31 UTC (permalink / raw)
  To: libc-ports
  Cc: joseph, david.holsgrove, john.williams, edgar.iglesias,
	vinod.kathail, vidhumouli.hunsigida, nagaraju.mekala, tom.shui

Add MicroBlaze architecture to libc-ports.

Signed-off-by: David Holsgrove <david.holsgrove@xilinx.com>
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
---
 ports/ChangeLog.microblaze                         |  105 +
 ports/sysdeps/microblaze/Implies                   |    4 +
 ports/sysdeps/microblaze/Makefile                  |   26 +
 ports/sysdeps/microblaze/__longjmp.S               |   55 +
 ports/sysdeps/microblaze/_mcount.S                 |   91 +
 ports/sysdeps/microblaze/abort-instr.h             |    2 +
 ports/sysdeps/microblaze/asm-syntax.h              |   24 +
 ports/sysdeps/microblaze/backtrace.c               |  133 ++
 ports/sysdeps/microblaze/backtrace_linux.c         |   55 +
 ports/sysdeps/microblaze/bits/atomic.h             |  269 +++
 ports/sysdeps/microblaze/bits/endian.h             |   30 +
 ports/sysdeps/microblaze/bits/fenv.h               |   62 +
 ports/sysdeps/microblaze/bits/link.h               |   55 +
 ports/sysdeps/microblaze/bits/setjmp.h             |   37 +
 ports/sysdeps/microblaze/bsd-_setjmp.S             |   22 +
 ports/sysdeps/microblaze/bsd-setjmp.S              |   22 +
 ports/sysdeps/microblaze/configure                 |    4 +
 ports/sysdeps/microblaze/configure.in              |    8 +
 ports/sysdeps/microblaze/crti.S                    |   72 +
 ports/sysdeps/microblaze/crtn.S                    |   37 +
 ports/sysdeps/microblaze/dl-machine.h              |  302 +++
 ports/sysdeps/microblaze/dl-tls.h                  |   29 +
 ports/sysdeps/microblaze/dl-trampoline.S           |  109 +
 ports/sysdeps/microblaze/fegetround.c              |   24 +
 ports/sysdeps/microblaze/fesetround.c              |   25 +
 ports/sysdeps/microblaze/gccframe.h                |   21 +
 ports/sysdeps/microblaze/jmpbuf-unwind.h           |   46 +
 ports/sysdeps/microblaze/ldsodefs.h                |   41 +
 ports/sysdeps/microblaze/libc-tls.c                |   32 +
 ports/sysdeps/microblaze/libm-test-ulps            | 1728 ++++++++++++++++
 ports/sysdeps/microblaze/machine-gmon.h            |   30 +
 ports/sysdeps/microblaze/math_private.h            |    8 +
 ports/sysdeps/microblaze/memusage.h                |   21 +
 ports/sysdeps/microblaze/nptl/Makefile             |   21 +
 ports/sysdeps/microblaze/nptl/pthread_spin_lock.c  |   24 +
 ports/sysdeps/microblaze/nptl/pthreaddef.h         |   41 +
 ports/sysdeps/microblaze/nptl/tcb-offsets.sym      |   11 +
 ports/sysdeps/microblaze/nptl/tls.h                |  155 ++
 ports/sysdeps/microblaze/preconfigure              |    3 +
 ports/sysdeps/microblaze/setjmp.S                  |   75 +
 ports/sysdeps/microblaze/shlib-versions            |    1 +
 ports/sysdeps/microblaze/sotruss-lib.c             |   49 +
 ports/sysdeps/microblaze/stackinfo.h               |   34 +
 ports/sysdeps/microblaze/start.S                   |   67 +
 ports/sysdeps/microblaze/sysdep.h                  |   91 +
 ports/sysdeps/microblaze/tls-macros.h              |   44 +
 ports/sysdeps/microblaze/tst-audit.h               |   25 +
 ports/sysdeps/unix/sysv/linux/microblaze/Makefile  |    3 +
 ports/sysdeps/unix/sysv/linux/microblaze/Versions  |    5 +
 .../unix/sysv/linux/microblaze/____longjmp_chk.S   |   29 +
 .../unix/sysv/linux/microblaze/bits/fcntl.h        |   86 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/mman.h |   42 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/stat.h |  203 ++
 ports/sysdeps/unix/sysv/linux/microblaze/brk.c     |   44 +
 ports/sysdeps/unix/sysv/linux/microblaze/clone.S   |   70 +
 ports/sysdeps/unix/sysv/linux/microblaze/configure |    4 +
 .../unix/sysv/linux/microblaze/configure.in        |    4 +
 ports/sysdeps/unix/sysv/linux/microblaze/fcntl.c   |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/fxstat.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/fxstatat.c  |    1 +
 .../unix/sysv/linux/microblaze/getsysstats.c       |   35 +
 .../unix/sysv/linux/microblaze/kernel-features.h   |   30 +
 .../unix/sysv/linux/microblaze/kernel_stat.h       |   49 +
 ports/sysdeps/unix/sysv/linux/microblaze/lxstat.c  |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/mmap.S    |   50 +
 ports/sysdeps/unix/sysv/linux/microblaze/msgctl.c  |    1 +
 .../sysv/linux/microblaze/nptl/bits/pthreadtypes.h |  185 ++
 .../sysv/linux/microblaze/nptl/bits/semaphore.h    |   35 +
 .../unix/sysv/linux/microblaze/nptl/c++-types.data |   67 +
 .../unix/sysv/linux/microblaze/nptl/createthread.c |   23 +
 .../sysdeps/unix/sysv/linux/microblaze/nptl/fork.c |   29 +
 .../unix/sysv/linux/microblaze/nptl/ld.abilist     |   12 +
 .../linux/microblaze/nptl/libBrokenLocale.abilist  |    3 +
 .../unix/sysv/linux/microblaze/nptl/libanl.abilist |    6 +
 .../unix/sysv/linux/microblaze/nptl/libc.abilist   | 2082 ++++++++++++++++++++
 .../sysv/linux/microblaze/nptl/libcrypt.abilist    |    9 +
 .../unix/sysv/linux/microblaze/nptl/libdl.abilist  |   11 +
 .../unix/sysv/linux/microblaze/nptl/libm.abilist   |  368 ++++
 .../unix/sysv/linux/microblaze/nptl/libnsl.abilist |  123 ++
 .../sysv/linux/microblaze/nptl/libpthread.abilist  |  224 +++
 .../sysv/linux/microblaze/nptl/libresolv.abilist   |   93 +
 .../unix/sysv/linux/microblaze/nptl/librt.abilist  |   42 +
 .../linux/microblaze/nptl/libthread_db.abilist     |   42 +
 .../sysv/linux/microblaze/nptl/libutil.abilist     |    8 +
 .../unix/sysv/linux/microblaze/nptl/localplt.data  |   11 +
 .../unix/sysv/linux/microblaze/nptl/lowlevellock.c |  132 ++
 .../unix/sysv/linux/microblaze/nptl/lowlevellock.h |  325 +++
 .../unix/sysv/linux/microblaze/nptl/pt-vfork.S     |   21 +
 .../unix/sysv/linux/microblaze/nptl/pthread_once.c |   90 +
 .../unix/sysv/linux/microblaze/nptl/vfork.S        |   46 +
 .../unix/sysv/linux/microblaze/profil-counter.h    |   20 +
 ports/sysdeps/unix/sysv/linux/microblaze/semctl.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setgroups.c |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c  |    1 +
 .../unix/sysv/linux/microblaze/sigcontextinfo.h    |   25 +
 ports/sysdeps/unix/sysv/linux/microblaze/socket.S  |  126 ++
 .../unix/sysv/linux/microblaze/sys/procfs.h        |  123 ++
 .../sysdeps/unix/sysv/linux/microblaze/sys/user.h  |   77 +
 ports/sysdeps/unix/sysv/linux/microblaze/syscall.S |   37 +
 .../unix/sysv/linux/microblaze/syscalls.list       |   18 +
 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.S  |   39 +
 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h  |  306 +++
 ports/sysdeps/unix/sysv/linux/microblaze/xstat.c   |    1 +
 103 files changed, 9591 insertions(+), 0 deletions(-)
 create mode 100644 ports/ChangeLog.microblaze
 create mode 100644 ports/sysdeps/microblaze/Implies
 create mode 100644 ports/sysdeps/microblaze/Makefile
 create mode 100644 ports/sysdeps/microblaze/__longjmp.S
 create mode 100644 ports/sysdeps/microblaze/_mcount.S
 create mode 100644 ports/sysdeps/microblaze/abort-instr.h
 create mode 100644 ports/sysdeps/microblaze/asm-syntax.h
 create mode 100644 ports/sysdeps/microblaze/backtrace.c
 create mode 100644 ports/sysdeps/microblaze/backtrace_linux.c
 create mode 100755 ports/sysdeps/microblaze/bits/atomic.h
 create mode 100644 ports/sysdeps/microblaze/bits/endian.h
 create mode 100644 ports/sysdeps/microblaze/bits/fenv.h
 create mode 100644 ports/sysdeps/microblaze/bits/link.h
 create mode 100644 ports/sysdeps/microblaze/bits/setjmp.h
 create mode 100644 ports/sysdeps/microblaze/bsd-_setjmp.S
 create mode 100644 ports/sysdeps/microblaze/bsd-setjmp.S
 create mode 100644 ports/sysdeps/microblaze/configure
 create mode 100644 ports/sysdeps/microblaze/configure.in
 create mode 100644 ports/sysdeps/microblaze/crti.S
 create mode 100644 ports/sysdeps/microblaze/crtn.S
 create mode 100644 ports/sysdeps/microblaze/dl-machine.h
 create mode 100644 ports/sysdeps/microblaze/dl-tls.h
 create mode 100644 ports/sysdeps/microblaze/dl-trampoline.S
 create mode 100644 ports/sysdeps/microblaze/fegetround.c
 create mode 100644 ports/sysdeps/microblaze/fesetround.c
 create mode 100644 ports/sysdeps/microblaze/gccframe.h
 create mode 100644 ports/sysdeps/microblaze/jmpbuf-unwind.h
 create mode 100644 ports/sysdeps/microblaze/ldsodefs.h
 create mode 100644 ports/sysdeps/microblaze/libc-tls.c
 create mode 100644 ports/sysdeps/microblaze/libm-test-ulps
 create mode 100644 ports/sysdeps/microblaze/machine-gmon.h
 create mode 100644 ports/sysdeps/microblaze/math_private.h
 create mode 100644 ports/sysdeps/microblaze/memusage.h
 create mode 100644 ports/sysdeps/microblaze/nptl/Makefile
 create mode 100644 ports/sysdeps/microblaze/nptl/pthread_spin_lock.c
 create mode 100644 ports/sysdeps/microblaze/nptl/pthreaddef.h
 create mode 100644 ports/sysdeps/microblaze/nptl/tcb-offsets.sym
 create mode 100644 ports/sysdeps/microblaze/nptl/tls.h
 create mode 100644 ports/sysdeps/microblaze/preconfigure
 create mode 100644 ports/sysdeps/microblaze/setjmp.S
 create mode 100644 ports/sysdeps/microblaze/shlib-versions
 create mode 100644 ports/sysdeps/microblaze/sotruss-lib.c
 create mode 100644 ports/sysdeps/microblaze/stackinfo.h
 create mode 100644 ports/sysdeps/microblaze/start.S
 create mode 100644 ports/sysdeps/microblaze/sysdep.h
 create mode 100644 ports/sysdeps/microblaze/tls-macros.h
 create mode 100644 ports/sysdeps/microblaze/tst-audit.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/Makefile
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/Versions
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/mman.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/stat.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/brk.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/clone.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/configure
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/configure.in
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/fcntl.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/fxstat.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/fxstatat.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getsysstats.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/kernel_stat.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/lxstat.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/mmap.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/msgctl.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/semaphore.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/c++-types.data
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/fork.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/ld.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libBrokenLocale.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libanl.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libc.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libcrypt.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libdl.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libm.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libnsl.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libpthread.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libresolv.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/librt.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libthread_db.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libutil.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/localplt.data
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/pt-vfork.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/pthread_once.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/vfork.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/profil-counter.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/semctl.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setgroups.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/socket.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/sys/procfs.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/sys/user.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/syscall.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/syscalls.list
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.S
 create mode 100755 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/xstat.c

diff --git a/ports/ChangeLog.microblaze b/ports/ChangeLog.microblaze
new file mode 100644
index 0000000..42f4ed7
--- /dev/null
+++ b/ports/ChangeLog.microblaze
@@ -0,0 +1,105 @@
+2013-03-28  David Holsgrove  <david.holsgrove@xilinx.com>
+
+	* ChangeLog.microblaze: New file
+	* sysdeps/microblaze/Implies: New file
+	* sysdeps/microblaze/Makefile: New file
+	* sysdeps/microblaze/__longjmp.S: New file
+	* sysdeps/microblaze/_mcount.S: New file
+	* sysdeps/microblaze/abort-instr.h: New file
+	* sysdeps/microblaze/asm-syntax.h: New file
+	* sysdeps/microblaze/backtrace.c: New file
+	* sysdeps/microblaze/backtrace_linux.c: New file
+	* sysdeps/microblaze/bits/atomic.h: New file
+	* sysdeps/microblaze/bits/endian.h: New file
+	* sysdeps/microblaze/bits/fenv.h: New file
+	* sysdeps/microblaze/bits/link.h: New file
+	* sysdeps/microblaze/bits/setjmp.h: New file
+	* sysdeps/microblaze/bsd-_setjmp.S: New file
+	* sysdeps/microblaze/bsd-setjmp.S: New file
+	* sysdeps/microblaze/configure: New file
+	* sysdeps/microblaze/configure.in: New file
+	* sysdeps/microblaze/crti.S: New file
+	* sysdeps/microblaze/crtn.S: New file
+	* sysdeps/microblaze/dl-machine.h: New file
+	* sysdeps/microblaze/dl-tls.h: New file
+	* sysdeps/microblaze/dl-trampoline.S: New file
+	* sysdeps/microblaze/fegetround.c: New file
+	* sysdeps/microblaze/fesetround.c: New file
+	* sysdeps/microblaze/gccframe.h: New file
+	* sysdeps/microblaze/jmpbuf-unwind.h: New file
+	* sysdeps/microblaze/ldsodefs.h: New file
+	* sysdeps/microblaze/libc-tls.c: New file
+	* sysdeps/microblaze/libm-test-ulps: New file
+	* sysdeps/microblaze/machine-gmon.h: New file
+	* sysdeps/microblaze/math_private.h: New file
+	* sysdeps/microblaze/memusage.h: New file
+	* sysdeps/microblaze/nptl/Makefile: New file
+	* sysdeps/microblaze/nptl/pthread_spin_lock.c: New file
+	* sysdeps/microblaze/nptl/pthreaddef.h: New file
+	* sysdeps/microblaze/nptl/tcb-offsets.sym: New file
+	* sysdeps/microblaze/nptl/tls.h: New file
+	* sysdeps/microblaze/preconfigure: New file
+	* sysdeps/microblaze/setjmp.S: New file
+	* sysdeps/microblaze/shlib-versions: New file
+	* sysdeps/microblaze/sotruss-lib.c: New file
+	* sysdeps/microblaze/stackinfo.h: New file
+	* sysdeps/microblaze/start.S: New file
+	* sysdeps/microblaze/sysdep.h: New file
+	* sysdeps/microblaze/tls-macros.h: New file
+	* sysdeps/microblaze/tst-audit.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/Makefile: New file
+	* sysdeps/unix/sysv/linux/microblaze/Versions: New file
+	* sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S: New file
+	* sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/bits/mman.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/bits/stat.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/brk.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/clone.S: New file
+	* sysdeps/unix/sysv/linux/microblaze/configure: New file
+	* sysdeps/unix/sysv/linux/microblaze/configure.in: New file
+	* sysdeps/unix/sysv/linux/microblaze/fcntl.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/fxstat.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/fxstatat.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getsysstats.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/kernel-features.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/kernel_stat.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/lxstat.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/mmap.S: New file
+	* sysdeps/unix/sysv/linux/microblaze/msgctl.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/bits/semaphore.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/c++-types.data: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/fork.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/ld.abilist: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libBrokenLocale.abilist: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libanl.abilist: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libc.abilist: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libcrypt.abilist: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libdl.abilist: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libm.abilist: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libnsl.abilist: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libpthread.abilist: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libresolv.abilist: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/librt.abilist: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libthread_db.abilist: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libutil.abilist: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/localplt.data: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/pt-vfork.S: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/pthread_once.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/nptl/vfork.S: New file
+	* sysdeps/unix/sysv/linux/microblaze/profil-counter.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/semctl.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/shmctl.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setgroups.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/socket.S: New file
+	* sysdeps/unix/sysv/linux/microblaze/sys/procfs.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/sys/user.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/syscall.S: New file
+	* sysdeps/unix/sysv/linux/microblaze/syscalls.list: New file
+	* sysdeps/unix/sysv/linux/microblaze/sysdep.S: New file
+	* sysdeps/unix/sysv/linux/microblaze/sysdep.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/xstat.c: New file
diff --git a/ports/sysdeps/microblaze/Implies b/ports/sysdeps/microblaze/Implies
new file mode 100644
index 0000000..73c766c
--- /dev/null
+++ b/ports/sysdeps/microblaze/Implies
@@ -0,0 +1,4 @@
+wordsize-32
+# MicroBlaze uses IEEE 754 floating point.
+ieee754/flt-32
+ieee754/dbl-64
diff --git a/ports/sysdeps/microblaze/Makefile b/ports/sysdeps/microblaze/Makefile
new file mode 100644
index 0000000..cc82a74
--- /dev/null
+++ b/ports/sysdeps/microblaze/Makefile
@@ -0,0 +1,26 @@
+ifeq ($(subdir),elf)
+CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused
+endif
+
+ifeq ($(subdir),gmon)
+sysdep_routines += _mcount
+endif
+
+ifeq ($(subdir),resource)
+sysdep_routines += backtrace_linux
+endif
+
+$(objpfx)libm.so: $(elfobjdir)/ld.so
+$(objpfx)libcrypt.so: $(elfobjdir)/ld.so
+$(objpfx)libresolv.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_dns.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_files.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_db.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_nis.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_nisplus.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_hesiod.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_compat.so: $(elfobjdir)/ld.so
+$(objpfx)libanl.so: $(elfobjdir)/ld.so
+$(objpfx)libnsl.so: $(elfobjdir)/ld.so
+$(objpfx)libcidn.so: $(elfobjdir)/ld.so
+$(objpfx)libutil.so: $(elfobjdir)/ld.so
diff --git a/ports/sysdeps/microblaze/__longjmp.S b/ports/sysdeps/microblaze/__longjmp.S
new file mode 100644
index 0000000..99c5ec9
--- /dev/null
+++ b/ports/sysdeps/microblaze/__longjmp.S
@@ -0,0 +1,55 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+/* Jump to the position specified by ENV, causing the
+   setjmp call there to return VAL, or 1 if VAL is 0.  */
+
+/* void __longjmp (__jmp_buf env, int val) */
+
+ENTRY(__longjmp)
+    lwi   r1,r5,0
+    lwi   r2,r5,4
+    lwi   r13,r5,8
+    lwi   r14,r5,12
+    lwi   r15,r5,16
+    lwi   r16,r5,20
+    lwi   r17,r5,24
+    lwi   r18,r5,28
+    lwi   r19,r5,32
+    lwi   r20,r5,36
+    lwi   r21,r5,40
+    lwi   r22,r5,44
+    lwi   r23,r5,48
+    lwi   r24,r5,52
+    lwi   r25,r5,56
+    lwi   r26,r5,60
+    lwi   r27,r5,64
+    lwi   r28,r5,68
+    lwi   r29,r5,72
+    lwi   r30,r5,76
+    lwi   r31,r5,80
+    addk  r3,r6,r0
+    beqi  r3,L(return_1)
+    rtsd  r15,8
+    nop
+L(return_1):
+    rtsd  r15,8
+    addik r3,r0,1	/* delay slot */
+END(__longjmp)
diff --git a/ports/sysdeps/microblaze/_mcount.S b/ports/sysdeps/microblaze/_mcount.S
new file mode 100644
index 0000000..7d4f40a
--- /dev/null
+++ b/ports/sysdeps/microblaze/_mcount.S
@@ -0,0 +1,91 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+	.global	_mcount
+	.type	_mcount, @function
+_mcount:
+	# Save regs.
+	addik   r1, r1,-4 * 24
+	swi	r31, r1, 4 * 23
+	swi	r30, r1, 4 * 22
+	swi	r29, r1, 4 * 21
+	swi	r28, r1, 4 * 20
+	swi	r27, r1, 4 * 19
+	swi	r26, r1, 4 * 18
+	swi	r25, r1, 4 * 17
+	swi	r24, r1, 4 * 16
+	swi	r23, r1, 4 * 15
+	swi	r22, r1, 4 * 14
+	swi	r21, r1, 4 * 13
+	swi	r20, r1, 4 * 12
+	swi	r19, r1, 4 * 11
+	swi	r15, r1, 4 * 10
+	swi	r12, r1, 4 * 9
+	swi	r11, r1, 4 * 8
+	swi	r10, r1, 4 * 7
+	swi	r8, r1, 4 * 6
+	swi	r7, r1, 4 * 5
+	swi	r6, r1, 4 * 4
+	swi	r5, r1, 4 * 3
+	swi	r4, r1, 4 * 2
+	swi	r3, r1, 4 * 1
+	swi	r2, r1, 4 * 0
+
+#ifdef SHARED
+	mfs     r20,rpc
+	addik   r20,r20,_GLOBAL_OFFSET_TABLE_+8
+	addk	r6, r0, r15	# callee is in r15.
+	brlid	r15, __mcount_internal@PLT
+	lwi	r5, r1, 4 * 24	# caller is on the stack.
+#else
+	# Pass from/to in r5 and r6.
+	addk	r6, r0, r15	# callee is in r15.
+	bralid	r15, __mcount_internal
+	lwi	r5, r1, 4 * 24	# caller is on the stack.
+#endif
+
+	# Reload regs
+	lwi	r31, r1, 4 * 23
+	lwi	r30, r1, 4 * 22
+	lwi	r29, r1, 4 * 21
+	lwi	r28, r1, 4 * 20
+	lwi	r27, r1, 4 * 19
+	lwi	r26, r1, 4 * 18
+	lwi	r25, r1, 4 * 17
+	lwi	r24, r1, 4 * 16
+	lwi	r23, r1, 4 * 15
+	lwi	r22, r1, 4 * 14
+	lwi	r21, r1, 4 * 13
+	lwi	r20, r1, 4 * 12
+	lwi	r19, r1, 4 * 11
+	lwi	r15, r1, 4 * 10
+	lwi	r12, r1, 4 * 9
+	lwi	r11, r1, 4 * 8
+	lwi	r10, r1, 4 * 7
+	lwi	r8, r1, 4 * 6
+	lwi	r7, r1, 4 * 5
+	lwi	r6, r1, 4 * 4
+	lwi	r5, r1, 4 * 3
+	lwi	r4, r1, 4 * 2
+	lwi	r3, r1, 4 * 1
+	lwi	r2, r1, 4 * 0
+
+	rtsd	r15, 8
+	addik	r1, r1, 4 * 24
+
+	.size	_mcount, . - _mcount
diff --git a/ports/sysdeps/microblaze/abort-instr.h b/ports/sysdeps/microblaze/abort-instr.h
new file mode 100644
index 0000000..38469d4
--- /dev/null
+++ b/ports/sysdeps/microblaze/abort-instr.h
@@ -0,0 +1,2 @@
+/* An instruction which should crash any program is `illegal'.  */
+#define ABORT_INSTRUCTION asm ("brki r0, -1")
diff --git a/ports/sysdeps/microblaze/asm-syntax.h b/ports/sysdeps/microblaze/asm-syntax.h
new file mode 100644
index 0000000..fc8fbcd
--- /dev/null
+++ b/ports/sysdeps/microblaze/asm-syntax.h
@@ -0,0 +1,24 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#undef ALIGN
+#define ALIGN(log) .align 1<<log
+
+#define R_(r) %##r
+#define R(r) R_(r)
+#define L(label) .##label
diff --git a/ports/sysdeps/microblaze/backtrace.c b/ports/sysdeps/microblaze/backtrace.c
new file mode 100644
index 0000000..9d391c8
--- /dev/null
+++ b/ports/sysdeps/microblaze/backtrace.c
@@ -0,0 +1,133 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+#include <string.h>
+#include <sysdep.h>
+#include <signal.h>
+#include <execinfo.h>
+
+extern int __backtrace_lookup_prev_stack_frame_sighandler(
+				unsigned long fp, unsigned long pc,
+				unsigned long *pprev_fp, unsigned long *pprev_pc,
+				unsigned long *retaddr);
+
+inline long get_frame_size(unsigned long instr)
+{
+	return abs((short signed)(instr & 0xFFFF));
+}
+
+static unsigned long *find_frame_creation(unsigned long *pc)
+{
+	int i;
+
+	/* NOTE: Distance to search is arbitrary
+	 *	 250 works well for most things,
+	 *	 750 picks up things like tcp_recvmsg(),
+	 *	1000 needed for fat_fill_super()  */
+	for (i = 0; i < 1000; i++, pc--) {
+		unsigned long instr;
+		unsigned long frame_size;
+
+		instr = *pc;
+
+		/* addik r1, r1, foo ? */
+		if ((instr & 0xFFFF0000) != 0x30210000)
+			continue;	/* No.  */
+
+		frame_size = get_frame_size(instr);
+		if ((frame_size < 8) || (frame_size & 3)) {
+			return NULL;
+		}
+		return pc;
+	}
+
+	return NULL;
+}
+
+static int lookup_prev_stack_frame(unsigned long fp, unsigned long pc,
+				unsigned long *pprev_fp, unsigned long *pprev_pc,
+				unsigned long *retaddr)
+{
+	unsigned long *prologue = NULL;
+
+	int is_signalhandler = __backtrace_lookup_prev_stack_frame_sighandler(
+			fp, pc, pprev_fp, pprev_pc, retaddr);
+
+	if (!is_signalhandler) {
+		prologue = find_frame_creation((unsigned long *)pc);
+
+		if (prologue) {
+			long frame_size = get_frame_size(*prologue);
+			*pprev_fp = fp + frame_size;
+			if (*retaddr != 0) {
+				*pprev_pc = *retaddr;
+			} else {
+				*pprev_pc = *(unsigned long *)fp;
+			}
+			*retaddr = 0;
+			if ((!(*pprev_pc) || ((*pprev_pc) & 3))) {
+				prologue=0;
+			}
+		} else {
+			*pprev_pc = 0;
+			*pprev_fp = fp;
+			*retaddr = 0;
+		}
+	}
+	return (!(*pprev_pc) || ((*pprev_pc) & 3)) ? -1 : 0;
+}
+
+int __backtrace(void **array, int size)
+{
+	unsigned long pc, fp;
+	unsigned long ppc, pfp;
+	unsigned long retaddr; /* Return address(r15) is required in the signal
+							  handler case, since the return address of the
+							  function which causes the signal may not be
+							  recorded in the stack.  */
+	int count;
+	int rc = 0;
+
+	__asm__ __volatile__(
+"mfs %0, rpc"
+: "=r"(pc)
+);
+
+	__asm__ __volatile__(
+"add %0, r1, r0"
+: "=r"(fp)
+);
+
+	array[0]=(void *)pc;
+	retaddr = 0;
+	for (count=1; count < size; count++) {
+		rc = lookup_prev_stack_frame(fp, pc, &pfp, &ppc, &retaddr);
+
+		fp=pfp;
+		pc=ppc;
+		array[count]=(void *)pc;
+		if (rc) {
+			return count;
+		}
+	}
+	return count;
+}
+
+weak_alias (__backtrace, backtrace)
+libc_hidden_def (__backtrace)
diff --git a/ports/sysdeps/microblaze/backtrace_linux.c b/ports/sysdeps/microblaze/backtrace_linux.c
new file mode 100644
index 0000000..12454ca
--- /dev/null
+++ b/ports/sysdeps/microblaze/backtrace_linux.c
@@ -0,0 +1,55 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stddef.h>
+#include <asm/sigcontext.h>
+#include <linux/signal.h>
+#include <asm-generic/ucontext.h>
+#include <asm/unistd.h>
+
+int __backtrace_lookup_prev_stack_frame_sighandler(
+				unsigned long fp, unsigned long pc,
+				unsigned long *pprev_fp, unsigned long *pprev_pc,
+				unsigned long *retaddr)
+{
+	unsigned long *tramp = 0;
+	struct ucontext *uc;
+
+	if (*retaddr == 0) {
+		/* Kernel insert the tramp between the signal handler frame and the
+		   caller frame in signal handling.  */
+		tramp = (unsigned long *)pc;
+		tramp += 2;
+		if ((*tramp == (0x31800000 | __NR_rt_sigreturn)) && (*(tramp+1) == 0xb9cc0008)) {
+			/* Signal handler function argument is:
+			   (int sig_num, siginfo_t * info, void * ucontext)
+			   the uncontext is the 3rd argument.  */
+			unsigned long ucptr = ((unsigned long)tramp) - sizeof(struct ucontext);
+			uc = (struct ucontext *)ucptr;
+			*pprev_pc = uc->uc_mcontext.regs.pc;
+			/* Need to record the return address since the return
+			   address of the function which causes this signal may not
+			   be recorded in the stack.  */
+			*pprev_fp = uc->uc_mcontext.regs.r1;
+			*retaddr = uc->uc_mcontext.regs.r15;
+			/* It is a signal handler.  */
+			return 1;
+		}
+	}
+	return 0;
+}
diff --git a/ports/sysdeps/microblaze/bits/atomic.h b/ports/sysdeps/microblaze/bits/atomic.h
new file mode 100755
index 0000000..1ea998c
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/atomic.h
@@ -0,0 +1,269 @@
+/* Copyright (C) 2003-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdint.h>
+#include <sysdep.h>
+
+
+typedef int8_t atomic8_t;
+typedef uint8_t uatomic8_t;
+typedef int_fast8_t atomic_fast8_t;
+typedef uint_fast8_t uatomic_fast8_t;
+
+typedef int32_t atomic32_t;
+typedef uint32_t uatomic32_t;
+typedef int_fast32_t atomic_fast32_t;
+typedef uint_fast32_t uatomic_fast32_t;
+
+typedef intptr_t atomicptr_t;
+typedef uintptr_t uatomicptr_t;
+typedef intmax_t atomic_max_t;
+typedef uintmax_t uatomic_max_t;
+
+
+/* Microblaze does not have byte and halfword forms of load and reserve and
+   store conditional. So for microblaze we stub out the 8- and 16-bit forms.  */
+#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval)           \
+  (abort (), 0)
+
+#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval)          \
+  (abort (), 0)
+
+#define __arch_compare_and_exchange_bool_8_rel(mem, newval, oldval)           \
+  (abort (), 0)
+
+#define __arch_compare_and_exchange_bool_16_rel(mem, newval, oldval)          \
+  (abort (), 0)
+
+#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval)           \
+  ({                                                                          \
+      __typeof (*(mem)) __tmp;                                                \
+      __typeof (mem)  __memp = (mem);                                         \
+      int test;                                                               \
+      __asm __volatile (                                                      \
+                "   addc    r0, r0, r0;"                                      \
+                "1: lwx     %0, %3, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                "   cmp     %1, %0, %4;"                                      \
+                "   bnei    %1, 2f;"                                          \
+                "   swx     %5, %3, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                "2:"                                                          \
+                    : "=&r" (__tmp),                                          \
+                    "=&r" (test),                                             \
+                    "=m" (*__memp)                                            \
+                    : "r" (__memp),                                           \
+                    "r" (oldval),                                             \
+                    "r" (newval)                                              \
+                    : "cc", "memory");                                        \
+      __tmp;                                                                  \
+  })
+
+#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval)           \
+  (abort (), (__typeof (*mem)) 0)
+
+#define atomic_compare_and_exchange_val_acq(mem, newval, oldval)              \
+  ({                                                                          \
+    __typeof (*(mem)) __result;                                               \
+    if (sizeof (*mem) == 4)                                                   \
+      __result = __arch_compare_and_exchange_val_32_acq(mem, newval, oldval); \
+    else if (sizeof (*mem) == 8)                                              \
+      __result = __arch_compare_and_exchange_val_64_acq(mem, newval, oldval); \
+    else                                                                      \
+       abort ();                                                              \
+    __result;                                                                 \
+  })
+
+#define atomic_compare_and_exchange_val_rel(mem, newval, oldval)              \
+  ({                                                                          \
+    __typeof (*(mem)) __result;                                               \
+    if (sizeof (*mem) == 4)                                                   \
+      __result = __arch_compare_and_exchange_val_32_acq(mem, newval, oldval); \
+    else if (sizeof (*mem) == 8)                                              \
+      __result = __arch_compare_and_exchange_val_64_acq(mem, newval, oldval); \
+    else                                                                      \
+       abort ();                                                              \
+    __result;                                                                 \
+  })
+
+#define __arch_atomic_exchange_32_acq(mem, value)                             \
+  ({                                                                          \
+      __typeof (*(mem)) __tmp;                                                \
+      __typeof (mem)  __memp = (mem);                                         \
+      int test;                                                               \
+      __asm __volatile (                                                      \
+                "   addc    r0, r0, r0;"                                      \
+                "1: lwx     %0, %4, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                "   swx     %3, %4, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                    : "=&r" (__tmp),                                          \
+                    "=&r" (test),                                             \
+                    "=m" (*__memp)                                            \
+                    : "r" (value),                                            \
+                    "r" (__memp)                                              \
+                    : "cc", "memory");                                        \
+      __tmp;                                                                  \
+  })
+
+#define __arch_atomic_exchange_64_acq(mem, newval)                            \
+  (abort (), (__typeof (*mem)) 0)
+
+#define atomic_exchange_acq(mem, value)                                       \
+  ({                                                                          \
+    __typeof (*(mem)) __result;                                               \
+    if (sizeof (*mem) == 4)                                                   \
+      __result = __arch_atomic_exchange_32_acq (mem, value);                  \
+    else if (sizeof (*mem) == 8)                                              \
+      __result = __arch_atomic_exchange_64_acq (mem, value);                  \
+    else                                                                      \
+       abort ();                                                              \
+    __result;                                                                 \
+  })
+
+#define atomic_exchange_rel(mem, value)                                       \
+  ({                                                                          \
+    __typeof (*(mem)) __result;                                               \
+    if (sizeof (*mem) == 4)                                                   \
+      __result = __arch_atomic_exchange_32_acq (mem, value);                  \
+    else if (sizeof (*mem) == 8)                                              \
+      __result = __arch_atomic_exchange_64_acq (mem, value);                  \
+    else                                                                      \
+       abort ();                                                              \
+    __result;                                                                 \
+  })
+
+#define __arch_atomic_exchange_and_add_32(mem, value)                         \
+  ({                                                                          \
+    __typeof (*(mem)) __tmp;                                                  \
+      __typeof (mem)  __memp = (mem);                                         \
+    int test;                                                                 \
+    __asm __volatile (                                                        \
+                "   addc    r0, r0, r0;"                                      \
+                "1: lwx     %0, %4, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                "   add     %1, %3, %0;"                                      \
+                "   swx     %1, %4, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                    : "=&r" (__tmp),                                          \
+                    "=&r" (test),                                             \
+                    "=m" (*__memp)                                            \
+                    : "r" (value),                                            \
+                    "r" (__memp)                                              \
+                    : "cc", "memory");                                        \
+    __tmp;                                                                    \
+  })
+
+#define __arch_atomic_exchange_and_add_64(mem, value)                         \
+  (abort (), (__typeof (*mem)) 0)
+
+#define atomic_exchange_and_add(mem, value)                                   \
+  ({                                                                          \
+    __typeof (*(mem)) __result;                                               \
+    if (sizeof (*mem) == 4)                                                   \
+      __result = __arch_atomic_exchange_and_add_32 (mem, value);              \
+    else if (sizeof (*mem) == 8)                                              \
+      __result = __arch_atomic_exchange_and_add_64 (mem, value);              \
+    else                                                                      \
+       abort ();                                                              \
+    __result;                                                                 \
+  })
+
+#define __arch_atomic_increment_val_32(mem)                                   \
+  ({                                                                          \
+    __typeof (*(mem)) __val;                                                  \
+    int test;                                                                 \
+    __asm __volatile (                                                        \
+                "   addc    r0, r0, r0;"                                      \
+                "1: lwx     %0, %3, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                "   addi    %0, %0, 1;"                                       \
+                "   swx     %0, %3, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                    : "=&r" (__val),                                          \
+                    "=&r" (test),                                             \
+                    "=m" (*mem)                                               \
+                    : "r" (mem),                                              \
+                    "m" (*mem)                                                \
+                    : "cc", "memory");                                        \
+    __val;                                                                    \
+  })
+
+#define __arch_atomic_increment_val_64(mem)                                   \
+  (abort (), (__typeof (*mem)) 0)
+
+#define atomic_increment_val(mem)                                             \
+  ({                                                                          \
+    __typeof (*(mem)) __result;                                               \
+    if (sizeof (*(mem)) == 4)                                                 \
+      __result = __arch_atomic_increment_val_32 (mem);                        \
+    else if (sizeof (*(mem)) == 8)                                            \
+      __result = __arch_atomic_increment_val_64 (mem);                        \
+    else                                                                      \
+       abort ();                                                              \
+    __result;                                                                 \
+  })
+
+#define atomic_increment(mem) ({ atomic_increment_val (mem); (void) 0; })
+
+#define __arch_atomic_decrement_val_32(mem)                                   \
+  ({                                                                          \
+    __typeof (*(mem)) __val;                                                  \
+    int test;                                                                 \
+    __asm __volatile (                                                        \
+                "   addc    r0, r0, r0;"                                      \
+                "1: lwx     %0, %3, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                "   rsubi   %0, %0, 1;"                                       \
+                "   swx     %0, %3, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                    : "=&r" (__val),                                          \
+                    "=&r" (test),                                             \
+                    "=m" (*mem)                                               \
+                    : "r" (mem),                                              \
+                    "m" (*mem)                                                \
+                    : "cc", "memory");                                        \
+    __val;                                                                    \
+  })
+
+#define __arch_atomic_decrement_val_64(mem)                                   \
+  (abort (), (__typeof (*mem)) 0)
+
+#define atomic_decrement_val(mem)                                             \
+  ({                                                                          \
+    __typeof (*(mem)) __result;                                               \
+    if (sizeof (*(mem)) == 4)                                                 \
+      __result = __arch_atomic_decrement_val_32 (mem);                        \
+    else if (sizeof (*(mem)) == 8)                                            \
+      __result = __arch_atomic_decrement_val_64 (mem);                        \
+    else                                                                      \
+       abort ();                                                              \
+    __result;                                                                 \
+  })
+
+#define atomic_decrement(mem) ({ atomic_decrement_val (mem); (void) 0; })
diff --git a/ports/sysdeps/microblaze/bits/endian.h b/ports/sysdeps/microblaze/bits/endian.h
new file mode 100644
index 0000000..0b846a4
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/endian.h
@@ -0,0 +1,30 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ENDIAN_H
+# error "Never use <bits/endian.h> directly; include <endian.h> instead."
+#endif
+
+/* MicroBlaze can be either big or little endian.  */
+#ifdef _BIG_ENDIAN
+#define __BYTE_ORDER __BIG_ENDIAN
+#define __FLOAT_WORD_ORDER __BIG_ENDIAN
+#else
+#define __BYTE_ORDER __LITTLE_ENDIAN
+#define __FLOAT_WORD_ORDER __LITTLE_ENDIAN
+#endif
diff --git a/ports/sysdeps/microblaze/bits/fenv.h b/ports/sysdeps/microblaze/bits/fenv.h
new file mode 100644
index 0000000..0819454
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/fenv.h
@@ -0,0 +1,62 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _FENV_H
+# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+#endif
+
+/* MicroBlaze supports only round-to-nearest.  The software
+   floating-point support also acts this way.  */
+enum
+  {
+    __FE_UNDEFINED = 0,
+
+    FE_TONEAREST =
+#define FE_TONEAREST	0x1
+      FE_TONEAREST,
+  };
+
+/* Define bits representing the exception.  We use the bit positions
+   of the appropriate bits in the FPU control word.  */
+
+#ifndef FE_INVALID
+# define FE_INVALID   __FE_UNDEFINED
+#endif
+#ifndef FE_DIVBYZERO
+# define FE_DIVBYZERO   __FE_UNDEFINED
+#endif
+#ifndef FE_OVERFLOW
+# define FE_OVERFLOW  __FE_UNDEFINED
+#endif
+#ifndef FE_UNDERFLOW
+# define FE_UNDERFLOW  __FE_UNDEFINED
+#endif
+#ifndef FE_INEXACT
+# define FE_INEXACT    __FE_UNDEFINED
+#endif
+
+#define FE_ALL_EXCEPT __FE_UNDEFINED
+
+
+/* Type representing exception flags (if there were any).  */
+typedef unsigned int fexcept_t;
+
+/* Type representing floating-point environment.  */
+typedef unsigned int fenv_t;
+
+/* If the default argument is used we use this value.  */
+#define FE_DFL_ENV	((const fenv_t *) -1l)
diff --git a/ports/sysdeps/microblaze/bits/link.h b/ports/sysdeps/microblaze/bits/link.h
new file mode 100644
index 0000000..ab71195
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/link.h
@@ -0,0 +1,55 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef	_LINK_H
+# error "Never include <bits/link.h> directly; use <link.h> instead."
+#endif
+
+
+/* Registers for entry into PLT on Microblaze.  */
+typedef struct La_microblaze_regs
+{
+  uint32_t lr_r0;
+  uint32_t lr_r1;
+  uint32_t lr_sp;
+} La_microblaze_regs;
+
+/* Return values for calls from PLT on Microblaze.  */
+typedef struct La_microblaze_retval
+{
+  uint32_t lrv_r3;
+} La_microblaze_retval;
+
+
+__BEGIN_DECLS
+
+extern Elf32_Addr la_microblaze_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx,
+					uintptr_t *__refcook,
+					uintptr_t *__defcook,
+					La_microblaze_regs *__regs,
+					unsigned int *__flags,
+					const char *__symname,
+					long int *__framesizep);
+extern unsigned int la_microblaze_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx,
+					 uintptr_t *__refcook,
+					 uintptr_t *__defcook,
+					 const La_microblaze_regs *__inregs,
+					 La_microblaze_retval *__outregs,
+					 const char *__symname);
+
+__END_DECLS
diff --git a/ports/sysdeps/microblaze/bits/setjmp.h b/ports/sysdeps/microblaze/bits/setjmp.h
new file mode 100644
index 0000000..36da0c2
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/setjmp.h
@@ -0,0 +1,37 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Define the machine-dependent type `jmp_buf'. */
+
+#ifndef _BITS_SETJMP_H
+#define _BITS_SETJMP_H 1
+
+#if !defined _SETJMP_H && !defined _PTHREAD_H
+# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+#endif
+
+typedef struct
+  {
+    /* There are 21 4-byte registers that should be saved:
+       r1, r2, r13-r31. Actually, there seems no need to save
+       r14, r16, r17, r18 (return addresses for interrupt/exception/trap). */
+    int *__sp; /* dedicated name for r1 */
+    long int __gregs[20];
+  } __jmp_buf[1];
+
+#endif
diff --git a/ports/sysdeps/microblaze/bsd-_setjmp.S b/ports/sysdeps/microblaze/bsd-_setjmp.S
new file mode 100644
index 0000000..22c8d20
--- /dev/null
+++ b/ports/sysdeps/microblaze/bsd-_setjmp.S
@@ -0,0 +1,22 @@
+/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'.
+   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define setjmp_name _setjmp
+#define SAVEMASK 0
+
+#include <setjmp.S>
diff --git a/ports/sysdeps/microblaze/bsd-setjmp.S b/ports/sysdeps/microblaze/bsd-setjmp.S
new file mode 100644
index 0000000..e25b6cb
--- /dev/null
+++ b/ports/sysdeps/microblaze/bsd-setjmp.S
@@ -0,0 +1,22 @@
+/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'.
+   Copyright (C) 1995-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define setjmp_name setjmp
+#define SAVEMASK 1
+
+#include <setjmp.S>
diff --git a/ports/sysdeps/microblaze/configure b/ports/sysdeps/microblaze/configure
new file mode 100644
index 0000000..3d55579
--- /dev/null
+++ b/ports/sysdeps/microblaze/configure
@@ -0,0 +1,4 @@
+# This file is generated from configure.in by Autoconf.  DO NOT EDIT!
+ # Local configure fragment for sysdeps/microblaze/elf.
+
+#AC_DEFINE(PI_STATIC_AND_HIDDEN)
diff --git a/ports/sysdeps/microblaze/configure.in b/ports/sysdeps/microblaze/configure.in
new file mode 100644
index 0000000..bb14721
--- /dev/null
+++ b/ports/sysdeps/microblaze/configure.in
@@ -0,0 +1,8 @@
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+# Local configure fragment for sysdeps/microblaze/elf.
+
+dnl It is always possible to access static and hidden symbols in an
+dnl position independent way.
+dnl NOTE: This feature was added by the GCC TLS patches.  We should test for
+dnl it.  Until we do, don't define it.
+#AC_DEFINE(PI_STATIC_AND_HIDDEN)
diff --git a/ports/sysdeps/microblaze/crti.S b/ports/sysdeps/microblaze/crti.S
new file mode 100644
index 0000000..bc3ac1a
--- /dev/null
+++ b/ports/sysdeps/microblaze/crti.S
@@ -0,0 +1,72 @@
+/* Special .init and .fini section support for MicroBlaze.
+   Copyright (C) 1995-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* crti.S puts a function prologue at the beginning of the .init and
+   .fini sections and defines global symbols for those addresses, so
+   they can be called as functions.  The symbols _init and _fini are
+   magic and cause the linker to emit DT_INIT and DT_FINI.  */
+
+#include <libc-symbols.h>
+#include <sysdep.h>
+
+#ifndef PREINIT_FUNCTION
+# define PREINIT_FUNCTION __gmon_start__
+#endif
+
+#ifndef PREINIT_FUNCTION_WEAK
+# define PREINIT_FUNCTION_WEAK 1
+#endif
+
+#if PREINIT_FUNCTION_WEAK
+	weak_extern (PREINIT_FUNCTION)
+#else
+	.hidden PREINIT_FUNCTION
+#endif
+
+	.section .init,"ax",@progbits
+	.align	2
+	.globl	_init
+	.type	_init, @function
+_init:
+	addik	r1,r1,-32
+	swi	r20,r1,28
+	mfs	r20,rpc
+	addik	r20,r20,_GLOBAL_OFFSET_TABLE_+8
+	lwi	r3,r20,PREINIT_FUNCTION@GOT
+#if PREINIT_FUNCTION_WEAK
+	beqid   r3,$Lno_weak_fn:
+	swi     r15,r1,0
+	brlid	r15,PREINIT_FUNCTION@PLT
+$Lno_weak_fn:
+#else
+	swi     r15,r1,0
+	brald	r15,r3
+#endif
+	nop		# Unfilled delay slot
+
+	.section .fini,"ax",@progbits
+	.align	2
+	.globl	_fini
+	.type	_fini, @function
+_fini:
+	addik	r1,r1,-32
+	swi	r20,r1,28
+	swi	r15,r1,0
+	mfs	r20,rpc
+	addik	r20,r20,_GLOBAL_OFFSET_TABLE_+8
+
diff --git a/ports/sysdeps/microblaze/crtn.S b/ports/sysdeps/microblaze/crtn.S
new file mode 100644
index 0000000..6488002
--- /dev/null
+++ b/ports/sysdeps/microblaze/crtn.S
@@ -0,0 +1,37 @@
+/* Special .init and .fini section support for MicroBlaze.
+   Copyright (C) 1995-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* crti.S puts a function prologue at the beginning of the .init and
+   .fini sections and defines global symbols for those addresses, so
+   they can be called as functions.  The symbols _init and _fini are
+   magic and cause the linker to emit DT_INIT and DT_FINI.  */
+
+#include <sysdep.h>
+
+	.section .init,"ax",@progbits
+	lwi	r15,r1,0
+	lwi	r20,r1,28
+	rtsd	r15,8
+	addik	r1,r1,32
+
+	.section .fini,"ax",@progbits
+	lwi	r15,r1,0
+	lwi	r20,r1,28
+	rtsd	r15,8
+	addik	r1,r1,32
+
diff --git a/ports/sysdeps/microblaze/dl-machine.h b/ports/sysdeps/microblaze/dl-machine.h
new file mode 100644
index 0000000..116a155
--- /dev/null
+++ b/ports/sysdeps/microblaze/dl-machine.h
@@ -0,0 +1,302 @@
+/* Copyright (C) 1995-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef dl_machine_h
+#define dl_machine_h
+
+#define ELF_MACHINE_NAME "microblaze"
+
+#include <sys/param.h>
+#include <tls.h>
+
+/* Return nonzero iff ELF header is compatible with the running host.  */
+static inline int
+elf_machine_matches_host (const Elf32_Ehdr *ehdr)
+{
+  return (ehdr->e_machine == EM_MICROBLAZE);
+}
+
+
+/* Return the link-time address of _DYNAMIC.  Conveniently, this is the
+   first element of the GOT.  This must be inlined in a function which
+   uses global data.  */
+static inline Elf32_Addr
+elf_machine_dynamic (void)
+{
+  /* This produces a GOTOFF reloc that resolves to zero at link time, so in
+     fact just loads from the GOT register directly.  By doing it without
+     an asm we can let the compiler choose any register.  */
+
+  Elf32_Addr got_entry_0;
+  __asm__ __volatile__(
+    "lwi %0,r20,0"
+    :"=r"(got_entry_0)
+    );
+  return got_entry_0;
+}
+
+
+/* Return the run-time load address of the shared object.  */
+static inline Elf32_Addr
+elf_machine_load_address (void)
+{
+  /* Compute the difference between the runtime address of _DYNAMIC as seen
+     by a GOTOFF reference, and the link-time address found in the special
+     unrelocated first GOT entry.  */
+
+  Elf32_Addr dyn;
+  __asm__ __volatile__ (
+    "addik %0,r20,_DYNAMIC@GOTOFF"
+    : "=r"(dyn)
+    );
+  return dyn - elf_machine_dynamic ();
+}
+
+
+/* Set up the loaded object described by L so its unrelocated PLT
+   entries will jump to the on-demand fixup code in dl-runtime.c.  */
+
+static inline int __attribute__ ((always_inline))
+elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
+{
+  extern void _dl_runtime_resolve (Elf32_Word);
+  extern void _dl_runtime_profile (Elf32_Word);
+
+  return lazy;
+}
+
+/* The PLT uses Elf32_Rela relocs.  */
+#define elf_machine_relplt elf_machine_rela
+
+/* Mask identifying addresses reserved for the user program,
+   where the dynamic linker should not map anything.  */
+#define ELF_MACHINE_USER_ADDRESS_MASK	0x80000000UL
+
+/* Initial entry point code for the dynamic linker.
+   The C function `_dl_start' is the real entry point;
+   its return value is the user program's entry point.  */
+
+#define RTLD_START asm ("\
+	.text\n\
+	.globl _start\n\
+	.type _start,@function\n\
+_start:\n\
+	addk  r5,r0,r1\n\
+	addk  r3,r0,r0\n\
+1:\n\
+	addik r5,r5,4\n\
+	lw    r4,r5,r0\n\
+	bneid r4,1b\n\
+	addik r3,r3,1\n\
+	addik r3,r3,-1\n\
+	addk  r5,r0,r1\n\
+	sw    r3,r5,r0\n\
+	addik r1,r1,-24\n\
+	sw    r15,r1,r0\n\
+	brlid r15,_dl_start\n\
+	nop\n\
+	/* FALLTHRU */\n\
+\n\
+	.globl _dl_start_user\n\
+	.type _dl_start_user,@function\n\
+_dl_start_user:\n\
+	mfs   r20,rpc\n\
+	addik r20,r20,_GLOBAL_OFFSET_TABLE_+8\n\
+	lwi   r4,r20,_dl_skip_args@GOTOFF\n\
+	lwi   r5,r1,24\n\
+	rsubk r5,r4,r5\n\
+	addk  r4,r4,r4\n\
+	addk  r4,r4,r4\n\
+	addk  r1,r1,r4\n\
+	swi   r5,r1,24\n\
+	swi   r3,r1,20\n\
+	addk  r6,r5,r0\n\
+	addk  r5,r5,r5\n\
+	addk  r5,r5,r5\n\
+	addik r7,r1,28\n\
+	addk  r8,r7,r5\n\
+	addik r8,r8,4\n\
+	lwi   r5,r20,_rtld_local@GOTOFF\n\
+	brlid r15,_dl_init_internal\n\
+	nop\n\
+	lwi   r5,r1,24\n\
+	lwi   r3,r1,20\n\
+	addk  r4,r5,r5\n\
+	addk  r4,r4,r4\n\
+	addik r6,r1,28\n\
+	addk  r7,r6,r4\n\
+	addik r7,r7,4\n\
+	addik r15,r20,_dl_fini@GOTOFF\n\
+	addik r15,r15,-8\n\
+	brad  r3\n\
+	addik r1,r1,24\n\
+	nop\n\
+	.size _dl_start_user, . - _dl_start_user\n\
+	.previous");
+
+/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or
+   TLS variable, so undefined references should not be allowed to
+   define the value.
+   ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
+   of the main executable's symbols, as for a COPY reloc.  */
+#ifndef RTLD_BOOTSTRAP
+#define elf_machine_type_class(type) \
+  (((type) == R_MICROBLAZE_JUMP_SLOT || \
+    (type) == R_MICROBLAZE_TLSDTPREL32 || \
+    (type) == R_MICROBLAZE_TLSDTPMOD32 || \
+    (type) == R_MICROBLAZE_TLSTPREL32 \
+     ) * ELF_RTYPE_CLASS_PLT \
+   | ((type) == R_MICROBLAZE_COPY) * ELF_RTYPE_CLASS_COPY)
+#else
+#define elf_machine_type_class(type) \
+  (((type) == R_MICROBLAZE_JUMP_SLOT) * ELF_RTYPE_CLASS_PLT \
+   | ((type) == R_MICROBLAZE_COPY) * ELF_RTYPE_CLASS_COPY)
+#endif
+
+/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.  */
+#define ELF_MACHINE_JMP_SLOT	R_MICROBLAZE_JUMP_SLOT
+
+/* The microblaze never uses Elf32_Rel relocations.  */
+#define ELF_MACHINE_NO_REL 1
+
+static inline Elf32_Addr
+elf_machine_fixup_plt (struct link_map *map, lookup_t t,
+		       const Elf32_Rela *reloc,
+		       Elf32_Addr *reloc_addr, Elf32_Addr value)
+{
+  return *reloc_addr = value;
+}
+
+/* Return the final value of a plt relocation. Ignore the addend.  */
+static inline Elf32_Addr
+elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc,
+		       Elf32_Addr value)
+{
+  return value;
+}
+
+#endif /* !dl_machine_h */
+
+/* Names of the architecture-specific auditing callback functions.  */
+#define ARCH_LA_PLTENTER microblaze_gnu_pltenter
+#define ARCH_LA_PLTEXIT microblaze_gnu_pltexit
+
+#ifdef RESOLVE_MAP
+
+/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
+   MAP is the object containing the reloc.  */
+
+/* Macro to put 32-bit relocation value into 2 words */
+#define PUT_REL_64(rel_addr,val) \
+  do { \
+    ((unsigned short *)(rel_addr))[1] = (val) >> 16; \
+    ((unsigned short *)(rel_addr))[3] = (val) & 0xffff; \
+  } while (0)
+
+auto inline void __attribute__ ((always_inline))
+elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
+		  const Elf32_Sym *sym, const struct r_found_version *version,
+		  void *const reloc_addr_arg, int skip_ifunc)
+{
+  Elf32_Addr *const reloc_addr = reloc_addr_arg;
+  const int r_type = ELF32_R_TYPE (reloc->r_info);
+
+  if (__builtin_expect (r_type == R_MICROBLAZE_64_PCREL, 0))
+    PUT_REL_64(reloc_addr, map->l_addr + reloc->r_addend);
+  else if (r_type == R_MICROBLAZE_REL)
+    *reloc_addr = map->l_addr + reloc->r_addend;
+  else
+    {
+      const Elf32_Sym *const refsym = sym;
+      struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);
+      Elf32_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value;
+
+      value += reloc->r_addend;
+      if (r_type == R_MICROBLAZE_GLOB_DAT ||
+          r_type == R_MICROBLAZE_JUMP_SLOT ||
+          r_type == R_MICROBLAZE_32)
+	{
+	  *reloc_addr = value;
+	}
+      else if (r_type == R_MICROBLAZE_COPY)
+	{
+	  if (sym != NULL && (sym->st_size > refsym->st_size
+	      || (sym->st_size < refsym->st_size && GLRO(dl_verbose))) )
+	    {
+	      const char *strtab;
+
+	      strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
+	      _dl_error_printf ("\
+%s: Symbol `%s' has different size in shared object, consider re-linking\n",
+				rtld_progname ?: "<program name unknown>",
+				strtab + refsym->st_name);
+	    }
+	  memcpy (reloc_addr_arg, (void *) value,
+		  MIN (sym->st_size, refsym->st_size));
+	}
+      else if (r_type == R_MICROBLAZE_NONE)
+	{
+	}
+#if !defined RTLD_BOOTSTRAP
+      else if (r_type == R_MICROBLAZE_TLSDTPMOD32)
+	{
+	  if (sym_map != NULL)
+	    *reloc_addr = sym_map->l_tls_modid;
+	}
+      else if (r_type == R_MICROBLAZE_TLSDTPREL32)
+	{
+	  if (sym != NULL)
+	    *reloc_addr = sym->st_value + reloc->r_addend;
+	}
+      else if (r_type == R_MICROBLAZE_TLSTPREL32)
+	{
+	  if (sym != NULL)
+	    {
+	      CHECK_STATIC_TLS (map, sym_map);
+	      *reloc_addr = sym->st_value + sym_map->l_tls_offset + reloc->r_addend;
+	    }
+	}
+#endif
+      else
+	{
+	  _dl_reloc_bad_type (map, r_type, 0);
+	}
+    }
+}
+
+auto inline void
+elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
+			   void *const reloc_addr_arg)
+{
+  Elf32_Addr *const reloc_addr = reloc_addr_arg;
+  PUT_REL_64(reloc_addr, l_addr + reloc->r_addend);
+}
+
+auto inline void
+elf_machine_lazy_rel (struct link_map *map,
+		      Elf32_Addr l_addr, const Elf32_Rela *reloc,
+		      int skip_ifunc)
+{
+  Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset);
+  if (ELF32_R_TYPE (reloc->r_info) == R_MICROBLAZE_JUMP_SLOT)
+    *reloc_addr += l_addr;
+  else
+    _dl_reloc_bad_type (map, ELF32_R_TYPE (reloc->r_info), 1);
+}
+
+#endif /* RESOLVE_MAP */
diff --git a/ports/sysdeps/microblaze/dl-tls.h b/ports/sysdeps/microblaze/dl-tls.h
new file mode 100644
index 0000000..0e7f2e5
--- /dev/null
+++ b/ports/sysdeps/microblaze/dl-tls.h
@@ -0,0 +1,29 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Type used for the representation of TLS information in the GOT.  */
+typedef struct
+{
+  unsigned long int ti_module;
+  unsigned long int ti_offset;
+} tls_index;
+
+extern void *__tls_get_addr (tls_index *ti);
+
+/* Value used for dtv entries for which the allocation is delayed.  */
+#define TLS_DTV_UNALLOCATED	((void *) -1l)
diff --git a/ports/sysdeps/microblaze/dl-trampoline.S b/ports/sysdeps/microblaze/dl-trampoline.S
new file mode 100644
index 0000000..0b94ac7
--- /dev/null
+++ b/ports/sysdeps/microblaze/dl-trampoline.S
@@ -0,0 +1,109 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+#include <libc-symbols.h>
+
+#ifndef PROF
+
+    .text
+    .globl  _dl_runtime_resolve
+    .type   _dl_runtime_resolve, @function
+    .align  4
+_dl_runtime_resolve:
+    addik r1,r1,-40
+    swi   r5,r1,12
+    swi   r6,r1,16
+    swi   r7,r1,20
+    swi   r8,r1,24
+    swi   r9,r1,28
+    swi   r10,r1,32
+    swi   r15,r1,0
+    addk r5,r0,r4
+    brlid r15, _dl_fixup
+    addk r6,r0,r3; /* delay slot */
+    lwi   r10,r1,32
+    lwi   r9,r1,28
+    lwi   r8,r1,24
+    lwi   r7,r1,20
+    lwi   r6,r1,16
+    lwi   r5,r1,12
+    lwi   r15,r1,0
+    brad  r3
+    addik r1,r1,40; /* delay slot */
+    .size _dl_runtime_resolve, . - _dl_runtime_resolve
+
+    .text
+    .globl  _dl_runtime_profile
+    .type   _dl_runtime_profile, @function
+    .align  4
+_dl_runtime_profile:
+    addik r1,r1,-40
+    swi   r5,r1,12
+    swi   r6,r1,16
+    swi   r7,r1,20
+    swi   r8,r1,24
+    swi   r9,r1,28
+    swi   r10,r1,32
+    swi   r15,r1,0
+    addk r5,r0,r4
+    brlid r15, _dl_profile_fixup
+    addk r6,r0,r3; /* delay slot */
+    lwi   r10,r1,32
+    lwi   r9,r1,28
+    lwi   r8,r1,24
+    lwi   r7,r1,20
+    lwi   r6,r1,16
+    lwi   r5,r1,12
+    lwi   r15,r1,0
+    brad  r3
+    addik r1,r1,40; /* delay slot */
+    .size _dl_runtime_profile, . - _dl_runtime_profile
+
+#else
+
+    .text
+    .globl  _dl_runtime_resolve
+    .type   _dl_runtime_resolve, @function
+    .align  4
+_dl_runtime_resolve:
+    addik r1,r1,-40
+    swi   r5,r1,12
+    swi   r6,r1,16
+    swi   r7,r1,20
+    swi   r8,r1,24
+    swi   r9,r1,28
+    swi   r10,r1,32
+    swi   r15,r1,0
+    addk r5,r0,r4
+    brlid r15, fixup
+    addk r6,r0,r3; /* delay slot */
+    lwi   r10,r1,32
+    lwi   r9,r1,28
+    lwi   r8,r1,24
+    lwi   r7,r1,20
+    lwi   r6,r1,16
+    lwi   r5,r1,12
+    lwi   r15,r1,0
+    brad  r3
+    addik r1,r1,40; /* delay slot */
+    .size _dl_runtime_resolve, . - _dl_runtime_resolve
+    .globl _dl_runtime_profile
+    .set _dl_runtime_profile, _dl_runtime_resolve
+
+#endif
diff --git a/ports/sysdeps/microblaze/fegetround.c b/ports/sysdeps/microblaze/fegetround.c
new file mode 100644
index 0000000..4f47dd1
--- /dev/null
+++ b/ports/sysdeps/microblaze/fegetround.c
@@ -0,0 +1,24 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+
+int
+fegetround (void)
+{
+  return FE_TONEAREST;
+}
diff --git a/ports/sysdeps/microblaze/fesetround.c b/ports/sysdeps/microblaze/fesetround.c
new file mode 100644
index 0000000..8ca4e51
--- /dev/null
+++ b/ports/sysdeps/microblaze/fesetround.c
@@ -0,0 +1,25 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+
+int
+fesetround (int round)
+{
+  return (round == FE_TONEAREST) ? 0 : 1;
+}
+libm_hidden_def (fesetround)
diff --git a/ports/sysdeps/microblaze/gccframe.h b/ports/sysdeps/microblaze/gccframe.h
new file mode 100644
index 0000000..4561cf2
--- /dev/null
+++ b/ports/sysdeps/microblaze/gccframe.h
@@ -0,0 +1,21 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define FIRST_PSEUDO_REGISTER 78
+
+#include <sysdeps/generic/gccframe.h>
diff --git a/ports/sysdeps/microblaze/jmpbuf-unwind.h b/ports/sysdeps/microblaze/jmpbuf-unwind.h
new file mode 100644
index 0000000..237b035
--- /dev/null
+++ b/ports/sysdeps/microblaze/jmpbuf-unwind.h
@@ -0,0 +1,46 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <setjmp.h>
+#include <stdint.h>
+#include <unwind.h>
+#include <sysdep.h>
+
+/* Test if longjmp to JMPBUF would unwind the frame
+   containing a local variable at ADDRESS.  */
+#define _JMPBUF_UNWINDS(jmpbuf, address, demangle)		\
+  ((void *) (address) < (void *) demangle ((jmpbuf)[0].__sp))
+
+#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
+  _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
+
+static inline uintptr_t __attribute__ ((unused))
+_jmpbuf_sp (__jmp_buf regs)
+{
+  uintptr_t sp = regs[0].__sp;
+#ifdef PTR_DEMANGLE
+  PTR_DEMANGLE (sp);
+#endif
+  return sp;
+}
+
+#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
+  ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj))
+
+/* We use the normal longjmp for unwinding.  */
+#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
diff --git a/ports/sysdeps/microblaze/ldsodefs.h b/ports/sysdeps/microblaze/ldsodefs.h
new file mode 100644
index 0000000..bf64bd2
--- /dev/null
+++ b/ports/sysdeps/microblaze/ldsodefs.h
@@ -0,0 +1,41 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MICROBLAZE_LDSODEFS_H
+#define _MICROBLAZE_LDSODEFS_H 1
+
+#include <elf.h>
+
+struct La_microblaze_regs;
+struct La_microblaze_retval;
+
+#define ARCH_PLTENTER_MEMBERS \
+    Elf32_Addr (*microblaze_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *,	\
+				     uintptr_t *, struct La_microblaze_regs *,	\
+				     unsigned int *, const char *name,		\
+				     long int *framesizep);
+
+#define ARCH_PLTEXIT_MEMBERS \
+    unsigned int (*microblaze_gnu_pltexit) (Elf32_Sym *, unsigned int, uintptr_t *,	\
+				      uintptr_t *,				\
+				      const struct La_microblaze_regs *,		\
+				      struct La_microblaze_retval *, const char *);
+
+#include_next <ldsodefs.h>
+
+#endif
diff --git a/ports/sysdeps/microblaze/libc-tls.c b/ports/sysdeps/microblaze/libc-tls.c
new file mode 100644
index 0000000..1dacdca
--- /dev/null
+++ b/ports/sysdeps/microblaze/libc-tls.c
@@ -0,0 +1,32 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <csu/libc-tls.c>
+#include <dl-tls.h>
+
+/* On Microblaze, linker optimizations are not required, so __tls_get_addr
+   can be called even in statically linked binaries.  In this case module
+   must be always 1 and PT_TLS segment exist in the binary, otherwise it
+   would not link.  */
+
+void *
+__tls_get_addr (tls_index *ti)
+{
+  dtv_t *dtv = THREAD_DTV ();
+  return (char *) dtv[1].pointer.val + ti->ti_offset;
+}
diff --git a/ports/sysdeps/microblaze/libm-test-ulps b/ports/sysdeps/microblaze/libm-test-ulps
new file mode 100644
index 0000000..9fde9b1
--- /dev/null
+++ b/ports/sysdeps/microblaze/libm-test-ulps
@@ -0,0 +1,1728 @@
+# Begin of automatic generation
+
+# atan2
+Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025":
+float: 1
+ifloat: 1
+Test "atan2 (-max_value, -min_value) == -pi/2":
+float: 1
+ifloat: 1
+Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025":
+float: 1
+ifloat: 1
+Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772":
+float: 1
+ifloat: 1
+
+# atanh
+Test "atanh (0.75) == 0.972955074527656652552676371721589865":
+float: 1
+ifloat: 1
+
+# cacos
+Test "Imaginary part of: cacos (+0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (+0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-1.0 + 0x1p50 i) == 1.570796326794897507409741391764983781004 - 3.535050620855721078027883819436759661753e1 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-1.0 - 0x1p50 i) == 1.570796326794897507409741391764983781004 + 3.535050620855721078027883819436759661753e1 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-2 - 3 i) == 2.1414491111159960199416055713254211 + 1.9833870299165354323470769028940395 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (0.5 + +0 i) == 1.047197551196597746154214461093167628066 - 0 i":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 0 i) == 1.047197551196597746154214461093167628066 + +0 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp1023 + 0x1.fp1023 i) == 7.853981633974483096156608458198757210493e-1 - 7.107906849659093345062145442726115449315e2 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp127 + 0x1.fp127 i) == 7.853981633974483096156608458198757210493e-1 - 8.973081118419833726837456344608533993585e1 i":
+double: 1
+idouble: 1
+
+# cacosh
+Test "Real part of: cacosh (+0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (+0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 + +0 i) == +0 + 2.094395102393195492308428922186335256131 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 - 0 i) == +0 - 2.094395102393195492308428922186335256131 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + pi i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - pi i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - 0 i":
+float: 1
+ifloat: 1
+
+# casin
+Test "Imaginary part of: casin (+0 + 0.5 i) == +0 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 + 1.0 i) == +0 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 + 1.5 i) == +0 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (+0 - 0.5 i) == +0 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 - 1.0 i) == +0 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 - 1.5 i) == +0 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0 + 0.5 i) == -0 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 + 1.0 i) == -0 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 + 1.5 i) == -0 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0 - 0.5 i) == -0 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 - 1.0 i) == -0 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 - 1.5 i) == -0 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp1023 + 0x1.fp1023 i) == 7.853981633974483096156608458198757210493e-1 + 7.107906849659093345062145442726115449315e2 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp127 + 0x1.fp127 i) == 7.853981633974483096156608458198757210493e-1 + 8.973081118419833726837456344608533993585e1 i":
+double: 1
+idouble: 1
+
+# casinh
+Test "Real part of: casinh (-0.5 + +0 i) == -0.4812118250596034474977589134243684231352 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 0 i) == -0.4812118250596034474977589134243684231352 - 0 i":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 + +0 i) == -0.8813735870195430252326093249797923090282 + +0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 - 0 i) == -0.8813735870195430252326093249797923090282 - 0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.5 + +0 i) == -1.194763217287109304111930828519090523536 + +0 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.5 - 0 i) == -1.194763217287109304111930828519090523536 - 0 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0.5 + +0 i) == 0.4812118250596034474977589134243684231352 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0 i) == 0.4812118250596034474977589134243684231352 - 0 i":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (0x1.fp1023 + 0x1.fp1023 i) == 7.107906849659093345062145442726115449315e2 + 7.853981633974483096156608458198757210493e-1 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1.fp127 + 0x1.fp127 i) == 8.973081118419833726837456344608533993585e1 + 7.853981633974483096156608458198757210493e-1 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.0 + +0 i) == 0.8813735870195430252326093249797923090282 + +0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 - 0 i) == 0.8813735870195430252326093249797923090282 - 0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.5 + +0 i) == 1.194763217287109304111930828519090523536 + +0 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.5 - 0 i) == 1.194763217287109304111930828519090523536 - 0 i":
+double: 1
+idouble: 1
+
+# catan
+Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# catanh
+Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
+double: 4
+idouble: 4
+Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
+double: 1
+idouble: 1
+
+# cbrt
+Test "cbrt (-27.0) == -3.0":
+double: 1
+idouble: 1
+Test "cbrt (0.75) == 0.908560296416069829445605878163630251":
+double: 1
+idouble: 1
+Test "cbrt (0.9921875) == 0.997389022060725270579075195353955217":
+double: 1
+idouble: 1
+
+# ccos
+Test "Imaginary part of: ccos (-0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (-0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (-0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (-0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
+float: 1
+ifloat: 1
+Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0x1p-1074 + 1440 i) == inf - 5.981479269486130556466515778180916082415e301 i":
+double: 1
+idouble: 1
+
+# ccosh
+Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (-710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (-89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (1440 + 0x1p-1074 i) == inf + 5.981479269486130556466515778180916082415e301 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+
+# cexp
+Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (-95 + 0.75 i) == 4.039714446238306526889476684000081624047e-42 + 3.763383677300535390271646960780570275931e-42 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (1440 + 0x1p-1074 i) == inf + 1.196295853897226111293303155636183216483e302 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (500 + 0x1p1023 i) == -1.159886268932754433233243794561351783426e217 + 7.904017694554466595359379965081774849708e216 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i":
+float: 2
+ifloat: 2
+
+# clog
+Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 2.649094276923003995420209214900915462737e-10 + 3.141592653589793238462643383279502884197 i":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 2.649094282537168795982991778475646793277e-10 + 3.141592652530155111500161671113150737892 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (-0x1.234566p-40 - 1.0 i) == 5.354083939753840089583620652120903838944e-25 - 1.570796326795931422008642456283782656359 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.fp+127 + 0x1p-149 i) == 88.69109041335841930424871526389807508374 + pi i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.fp+127 - 0x1p-149 i) == 88.69109041335841930424871526389807508374 - pi i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x0.ffffffp0 + 0x0.ffffffp-100 i) == -5.960464655174753498633255797994360530379e-8 + 7.888609052210118054117285652827862296732e-31 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000566p0 + 0x1.234p-10 i) == 8.298731898331237038231468223024422855654e-5 + 1.110938609507128729312743251313024793990e-3 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.fp+127 + 0x1p-149 i) == 88.69109041335841930424871526389807508374 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.fp+127 - 0x1p-149 i) == 88.69109041335841930424871526389807508374 - 0 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i) == -744.0934983311012896593986823853525458290 + pi/4 i":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1p-147 + 0x1p-147 i) == -101.5460619520319878296245057936228672231 + pi/4 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x2818p-15 + 0x798fp-15 i) == 1.5366822245016167178749091974664853785194e-08 + 1.2522014929038946066987318471922169174157 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (1.0 + 0x1.234566p-10 i) == 6.172834701221959432440126967147726538097e-7 + 1.111110564353742042376451655136933182201e-3 i":
+float: 1
+ifloat: 1
+
+# clog10
+Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 1.150487026509145544402795327729455391948e-10 + 1.364376353841841347485783625431355770210 i":
+double: 2
+idouble: 2
+Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 1.150487026509145544402795327729455391948e-10 + 1.364376353841841347485783625431355770210 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 1.150487028947346337782682105935961875822e-10 + 1.364376353381646356131680448946397884147 i":
+double: 2
+idouble: 2
+Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 1.150487028947346337782682105935961875822e-10 + 1.364376353381646356131680448946397884147 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1.fp+1023 + 0x1p-1074 i) == 308.2409272754311106024666378243768099991 + 1.364376353841841347485783625431355770210 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1.fp+1023 - 0x1p-1074 i) == 308.2409272754311106024666378243768099991 - 1.364376353841841347485783625431355770210 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1.fp+127 + 0x1p-149 i) == 38.51805116050395969095658815123105801479 + 1.364376353841841347485783625431355770210 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-0x1.fp+127 - 0x1p-149 i) == 38.51805116050395969095658815123105801479 - 1.364376353841841347485783625431355770210 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-0x1p-1074 + 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 + 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1p-1074 - 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 - 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1p-149 + 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 + 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1p-149 - 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 - 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-1.0 + 0x1.234566p-20 i) == 2.556638434669064077889576526006849923281e-13 + 1.364375882602207106407956770293808181427 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (0x0.fffffffffffff8p0 + 0x0.fffffffffffff8p-1000 i) == -4.821637332766435821255375046554377090472e-17 + 4.053112396770095089737411317782466262176e-302 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x0.ffffffp0 + 0x0.ffffffp-100 i) == -2.588596909321764128428416045209904492216e-8 + 3.425979381266895667295625489912064603415e-31 i":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-10 i) == 3.604093470239754109961125085078190708674e-5 + 4.824745078422174667425851670822596859720e-4 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-10 i) == 3.604093470239754109961125085078190708674e-5 + 4.824745078422174667425851670822596859720e-4 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-100 i) == 3.577293486783822178310971763308187385546e-5 + 3.897399639875661463735636919790792140598e-31 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.234566p-30 + 1.0 i) == 2.438200411482400072282924063740535840474e-19 + 6.821881764607257184291586401763604544928e-1 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.234566p-50 + 1.0 i) == 2.217530356103816369479108963807448194409e-31 + 6.821881769209202348667823902864283966959e-1 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.234566p-60 + 1.0 i) == 2.114801746467415208319767917450504756866e-37 + 6.821881769209206733143018621078368211515e-1 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i) == 38.68235441693561449174780668781319348761 + pi/4*log10(e) i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (0x1.fffffep+127 + 1.0 i) == 38.53183941910362389414093724045094697423 + 1.276276851248440096917018665609900318458e-39 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i) == 1.3918041236396763648388478552321724382899e-29 + 0.6263795733790237053262025311642907438291 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i) == 2.2081507730821788480616336165447731164865e-32 + 0.5484039935757001196548030312819898864760 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i) == 2.2081507730821788480616336165447731164865e-32 + 0.5484039935757001196548030312819898864760 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x164c74eea876p-45 + 0x16f393482f77p-45 i) == -1.3155760824064879362415202279780039150764e-26 + 0.3473590599762514228227328130640352044313 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1a6p-10 + 0x3a5p-10 i) == -6.2126412844802358329771948751248003038444e-07 + 0.4977135139537443711784513409096950995985 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1074 + 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 + 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1p-1074 + 0x1p-1074 i) == -323.1557003452838130619487034867432642357 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1074 - 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 - 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-147 + 0x1p-147 i) == -44.10089436477324509881274807713822842154 + pi/4*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-149 + 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 + 0.6821881769209206737428918127156778851051 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-149 + 0x1p-149 i) == -44.70295435610120748924022586658721447508 + pi/4*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-149 - 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 - 0.6821881769209206737428918127156778851051 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-509 + 1.0 i) == 7.730698388614835910296270976605350994446e-308 + 6.821881769209206737428918127156778851051e-1 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-510 + 1.0 i) == 1.932674597153708977574067744151337748612e-308 + 6.821881769209206737428918127156778851051e-1 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-511 + 1.0 i) == 4.831686492884272443935169360378344371529e-309 + 6.821881769209206737428918127156778851051e-1 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-61 + 1.0 i) == 4.084085680564517578238994467153626207224e-38 + 6.821881769209206735545466044044889962925e-1 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-62 + 1.0 i) == 1.021021420141129394559748616788406551878e-38 + 6.821881769209206736487192085600834406988e-1 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-63 + 1.0 i) == 2.552553550352823486399371541971016379740e-39 + 6.821881769209206736958055106378806629019e-1 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog10 (0x2818p-15 + 0x798fp-15 i) == 6.6737261053986614395049481326819059203910e-09 + 0.5438241985991753781478398141908629586460 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x2818p-15 + 0x798fp-15 i) == 6.6737261053986614395049481326819059203910e-09 + 0.5438241985991753781478398141908629586460 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (0x2dd46725bp-35 + 0x7783a1284p-35 i) == 1.9312741086596516918394613098872836703188e-20 + 0.5231613813514771042838490538484014771862 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i) == -1.9440841725722970687903291200493082253766e-13 + 0.5193774116724956222518530053006822210323 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i) == -1.9440841725722970687903291200493082253766e-13 + 0.5193774116724956222518530053006822210323 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x4447d7175p-35 + 0x6c445e00ap-35 i) == -6.4375803621988389731799033530075237868110e-21 + 0.4378257977686804492768642780897650927167 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i) == 3.6079845358966994996207055940336690133424e-30 + 0.5243112258263349992771652393178033846555 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x9b57bp-20 + 0xcb7b4p-20 i) == -1.7182001068739620267773842120965071561416e-11 + 0.3990121149225253562859800593935899629087 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0xf2p-10 + 0x3e3p-10 i) == 2.6921240173351112953324592659528481616879e-06 + 0.5785726025799636431142862788413361783862 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0xf2p-10 + 0x3e3p-10 i) == 2.6921240173351112953324592659528481616879e-06 + 0.5785726025799636431142862788413361783862 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i) == 2.3329549194675052736016290082882121135546e-26 + 0.4561756099441139182878993697611751382976 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (1.0 + 0x1.234566p-10 i) == 2.680828048441605163181684680300513080769e-7 + 4.825491868832381486767558728169977751564e-4 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i":
+float: 1
+ifloat: 1
+
+# cos
+Test "cos (0x1p+120) == -9.25879022854837867303861764107414946730833e-01":
+float: 1
+ifloat: 1
+Test "cos (0x1p+127) == 7.81914638714960072263910298466369236613162e-01":
+float: 1
+ifloat: 1
+Test "cos (M_PI_6l * 2.0) == 0.5":
+double: 1
+idouble: 1
+Test "cos (M_PI_6l * 4.0) == -0.5":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+# cos_tonearest
+Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+
+# cpow
+Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
+float: 1
+ifloat: 1
+Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
+double: 1
+float: 4
+idouble: 1
+ifloat: 4
+Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
+double: 1
+float: 4
+idouble: 1
+ifloat: 4
+Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+# csin
+Test "Real part of: csin (-0.75 + 710.5 i) == -1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i":
+double: 1
+idouble: 1
+Test "Real part of: csin (-0.75 + 89.5 i) == -2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: csin (-0.75 - 710.5 i) == -1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i":
+double: 1
+idouble: 1
+Test "Real part of: csin (-0.75 - 89.5 i) == -2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: csin (0.75 + 710.5 i) == 1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i":
+double: 1
+idouble: 1
+Test "Real part of: csin (0.75 + 89.5 i) == 2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: csin (0.75 - 710.5 i) == 1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i":
+double: 1
+idouble: 1
+Test "Real part of: csin (0.75 - 89.5 i) == 2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: csin (0x1p-1074 + 1440 i) == 5.981479269486130556466515778180916082415e301 + inf i":
+double: 1
+idouble: 1
+
+# csinh
+Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (-710.5 + 0.75 i) == -1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (-710.5 - 0.75 i) == -1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (-89.5 + 0.75 i) == -2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (-89.5 - 0.75 i) == -2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (1440 + 0x1p-1074 i) == inf + 5.981479269486130556466515778180916082415e301 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+
+# csqrt
+Test "Real part of: csqrt (-0x1.000002p-126 - 0x1.000002p-126 i) == 4.934094449071842328766868579214125217132e-20 - 1.191195773697904627170323731331667740087e-19 i":
+double: 1
+idouble: 1
+Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csqrt (0x1.000002p-126 + 0x1.000002p-126 i) == 1.191195773697904627170323731331667740087e-19 + 4.934094449071842328766868579214125217132e-20 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffep+127 + 1.0 i) == 1.844674352395372953599975585936590505260e+19 + 2.710505511993121390769065968615872097053e-20 i":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 1.379778091031440685006200821918878702861e+154 + 3.257214233483129514781233066898042490248e+153 i":
+double: 1
+idouble: 1
+
+# ctan
+Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1p1023 + 1 i) == -0.2254627924997545057926782581695274244229 + 0.8786063118883068695462540226219865087189 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0x1p127 + 1 i) == 0.2446359391192790896381501310437708987204 + 0.9101334047676183761532873794426475906201 i":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x3.243f6cp-1 + 0 i) == -2.287733242885645987394874673945769518150e7 + 0.0 i":
+float: 1
+ifloat: 1
+
+# ctan_tonearest
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i":
+float: 1
+ifloat: 1
+
+# ctanh
+Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0 + 0x3.243f6cp-1 i) == 0.0 - 2.287733242885645987394874673945769518150e7 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
+float: 2
+ifloat: 2
+Test "Imaginary part of: ctanh (1 + 0x1p1023 i) == 0.8786063118883068695462540226219865087189 - 0.2254627924997545057926782581695274244229 i":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (1 + 0x1p127 i) == 0.9101334047676183761532873794426475906201 + 0.2446359391192790896381501310437708987204 i":
+double: 1
+idouble: 1
+
+# ctanh_tonearest
+Test "Real part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i":
+float: 1
+ifloat: 1
+
+# erf
+Test "erf (1.25) == 0.922900128256458230136523481197281140":
+double: 1
+idouble: 1
+
+# erfc
+Test "erfc (0x1.f7303cp+1) == 2.705500297238986897105236321218861842255e-8":
+double: 1
+idouble: 1
+Test "erfc (0x1.ffa002p+2) == 1.233585992097580296336099501489175967033e-29":
+float: 1
+ifloat: 1
+Test "erfc (2.0) == 0.00467773498104726583793074363274707139":
+double: 1
+idouble: 1
+Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8":
+double: 1
+idouble: 1
+
+# exp10
+Test "exp10 (-1) == 0.1":
+double: 1
+idouble: 1
+Test "exp10 (-305) == 1.0e-305":
+double: 1
+idouble: 1
+Test "exp10 (-36) == 1.0e-36":
+double: 1
+idouble: 1
+Test "exp10 (3) == 1000":
+double: 1
+idouble: 1
+Test "exp10 (36) == 1.0e36":
+double: 1
+idouble: 1
+
+# expm1
+Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
+double: 1
+idouble: 1
+Test "expm1 (1) == M_El - 1.0":
+float: 1
+ifloat: 1
+Test "expm1 (500.0) == 1.4035922178528374107397703328409120821806e+217":
+double: 1
+idouble: 1
+
+# fma
+Test "fma (-0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983) == 0x1.7ffffe00007ffp-983":
+double: 1
+idouble: 1
+Test "fma (0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300) == 0x1.fffffffffffffp-1":
+double: 1
+idouble: 1
+Test "fma (0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022) == -0x0.b22757123bbe9p-1022":
+double: 1
+idouble: 1
+Test "fma (0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022) == 0x0.0000010000003p-1022":
+double: 1
+idouble: 1
+Test "fma (0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24) == 0x1.7ff802p+13":
+float: 1
+ifloat: 1
+Test "fma (0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022) == 0x0.0000010000001p-1022":
+double: 1
+idouble: 1
+
+# hypot
+Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (-0.7, 12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (-12.4, -0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (-12.4, 0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (12.4, -0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+
+# j0
+Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "j0 (0.75) == 0.864242275166648623555731103820923211":
+float: 1
+ifloat: 1
+Test "j0 (0x1.d7ce3ap+107) == 2.775523647291230802651040996274861694514e-17":
+float: 2
+ifloat: 2
+Test "j0 (10.0) == -0.245935764451348335197760862485328754":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "j0 (2.0) == 0.223890779141235668051827454649948626":
+float: 2
+ifloat: 2
+Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "j0 (8.0) == 0.171650807137553906090869407851972001":
+float: 1
+ifloat: 1
+
+# j1
+Test "j1 (0x1.3ffp+74) == 1.818984347516051243459364437186082741567e-12":
+double: 1
+idouble: 1
+Test "j1 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
+double: 1
+idouble: 1
+Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
+float: 2
+ifloat: 2
+Test "j1 (2.0) == 0.576724807756873387202448242269137087":
+double: 1
+idouble: 1
+Test "j1 (8.0) == 0.234636346853914624381276651590454612":
+double: 1
+idouble: 1
+
+# jn
+Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (0, 0.75) == 0.864242275166648623555731103820923211":
+float: 1
+ifloat: 1
+Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
+float: 2
+ifloat: 2
+Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
+float: 1
+ifloat: 1
+Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
+float: 2
+ifloat: 2
+Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
+double: 1
+idouble: 1
+Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
+double: 1
+idouble: 1
+Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "jn (2, 0x1.ffff62p+99) == -4.43860668048170034334926693188979974489e-16":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+Test "jn (2, 2.4048255576957729) == 0.43175480701968038399746111312430703":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
+float: 1
+ifloat: 1
+Test "jn (3, 2.4048255576957729) == 0.19899990535769083404042146764530813":
+double: 3
+idouble: 3
+Test "jn (4, 2.4048255576957729) == 0.647466661641779720084932282551219891E-1":
+double: 1
+idouble: 1
+Test "jn (5, 2.4048255576957729) == 0.163892432048058525099230549946147698E-1":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "jn (6, 2.4048255576957729) == 0.34048184720278336646673682895929161E-2":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+Test "jn (7, 2.4048255576957729) == 0.60068836573295394221291569249883076E-3":
+double: 3
+float: 5
+idouble: 3
+ifloat: 5
+Test "jn (8, 2.4048255576957729) == 0.92165786705344923232879022467054148E-4":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+Test "jn (9, 2.4048255576957729) == 0.12517270977961513005428966643852564E-4":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+# lgamma
+Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+# log10
+Test "log10 (0.75) == -0.124938736608299953132449886193870744":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "log10 (e) == log10(e)":
+float: 1
+ifloat: 1
+
+# log1p
+Test "log1p (-0.25) == -0.287682072451780927439219005993827432":
+float: 1
+ifloat: 1
+
+# pow
+Test "pow (0x0.ffffffp0, -0x1p24) == 2.7182819094701610539628664526874952929416":
+float: 1
+ifloat: 1
+Test "pow (0x0.ffffffp0, 0x1p24) == 0.3678794302077803437135155590023422899744":
+float: 1
+ifloat: 1
+Test "pow (0x1.000002p0, 0x1p24) == 7.3890552180866447284268641248075832310141":
+float: 1
+ifloat: 1
+
+# sin_tonearest
+Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226":
+float: 1
+ifloat: 1
+
+# sincos
+Test "sincos (0x1p+120, &sin_res, &cos_res) puts -9.25879022854837867303861764107414946730833e-01 in cos_res":
+float: 1
+ifloat: 1
+Test "sincos (0x1p+127, &sin_res, &cos_res) puts 7.81914638714960072263910298466369236613162e-01 in cos_res":
+float: 1
+ifloat: 1
+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
+double: 1
+idouble: 1
+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
+float: 1
+ifloat: 1
+
+# tgamma
+Test "tgamma (-0.5) == -2 sqrt (pi)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0.5) == sqrt (pi)":
+float: 1
+ifloat: 1
+Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# y0
+Test "y0 (0x1.3ffp+74) == 1.818984347516051243459467456433028748678e-12":
+double: 1
+idouble: 1
+Test "y0 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
+double: 1
+idouble: 1
+Test "y0 (0x1p-10) == -4.4865150767109739412411806297168793661098":
+double: 1
+idouble: 1
+Test "y0 (0x1p-110) == -4.861363632869203777249475899390797503250e+1":
+double: 1
+idouble: 1
+Test "y0 (0x1p-20) == -8.8992283012125827603076426611387876938160":
+float: 1
+ifloat: 1
+Test "y0 (0x1p-30) == -1.3311940304267782826037118027401817264906e+1":
+float: 1
+ifloat: 1
+Test "y0 (0x1p-40) == -1.7724652307320814696990854700366226762563e+1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y0 (0x1p-50) == -2.2137364310373846564919987139743760738155e+1":
+float: 1
+ifloat: 1
+Test "y0 (0x1p-70) == -3.0962788316479910300778244424468159753887e+1":
+double: 1
+idouble: 1
+Test "y0 (0x1p-80) == -3.5375500319532942168707373066828113573541e+1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "y0 (1.5) == 0.382448923797758843955068554978089862":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
+float: 1
+ifloat: 1
+Test "y0 (8.0) == 0.223521489387566220527323400498620359":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# y1
+Test "y1 (0.125) == -5.19993611253477499595928744876579921":
+double: 1
+idouble: 1
+Test "y1 (0x1.27e204p+99) == -8.881610148467797208469612080785210013461e-16":
+double: 1
+idouble: 1
+Test "y1 (0x1p-10) == -6.5190099301063115047395187618929589514382e+02":
+double: 1
+idouble: 1
+Test "y1 (1.5) == -0.412308626973911295952829820633445323":
+float: 1
+ifloat: 1
+Test "y1 (10.0) == 0.249015424206953883923283474663222803":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "y1 (2.0) == -0.107032431540937546888370772277476637":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y1 (8.0) == -0.158060461731247494255555266187483550":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+# yn
+Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
+float: 1
+ifloat: 1
+Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
+double: 1
+idouble: 1
+Test "yn (1, 1.5) == -0.412308626973911295952829820633445323":
+float: 1
+ifloat: 1
+Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (1, 8.0) == -0.158060461731247494255555266187483550":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
+double: 1
+idouble: 1
+Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (10, 1.0) == -121618014.278689189288130426667971145":
+double: 1
+idouble: 1
+Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
+double: 2
+idouble: 2
+Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
+double: 1
+idouble: 1
+Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (3, 10.0) == -0.251362657183837329779204747654240998":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
+double: 1
+idouble: 1
+
+# Maximal error of functions:
+Function: "atan2":
+float: 1
+ifloat: 1
+
+Function: "atanh":
+float: 1
+ifloat: 1
+
+Function: Real part of "cacos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "cacos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "cacosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "cacosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "casin":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "casin":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "casinh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "casinh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "catan":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "catanh":
+double: 4
+idouble: 4
+
+Function: "cbrt":
+double: 1
+idouble: 1
+
+Function: Real part of "ccos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ccos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "ccosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ccosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "cexp":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: Imaginary part of "cexp":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: Real part of "clog":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "clog":
+float: 1
+ifloat: 1
+
+Function: Real part of "clog10":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Imaginary part of "clog10":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "cos":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: "cos_tonearest":
+float: 1
+ifloat: 1
+
+Function: Real part of "cpow":
+double: 2
+float: 4
+idouble: 2
+ifloat: 4
+
+Function: Imaginary part of "cpow":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Real part of "csin":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "csinh":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "csinh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "csqrt":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "csqrt":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "ctan":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ctan":
+double: 1
+idouble: 1
+
+Function: Real part of "ctan_tonearest":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "ctan_tonearest":
+float: 1
+ifloat: 1
+
+Function: Real part of "ctanh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ctanh":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: Real part of "ctanh_tonearest":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "ctanh_tonearest":
+float: 1
+ifloat: 1
+
+Function: "erf":
+double: 1
+idouble: 1
+
+Function: "erfc":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "exp10":
+double: 1
+idouble: 1
+
+Function: "expm1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "fma":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "hypot":
+float: 1
+ifloat: 1
+
+Function: "j0":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: "j1":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: "jn":
+double: 4
+float: 5
+idouble: 4
+ifloat: 5
+
+Function: "lgamma":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: "log10":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: "log1p":
+float: 1
+ifloat: 1
+
+Function: "pow":
+float: 1
+ifloat: 1
+
+Function: "sin_tonearest":
+float: 1
+ifloat: 1
+
+Function: "sincos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "tan":
+double: 1
+idouble: 1
+
+Function: "tgamma":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "y0":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: "y1":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+
+Function: "yn":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+
+# end of automatic generation
diff --git a/ports/sysdeps/microblaze/machine-gmon.h b/ports/sysdeps/microblaze/machine-gmon.h
new file mode 100644
index 0000000..0cfaa19
--- /dev/null
+++ b/ports/sysdeps/microblaze/machine-gmon.h
@@ -0,0 +1,30 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* We need a special version of the `mcount' function because it has
+   to preserve more registers than your usual function.  */
+
+void __mcount_internal (unsigned long frompc, unsigned long selfpc);
+
+#define _MCOUNT_DECL(frompc, selfpc) \
+void __mcount_internal (unsigned long frompc, unsigned long selfpc)
+
+
+/* Define MCOUNT as empty since we have the implementation in another
+   file.  */
+#define MCOUNT
diff --git a/ports/sysdeps/microblaze/math_private.h b/ports/sysdeps/microblaze/math_private.h
new file mode 100644
index 0000000..245c2e8
--- /dev/null
+++ b/ports/sysdeps/microblaze/math_private.h
@@ -0,0 +1,8 @@
+#ifndef _MATH_PRIVATE_H
+
+#define libc_fesetround(rnd)			({ 0; })
+#define libc_feholdexcept_setround(env, exc)	({ (void) (env); 0; })
+
+#include_next <math_private.h>
+
+#endif
diff --git a/ports/sysdeps/microblaze/memusage.h b/ports/sysdeps/microblaze/memusage.h
new file mode 100644
index 0000000..a4974b2
--- /dev/null
+++ b/ports/sysdeps/microblaze/memusage.h
@@ -0,0 +1,21 @@
+/* Copyright (C) 2000-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define GETSP() ({ register uintptr_t stack_ptr asm ("r1"); stack_ptr; })
+
+#include <sysdeps/generic/memusage.h>
diff --git a/ports/sysdeps/microblaze/nptl/Makefile b/ports/sysdeps/microblaze/nptl/Makefile
new file mode 100644
index 0000000..3c0521a
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/Makefile
@@ -0,0 +1,21 @@
+# Copyright (C) 2005-2013 Free Software Foundation, Inc.
+#
+# This file is part of the GNU C Library.
+#
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# The GNU C Library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library.  If not, see
+# <http://www.gnu.org/licenses/>.
+
+ifeq ($(subdir),csu)
+gen-as-const-headers += tcb-offsets.sym
+endif
diff --git a/ports/sysdeps/microblaze/nptl/pthread_spin_lock.c b/ports/sysdeps/microblaze/nptl/pthread_spin_lock.c
new file mode 100644
index 0000000..0d12517
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/pthread_spin_lock.c
@@ -0,0 +1,24 @@
+/* Copyright (C) 2008-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SPIN_LOCK_READS_BETWEEN_CMPXCHG 1000
+
+/* We can't use the normal "#include <nptl/pthread_spin_lock.c>" because
+   it will resolve to this very file.  Using "sysdeps/.." as reference to the
+   top level directory does the job.  */
+#include <sysdeps/../nptl/pthread_spin_lock.c>
diff --git a/ports/sysdeps/microblaze/nptl/pthreaddef.h b/ports/sysdeps/microblaze/nptl/pthreaddef.h
new file mode 100644
index 0000000..7250437
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/pthreaddef.h
@@ -0,0 +1,41 @@
+/* Copyright (C) 2002-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <string.h>
+
+/* Default stack size.  */
+#define ARCH_STACK_DEFAULT_SIZE	(2 * 1024 * 1024)
+
+/* Required stack pointer alignment at beginning.  */
+#define STACK_ALIGN		16
+
+/* Minimal stack size after allocating thread descriptor and guard size.  */
+#define MINIMAL_REST_STACK	2048
+
+/* Alignment requirement for TCB.  */
+#define TCB_ALIGNMENT		16
+
+
+/* Location of current stack frame.  */
+#define CURRENT_STACK_FRAME	__builtin_frame_address (0)
+
+/* XXX Until we have a better place keep the definitions here.  */
+
+#define __exit_thread_inline(val) \
+  INLINE_SYSCALL (exit, 1, (val))
diff --git a/ports/sysdeps/microblaze/nptl/tcb-offsets.sym b/ports/sysdeps/microblaze/nptl/tcb-offsets.sym
new file mode 100644
index 0000000..92cc441
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/tcb-offsets.sym
@@ -0,0 +1,11 @@
+#include <sysdep.h>
+#include <tls.h>
+
+--
+
+-- Derive offsets relative to the thread register.
+#define thread_offsetof(mem)	(long)(offsetof(struct pthread, mem) - sizeof(struct pthread))
+
+MULTIPLE_THREADS_OFFSET		thread_offsetof (header.multiple_threads)
+PID_OFFSET			thread_offsetof (pid)
+TID_OFFSET			thread_offsetof (tid)
diff --git a/ports/sysdeps/microblaze/nptl/tls.h b/ports/sysdeps/microblaze/nptl/tls.h
new file mode 100644
index 0000000..ede216b
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/tls.h
@@ -0,0 +1,155 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _TLS_H
+#define _TLS_H	1
+
+#include <dl-sysdep.h>
+
+#ifndef __ASSEMBLER__
+# include <stdbool.h>
+# include <stddef.h>
+# include <stdint.h>
+
+/* Type for the dtv.  */
+typedef union dtv
+{
+  size_t counter;
+  struct
+  {
+    void *val;
+    bool is_static;
+  } pointer;
+} dtv_t;
+
+#else /* __ASSEMBLER__ */
+# include <tcb-offsets.h>
+#endif /* __ASSEMBLER__ */
+
+#ifndef __ASSEMBLER__
+
+/* Get system call information.  */
+# include <sysdep.h>
+
+/* The TP points to the start of the thread blocks.  */
+# define TLS_DTV_AT_TP	1
+
+/* Get the thread descriptor definition.  */
+# include <nptl/descr.h>
+
+typedef struct
+{
+  dtv_t *dtv;
+  void *private;
+} tcbhead_t;
+
+static inline void *__microblaze_get_thread_area(void)
+{
+	register void * volatile __microblaze_thread_area asm ("r21");
+	return (void *)__microblaze_thread_area;
+}
+
+# define READ_THREAD_POINTER() \
+    ({ __microblaze_get_thread_area(); })
+
+/* This is the size of the initial TCB.  */
+# define TLS_INIT_TCB_SIZE	sizeof (tcbhead_t)
+
+/* Alignment requirements for the initial TCB.  */
+# define TLS_INIT_TCB_ALIGN	__alignof__ (tcbhead_t)
+
+/* This is the size of the TCB.  */
+# define TLS_TCB_SIZE		sizeof (tcbhead_t)
+
+/* This is the size we need before TCB.  */
+# define TLS_PRE_TCB_SIZE	sizeof (struct pthread)
+
+/* Alignment requirements for the TCB.  */
+# define TLS_TCB_ALIGN		__alignof__ (struct pthread)
+
+/* Install the dtv pointer.  The pointer passed is to the element with
+   index -1 which contain the length.  */
+# define INSTALL_DTV(tcbp, dtvp) \
+  (((tcbhead_t *) (tcbp))->dtv = (dtvp) + 1)
+
+/* Install new dtv for current thread.  */
+# define INSTALL_NEW_DTV(dtv) \
+  (THREAD_DTV() = (dtv))
+
+/* Return dtv of given thread descriptor.  */
+# define GET_DTV(tcbp) \
+  (((tcbhead_t *) (tcbp))->dtv)
+
+/* Code to initially initialize the thread pointer.
+   r21 is reserved for thread pointer.  */
+# define TLS_INIT_TP(tcbp, secondcall) \
+  ({ __asm __volatile ("or r21,r0,%0" : : "r" ((void *)tcbp)); 0; })
+
+/* Return the address of the dtv for the current thread.  */
+# define THREAD_DTV() \
+  (((tcbhead_t *) READ_THREAD_POINTER())->dtv)
+
+/* Return the thread descriptor for the current thread.  */
+# define THREAD_SELF \
+ (((struct pthread *) READ_THREAD_POINTER()) - 1)
+
+/* Magic for libthread_db to know how to do THREAD_SELF.  */
+# define DB_THREAD_SELF \
+  CONST_THREAD_AREA (32, sizeof (struct pthread))
+
+/* Read member of the thread descriptor directly.  */
+# define THREAD_GETMEM(descr, member) (descr->member)
+
+/* Same as THREAD_GETMEM, but the member offset can be non-constant.  */
+# define THREAD_GETMEM_NC(descr, member, idx) \
+    (descr->member[idx])
+
+/* Set member of the thread descriptor directly.  */
+# define THREAD_SETMEM(descr, member, value) \
+    (descr->member = (value))
+
+/* Same as THREAD_SETMEM, but the member offset can be non-constant.  */
+# define THREAD_SETMEM_NC(descr, member, idx, value) \
+    (descr->member[idx] = (value))
+
+/* Get and set the global scope generation counter in struct pthread.  */
+#define THREAD_GSCOPE_FLAG_UNUSED 0
+#define THREAD_GSCOPE_FLAG_USED   1
+#define THREAD_GSCOPE_FLAG_WAIT   2
+#define THREAD_GSCOPE_RESET_FLAG() \
+  do									     \
+    { int __res								     \
+	= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag,	     \
+			       THREAD_GSCOPE_FLAG_UNUSED);		     \
+      if (__res == THREAD_GSCOPE_FLAG_WAIT)				     \
+	lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE);   \
+    }									     \
+  while (0)
+#define THREAD_GSCOPE_SET_FLAG() \
+  do									     \
+    {									     \
+      THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED;	     \
+      atomic_write_barrier ();						     \
+    }									     \
+  while (0)
+#define THREAD_GSCOPE_WAIT() \
+  GL(dl_wait_lookup_done) ()
+
+#endif /* __ASSEMBLER__ */
+
+#endif	/* tls.h */
diff --git a/ports/sysdeps/microblaze/preconfigure b/ports/sysdeps/microblaze/preconfigure
new file mode 100644
index 0000000..90e2e63
--- /dev/null
+++ b/ports/sysdeps/microblaze/preconfigure
@@ -0,0 +1,3 @@
+case "$machine" in
+microblaze*)	base_machine=microblaze machine=microblaze ;;
+esac
diff --git a/ports/sysdeps/microblaze/setjmp.S b/ports/sysdeps/microblaze/setjmp.S
new file mode 100644
index 0000000..b5d7509
--- /dev/null
+++ b/ports/sysdeps/microblaze/setjmp.S
@@ -0,0 +1,75 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+/* This source produces 3 functions:
+   __sigsetjmp(jmpbuf,savemask)
+   setjmp(jmpbuf) - equivalent to __sigsetjump(jmpbuf, 1)
+   _setjmp(jmpbuf) - equivalent to __sigsetjump(jmpbuf, 0)
+*/
+
+#ifndef setjmp_name
+#define setjmp_name __sigsetjmp
+#define SET_MASK_ARG
+#else
+#define SET_MASK_ARG    addik r6,r0,SAVEMASK
+#endif
+
+ENTRY (setjmp_name)
+    swi   r1,r5,0
+    swi   r2,r5,4
+    swi   r13,r5,8
+    swi   r14,r5,12
+    swi   r15,r5,16
+    swi   r16,r5,20
+    swi   r17,r5,24
+    swi   r18,r5,28
+    swi   r19,r5,32
+    swi   r20,r5,36
+    swi   r21,r5,40
+    swi   r22,r5,44
+    swi   r23,r5,48
+    swi   r24,r5,52
+    swi   r25,r5,56
+    swi   r26,r5,60
+    swi   r27,r5,64
+    swi   r28,r5,68
+    swi   r29,r5,72
+    swi   r30,r5,76
+    swi   r31,r5,80
+
+    SET_MASK_ARG
+
+	/* Make a tail call to __sigjmp_save; it takes the same args.  */
+#ifdef	PIC
+	/* We cannot use the PLT, because it requires that r20 be set, but
+           we can't save and restore our caller's value.  Instead, we do an
+           indirect jump through the GOT, using for the temporary register
+           %ecx, which is call-clobbered.  */
+    mfs   r12,rpc
+    addik r12,r12,_GLOBAL_OFFSET_TABLE_+8
+    lwi   r12,r12,__sigjmp_save@GOT
+    brad  r12
+#else
+    brid  __sigjmp_save
+#endif
+    nop
+END (setjmp_name)
+
+MICROBLAZE_HIDDEN_DEF (setjmp_name)
diff --git a/ports/sysdeps/microblaze/shlib-versions b/ports/sysdeps/microblaze/shlib-versions
new file mode 100644
index 0000000..6ec43db
--- /dev/null
+++ b/ports/sysdeps/microblaze/shlib-versions
@@ -0,0 +1 @@
+microblaze.*-.*-linux.*	DEFAULT			GLIBC_2.18
diff --git a/ports/sysdeps/microblaze/sotruss-lib.c b/ports/sysdeps/microblaze/sotruss-lib.c
new file mode 100644
index 0000000..26c2b9b
--- /dev/null
+++ b/ports/sysdeps/microblaze/sotruss-lib.c
@@ -0,0 +1,49 @@
+/* Override generic sotruss-lib.c to define actual functions for MicroBlaze.
+   Copyright (C) 2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define HAVE_ARCH_PLTENTER
+#define HAVE_ARCH_PLTEXIT
+
+#include <elf/sotruss-lib.c>
+
+ElfW(Addr)
+la_microblaze_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)),
+                     unsigned int ndx __attribute__ ((unused)),
+                     uintptr_t *refcook, uintptr_t *defcook,
+                     La_microblaze_regs *regs, unsigned int *flags,
+                     const char *symname, long int *framesizep)
+{
+  print_enter (refcook, defcook, symname,
+	       regs->lr_r0, regs->lr_r1, regs->lr_sp,
+	       *flags);
+
+  /* No need to copy anything, we will not need the parameters in any case.  */
+  *framesizep = 0;
+
+  return sym->st_value;
+}
+
+unsigned int
+la_microblaze_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
+                    uintptr_t *defcook, const struct La_microblaze_regs *inregs,
+                    struct La_microblaze_retval *outregs, const char *symname)
+{
+  print_exit (refcook, defcook, symname, outregs->lrv_r3);
+
+  return 0;
+}
diff --git a/ports/sysdeps/microblaze/stackinfo.h b/ports/sysdeps/microblaze/stackinfo.h
new file mode 100644
index 0000000..228b3f5
--- /dev/null
+++ b/ports/sysdeps/microblaze/stackinfo.h
@@ -0,0 +1,34 @@
+/* Copyright (C) 2001-2012 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This file contains a bit of information about the stack allocation
+   of the processor.  */
+
+#ifndef _STACKINFO_H
+#define _STACKINFO_H	1
+
+#include <elf.h>
+
+/* On MicroBlaze the stack grows down.  */
+#define _STACK_GROWS_DOWN	1
+
+/* Default to an executable stack.  PF_X can be overridden if PT_GNU_STACK is
+ * present, but it is presumed absent.  */
+#define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X)
+
+#endif	/* stackinfo.h */
diff --git a/ports/sysdeps/microblaze/start.S b/ports/sysdeps/microblaze/start.S
new file mode 100644
index 0000000..e8849d6
--- /dev/null
+++ b/ports/sysdeps/microblaze/start.S
@@ -0,0 +1,67 @@
+/* Copyright (C) 1995-2012 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+	.text
+	.globl _start
+	.type _start,@function
+_start:
+	/* On entry the stack contains the following args:
+           r1+0 - argc
+           r1+4 - argv[0]
+           ...
+           r1+4*(argc-1) - argv[argc-1]
+           r1+4*argc - NULL
+           r1+4*argc + 4 - envp[0]
+           ...
+           NULL
+	*/
+	addk	r3,r0,r0
+	addk	r5,r1,r0
+1:
+	addik	r5,r5,4
+	lw	r4,r5,r0
+	bneid	r4,1b
+	addik	r3,r3,1
+	addik	r6,r3,-1
+	sw	r6,r1,r0
+	addik	r7,r1,4
+	addik	r1,r1,-24
+#ifdef SHARED
+	/* Setup PIC */
+	mfs	r20,rpc
+	addik	r20,r20,_GLOBAL_OFFSET_TABLE_+8
+	lwi	r5,r20,main@GOT
+	lwi	r8,r20,__libc_csu_init@GOT
+	lwi	r9,r20,__libc_csu_fini@GOT
+	brid	__libc_start_main@PLT
+	addk	r10,r0,r0
+#else
+	addik	r5,r0,main
+	addik	r8,r0,__libc_csu_init
+	addik	r9,r0,__libc_csu_fini
+	brid	__libc_start_main
+	addk	r10,r0,r0
+#endif
+
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
+__data_start:
+	.long 0
+	.weak data_start
+	data_start = __data_start
diff --git a/ports/sysdeps/microblaze/sysdep.h b/ports/sysdeps/microblaze/sysdep.h
new file mode 100644
index 0000000..7f46e82
--- /dev/null
+++ b/ports/sysdeps/microblaze/sysdep.h
@@ -0,0 +1,91 @@
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdeps/generic/sysdep.h>
+
+#ifdef	__ASSEMBLER__
+
+/* Syntactic details of assembler.  */
+
+#define ALIGNARG(log2) log2
+#define ASM_SIZE_DIRECTIVE(name) .size name,.-name
+
+/* Define an entry point visible from C.  */
+#define ENTRY(name)							      \
+  .globl C_SYMBOL_NAME(name);						      \
+  .type C_SYMBOL_NAME(name),@function;							      \
+  .align ALIGNARG(2);							      \
+  C_LABEL(name)								      \
+  CALL_MCOUNT
+
+#undef END
+#define END(name) ASM_SIZE_DIRECTIVE(name)
+
+
+/* If compiled for profiling, call `_mcount' at the start of each function.  */
+#ifdef	PROF
+/* The mcount code relies on a normal frame pointer being on the stack
+   to locate our caller, so push one just for its benefit.  */
+#define CALL_MCOUNT \
+  addik r1,r1,-4;	\
+  swi r15,r1,0;		\
+  brlid r15,JUMPTARGET(mcount); \
+  nop;			\
+  lwi r15,r1,0;		\
+  addik r1,r1,4;
+#else
+#define CALL_MCOUNT		/* Do nothing.  */
+#endif
+
+/* Since C identifiers are not normally prefixed with an underscore
+   on this system, the asm identifier `syscall_error' intrudes on the
+   C name space.  Make sure we use an innocuous name.  */
+#define syscall_error	__syscall_error
+#define mcount		_mcount
+
+#define PSEUDO(name, syscall_name, args)				      \
+  .globl syscall_error;							      \
+  ENTRY (name)								      \
+    DO_CALL (syscall_name, args);					      \
+    /* jcc JUMPTARGET(syscall_error) FIXME */
+
+#define ret \
+  rtsd r15,8; nop;
+
+#undef PSEUDO_END
+#define PSEUDO_END(name)						      \
+  END (name)
+
+#undef JUMPTARGET
+#ifdef PIC
+# define JUMPTARGET(name)	name##@PLTPC
+#else
+# define JUMPTARGET(name)	name
+#endif
+
+/* Local label name for asm code.  */
+#ifndef L
+#define L(name) $L##name
+#endif
+
+#define MICROBLAZE_HIDDEN_DEF_REAL(x) \
+hidden_def(x)
+
+#define MICROBLAZE_HIDDEN_DEF(x) MICROBLAZE_HIDDEN_DEF_REAL(C_SYMBOL_NAME(x))
+
+#endif	/* __ASSEMBLER__ */
diff --git a/ports/sysdeps/microblaze/tls-macros.h b/ports/sysdeps/microblaze/tls-macros.h
new file mode 100644
index 0000000..9a8030a
--- /dev/null
+++ b/ports/sysdeps/microblaze/tls-macros.h
@@ -0,0 +1,44 @@
+/* Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define TLS_LD(x)					\
+  ({ char *__result;					\
+     int __offset;					\
+     extern void *__tls_get_addr (void *);		\
+     asm ("mfs r20,rpc \n"				\
+	  "addik r20,r20,_GLOBAL_OFFSET_TABLE_+8\n"     \
+	  "addik %0,r20," #x "@TLSLDM"                  \
+	  : "=r" (__result));				\
+     __result = (char *)__tls_get_addr (__result);	\
+     asm ("addik %0,r0,"#x"@TLSDTPREL"                  \
+	  : "=r" (__offset));				\
+     (int *) (__result + __offset); })
+
+
+#define TLS_GD(x)					\
+  ({ int *__result;					\
+     extern void *__tls_get_addr (void *);		\
+     asm ("mfs  r20,rpc\n"				\
+	  "addik r20,r20,_GLOBAL_OFFSET_TABLE_+8\n"     \
+	  "addik %0,r20," #x "@TLSGD"			\
+	  : "=r" (__result));				\
+     (int *)__tls_get_addr (__result); })
+
+#define TLS_LE(x) TLS_LD(x)
+
+#define TLS_IE(x) TLS_GD(x)
diff --git a/ports/sysdeps/microblaze/tst-audit.h b/ports/sysdeps/microblaze/tst-audit.h
new file mode 100644
index 0000000..4a8c664
--- /dev/null
+++ b/ports/sysdeps/microblaze/tst-audit.h
@@ -0,0 +1,25 @@
+/* Definitions for testing PLT entry/exit auditing.  MicroBlaze version.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define pltenter la_microblaze_gnu_pltenter
+#define pltexit la_microblaze_gnu_pltexit
+#define La_regs La_microblaze_regs
+#define La_retval La_microblaze_retval
+#define int_retval lrv_r3
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/Makefile b/ports/sysdeps/unix/sysv/linux/microblaze/Makefile
new file mode 100644
index 0000000..6145532
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/Makefile
@@ -0,0 +1,3 @@
+ifeq ($(subdir),resource)
+sysdep_routines += backtrace_linux
+endif
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/Versions b/ports/sysdeps/unix/sysv/linux/microblaze/Versions
new file mode 100644
index 0000000..aa48a3c
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/Versions
@@ -0,0 +1,5 @@
+libc {
+  GLIBC_2.18 {
+    fallocate64;
+  }
+}
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S b/ports/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S
new file mode 100644
index 0000000..ff3fda4
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S
@@ -0,0 +1,29 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+	.text
+ENTRY (__revisit_longjmp_chk)
+	rtsd	r15,0
+	nop
+PSEUDO_END (__revisit_longjmp_chk)
+ENTRY (____longjmp_chk)
+	rtsd	r15,0
+	nop
+PSEUDO_END (____longjmp_chk)
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h
new file mode 100644
index 0000000..a7730d0
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h
@@ -0,0 +1,86 @@
+/* O_*, F_*, FD_* bit values for Linux.
+   Copyright (C) 1995-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef	_FCNTL_H
+# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+#endif
+
+#define O_CREAT		 00000100	/* not fcntl */
+#define O_TRUNC		 00001000	/* not fcntl */
+#define O_EXCL		 00000200	/* not fcntl */
+#define O_NOCTTY	 00000400	/* not fcntl */
+
+#define O_NONBLOCK	 00004000
+#define O_APPEND	 00002000
+#define O_SYNC		 04000000
+
+#define __O_DIRECTORY	 00200000	/* Must be a directory.  */
+#define __O_NOFOLLOW	 00400000	/* Do not follow links.  */
+#define __O_CLOEXEC	 02000000 	/* Set close_on_exec.  */
+
+#define __O_DIRECT	 00040000 	/* Direct disk access.  */
+#define __O_NOATIME	 01000000 	/* Do not set atime.  */
+#define __O_PATH	 010000000 	/* Resolve pathname but do not open file.  */
+
+/* Not necessary, files are always with 64bit off_t.  */
+#define __O_LARGEFILE	00100000
+
+#define __O_DSYNC	00010000	/* Synchronize data.  */
+
+#define F_GETLK		5	/* Get record locking info.  */
+#define F_SETLK		6	/* Set record locking info (non-blocking).  */
+#define F_SETLKW	7	/* Set record locking info (blocking).  */
+#define F_GETLK64	12	/* Get record locking info.  */
+#define F_SETLK64	13	/* Set record locking info (non-blocking).  */
+#define F_SETLKW64	14 	/* Set record locking info (blocking).  */
+
+#define __F_SETOWN	8	/* Get owner of socket (receiver of SIGIO).  */
+#define __F_GETOWN	9	/* Set owner of socket (receiver of SIGIO).  */
+
+/* For posix fcntl() and `l_type' field of a `struct flock' for lockf() */
+#define F_RDLCK		0	/* Read lock.  */
+#define F_WRLCK		1	/* Write lock.  */
+#define F_UNLCK		2	/* Remove lock.  */
+
+/* for old implementation of bsd flock () */
+#define F_EXLCK		4	/* or 3 */
+#define F_SHLCK		8	/* or 4 */
+
+/* We don't need to support __USE_FILE_OFFSET64.  */
+struct flock
+  {
+    short int l_type;	/* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;	/* Where `l_start' is relative to (like `lseek').  */
+    __off_t l_start;	/* Offset where the lock begins.  */
+    __off_t l_len;	/* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;	/* Process holding the lock.  */
+  };
+
+#ifdef __USE_LARGEFILE64
+struct flock64
+  {
+    short int l_type;	/* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;	/* Where `l_start' is relative to (like `lseek').  */
+    __off64_t l_start;	/* Offset where the lock begins.  */
+    __off64_t l_len;	/* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;	/* Process holding the lock.  */
+  };
+#endif
+
+/* Include generic Linux declarations.  */
+#include <bits/fcntl-linux.h>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/bits/mman.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/mman.h
new file mode 100644
index 0000000..9ff9350
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/mman.h
@@ -0,0 +1,42 @@
+/* Definitions for POSIX memory map interface.  Linux/MicroBlaze version.
+
+   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_MMAN_H
+# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
+#endif
+
+/* The following definitions basically come from the kernel headers.
+   But the kernel header is not namespace clean.  */
+
+#ifdef __USE_MISC
+/* These are Linux-specific.  */
+# define MAP_GROWSDOWN	0x00100		/* Stack-like segment.  */
+# define MAP_DENYWRITE	0x00800		/* ETXTBSY */
+# define MAP_EXECUTABLE	0x01000		/* Mark it as an executable.  */
+# define MAP_LOCKED	0x02000		/* Lock the mapping.  */
+# define MAP_NORESERVE	0x04000		/* Don't check for reservations.  */
+# define MAP_POPULATE	0x08000		/* Populate (prefault) pagetables.  */
+# define MAP_NONBLOCK	0x10000		/* Do not block on IO.  */
+# define MAP_STACK	0x20000		/* Allocation is for a stack.  */
+# define MAP_HUGETLB	0x40000		/* Create huge page mapping.  */
+#endif
+
+/* Include generic Linux declarations.  */
+#include <bits/mman-linux.h>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/bits/stat.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/stat.h
new file mode 100644
index 0000000..4ec533c
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/stat.h
@@ -0,0 +1,203 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _SYS_STAT_H && !defined _FCNTL_H
+# error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+#endif
+
+#ifndef _BITS_STAT_H
+#define _BITS_STAT_H	1
+
+/* Versions of the `struct stat' data structure.  */
+#define _STAT_VER_LINUX_OLD	1
+#define _STAT_VER_KERNEL	1
+#define _STAT_VER_SVR4		2
+#define _STAT_VER_LINUX		3
+#define _STAT_VER		_STAT_VER_LINUX	/* The one defined below.  */
+
+/* Versions of the `xmknod' interface.  */
+#define _MKNOD_VER_LINUX	1
+#define _MKNOD_VER_SVR4		2
+#define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits defined below.  */
+
+#ifndef __USE_FILE_OFFSET64
+struct stat
+{
+        __dev_t         st_dev; /* Device. */
+        __ino_t         st_ino; /* File serial number. */
+        __mode_t        st_mode; /* File mode. */
+        __nlink_t       st_nlink; /* Link count. */
+        __uid_t         st_uid; /* User ID of the file's owner. */
+        __gid_t         st_gid; /* Group ID of the file's group. */
+        __dev_t         st_rdev; /* Device number, if device. */
+        unsigned long   __pad2;
+        __off_t         st_size; /* Size of file, in bytes. */
+        __blksize_t     st_blksize; /* Optimal block size for I/O. */
+        int             __pad3;
+        __blkcnt_t      st_blocks; /* Number 512-byte blocks allocated. */
+#ifdef __USE_MISC
+        /* Nanosecond resolution timestamps are stored in a format
+         * equivalent to 'struct timespec'. This is the type used
+         * whenever possible but the Unix namespace rules do not allow the
+         * identifier 'timespec' to appear in the <sys/stat.h> header.
+         * Therefore we have to handle the use of this header in strictly
+         * standard-compliant sources special. */
+        struct timespec         st_atim; /* Time of last access. */
+        struct timespec         st_mtim; /* Time of last modification. */
+        struct timespec         st_ctim; /* Time of last status change. */
+# define st_atime st_atim.tv_sec        /* Backward compatibility. */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+        __time_t                st_atime; /* Time of last access. */
+        unsigned long int       st_atimensec; /* Nscecs of last access. */
+        __time_t                st_mtime; /* Time of last modification. */
+        unsigned long int       st_mtimensec; /* Nsecs of last modification. */
+        __time_t                st_ctime; /* Time of last status change. */
+        unsigned long int       st_ctimensec; /* Nsecs of last status change. */
+#endif
+        unsigned int    __unused4;
+        unsigned int    __unused5;
+};
+#else /* __USE_FILE_OFFSET64 */
+/* MS: If __USE_FILE_OFFSET64 is setup then struct stat should match stat64
+ * structure. Glibc has no type __dev64_t that's why I had to use standard
+ * type for st_dev and st_rdev. Several architectures uses pads after st_dev
+ * but this approach covers BIG and LITTLE endian. I think it is better to
+ * create one ifdef to separate stats structures. */
+struct stat
+{
+        unsigned long long      st_dev; /* Device. */
+        __ino64_t               st_ino; /* 32bit file serial number. */
+        __mode_t                st_mode; /* File mode. */
+        __nlink_t               st_nlink; /* Link count. */
+        __uid_t                 st_uid; /* User ID of the file's owner. */
+        __gid_t                 st_gid; /* Group ID of the file's group. */
+        unsigned long long      st_rdev; /* Device number, if device. */
+        unsigned long long      __pad2;
+        __off64_t               st_size; /* Size of file, in bytes. */
+        __blksize_t             st_blksize; /* Optimal block size for I/O. */
+        int                     __pad3;
+        __blkcnt64_t            st_blocks; /* Number 512-byte blocks allocated. */
+#ifdef __USE_MISC
+        /* Nanosecond resolution timestamps are stored in a format
+         * equivalent to 'struct timespec'. This is the type used
+         * whenever possible but the Unix namespace rules do not allow the
+         * identifier 'timespec' to appear in the <sys/stat.h> header.
+         * Therefore we have to handle the use of this header in strictly
+         * standard-compliant sources special. */
+        struct timespec         st_atim; /* Time of last access. */
+        struct timespec         st_mtim; /* Time of last modification. */
+        struct timespec         st_ctim; /* Time of last status change. */
+# define st_atime st_atim.tv_sec        /* Backward compatibility. */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+        __time_t                st_atime; /* Time of last access. */
+        unsigned long int       st_atimensec; /* Nscecs of last access. */
+        __time_t                st_mtime; /* Time of last modification. */
+        unsigned long int       st_mtimensec; /* Nsecs of last modification. */
+        __time_t                st_ctime; /* Time of last status change. */
+        unsigned long int       st_ctimensec; /* Nsecs of last status change. */
+#endif
+        unsigned int    __unused4;
+        unsigned int    __unused5;
+};
+#endif /* __USE_FILE_OFFSET64 */
+
+#ifdef __USE_LARGEFILE64
+struct stat64
+{
+        unsigned long long      st_dev; /* Device. */
+        __ino64_t               st_ino; /* 32bit file serial number. */
+        __mode_t                st_mode; /* File mode. */
+        __nlink_t               st_nlink; /* Link count. */
+        __uid_t                 st_uid; /* User ID of the file's owner. */
+        __gid_t                 st_gid; /* Group ID of the file's group. */
+        unsigned long long      st_rdev; /* Device number, if device. */
+        unsigned long long      __pad2;
+        __off64_t               st_size; /* Size of file, in bytes. */
+        __blksize_t             st_blksize; /* Optimal block size for I/O. */
+        int                     __pad3;
+        __blkcnt64_t            st_blocks; /* Number 512-byte blocks allocated. */
+#ifdef __USE_MISC
+        /* Nanosecond resolution timestamps are stored in a format
+         * equivalent to 'struct timespec'. This is the type used
+         * whenever possible but the Unix namespace rules do not allow the
+         * identifier 'timespec' to appear in the <sys/stat.h> header.
+         * Therefore we have to handle the use of this header in strictly
+         * standard-compliant sources special. */
+        struct timespec         st_atim; /* Time of last access. */
+        struct timespec         st_mtim; /* Time of last modification. */
+        struct timespec         st_ctim; /* Time of last status change. */
+# define st_atime st_atim.tv_sec        /* Backward compatibility. */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+        __time_t                st_atime; /* Time of last access. */
+        unsigned long int       st_atimensec; /* Nscecs of last access. */
+        __time_t                st_mtime; /* Time of last modification. */
+        unsigned long int       st_mtimensec; /* Nsecs of last modification. */
+        __time_t                st_ctime; /* Time of last status change. */
+        unsigned long int       st_ctimensec; /* Nsecs of last status change. */
+#endif
+        unsigned int    __unused4;
+        unsigned int    __unused5;
+};
+#endif
+
+/* Tell code we have these members.  */
+#define _STATBUF_ST_BLKSIZE
+#define _STATBUF_ST_RDEV
+/* Nanosecond resolution time values are supported.  */
+#define _STATBUF_ST_NSEC
+
+/* Encoding of the file mode.  */
+
+#define __S_IFMT        0170000 /* These bits determine file type.  */
+
+/* File types.  */
+#define __S_IFDIR       0040000 /* Directory.  */
+#define __S_IFCHR       0020000 /* Character device.  */
+#define __S_IFBLK       0060000 /* Block device.  */
+#define __S_IFREG       0100000 /* Regular file.  */
+#define __S_IFIFO       0010000 /* FIFO.  */
+#define __S_IFLNK       0120000 /* Symbolic link.  */
+#define __S_IFSOCK      0140000 /* Socket.  */
+
+/* POSIX.1b objects.  Note that these macros always evaluate to zero.  But
+   they do it by enforcing the correct use of the macros.  */
+#define __S_TYPEISMQ(buf)  ((buf)->st_mode - (buf)->st_mode)
+#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode)
+#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode)
+
+/* Protection bits.  */
+
+#define __S_ISUID       04000   /* Set user ID on execution.  */
+#define __S_ISGID       02000   /* Set group ID on execution.  */
+#define __S_ISVTX       01000   /* Save swapped text after use (sticky).  */
+#define __S_IREAD       0400    /* Read by owner.  */
+#define __S_IWRITE      0200    /* Write by owner.  */
+#define __S_IEXEC       0100    /* Execute by owner.  */
+
+#ifdef __USE_ATFILE
+# define UTIME_NOW	((1l << 30) - 1l)
+# define UTIME_OMIT	((1l << 30) - 2l)
+#endif
+
+#endif	/* bits/stat.h */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/brk.c b/ports/sysdeps/unix/sysv/linux/microblaze/brk.c
new file mode 100644
index 0000000..9f19fb2
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/brk.c
@@ -0,0 +1,44 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <unistd.h>
+#include <sysdep.h>
+
+/* This must be initialized data because commons can't have aliases.  */
+void *__curbrk = 0;
+
+/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt
+   to work around different old braindamage in the old Linux ELF dynamic
+   linker.  */
+weak_alias (__curbrk, ___brk_addr)
+
+int
+__brk (void *addr)
+{
+  INTERNAL_SYSCALL_DECL (err);
+
+  __curbrk = (void *) INTERNAL_SYSCALL (brk, err, 1, addr);
+  if (__curbrk < addr)
+    {
+      __set_errno (ENOMEM);
+      return -1;
+    }
+
+  return 0;
+}
+weak_alias (__brk, brk)
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/clone.S b/ports/sysdeps/unix/sysv/linux/microblaze/clone.S
new file mode 100644
index 0000000..9917d63
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/clone.S
@@ -0,0 +1,70 @@
+/* Copyright (C) 1996-2013  Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* clone() is even more special than fork() as it mucks with stacks
+   and invokes a function in the right context after its all over.  */
+
+#include <sysdep.h>
+#define _ERRNO_H	1
+#include <bits/errno.h>
+
+/* int clone(int (*fn)(void *arg), void *child_stack, int flags, void *arg,
+	     pid_t *ptid, struct user_desc *tls, pid_t *ctid);
+
+   INCOMING: r5 (fn), r6(child_stack), r7(flags), r8(arg), r9(ptid)
+             r10 (tls), 28(r1) ctid
+   OUTGOING:
+
+   linux: arch/microblaze/entry.S: sys_clone expects
+	r5 (flags)  r6(child stack) r7(stack_size) r8(ptid) r9(ctid) r10(tls)
+*/
+
+        .text
+ENTRY (__clone)
+	addik	r3,r0,-EINVAL
+	beqi	r5,SYSCALL_ERROR_LABEL	; // Invalid func
+	beqi	r6,SYSCALL_ERROR_LABEL	; // Invalid stack
+	addik	r6,r6,-8
+	swi	r5,r6,0			; // Push fn onto child's stack
+	swi	r8,r6,4			; // Push arg for child
+	addk	r5,r0,r7		; // flags for clone() syscall
+	addk	r7,r0,r0
+	addk	r8,r0,r9		; // parent tid ptr
+	lwi	r9,r1,28		; // child tid ptr
+	addik	r12,r0,SYS_ify(clone)
+	brki	r14,8
+	addk	r0,r0,r0
+	addik	r4,r0,-4095
+	cmpu	r4,r4,r3
+	bgei	r4,SYSCALL_ERROR_LABEL
+	beqi	r3,L(thread_start)
+	rtsd	r15,8
+	nop
+
+L(thread_start):
+	lwi	r12,r1,0		; // fn
+	lwi	r5,r1,4			; // arg
+	brald	r15,r12
+	nop
+	addk	r5,r0,r3
+	addik	r12,r0,SYS_ify(exit)
+	brki	r14,8
+	nop
+PSEUDO_END(__clone)
+
+weak_alias(__clone,clone)
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/configure b/ports/sysdeps/unix/sysv/linux/microblaze/configure
new file mode 100644
index 0000000..fa7da73
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/configure
@@ -0,0 +1,4 @@
+# This file is generated from configure.in by Autoconf.  DO NOT EDIT!
+ # Local configure fragment for sysdeps/unix/sysv/linux/microblaze.
+
+arch_minimum_kernel=2.6.30
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/configure.in b/ports/sysdeps/unix/sysv/linux/microblaze/configure.in
new file mode 100644
index 0000000..f283d37
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/configure.in
@@ -0,0 +1,4 @@
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+# Local configure fragment for sysdeps/unix/sysv/linux/microblaze.
+
+arch_minimum_kernel=2.6.30
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/fcntl.c b/ports/sysdeps/unix/sysv/linux/microblaze/fcntl.c
new file mode 100644
index 0000000..ea951bc
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/fcntl.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/fxstat.c b/ports/sysdeps/unix/sysv/linux/microblaze/fxstat.c
new file mode 100644
index 0000000..4f219f0
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/fxstat.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/fxstat.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/fxstatat.c b/ports/sysdeps/unix/sysv/linux/microblaze/fxstatat.c
new file mode 100644
index 0000000..0f8b313
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/fxstatat.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/fxstatat.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getsysstats.c b/ports/sysdeps/unix/sysv/linux/microblaze/getsysstats.c
new file mode 100644
index 0000000..cd8a891
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getsysstats.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* We need to define a special parser for /proc/cpuinfo.  */
+#define GET_NPROCS_PARSER(FD, BUFFER, CP, RE, BUFFER_END, RESULT)	  \
+  do									  \
+    {									  \
+      (RESULT) = 0;							  \
+      /* Read all lines and count the lines starting with the string	  \
+	 "CPU-Family:".  We don't have to fear extremely long lines since \
+	 the kernel will not generate them.  8192 bytes are really	  \
+	 enough.  */							  \
+      char *l;								  \
+      while ((l = next_line (FD, BUFFER, &CP, &RE, BUFFER_END)) != NULL)  \
+	if (strncmp (l, "CPU-Family:", 11) == 0)	      	          \
+	  ++(RESULT);							  \
+    }									  \
+  while (0)
+
+#include <sysdeps/unix/sysv/linux/getsysstats.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/kernel-features.h b/ports/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
new file mode 100644
index 0000000..e690f3e
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
@@ -0,0 +1,30 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+
+/* MicroBlaze glibc support starts with 2.6.30, guaranteeing many kernel features. */
+#define __ASSUME_UTIMES			1
+#define __ASSUME_O_CLOEXEC		1
+#define __ASSUME_SOCK_CLOEXEC		1
+#define __ASSUME_IN_NONBLOCK		1
+#define __ASSUME_PIPE2			1
+#define __ASSUME_EVENTFD2		1
+#define __ASSUME_SIGNALFD4		1
+#define __ASSUME_ACCEPT4		1
+#define __ASSUME_DUP3			1
+
+#include_next <kernel-features.h>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/kernel_stat.h b/ports/sysdeps/unix/sysv/linux/microblaze/kernel_stat.h
new file mode 100644
index 0000000..4466e6a
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/kernel_stat.h
@@ -0,0 +1,49 @@
+/* Definition of `struct stat' used in the kernel
+   Copyright (C) 2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+struct kernel_stat
+{
+        unsigned long   st_dev;         /* Device.  */
+        unsigned long   st_ino;         /* File serial number.  */
+        unsigned int    st_mode;        /* File mode.  */
+        unsigned int    st_nlink;       /* Link count.  */
+        unsigned int    st_uid;         /* User ID of the file's owner.  */
+        unsigned int    st_gid;         /* Group ID of the file's group. */
+        unsigned long   st_rdev;        /* Device number, if device.  */
+        unsigned long   __pad2;
+#define _HAVE_STAT___PAD2
+#define _HAVE_STAT64___PAD2
+        long            st_size;        /* Size of file, in bytes.  */
+        int             st_blksize;     /* Optimal block size for I/O.  */
+        int             __pad3;
+#define _HAVE_STAT___PAD3
+#define _HAVE_STAT64___PAD3
+        long            st_blocks;      /* Number 512-byte blocks allocated. */
+        struct timespec st_atim;
+        struct timespec st_mtim;
+        struct timespec st_ctim;
+#define _HAVE_STAT_NSEC
+#define _HAVE_STAT64_NSEC
+        unsigned int    __unused4;
+#define _HAVE_STAT___UNUSED4
+#define _HAVE_STAT64___UNUSED4
+        unsigned int    __unused5;
+#define _HAVE_STAT___UNUSED5
+#define _HAVE_STAT64___UNUSED5
+};
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/lxstat.c b/ports/sysdeps/unix/sysv/linux/microblaze/lxstat.c
new file mode 100644
index 0000000..0efa0ae
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/lxstat.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/lxstat.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/mmap.S b/ports/sysdeps/unix/sysv/linux/microblaze/mmap.S
new file mode 100644
index 0000000..8aa39bc
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/mmap.S
@@ -0,0 +1,50 @@
+/* Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+#define EINVAL 22
+	.text
+ENTRY (__mmap)
+	addik	r3,r0,-EINVAL
+	andi	r4,r10,0xfff
+	bnei	r4,L(skip)
+	addik	r12,r0,SYS_ify(mmap2)
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10 ;	/* mmap2 takes the offset in pages. */
+	brki	r14,8
+	nop
+L(skip):
+	addik	r4,r0,-4095
+	cmpu	r4,r4,r3
+	bgei	r4,SYSCALL_ERROR_LABEL
+	rtsd	r15,8
+	nop
+PSEUDO_END (__mmap)
+
+weak_alias (__mmap, mmap)
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/msgctl.c b/ports/sysdeps/unix/sysv/linux/microblaze/msgctl.c
new file mode 100644
index 0000000..38aedad
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/msgctl.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/alpha/msgctl.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h
new file mode 100644
index 0000000..24517a8
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h
@@ -0,0 +1,185 @@
+/* Copyright (C) 2002-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_PTHREADTYPES_H
+#define _BITS_PTHREADTYPES_H	1
+
+#include <endian.h>
+
+#define __SIZEOF_PTHREAD_ATTR_T 36
+#define __SIZEOF_PTHREAD_MUTEX_T 24
+#define __SIZEOF_PTHREAD_MUTEXATTR_T 4
+#define __SIZEOF_PTHREAD_COND_T 48
+#define __SIZEOF_PTHREAD_COND_COMPAT_T 12
+#define __SIZEOF_PTHREAD_CONDATTR_T 4
+#define __SIZEOF_PTHREAD_RWLOCK_T 32
+#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
+#define __SIZEOF_PTHREAD_BARRIER_T 20
+#define __SIZEOF_PTHREAD_BARRIERATTR_T 4
+
+
+/* Thread identifiers.  The structure of the attribute type is not
+   exposed on purpose.  */
+typedef unsigned long int pthread_t;
+
+
+union pthread_attr_t
+{
+  char __size[__SIZEOF_PTHREAD_ATTR_T];
+  long int __align;
+};
+#ifndef __have_pthread_attr_t
+typedef union pthread_attr_t pthread_attr_t;
+# define __have_pthread_attr_t	1
+#endif
+
+
+typedef struct __pthread_internal_slist
+{
+  struct __pthread_internal_slist *__next;
+} __pthread_slist_t;
+
+
+/* Data structures for mutex handling.  The structure of the attribute
+   type is not exposed on purpose.  */
+typedef union
+{
+  struct __pthread_mutex_s
+  {
+    int __lock;
+    unsigned int __count;
+    int __owner;
+    /* KIND must stay at this position in the structure to maintain
+       binary compatibility.  */
+    int __kind;
+    unsigned int __nusers;
+    __extension__ union
+    {
+      int __spins;
+      __pthread_slist_t __list;
+    };
+  } __data;
+  char __size[__SIZEOF_PTHREAD_MUTEX_T];
+  long int __align;
+} pthread_mutex_t;
+
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
+  int __align;
+} pthread_mutexattr_t;
+
+
+/* Data structure for conditional variable handling.  The structure of
+   the attribute type is not exposed on purpose.  */
+typedef union
+{
+  struct
+  {
+    int __lock;
+    unsigned int __futex;
+    __extension__ unsigned long long int __total_seq;
+    __extension__ unsigned long long int __wakeup_seq;
+    __extension__ unsigned long long int __woken_seq;
+    void *__mutex;
+    unsigned int __nwaiters;
+    unsigned int __broadcast_seq;
+  } __data;
+  char __size[__SIZEOF_PTHREAD_COND_T];
+  __extension__ long long int __align;
+} pthread_cond_t;
+
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_CONDATTR_T];
+  int __align;
+} pthread_condattr_t;
+
+
+/* Keys for thread-specific data */
+typedef unsigned int pthread_key_t;
+
+
+/* Once-only execution */
+typedef int pthread_once_t;
+
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K
+/* Data structure for read-write lock variable handling.  The
+   structure of the attribute type is not exposed on purpose.  */
+typedef union
+{
+  struct
+  {
+    int __lock;
+    unsigned int __nr_readers;
+    unsigned int __readers_wakeup;
+    unsigned int __writer_wakeup;
+    unsigned int __nr_readers_queued;
+    unsigned int __nr_writers_queued;
+#if __BYTE_ORDER == __BIG_ENDIAN
+    unsigned char __pad1;
+    unsigned char __pad2;
+    unsigned char __shared;
+    /* FLAGS must stay at this position in the structure to maintain
+       binary compatibility.  */
+    unsigned char __flags;
+#else
+    /* FLAGS must stay at this position in the structure to maintain
+       binary compatibility.  */
+    unsigned char __flags;
+    unsigned char __shared;
+    unsigned char __pad1;
+    unsigned char __pad2;
+#endif
+    int __writer;
+  } __data;
+  char __size[__SIZEOF_PTHREAD_RWLOCK_T];
+  long int __align;
+} pthread_rwlock_t;
+
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
+  long int __align;
+} pthread_rwlockattr_t;
+#endif
+
+
+#ifdef __USE_XOPEN2K
+/* POSIX spinlock data type.  */
+typedef volatile int pthread_spinlock_t;
+
+
+/* POSIX barriers data type.  The structure of the type is
+   deliberately not exposed.  */
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_BARRIER_T];
+  long int __align;
+} pthread_barrier_t;
+
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
+  int __align;
+} pthread_barrierattr_t;
+#endif
+
+
+#endif	/* bits/pthreadtypes.h */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/semaphore.h b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/semaphore.h
new file mode 100644
index 0000000..5e6ad38
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/semaphore.h
@@ -0,0 +1,35 @@
+/* Copyright (C) 2002-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SEMAPHORE_H
+# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
+#endif
+
+
+#define __SIZEOF_SEM_T	16
+
+
+/* Value returned if `sem_open' failed.  */
+#define SEM_FAILED      ((sem_t *) 0)
+
+
+typedef union
+{
+  char __size[__SIZEOF_SEM_T];
+  long int __align;
+} sem_t;
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/c++-types.data b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/c++-types.data
new file mode 100644
index 0000000..fde53bf
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/c++-types.data
@@ -0,0 +1,67 @@
+blkcnt64_t:x
+blkcnt_t:l
+blksize_t:l
+caddr_t:Pc
+clockid_t:i
+clock_t:l
+daddr_t:i
+dev_t:y
+fd_mask:l
+fsblkcnt64_t:y
+fsblkcnt_t:m
+fsfilcnt64_t:y
+fsfilcnt_t:m
+fsid_t:8__fsid_t
+gid_t:j
+id_t:j
+ino64_t:y
+ino_t:m
+int16_t:s
+int32_t:i
+int64_t:x
+int8_t:a
+intptr_t:i
+key_t:i
+loff_t:x
+mode_t:j
+nlink_t:j
+off64_t:x
+off_t:l
+pid_t:i
+pthread_attr_t:14pthread_attr_t
+pthread_barrier_t:17pthread_barrier_t
+pthread_barrierattr_t:21pthread_barrierattr_t
+pthread_cond_t:14pthread_cond_t
+pthread_condattr_t:18pthread_condattr_t
+pthread_key_t:j
+pthread_mutex_t:15pthread_mutex_t
+pthread_mutexattr_t:19pthread_mutexattr_t
+pthread_once_t:i
+pthread_rwlock_t:16pthread_rwlock_t
+pthread_rwlockattr_t:20pthread_rwlockattr_t
+pthread_spinlock_t:i
+pthread_t:m
+quad_t:x
+register_t:i
+rlim64_t:y
+rlim_t:m
+sigset_t:10__sigset_t
+size_t:j
+socklen_t:j
+ssize_t:i
+suseconds_t:l
+time_t:l
+u_char:h
+uid_t:j
+uint:j
+u_int:j
+u_int16_t:t
+u_int32_t:j
+u_int64_t:y
+u_int8_t:h
+ulong:m
+u_long:m
+u_quad_t:y
+useconds_t:j
+ushort:t
+u_short:t
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c
new file mode 100644
index 0000000..d0074ed
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c
@@ -0,0 +1,23 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Value passed to 'clone' for initialization of the thread register.  */
+#define TLS_VALUE (pd + 1)
+
+/* Get the real implementation.	 */
+#include <nptl/sysdeps/pthread/createthread.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/fork.c b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/fork.c
new file mode 100644
index 0000000..0c75863
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/fork.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sched.h>
+#include <signal.h>
+#include <sysdep.h>
+#include <tls.h>
+
+#define ARCH_FORK() \
+  INLINE_SYSCALL (clone, 5,                                                   \
+                  CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, 0,     \
+                  NULL, NULL, &THREAD_SELF->tid)
+
+#include <nptl/sysdeps/unix/sysv/linux/fork.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/ld.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/ld.abilist
new file mode 100644
index 0000000..d4cace2
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/ld.abilist
@@ -0,0 +1,12 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ __libc_memalign F
+ __libc_stack_end D 0x4
+ __stack_chk_guard D 0x4
+ __tls_get_addr F
+ _dl_mcount F
+ _r_debug D 0x14
+ calloc F
+ free F
+ malloc F
+ realloc F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libBrokenLocale.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libBrokenLocale.abilist
new file mode 100644
index 0000000..0ca5b6f
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libBrokenLocale.abilist
@@ -0,0 +1,3 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ __ctype_get_mb_cur_max F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libanl.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libanl.abilist
new file mode 100644
index 0000000..c25a1ab
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libanl.abilist
@@ -0,0 +1,6 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ gai_cancel F
+ gai_error F
+ gai_suspend F
+ getaddrinfo_a F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libc.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libc.abilist
new file mode 100644
index 0000000..6e8d993
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libc.abilist
@@ -0,0 +1,2082 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ _Exit F
+ _IO_2_1_stderr_ D 0x98
+ _IO_2_1_stdin_ D 0x98
+ _IO_2_1_stdout_ D 0x98
+ _IO_adjust_column F
+ _IO_adjust_wcolumn F
+ _IO_default_doallocate F
+ _IO_default_finish F
+ _IO_default_pbackfail F
+ _IO_default_uflow F
+ _IO_default_xsgetn F
+ _IO_default_xsputn F
+ _IO_do_write F
+ _IO_doallocbuf F
+ _IO_fclose F
+ _IO_fdopen F
+ _IO_feof F
+ _IO_ferror F
+ _IO_fflush F
+ _IO_fgetpos F
+ _IO_fgetpos64 F
+ _IO_fgets F
+ _IO_file_attach F
+ _IO_file_close F
+ _IO_file_close_it F
+ _IO_file_doallocate F
+ _IO_file_finish F
+ _IO_file_fopen F
+ _IO_file_init F
+ _IO_file_jumps D 0x54
+ _IO_file_open F
+ _IO_file_overflow F
+ _IO_file_read F
+ _IO_file_seek F
+ _IO_file_seekoff F
+ _IO_file_setbuf F
+ _IO_file_stat F
+ _IO_file_sync F
+ _IO_file_underflow F
+ _IO_file_write F
+ _IO_file_xsputn F
+ _IO_flockfile F
+ _IO_flush_all F
+ _IO_flush_all_linebuffered F
+ _IO_fopen F
+ _IO_fprintf F
+ _IO_fputs F
+ _IO_fread F
+ _IO_free_backup_area F
+ _IO_free_wbackup_area F
+ _IO_fsetpos F
+ _IO_fsetpos64 F
+ _IO_ftell F
+ _IO_ftrylockfile F
+ _IO_funlockfile F
+ _IO_fwrite F
+ _IO_getc F
+ _IO_getline F
+ _IO_getline_info F
+ _IO_gets F
+ _IO_init F
+ _IO_init_marker F
+ _IO_init_wmarker F
+ _IO_iter_begin F
+ _IO_iter_end F
+ _IO_iter_file F
+ _IO_iter_next F
+ _IO_least_wmarker F
+ _IO_link_in F
+ _IO_list_all D 0x4
+ _IO_list_lock F
+ _IO_list_resetlock F
+ _IO_list_unlock F
+ _IO_marker_delta F
+ _IO_marker_difference F
+ _IO_padn F
+ _IO_peekc_locked F
+ _IO_popen F
+ _IO_printf F
+ _IO_proc_close F
+ _IO_proc_open F
+ _IO_putc F
+ _IO_puts F
+ _IO_remove_marker F
+ _IO_seekmark F
+ _IO_seekoff F
+ _IO_seekpos F
+ _IO_seekwmark F
+ _IO_setb F
+ _IO_setbuffer F
+ _IO_setvbuf F
+ _IO_sgetn F
+ _IO_sprintf F
+ _IO_sputbackc F
+ _IO_sputbackwc F
+ _IO_sscanf F
+ _IO_str_init_readonly F
+ _IO_str_init_static F
+ _IO_str_overflow F
+ _IO_str_pbackfail F
+ _IO_str_seekoff F
+ _IO_str_underflow F
+ _IO_sungetc F
+ _IO_sungetwc F
+ _IO_switch_to_get_mode F
+ _IO_switch_to_main_wget_area F
+ _IO_switch_to_wbackup_area F
+ _IO_switch_to_wget_mode F
+ _IO_un_link F
+ _IO_ungetc F
+ _IO_unsave_markers F
+ _IO_unsave_wmarkers F
+ _IO_vfprintf F
+ _IO_vfscanf F
+ _IO_vsprintf F
+ _IO_wdefault_doallocate F
+ _IO_wdefault_finish F
+ _IO_wdefault_pbackfail F
+ _IO_wdefault_uflow F
+ _IO_wdefault_xsgetn F
+ _IO_wdefault_xsputn F
+ _IO_wdo_write F
+ _IO_wdoallocbuf F
+ _IO_wfile_jumps D 0x54
+ _IO_wfile_overflow F
+ _IO_wfile_seekoff F
+ _IO_wfile_sync F
+ _IO_wfile_underflow F
+ _IO_wfile_xsputn F
+ _IO_wmarker_delta F
+ _IO_wsetb F
+ ___brk_addr D 0x4
+ __adjtimex F
+ __after_morecore_hook D 0x4
+ __argz_count F
+ __argz_next F
+ __argz_stringify F
+ __asprintf F
+ __asprintf_chk F
+ __assert F
+ __assert_fail F
+ __assert_perror_fail F
+ __backtrace F
+ __backtrace_symbols F
+ __backtrace_symbols_fd F
+ __bsd_getpgrp F
+ __bzero F
+ __check_rhosts_file D 0x4
+ __chk_fail F
+ __clone F
+ __close F
+ __cmsg_nxthdr F
+ __confstr_chk F
+ __connect F
+ __ctype_b_loc F
+ __ctype_get_mb_cur_max F
+ __ctype_tolower_loc F
+ __ctype_toupper_loc F
+ __curbrk D 0x4
+ __cxa_at_quick_exit F
+ __cxa_atexit F
+ __cxa_finalize F
+ __cxa_thread_atexit_impl F
+ __cyg_profile_func_enter F
+ __cyg_profile_func_exit F
+ __daylight D 0x4
+ __dcgettext F
+ __default_morecore F
+ __dgettext F
+ __dprintf_chk F
+ __dup2 F
+ __duplocale F
+ __endmntent F
+ __environ D 0x4
+ __errno_location F
+ __fbufsize F
+ __fcntl F
+ __fdelt_chk F
+ __fdelt_warn F
+ __ffs F
+ __fgets_chk F
+ __fgets_unlocked_chk F
+ __fgetws_chk F
+ __fgetws_unlocked_chk F
+ __finite F
+ __finitef F
+ __finitel F
+ __flbf F
+ __fork F
+ __fpending F
+ __fprintf_chk F
+ __fpu_control D 0x4
+ __fpurge F
+ __fread_chk F
+ __fread_unlocked_chk F
+ __freadable F
+ __freading F
+ __free_hook D 0x4
+ __freelocale F
+ __fsetlocking F
+ __fwprintf_chk F
+ __fwritable F
+ __fwriting F
+ __fxstat F
+ __fxstat64 F
+ __fxstatat F
+ __fxstatat64 F
+ __getauxval F
+ __getcwd_chk F
+ __getdelim F
+ __getdomainname_chk F
+ __getgroups_chk F
+ __gethostname_chk F
+ __getlogin_r_chk F
+ __getmntent_r F
+ __getpagesize F
+ __getpgid F
+ __getpid F
+ __gets_chk F
+ __gettimeofday F
+ __getwd_chk F
+ __gmtime_r F
+ __h_errno_location F
+ __isalnum_l F
+ __isalpha_l F
+ __isascii_l F
+ __isblank_l F
+ __iscntrl_l F
+ __isctype F
+ __isdigit_l F
+ __isgraph_l F
+ __isinf F
+ __isinff F
+ __isinfl F
+ __islower_l F
+ __isnan F
+ __isnanf F
+ __isnanl F
+ __isoc99_fscanf F
+ __isoc99_fwscanf F
+ __isoc99_scanf F
+ __isoc99_sscanf F
+ __isoc99_swscanf F
+ __isoc99_vfscanf F
+ __isoc99_vfwscanf F
+ __isoc99_vscanf F
+ __isoc99_vsscanf F
+ __isoc99_vswscanf F
+ __isoc99_vwscanf F
+ __isoc99_wscanf F
+ __isprint_l F
+ __ispunct_l F
+ __isspace_l F
+ __isupper_l F
+ __iswalnum_l F
+ __iswalpha_l F
+ __iswblank_l F
+ __iswcntrl_l F
+ __iswctype F
+ __iswctype_l F
+ __iswdigit_l F
+ __iswgraph_l F
+ __iswlower_l F
+ __iswprint_l F
+ __iswpunct_l F
+ __iswspace_l F
+ __iswupper_l F
+ __iswxdigit_l F
+ __isxdigit_l F
+ __ivaliduser F
+ __key_decryptsession_pk_LOCAL D 0x4
+ __key_encryptsession_pk_LOCAL D 0x4
+ __key_gendes_LOCAL D 0x4
+ __libc_allocate_rtsig F
+ __libc_calloc F
+ __libc_current_sigrtmax F
+ __libc_current_sigrtmin F
+ __libc_free F
+ __libc_freeres F
+ __libc_init_first F
+ __libc_mallinfo F
+ __libc_malloc F
+ __libc_mallopt F
+ __libc_memalign F
+ __libc_pvalloc F
+ __libc_realloc F
+ __libc_sa_len F
+ __libc_start_main F
+ __libc_valloc F
+ __longjmp_chk F
+ __lseek F
+ __lxstat F
+ __lxstat64 F
+ __malloc_hook D 0x4
+ __malloc_initialize_hook D 0x4
+ __mbrlen F
+ __mbrtowc F
+ __mbsnrtowcs_chk F
+ __mbsrtowcs_chk F
+ __mbstowcs_chk F
+ __memalign_hook D 0x4
+ __memcpy_chk F
+ __memmove_chk F
+ __mempcpy F
+ __mempcpy_chk F
+ __mempcpy_small F
+ __memset_chk F
+ __monstartup F
+ __morecore D 0x4
+ __nanosleep F
+ __newlocale F
+ __nl_langinfo_l F
+ __nss_configure_lookup F
+ __nss_database_lookup F
+ __nss_group_lookup F
+ __nss_hostname_digits_dots F
+ __nss_hosts_lookup F
+ __nss_next F
+ __nss_passwd_lookup F
+ __obstack_printf_chk F
+ __obstack_vprintf_chk F
+ __open F
+ __open64 F
+ __open64_2 F
+ __open_2 F
+ __openat64_2 F
+ __openat_2 F
+ __overflow F
+ __pipe F
+ __poll F
+ __poll_chk F
+ __posix_getopt F
+ __ppoll_chk F
+ __pread64 F
+ __pread64_chk F
+ __pread_chk F
+ __printf_chk F
+ __printf_fp F
+ __profile_frequency F
+ __progname D 0x4
+ __progname_full D 0x4
+ __ptsname_r_chk F
+ __pwrite64 F
+ __rawmemchr F
+ __rcmd_errstr D 0x4
+ __read F
+ __read_chk F
+ __readlink_chk F
+ __readlinkat_chk F
+ __realloc_hook D 0x4
+ __realpath_chk F
+ __recv_chk F
+ __recvfrom_chk F
+ __register_atfork F
+ __res_init F
+ __res_nclose F
+ __res_ninit F
+ __res_randomid F
+ __res_state F
+ __rpc_thread_createerr F
+ __rpc_thread_svc_fdset F
+ __rpc_thread_svc_max_pollfd F
+ __rpc_thread_svc_pollfd F
+ __sbrk F
+ __sched_cpualloc F
+ __sched_cpucount F
+ __sched_cpufree F
+ __sched_get_priority_max F
+ __sched_get_priority_min F
+ __sched_getparam F
+ __sched_getscheduler F
+ __sched_setscheduler F
+ __sched_yield F
+ __select F
+ __send F
+ __setmntent F
+ __setpgid F
+ __sigaction F
+ __sigaddset F
+ __sigdelset F
+ __sigismember F
+ __signbit F
+ __signbitf F
+ __sigpause F
+ __sigsetjmp F
+ __sigsuspend F
+ __snprintf_chk F
+ __sprintf_chk F
+ __stack_chk_fail F
+ __statfs F
+ __stpcpy F
+ __stpcpy_chk F
+ __stpcpy_small F
+ __stpncpy F
+ __stpncpy_chk F
+ __strcasecmp F
+ __strcasecmp_l F
+ __strcasestr F
+ __strcat_chk F
+ __strcoll_l F
+ __strcpy_chk F
+ __strcpy_small F
+ __strcspn_c1 F
+ __strcspn_c2 F
+ __strcspn_c3 F
+ __strdup F
+ __strerror_r F
+ __strfmon_l F
+ __strftime_l F
+ __strncasecmp_l F
+ __strncat_chk F
+ __strncpy_chk F
+ __strndup F
+ __strpbrk_c2 F
+ __strpbrk_c3 F
+ __strsep_1c F
+ __strsep_2c F
+ __strsep_3c F
+ __strsep_g F
+ __strspn_c1 F
+ __strspn_c2 F
+ __strspn_c3 F
+ __strtod_internal F
+ __strtod_l F
+ __strtof_internal F
+ __strtof_l F
+ __strtok_r F
+ __strtok_r_1c F
+ __strtol_internal F
+ __strtol_l F
+ __strtold_internal F
+ __strtold_l F
+ __strtoll_internal F
+ __strtoll_l F
+ __strtoul_internal F
+ __strtoul_l F
+ __strtoull_internal F
+ __strtoull_l F
+ __strverscmp F
+ __strxfrm_l F
+ __swprintf_chk F
+ __sysconf F
+ __sysctl F
+ __syslog_chk F
+ __sysv_signal F
+ __timezone D 0x4
+ __toascii_l F
+ __tolower_l F
+ __toupper_l F
+ __towctrans F
+ __towctrans_l F
+ __towlower_l F
+ __towupper_l F
+ __ttyname_r_chk F
+ __tzname D 0x8
+ __uflow F
+ __underflow F
+ __uselocale F
+ __vasprintf_chk F
+ __vdprintf_chk F
+ __vfork F
+ __vfprintf_chk F
+ __vfscanf F
+ __vfwprintf_chk F
+ __vprintf_chk F
+ __vsnprintf F
+ __vsnprintf_chk F
+ __vsprintf_chk F
+ __vsscanf F
+ __vswprintf_chk F
+ __vsyslog_chk F
+ __vwprintf_chk F
+ __wait F
+ __waitpid F
+ __wcpcpy_chk F
+ __wcpncpy_chk F
+ __wcrtomb_chk F
+ __wcscasecmp_l F
+ __wcscat_chk F
+ __wcscoll_l F
+ __wcscpy_chk F
+ __wcsftime_l F
+ __wcsncasecmp_l F
+ __wcsncat_chk F
+ __wcsncpy_chk F
+ __wcsnrtombs_chk F
+ __wcsrtombs_chk F
+ __wcstod_internal F
+ __wcstod_l F
+ __wcstof_internal F
+ __wcstof_l F
+ __wcstol_internal F
+ __wcstol_l F
+ __wcstold_internal F
+ __wcstold_l F
+ __wcstoll_internal F
+ __wcstoll_l F
+ __wcstombs_chk F
+ __wcstoul_internal F
+ __wcstoul_l F
+ __wcstoull_internal F
+ __wcstoull_l F
+ __wcsxfrm_l F
+ __wctomb_chk F
+ __wctrans_l F
+ __wctype_l F
+ __wmemcpy_chk F
+ __wmemmove_chk F
+ __wmempcpy_chk F
+ __wmemset_chk F
+ __woverflow F
+ __wprintf_chk F
+ __write F
+ __wuflow F
+ __wunderflow F
+ __xmknod F
+ __xmknodat F
+ __xpg_basename F
+ __xpg_sigpause F
+ __xpg_strerror_r F
+ __xstat F
+ __xstat64 F
+ _authenticate F
+ _dl_mcount_wrapper F
+ _dl_mcount_wrapper_check F
+ _environ D 0x4
+ _exit F
+ _flushlbf F
+ _libc_intl_domainname D 0x5
+ _longjmp F
+ _mcleanup F
+ _mcount F
+ _nl_default_dirname D 0x12
+ _nl_domain_bindings D 0x4
+ _nl_msg_cat_cntr D 0x4
+ _null_auth D 0xc
+ _obstack_allocated_p F
+ _obstack_begin F
+ _obstack_begin_1 F
+ _obstack_free F
+ _obstack_memory_used F
+ _obstack_newchunk F
+ _res D 0x200
+ _res_hconf D 0x30
+ _rpc_dtablesize F
+ _seterr_reply F
+ _setjmp F
+ _sys_errlist D 0x21c
+ _sys_nerr D 0x4
+ _sys_siglist D 0x104
+ _tolower F
+ _toupper F
+ a64l F
+ abort F
+ abs F
+ accept F
+ accept4 F
+ access F
+ acct F
+ addmntent F
+ addseverity F
+ adjtime F
+ adjtimex F
+ advance F
+ alarm F
+ aligned_alloc F
+ alphasort F
+ alphasort64 F
+ argp_err_exit_status D 0x4
+ argp_error F
+ argp_failure F
+ argp_help F
+ argp_parse F
+ argp_program_bug_address D 0x4
+ argp_program_version D 0x4
+ argp_program_version_hook D 0x4
+ argp_state_help F
+ argp_usage F
+ argz_add F
+ argz_add_sep F
+ argz_append F
+ argz_count F
+ argz_create F
+ argz_create_sep F
+ argz_delete F
+ argz_extract F
+ argz_insert F
+ argz_next F
+ argz_replace F
+ argz_stringify F
+ asctime F
+ asctime_r F
+ asprintf F
+ atof F
+ atoi F
+ atol F
+ atoll F
+ authdes_create F
+ authdes_getucred F
+ authdes_pk_create F
+ authnone_create F
+ authunix_create F
+ authunix_create_default F
+ backtrace F
+ backtrace_symbols F
+ backtrace_symbols_fd F
+ basename F
+ bcmp F
+ bcopy F
+ bdflush F
+ bind F
+ bind_textdomain_codeset F
+ bindresvport F
+ bindtextdomain F
+ brk F
+ bsd_signal F
+ bsearch F
+ btowc F
+ bzero F
+ c16rtomb F
+ c32rtomb F
+ calloc F
+ callrpc F
+ canonicalize_file_name F
+ capget F
+ capset F
+ catclose F
+ catgets F
+ catopen F
+ cbc_crypt F
+ cfgetispeed F
+ cfgetospeed F
+ cfmakeraw F
+ cfree F
+ cfsetispeed F
+ cfsetospeed F
+ cfsetspeed F
+ chdir F
+ chflags F
+ chmod F
+ chown F
+ chroot F
+ clearenv F
+ clearerr F
+ clearerr_unlocked F
+ clnt_broadcast F
+ clnt_create F
+ clnt_pcreateerror F
+ clnt_perrno F
+ clnt_perror F
+ clnt_spcreateerror F
+ clnt_sperrno F
+ clnt_sperror F
+ clntraw_create F
+ clnttcp_create F
+ clntudp_bufcreate F
+ clntudp_create F
+ clntunix_create F
+ clock F
+ clock_adjtime F
+ clock_getcpuclockid F
+ clock_getres F
+ clock_gettime F
+ clock_nanosleep F
+ clock_settime F
+ clone F
+ close F
+ closedir F
+ closelog F
+ confstr F
+ connect F
+ copysign F
+ copysignf F
+ copysignl F
+ creat F
+ creat64 F
+ create_module F
+ ctermid F
+ ctime F
+ ctime_r F
+ cuserid F
+ daemon F
+ daylight D 0x4
+ dcgettext F
+ dcngettext F
+ delete_module F
+ des_setparity F
+ dgettext F
+ difftime F
+ dirfd F
+ dirname F
+ div F
+ dl_iterate_phdr F
+ dngettext F
+ dprintf F
+ drand48 F
+ drand48_r F
+ dup F
+ dup2 F
+ dup3 F
+ duplocale F
+ dysize F
+ eaccess F
+ ecb_crypt F
+ ecvt F
+ ecvt_r F
+ endaliasent F
+ endfsent F
+ endgrent F
+ endhostent F
+ endmntent F
+ endnetent F
+ endnetgrent F
+ endprotoent F
+ endpwent F
+ endrpcent F
+ endservent F
+ endsgent F
+ endspent F
+ endttyent F
+ endusershell F
+ endutent F
+ endutxent F
+ environ D 0x4
+ envz_add F
+ envz_entry F
+ envz_get F
+ envz_merge F
+ envz_remove F
+ envz_strip F
+ epoll_create F
+ epoll_create1 F
+ epoll_ctl F
+ epoll_pwait F
+ epoll_wait F
+ erand48 F
+ erand48_r F
+ err F
+ error F
+ error_at_line F
+ error_message_count D 0x4
+ error_one_per_line D 0x4
+ error_print_progname D 0x4
+ errx F
+ ether_aton F
+ ether_aton_r F
+ ether_hostton F
+ ether_line F
+ ether_ntoa F
+ ether_ntoa_r F
+ ether_ntohost F
+ euidaccess F
+ eventfd F
+ eventfd_read F
+ eventfd_write F
+ execl F
+ execle F
+ execlp F
+ execv F
+ execve F
+ execvp F
+ execvpe F
+ exit F
+ faccessat F
+ fallocate F
+ fallocate64 F
+ fanotify_init F
+ fanotify_mark F
+ fattach F
+ fchdir F
+ fchflags F
+ fchmod F
+ fchmodat F
+ fchown F
+ fchownat F
+ fclose F
+ fcloseall F
+ fcntl F
+ fcvt F
+ fcvt_r F
+ fdatasync F
+ fdetach F
+ fdopen F
+ fdopendir F
+ feof F
+ feof_unlocked F
+ ferror F
+ ferror_unlocked F
+ fexecve F
+ fflush F
+ fflush_unlocked F
+ ffs F
+ ffsl F
+ ffsll F
+ fgetc F
+ fgetc_unlocked F
+ fgetgrent F
+ fgetgrent_r F
+ fgetpos F
+ fgetpos64 F
+ fgetpwent F
+ fgetpwent_r F
+ fgets F
+ fgets_unlocked F
+ fgetsgent F
+ fgetsgent_r F
+ fgetspent F
+ fgetspent_r F
+ fgetwc F
+ fgetwc_unlocked F
+ fgetws F
+ fgetws_unlocked F
+ fgetxattr F
+ fileno F
+ fileno_unlocked F
+ finite F
+ finitef F
+ finitel F
+ flistxattr F
+ flock F
+ flockfile F
+ fmemopen F
+ fmtmsg F
+ fnmatch F
+ fopen F
+ fopen64 F
+ fopencookie F
+ fork F
+ fpathconf F
+ fprintf F
+ fputc F
+ fputc_unlocked F
+ fputs F
+ fputs_unlocked F
+ fputwc F
+ fputwc_unlocked F
+ fputws F
+ fputws_unlocked F
+ fread F
+ fread_unlocked F
+ free F
+ freeaddrinfo F
+ freeifaddrs F
+ freelocale F
+ fremovexattr F
+ freopen F
+ freopen64 F
+ frexp F
+ frexpf F
+ frexpl F
+ fscanf F
+ fseek F
+ fseeko F
+ fseeko64 F
+ fsetpos F
+ fsetpos64 F
+ fsetxattr F
+ fstatfs F
+ fstatfs64 F
+ fstatvfs F
+ fstatvfs64 F
+ fsync F
+ ftell F
+ ftello F
+ ftello64 F
+ ftime F
+ ftok F
+ ftruncate F
+ ftruncate64 F
+ ftrylockfile F
+ fts_children F
+ fts_close F
+ fts_open F
+ fts_read F
+ fts_set F
+ ftw F
+ ftw64 F
+ funlockfile F
+ futimens F
+ futimes F
+ futimesat F
+ fwide F
+ fwprintf F
+ fwrite F
+ fwrite_unlocked F
+ fwscanf F
+ gai_strerror F
+ gcvt F
+ get_avphys_pages F
+ get_current_dir_name F
+ get_kernel_syms F
+ get_myaddress F
+ get_nprocs F
+ get_nprocs_conf F
+ get_phys_pages F
+ getaddrinfo F
+ getaliasbyname F
+ getaliasbyname_r F
+ getaliasent F
+ getaliasent_r F
+ getauxval F
+ getc F
+ getc_unlocked F
+ getchar F
+ getchar_unlocked F
+ getcontext F
+ getcwd F
+ getdate F
+ getdate_err D 0x4
+ getdate_r F
+ getdelim F
+ getdirentries F
+ getdirentries64 F
+ getdomainname F
+ getdtablesize F
+ getegid F
+ getenv F
+ geteuid F
+ getfsent F
+ getfsfile F
+ getfsspec F
+ getgid F
+ getgrent F
+ getgrent_r F
+ getgrgid F
+ getgrgid_r F
+ getgrnam F
+ getgrnam_r F
+ getgrouplist F
+ getgroups F
+ gethostbyaddr F
+ gethostbyaddr_r F
+ gethostbyname F
+ gethostbyname2 F
+ gethostbyname2_r F
+ gethostbyname_r F
+ gethostent F
+ gethostent_r F
+ gethostid F
+ gethostname F
+ getifaddrs F
+ getipv4sourcefilter F
+ getitimer F
+ getline F
+ getloadavg F
+ getlogin F
+ getlogin_r F
+ getmntent F
+ getmntent_r F
+ getmsg F
+ getnameinfo F
+ getnetbyaddr F
+ getnetbyaddr_r F
+ getnetbyname F
+ getnetbyname_r F
+ getnetent F
+ getnetent_r F
+ getnetgrent F
+ getnetgrent_r F
+ getnetname F
+ getopt F
+ getopt_long F
+ getopt_long_only F
+ getpagesize F
+ getpass F
+ getpeername F
+ getpgid F
+ getpgrp F
+ getpid F
+ getpmsg F
+ getppid F
+ getpriority F
+ getprotobyname F
+ getprotobyname_r F
+ getprotobynumber F
+ getprotobynumber_r F
+ getprotoent F
+ getprotoent_r F
+ getpt F
+ getpublickey F
+ getpw F
+ getpwent F
+ getpwent_r F
+ getpwnam F
+ getpwnam_r F
+ getpwuid F
+ getpwuid_r F
+ getresgid F
+ getresuid F
+ getrlimit F
+ getrlimit64 F
+ getrpcbyname F
+ getrpcbyname_r F
+ getrpcbynumber F
+ getrpcbynumber_r F
+ getrpcent F
+ getrpcent_r F
+ getrpcport F
+ getrusage F
+ gets F
+ getsecretkey F
+ getservbyname F
+ getservbyname_r F
+ getservbyport F
+ getservbyport_r F
+ getservent F
+ getservent_r F
+ getsgent F
+ getsgent_r F
+ getsgnam F
+ getsgnam_r F
+ getsid F
+ getsockname F
+ getsockopt F
+ getsourcefilter F
+ getspent F
+ getspent_r F
+ getspnam F
+ getspnam_r F
+ getsubopt F
+ gettext F
+ gettimeofday F
+ getttyent F
+ getttynam F
+ getuid F
+ getusershell F
+ getutent F
+ getutent_r F
+ getutid F
+ getutid_r F
+ getutline F
+ getutline_r F
+ getutmp F
+ getutmpx F
+ getutxent F
+ getutxid F
+ getutxline F
+ getw F
+ getwc F
+ getwc_unlocked F
+ getwchar F
+ getwchar_unlocked F
+ getwd F
+ getxattr F
+ glob F
+ glob64 F
+ glob_pattern_p F
+ globfree F
+ globfree64 F
+ gmtime F
+ gmtime_r F
+ gnu_dev_major F
+ gnu_dev_makedev F
+ gnu_dev_minor F
+ gnu_get_libc_release F
+ gnu_get_libc_version F
+ grantpt F
+ group_member F
+ gsignal F
+ gtty F
+ h_errlist D 0x14
+ h_nerr D 0x4
+ hasmntopt F
+ hcreate F
+ hcreate_r F
+ hdestroy F
+ hdestroy_r F
+ herror F
+ host2netname F
+ hsearch F
+ hsearch_r F
+ hstrerror F
+ htonl F
+ htons F
+ iconv F
+ iconv_close F
+ iconv_open F
+ if_freenameindex F
+ if_indextoname F
+ if_nameindex F
+ if_nametoindex F
+ imaxabs F
+ imaxdiv F
+ in6addr_any D 0x10
+ in6addr_loopback D 0x10
+ index F
+ inet6_opt_append F
+ inet6_opt_find F
+ inet6_opt_finish F
+ inet6_opt_get_val F
+ inet6_opt_init F
+ inet6_opt_next F
+ inet6_opt_set_val F
+ inet6_option_alloc F
+ inet6_option_append F
+ inet6_option_find F
+ inet6_option_init F
+ inet6_option_next F
+ inet6_option_space F
+ inet6_rth_add F
+ inet6_rth_getaddr F
+ inet6_rth_init F
+ inet6_rth_reverse F
+ inet6_rth_segments F
+ inet6_rth_space F
+ inet_addr F
+ inet_aton F
+ inet_lnaof F
+ inet_makeaddr F
+ inet_netof F
+ inet_network F
+ inet_nsap_addr F
+ inet_nsap_ntoa F
+ inet_ntoa F
+ inet_ntop F
+ inet_pton F
+ init_module F
+ initgroups F
+ initstate F
+ initstate_r F
+ innetgr F
+ inotify_add_watch F
+ inotify_init F
+ inotify_init1 F
+ inotify_rm_watch F
+ insque F
+ ioctl F
+ iruserok F
+ iruserok_af F
+ isalnum F
+ isalnum_l F
+ isalpha F
+ isalpha_l F
+ isascii F
+ isastream F
+ isatty F
+ isblank F
+ isblank_l F
+ iscntrl F
+ iscntrl_l F
+ isctype F
+ isdigit F
+ isdigit_l F
+ isfdtype F
+ isgraph F
+ isgraph_l F
+ isinf F
+ isinff F
+ isinfl F
+ islower F
+ islower_l F
+ isnan F
+ isnanf F
+ isnanl F
+ isprint F
+ isprint_l F
+ ispunct F
+ ispunct_l F
+ isspace F
+ isspace_l F
+ isupper F
+ isupper_l F
+ iswalnum F
+ iswalnum_l F
+ iswalpha F
+ iswalpha_l F
+ iswblank F
+ iswblank_l F
+ iswcntrl F
+ iswcntrl_l F
+ iswctype F
+ iswctype_l F
+ iswdigit F
+ iswdigit_l F
+ iswgraph F
+ iswgraph_l F
+ iswlower F
+ iswlower_l F
+ iswprint F
+ iswprint_l F
+ iswpunct F
+ iswpunct_l F
+ iswspace F
+ iswspace_l F
+ iswupper F
+ iswupper_l F
+ iswxdigit F
+ iswxdigit_l F
+ isxdigit F
+ isxdigit_l F
+ jrand48 F
+ jrand48_r F
+ key_decryptsession F
+ key_decryptsession_pk F
+ key_encryptsession F
+ key_encryptsession_pk F
+ key_gendes F
+ key_get_conv F
+ key_secretkey_is_set F
+ key_setnet F
+ key_setsecret F
+ kill F
+ killpg F
+ klogctl F
+ l64a F
+ labs F
+ lchmod F
+ lchown F
+ lckpwdf F
+ lcong48 F
+ lcong48_r F
+ ldexp F
+ ldexpf F
+ ldexpl F
+ ldiv F
+ lfind F
+ lgetxattr F
+ link F
+ linkat F
+ listen F
+ listxattr F
+ llabs F
+ lldiv F
+ llistxattr F
+ llseek F
+ loc1 D 0x4
+ loc2 D 0x4
+ localeconv F
+ localtime F
+ localtime_r F
+ lockf F
+ lockf64 F
+ locs D 0x4
+ longjmp F
+ lrand48 F
+ lrand48_r F
+ lremovexattr F
+ lsearch F
+ lseek F
+ lseek64 F
+ lsetxattr F
+ lutimes F
+ madvise F
+ makecontext F
+ mallinfo F
+ malloc F
+ malloc_get_state F
+ malloc_info F
+ malloc_set_state F
+ malloc_stats F
+ malloc_trim F
+ malloc_usable_size F
+ mallopt F
+ mallwatch D 0x4
+ mblen F
+ mbrlen F
+ mbrtoc16 F
+ mbrtoc32 F
+ mbrtowc F
+ mbsinit F
+ mbsnrtowcs F
+ mbsrtowcs F
+ mbstowcs F
+ mbtowc F
+ mcheck F
+ mcheck_check_all F
+ mcheck_pedantic F
+ memalign F
+ memccpy F
+ memchr F
+ memcmp F
+ memcpy F
+ memfrob F
+ memmem F
+ memmove F
+ mempcpy F
+ memrchr F
+ memset F
+ mincore F
+ mkdir F
+ mkdirat F
+ mkdtemp F
+ mkfifo F
+ mkfifoat F
+ mkostemp F
+ mkostemp64 F
+ mkostemps F
+ mkostemps64 F
+ mkstemp F
+ mkstemp64 F
+ mkstemps F
+ mkstemps64 F
+ mktemp F
+ mktime F
+ mlock F
+ mlockall F
+ mmap F
+ mmap64 F
+ modf F
+ modff F
+ modfl F
+ moncontrol F
+ monstartup F
+ mount F
+ mprobe F
+ mprotect F
+ mrand48 F
+ mrand48_r F
+ mremap F
+ msgctl F
+ msgget F
+ msgrcv F
+ msgsnd F
+ msync F
+ mtrace F
+ munlock F
+ munlockall F
+ munmap F
+ muntrace F
+ name_to_handle_at F
+ nanosleep F
+ netname2host F
+ netname2user F
+ newlocale F
+ nfsservctl F
+ nftw F
+ nftw64 F
+ ngettext F
+ nice F
+ nl_langinfo F
+ nl_langinfo_l F
+ nrand48 F
+ nrand48_r F
+ ntohl F
+ ntohs F
+ ntp_adjtime F
+ ntp_gettime F
+ ntp_gettimex F
+ obstack_alloc_failed_handler D 0x4
+ obstack_exit_failure D 0x4
+ obstack_free F
+ obstack_printf F
+ obstack_vprintf F
+ on_exit F
+ open F
+ open64 F
+ open_by_handle_at F
+ open_memstream F
+ open_wmemstream F
+ openat F
+ openat64 F
+ opendir F
+ openlog F
+ optarg D 0x4
+ opterr D 0x4
+ optind D 0x4
+ optopt D 0x4
+ parse_printf_format F
+ passwd2des F
+ pathconf F
+ pause F
+ pclose F
+ perror F
+ personality F
+ pipe F
+ pipe2 F
+ pivot_root F
+ pmap_getmaps F
+ pmap_getport F
+ pmap_rmtcall F
+ pmap_set F
+ pmap_unset F
+ poll F
+ popen F
+ posix_fadvise F
+ posix_fadvise64 F
+ posix_fallocate F
+ posix_fallocate64 F
+ posix_madvise F
+ posix_memalign F
+ posix_openpt F
+ posix_spawn F
+ posix_spawn_file_actions_addclose F
+ posix_spawn_file_actions_adddup2 F
+ posix_spawn_file_actions_addopen F
+ posix_spawn_file_actions_destroy F
+ posix_spawn_file_actions_init F
+ posix_spawnattr_destroy F
+ posix_spawnattr_getflags F
+ posix_spawnattr_getpgroup F
+ posix_spawnattr_getschedparam F
+ posix_spawnattr_getschedpolicy F
+ posix_spawnattr_getsigdefault F
+ posix_spawnattr_getsigmask F
+ posix_spawnattr_init F
+ posix_spawnattr_setflags F
+ posix_spawnattr_setpgroup F
+ posix_spawnattr_setschedparam F
+ posix_spawnattr_setschedpolicy F
+ posix_spawnattr_setsigdefault F
+ posix_spawnattr_setsigmask F
+ posix_spawnp F
+ ppoll F
+ prctl F
+ pread F
+ pread64 F
+ preadv F
+ preadv64 F
+ printf F
+ printf_size F
+ printf_size_info F
+ prlimit F
+ prlimit64 F
+ process_vm_readv F
+ process_vm_writev F
+ profil F
+ program_invocation_name D 0x4
+ program_invocation_short_name D 0x4
+ pselect F
+ psiginfo F
+ psignal F
+ pthread_attr_destroy F
+ pthread_attr_getdetachstate F
+ pthread_attr_getinheritsched F
+ pthread_attr_getschedparam F
+ pthread_attr_getschedpolicy F
+ pthread_attr_getscope F
+ pthread_attr_init F
+ pthread_attr_setdetachstate F
+ pthread_attr_setinheritsched F
+ pthread_attr_setschedparam F
+ pthread_attr_setschedpolicy F
+ pthread_attr_setscope F
+ pthread_cond_broadcast F
+ pthread_cond_destroy F
+ pthread_cond_init F
+ pthread_cond_signal F
+ pthread_cond_timedwait F
+ pthread_cond_wait F
+ pthread_condattr_destroy F
+ pthread_condattr_init F
+ pthread_equal F
+ pthread_exit F
+ pthread_getschedparam F
+ pthread_mutex_destroy F
+ pthread_mutex_init F
+ pthread_mutex_lock F
+ pthread_mutex_unlock F
+ pthread_self F
+ pthread_setcancelstate F
+ pthread_setcanceltype F
+ pthread_setschedparam F
+ ptrace F
+ ptsname F
+ ptsname_r F
+ putc F
+ putc_unlocked F
+ putchar F
+ putchar_unlocked F
+ putenv F
+ putgrent F
+ putmsg F
+ putpmsg F
+ putpwent F
+ puts F
+ putsgent F
+ putspent F
+ pututline F
+ pututxline F
+ putw F
+ putwc F
+ putwc_unlocked F
+ putwchar F
+ putwchar_unlocked F
+ pvalloc F
+ pwrite F
+ pwrite64 F
+ pwritev F
+ pwritev64 F
+ qecvt F
+ qecvt_r F
+ qfcvt F
+ qfcvt_r F
+ qgcvt F
+ qsort F
+ qsort_r F
+ query_module F
+ quick_exit F
+ quotactl F
+ raise F
+ rand F
+ rand_r F
+ random F
+ random_r F
+ rawmemchr F
+ rcmd F
+ rcmd_af F
+ re_comp F
+ re_compile_fastmap F
+ re_compile_pattern F
+ re_exec F
+ re_match F
+ re_match_2 F
+ re_search F
+ re_search_2 F
+ re_set_registers F
+ re_set_syntax F
+ re_syntax_options D 0x4
+ read F
+ readahead F
+ readdir F
+ readdir64 F
+ readdir64_r F
+ readdir_r F
+ readlink F
+ readlinkat F
+ readv F
+ realloc F
+ realpath F
+ reboot F
+ recv F
+ recvfrom F
+ recvmmsg F
+ recvmsg F
+ regcomp F
+ regerror F
+ regexec F
+ regfree F
+ register_printf_function F
+ register_printf_modifier F
+ register_printf_specifier F
+ register_printf_type F
+ registerrpc F
+ remap_file_pages F
+ remove F
+ removexattr F
+ remque F
+ rename F
+ renameat F
+ revoke F
+ rewind F
+ rewinddir F
+ rexec F
+ rexec_af F
+ rexecoptions D 0x4
+ rindex F
+ rmdir F
+ rpc_createerr D 0x10
+ rpmatch F
+ rresvport F
+ rresvport_af F
+ rtime F
+ ruserok F
+ ruserok_af F
+ ruserpass F
+ sbrk F
+ scalbn F
+ scalbnf F
+ scalbnl F
+ scandir F
+ scandir64 F
+ scandirat F
+ scandirat64 F
+ scanf F
+ sched_get_priority_max F
+ sched_get_priority_min F
+ sched_getaffinity F
+ sched_getcpu F
+ sched_getparam F
+ sched_getscheduler F
+ sched_rr_get_interval F
+ sched_setaffinity F
+ sched_setparam F
+ sched_setscheduler F
+ sched_yield F
+ secure_getenv F
+ seed48 F
+ seed48_r F
+ seekdir F
+ select F
+ semctl F
+ semget F
+ semop F
+ semtimedop F
+ send F
+ sendfile F
+ sendfile64 F
+ sendmmsg F
+ sendmsg F
+ sendto F
+ setaliasent F
+ setbuf F
+ setbuffer F
+ setcontext F
+ setdomainname F
+ setegid F
+ setenv F
+ seteuid F
+ setfsent F
+ setfsgid F
+ setfsuid F
+ setgid F
+ setgrent F
+ setgroups F
+ sethostent F
+ sethostid F
+ sethostname F
+ setipv4sourcefilter F
+ setitimer F
+ setjmp F
+ setlinebuf F
+ setlocale F
+ setlogin F
+ setlogmask F
+ setmntent F
+ setnetent F
+ setnetgrent F
+ setns F
+ setpgid F
+ setpgrp F
+ setpriority F
+ setprotoent F
+ setpwent F
+ setregid F
+ setresgid F
+ setresuid F
+ setreuid F
+ setrlimit F
+ setrlimit64 F
+ setrpcent F
+ setservent F
+ setsgent F
+ setsid F
+ setsockopt F
+ setsourcefilter F
+ setspent F
+ setstate F
+ setstate_r F
+ settimeofday F
+ setttyent F
+ setuid F
+ setusershell F
+ setutent F
+ setutxent F
+ setvbuf F
+ setxattr F
+ sgetsgent F
+ sgetsgent_r F
+ sgetspent F
+ sgetspent_r F
+ shmat F
+ shmctl F
+ shmdt F
+ shmget F
+ shutdown F
+ sigaction F
+ sigaddset F
+ sigaltstack F
+ sigandset F
+ sigblock F
+ sigdelset F
+ sigemptyset F
+ sigfillset F
+ siggetmask F
+ sighold F
+ sigignore F
+ siginterrupt F
+ sigisemptyset F
+ sigismember F
+ siglongjmp F
+ signal F
+ signalfd F
+ sigorset F
+ sigpause F
+ sigpending F
+ sigprocmask F
+ sigqueue F
+ sigrelse F
+ sigreturn F
+ sigset F
+ sigsetmask F
+ sigstack F
+ sigsuspend F
+ sigtimedwait F
+ sigvec F
+ sigwait F
+ sigwaitinfo F
+ sleep F
+ snprintf F
+ sockatmark F
+ socket F
+ socketpair F
+ splice F
+ sprintf F
+ sprofil F
+ srand F
+ srand48 F
+ srand48_r F
+ srandom F
+ srandom_r F
+ sscanf F
+ ssignal F
+ sstk F
+ statfs F
+ statfs64 F
+ statvfs F
+ statvfs64 F
+ stderr D 0x4
+ stdin D 0x4
+ stdout D 0x4
+ step F
+ stime F
+ stpcpy F
+ stpncpy F
+ strcasecmp F
+ strcasecmp_l F
+ strcasestr F
+ strcat F
+ strchr F
+ strchrnul F
+ strcmp F
+ strcoll F
+ strcoll_l F
+ strcpy F
+ strcspn F
+ strdup F
+ strerror F
+ strerror_l F
+ strerror_r F
+ strfmon F
+ strfmon_l F
+ strfry F
+ strftime F
+ strftime_l F
+ strlen F
+ strncasecmp F
+ strncasecmp_l F
+ strncat F
+ strncmp F
+ strncpy F
+ strndup F
+ strnlen F
+ strpbrk F
+ strptime F
+ strptime_l F
+ strrchr F
+ strsep F
+ strsignal F
+ strspn F
+ strstr F
+ strtod F
+ strtod_l F
+ strtof F
+ strtof_l F
+ strtoimax F
+ strtok F
+ strtok_r F
+ strtol F
+ strtol_l F
+ strtold F
+ strtold_l F
+ strtoll F
+ strtoll_l F
+ strtoq F
+ strtoul F
+ strtoul_l F
+ strtoull F
+ strtoull_l F
+ strtoumax F
+ strtouq F
+ strverscmp F
+ strxfrm F
+ strxfrm_l F
+ stty F
+ svc_exit F
+ svc_fdset D 0x80
+ svc_getreq F
+ svc_getreq_common F
+ svc_getreq_poll F
+ svc_getreqset F
+ svc_max_pollfd D 0x4
+ svc_pollfd D 0x4
+ svc_register F
+ svc_run F
+ svc_sendreply F
+ svc_unregister F
+ svcauthdes_stats D 0xc
+ svcerr_auth F
+ svcerr_decode F
+ svcerr_noproc F
+ svcerr_noprog F
+ svcerr_progvers F
+ svcerr_systemerr F
+ svcerr_weakauth F
+ svcfd_create F
+ svcraw_create F
+ svctcp_create F
+ svcudp_bufcreate F
+ svcudp_create F
+ svcudp_enablecache F
+ svcunix_create F
+ svcunixfd_create F
+ swab F
+ swapcontext F
+ swapoff F
+ swapon F
+ swprintf F
+ swscanf F
+ symlink F
+ symlinkat F
+ sync F
+ sync_file_range F
+ syncfs F
+ sys_errlist D 0x21c
+ sys_nerr D 0x4
+ sys_sigabbrev D 0x104
+ sys_siglist D 0x104
+ syscall F
+ sysconf F
+ sysctl F
+ sysinfo F
+ syslog F
+ system F
+ sysv_signal F
+ tcdrain F
+ tcflow F
+ tcflush F
+ tcgetattr F
+ tcgetpgrp F
+ tcgetsid F
+ tcsendbreak F
+ tcsetattr F
+ tcsetpgrp F
+ tdelete F
+ tdestroy F
+ tee F
+ telldir F
+ tempnam F
+ textdomain F
+ tfind F
+ time F
+ timegm F
+ timelocal F
+ timerfd_create F
+ timerfd_gettime F
+ timerfd_settime F
+ times F
+ timespec_get F
+ timezone D 0x4
+ tmpfile F
+ tmpfile64 F
+ tmpnam F
+ tmpnam_r F
+ toascii F
+ tolower F
+ tolower_l F
+ toupper F
+ toupper_l F
+ towctrans F
+ towctrans_l F
+ towlower F
+ towlower_l F
+ towupper F
+ towupper_l F
+ tr_break F
+ truncate F
+ truncate64 F
+ tsearch F
+ ttyname F
+ ttyname_r F
+ ttyslot F
+ twalk F
+ tzname D 0x8
+ tzset F
+ ualarm F
+ ulckpwdf F
+ ulimit F
+ umask F
+ umount F
+ umount2 F
+ uname F
+ ungetc F
+ ungetwc F
+ unlink F
+ unlinkat F
+ unlockpt F
+ unsetenv F
+ unshare F
+ updwtmp F
+ updwtmpx F
+ uselib F
+ uselocale F
+ user2netname F
+ usleep F
+ ustat F
+ utime F
+ utimensat F
+ utimes F
+ utmpname F
+ utmpxname F
+ valloc F
+ vasprintf F
+ vdprintf F
+ verr F
+ verrx F
+ versionsort F
+ versionsort64 F
+ vfork F
+ vfprintf F
+ vfscanf F
+ vfwprintf F
+ vfwscanf F
+ vhangup F
+ vlimit F
+ vmsplice F
+ vprintf F
+ vscanf F
+ vsnprintf F
+ vsprintf F
+ vsscanf F
+ vswprintf F
+ vswscanf F
+ vsyslog F
+ vtimes F
+ vwarn F
+ vwarnx F
+ vwprintf F
+ vwscanf F
+ wait F
+ wait3 F
+ wait4 F
+ waitid F
+ waitpid F
+ warn F
+ warnx F
+ wcpcpy F
+ wcpncpy F
+ wcrtomb F
+ wcscasecmp F
+ wcscasecmp_l F
+ wcscat F
+ wcschr F
+ wcschrnul F
+ wcscmp F
+ wcscoll F
+ wcscoll_l F
+ wcscpy F
+ wcscspn F
+ wcsdup F
+ wcsftime F
+ wcsftime_l F
+ wcslen F
+ wcsncasecmp F
+ wcsncasecmp_l F
+ wcsncat F
+ wcsncmp F
+ wcsncpy F
+ wcsnlen F
+ wcsnrtombs F
+ wcspbrk F
+ wcsrchr F
+ wcsrtombs F
+ wcsspn F
+ wcsstr F
+ wcstod F
+ wcstod_l F
+ wcstof F
+ wcstof_l F
+ wcstoimax F
+ wcstok F
+ wcstol F
+ wcstol_l F
+ wcstold F
+ wcstold_l F
+ wcstoll F
+ wcstoll_l F
+ wcstombs F
+ wcstoq F
+ wcstoul F
+ wcstoul_l F
+ wcstoull F
+ wcstoull_l F
+ wcstoumax F
+ wcstouq F
+ wcswcs F
+ wcswidth F
+ wcsxfrm F
+ wcsxfrm_l F
+ wctob F
+ wctomb F
+ wctrans F
+ wctrans_l F
+ wctype F
+ wctype_l F
+ wcwidth F
+ wmemchr F
+ wmemcmp F
+ wmemcpy F
+ wmemmove F
+ wmempcpy F
+ wmemset F
+ wordexp F
+ wordfree F
+ wprintf F
+ write F
+ writev F
+ wscanf F
+ xdecrypt F
+ xdr_accepted_reply F
+ xdr_array F
+ xdr_authdes_cred F
+ xdr_authdes_verf F
+ xdr_authunix_parms F
+ xdr_bool F
+ xdr_bytes F
+ xdr_callhdr F
+ xdr_callmsg F
+ xdr_char F
+ xdr_cryptkeyarg F
+ xdr_cryptkeyarg2 F
+ xdr_cryptkeyres F
+ xdr_des_block F
+ xdr_double F
+ xdr_enum F
+ xdr_float F
+ xdr_free F
+ xdr_getcredres F
+ xdr_hyper F
+ xdr_int F
+ xdr_int16_t F
+ xdr_int32_t F
+ xdr_int64_t F
+ xdr_int8_t F
+ xdr_key_netstarg F
+ xdr_key_netstres F
+ xdr_keybuf F
+ xdr_keystatus F
+ xdr_long F
+ xdr_longlong_t F
+ xdr_netnamestr F
+ xdr_netobj F
+ xdr_opaque F
+ xdr_opaque_auth F
+ xdr_pmap F
+ xdr_pmaplist F
+ xdr_pointer F
+ xdr_quad_t F
+ xdr_reference F
+ xdr_rejected_reply F
+ xdr_replymsg F
+ xdr_rmtcall_args F
+ xdr_rmtcallres F
+ xdr_short F
+ xdr_sizeof F
+ xdr_string F
+ xdr_u_char F
+ xdr_u_hyper F
+ xdr_u_int F
+ xdr_u_long F
+ xdr_u_longlong_t F
+ xdr_u_quad_t F
+ xdr_u_short F
+ xdr_uint16_t F
+ xdr_uint32_t F
+ xdr_uint64_t F
+ xdr_uint8_t F
+ xdr_union F
+ xdr_unixcred F
+ xdr_vector F
+ xdr_void F
+ xdr_wrapstring F
+ xdrmem_create F
+ xdrrec_create F
+ xdrrec_endofrecord F
+ xdrrec_eof F
+ xdrrec_skiprecord F
+ xdrstdio_create F
+ xencrypt F
+ xprt_register F
+ xprt_unregister F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libcrypt.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libcrypt.abilist
new file mode 100644
index 0000000..0ac28c5
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libcrypt.abilist
@@ -0,0 +1,9 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ crypt F
+ crypt_r F
+ encrypt F
+ encrypt_r F
+ fcrypt F
+ setkey F
+ setkey_r F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libdl.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libdl.abilist
new file mode 100644
index 0000000..aa89245
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libdl.abilist
@@ -0,0 +1,11 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ dladdr F
+ dladdr1 F
+ dlclose F
+ dlerror F
+ dlinfo F
+ dlmopen F
+ dlopen F
+ dlsym F
+ dlvsym F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libm.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libm.abilist
new file mode 100644
index 0000000..33e1bb7
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libm.abilist
@@ -0,0 +1,368 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ _LIB_VERSION D 0x4
+ __acos_finite F
+ __acosf_finite F
+ __acosh_finite F
+ __acoshf_finite F
+ __asin_finite F
+ __asinf_finite F
+ __atan2_finite F
+ __atan2f_finite F
+ __atanh_finite F
+ __atanhf_finite F
+ __clog10 F
+ __clog10f F
+ __clog10l F
+ __cosh_finite F
+ __coshf_finite F
+ __exp10_finite F
+ __exp10f_finite F
+ __exp2_finite F
+ __exp2f_finite F
+ __exp_finite F
+ __expf_finite F
+ __finite F
+ __finitef F
+ __finitel F
+ __fmod_finite F
+ __fmodf_finite F
+ __fpclassify F
+ __fpclassifyf F
+ __gamma_r_finite F
+ __gammaf_r_finite F
+ __hypot_finite F
+ __hypotf_finite F
+ __j0_finite F
+ __j0f_finite F
+ __j1_finite F
+ __j1f_finite F
+ __jn_finite F
+ __jnf_finite F
+ __lgamma_r_finite F
+ __lgammaf_r_finite F
+ __log10_finite F
+ __log10f_finite F
+ __log2_finite F
+ __log2f_finite F
+ __log_finite F
+ __logf_finite F
+ __pow_finite F
+ __powf_finite F
+ __remainder_finite F
+ __remainderf_finite F
+ __scalb_finite F
+ __scalbf_finite F
+ __signbit F
+ __signbitf F
+ __sinh_finite F
+ __sinhf_finite F
+ __sqrt_finite F
+ __sqrtf_finite F
+ __y0_finite F
+ __y0f_finite F
+ __y1_finite F
+ __y1f_finite F
+ __yn_finite F
+ __ynf_finite F
+ acos F
+ acosf F
+ acosh F
+ acoshf F
+ acoshl F
+ acosl F
+ asin F
+ asinf F
+ asinh F
+ asinhf F
+ asinhl F
+ asinl F
+ atan F
+ atan2 F
+ atan2f F
+ atan2l F
+ atanf F
+ atanh F
+ atanhf F
+ atanhl F
+ atanl F
+ cabs F
+ cabsf F
+ cabsl F
+ cacos F
+ cacosf F
+ cacosh F
+ cacoshf F
+ cacoshl F
+ cacosl F
+ carg F
+ cargf F
+ cargl F
+ casin F
+ casinf F
+ casinh F
+ casinhf F
+ casinhl F
+ casinl F
+ catan F
+ catanf F
+ catanh F
+ catanhf F
+ catanhl F
+ catanl F
+ cbrt F
+ cbrtf F
+ cbrtl F
+ ccos F
+ ccosf F
+ ccosh F
+ ccoshf F
+ ccoshl F
+ ccosl F
+ ceil F
+ ceilf F
+ ceill F
+ cexp F
+ cexpf F
+ cexpl F
+ cimag F
+ cimagf F
+ cimagl F
+ clog F
+ clog10 F
+ clog10f F
+ clog10l F
+ clogf F
+ clogl F
+ conj F
+ conjf F
+ conjl F
+ copysign F
+ copysignf F
+ copysignl F
+ cos F
+ cosf F
+ cosh F
+ coshf F
+ coshl F
+ cosl F
+ cpow F
+ cpowf F
+ cpowl F
+ cproj F
+ cprojf F
+ cprojl F
+ creal F
+ crealf F
+ creall F
+ csin F
+ csinf F
+ csinh F
+ csinhf F
+ csinhl F
+ csinl F
+ csqrt F
+ csqrtf F
+ csqrtl F
+ ctan F
+ ctanf F
+ ctanh F
+ ctanhf F
+ ctanhl F
+ ctanl F
+ drem F
+ dremf F
+ dreml F
+ erf F
+ erfc F
+ erfcf F
+ erfcl F
+ erff F
+ erfl F
+ exp F
+ exp10 F
+ exp10f F
+ exp10l F
+ exp2 F
+ exp2f F
+ exp2l F
+ expf F
+ expl F
+ expm1 F
+ expm1f F
+ expm1l F
+ fabs F
+ fabsf F
+ fabsl F
+ fdim F
+ fdimf F
+ fdiml F
+ feclearexcept F
+ fedisableexcept F
+ feenableexcept F
+ fegetenv F
+ fegetexcept F
+ fegetexceptflag F
+ fegetround F
+ feholdexcept F
+ feraiseexcept F
+ fesetenv F
+ fesetexceptflag F
+ fesetround F
+ fetestexcept F
+ feupdateenv F
+ finite F
+ finitef F
+ finitel F
+ floor F
+ floorf F
+ floorl F
+ fma F
+ fmaf F
+ fmal F
+ fmax F
+ fmaxf F
+ fmaxl F
+ fmin F
+ fminf F
+ fminl F
+ fmod F
+ fmodf F
+ fmodl F
+ frexp F
+ frexpf F
+ frexpl F
+ gamma F
+ gammaf F
+ gammal F
+ hypot F
+ hypotf F
+ hypotl F
+ ilogb F
+ ilogbf F
+ ilogbl F
+ j0 F
+ j0f F
+ j0l F
+ j1 F
+ j1f F
+ j1l F
+ jn F
+ jnf F
+ jnl F
+ ldexp F
+ ldexpf F
+ ldexpl F
+ lgamma F
+ lgamma_r F
+ lgammaf F
+ lgammaf_r F
+ lgammal F
+ lgammal_r F
+ llrint F
+ llrintf F
+ llrintl F
+ llround F
+ llroundf F
+ llroundl F
+ log F
+ log10 F
+ log10f F
+ log10l F
+ log1p F
+ log1pf F
+ log1pl F
+ log2 F
+ log2f F
+ log2l F
+ logb F
+ logbf F
+ logbl F
+ logf F
+ logl F
+ lrint F
+ lrintf F
+ lrintl F
+ lround F
+ lroundf F
+ lroundl F
+ matherr F
+ modf F
+ modff F
+ modfl F
+ nan F
+ nanf F
+ nanl F
+ nearbyint F
+ nearbyintf F
+ nearbyintl F
+ nextafter F
+ nextafterf F
+ nextafterl F
+ nexttoward F
+ nexttowardf F
+ nexttowardl F
+ pow F
+ pow10 F
+ pow10f F
+ pow10l F
+ powf F
+ powl F
+ remainder F
+ remainderf F
+ remainderl F
+ remquo F
+ remquof F
+ remquol F
+ rint F
+ rintf F
+ rintl F
+ round F
+ roundf F
+ roundl F
+ scalb F
+ scalbf F
+ scalbl F
+ scalbln F
+ scalblnf F
+ scalblnl F
+ scalbn F
+ scalbnf F
+ scalbnl F
+ signgam D 0x4
+ significand F
+ significandf F
+ significandl F
+ sin F
+ sincos F
+ sincosf F
+ sincosl F
+ sinf F
+ sinh F
+ sinhf F
+ sinhl F
+ sinl F
+ sqrt F
+ sqrtf F
+ sqrtl F
+ tan F
+ tanf F
+ tanh F
+ tanhf F
+ tanhl F
+ tanl F
+ tgamma F
+ tgammaf F
+ tgammal F
+ trunc F
+ truncf F
+ truncl F
+ y0 F
+ y0f F
+ y0l F
+ y1 F
+ y1f F
+ y1l F
+ yn F
+ ynf F
+ ynl F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libnsl.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libnsl.abilist
new file mode 100644
index 0000000..a476875
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libnsl.abilist
@@ -0,0 +1,123 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ __free_fdresult F
+ __nis_default_access F
+ __nis_default_group F
+ __nis_default_owner F
+ __nis_default_ttl F
+ __nis_finddirectory F
+ __nis_hash F
+ __nisbind_connect F
+ __nisbind_create F
+ __nisbind_destroy F
+ __nisbind_next F
+ __yp_check F
+ nis_add F
+ nis_add_entry F
+ nis_addmember F
+ nis_checkpoint F
+ nis_clone_directory F
+ nis_clone_object F
+ nis_clone_result F
+ nis_creategroup F
+ nis_destroy_object F
+ nis_destroygroup F
+ nis_dir_cmp F
+ nis_domain_of F
+ nis_domain_of_r F
+ nis_first_entry F
+ nis_free_directory F
+ nis_free_object F
+ nis_free_request F
+ nis_freenames F
+ nis_freeresult F
+ nis_freeservlist F
+ nis_freetags F
+ nis_getnames F
+ nis_getservlist F
+ nis_ismember F
+ nis_leaf_of F
+ nis_leaf_of_r F
+ nis_lerror F
+ nis_list F
+ nis_local_directory F
+ nis_local_group F
+ nis_local_host F
+ nis_local_principal F
+ nis_lookup F
+ nis_mkdir F
+ nis_modify F
+ nis_modify_entry F
+ nis_name_of F
+ nis_name_of_r F
+ nis_next_entry F
+ nis_perror F
+ nis_ping F
+ nis_print_directory F
+ nis_print_entry F
+ nis_print_group F
+ nis_print_group_entry F
+ nis_print_link F
+ nis_print_object F
+ nis_print_result F
+ nis_print_rights F
+ nis_print_table F
+ nis_read_obj F
+ nis_remove F
+ nis_remove_entry F
+ nis_removemember F
+ nis_rmdir F
+ nis_servstate F
+ nis_sperrno F
+ nis_sperror F
+ nis_sperror_r F
+ nis_stats F
+ nis_verifygroup F
+ nis_write_obj F
+ readColdStartFile F
+ writeColdStartFile F
+ xdr_cback_data F
+ xdr_domainname F
+ xdr_keydat F
+ xdr_mapname F
+ xdr_obj_p F
+ xdr_peername F
+ xdr_valdat F
+ xdr_yp_buf F
+ xdr_ypall F
+ xdr_ypbind_binding F
+ xdr_ypbind_resp F
+ xdr_ypbind_resptype F
+ xdr_ypbind_setdom F
+ xdr_ypdelete_args F
+ xdr_ypmap_parms F
+ xdr_ypmaplist F
+ xdr_yppush_status F
+ xdr_yppushresp_xfr F
+ xdr_ypreq_key F
+ xdr_ypreq_nokey F
+ xdr_ypreq_xfr F
+ xdr_ypresp_all F
+ xdr_ypresp_key_val F
+ xdr_ypresp_maplist F
+ xdr_ypresp_master F
+ xdr_ypresp_order F
+ xdr_ypresp_val F
+ xdr_ypresp_xfr F
+ xdr_ypstat F
+ xdr_ypupdate_args F
+ xdr_ypxfrstat F
+ yp_all F
+ yp_bind F
+ yp_first F
+ yp_get_default_domain F
+ yp_maplist F
+ yp_master F
+ yp_match F
+ yp_next F
+ yp_order F
+ yp_unbind F
+ yp_update F
+ ypbinderr_string F
+ yperr_string F
+ ypprot_err F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libpthread.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libpthread.abilist
new file mode 100644
index 0000000..f2c65fb
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libpthread.abilist
@@ -0,0 +1,224 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ _IO_flockfile F
+ _IO_ftrylockfile F
+ _IO_funlockfile F
+ __close F
+ __connect F
+ __errno_location F
+ __fcntl F
+ __fork F
+ __h_errno_location F
+ __libc_allocate_rtsig F
+ __libc_current_sigrtmax F
+ __libc_current_sigrtmin F
+ __lseek F
+ __nanosleep F
+ __open F
+ __open64 F
+ __pread64 F
+ __pthread_cleanup_routine F
+ __pthread_getspecific F
+ __pthread_key_create F
+ __pthread_mutex_destroy F
+ __pthread_mutex_init F
+ __pthread_mutex_lock F
+ __pthread_mutex_trylock F
+ __pthread_mutex_unlock F
+ __pthread_mutexattr_destroy F
+ __pthread_mutexattr_init F
+ __pthread_mutexattr_settype F
+ __pthread_once F
+ __pthread_register_cancel F
+ __pthread_register_cancel_defer F
+ __pthread_rwlock_destroy F
+ __pthread_rwlock_init F
+ __pthread_rwlock_rdlock F
+ __pthread_rwlock_tryrdlock F
+ __pthread_rwlock_trywrlock F
+ __pthread_rwlock_unlock F
+ __pthread_rwlock_wrlock F
+ __pthread_setspecific F
+ __pthread_unregister_cancel F
+ __pthread_unregister_cancel_restore F
+ __pthread_unwind_next F
+ __pwrite64 F
+ __read F
+ __res_state F
+ __send F
+ __sigaction F
+ __vfork F
+ __wait F
+ __write F
+ _pthread_cleanup_pop F
+ _pthread_cleanup_pop_restore F
+ _pthread_cleanup_push F
+ _pthread_cleanup_push_defer F
+ accept F
+ close F
+ connect F
+ fcntl F
+ flockfile F
+ fork F
+ fsync F
+ ftrylockfile F
+ funlockfile F
+ longjmp F
+ lseek F
+ lseek64 F
+ msync F
+ nanosleep F
+ open F
+ open64 F
+ pause F
+ pread F
+ pread64 F
+ pthread_attr_destroy F
+ pthread_attr_getaffinity_np F
+ pthread_attr_getdetachstate F
+ pthread_attr_getguardsize F
+ pthread_attr_getinheritsched F
+ pthread_attr_getschedparam F
+ pthread_attr_getschedpolicy F
+ pthread_attr_getscope F
+ pthread_attr_getstack F
+ pthread_attr_getstackaddr F
+ pthread_attr_getstacksize F
+ pthread_attr_init F
+ pthread_attr_setaffinity_np F
+ pthread_attr_setdetachstate F
+ pthread_attr_setguardsize F
+ pthread_attr_setinheritsched F
+ pthread_attr_setschedparam F
+ pthread_attr_setschedpolicy F
+ pthread_attr_setscope F
+ pthread_attr_setstack F
+ pthread_attr_setstackaddr F
+ pthread_attr_setstacksize F
+ pthread_barrier_destroy F
+ pthread_barrier_init F
+ pthread_barrier_wait F
+ pthread_barrierattr_destroy F
+ pthread_barrierattr_getpshared F
+ pthread_barrierattr_init F
+ pthread_barrierattr_setpshared F
+ pthread_cancel F
+ pthread_cond_broadcast F
+ pthread_cond_destroy F
+ pthread_cond_init F
+ pthread_cond_signal F
+ pthread_cond_timedwait F
+ pthread_cond_wait F
+ pthread_condattr_destroy F
+ pthread_condattr_getclock F
+ pthread_condattr_getpshared F
+ pthread_condattr_init F
+ pthread_condattr_setclock F
+ pthread_condattr_setpshared F
+ pthread_create F
+ pthread_detach F
+ pthread_equal F
+ pthread_exit F
+ pthread_getaffinity_np F
+ pthread_getattr_np F
+ pthread_getconcurrency F
+ pthread_getcpuclockid F
+ pthread_getname_np F
+ pthread_getschedparam F
+ pthread_getspecific F
+ pthread_join F
+ pthread_key_create F
+ pthread_key_delete F
+ pthread_kill F
+ pthread_kill_other_threads_np F
+ pthread_mutex_consistent F
+ pthread_mutex_consistent_np F
+ pthread_mutex_destroy F
+ pthread_mutex_getprioceiling F
+ pthread_mutex_init F
+ pthread_mutex_lock F
+ pthread_mutex_setprioceiling F
+ pthread_mutex_timedlock F
+ pthread_mutex_trylock F
+ pthread_mutex_unlock F
+ pthread_mutexattr_destroy F
+ pthread_mutexattr_getkind_np F
+ pthread_mutexattr_getprioceiling F
+ pthread_mutexattr_getprotocol F
+ pthread_mutexattr_getpshared F
+ pthread_mutexattr_getrobust F
+ pthread_mutexattr_getrobust_np F
+ pthread_mutexattr_gettype F
+ pthread_mutexattr_init F
+ pthread_mutexattr_setkind_np F
+ pthread_mutexattr_setprioceiling F
+ pthread_mutexattr_setprotocol F
+ pthread_mutexattr_setpshared F
+ pthread_mutexattr_setrobust F
+ pthread_mutexattr_setrobust_np F
+ pthread_mutexattr_settype F
+ pthread_once F
+ pthread_rwlock_destroy F
+ pthread_rwlock_init F
+ pthread_rwlock_rdlock F
+ pthread_rwlock_timedrdlock F
+ pthread_rwlock_timedwrlock F
+ pthread_rwlock_tryrdlock F
+ pthread_rwlock_trywrlock F
+ pthread_rwlock_unlock F
+ pthread_rwlock_wrlock F
+ pthread_rwlockattr_destroy F
+ pthread_rwlockattr_getkind_np F
+ pthread_rwlockattr_getpshared F
+ pthread_rwlockattr_init F
+ pthread_rwlockattr_setkind_np F
+ pthread_rwlockattr_setpshared F
+ pthread_self F
+ pthread_setaffinity_np F
+ pthread_setcancelstate F
+ pthread_setcanceltype F
+ pthread_setconcurrency F
+ pthread_setname_np F
+ pthread_setschedparam F
+ pthread_setschedprio F
+ pthread_setspecific F
+ pthread_sigmask F
+ pthread_sigqueue F
+ pthread_spin_destroy F
+ pthread_spin_init F
+ pthread_spin_lock F
+ pthread_spin_trylock F
+ pthread_spin_unlock F
+ pthread_testcancel F
+ pthread_timedjoin_np F
+ pthread_tryjoin_np F
+ pthread_yield F
+ pwrite F
+ pwrite64 F
+ raise F
+ read F
+ recv F
+ recvfrom F
+ recvmsg F
+ sem_close F
+ sem_destroy F
+ sem_getvalue F
+ sem_init F
+ sem_open F
+ sem_post F
+ sem_timedwait F
+ sem_trywait F
+ sem_unlink F
+ sem_wait F
+ send F
+ sendmsg F
+ sendto F
+ sigaction F
+ siglongjmp F
+ sigwait F
+ system F
+ tcdrain F
+ vfork F
+ wait F
+ waitpid F
+ write F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libresolv.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libresolv.abilist
new file mode 100644
index 0000000..d9123c9
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libresolv.abilist
@@ -0,0 +1,93 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ __b64_ntop F
+ __b64_pton F
+ __dn_comp F
+ __dn_count_labels F
+ __dn_expand F
+ __dn_skipname F
+ __fp_nquery F
+ __fp_query F
+ __fp_resstat F
+ __hostalias F
+ __loc_aton F
+ __loc_ntoa F
+ __p_cdname F
+ __p_cdnname F
+ __p_class F
+ __p_class_syms D 0x54
+ __p_fqname F
+ __p_fqnname F
+ __p_option F
+ __p_query F
+ __p_rcode F
+ __p_secstodate F
+ __p_time F
+ __p_type F
+ __p_type_syms D 0x228
+ __putlong F
+ __putshort F
+ __res_close F
+ __res_dnok F
+ __res_hnok F
+ __res_hostalias F
+ __res_isourserver F
+ __res_mailok F
+ __res_mkquery F
+ __res_nameinquery F
+ __res_nmkquery F
+ __res_nquery F
+ __res_nquerydomain F
+ __res_nsearch F
+ __res_nsend F
+ __res_ownok F
+ __res_queriesmatch F
+ __res_query F
+ __res_querydomain F
+ __res_search F
+ __res_send F
+ __sym_ntop F
+ __sym_ntos F
+ __sym_ston F
+ _gethtbyaddr F
+ _gethtbyname F
+ _gethtbyname2 F
+ _gethtent F
+ _getlong F
+ _getshort F
+ _res_opcodes D 0x40
+ _sethtent F
+ inet_net_ntop F
+ inet_net_pton F
+ inet_neta F
+ ns_datetosecs F
+ ns_format_ttl F
+ ns_get16 F
+ ns_get32 F
+ ns_initparse F
+ ns_makecanon F
+ ns_msg_getflag F
+ ns_name_compress F
+ ns_name_ntol F
+ ns_name_ntop F
+ ns_name_pack F
+ ns_name_pton F
+ ns_name_rollback F
+ ns_name_skip F
+ ns_name_uncompress F
+ ns_name_unpack F
+ ns_parse_ttl F
+ ns_parserr F
+ ns_put16 F
+ ns_put32 F
+ ns_samedomain F
+ ns_samename F
+ ns_skiprr F
+ ns_sprintrr F
+ ns_sprintrrf F
+ ns_subdomain F
+ res_gethostbyaddr F
+ res_gethostbyname F
+ res_gethostbyname2 F
+ res_send_setqhook F
+ res_send_setrhook F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/librt.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/librt.abilist
new file mode 100644
index 0000000..211e046
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/librt.abilist
@@ -0,0 +1,42 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ __mq_open_2 F
+ aio_cancel F
+ aio_cancel64 F
+ aio_error F
+ aio_error64 F
+ aio_fsync F
+ aio_fsync64 F
+ aio_init F
+ aio_read F
+ aio_read64 F
+ aio_return F
+ aio_return64 F
+ aio_suspend F
+ aio_suspend64 F
+ aio_write F
+ aio_write64 F
+ clock_getcpuclockid F
+ clock_getres F
+ clock_gettime F
+ clock_nanosleep F
+ clock_settime F
+ lio_listio F
+ lio_listio64 F
+ mq_close F
+ mq_getattr F
+ mq_notify F
+ mq_open F
+ mq_receive F
+ mq_send F
+ mq_setattr F
+ mq_timedreceive F
+ mq_timedsend F
+ mq_unlink F
+ shm_open F
+ shm_unlink F
+ timer_create F
+ timer_delete F
+ timer_getoverrun F
+ timer_gettime F
+ timer_settime F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libthread_db.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libthread_db.abilist
new file mode 100644
index 0000000..61d736a
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libthread_db.abilist
@@ -0,0 +1,42 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ td_init F
+ td_log F
+ td_symbol_list F
+ td_ta_clear_event F
+ td_ta_delete F
+ td_ta_enable_stats F
+ td_ta_event_addr F
+ td_ta_event_getmsg F
+ td_ta_get_nthreads F
+ td_ta_get_ph F
+ td_ta_get_stats F
+ td_ta_map_id2thr F
+ td_ta_map_lwp2thr F
+ td_ta_new F
+ td_ta_reset_stats F
+ td_ta_set_event F
+ td_ta_setconcurrency F
+ td_ta_thr_iter F
+ td_ta_tsd_iter F
+ td_thr_clear_event F
+ td_thr_dbresume F
+ td_thr_dbsuspend F
+ td_thr_event_enable F
+ td_thr_event_getmsg F
+ td_thr_get_info F
+ td_thr_getfpregs F
+ td_thr_getgregs F
+ td_thr_getxregs F
+ td_thr_getxregsize F
+ td_thr_set_event F
+ td_thr_setfpregs F
+ td_thr_setgregs F
+ td_thr_setprio F
+ td_thr_setsigpending F
+ td_thr_setxregs F
+ td_thr_sigsetmask F
+ td_thr_tls_get_addr F
+ td_thr_tlsbase F
+ td_thr_tsd F
+ td_thr_validate F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libutil.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libutil.abilist
new file mode 100644
index 0000000..5563672
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libutil.abilist
@@ -0,0 +1,8 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ forkpty F
+ login F
+ login_tty F
+ logout F
+ logwtmp F
+ openpty F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/localplt.data b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/localplt.data
new file mode 100644
index 0000000..6dd5bcb
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/localplt.data
@@ -0,0 +1,11 @@
+libc.so: __errno_location
+libc.so: __signbit
+libc.so: calloc
+libc.so: free
+libc.so: malloc
+libc.so: memalign
+libc.so: realloc
+libm.so: __signbit
+libm.so: __signbitf
+libm.so: matherr
+libpthread.so: __errno_location
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.c b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.c
new file mode 100644
index 0000000..30b32e8
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.c
@@ -0,0 +1,132 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <sysdep.h>
+#include <lowlevellock.h>
+#include <sys/time.h>
+
+void
+__lll_lock_wait_private (int *futex)
+{
+  do
+    {
+      int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1);
+      if (oldval != 0)
+	lll_futex_wait (futex, 2, LLL_PRIVATE);
+    }
+  while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0);
+}
+
+
+/* These functions don't get included in libc.so  */
+#ifdef IS_IN_libpthread
+void
+__lll_lock_wait (int *futex, int private)
+{
+  do
+    {
+      int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1);
+      if (oldval != 0)
+	lll_futex_wait (futex, 2, private);
+    }
+  while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0);
+}
+
+
+int
+__lll_timedlock_wait (int *futex, const struct timespec *abstime, int private)
+{
+  struct timespec rt;
+
+  /* Reject invalid timeouts.  */
+  if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000)
+    return EINVAL;
+
+  /* Upgrade the lock.  */
+  if (atomic_exchange_acq (futex, 2) == 0)
+    return 0;
+
+  do
+    {
+      struct timeval tv;
+
+      /* Get the current time.  */
+      (void) __gettimeofday (&tv, NULL);
+
+      /* Compute relative timeout.  */
+      rt.tv_sec = abstime->tv_sec - tv.tv_sec;
+      rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000;
+      if (rt.tv_nsec < 0)
+	{
+	  rt.tv_nsec += 1000000000;
+	  --rt.tv_sec;
+	}
+
+      /* Already timed out?  */
+      if (rt.tv_sec < 0)
+	return ETIMEDOUT;
+
+      /* XYZ: Lost the lock to check whether it was private. */
+      lll_futex_timed_wait (futex, 2, &rt, private);
+    }
+  while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0);
+
+  return 0;
+}
+
+
+int
+__lll_timedwait_tid (int *tidp, const struct timespec *abstime)
+{
+  int tid;
+
+  if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000)
+    return EINVAL;
+
+  /* Repeat until thread terminated.  */
+  while ((tid = *tidp) != 0)
+    {
+      struct timeval tv;
+      struct timespec rt;
+
+      /* Get the current time.  */
+      (void) __gettimeofday (&tv, NULL);
+
+      /* Compute relative timeout.  */
+      rt.tv_sec = abstime->tv_sec - tv.tv_sec;
+      rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000;
+      if (rt.tv_nsec < 0)
+	{
+	  rt.tv_nsec += 1000000000;
+	  --rt.tv_sec;
+	}
+
+      /* Already timed out?  */
+      if (rt.tv_sec < 0)
+	return ETIMEDOUT;
+
+      /* Wait until thread terminates.  */
+      /* XYZ: Lost the lock to check whether it was private. */
+      if (lll_futex_timed_wait (tidp, tid, &rt, LLL_SHARED) == -ETIMEDOUT)
+	return ETIMEDOUT;
+    }
+
+  return 0;
+}
+#endif
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h
new file mode 100644
index 0000000..071f55c
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h
@@ -0,0 +1,325 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LOWLEVELLOCK_H
+#define _LOWLEVELLOCK_H	1
+
+#include <time.h>
+#include <sys/param.h>
+#include <bits/pthreadtypes.h>
+#include <atomic.h>
+#include <sysdep.h>
+#include <kernel-features.h>
+#include <tls.h>		/* Need THREAD_*, and header.*.  */
+
+#define FUTEX_WAIT		0
+#define FUTEX_WAKE		1
+#define FUTEX_REQUEUE		3
+#define FUTEX_CMP_REQUEUE	4
+#define FUTEX_WAKE_OP		5
+#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE	((4 << 24) | 1)
+#define FUTEX_LOCK_PI		6
+#define FUTEX_UNLOCK_PI		7
+#define FUTEX_TRYLOCK_PI	8
+#define FUTEX_WAIT_BITSET	9
+#define FUTEX_WAKE_BITSET	10
+#define FUTEX_WAIT_REQUEUE_PI   11
+#define FUTEX_CMP_REQUEUE_PI    12
+#define FUTEX_PRIVATE_FLAG	128
+#define FUTEX_CLOCK_REALTIME	256
+
+#define FUTEX_BITSET_MATCH_ANY	0xffffffff
+
+/* Values for 'private' parameter of locking macros.  Yes, the
+   definition seems to be backwards.  But it is not.  The bit will be
+   reversed before passing to the system call.  */
+#define LLL_PRIVATE	0
+#define LLL_SHARED	FUTEX_PRIVATE_FLAG
+
+
+#if !defined NOT_IN_libc || defined IS_IN_rtld
+/* In libc.so or ld.so all futexes are private.  */
+# ifdef __ASSUME_PRIVATE_FUTEX
+#  define __lll_private_flag(fl, private) \
+  ((fl) | FUTEX_PRIVATE_FLAG)
+# else
+#  define __lll_private_flag(fl, private) \
+  ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex))
+# endif
+#else
+# ifdef __ASSUME_PRIVATE_FUTEX
+#  define __lll_private_flag(fl, private) \
+  (((fl) | FUTEX_PRIVATE_FLAG) ^ (private))
+# else
+#  define __lll_private_flag(fl, private) \
+  (__builtin_constant_p (private)					      \
+   ? ((private) == 0							      \
+      ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex))	      \
+      : (fl))								      \
+   : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG)				      \
+	      & THREAD_GETMEM (THREAD_SELF, header.private_futex))))
+# endif
+#endif
+
+
+#define lll_futex_wait(futexp, val, private) \
+  lll_futex_timed_wait(futexp, val, NULL, private)
+
+#define lll_futex_timed_wait(futexp, val, timespec, private) \
+  ({									      \
+    INTERNAL_SYSCALL_DECL (__err);					      \
+    long int __ret;							      \
+    __ret = INTERNAL_SYSCALL (futex, __err, 4, (long) (futexp),		      \
+			      __lll_private_flag (FUTEX_WAIT, private),	      \
+			      (val), (timespec));			      \
+    INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret;		      \
+  })
+
+#define lll_futex_timed_wait_bitset(futexp, val, timespec, clockbit, private) \
+  ({									\
+    INTERNAL_SYSCALL_DECL (__err);					\
+    long int __ret;							\
+    int __op = FUTEX_WAIT_BITSET | clockbit;				\
+    __ret = INTERNAL_SYSCALL (futex, __err, 6, (long) (futexp),		\
+			      __lll_private_flag (__op, private),	\
+			      (val), (timespec), NULL /* Unused.  */,	\
+			      FUTEX_BITSET_MATCH_ANY);			\
+    INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret;		\
+  })
+
+#define lll_futex_wake(futexp, nr, private) \
+  ({									      \
+    INTERNAL_SYSCALL_DECL (__err);					      \
+    long int __ret;							      \
+    __ret = INTERNAL_SYSCALL (futex, __err, 4, (long) (futexp),		      \
+			      __lll_private_flag (FUTEX_WAKE, private),	      \
+			      (nr), 0);					      \
+    INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret;		      \
+  })
+
+#define lll_robust_dead(futexv, private) \
+  do									      \
+    {									      \
+      int *__futexp = &(futexv);					      \
+      atomic_or (__futexp, FUTEX_OWNER_DIED);				      \
+      lll_futex_wake (__futexp, 1, private);				      \
+    }									      \
+  while (0)
+
+/* Returns non-zero if error happened, zero if success.  */
+#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private)      \
+  ({									      \
+    INTERNAL_SYSCALL_DECL (__err);					      \
+    long int __ret;							      \
+    __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp),		      \
+			      __lll_private_flag (FUTEX_CMP_REQUEUE, private),\
+			      (nr_wake), (nr_move), (mutex), (val));	      \
+    INTERNAL_SYSCALL_ERROR_P (__ret, __err);				      \
+  })
+
+
+/* Returns non-zero if error happened, zero if success.  */
+#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private)    \
+  ({									      \
+    INTERNAL_SYSCALL_DECL (__err);					      \
+    long int __ret;							      \
+									      \
+    __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp),		      \
+			      __lll_private_flag (FUTEX_WAKE_OP, private),    \
+			      (nr_wake), (nr_wake2), (futexp2),		      \
+			      FUTEX_OP_CLEAR_WAKE_IF_GT_ONE);		      \
+    INTERNAL_SYSCALL_ERROR_P (__ret, __err);				      \
+  })
+
+/* Priority Inheritance support.  */
+#define lll_futex_wait_requeue_pi(futexp, val, mutex, private) \
+  lll_futex_timed_wait_requeue_pi (futexp, val, NULL, 0, mutex, private)
+
+#define lll_futex_timed_wait_requeue_pi(futexp, val, timespec, clockbit,      \
+					mutex, private)			      \
+  ({									      \
+    INTERNAL_SYSCALL_DECL (__err);					      \
+    long int __ret;							      \
+    int __op = FUTEX_WAIT_REQUEUE_PI | clockbit;			      \
+									      \
+    __ret = INTERNAL_SYSCALL (futex, __err, 5, (futexp),		      \
+			      __lll_private_flag (__op, private),	      \
+			      (val), (timespec), mutex); 		      \
+    INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret;		      \
+  })
+
+#define lll_futex_cmp_requeue_pi(futexp, nr_wake, nr_move, mutex, val, priv)  \
+  ({									      \
+    INTERNAL_SYSCALL_DECL (__err);					      \
+    long int __ret;							      \
+									      \
+    __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp),		      \
+			      __lll_private_flag (FUTEX_CMP_REQUEUE_PI, priv),\
+			      (nr_wake), (nr_move), (mutex), (val));	      \
+    INTERNAL_SYSCALL_ERROR_P (__ret, __err);				      \
+  })
+
+#define lll_trylock(lock)	\
+  atomic_compare_and_exchange_val_acq(&(lock), 1, 0)
+
+#define lll_cond_trylock(lock)	\
+  atomic_compare_and_exchange_val_acq(&(lock), 2, 0)
+
+#define __lll_robust_trylock(futex, id) \
+  (atomic_compare_and_exchange_val_acq (futex, id, 0) != 0)
+#define lll_robust_trylock(lock, id) \
+  __lll_robust_trylock (&(lock), id)
+
+extern void __lll_lock_wait_private (int *futex) attribute_hidden;
+extern void __lll_lock_wait (int *futex, int private) attribute_hidden;
+extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden;
+
+#define __lll_lock(futex, private)					      \
+  ((void) ({								      \
+    int *__futex = (futex);						      \
+    if (__builtin_expect (atomic_compare_and_exchange_val_acq (__futex, 1, 0),\
+			  0) != 0)					      \
+      {									      \
+	if (__builtin_constant_p (private) && (private) == LLL_PRIVATE)	      \
+	  __lll_lock_wait_private (__futex);				      \
+	else								      \
+	  __lll_lock_wait (__futex, private);				      \
+      }									      \
+  }))
+#define lll_lock(futex, private) __lll_lock (&(futex), private)
+
+
+#define __lll_robust_lock(futex, id, private)				      \
+  ({									      \
+    int *__futex = (futex);						      \
+    int __val = 0;							      \
+									      \
+    if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id,  \
+								0), 0))	      \
+      __val = __lll_robust_lock_wait (__futex, private);		      \
+    __val;								      \
+  })
+#define lll_robust_lock(futex, id, private) \
+  __lll_robust_lock (&(futex), id, private)
+
+
+static inline void __attribute__ ((always_inline))
+__lll_cond_lock (int *futex, int private)
+{
+    if (__builtin_expect (atomic_exchange_acq (futex, 2), 0))
+    __lll_lock_wait (futex, private);
+}
+#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private)
+
+
+#define lll_robust_cond_lock(futex, id, private) \
+  __lll_robust_lock (&(futex), (id) | FUTEX_WAITERS, private)
+
+
+extern int __lll_timedlock_wait (int *futex, const struct timespec *,
+				 int private) attribute_hidden;
+extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *,
+					int private) attribute_hidden;
+
+static inline int __attribute__ ((always_inline))
+__lll_timedlock (int *futex, const struct timespec *abstime, int private)
+{
+  int result = 0;
+    if (__builtin_expect (atomic_compare_and_exchange_val_acq (futex, 1, 0), 0) != 0)
+    result = __lll_timedlock_wait (futex, abstime, private);
+  return result;
+}
+#define lll_timedlock(futex, abstime, private) \
+  __lll_timedlock (&(futex), abstime, private)
+
+
+static inline int __attribute__ ((always_inline))
+__lll_robust_timedlock (int *futex, const struct timespec *abstime,
+			int id, int private)
+{
+  int result = 0;
+    if (__builtin_expect (atomic_compare_and_exchange_bool_acq (futex, id, 0), 0))
+    result = __lll_robust_timedlock_wait (futex, abstime, private);
+  return result;
+}
+#define lll_robust_timedlock(futex, abstime, id, private) \
+  __lll_robust_timedlock (&(futex), abstime, id, private)
+
+
+#define __lll_unlock(futex, private) \
+  ((void) ({								      \
+    int *__futex = (futex);						      \
+    int __val = atomic_exchange_rel (__futex, 0);			      \
+									      \
+    if (__builtin_expect (__val > 1, 0))				      \
+      lll_futex_wake (__futex, 1, private);				      \
+  }))
+#define lll_unlock(futex, private) __lll_unlock(&(futex), private)
+
+
+#define __lll_robust_unlock(futex, private) \
+  ((void) ({								      \
+    int *__futex = (futex);						      \
+    int __val = atomic_exchange_rel (__futex, 0);			      \
+									      \
+    if (__builtin_expect (__val & FUTEX_WAITERS, 0))			      \
+      lll_futex_wake (__futex, 1, private);				      \
+  }))
+#define lll_robust_unlock(futex, private) \
+  __lll_robust_unlock(&(futex), private)
+
+
+#define lll_islocked(futex) \
+  (futex != 0)
+
+
+/* Our internal lock implementation is identical to the binary-compatible
+   mutex implementation. */
+
+/* Initializers for lock.  */
+#define LLL_LOCK_INITIALIZER		(0)
+#define LLL_LOCK_INITIALIZER_LOCKED	(1)
+
+/* The states of a lock are:
+    0  -  untaken
+    1  -  taken by one user
+   >1  -  taken by more users */
+
+/* The kernel notifies a process which uses CLONE_CHILD_CLEARTID via futex
+   wakeup when the clone terminates.  The memory location contains the
+   thread ID while the clone is running and is reset to zero
+   afterwards.	*/
+#define lll_wait_tid(tid) \
+  do {					\
+    __typeof (tid) __tid;		\
+    while ((__tid = (tid)) != 0)	\
+      lll_futex_wait (&(tid), __tid, LLL_SHARED);\
+  } while (0)
+
+extern int __lll_timedwait_tid (int *, const struct timespec *)
+     attribute_hidden;
+
+#define lll_timedwait_tid(tid, abstime) \
+  ({							\
+    int __res = 0;					\
+    if ((tid) != 0)					\
+      __res = __lll_timedwait_tid (&(tid), (abstime));	\
+    __res;						\
+  })
+
+#endif	/* lowlevellock.h */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/pt-vfork.S b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/pt-vfork.S
new file mode 100644
index 0000000..51d787f
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/pt-vfork.S
@@ -0,0 +1,21 @@
+/* Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <tcb-offsets.h>
+
+#include "vfork.S"
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/pthread_once.c b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/pthread_once.c
new file mode 100644
index 0000000..2fb9b85
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/pthread_once.c
@@ -0,0 +1,90 @@
+/* Copyright (C) 2004-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "pthreadP.h"
+#include <lowlevellock.h>
+
+unsigned long int __fork_generation attribute_hidden;
+
+static void
+clear_once_control (void *arg)
+{
+  pthread_once_t *once_control = (pthread_once_t *) arg;
+
+  *once_control = 0;
+  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+}
+
+int
+__pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
+{
+  for (;;)
+    {
+      int oldval;
+      int newval;
+
+      /* Pseudo code:
+	 newval = __fork_generation | 1;
+	 oldval = *once_control;
+	 if ((oldval & 2) == 0)
+	   *once_control = newval;
+	 Do this atomically.
+      */
+      do
+	{
+	  newval = __fork_generation | 1;
+	  oldval = *once_control;
+	  if (oldval & 2)
+	    break;
+	} while (atomic_compare_and_exchange_val_acq (once_control, newval, oldval) != oldval);
+
+      /* Check if the initializer has already been done.  */
+      if ((oldval & 2) != 0)
+	return 0;
+
+      /* Check if another thread already runs the initializer.	*/
+      if ((oldval & 1) == 0)
+	break;
+
+      /* Check whether the initializer execution was interrupted by a fork.  */
+      if (oldval != newval)
+	break;
+
+      /* Same generation, some other thread was faster. Wait.  */
+      lll_futex_wait (once_control, oldval, LLL_PRIVATE);
+    }
+
+  /* This thread is the first here.  Do the initialization.
+     Register a cleanup handler so that in case the thread gets
+     interrupted the initialization can be restarted.  */
+  pthread_cleanup_push (clear_once_control, once_control);
+
+  init_routine ();
+
+  pthread_cleanup_pop (0);
+
+  /* Say that the initialisation is done.  */
+  *once_control = __fork_generation | 2;
+
+  /* Wake up all other threads.  */
+  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+
+  return 0;
+}
+weak_alias (__pthread_once, pthread_once)
+hidden_def (__pthread_once)
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/vfork.S b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/vfork.S
new file mode 100644
index 0000000..a9d8376
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/vfork.S
@@ -0,0 +1,46 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+#define _ERRNO_H	1
+#include <bits/errno.h>
+#include <kernel-features.h>
+#include <tcb-offsets.h>
+
+/* Clone the calling process, but without copying the whole address space.
+   The calling process is suspended until the new process exits or is
+   replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
+   and the process ID of the new process to the old process.  */
+
+ENTRY (__vfork)
+
+#ifdef __NR_vfork
+	DO_CALL (vfork, 0)
+#else
+	DO_CALL (fork, 0)
+#endif
+	addik	r12,r0,-4095
+	cmpu	r12,r12,r3
+	bgei	r12,SYSCALL_ERROR_LABEL
+	rtsd	r15,8
+	nop
+
+PSEUDO_END (__vfork)
+libc_hidden_def (__vfork)
+
+weak_alias (__vfork, vfork)
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/profil-counter.h b/ports/sysdeps/unix/sysv/linux/microblaze/profil-counter.h
new file mode 100644
index 0000000..fedb38b
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/profil-counter.h
@@ -0,0 +1,20 @@
+/* Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* We can use the ix86 version.  */
+#include <sysdeps/unix/sysv/linux/i386/profil-counter.h>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/semctl.c b/ports/sysdeps/unix/sysv/linux/microblaze/semctl.c
new file mode 100644
index 0000000..1451629
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/semctl.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/alpha/semctl.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setgroups.c b/ports/sysdeps/unix/sysv/linux/microblaze/setgroups.c
new file mode 100644
index 0000000..cb9a770
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setgroups.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setgroups.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c b/ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c
new file mode 100644
index 0000000..c121e99
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/alpha/shmctl.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h b/ports/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h
new file mode 100644
index 0000000..e03effa
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h
@@ -0,0 +1,25 @@
+/* Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SIGCONTEXT int _code, struct ucontext *
+#define SIGCONTEXT_EXTRA_ARGS _code,
+#define GET_PC(ctx)    ((void *) (ctx)->uc_mcontext.regs.pc)
+#define GET_FRAME(ctx) ((void *) (ctx)->uc_mcontext.regs.sp)
+#define GET_STACK(ctx) ((void *) (ctx)->uc_mcontext.regs.sp)
+#define CALL_SIGHANDLER(handler, signo, ctx) \
+  (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx))
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/socket.S b/ports/sysdeps/unix/sysv/linux/microblaze/socket.S
new file mode 100644
index 0000000..7d90cbe
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/socket.S
@@ -0,0 +1,126 @@
+/* Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep-cancel.h>
+#include <socketcall.h>
+
+#define P(a, b) P2(a, b)
+#define P2(a, b) a##b
+
+/* The socket-oriented system calls are handled unusally in Linux.
+   They are all gated through the single `socketcall' system call number.
+   `socketcall' takes two arguments: the first is the subcode, specifying
+   which socket function is being called; and the second is a pointer to
+   the arguments to the specific function.
+
+   The .S files for the other calls just #define socket and #include this.
+   They also #define a 'number-of-arguments' word in NARGS, which
+   defaults to 3.  */
+
+#ifndef NARGS
+#ifdef socket
+#error NARGS not defined
+#endif
+#define NARGS 3
+#endif
+
+/* Stack usage:
+   0 - r15 (return address)
+   4 - 12 args to syscall
+   16 - scratch for cancellation state
+   20 - scratch for return value
+*/
+#define stackadjust 24
+
+#ifndef __socket
+#ifndef NO_WEAK_ALIAS
+#define __socket P(__,socket)
+#else
+#define __socket socket
+#endif
+#endif
+
+	.text
+ENTRY(__socket)
+	addik r1,r1,-stackadjust
+	swi r15,r1,0
+#if NARGS >= 1
+	swi  r5,r1,stackadjust+4
+#endif
+#if NARGS >= 2
+	swi  r6,r1,stackadjust+8
+#endif
+#if NARGS >= 3
+	swi  r7,r1,stackadjust+12
+#endif
+#if NARGS >= 4
+	swi  r8,r1,stackadjust+16
+#endif
+#if NARGS >= 5
+	swi  r9,r1,stackadjust+20
+#endif
+#if NARGS >= 6
+	swi  r10,r1,stackadjust+24
+#endif
+/* The rest of the args (if any) are on the caller's stack already */
+
+#if defined NEED_CANCELLATION && defined CENABLE
+	SINGLE_THREAD_P
+	bnei	r12,L(socket_cancel)
+#endif
+
+	addik	r12,r0,SYS_ify(socketcall)
+	addik	r5,r0,P(SOCKOP_,socket)
+	addik	r6,r1,stackadjust+4
+	brki	r14,8
+	addk	r0,r0,r0
+	lwi	r15,r1,0
+	addik	r1,r1,stackadjust
+	addik   r4,r0,-4095
+	cmpu	r4,r4,r3
+	bgei	r4,SYSCALL_ERROR_LABEL
+	rtsd	r15,8
+	addk	r0,r0,r0
+
+#if defined NEED_CANCELLATION && defined CENABLE
+L(socket_cancel):
+	CENABLE
+	swi	r3,r1,16
+	addik	r12,r0,SYS_ify(socketcall)
+	addik	r5,r0,P(SOCKOP_,socket)
+	addik	r6,r1,stackadjust+4
+	brki	r14,8
+	addk	r0,r0,r0
+	swi	r3,r1,20
+	lwi	r5,r1,16
+	CDISABLE
+	lwi	r3,r1,20
+	lwi	r15,r1,0
+	addik	r1,r1,stackadjust
+	addik   r4,r0,-4095
+	cmpu	r4,r4,r3
+	bgei	r4,SYSCALL_ERROR_LABEL
+	rtsd	r15,8
+	addk	r0,r0,r0
+#endif
+
+PSEUDO_END (__socket)
+
+#ifndef NO_WEAK_ALIAS
+weak_alias (__socket, socket)
+#endif
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/sys/procfs.h b/ports/sysdeps/unix/sysv/linux/microblaze/sys/procfs.h
new file mode 100644
index 0000000..d4949ab
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sys/procfs.h
@@ -0,0 +1,123 @@
+/* Copyright (C) 1996-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PROCFS_H
+#define _SYS_PROCFS_H	1
+
+/* This is somewhat modelled after the file of the same name on SVR4
+   systems.  It provides a definition of the core file format for ELF
+   used on Linux.  It doesn't have anything to do with the /proc file
+   system, even though Linux has one.
+
+   Anyway, the whole purpose of this file is for GDB and GDB only.
+   Don't read too much into it.  Don't use it for anything other than
+   GDB unless you know what you are doing.  */
+
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/user.h>
+
+__BEGIN_DECLS
+
+/* Type for a general-purpose register.  */
+typedef unsigned long elf_greg_t;
+
+/* And the whole bunch of them.  We could have used `struct
+   user_regs_struct' directly in the typedef, but tradition says that
+   the register set is an array, which does have some peculiar
+   semantics, so leave it that way.  */
+#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t))
+typedef elf_greg_t elf_gregset_t[ELF_NGREG];
+
+/* Register set for the floating-point registers.  */
+typedef struct user_fpregs_struct elf_fpregset_t;
+
+
+/* Signal info.  */
+struct elf_siginfo
+  {
+    int si_signo;			/* Signal number.  */
+    int si_code;			/* Extra code.  */
+    int si_errno;			/* Errno.  */
+  };
+
+/* Definitions to generate Intel SVR4-like core files.  These mostly
+   have the same names as the SVR4 types with "elf_" tacked on the
+   front to prevent clashes with Linux definitions, and the typedef
+   forms have been avoided.  This is mostly like the SVR4 structure,
+   but more Linuxy, with things that Linux does not support and which
+   GDB doesn't really use excluded.  */
+
+struct elf_prstatus
+  {
+    struct elf_siginfo pr_info;		/* Info associated with signal.  */
+    short int pr_cursig;		/* Current signal.  */
+    unsigned long int pr_sigpend;	/* Set of pending signals.  */
+    unsigned long int pr_sighold;	/* Set of held signals.  */
+    __pid_t pr_pid;
+    __pid_t pr_ppid;
+    __pid_t pr_pgrp;
+    __pid_t pr_sid;
+    struct timeval pr_utime;		/* User time.  */
+    struct timeval pr_stime;		/* System time.  */
+    struct timeval pr_cutime;		/* Cumulative user time.  */
+    struct timeval pr_cstime;		/* Cumulative system time.  */
+    elf_gregset_t pr_reg;		/* GP registers.  */
+    int pr_fpvalid;			/* True if math copro being used.  */
+  };
+
+
+#define ELF_PRARGSZ     (80)    /* Number of chars for args.  */
+
+struct elf_prpsinfo
+  {
+    char pr_state;			/* Numeric process state.  */
+    char pr_sname;			/* Char for pr_state.  */
+    char pr_zomb;			/* Zombie.  */
+    char pr_nice;			/* Nice val.  */
+    unsigned long int pr_flag;		/* Flags.  */
+    unsigned short int pr_uid;
+    unsigned short int pr_gid;
+    int pr_pid, pr_ppid, pr_pgrp, pr_sid;
+    /* Lots missing */
+    char pr_fname[16];			/* Filename of executable.  */
+    char pr_psargs[ELF_PRARGSZ];	/* Initial part of arg list.  */
+  };
+
+/* The rest of this file provides the types for emulation of the
+   Solaris <proc_service.h> interfaces that should be implemented by
+   users of libthread_db.  */
+
+/* Addresses.  */
+typedef void *psaddr_t;
+
+/* Register sets.  Linux has different names.  */
+typedef elf_gregset_t prgregset_t;
+typedef elf_fpregset_t prfpregset_t;
+
+/* We don't have any differences between processes and threads,
+   therefore have only one PID type.  */
+typedef __pid_t lwpid_t;
+
+/* Process status and info.  In the end we do provide typedefs for them.  */
+typedef struct elf_prstatus prstatus_t;
+typedef struct elf_prpsinfo prpsinfo_t;
+
+__END_DECLS
+
+#endif	/* sys/procfs.h */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/sys/user.h b/ports/sysdeps/unix/sysv/linux/microblaze/sys/user.h
new file mode 100644
index 0000000..3c6397e
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sys/user.h
@@ -0,0 +1,77 @@
+/* Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_USER_H
+#define _SYS_USER_H	1
+
+/* The whole purpose of this file is for GDB and GDB only.  Don't read
+   too much into it.  Don't use it for anything other than GDB unless
+   you know what you are doing.  */
+
+struct user_fpregs_struct
+{
+  long int cwd;
+  long int swd;
+  long int twd;
+  long int fip;
+  long int fcs;
+  long int foo;
+  long int fos;
+  long int st_space [20];
+};
+
+struct user_regs_struct
+{
+  unsigned int gpr[32];
+  unsigned int pc;
+  unsigned int msr;
+  unsigned int ear;
+  unsigned int esr;
+  unsigned int fsr;
+  unsigned int btr;
+  unsigned int pvr[12];
+};
+
+struct user
+{
+  struct user_regs_struct	regs;
+  int				u_fpvalid;
+  struct user_fpregs_struct	elf_fpregset_t;
+  unsigned long int		u_tsize;
+  unsigned long int		u_dsize;
+  unsigned long int		u_ssize;
+  unsigned long			start_code;
+  unsigned long			start_stack;
+  long int			signal;
+  int				reserved;
+  struct user_regs_struct*	u_ar0;
+  struct user_fpregs_struct*	u_fpstate;
+  unsigned long int		magic;
+  char				u_comm [32];
+  int				u_debugreg [8];
+};
+
+#define PAGE_SHIFT		12
+#define PAGE_SIZE		(1UL << PAGE_SHIFT)
+#define PAGE_MASK		(~(PAGE_SIZE-1))
+#define NBPG			PAGE_SIZE
+#define UPAGES			1
+#define HOST_TEXT_START_ADDR	(u.start_code)
+#define HOST_STACK_END_ADDR	(u.start_stack + u.u_ssize * NBPG)
+
+#endif	/* _SYS_USER_H */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/syscall.S b/ports/sysdeps/unix/sysv/linux/microblaze/syscall.S
new file mode 100644
index 0000000..781852f
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/syscall.S
@@ -0,0 +1,37 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+	.text
+ENTRY (syscall)
+	addk	r12,r0,r5
+	addk	r5,r0,r6
+	addk	r6,r0,r7
+	addk	r7,r0,r8
+	addk	r8,r0,r9
+	addk	r9,r0,r10
+	lwi	r10,r1,28
+	brki	r14,8
+	addk	r0,r0,r0
+	addik	r4,r0,-4095
+	cmpu	r4,r4,r3
+	bgei	r4,SYSCALL_ERROR_LABEL
+	rtsd	r15,8
+	nop
+PSEUDO_END (syscall)
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/syscalls.list b/ports/sysdeps/unix/sysv/linux/microblaze/syscalls.list
new file mode 100644
index 0000000..86fd40b
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/syscalls.list
@@ -0,0 +1,18 @@
+# File name	Caller	Syscall name	Args	Strong name	Weak names
+
+cacheflush	EXTRA	cacheflush	i:iiii	__cacheflush	cacheflush
+
+prlimit64	EXTRA	prlimit64	i:iipp	prlimit64
+fanotify_mark	EXTRA	fanotify_mark	i:iiiiis	fanotify_mark
+
+# Semaphore and shm system calls.  msgctl, shmctl, and semctl have C
+# wrappers (to set __IPC_64).
+msgget          -       msgget          i:ii    __msgget        msgget
+msgrcv          -       msgrcv          Ci:ibnii __msgrcv       msgrcv
+msgsnd          -       msgsnd          Ci:ibni __msgsnd        msgsnd
+shmat           -       shmat           i:ipi   __shmat         shmat
+shmdt           -       shmdt           i:s     __shmdt         shmdt
+shmget          -       shmget          i:iii   __shmget        shmget
+semop           -       semop           i:ipi   __semop         semop
+semtimedop      -       semtimedop      i:ipip  semtimedop
+semget          -       semget          i:iii   __semget        semget
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/sysdep.S b/ports/sysdeps/unix/sysv/linux/microblaze/sysdep.S
new file mode 100644
index 0000000..0d85efd
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sysdep.S
@@ -0,0 +1,39 @@
+/* Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+
+/* The following code is only used in the shared library when we
+   compile the reentrant version.  Otherwise each system call defines
+   each own version.  */
+
+#ifndef	PIC
+
+/* The syscall stubs jump here when they detect an error.  */
+
+#undef CALL_MCOUNT
+#define CALL_MCOUNT /* Don't insert the profiling call, it clobbers %d0.  */
+
+	.text
+ENTRY (__syscall_error)
+	rsubk	r3,r3,r0
+	rtsd	r15,8
+	addik	r3,r0,-1	/* delay slot */
+END (__syscall_error)
+#endif /* PIC */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h b/ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h
new file mode 100755
index 0000000..fbb660a
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h
@@ -0,0 +1,306 @@
+/* Copyright (C) 2000-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdeps/microblaze/sysdep.h>
+#include <sys/syscall.h>
+
+/* Defines RTLD_PRIVATE_ERRNO.  */
+#include <dl-sysdep.h>
+
+/* In order to get __set_errno() definition in INLINE_SYSCALL.  */
+#ifndef __ASSEMBLER__
+#include <errno.h>
+#endif
+
+/* For Linux we can use the system call table in the header file
+	/usr/include/asm/unistd.h
+   of the kernel.  But these symbols do not follow the SYS_* syntax
+   so we have to redefine the `SYS_ify' macro here.  */
+#undef SYS_ify
+# define SYS_ify(syscall_name)	__NR_##syscall_name
+
+#ifdef __ASSEMBLER__
+
+/* In microblaze ABI function call arguments are passed in registers
+   r5...r10. The return value is stored in r3 (or r3:r4 regiters pair).
+   Linux syscall uses the same convention with the addition that the
+   syscall number is passed in r12. To enter the kernel "brki r14,8"
+   instruction is used.
+   None of the abovementioned registers are presumed across function call
+   or syscall.
+*/
+/* Linux uses a negative return value to indicate syscall errors, unlike
+   most Unices, which use the condition codes' carry flag.
+
+   Since version 2.1 the return value of a system call might be negative
+   even if the call succeeded.  E.g., the `lseek' system call might return
+   a large offset.  Therefore we must not anymore test for < 0, but test
+   for a real error by making sure the value in %d0 is a real error
+   number.  Linus said he will make sure the no syscall returns a value
+   in -1 .. -4095 as a valid result so we can savely test with -4095.  */
+
+/* We don't want the label for the error handler to be visible in the symbol
+   table when we define it here.  */
+#ifdef PIC
+#define SYSCALL_ERROR_LABEL 0f
+#else
+#define SYSCALL_ERROR_LABEL __syscall_error
+#endif
+
+#undef PSEUDO
+#define	PSEUDO(name, syscall_name, args)		\
+  .text;						\
+  ENTRY (name)						\
+    DO_CALL (syscall_name, args);			\
+    addik r12,r0,-4095;					\
+    cmpu  r12,r12,r3;					\
+    bgei r12,SYSCALL_ERROR_LABEL;
+
+#undef PSEUDO_END
+#define PSEUDO_END(name)				\
+  SYSCALL_ERROR_HANDLER;				\
+  END (name)
+
+#undef PSEUDO_NOERRNO
+#define	PSEUDO_NOERRNO(name, syscall_name, args)	\
+  .text;						\
+  ENTRY (name)						\
+    DO_CALL (syscall_name, args);
+
+#undef PSEUDO_END_NOERRNO
+#define PSEUDO_END_NOERRNO(name)			\
+  END (name)
+
+/* The function has to return the error code.  */
+#undef	PSEUDO_ERRVAL
+#define	PSEUDO_ERRVAL(name, syscall_name, args)		\
+  .text;						\
+  ENTRY (name)						\
+    DO_CALL (syscall_name, args);			\
+
+#undef	PSEUDO_END_ERRVAL
+#define	PSEUDO_END_ERRVAL(name) \
+  END (name)
+
+#define ret_NOERRNO \
+    rtsd r15,8; addk r0,r0,r0;
+
+#define ret_ERRVAL \
+    rtsd r15,8; rsubk r3,r3,r0;
+
+#ifdef PIC
+#define SYSCALL_ERROR_LABEL_DCL 0
+# if RTLD_PRIVATE_ERRNO
+#  define SYSCALL_ERROR_HANDLER				\
+SYSCALL_ERROR_LABEL_DCL:				\
+    mfs   r12,rpc;					\
+    addik r12,r12,_GLOBAL_OFFSET_TABLE_+8;		\
+    lwi   r12,r12,rtld_errno@GOT;			\
+    rsubk r3,r3,r0;					\
+    swi	  r3,r12,0;					\
+    rtsd  r15,8;					\
+    addik r3,r0,-1;
+# else /* !RTLD_PRIVATE_ERRNO */
+/* Store (-r3) into errno through the GOT.  */
+#  if defined _LIBC_REENTRANT
+#  define SYSCALL_ERROR_HANDLER				\
+SYSCALL_ERROR_LABEL_DCL:				\
+    addik r1,r1,-16;					\
+    swi   r15,r1,0;					\
+    swi   r20,r1,8;					\
+    rsubk r3,r3,r0;					\
+    swi   r3,r1,12;					\
+    mfs   r20,rpc;					\
+    addik r20,r20,_GLOBAL_OFFSET_TABLE_+8;		\
+    brlid r15,__errno_location@PLT;			\
+    nop;						\
+    lwi   r4,r1,12;					\
+    swi   r4,r3,0;					\
+    lwi   r20,r1,8;					\
+    lwi   r15,r1,0;					\
+    addik r1,r1,16;					\
+    rtsd  r15,8;					\
+    addik r3,r0,-1;
+#  else /* !_LIBC_REENTRANT */
+#  define SYSCALL_ERROR_HANDLER				\
+SYSCALL_ERROR_LABEL_DCL:				\
+    mfs   r12,rpc;					\
+    addik r12,r12,_GLOBAL_OFFSET_TABLE_+8;		\
+    lwi   r12,r12,errno@GOT;				\
+    rsubk r3,r3,r0;					\
+    swi	  r3,r12,0;					\
+    rtsd  r15,8;					\
+    addik r3,r0,-1;
+#  endif /* _LIBC_REENTRANT */
+# endif /* RTLD_PRIVATE_ERRNO */
+#else
+# define SYSCALL_ERROR_HANDLER	/* Nothing here; code in sysdep.S is used.  */
+#endif /* PIC */
+
+#define DO_CALL(syscall_name, args)			      		      \
+    addik r12,r0,SYS_ify (syscall_name);				      \
+    brki  r14,8;							      \
+    addk  r0,r0,r0;
+
+#else /* not __ASSEMBLER__ */
+
+/* Define a macro which expands into the inline wrapper code for a system
+   call.  */
+#undef INLINE_SYSCALL
+#define INLINE_SYSCALL(name, nr, args...)				\
+({	INTERNAL_SYSCALL_DECL(err);  					\
+	unsigned long resultvar = INTERNAL_SYSCALL(name, err, nr, args);\
+	if (INTERNAL_SYSCALL_ERROR_P (resultvar, err))			\
+       {								\
+	    __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, err));	\
+	    resultvar = (unsigned long) -1;				\
+       }								\
+	(long) resultvar;						\
+})
+
+#undef INTERNAL_SYSCALL_DECL
+#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
+
+/* Define a macro which expands inline into the wrapper code for a system
+   call.  This use is for internal calls that do not need to handle errors
+   normally.  It will never touch errno.  This returns just what the kernel
+   gave back.  */
+#undef INTERNAL_SYSCALL
+#define INTERNAL_SYSCALL(name, err, nr, args...)	\
+  inline_syscall##nr(SYS_ify(name), args)
+
+#undef INTERNAL_SYSCALL_NCS
+#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
+  inline_syscall##nr(name, args)
+
+#undef INTERNAL_SYSCALL_ERROR_P
+#define INTERNAL_SYSCALL_ERROR_P(val, err)		\
+  ((unsigned int) (val) >= -4095U)
+
+#undef INTERNAL_SYSCALL_ERRNO
+#define INTERNAL_SYSCALL_ERRNO(val, err)	(-(val))
+
+#define SYSCALL_CLOBBERS_6 "r11", "r4", "memory"
+#define SYSCALL_CLOBBERS_5 "r10", SYSCALL_CLOBBERS_6
+#define SYSCALL_CLOBBERS_4 "r9", SYSCALL_CLOBBERS_5
+#define SYSCALL_CLOBBERS_3 "r8", SYSCALL_CLOBBERS_4
+#define SYSCALL_CLOBBERS_2 "r7", SYSCALL_CLOBBERS_3
+#define SYSCALL_CLOBBERS_1 "r6", SYSCALL_CLOBBERS_2
+#define SYSCALL_CLOBBERS_0 "r5", SYSCALL_CLOBBERS_1
+
+#define inline_syscall0(name,dummy)			\
+  ({ \
+    register long ret __asm__("r3");			\
+    register long __r12 __asm__("r12") = name;	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r12)					\
+      : SYSCALL_CLOBBERS_0 ); ret;			\
+  })
+
+#define inline_syscall1(name,arg1)			\
+  ({ \
+    register long ret __asm__("r3");			\
+    register long __r12 __asm__("r12") = name;	\
+    register long __r5 __asm__("r5") = (long)(arg1);	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r12)				\
+      : SYSCALL_CLOBBERS_1 ); ret;			\
+  })
+
+#define inline_syscall2(name,arg1,arg2)		\
+  ({ \
+    register long ret __asm__("r3");			\
+    register long __r12 __asm__("r12") = name;	\
+    register long __r5 __asm__("r5") = (long)(arg1);	\
+    register long __r6 __asm__("r6") = (long)(arg2);	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r12)		\
+      : SYSCALL_CLOBBERS_2 ); ret;			\
+  })
+
+
+#define inline_syscall3(name,arg1,arg2,arg3)		\
+  ({ \
+    register long ret __asm__("r3");			\
+    register long __r12 __asm__("r12") = name;	\
+    register long __r5 __asm__("r5") = (long)(arg1);	\
+    register long __r6 __asm__("r6") = (long)(arg2);	\
+    register long __r7 __asm__("r7") = (long)(arg3);	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r12)	\
+      : SYSCALL_CLOBBERS_3 ); ret;			\
+  })
+
+
+#define inline_syscall4(name,arg1,arg2,arg3,arg4)	\
+  ({ \
+    register long ret __asm__("r3");			\
+    register long __r12 __asm__("r12") = name;	\
+    register long __r5 __asm__("r5") = (long)(arg1);	\
+    register long __r6 __asm__("r6") = (long)(arg2);	\
+    register long __r7 __asm__("r7") = (long)(arg3);	\
+    register long __r8 __asm__("r8") = (long)(arg4);	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r8),"r"(__r12)	\
+      : SYSCALL_CLOBBERS_4 ); ret;			\
+  })
+
+
+#define inline_syscall5(name,arg1,arg2,arg3,arg4,arg5)	\
+  ({ \
+    register long ret __asm__("r3");			\
+    register long __r12 __asm__("r12") = name;	\
+    register long __r5 __asm__("r5") = (long)(arg1);	\
+    register long __r6 __asm__("r6") = (long)(arg2);	\
+    register long __r7 __asm__("r7") = (long)(arg3);	\
+    register long __r8 __asm__("r8") = (long)(arg4);	\
+    register long __r9 __asm__("r9") = (long)(arg5);	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r8),"r"(__r9), "r"(__r12)	\
+      : SYSCALL_CLOBBERS_5 ); ret;			\
+  })
+
+
+#define inline_syscall6(name,arg1,arg2,arg3,arg4,arg5,arg6)	\
+  ({ \
+    register long ret __asm__("r3");			\
+    register long __r12 __asm__("r12") = name;	\
+    register long __r5 __asm__("r5") = (long)(arg1);	\
+    register long __r6 __asm__("r6") = (long)(arg2);	\
+    register long __r7 __asm__("r7") = (long)(arg3);	\
+    register long __r8 __asm__("r8") = (long)(arg4);	\
+    register long __r9 __asm__("r9") = (long)(arg5);	\
+    register long __r10 __asm__("r10") = (long)(arg6);	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r8),"r"(__r9), "r"(__r10), "r"(__r12)	\
+      : SYSCALL_CLOBBERS_6 ); ret;			\
+  })
+
+
+/* Pointer mangling is not yet supported for Microblaze.  */
+#define PTR_MANGLE(var) (void) (var)
+#define PTR_DEMANGLE(var) (void) (var)
+
+#endif /* not __ASSEMBLER__ */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/xstat.c b/ports/sysdeps/unix/sysv/linux/microblaze/xstat.c
new file mode 100644
index 0000000..e9869f5
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/xstat.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/xstat.c>
-- 
1.7.0.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 2/2] Add MicroBlaze Port
  2013-03-30 14:31 ` [PATCH v2 2/2] Add MicroBlaze Port David Holsgrove
@ 2013-04-02 23:49   ` Joseph S. Myers
  2013-04-09  8:20     ` David Holsgrove
  0 siblings, 1 reply; 14+ messages in thread
From: Joseph S. Myers @ 2013-04-02 23:49 UTC (permalink / raw)
  To: David Holsgrove
  Cc: libc-ports, john.williams, edgar.iglesias, vinod.kathail,
	vidhumouli.hunsigida, nagaraju.mekala, tom.shui

This patch is a lot closer to being ready for inclusion than the previous 
one, but some further changes are still needed, including some I mentioned 
in my previous review 
<http://sourceware.org/ml/libc-ports/2012-11/msg00139.html> which you 
might wish to check again (and respond individually to any points where 
you think the change I indicate is wrong).

(The .abilist files and libm-test-ulps will of course need routine updates 
in the next version to account for recent libc changes.)

On Sun, 31 Mar 2013, David Holsgrove wrote:

> +	* ChangeLog.microblaze: New file

The ChangeLog itself doesn't get mentioned in the ChangeLog entries.

> +	* sysdeps/microblaze/Implies: New file

"." at end of each ChangeLog entry.

> +$(objpfx)libm.so: $(elfobjdir)/ld.so
> +$(objpfx)libcrypt.so: $(elfobjdir)/ld.so
> +$(objpfx)libresolv.so: $(elfobjdir)/ld.so
> +$(objpfx)libnss_dns.so: $(elfobjdir)/ld.so
> +$(objpfx)libnss_files.so: $(elfobjdir)/ld.so
> +$(objpfx)libnss_db.so: $(elfobjdir)/ld.so
> +$(objpfx)libnss_nis.so: $(elfobjdir)/ld.so
> +$(objpfx)libnss_nisplus.so: $(elfobjdir)/ld.so
> +$(objpfx)libnss_hesiod.so: $(elfobjdir)/ld.so
> +$(objpfx)libnss_compat.so: $(elfobjdir)/ld.so
> +$(objpfx)libanl.so: $(elfobjdir)/ld.so
> +$(objpfx)libnsl.so: $(elfobjdir)/ld.so
> +$(objpfx)libcidn.so: $(elfobjdir)/ld.so
> +$(objpfx)libutil.so: $(elfobjdir)/ld.so

As noted, work out with libc-alpha how not to need this in the port.

> diff --git a/ports/sysdeps/microblaze/backtrace.c b/ports/sysdeps/microblaze/backtrace.c

My previous comment about needing reformatting of this file and 
backtrace_linux.c in accordance with the GNU Coding Standards still 
applies.

> +/* Microblaze does not have byte and halfword forms of load and reserve and
> +   store conditional. So for microblaze we stub out the 8- and 16-bit forms.  */

Previously made point about two spaces after "." in comments still 
applies.

> +/* MicroBlaze supports only round-to-nearest.  The software
> +   floating-point support also acts this way.  */
> +enum
> +  {
> +    __FE_UNDEFINED = 0,
> +
> +    FE_TONEAREST =
> +#define FE_TONEAREST	0x1
> +      FE_TONEAREST,
> +  };
> +
> +/* Define bits representing the exception.  We use the bit positions
> +   of the appropriate bits in the FPU control word.  */
> +
> +#ifndef FE_INVALID
> +# define FE_INVALID   __FE_UNDEFINED
> +#endif

There's something confused about the types here.  You've defined 
__FE_UNDEFINED as an invalid *rounding mode*, so it's wrong to be using it 
to define *exceptions*.

If MicroBlaze does not support an exception, the header must not define 
the corresponding macro at all.  If it doesn't support any exceptions, 
define FE_ALL_EXCEPT to 0 (not __FE_UNDEFINED) while not defining 
individual exception macros.  If this causes issues with code expecting 
some such macros to be defined, follow what Tile's math_private.h does to 
avoid such issues.

> diff --git a/ports/sysdeps/microblaze/configure.in b/ports/sysdeps/microblaze/configure.in
> new file mode 100644
> index 0000000..bb14721
> --- /dev/null
> +++ b/ports/sysdeps/microblaze/configure.in
> @@ -0,0 +1,8 @@
> +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
> +# Local configure fragment for sysdeps/microblaze/elf.
> +
> +dnl It is always possible to access static and hidden symbols in an
> +dnl position independent way.
> +dnl NOTE: This feature was added by the GCC TLS patches.  We should test for
> +dnl it.  Until we do, don't define it.
> +#AC_DEFINE(PI_STATIC_AND_HIDDEN)

Sounds like a cargo-culted comment to me.  You're assuming TLS support in 
GCC.  So define or not this macro in whatever way is correct for the 
minimum required GCC version.  A commented out definition like this might 
make sense if there is a feature yet to be added to GCC but intended to be 
added, but not normally.

> diff --git a/ports/sysdeps/microblaze/crti.S b/ports/sysdeps/microblaze/crti.S
> new file mode 100644
> index 0000000..bc3ac1a
> --- /dev/null
> +++ b/ports/sysdeps/microblaze/crti.S
> @@ -0,0 +1,72 @@
> +/* Special .init and .fini section support for MicroBlaze.
> +   Copyright (C) 1995-2013 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
> +
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.

Plus the exception wording used on other versions of crti.S (and, 
generally, files that get statically linked into user programs even when 
linking dynamically with most of glibc).

> diff --git a/ports/sysdeps/microblaze/crtn.S b/ports/sysdeps/microblaze/crtn.S

Likewise.

> +    PUT_REL_64(reloc_addr, map->l_addr + reloc->r_addend);

Generally, for calls to functions and function-like macros, there should 
be a space before the open parenthesis.  This is just one example where 
it's missing; please review the whole patch for it.

> diff --git a/ports/sysdeps/microblaze/start.S b/ports/sysdeps/microblaze/start.S

License exception notice.

> +#define MICROBLAZE_HIDDEN_DEF_REAL(x) \
> +hidden_def(x)
> +
> +#define MICROBLAZE_HIDDEN_DEF(x) MICROBLAZE_HIDDEN_DEF_REAL(C_SYMBOL_NAME(x))

Why do you need these?  What's wrong with just using hidden_def?

> diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.c b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.c

What are the differences from the generic 
nptl/sysdeps/unix/sysv/linux/lowlevellock.c, and have you made sure there 
is a genuine MicroBlaze-specific purpose to those differences?  If there 
is, include comments by each difference explaining its rationale.  We'd 
like to merge the different lowlevellock.c versions as far as possible....

> +#ifdef PIC
> +#define SYSCALL_ERROR_LABEL 0f
> +#else
> +#define SYSCALL_ERROR_LABEL __syscall_error
> +#endif

Space after "#" inside #if to indicate the level of #if nesting, so 
"# define" here.  Check for other instances in the patch as well.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 1/2] Add MicroBlaze support to elf/elf.h
  2013-03-30 14:30 ` [PATCH v2 1/2] Add MicroBlaze support to elf/elf.h David Holsgrove
@ 2013-04-08 22:15   ` Roland McGrath
  2013-04-09  7:41     ` David Holsgrove
  0 siblings, 1 reply; 14+ messages in thread
From: Roland McGrath @ 2013-04-08 22:15 UTC (permalink / raw)
  To: David Holsgrove
  Cc: libc-alpha, libc-ports, joseph, john.williams, edgar.iglesias,
	vinod.kathail, vidhumouli.hunsigida, nagaraju.mekala, tom.shui

> +#define EM_MICROBLAZE	189		/* Xilinx MicroBlaze 32-bit RISC soft processor core */

Just "Xilinx MicroBlaze" is enough here, and keeps the line from getting
too long.

If all the R_MICROBLAZE_* macros match the names and values in trunk
binutils (and those in your psABI document), then this change is OK
with the comment change above.


Thanks,
Roland

^ permalink raw reply	[flat|nested] 14+ messages in thread

* RE: [PATCH v2 1/2] Add MicroBlaze support to elf/elf.h
  2013-04-08 22:15   ` Roland McGrath
@ 2013-04-09  7:41     ` David Holsgrove
  2013-04-11 20:25       ` Roland McGrath
  0 siblings, 1 reply; 14+ messages in thread
From: David Holsgrove @ 2013-04-09  7:41 UTC (permalink / raw)
  To: Roland McGrath
  Cc: libc-alpha, libc-ports, joseph, John Williams, Edgar Iglesias,
	Vinod Kathail, Vidhumouli Hunsigida, Nagaraju Mekala, Tom Shui

[-- Attachment #1: Type: text/plain, Size: 1001 bytes --]


> -----Original Message-----
> From: Roland McGrath [mailto:roland@hack.frob.com]
> Sent: Tuesday, 9 April 2013 8:15 am
> To: David Holsgrove
> Cc: libc-alpha@sourceware.org; libc-ports@sourceware.org;
> joseph@codesourcery.com; John Williams; Edgar Iglesias; Vinod Kathail;
> Vidhumouli Hunsigida; Nagaraju Mekala; Tom Shui
> Subject: Re: [PATCH v2 1/2] Add MicroBlaze support to elf/elf.h
> Importance: High
> 
> > +#define EM_MICROBLAZE	189		/* Xilinx MicroBlaze 32-bit RISC
> soft processor core */
> 
> Just "Xilinx MicroBlaze" is enough here, and keeps the line from getting
> too long.
> 
> If all the R_MICROBLAZE_* macros match the names and values in trunk
> binutils (and those in your psABI document), then this change is OK
> with the comment change above.

Thanks Roland, I've updated the comment as suggested.

The relocation macro names and values for MicroBlaze match those
I submitted to trunk binutils.

thanks,
David

> 
> 
> Thanks,
> Roland




[-- Attachment #2: 0001-Adding-MicroBlaze-support-to-elf-elf h.patch --]
[-- Type: application/octet-stream, Size: 2933 bytes --]

From 6af955d64006d062e0432f5f83523dff546eb921 Mon Sep 17 00:00:00 2001
From: David Holsgrove <david.holsgrove@petalogix.com>
Date: Wed, 4 Jan 2012 13:56:48 +1000
Subject: [PATCH 1/2] Adding MicroBlaze support to elf/elf.h

Signed-off-by: David Holsgrove <david.holsgrove@petalogix.com>

---

 elf/elf.h |   32 ++++++++++++++++++++++++++++++++
 1 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/elf/elf.h b/elf/elf.h
index d096a97..4ad4f39 100644
--- a/elf/elf.h
+++ b/elf/elf.h
@@ -251,6 +251,7 @@ typedef struct
 #define EM_XTENSA	94		/* Tensilica Xtensa Architecture */
 #define EM_AARCH64	183		/* ARM AARCH64 */
 #define EM_TILEPRO	188		/* Tilera TILEPro */
+#define EM_MICROBLAZE	189		/* Xilinx MicroBlaze */
 #define EM_TILEGX	191		/* Tilera TILE-Gx */
 #define EM_NUM		192
 
@@ -2955,6 +2956,37 @@ typedef Elf32_Addr Elf32_Conflict;
 #define R_M32R_GOTOFF_LO	64	/* Low 16 bit offset to GOT */
 #define R_M32R_NUM		256	/* Keep this the last entry. */
 
+/* MicroBlaze relocations */
+#define R_MICROBLAZE_NONE		0	/* No reloc. */
+#define R_MICROBLAZE_32 		1	/* Direct 32 bit. */
+#define R_MICROBLAZE_32_PCREL		2	/* PC relative 32 bit. */
+#define R_MICROBLAZE_64_PCREL		3	/* PC relative 64 bit. */
+#define R_MICROBLAZE_32_PCREL_LO	4	/* Low 16 bits of PCREL32. */
+#define R_MICROBLAZE_64 		5	/* Direct 64 bit. */
+#define R_MICROBLAZE_32_LO		6	/* Low 16 bit. */
+#define R_MICROBLAZE_SRO32		7	/* Read-only small data area. */
+#define R_MICROBLAZE_SRW32		8	/* Read-write small data area. */
+#define R_MICROBLAZE_64_NONE		9	/* No reloc. */
+#define R_MICROBLAZE_32_SYM_OP_SYM	10	/* Symbol Op Symbol relocation. */
+#define R_MICROBLAZE_GNU_VTINHERIT	11	/* GNU C++ vtable hierarchy. */
+#define R_MICROBLAZE_GNU_VTENTRY	12	/* GNU C++ vtable member usage. */
+#define R_MICROBLAZE_GOTPC_64		13	/* PC-relative GOT offset.  */
+#define R_MICROBLAZE_GOT_64		14	/* GOT entry offset.  */
+#define R_MICROBLAZE_PLT_64		15	/* PLT offset (PC-relative).  */
+#define R_MICROBLAZE_REL		16	/* Adjust by program base.  */
+#define R_MICROBLAZE_JUMP_SLOT		17	/* Create PLT entry.  */
+#define R_MICROBLAZE_GLOB_DAT		18	/* Create GOT entry.  */
+#define R_MICROBLAZE_GOTOFF_64		19	/* 64 bit offset to GOT. */
+#define R_MICROBLAZE_GOTOFF_32		20	/* 32 bit offset to GOT. */
+#define R_MICROBLAZE_COPY		21	/* Runtime copy.  */
+#define R_MICROBLAZE_TLS		22	/* TLS Reloc. */
+#define R_MICROBLAZE_TLSGD		23	/* TLS General Dynamic. */
+#define R_MICROBLAZE_TLSLD		24	/* TLS Local Dynamic. */
+#define R_MICROBLAZE_TLSDTPMOD32	25	/* TLS Module ID. */
+#define R_MICROBLAZE_TLSDTPREL32	26	/* TLS Offset Within TLS Block. */
+#define R_MICROBLAZE_TLSDTPREL64	27	/* TLS Offset Within TLS Block. */
+#define R_MICROBLAZE_TLSGOTTPREL32	28	/* TLS Offset From Thread Pointer. */
+#define R_MICROBLAZE_TLSTPREL32 	29	/* TLS Offset From Thread Pointer. */
 
 /* TILEPro relocations.  */
 #define R_TILEPRO_NONE		0	/* No reloc */
-- 
1.7.0.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

* RE: [PATCH v2 2/2] Add MicroBlaze Port
  2013-04-02 23:49   ` Joseph S. Myers
@ 2013-04-09  8:20     ` David Holsgrove
  2013-04-09  8:32       ` Andreas Schwab
  0 siblings, 1 reply; 14+ messages in thread
From: David Holsgrove @ 2013-04-09  8:20 UTC (permalink / raw)
  To: libc-ports
  Cc: Roland McGrath, Joseph Myers, John Williams, Edgar Iglesias,
	Vinod Kathail, Vidhumouli Hunsigida, Nagaraju Mekala, Tom Shui

[-- Attachment #1: Type: text/plain, Size: 8775 bytes --]

> -----Original Message-----
> From: Joseph Myers [mailto:joseph@codesourcery.com]
> Sent: Wednesday, 3 April 2013 9:50 am
> To: David Holsgrove
> Cc: libc-ports@sourceware.org; John Williams; Edgar Iglesias; Vinod Kathail;
> Vidhumouli Hunsigida; Nagaraju Mekala; Tom Shui
> Subject: Re: [PATCH v2 2/2] Add MicroBlaze Port
> 
> This patch is a lot closer to being ready for inclusion than the previous
> one, but some further changes are still needed, including some I mentioned
> in my previous review
> <http://sourceware.org/ml/libc-ports/2012-11/msg00139.html> which you
> might wish to check again (and respond individually to any points where
> you think the change I indicate is wrong).
> 

Hi Joseph, and thanks again for the review.
Please see my replies inline below, and I've attached an updated patch.

> On Sun, 31 Mar 2013, David Holsgrove wrote:
> 
> > +	* ChangeLog.microblaze: New file
> 
> The ChangeLog itself doesn't get mentioned in the ChangeLog entries.
> 
> > +	* sysdeps/microblaze/Implies: New file
> 
> "." at end of each ChangeLog entry.
> 

Fixed.

> > +$(objpfx)libm.so: $(elfobjdir)/ld.so
> > +$(objpfx)libcrypt.so: $(elfobjdir)/ld.so
> > +$(objpfx)libresolv.so: $(elfobjdir)/ld.so
> > +$(objpfx)libnss_dns.so: $(elfobjdir)/ld.so
> > +$(objpfx)libnss_files.so: $(elfobjdir)/ld.so
> > +$(objpfx)libnss_db.so: $(elfobjdir)/ld.so
> > +$(objpfx)libnss_nis.so: $(elfobjdir)/ld.so
> > +$(objpfx)libnss_nisplus.so: $(elfobjdir)/ld.so
> > +$(objpfx)libnss_hesiod.so: $(elfobjdir)/ld.so
> > +$(objpfx)libnss_compat.so: $(elfobjdir)/ld.so
> > +$(objpfx)libanl.so: $(elfobjdir)/ld.so
> > +$(objpfx)libnsl.so: $(elfobjdir)/ld.so
> > +$(objpfx)libcidn.so: $(elfobjdir)/ld.so
> > +$(objpfx)libutil.so: $(elfobjdir)/ld.so
> 
> As noted, work out with libc-alpha how not to need this in the port.

Discussion ongoing, if possible I would like to separate this architecturally
independent issue from the initial port submission, and come back to address this
when we have a solution for all ports.

> 
> > diff --git a/ports/sysdeps/microblaze/backtrace.c
> b/ports/sysdeps/microblaze/backtrace.c
> 
> My previous comment about needing reformatting of this file and
> backtrace_linux.c in accordance with the GNU Coding Standards still
> applies.
> 

backtrace / backtrace_linux.c reformatted.

> > +/* Microblaze does not have byte and halfword forms of load and reserve and
> > +   store conditional. So for microblaze we stub out the 8- and 16-bit forms.  */
> 
> Previously made point about two spaces after "." in comments still
> applies.

I've grep'ed / sed'ed my way to updating all relevant comments in the patch.
Some exceptions are where we're commenting about the end of an #ifdef with just
the definition as the comment, but this seems in line with other ports practice.

> 
> > +/* MicroBlaze supports only round-to-nearest.  The software
> > +   floating-point support also acts this way.  */
> > +enum
> > +  {
> > +    __FE_UNDEFINED = 0,
> > +
> > +    FE_TONEAREST =
> > +#define FE_TONEAREST	0x1
> > +      FE_TONEAREST,
> > +  };
> > +
> > +/* Define bits representing the exception.  We use the bit positions
> > +   of the appropriate bits in the FPU control word.  */
> > +
> > +#ifndef FE_INVALID
> > +# define FE_INVALID   __FE_UNDEFINED
> > +#endif
> 
> There's something confused about the types here.  You've defined
> __FE_UNDEFINED as an invalid *rounding mode*, so it's wrong to be using it
> to define *exceptions*.
> 
> If MicroBlaze does not support an exception, the header must not define
> the corresponding macro at all.  If it doesn't support any exceptions,
> define FE_ALL_EXCEPT to 0 (not __FE_UNDEFINED) while not defining
> individual exception macros.  If this causes issues with code expecting
> some such macros to be defined, follow what Tile's math_private.h does to
> avoid such issues.
> 

Updated fenv.h to drop defining the FE_* macros - following Tile's math_private.h
allowed me to resolve the build errors I originally had with math code expecting
these macros to be defined.

> > diff --git a/ports/sysdeps/microblaze/configure.in
> b/ports/sysdeps/microblaze/configure.in
> > new file mode 100644
> > index 0000000..bb14721
> > --- /dev/null
> > +++ b/ports/sysdeps/microblaze/configure.in
> > @@ -0,0 +1,8 @@
> > +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
> > +# Local configure fragment for sysdeps/microblaze/elf.
> > +
> > +dnl It is always possible to access static and hidden symbols in an
> > +dnl position independent way.
> > +dnl NOTE: This feature was added by the GCC TLS patches.  We should test for
> > +dnl it.  Until we do, don't define it.
> > +#AC_DEFINE(PI_STATIC_AND_HIDDEN)
> 
> Sounds like a cargo-culted comment to me.  You're assuming TLS support in
> GCC.  So define or not this macro in whatever way is correct for the
> minimum required GCC version.  A commented out definition like this might
> make sense if there is a feature yet to be added to GCC but intended to be
> added, but not normally.
> 

Removed ports/sysdeps/microblaze/configure{,.in} - they were carry over from
initial copy of existing port.

> > diff --git a/ports/sysdeps/microblaze/crti.S b/ports/sysdeps/microblaze/crti.S
> > new file mode 100644
> > index 0000000..bc3ac1a
> > --- /dev/null
> > +++ b/ports/sysdeps/microblaze/crti.S
> > @@ -0,0 +1,72 @@
> > +/* Special .init and .fini section support for MicroBlaze.
> > +   Copyright (C) 1995-2013 Free Software Foundation, Inc.
> > +   This file is part of the GNU C Library.
> > +
> > +   The GNU C Library is free software; you can redistribute it and/or
> > +   modify it under the terms of the GNU Lesser General Public
> > +   License as published by the Free Software Foundation; either
> > +   version 2.1 of the License, or (at your option) any later version.
> 
> Plus the exception wording used on other versions of crti.S (and,
> generally, files that get statically linked into user programs even when
> linking dynamically with most of glibc).
> 
> > diff --git a/ports/sysdeps/microblaze/crtn.S b/ports/sysdeps/microblaze/crtn.S
> 
> Likewise.
> 

Updated licenses to include exception wording for crti.S and others in line with
existing ports usage.

> > +    PUT_REL_64(reloc_addr, map->l_addr + reloc->r_addend);
> 
> Generally, for calls to functions and function-like macros, there should
> be a space before the open parenthesis.  This is just one example where
> it's missing; please review the whole patch for it.
> 

Corrected spacing between parentheses in the use of function like macros but I've
matched the usage in existing ports where relevant to assist in future comparisons.

> > diff --git a/ports/sysdeps/microblaze/start.S
> b/ports/sysdeps/microblaze/start.S
> 
> License exception notice.
> 
> > +#define MICROBLAZE_HIDDEN_DEF_REAL(x) \
> > +hidden_def(x)
> > +
> > +#define MICROBLAZE_HIDDEN_DEF(x)
> MICROBLAZE_HIDDEN_DEF_REAL(C_SYMBOL_NAME(x))
> 
> Why do you need these?  What's wrong with just using hidden_def?
> 

Removed unnecessary MICROBLAZE_HIDDEN_DEF redefinition of hidden_def.

> > diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.c
> b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.c
> 
> What are the differences from the generic
> nptl/sysdeps/unix/sysv/linux/lowlevellock.c, and have you made sure there
> is a genuine MicroBlaze-specific purpose to those differences?  If there
> is, include comments by each difference explaining its rationale.  We'd
> like to merge the different lowlevellock.c versions as far as possible....
> 

Reverted to generic lowlevellock.c - differences between previous MicroBlaze
version and generic due to divergence since original MicroBlaze port was
created, and are not relevant today.

> > +#ifdef PIC
> > +#define SYSCALL_ERROR_LABEL 0f
> > +#else
> > +#define SYSCALL_ERROR_LABEL __syscall_error
> > +#endif
> 
> Space after "#" inside #if to indicate the level of #if nesting, so
> "# define" here.  Check for other instances in the patch as well.
> 

Inserted spaces where appropriate in #ifdefs to highlight nesting.

The instances where we had been pointing to an i386 file which comments
"Consider moving to syscalls.list" have been added to the syscalls.list or fall on
the generic version.

With these changes, I believe I've addressed all comments from your first review.
Please let me know if you have any other recommendations, and thanks again for
the help and reviews thus far.

thanks again,
David

> --
> Joseph S. Myers
> joseph@codesourcery.com




[-- Attachment #2: 0002-MicroBlaze-Port.patch --]
[-- Type: application/octet-stream, Size: 313634 bytes --]

From f1f713658f9743cbeb00541a1a1f6c9dcdfb147f Mon Sep 17 00:00:00 2001
From: David Holsgrove <david.holsgrove@petalogix.com>
Date: Tue, 10 Jan 2012 15:38:42 +1000
Subject: [PATCH 2/2] MicroBlaze Port

Signed-off-by: David Holsgrove <david.holsgrove@petalogix.com>
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
---
 ports/ChangeLog.microblaze                         |  101 +
 ports/sysdeps/microblaze/Implies                   |    4 +
 ports/sysdeps/microblaze/Makefile                  |   26 +
 ports/sysdeps/microblaze/__longjmp.S               |   55 +
 ports/sysdeps/microblaze/_mcount.S                 |   91 +
 ports/sysdeps/microblaze/abort-instr.h             |    2 +
 ports/sysdeps/microblaze/asm-syntax.h              |   24 +
 ports/sysdeps/microblaze/backtrace.c               |  138 ++
 ports/sysdeps/microblaze/backtrace_linux.c         |   59 +
 ports/sysdeps/microblaze/bits/atomic.h             |  269 +++
 ports/sysdeps/microblaze/bits/endian.h             |   30 +
 ports/sysdeps/microblaze/bits/fenv.h               |   42 +
 ports/sysdeps/microblaze/bits/link.h               |   55 +
 ports/sysdeps/microblaze/bits/setjmp.h             |   37 +
 ports/sysdeps/microblaze/bsd-_setjmp.S             |   22 +
 ports/sysdeps/microblaze/bsd-setjmp.S              |   22 +
 ports/sysdeps/microblaze/crti.S                    |   89 +
 ports/sysdeps/microblaze/crtn.S                    |   52 +
 ports/sysdeps/microblaze/dl-machine.h              |  302 +++
 ports/sysdeps/microblaze/dl-tls.h                  |   29 +
 ports/sysdeps/microblaze/dl-trampoline.S           |  109 +
 ports/sysdeps/microblaze/fegetround.c              |   24 +
 ports/sysdeps/microblaze/fesetround.c              |   25 +
 ports/sysdeps/microblaze/gccframe.h                |   21 +
 ports/sysdeps/microblaze/jmpbuf-unwind.h           |   46 +
 ports/sysdeps/microblaze/ldsodefs.h                |   41 +
 ports/sysdeps/microblaze/libc-tls.c                |   32 +
 ports/sysdeps/microblaze/libm-test-ulps            | 1728 ++++++++++++++++
 ports/sysdeps/microblaze/machine-gmon.h            |   30 +
 ports/sysdeps/microblaze/math_private.h            |   33 +
 ports/sysdeps/microblaze/memusage.h                |   21 +
 ports/sysdeps/microblaze/nptl/Makefile             |   21 +
 ports/sysdeps/microblaze/nptl/pthread_spin_lock.c  |   24 +
 ports/sysdeps/microblaze/nptl/pthreaddef.h         |   41 +
 ports/sysdeps/microblaze/nptl/tcb-offsets.sym      |   11 +
 ports/sysdeps/microblaze/nptl/tls.h                |  155 ++
 ports/sysdeps/microblaze/preconfigure              |    3 +
 ports/sysdeps/microblaze/setjmp.S                  |   75 +
 ports/sysdeps/microblaze/shlib-versions            |    1 +
 ports/sysdeps/microblaze/sotruss-lib.c             |   49 +
 ports/sysdeps/microblaze/stackinfo.h               |   34 +
 ports/sysdeps/microblaze/start.S                   |   84 +
 ports/sysdeps/microblaze/sysdep.h                  |   86 +
 ports/sysdeps/microblaze/tls-macros.h              |   44 +
 ports/sysdeps/microblaze/tst-audit.h               |   25 +
 ports/sysdeps/unix/sysv/linux/microblaze/Makefile  |    3 +
 ports/sysdeps/unix/sysv/linux/microblaze/Versions  |    5 +
 .../unix/sysv/linux/microblaze/____longjmp_chk.S   |   29 +
 .../unix/sysv/linux/microblaze/bits/fcntl.h        |   86 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/mman.h |   42 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/stat.h |  203 ++
 ports/sysdeps/unix/sysv/linux/microblaze/brk.c     |   44 +
 ports/sysdeps/unix/sysv/linux/microblaze/clone.S   |   70 +
 ports/sysdeps/unix/sysv/linux/microblaze/configure |    4 +
 .../unix/sysv/linux/microblaze/configure.in        |    4 +
 ports/sysdeps/unix/sysv/linux/microblaze/fcntl.c   |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/fxstat.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/fxstatat.c  |    1 +
 .../unix/sysv/linux/microblaze/getsysstats.c       |   35 +
 .../unix/sysv/linux/microblaze/kernel-features.h   |   30 +
 .../unix/sysv/linux/microblaze/kernel_stat.h       |   49 +
 ports/sysdeps/unix/sysv/linux/microblaze/lxstat.c  |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/mmap.S    |   50 +
 ports/sysdeps/unix/sysv/linux/microblaze/msgctl.c  |    1 +
 .../sysv/linux/microblaze/nptl/bits/pthreadtypes.h |  185 ++
 .../sysv/linux/microblaze/nptl/bits/semaphore.h    |   35 +
 .../unix/sysv/linux/microblaze/nptl/c++-types.data |   67 +
 .../unix/sysv/linux/microblaze/nptl/createthread.c |   23 +
 .../sysdeps/unix/sysv/linux/microblaze/nptl/fork.c |   29 +
 .../unix/sysv/linux/microblaze/nptl/ld.abilist     |   12 +
 .../linux/microblaze/nptl/libBrokenLocale.abilist  |    3 +
 .../unix/sysv/linux/microblaze/nptl/libanl.abilist |    6 +
 .../unix/sysv/linux/microblaze/nptl/libc.abilist   | 2082 ++++++++++++++++++++
 .../sysv/linux/microblaze/nptl/libcrypt.abilist    |    9 +
 .../unix/sysv/linux/microblaze/nptl/libdl.abilist  |   11 +
 .../unix/sysv/linux/microblaze/nptl/libm.abilist   |  370 ++++
 .../unix/sysv/linux/microblaze/nptl/libnsl.abilist |  123 ++
 .../sysv/linux/microblaze/nptl/libpthread.abilist  |  224 +++
 .../sysv/linux/microblaze/nptl/libresolv.abilist   |   93 +
 .../unix/sysv/linux/microblaze/nptl/librt.abilist  |   42 +
 .../linux/microblaze/nptl/libthread_db.abilist     |   42 +
 .../sysv/linux/microblaze/nptl/libutil.abilist     |    8 +
 .../unix/sysv/linux/microblaze/nptl/localplt.data  |   11 +
 .../unix/sysv/linux/microblaze/nptl/lowlevellock.h |  325 +++
 .../unix/sysv/linux/microblaze/nptl/pt-vfork.S     |   21 +
 .../unix/sysv/linux/microblaze/nptl/pthread_once.c |   89 +
 .../unix/sysv/linux/microblaze/nptl/vfork.S        |   46 +
 .../unix/sysv/linux/microblaze/profil-counter.h    |   20 +
 ports/sysdeps/unix/sysv/linux/microblaze/semctl.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setgroups.c |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c  |    1 +
 .../unix/sysv/linux/microblaze/sigcontextinfo.h    |   25 +
 ports/sysdeps/unix/sysv/linux/microblaze/socket.S  |  126 ++
 .../unix/sysv/linux/microblaze/sys/procfs.h        |  123 ++
 .../sysdeps/unix/sysv/linux/microblaze/sys/user.h  |   77 +
 ports/sysdeps/unix/sysv/linux/microblaze/syscall.S |   37 +
 .../unix/sysv/linux/microblaze/syscalls.list       |   18 +
 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.S  |   39 +
 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h  |  306 +++
 ports/sysdeps/unix/sysv/linux/microblaze/xstat.c   |    1 +
 100 files changed, 9502 insertions(+), 0 deletions(-)
 create mode 100644 ports/ChangeLog.microblaze
 create mode 100644 ports/sysdeps/microblaze/Implies
 create mode 100644 ports/sysdeps/microblaze/Makefile
 create mode 100644 ports/sysdeps/microblaze/__longjmp.S
 create mode 100644 ports/sysdeps/microblaze/_mcount.S
 create mode 100644 ports/sysdeps/microblaze/abort-instr.h
 create mode 100644 ports/sysdeps/microblaze/asm-syntax.h
 create mode 100644 ports/sysdeps/microblaze/backtrace.c
 create mode 100644 ports/sysdeps/microblaze/backtrace_linux.c
 create mode 100755 ports/sysdeps/microblaze/bits/atomic.h
 create mode 100644 ports/sysdeps/microblaze/bits/endian.h
 create mode 100644 ports/sysdeps/microblaze/bits/fenv.h
 create mode 100644 ports/sysdeps/microblaze/bits/link.h
 create mode 100644 ports/sysdeps/microblaze/bits/setjmp.h
 create mode 100644 ports/sysdeps/microblaze/bsd-_setjmp.S
 create mode 100644 ports/sysdeps/microblaze/bsd-setjmp.S
 create mode 100644 ports/sysdeps/microblaze/crti.S
 create mode 100644 ports/sysdeps/microblaze/crtn.S
 create mode 100644 ports/sysdeps/microblaze/dl-machine.h
 create mode 100644 ports/sysdeps/microblaze/dl-tls.h
 create mode 100644 ports/sysdeps/microblaze/dl-trampoline.S
 create mode 100644 ports/sysdeps/microblaze/fegetround.c
 create mode 100644 ports/sysdeps/microblaze/fesetround.c
 create mode 100644 ports/sysdeps/microblaze/gccframe.h
 create mode 100644 ports/sysdeps/microblaze/jmpbuf-unwind.h
 create mode 100644 ports/sysdeps/microblaze/ldsodefs.h
 create mode 100644 ports/sysdeps/microblaze/libc-tls.c
 create mode 100644 ports/sysdeps/microblaze/libm-test-ulps
 create mode 100644 ports/sysdeps/microblaze/machine-gmon.h
 create mode 100644 ports/sysdeps/microblaze/math_private.h
 create mode 100644 ports/sysdeps/microblaze/memusage.h
 create mode 100644 ports/sysdeps/microblaze/nptl/Makefile
 create mode 100644 ports/sysdeps/microblaze/nptl/pthread_spin_lock.c
 create mode 100644 ports/sysdeps/microblaze/nptl/pthreaddef.h
 create mode 100644 ports/sysdeps/microblaze/nptl/tcb-offsets.sym
 create mode 100644 ports/sysdeps/microblaze/nptl/tls.h
 create mode 100644 ports/sysdeps/microblaze/preconfigure
 create mode 100644 ports/sysdeps/microblaze/setjmp.S
 create mode 100644 ports/sysdeps/microblaze/shlib-versions
 create mode 100644 ports/sysdeps/microblaze/sotruss-lib.c
 create mode 100644 ports/sysdeps/microblaze/stackinfo.h
 create mode 100644 ports/sysdeps/microblaze/start.S
 create mode 100644 ports/sysdeps/microblaze/sysdep.h
 create mode 100644 ports/sysdeps/microblaze/tls-macros.h
 create mode 100644 ports/sysdeps/microblaze/tst-audit.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/Makefile
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/Versions
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/mman.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/stat.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/brk.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/clone.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/configure
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/configure.in
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/fcntl.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/fxstat.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/fxstatat.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getsysstats.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/kernel_stat.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/lxstat.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/mmap.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/msgctl.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/semaphore.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/c++-types.data
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/fork.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/ld.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libBrokenLocale.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libanl.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libc.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libcrypt.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libdl.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libm.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libnsl.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libpthread.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libresolv.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/librt.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libthread_db.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libutil.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/localplt.data
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/pt-vfork.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/pthread_once.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/vfork.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/profil-counter.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/semctl.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setgroups.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/socket.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/sys/procfs.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/sys/user.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/syscall.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/syscalls.list
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.S
 create mode 100755 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/xstat.c

diff --git a/ports/ChangeLog.microblaze b/ports/ChangeLog.microblaze
new file mode 100644
index 0000000..4323270
--- /dev/null
+++ b/ports/ChangeLog.microblaze
@@ -0,0 +1,101 @@
+2013-03-28  David Holsgrove  <david.holsgrove@xilinx.com>
+
+	* sysdeps/microblaze/Implies: New file.
+	* sysdeps/microblaze/Makefile: New file.
+	* sysdeps/microblaze/__longjmp.S: New file.
+	* sysdeps/microblaze/_mcount.S: New file.
+	* sysdeps/microblaze/abort-instr.h: New file.
+	* sysdeps/microblaze/asm-syntax.h: New file.
+	* sysdeps/microblaze/backtrace.c: New file.
+	* sysdeps/microblaze/backtrace_linux.c: New file.
+	* sysdeps/microblaze/bits/atomic.h: New file.
+	* sysdeps/microblaze/bits/endian.h: New file.
+	* sysdeps/microblaze/bits/fenv.h: New file.
+	* sysdeps/microblaze/bits/link.h: New file.
+	* sysdeps/microblaze/bits/setjmp.h: New file.
+	* sysdeps/microblaze/bsd-_setjmp.S: New file.
+	* sysdeps/microblaze/bsd-setjmp.S: New file.
+	* sysdeps/microblaze/crti.S: New file.
+	* sysdeps/microblaze/crtn.S: New file.
+	* sysdeps/microblaze/dl-machine.h: New file.
+	* sysdeps/microblaze/dl-tls.h: New file.
+	* sysdeps/microblaze/dl-trampoline.S: New file.
+	* sysdeps/microblaze/fegetround.c: New file.
+	* sysdeps/microblaze/fesetround.c: New file.
+	* sysdeps/microblaze/gccframe.h: New file.
+	* sysdeps/microblaze/jmpbuf-unwind.h: New file.
+	* sysdeps/microblaze/ldsodefs.h: New file.
+	* sysdeps/microblaze/libc-tls.c: New file.
+	* sysdeps/microblaze/libm-test-ulps: New file.
+	* sysdeps/microblaze/machine-gmon.h: New file.
+	* sysdeps/microblaze/math_private.h: New file.
+	* sysdeps/microblaze/memusage.h: New file.
+	* sysdeps/microblaze/nptl/Makefile: New file.
+	* sysdeps/microblaze/nptl/pthread_spin_lock.c: New file.
+	* sysdeps/microblaze/nptl/pthreaddef.h: New file.
+	* sysdeps/microblaze/nptl/tcb-offsets.sym: New file.
+	* sysdeps/microblaze/nptl/tls.h: New file.
+	* sysdeps/microblaze/preconfigure: New file.
+	* sysdeps/microblaze/setjmp.S: New file.
+	* sysdeps/microblaze/shlib-versions: New file.
+	* sysdeps/microblaze/sotruss-lib.c: New file.
+	* sysdeps/microblaze/stackinfo.h: New file.
+	* sysdeps/microblaze/start.S: New file.
+	* sysdeps/microblaze/sysdep.h: New file.
+	* sysdeps/microblaze/tls-macros.h: New file.
+	* sysdeps/microblaze/tst-audit.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/Makefile: New file.
+	* sysdeps/unix/sysv/linux/microblaze/Versions: New file.
+	* sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S: New file.
+	* sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/bits/mman.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/bits/stat.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/brk.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/clone.S: New file.
+	* sysdeps/unix/sysv/linux/microblaze/configure: New file.
+	* sysdeps/unix/sysv/linux/microblaze/configure.in: New file.
+	* sysdeps/unix/sysv/linux/microblaze/fcntl.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/fxstat.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/fxstatat.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/getsysstats.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/kernel-features.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/kernel_stat.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/lxstat.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/mmap.S: New file.
+	* sysdeps/unix/sysv/linux/microblaze/msgctl.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/bits/semaphore.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/c++-types.data: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/fork.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/ld.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libBrokenLocale.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libanl.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libc.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libcrypt.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libdl.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libm.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libnsl.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libpthread.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libresolv.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/librt.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libthread_db.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libutil.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/localplt.data: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/pt-vfork.S: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/pthread_once.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/vfork.S: New file.
+	* sysdeps/unix/sysv/linux/microblaze/profil-counter.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/semctl.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/shmctl.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/setgroups.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/socket.S: New file.
+	* sysdeps/unix/sysv/linux/microblaze/sys/procfs.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/sys/user.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/syscall.S: New file.
+	* sysdeps/unix/sysv/linux/microblaze/syscalls.list: New file.
+	* sysdeps/unix/sysv/linux/microblaze/sysdep.S: New file.
+	* sysdeps/unix/sysv/linux/microblaze/sysdep.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/xstat.c: New file.
diff --git a/ports/sysdeps/microblaze/Implies b/ports/sysdeps/microblaze/Implies
new file mode 100644
index 0000000..73c766c
--- /dev/null
+++ b/ports/sysdeps/microblaze/Implies
@@ -0,0 +1,4 @@
+wordsize-32
+# MicroBlaze uses IEEE 754 floating point.
+ieee754/flt-32
+ieee754/dbl-64
diff --git a/ports/sysdeps/microblaze/Makefile b/ports/sysdeps/microblaze/Makefile
new file mode 100644
index 0000000..cc82a74
--- /dev/null
+++ b/ports/sysdeps/microblaze/Makefile
@@ -0,0 +1,26 @@
+ifeq ($(subdir),elf)
+CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused
+endif
+
+ifeq ($(subdir),gmon)
+sysdep_routines += _mcount
+endif
+
+ifeq ($(subdir),resource)
+sysdep_routines += backtrace_linux
+endif
+
+$(objpfx)libm.so: $(elfobjdir)/ld.so
+$(objpfx)libcrypt.so: $(elfobjdir)/ld.so
+$(objpfx)libresolv.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_dns.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_files.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_db.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_nis.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_nisplus.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_hesiod.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_compat.so: $(elfobjdir)/ld.so
+$(objpfx)libanl.so: $(elfobjdir)/ld.so
+$(objpfx)libnsl.so: $(elfobjdir)/ld.so
+$(objpfx)libcidn.so: $(elfobjdir)/ld.so
+$(objpfx)libutil.so: $(elfobjdir)/ld.so
diff --git a/ports/sysdeps/microblaze/__longjmp.S b/ports/sysdeps/microblaze/__longjmp.S
new file mode 100644
index 0000000..a49c33f
--- /dev/null
+++ b/ports/sysdeps/microblaze/__longjmp.S
@@ -0,0 +1,55 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+/* Jump to the position specified by ENV, causing the
+   setjmp call there to return VAL, or 1 if VAL is 0.  */
+
+/* void __longjmp (__jmp_buf env, int val) */
+
+ENTRY(__longjmp)
+    lwi   r1,r5,0
+    lwi   r2,r5,4
+    lwi   r13,r5,8
+    lwi   r14,r5,12
+    lwi   r15,r5,16
+    lwi   r16,r5,20
+    lwi   r17,r5,24
+    lwi   r18,r5,28
+    lwi   r19,r5,32
+    lwi   r20,r5,36
+    lwi   r21,r5,40
+    lwi   r22,r5,44
+    lwi   r23,r5,48
+    lwi   r24,r5,52
+    lwi   r25,r5,56
+    lwi   r26,r5,60
+    lwi   r27,r5,64
+    lwi   r28,r5,68
+    lwi   r29,r5,72
+    lwi   r30,r5,76
+    lwi   r31,r5,80
+    addk  r3,r6,r0
+    beqi  r3,L(return_1)
+    rtsd  r15,8
+    nop
+L(return_1):
+    rtsd  r15,8
+    addik r3,r0,1	/* delay slot.  */
+END(__longjmp)
diff --git a/ports/sysdeps/microblaze/_mcount.S b/ports/sysdeps/microblaze/_mcount.S
new file mode 100644
index 0000000..7d4f40a
--- /dev/null
+++ b/ports/sysdeps/microblaze/_mcount.S
@@ -0,0 +1,91 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+	.global	_mcount
+	.type	_mcount, @function
+_mcount:
+	# Save regs.
+	addik   r1, r1,-4 * 24
+	swi	r31, r1, 4 * 23
+	swi	r30, r1, 4 * 22
+	swi	r29, r1, 4 * 21
+	swi	r28, r1, 4 * 20
+	swi	r27, r1, 4 * 19
+	swi	r26, r1, 4 * 18
+	swi	r25, r1, 4 * 17
+	swi	r24, r1, 4 * 16
+	swi	r23, r1, 4 * 15
+	swi	r22, r1, 4 * 14
+	swi	r21, r1, 4 * 13
+	swi	r20, r1, 4 * 12
+	swi	r19, r1, 4 * 11
+	swi	r15, r1, 4 * 10
+	swi	r12, r1, 4 * 9
+	swi	r11, r1, 4 * 8
+	swi	r10, r1, 4 * 7
+	swi	r8, r1, 4 * 6
+	swi	r7, r1, 4 * 5
+	swi	r6, r1, 4 * 4
+	swi	r5, r1, 4 * 3
+	swi	r4, r1, 4 * 2
+	swi	r3, r1, 4 * 1
+	swi	r2, r1, 4 * 0
+
+#ifdef SHARED
+	mfs     r20,rpc
+	addik   r20,r20,_GLOBAL_OFFSET_TABLE_+8
+	addk	r6, r0, r15	# callee is in r15.
+	brlid	r15, __mcount_internal@PLT
+	lwi	r5, r1, 4 * 24	# caller is on the stack.
+#else
+	# Pass from/to in r5 and r6.
+	addk	r6, r0, r15	# callee is in r15.
+	bralid	r15, __mcount_internal
+	lwi	r5, r1, 4 * 24	# caller is on the stack.
+#endif
+
+	# Reload regs
+	lwi	r31, r1, 4 * 23
+	lwi	r30, r1, 4 * 22
+	lwi	r29, r1, 4 * 21
+	lwi	r28, r1, 4 * 20
+	lwi	r27, r1, 4 * 19
+	lwi	r26, r1, 4 * 18
+	lwi	r25, r1, 4 * 17
+	lwi	r24, r1, 4 * 16
+	lwi	r23, r1, 4 * 15
+	lwi	r22, r1, 4 * 14
+	lwi	r21, r1, 4 * 13
+	lwi	r20, r1, 4 * 12
+	lwi	r19, r1, 4 * 11
+	lwi	r15, r1, 4 * 10
+	lwi	r12, r1, 4 * 9
+	lwi	r11, r1, 4 * 8
+	lwi	r10, r1, 4 * 7
+	lwi	r8, r1, 4 * 6
+	lwi	r7, r1, 4 * 5
+	lwi	r6, r1, 4 * 4
+	lwi	r5, r1, 4 * 3
+	lwi	r4, r1, 4 * 2
+	lwi	r3, r1, 4 * 1
+	lwi	r2, r1, 4 * 0
+
+	rtsd	r15, 8
+	addik	r1, r1, 4 * 24
+
+	.size	_mcount, . - _mcount
diff --git a/ports/sysdeps/microblaze/abort-instr.h b/ports/sysdeps/microblaze/abort-instr.h
new file mode 100644
index 0000000..38469d4
--- /dev/null
+++ b/ports/sysdeps/microblaze/abort-instr.h
@@ -0,0 +1,2 @@
+/* An instruction which should crash any program is `illegal'.  */
+#define ABORT_INSTRUCTION asm ("brki r0, -1")
diff --git a/ports/sysdeps/microblaze/asm-syntax.h b/ports/sysdeps/microblaze/asm-syntax.h
new file mode 100644
index 0000000..fc8fbcd
--- /dev/null
+++ b/ports/sysdeps/microblaze/asm-syntax.h
@@ -0,0 +1,24 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#undef ALIGN
+#define ALIGN(log) .align 1<<log
+
+#define R_(r) %##r
+#define R(r) R_(r)
+#define L(label) .##label
diff --git a/ports/sysdeps/microblaze/backtrace.c b/ports/sysdeps/microblaze/backtrace.c
new file mode 100644
index 0000000..33d6a17
--- /dev/null
+++ b/ports/sysdeps/microblaze/backtrace.c
@@ -0,0 +1,138 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+#include <string.h>
+#include <sysdep.h>
+#include <signal.h>
+#include <execinfo.h>
+
+extern int
+_identify_sighandler (unsigned long fp, unsigned long pc,
+                      unsigned long *pprev_fp, unsigned long *pprev_pc,
+                      unsigned long *retaddr);
+
+inline long
+get_frame_size (unsigned long instr)
+{
+    return abs ((short signed) (instr & 0xFFFF));
+}
+
+static unsigned long *
+find_frame_creation (unsigned long *pc)
+{
+    int i;
+
+    /* NOTE: Distance to search is arbitrary
+     *   250 works well for most things,
+     *   750 picks up things like tcp_recvmsg(),
+     *  1000 needed for fat_fill_super().  */
+    for (i = 0; i < 1000; i++, pc--)
+      {
+        unsigned long instr;
+        unsigned long frame_size;
+
+        instr = *pc;
+
+        /* addik r1, r1, foo ? */
+        if ((instr & 0xFFFF0000) != 0x30210000)
+          continue;   /* No.  */
+
+        frame_size = get_frame_size (instr);
+
+        if ((frame_size < 8) || (frame_size & 3))
+          return NULL;
+
+        return pc;
+      }
+    return NULL;
+}
+
+static int
+lookup_prev_stack_frame (unsigned long fp, unsigned long pc,
+                         unsigned long *pprev_fp, unsigned long *pprev_pc,
+                         unsigned long *retaddr)
+{
+    unsigned long *prologue = NULL;
+
+    int is_signalhandler = _identify_sighandler (fp, pc, pprev_fp,
+                                                 pprev_pc, retaddr);
+
+    if (!is_signalhandler)
+      {
+        prologue = find_frame_creation ((unsigned long *) pc);
+
+        if (prologue)
+          {
+            long frame_size = get_frame_size (*prologue);
+            *pprev_fp = fp + frame_size;
+            if (*retaddr != 0)
+                *pprev_pc = *retaddr;
+            else
+                *pprev_pc = *(unsigned long *) fp;
+
+            *retaddr = 0;
+            if ((!(*pprev_pc) || ((*pprev_pc) & 3)))
+                prologue=0;
+          }
+        else
+          {
+            *pprev_pc = 0;
+            *pprev_fp = fp;
+            *retaddr = 0;
+          }
+      }
+      return (!(*pprev_pc) || ((*pprev_pc) & 3)) ? -1 : 0;
+}
+
+int
+__backtrace (void **array, int size)
+{
+    unsigned long pc, fp;
+    unsigned long ppc, pfp;
+    /* Return address(r15) is required in the signal handler case, since the
+       return address of the function which causes the signal may not be
+       recorded in the stack.  */
+    unsigned long retaddr; 
+
+    int count;
+    int rc = 0;
+
+    __asm__ __volatile__ ("mfs %0, rpc"
+                          : "=r"(pc));
+
+    __asm__ __volatile__ ("add %0, r1, r0"
+                          : "=r"(fp));
+
+    array[0]=(void *)pc;
+    retaddr = 0;
+    for (count=1; count < size; count++)
+      {
+        rc = lookup_prev_stack_frame (fp, pc, &pfp, &ppc, &retaddr);
+
+        fp=pfp;
+        pc=ppc;
+        array[count] = (void *) pc;
+        if (rc)
+          return count;
+      }
+    return count;
+}
+
+weak_alias (__backtrace, backtrace)
+libc_hidden_def (__backtrace)
diff --git a/ports/sysdeps/microblaze/backtrace_linux.c b/ports/sysdeps/microblaze/backtrace_linux.c
new file mode 100644
index 0000000..1069a54
--- /dev/null
+++ b/ports/sysdeps/microblaze/backtrace_linux.c
@@ -0,0 +1,59 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stddef.h>
+#include <asm/sigcontext.h>
+#include <linux/signal.h>
+#include <asm-generic/ucontext.h>
+#include <asm/unistd.h>
+
+int
+_identify_sighandler (unsigned long fp, unsigned long pc,
+                      unsigned long *pprev_fp, unsigned long *pprev_pc,
+                      unsigned long *retaddr)
+{
+    unsigned long *tramp = 0;
+    struct ucontext *uc;
+
+    if (*retaddr == 0)
+      {
+        /* Kernel insert the tramp between the signal handler frame and the
+           caller frame in signal handling.  */
+        tramp = (unsigned long *) pc;
+        tramp += 2;
+        if ((*tramp == (0x31800000 | __NR_rt_sigreturn))
+            && (*(tramp+1) == 0xb9cc0008))
+          {
+            /* Signal handler function argument is:
+               (int sig_num, siginfo_t * info, void * ucontext)
+               the uncontext is the 3rd argument.  */
+            unsigned long ucptr = ((unsigned long) tramp
+                                   - sizeof (struct ucontext));
+            uc = (struct ucontext *) ucptr;
+            *pprev_pc = uc->uc_mcontext.regs.pc;
+            /* Need to record the return address since the return address of the
+               function which causes this signal may not be recorded in the
+               stack.  */
+            *pprev_fp = uc->uc_mcontext.regs.r1;
+            *retaddr = uc->uc_mcontext.regs.r15;
+            /* It is a signal handler.  */
+            return 1;
+          }
+      }
+    return 0;
+}
diff --git a/ports/sysdeps/microblaze/bits/atomic.h b/ports/sysdeps/microblaze/bits/atomic.h
new file mode 100755
index 0000000..1ea998c
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/atomic.h
@@ -0,0 +1,269 @@
+/* Copyright (C) 2003-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdint.h>
+#include <sysdep.h>
+
+
+typedef int8_t atomic8_t;
+typedef uint8_t uatomic8_t;
+typedef int_fast8_t atomic_fast8_t;
+typedef uint_fast8_t uatomic_fast8_t;
+
+typedef int32_t atomic32_t;
+typedef uint32_t uatomic32_t;
+typedef int_fast32_t atomic_fast32_t;
+typedef uint_fast32_t uatomic_fast32_t;
+
+typedef intptr_t atomicptr_t;
+typedef uintptr_t uatomicptr_t;
+typedef intmax_t atomic_max_t;
+typedef uintmax_t uatomic_max_t;
+
+
+/* Microblaze does not have byte and halfword forms of load and reserve and
+   store conditional. So for microblaze we stub out the 8- and 16-bit forms.  */
+#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval)           \
+  (abort (), 0)
+
+#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval)          \
+  (abort (), 0)
+
+#define __arch_compare_and_exchange_bool_8_rel(mem, newval, oldval)           \
+  (abort (), 0)
+
+#define __arch_compare_and_exchange_bool_16_rel(mem, newval, oldval)          \
+  (abort (), 0)
+
+#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval)           \
+  ({                                                                          \
+      __typeof (*(mem)) __tmp;                                                \
+      __typeof (mem)  __memp = (mem);                                         \
+      int test;                                                               \
+      __asm __volatile (                                                      \
+                "   addc    r0, r0, r0;"                                      \
+                "1: lwx     %0, %3, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                "   cmp     %1, %0, %4;"                                      \
+                "   bnei    %1, 2f;"                                          \
+                "   swx     %5, %3, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                "2:"                                                          \
+                    : "=&r" (__tmp),                                          \
+                    "=&r" (test),                                             \
+                    "=m" (*__memp)                                            \
+                    : "r" (__memp),                                           \
+                    "r" (oldval),                                             \
+                    "r" (newval)                                              \
+                    : "cc", "memory");                                        \
+      __tmp;                                                                  \
+  })
+
+#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval)           \
+  (abort (), (__typeof (*mem)) 0)
+
+#define atomic_compare_and_exchange_val_acq(mem, newval, oldval)              \
+  ({                                                                          \
+    __typeof (*(mem)) __result;                                               \
+    if (sizeof (*mem) == 4)                                                   \
+      __result = __arch_compare_and_exchange_val_32_acq(mem, newval, oldval); \
+    else if (sizeof (*mem) == 8)                                              \
+      __result = __arch_compare_and_exchange_val_64_acq(mem, newval, oldval); \
+    else                                                                      \
+       abort ();                                                              \
+    __result;                                                                 \
+  })
+
+#define atomic_compare_and_exchange_val_rel(mem, newval, oldval)              \
+  ({                                                                          \
+    __typeof (*(mem)) __result;                                               \
+    if (sizeof (*mem) == 4)                                                   \
+      __result = __arch_compare_and_exchange_val_32_acq(mem, newval, oldval); \
+    else if (sizeof (*mem) == 8)                                              \
+      __result = __arch_compare_and_exchange_val_64_acq(mem, newval, oldval); \
+    else                                                                      \
+       abort ();                                                              \
+    __result;                                                                 \
+  })
+
+#define __arch_atomic_exchange_32_acq(mem, value)                             \
+  ({                                                                          \
+      __typeof (*(mem)) __tmp;                                                \
+      __typeof (mem)  __memp = (mem);                                         \
+      int test;                                                               \
+      __asm __volatile (                                                      \
+                "   addc    r0, r0, r0;"                                      \
+                "1: lwx     %0, %4, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                "   swx     %3, %4, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                    : "=&r" (__tmp),                                          \
+                    "=&r" (test),                                             \
+                    "=m" (*__memp)                                            \
+                    : "r" (value),                                            \
+                    "r" (__memp)                                              \
+                    : "cc", "memory");                                        \
+      __tmp;                                                                  \
+  })
+
+#define __arch_atomic_exchange_64_acq(mem, newval)                            \
+  (abort (), (__typeof (*mem)) 0)
+
+#define atomic_exchange_acq(mem, value)                                       \
+  ({                                                                          \
+    __typeof (*(mem)) __result;                                               \
+    if (sizeof (*mem) == 4)                                                   \
+      __result = __arch_atomic_exchange_32_acq (mem, value);                  \
+    else if (sizeof (*mem) == 8)                                              \
+      __result = __arch_atomic_exchange_64_acq (mem, value);                  \
+    else                                                                      \
+       abort ();                                                              \
+    __result;                                                                 \
+  })
+
+#define atomic_exchange_rel(mem, value)                                       \
+  ({                                                                          \
+    __typeof (*(mem)) __result;                                               \
+    if (sizeof (*mem) == 4)                                                   \
+      __result = __arch_atomic_exchange_32_acq (mem, value);                  \
+    else if (sizeof (*mem) == 8)                                              \
+      __result = __arch_atomic_exchange_64_acq (mem, value);                  \
+    else                                                                      \
+       abort ();                                                              \
+    __result;                                                                 \
+  })
+
+#define __arch_atomic_exchange_and_add_32(mem, value)                         \
+  ({                                                                          \
+    __typeof (*(mem)) __tmp;                                                  \
+      __typeof (mem)  __memp = (mem);                                         \
+    int test;                                                                 \
+    __asm __volatile (                                                        \
+                "   addc    r0, r0, r0;"                                      \
+                "1: lwx     %0, %4, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                "   add     %1, %3, %0;"                                      \
+                "   swx     %1, %4, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                    : "=&r" (__tmp),                                          \
+                    "=&r" (test),                                             \
+                    "=m" (*__memp)                                            \
+                    : "r" (value),                                            \
+                    "r" (__memp)                                              \
+                    : "cc", "memory");                                        \
+    __tmp;                                                                    \
+  })
+
+#define __arch_atomic_exchange_and_add_64(mem, value)                         \
+  (abort (), (__typeof (*mem)) 0)
+
+#define atomic_exchange_and_add(mem, value)                                   \
+  ({                                                                          \
+    __typeof (*(mem)) __result;                                               \
+    if (sizeof (*mem) == 4)                                                   \
+      __result = __arch_atomic_exchange_and_add_32 (mem, value);              \
+    else if (sizeof (*mem) == 8)                                              \
+      __result = __arch_atomic_exchange_and_add_64 (mem, value);              \
+    else                                                                      \
+       abort ();                                                              \
+    __result;                                                                 \
+  })
+
+#define __arch_atomic_increment_val_32(mem)                                   \
+  ({                                                                          \
+    __typeof (*(mem)) __val;                                                  \
+    int test;                                                                 \
+    __asm __volatile (                                                        \
+                "   addc    r0, r0, r0;"                                      \
+                "1: lwx     %0, %3, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                "   addi    %0, %0, 1;"                                       \
+                "   swx     %0, %3, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                    : "=&r" (__val),                                          \
+                    "=&r" (test),                                             \
+                    "=m" (*mem)                                               \
+                    : "r" (mem),                                              \
+                    "m" (*mem)                                                \
+                    : "cc", "memory");                                        \
+    __val;                                                                    \
+  })
+
+#define __arch_atomic_increment_val_64(mem)                                   \
+  (abort (), (__typeof (*mem)) 0)
+
+#define atomic_increment_val(mem)                                             \
+  ({                                                                          \
+    __typeof (*(mem)) __result;                                               \
+    if (sizeof (*(mem)) == 4)                                                 \
+      __result = __arch_atomic_increment_val_32 (mem);                        \
+    else if (sizeof (*(mem)) == 8)                                            \
+      __result = __arch_atomic_increment_val_64 (mem);                        \
+    else                                                                      \
+       abort ();                                                              \
+    __result;                                                                 \
+  })
+
+#define atomic_increment(mem) ({ atomic_increment_val (mem); (void) 0; })
+
+#define __arch_atomic_decrement_val_32(mem)                                   \
+  ({                                                                          \
+    __typeof (*(mem)) __val;                                                  \
+    int test;                                                                 \
+    __asm __volatile (                                                        \
+                "   addc    r0, r0, r0;"                                      \
+                "1: lwx     %0, %3, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                "   rsubi   %0, %0, 1;"                                       \
+                "   swx     %0, %3, r0;"                                      \
+                "   addic   %1, r0, 0;"                                       \
+                "   bnei    %1, 1b;"                                          \
+                    : "=&r" (__val),                                          \
+                    "=&r" (test),                                             \
+                    "=m" (*mem)                                               \
+                    : "r" (mem),                                              \
+                    "m" (*mem)                                                \
+                    : "cc", "memory");                                        \
+    __val;                                                                    \
+  })
+
+#define __arch_atomic_decrement_val_64(mem)                                   \
+  (abort (), (__typeof (*mem)) 0)
+
+#define atomic_decrement_val(mem)                                             \
+  ({                                                                          \
+    __typeof (*(mem)) __result;                                               \
+    if (sizeof (*(mem)) == 4)                                                 \
+      __result = __arch_atomic_decrement_val_32 (mem);                        \
+    else if (sizeof (*(mem)) == 8)                                            \
+      __result = __arch_atomic_decrement_val_64 (mem);                        \
+    else                                                                      \
+       abort ();                                                              \
+    __result;                                                                 \
+  })
+
+#define atomic_decrement(mem) ({ atomic_decrement_val (mem); (void) 0; })
diff --git a/ports/sysdeps/microblaze/bits/endian.h b/ports/sysdeps/microblaze/bits/endian.h
new file mode 100644
index 0000000..174c115
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/endian.h
@@ -0,0 +1,30 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ENDIAN_H
+# error "Never use <bits/endian.h> directly; include <endian.h> instead."
+#endif
+
+/* MicroBlaze can be either big or little endian.  */
+#ifdef _BIG_ENDIAN
+# define __BYTE_ORDER __BIG_ENDIAN
+# define __FLOAT_WORD_ORDER __BIG_ENDIAN
+#else
+# define __BYTE_ORDER __LITTLE_ENDIAN
+# define __FLOAT_WORD_ORDER __LITTLE_ENDIAN
+#endif
diff --git a/ports/sysdeps/microblaze/bits/fenv.h b/ports/sysdeps/microblaze/bits/fenv.h
new file mode 100644
index 0000000..637d3c2
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/fenv.h
@@ -0,0 +1,42 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _FENV_H
+# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+#endif
+
+/* MicroBlaze supports only round-to-nearest.  The software
+   floating-point support also acts this way.  */
+enum
+  {
+    __FE_UNDEFINED = 0,
+
+    FE_TONEAREST =
+#define FE_TONEAREST	0x1
+      FE_TONEAREST,
+  };
+
+#define FE_ALL_EXCEPT 0
+
+/* Type representing exception flags (if there were any).  */
+typedef unsigned int fexcept_t;
+
+/* Type representing floating-point environment.  */
+typedef unsigned int fenv_t;
+
+/* If the default argument is used we use this value.  */
+#define FE_DFL_ENV	((const fenv_t *) -1l)
diff --git a/ports/sysdeps/microblaze/bits/link.h b/ports/sysdeps/microblaze/bits/link.h
new file mode 100644
index 0000000..ab71195
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/link.h
@@ -0,0 +1,55 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef	_LINK_H
+# error "Never include <bits/link.h> directly; use <link.h> instead."
+#endif
+
+
+/* Registers for entry into PLT on Microblaze.  */
+typedef struct La_microblaze_regs
+{
+  uint32_t lr_r0;
+  uint32_t lr_r1;
+  uint32_t lr_sp;
+} La_microblaze_regs;
+
+/* Return values for calls from PLT on Microblaze.  */
+typedef struct La_microblaze_retval
+{
+  uint32_t lrv_r3;
+} La_microblaze_retval;
+
+
+__BEGIN_DECLS
+
+extern Elf32_Addr la_microblaze_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx,
+					uintptr_t *__refcook,
+					uintptr_t *__defcook,
+					La_microblaze_regs *__regs,
+					unsigned int *__flags,
+					const char *__symname,
+					long int *__framesizep);
+extern unsigned int la_microblaze_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx,
+					 uintptr_t *__refcook,
+					 uintptr_t *__defcook,
+					 const La_microblaze_regs *__inregs,
+					 La_microblaze_retval *__outregs,
+					 const char *__symname);
+
+__END_DECLS
diff --git a/ports/sysdeps/microblaze/bits/setjmp.h b/ports/sysdeps/microblaze/bits/setjmp.h
new file mode 100644
index 0000000..19f83db
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/setjmp.h
@@ -0,0 +1,37 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Define the machine-dependent type `jmp_buf'.  */
+
+#ifndef _BITS_SETJMP_H
+# define _BITS_SETJMP_H 1
+
+#if !defined _SETJMP_H && !defined _PTHREAD_H
+# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+#endif
+
+typedef struct
+  {
+    /* There are 21 4-byte registers that should be saved:
+       r1, r2, r13-r31. Actually, there seems no need to save
+       r14, r16, r17, r18 (return addresses for interrupt/exception/trap).  */
+    int *__sp; /* dedicated name for r1.  */
+    long int __gregs[20];
+  } __jmp_buf[1];
+
+#endif
diff --git a/ports/sysdeps/microblaze/bsd-_setjmp.S b/ports/sysdeps/microblaze/bsd-_setjmp.S
new file mode 100644
index 0000000..22c8d20
--- /dev/null
+++ b/ports/sysdeps/microblaze/bsd-_setjmp.S
@@ -0,0 +1,22 @@
+/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'.
+   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define setjmp_name _setjmp
+#define SAVEMASK 0
+
+#include <setjmp.S>
diff --git a/ports/sysdeps/microblaze/bsd-setjmp.S b/ports/sysdeps/microblaze/bsd-setjmp.S
new file mode 100644
index 0000000..e25b6cb
--- /dev/null
+++ b/ports/sysdeps/microblaze/bsd-setjmp.S
@@ -0,0 +1,22 @@
+/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'.
+   Copyright (C) 1995-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define setjmp_name setjmp
+#define SAVEMASK 1
+
+#include <setjmp.S>
diff --git a/ports/sysdeps/microblaze/crti.S b/ports/sysdeps/microblaze/crti.S
new file mode 100644
index 0000000..e06b666
--- /dev/null
+++ b/ports/sysdeps/microblaze/crti.S
@@ -0,0 +1,89 @@
+/* Special .init and .fini section support for MicroBlaze.
+   Copyright (C) 2012-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   In addition to the permissions in the GNU Lesser General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file with other
+   programs, and to distribute those programs without any restriction
+   coming from the use of this file. (The GNU Lesser General Public
+   License restrictions do apply in other respects; for example, they
+   cover modification of the file, and distribution when not linked
+   into another program.)
+
+   Note that people who make modified versions of this file are not
+   obligated to grant this special exception for their modified
+   versions; it is their choice whether to do so. The GNU Lesser
+   General Public License gives permission to release a modified
+   version without this exception; this exception also makes it
+   possible to release a modified version which carries forward this
+   exception.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* crti.S puts a function prologue at the beginning of the .init and
+   .fini sections and defines global symbols for those addresses, so
+   they can be called as functions.  The symbols _init and _fini are
+   magic and cause the linker to emit DT_INIT and DT_FINI.  */
+
+#include <libc-symbols.h>
+#include <sysdep.h>
+
+#ifndef PREINIT_FUNCTION
+# define PREINIT_FUNCTION __gmon_start__
+#endif
+
+#ifndef PREINIT_FUNCTION_WEAK
+# define PREINIT_FUNCTION_WEAK 1
+#endif
+
+#if PREINIT_FUNCTION_WEAK
+	weak_extern (PREINIT_FUNCTION)
+#else
+	.hidden PREINIT_FUNCTION
+#endif
+
+	.section .init,"ax",@progbits
+	.align	2
+	.globl	_init
+	.type	_init, @function
+_init:
+	addik	r1,r1,-32
+	swi	r20,r1,28
+	mfs	r20,rpc
+	addik	r20,r20,_GLOBAL_OFFSET_TABLE_+8
+	lwi	r3,r20,PREINIT_FUNCTION@GOT
+#if PREINIT_FUNCTION_WEAK
+	beqid   r3,$Lno_weak_fn:
+	swi     r15,r1,0
+	brlid	r15,PREINIT_FUNCTION@PLT
+$Lno_weak_fn:
+#else
+	swi     r15,r1,0
+	brald	r15,r3
+#endif
+	nop		# Unfilled delay slot
+
+	.section .fini,"ax",@progbits
+	.align	2
+	.globl	_fini
+	.type	_fini, @function
+_fini:
+	addik	r1,r1,-32
+	swi	r20,r1,28
+	swi	r15,r1,0
+	mfs	r20,rpc
+	addik	r20,r20,_GLOBAL_OFFSET_TABLE_+8
+
diff --git a/ports/sysdeps/microblaze/crtn.S b/ports/sysdeps/microblaze/crtn.S
new file mode 100644
index 0000000..5928c2d
--- /dev/null
+++ b/ports/sysdeps/microblaze/crtn.S
@@ -0,0 +1,52 @@
+/* Special .init and .fini section support for MicroBlaze.
+   Copyright (C) 1995-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   In addition to the permissions in the GNU Lesser General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file with other
+   programs, and to distribute those programs without any restriction
+   coming from the use of this file. (The GNU Lesser General Public
+   License restrictions do apply in other respects; for example, they
+   cover modification of the file, and distribution when not linked
+   into another program.)
+
+   Note that people who make modified versions of this file are not
+   obligated to grant this special exception for their modified
+   versions; it is their choice whether to do so. The GNU Lesser
+   General Public License gives permission to release a modified
+   version without this exception; this exception also makes it
+   possible to release a modified version which carries forward this
+   exception.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* crtn.S puts function epilogues in the .init and .fini sections
+   corresponding to the prologues in crti.S. */
+
+#include <sysdep.h>
+
+	.section .init,"ax",@progbits
+	lwi	r15,r1,0
+	lwi	r20,r1,28
+	rtsd	r15,8
+	addik	r1,r1,32
+
+	.section .fini,"ax",@progbits
+	lwi	r15,r1,0
+	lwi	r20,r1,28
+	rtsd	r15,8
+	addik	r1,r1,32
+
diff --git a/ports/sysdeps/microblaze/dl-machine.h b/ports/sysdeps/microblaze/dl-machine.h
new file mode 100644
index 0000000..f899fc4
--- /dev/null
+++ b/ports/sysdeps/microblaze/dl-machine.h
@@ -0,0 +1,302 @@
+/* Copyright (C) 1995-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef dl_machine_h
+#define dl_machine_h
+
+#define ELF_MACHINE_NAME "microblaze"
+
+#include <sys/param.h>
+#include <tls.h>
+
+/* Return nonzero iff ELF header is compatible with the running host.  */
+static inline int
+elf_machine_matches_host (const Elf32_Ehdr *ehdr)
+{
+  return (ehdr->e_machine == EM_MICROBLAZE);
+}
+
+
+/* Return the link-time address of _DYNAMIC.  Conveniently, this is the
+   first element of the GOT.  This must be inlined in a function which
+   uses global data.  */
+static inline Elf32_Addr
+elf_machine_dynamic (void)
+{
+  /* This produces a GOTOFF reloc that resolves to zero at link time, so in
+     fact just loads from the GOT register directly.  By doing it without
+     an asm we can let the compiler choose any register.  */
+
+  Elf32_Addr got_entry_0;
+  __asm__ __volatile__(
+    "lwi %0,r20,0"
+    :"=r"(got_entry_0)
+    );
+  return got_entry_0;
+}
+
+
+/* Return the run-time load address of the shared object.  */
+static inline Elf32_Addr
+elf_machine_load_address (void)
+{
+  /* Compute the difference between the runtime address of _DYNAMIC as seen
+     by a GOTOFF reference, and the link-time address found in the special
+     unrelocated first GOT entry.  */
+
+  Elf32_Addr dyn;
+  __asm__ __volatile__ (
+    "addik %0,r20,_DYNAMIC@GOTOFF"
+    : "=r"(dyn)
+    );
+  return dyn - elf_machine_dynamic ();
+}
+
+
+/* Set up the loaded object described by L so its unrelocated PLT
+   entries will jump to the on-demand fixup code in dl-runtime.c.  */
+
+static inline int __attribute__ ((always_inline))
+elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
+{
+  extern void _dl_runtime_resolve (Elf32_Word);
+  extern void _dl_runtime_profile (Elf32_Word);
+
+  return lazy;
+}
+
+/* The PLT uses Elf32_Rela relocs.  */
+#define elf_machine_relplt elf_machine_rela
+
+/* Mask identifying addresses reserved for the user program,
+   where the dynamic linker should not map anything.  */
+#define ELF_MACHINE_USER_ADDRESS_MASK	0x80000000UL
+
+/* Initial entry point code for the dynamic linker.
+   The C function `_dl_start' is the real entry point;
+   its return value is the user program's entry point.  */
+
+#define RTLD_START asm ("\
+	.text\n\
+	.globl _start\n\
+	.type _start,@function\n\
+_start:\n\
+	addk  r5,r0,r1\n\
+	addk  r3,r0,r0\n\
+1:\n\
+	addik r5,r5,4\n\
+	lw    r4,r5,r0\n\
+	bneid r4,1b\n\
+	addik r3,r3,1\n\
+	addik r3,r3,-1\n\
+	addk  r5,r0,r1\n\
+	sw    r3,r5,r0\n\
+	addik r1,r1,-24\n\
+	sw    r15,r1,r0\n\
+	brlid r15,_dl_start\n\
+	nop\n\
+	/* FALLTHRU.  */\n\
+\n\
+	.globl _dl_start_user\n\
+	.type _dl_start_user,@function\n\
+_dl_start_user:\n\
+	mfs   r20,rpc\n\
+	addik r20,r20,_GLOBAL_OFFSET_TABLE_+8\n\
+	lwi   r4,r20,_dl_skip_args@GOTOFF\n\
+	lwi   r5,r1,24\n\
+	rsubk r5,r4,r5\n\
+	addk  r4,r4,r4\n\
+	addk  r4,r4,r4\n\
+	addk  r1,r1,r4\n\
+	swi   r5,r1,24\n\
+	swi   r3,r1,20\n\
+	addk  r6,r5,r0\n\
+	addk  r5,r5,r5\n\
+	addk  r5,r5,r5\n\
+	addik r7,r1,28\n\
+	addk  r8,r7,r5\n\
+	addik r8,r8,4\n\
+	lwi   r5,r20,_rtld_local@GOTOFF\n\
+	brlid r15,_dl_init_internal\n\
+	nop\n\
+	lwi   r5,r1,24\n\
+	lwi   r3,r1,20\n\
+	addk  r4,r5,r5\n\
+	addk  r4,r4,r4\n\
+	addik r6,r1,28\n\
+	addk  r7,r6,r4\n\
+	addik r7,r7,4\n\
+	addik r15,r20,_dl_fini@GOTOFF\n\
+	addik r15,r15,-8\n\
+	brad  r3\n\
+	addik r1,r1,24\n\
+	nop\n\
+	.size _dl_start_user, . - _dl_start_user\n\
+	.previous");
+
+/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or
+   TLS variable, so undefined references should not be allowed to
+   define the value.
+   ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
+   of the main executable's symbols, as for a COPY reloc.  */
+#ifndef RTLD_BOOTSTRAP
+# define elf_machine_type_class(type) \
+  (((type) == R_MICROBLAZE_JUMP_SLOT || \
+    (type) == R_MICROBLAZE_TLSDTPREL32 || \
+    (type) == R_MICROBLAZE_TLSDTPMOD32 || \
+    (type) == R_MICROBLAZE_TLSTPREL32 \
+     ) * ELF_RTYPE_CLASS_PLT \
+   | ((type) == R_MICROBLAZE_COPY) * ELF_RTYPE_CLASS_COPY)
+#else
+# define elf_machine_type_class(type) \
+  (((type) == R_MICROBLAZE_JUMP_SLOT) * ELF_RTYPE_CLASS_PLT \
+   | ((type) == R_MICROBLAZE_COPY) * ELF_RTYPE_CLASS_COPY)
+#endif
+
+/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.  */
+#define ELF_MACHINE_JMP_SLOT	R_MICROBLAZE_JUMP_SLOT
+
+/* The microblaze never uses Elf32_Rel relocations.  */
+#define ELF_MACHINE_NO_REL 1
+
+static inline Elf32_Addr
+elf_machine_fixup_plt (struct link_map *map, lookup_t t,
+		       const Elf32_Rela *reloc,
+		       Elf32_Addr *reloc_addr, Elf32_Addr value)
+{
+  return *reloc_addr = value;
+}
+
+/* Return the final value of a plt relocation. Ignore the addend.  */
+static inline Elf32_Addr
+elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc,
+		       Elf32_Addr value)
+{
+  return value;
+}
+
+#endif /* !dl_machine_h.  */
+
+/* Names of the architecture-specific auditing callback functions.  */
+#define ARCH_LA_PLTENTER microblaze_gnu_pltenter
+#define ARCH_LA_PLTEXIT microblaze_gnu_pltexit
+
+#ifdef RESOLVE_MAP
+
+/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
+   MAP is the object containing the reloc.  */
+
+/* Macro to put 32-bit relocation value into 2 words.  */
+#define PUT_REL_64(rel_addr,val) \
+  do { \
+    ((unsigned short *)(rel_addr))[1] = (val) >> 16; \
+    ((unsigned short *)(rel_addr))[3] = (val) & 0xffff; \
+  } while (0)
+
+auto inline void __attribute__ ((always_inline))
+elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
+		  const Elf32_Sym *sym, const struct r_found_version *version,
+		  void *const reloc_addr_arg, int skip_ifunc)
+{
+  Elf32_Addr *const reloc_addr = reloc_addr_arg;
+  const int r_type = ELF32_R_TYPE (reloc->r_info);
+
+  if (__builtin_expect (r_type == R_MICROBLAZE_64_PCREL, 0))
+    PUT_REL_64 (reloc_addr, map->l_addr + reloc->r_addend);
+  else if (r_type == R_MICROBLAZE_REL)
+    *reloc_addr = map->l_addr + reloc->r_addend;
+  else
+    {
+      const Elf32_Sym *const refsym = sym;
+      struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);
+      Elf32_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value;
+
+      value += reloc->r_addend;
+      if (r_type == R_MICROBLAZE_GLOB_DAT ||
+          r_type == R_MICROBLAZE_JUMP_SLOT ||
+          r_type == R_MICROBLAZE_32)
+	{
+	  *reloc_addr = value;
+	}
+      else if (r_type == R_MICROBLAZE_COPY)
+	{
+	  if (sym != NULL && (sym->st_size > refsym->st_size
+	      || (sym->st_size < refsym->st_size && GLRO (dl_verbose))) )
+	    {
+	      const char *strtab;
+
+	      strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
+	      _dl_error_printf ("\
+%s: Symbol `%s' has different size in shared object, consider re-linking\n",
+				rtld_progname ?: "<program name unknown>",
+				strtab + refsym->st_name);
+	    }
+	  memcpy (reloc_addr_arg, (void *) value,
+		  MIN (sym->st_size, refsym->st_size));
+	}
+      else if (r_type == R_MICROBLAZE_NONE)
+	{
+	}
+#if !defined RTLD_BOOTSTRAP
+      else if (r_type == R_MICROBLAZE_TLSDTPMOD32)
+	{
+	  if (sym_map != NULL)
+	    *reloc_addr = sym_map->l_tls_modid;
+	}
+      else if (r_type == R_MICROBLAZE_TLSDTPREL32)
+	{
+	  if (sym != NULL)
+	    *reloc_addr = sym->st_value + reloc->r_addend;
+	}
+      else if (r_type == R_MICROBLAZE_TLSTPREL32)
+	{
+	  if (sym != NULL)
+	    {
+	      CHECK_STATIC_TLS (map, sym_map);
+	      *reloc_addr = sym->st_value + sym_map->l_tls_offset + reloc->r_addend;
+	    }
+	}
+#endif
+      else
+	{
+	  _dl_reloc_bad_type (map, r_type, 0);
+	}
+    }
+}
+
+auto inline void
+elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
+			   void *const reloc_addr_arg)
+{
+  Elf32_Addr *const reloc_addr = reloc_addr_arg;
+  PUT_REL_64 (reloc_addr, l_addr + reloc->r_addend);
+}
+
+auto inline void
+elf_machine_lazy_rel (struct link_map *map,
+		      Elf32_Addr l_addr, const Elf32_Rela *reloc,
+		      int skip_ifunc)
+{
+  Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset);
+  if (ELF32_R_TYPE (reloc->r_info) == R_MICROBLAZE_JUMP_SLOT)
+    *reloc_addr += l_addr;
+  else
+    _dl_reloc_bad_type (map, ELF32_R_TYPE (reloc->r_info), 1);
+}
+
+#endif /* RESOLVE_MAP.  */
diff --git a/ports/sysdeps/microblaze/dl-tls.h b/ports/sysdeps/microblaze/dl-tls.h
new file mode 100644
index 0000000..0e7f2e5
--- /dev/null
+++ b/ports/sysdeps/microblaze/dl-tls.h
@@ -0,0 +1,29 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Type used for the representation of TLS information in the GOT.  */
+typedef struct
+{
+  unsigned long int ti_module;
+  unsigned long int ti_offset;
+} tls_index;
+
+extern void *__tls_get_addr (tls_index *ti);
+
+/* Value used for dtv entries for which the allocation is delayed.  */
+#define TLS_DTV_UNALLOCATED	((void *) -1l)
diff --git a/ports/sysdeps/microblaze/dl-trampoline.S b/ports/sysdeps/microblaze/dl-trampoline.S
new file mode 100644
index 0000000..f10e22e
--- /dev/null
+++ b/ports/sysdeps/microblaze/dl-trampoline.S
@@ -0,0 +1,109 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+#include <libc-symbols.h>
+
+#ifndef PROF
+
+    .text
+    .globl  _dl_runtime_resolve
+    .type   _dl_runtime_resolve, @function
+    .align  4
+_dl_runtime_resolve:
+    addik r1,r1,-40
+    swi   r5,r1,12
+    swi   r6,r1,16
+    swi   r7,r1,20
+    swi   r8,r1,24
+    swi   r9,r1,28
+    swi   r10,r1,32
+    swi   r15,r1,0
+    addk r5,r0,r4
+    brlid r15, _dl_fixup
+    addk r6,r0,r3; /* delay slot.  */
+    lwi   r10,r1,32
+    lwi   r9,r1,28
+    lwi   r8,r1,24
+    lwi   r7,r1,20
+    lwi   r6,r1,16
+    lwi   r5,r1,12
+    lwi   r15,r1,0
+    brad  r3
+    addik r1,r1,40; /* delay slot.  */
+    .size _dl_runtime_resolve, . - _dl_runtime_resolve
+
+    .text
+    .globl  _dl_runtime_profile
+    .type   _dl_runtime_profile, @function
+    .align  4
+_dl_runtime_profile:
+    addik r1,r1,-40
+    swi   r5,r1,12
+    swi   r6,r1,16
+    swi   r7,r1,20
+    swi   r8,r1,24
+    swi   r9,r1,28
+    swi   r10,r1,32
+    swi   r15,r1,0
+    addk r5,r0,r4
+    brlid r15, _dl_profile_fixup
+    addk r6,r0,r3; /* delay slot.  */
+    lwi   r10,r1,32
+    lwi   r9,r1,28
+    lwi   r8,r1,24
+    lwi   r7,r1,20
+    lwi   r6,r1,16
+    lwi   r5,r1,12
+    lwi   r15,r1,0
+    brad  r3
+    addik r1,r1,40; /* delay slot.  */
+    .size _dl_runtime_profile, . - _dl_runtime_profile
+
+#else
+
+    .text
+    .globl  _dl_runtime_resolve
+    .type   _dl_runtime_resolve, @function
+    .align  4
+_dl_runtime_resolve:
+    addik r1,r1,-40
+    swi   r5,r1,12
+    swi   r6,r1,16
+    swi   r7,r1,20
+    swi   r8,r1,24
+    swi   r9,r1,28
+    swi   r10,r1,32
+    swi   r15,r1,0
+    addk r5,r0,r4
+    brlid r15, fixup
+    addk r6,r0,r3; /* delay slot.  */
+    lwi   r10,r1,32
+    lwi   r9,r1,28
+    lwi   r8,r1,24
+    lwi   r7,r1,20
+    lwi   r6,r1,16
+    lwi   r5,r1,12
+    lwi   r15,r1,0
+    brad  r3
+    addik r1,r1,40; /* delay slot.  */
+    .size _dl_runtime_resolve, . - _dl_runtime_resolve
+    .globl _dl_runtime_profile
+    .set _dl_runtime_profile, _dl_runtime_resolve
+
+#endif
diff --git a/ports/sysdeps/microblaze/fegetround.c b/ports/sysdeps/microblaze/fegetround.c
new file mode 100644
index 0000000..4f47dd1
--- /dev/null
+++ b/ports/sysdeps/microblaze/fegetround.c
@@ -0,0 +1,24 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+
+int
+fegetround (void)
+{
+  return FE_TONEAREST;
+}
diff --git a/ports/sysdeps/microblaze/fesetround.c b/ports/sysdeps/microblaze/fesetround.c
new file mode 100644
index 0000000..8ca4e51
--- /dev/null
+++ b/ports/sysdeps/microblaze/fesetround.c
@@ -0,0 +1,25 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+
+int
+fesetround (int round)
+{
+  return (round == FE_TONEAREST) ? 0 : 1;
+}
+libm_hidden_def (fesetround)
diff --git a/ports/sysdeps/microblaze/gccframe.h b/ports/sysdeps/microblaze/gccframe.h
new file mode 100644
index 0000000..4561cf2
--- /dev/null
+++ b/ports/sysdeps/microblaze/gccframe.h
@@ -0,0 +1,21 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define FIRST_PSEUDO_REGISTER 78
+
+#include <sysdeps/generic/gccframe.h>
diff --git a/ports/sysdeps/microblaze/jmpbuf-unwind.h b/ports/sysdeps/microblaze/jmpbuf-unwind.h
new file mode 100644
index 0000000..237b035
--- /dev/null
+++ b/ports/sysdeps/microblaze/jmpbuf-unwind.h
@@ -0,0 +1,46 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <setjmp.h>
+#include <stdint.h>
+#include <unwind.h>
+#include <sysdep.h>
+
+/* Test if longjmp to JMPBUF would unwind the frame
+   containing a local variable at ADDRESS.  */
+#define _JMPBUF_UNWINDS(jmpbuf, address, demangle)		\
+  ((void *) (address) < (void *) demangle ((jmpbuf)[0].__sp))
+
+#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
+  _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
+
+static inline uintptr_t __attribute__ ((unused))
+_jmpbuf_sp (__jmp_buf regs)
+{
+  uintptr_t sp = regs[0].__sp;
+#ifdef PTR_DEMANGLE
+  PTR_DEMANGLE (sp);
+#endif
+  return sp;
+}
+
+#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
+  ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj))
+
+/* We use the normal longjmp for unwinding.  */
+#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
diff --git a/ports/sysdeps/microblaze/ldsodefs.h b/ports/sysdeps/microblaze/ldsodefs.h
new file mode 100644
index 0000000..bf64bd2
--- /dev/null
+++ b/ports/sysdeps/microblaze/ldsodefs.h
@@ -0,0 +1,41 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MICROBLAZE_LDSODEFS_H
+#define _MICROBLAZE_LDSODEFS_H 1
+
+#include <elf.h>
+
+struct La_microblaze_regs;
+struct La_microblaze_retval;
+
+#define ARCH_PLTENTER_MEMBERS \
+    Elf32_Addr (*microblaze_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *,	\
+				     uintptr_t *, struct La_microblaze_regs *,	\
+				     unsigned int *, const char *name,		\
+				     long int *framesizep);
+
+#define ARCH_PLTEXIT_MEMBERS \
+    unsigned int (*microblaze_gnu_pltexit) (Elf32_Sym *, unsigned int, uintptr_t *,	\
+				      uintptr_t *,				\
+				      const struct La_microblaze_regs *,		\
+				      struct La_microblaze_retval *, const char *);
+
+#include_next <ldsodefs.h>
+
+#endif
diff --git a/ports/sysdeps/microblaze/libc-tls.c b/ports/sysdeps/microblaze/libc-tls.c
new file mode 100644
index 0000000..1dacdca
--- /dev/null
+++ b/ports/sysdeps/microblaze/libc-tls.c
@@ -0,0 +1,32 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <csu/libc-tls.c>
+#include <dl-tls.h>
+
+/* On Microblaze, linker optimizations are not required, so __tls_get_addr
+   can be called even in statically linked binaries.  In this case module
+   must be always 1 and PT_TLS segment exist in the binary, otherwise it
+   would not link.  */
+
+void *
+__tls_get_addr (tls_index *ti)
+{
+  dtv_t *dtv = THREAD_DTV ();
+  return (char *) dtv[1].pointer.val + ti->ti_offset;
+}
diff --git a/ports/sysdeps/microblaze/libm-test-ulps b/ports/sysdeps/microblaze/libm-test-ulps
new file mode 100644
index 0000000..9fde9b1
--- /dev/null
+++ b/ports/sysdeps/microblaze/libm-test-ulps
@@ -0,0 +1,1728 @@
+# Begin of automatic generation
+
+# atan2
+Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025":
+float: 1
+ifloat: 1
+Test "atan2 (-max_value, -min_value) == -pi/2":
+float: 1
+ifloat: 1
+Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025":
+float: 1
+ifloat: 1
+Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772":
+float: 1
+ifloat: 1
+
+# atanh
+Test "atanh (0.75) == 0.972955074527656652552676371721589865":
+float: 1
+ifloat: 1
+
+# cacos
+Test "Imaginary part of: cacos (+0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (+0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-1.0 + 0x1p50 i) == 1.570796326794897507409741391764983781004 - 3.535050620855721078027883819436759661753e1 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-1.0 - 0x1p50 i) == 1.570796326794897507409741391764983781004 + 3.535050620855721078027883819436759661753e1 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-2 - 3 i) == 2.1414491111159960199416055713254211 + 1.9833870299165354323470769028940395 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (0.5 + +0 i) == 1.047197551196597746154214461093167628066 - 0 i":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 0 i) == 1.047197551196597746154214461093167628066 + +0 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp1023 + 0x1.fp1023 i) == 7.853981633974483096156608458198757210493e-1 - 7.107906849659093345062145442726115449315e2 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp127 + 0x1.fp127 i) == 7.853981633974483096156608458198757210493e-1 - 8.973081118419833726837456344608533993585e1 i":
+double: 1
+idouble: 1
+
+# cacosh
+Test "Real part of: cacosh (+0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (+0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 + +0 i) == +0 + 2.094395102393195492308428922186335256131 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 - 0 i) == +0 - 2.094395102393195492308428922186335256131 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + pi i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - pi i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - 0 i":
+float: 1
+ifloat: 1
+
+# casin
+Test "Imaginary part of: casin (+0 + 0.5 i) == +0 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 + 1.0 i) == +0 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 + 1.5 i) == +0 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (+0 - 0.5 i) == +0 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 - 1.0 i) == +0 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 - 1.5 i) == +0 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0 + 0.5 i) == -0 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 + 1.0 i) == -0 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 + 1.5 i) == -0 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0 - 0.5 i) == -0 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 - 1.0 i) == -0 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 - 1.5 i) == -0 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp1023 + 0x1.fp1023 i) == 7.853981633974483096156608458198757210493e-1 + 7.107906849659093345062145442726115449315e2 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp127 + 0x1.fp127 i) == 7.853981633974483096156608458198757210493e-1 + 8.973081118419833726837456344608533993585e1 i":
+double: 1
+idouble: 1
+
+# casinh
+Test "Real part of: casinh (-0.5 + +0 i) == -0.4812118250596034474977589134243684231352 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 0 i) == -0.4812118250596034474977589134243684231352 - 0 i":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 + +0 i) == -0.8813735870195430252326093249797923090282 + +0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 - 0 i) == -0.8813735870195430252326093249797923090282 - 0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.5 + +0 i) == -1.194763217287109304111930828519090523536 + +0 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.5 - 0 i) == -1.194763217287109304111930828519090523536 - 0 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0.5 + +0 i) == 0.4812118250596034474977589134243684231352 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0 i) == 0.4812118250596034474977589134243684231352 - 0 i":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (0x1.fp1023 + 0x1.fp1023 i) == 7.107906849659093345062145442726115449315e2 + 7.853981633974483096156608458198757210493e-1 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1.fp127 + 0x1.fp127 i) == 8.973081118419833726837456344608533993585e1 + 7.853981633974483096156608458198757210493e-1 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.0 + +0 i) == 0.8813735870195430252326093249797923090282 + +0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 - 0 i) == 0.8813735870195430252326093249797923090282 - 0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.5 + +0 i) == 1.194763217287109304111930828519090523536 + +0 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.5 - 0 i) == 1.194763217287109304111930828519090523536 - 0 i":
+double: 1
+idouble: 1
+
+# catan
+Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# catanh
+Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
+double: 4
+idouble: 4
+Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
+double: 1
+idouble: 1
+
+# cbrt
+Test "cbrt (-27.0) == -3.0":
+double: 1
+idouble: 1
+Test "cbrt (0.75) == 0.908560296416069829445605878163630251":
+double: 1
+idouble: 1
+Test "cbrt (0.9921875) == 0.997389022060725270579075195353955217":
+double: 1
+idouble: 1
+
+# ccos
+Test "Imaginary part of: ccos (-0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (-0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (-0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (-0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
+float: 1
+ifloat: 1
+Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0x1p-1074 + 1440 i) == inf - 5.981479269486130556466515778180916082415e301 i":
+double: 1
+idouble: 1
+
+# ccosh
+Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (-710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (-89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (1440 + 0x1p-1074 i) == inf + 5.981479269486130556466515778180916082415e301 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+
+# cexp
+Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (-95 + 0.75 i) == 4.039714446238306526889476684000081624047e-42 + 3.763383677300535390271646960780570275931e-42 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (1440 + 0x1p-1074 i) == inf + 1.196295853897226111293303155636183216483e302 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (500 + 0x1p1023 i) == -1.159886268932754433233243794561351783426e217 + 7.904017694554466595359379965081774849708e216 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i":
+float: 2
+ifloat: 2
+
+# clog
+Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 2.649094276923003995420209214900915462737e-10 + 3.141592653589793238462643383279502884197 i":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 2.649094282537168795982991778475646793277e-10 + 3.141592652530155111500161671113150737892 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (-0x1.234566p-40 - 1.0 i) == 5.354083939753840089583620652120903838944e-25 - 1.570796326795931422008642456283782656359 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.fp+127 + 0x1p-149 i) == 88.69109041335841930424871526389807508374 + pi i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.fp+127 - 0x1p-149 i) == 88.69109041335841930424871526389807508374 - pi i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x0.ffffffp0 + 0x0.ffffffp-100 i) == -5.960464655174753498633255797994360530379e-8 + 7.888609052210118054117285652827862296732e-31 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000566p0 + 0x1.234p-10 i) == 8.298731898331237038231468223024422855654e-5 + 1.110938609507128729312743251313024793990e-3 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.fp+127 + 0x1p-149 i) == 88.69109041335841930424871526389807508374 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.fp+127 - 0x1p-149 i) == 88.69109041335841930424871526389807508374 - 0 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i) == -744.0934983311012896593986823853525458290 + pi/4 i":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1p-147 + 0x1p-147 i) == -101.5460619520319878296245057936228672231 + pi/4 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x2818p-15 + 0x798fp-15 i) == 1.5366822245016167178749091974664853785194e-08 + 1.2522014929038946066987318471922169174157 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (1.0 + 0x1.234566p-10 i) == 6.172834701221959432440126967147726538097e-7 + 1.111110564353742042376451655136933182201e-3 i":
+float: 1
+ifloat: 1
+
+# clog10
+Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 1.150487026509145544402795327729455391948e-10 + 1.364376353841841347485783625431355770210 i":
+double: 2
+idouble: 2
+Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 1.150487026509145544402795327729455391948e-10 + 1.364376353841841347485783625431355770210 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 1.150487028947346337782682105935961875822e-10 + 1.364376353381646356131680448946397884147 i":
+double: 2
+idouble: 2
+Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 1.150487028947346337782682105935961875822e-10 + 1.364376353381646356131680448946397884147 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1.fp+1023 + 0x1p-1074 i) == 308.2409272754311106024666378243768099991 + 1.364376353841841347485783625431355770210 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1.fp+1023 - 0x1p-1074 i) == 308.2409272754311106024666378243768099991 - 1.364376353841841347485783625431355770210 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1.fp+127 + 0x1p-149 i) == 38.51805116050395969095658815123105801479 + 1.364376353841841347485783625431355770210 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-0x1.fp+127 - 0x1p-149 i) == 38.51805116050395969095658815123105801479 - 1.364376353841841347485783625431355770210 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-0x1p-1074 + 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 + 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1p-1074 - 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 - 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1p-149 + 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 + 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1p-149 - 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 - 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-1.0 + 0x1.234566p-20 i) == 2.556638434669064077889576526006849923281e-13 + 1.364375882602207106407956770293808181427 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (0x0.fffffffffffff8p0 + 0x0.fffffffffffff8p-1000 i) == -4.821637332766435821255375046554377090472e-17 + 4.053112396770095089737411317782466262176e-302 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x0.ffffffp0 + 0x0.ffffffp-100 i) == -2.588596909321764128428416045209904492216e-8 + 3.425979381266895667295625489912064603415e-31 i":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-10 i) == 3.604093470239754109961125085078190708674e-5 + 4.824745078422174667425851670822596859720e-4 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-10 i) == 3.604093470239754109961125085078190708674e-5 + 4.824745078422174667425851670822596859720e-4 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-100 i) == 3.577293486783822178310971763308187385546e-5 + 3.897399639875661463735636919790792140598e-31 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.234566p-30 + 1.0 i) == 2.438200411482400072282924063740535840474e-19 + 6.821881764607257184291586401763604544928e-1 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.234566p-50 + 1.0 i) == 2.217530356103816369479108963807448194409e-31 + 6.821881769209202348667823902864283966959e-1 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.234566p-60 + 1.0 i) == 2.114801746467415208319767917450504756866e-37 + 6.821881769209206733143018621078368211515e-1 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i) == 38.68235441693561449174780668781319348761 + pi/4*log10(e) i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (0x1.fffffep+127 + 1.0 i) == 38.53183941910362389414093724045094697423 + 1.276276851248440096917018665609900318458e-39 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i) == 1.3918041236396763648388478552321724382899e-29 + 0.6263795733790237053262025311642907438291 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i) == 2.2081507730821788480616336165447731164865e-32 + 0.5484039935757001196548030312819898864760 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i) == 2.2081507730821788480616336165447731164865e-32 + 0.5484039935757001196548030312819898864760 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x164c74eea876p-45 + 0x16f393482f77p-45 i) == -1.3155760824064879362415202279780039150764e-26 + 0.3473590599762514228227328130640352044313 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1a6p-10 + 0x3a5p-10 i) == -6.2126412844802358329771948751248003038444e-07 + 0.4977135139537443711784513409096950995985 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1074 + 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 + 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1p-1074 + 0x1p-1074 i) == -323.1557003452838130619487034867432642357 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1074 - 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 - 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-147 + 0x1p-147 i) == -44.10089436477324509881274807713822842154 + pi/4*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-149 + 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 + 0.6821881769209206737428918127156778851051 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-149 + 0x1p-149 i) == -44.70295435610120748924022586658721447508 + pi/4*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-149 - 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 - 0.6821881769209206737428918127156778851051 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-509 + 1.0 i) == 7.730698388614835910296270976605350994446e-308 + 6.821881769209206737428918127156778851051e-1 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-510 + 1.0 i) == 1.932674597153708977574067744151337748612e-308 + 6.821881769209206737428918127156778851051e-1 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-511 + 1.0 i) == 4.831686492884272443935169360378344371529e-309 + 6.821881769209206737428918127156778851051e-1 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-61 + 1.0 i) == 4.084085680564517578238994467153626207224e-38 + 6.821881769209206735545466044044889962925e-1 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-62 + 1.0 i) == 1.021021420141129394559748616788406551878e-38 + 6.821881769209206736487192085600834406988e-1 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-63 + 1.0 i) == 2.552553550352823486399371541971016379740e-39 + 6.821881769209206736958055106378806629019e-1 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog10 (0x2818p-15 + 0x798fp-15 i) == 6.6737261053986614395049481326819059203910e-09 + 0.5438241985991753781478398141908629586460 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x2818p-15 + 0x798fp-15 i) == 6.6737261053986614395049481326819059203910e-09 + 0.5438241985991753781478398141908629586460 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (0x2dd46725bp-35 + 0x7783a1284p-35 i) == 1.9312741086596516918394613098872836703188e-20 + 0.5231613813514771042838490538484014771862 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i) == -1.9440841725722970687903291200493082253766e-13 + 0.5193774116724956222518530053006822210323 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i) == -1.9440841725722970687903291200493082253766e-13 + 0.5193774116724956222518530053006822210323 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x4447d7175p-35 + 0x6c445e00ap-35 i) == -6.4375803621988389731799033530075237868110e-21 + 0.4378257977686804492768642780897650927167 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i) == 3.6079845358966994996207055940336690133424e-30 + 0.5243112258263349992771652393178033846555 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x9b57bp-20 + 0xcb7b4p-20 i) == -1.7182001068739620267773842120965071561416e-11 + 0.3990121149225253562859800593935899629087 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0xf2p-10 + 0x3e3p-10 i) == 2.6921240173351112953324592659528481616879e-06 + 0.5785726025799636431142862788413361783862 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0xf2p-10 + 0x3e3p-10 i) == 2.6921240173351112953324592659528481616879e-06 + 0.5785726025799636431142862788413361783862 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i) == 2.3329549194675052736016290082882121135546e-26 + 0.4561756099441139182878993697611751382976 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (1.0 + 0x1.234566p-10 i) == 2.680828048441605163181684680300513080769e-7 + 4.825491868832381486767558728169977751564e-4 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i":
+float: 1
+ifloat: 1
+
+# cos
+Test "cos (0x1p+120) == -9.25879022854837867303861764107414946730833e-01":
+float: 1
+ifloat: 1
+Test "cos (0x1p+127) == 7.81914638714960072263910298466369236613162e-01":
+float: 1
+ifloat: 1
+Test "cos (M_PI_6l * 2.0) == 0.5":
+double: 1
+idouble: 1
+Test "cos (M_PI_6l * 4.0) == -0.5":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+# cos_tonearest
+Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+
+# cpow
+Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
+float: 1
+ifloat: 1
+Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
+double: 1
+float: 4
+idouble: 1
+ifloat: 4
+Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
+double: 1
+float: 4
+idouble: 1
+ifloat: 4
+Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+# csin
+Test "Real part of: csin (-0.75 + 710.5 i) == -1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i":
+double: 1
+idouble: 1
+Test "Real part of: csin (-0.75 + 89.5 i) == -2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: csin (-0.75 - 710.5 i) == -1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i":
+double: 1
+idouble: 1
+Test "Real part of: csin (-0.75 - 89.5 i) == -2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: csin (0.75 + 710.5 i) == 1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i":
+double: 1
+idouble: 1
+Test "Real part of: csin (0.75 + 89.5 i) == 2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: csin (0.75 - 710.5 i) == 1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i":
+double: 1
+idouble: 1
+Test "Real part of: csin (0.75 - 89.5 i) == 2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: csin (0x1p-1074 + 1440 i) == 5.981479269486130556466515778180916082415e301 + inf i":
+double: 1
+idouble: 1
+
+# csinh
+Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (-710.5 + 0.75 i) == -1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (-710.5 - 0.75 i) == -1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (-89.5 + 0.75 i) == -2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (-89.5 - 0.75 i) == -2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (1440 + 0x1p-1074 i) == inf + 5.981479269486130556466515778180916082415e301 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+
+# csqrt
+Test "Real part of: csqrt (-0x1.000002p-126 - 0x1.000002p-126 i) == 4.934094449071842328766868579214125217132e-20 - 1.191195773697904627170323731331667740087e-19 i":
+double: 1
+idouble: 1
+Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csqrt (0x1.000002p-126 + 0x1.000002p-126 i) == 1.191195773697904627170323731331667740087e-19 + 4.934094449071842328766868579214125217132e-20 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffep+127 + 1.0 i) == 1.844674352395372953599975585936590505260e+19 + 2.710505511993121390769065968615872097053e-20 i":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 1.379778091031440685006200821918878702861e+154 + 3.257214233483129514781233066898042490248e+153 i":
+double: 1
+idouble: 1
+
+# ctan
+Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1p1023 + 1 i) == -0.2254627924997545057926782581695274244229 + 0.8786063118883068695462540226219865087189 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0x1p127 + 1 i) == 0.2446359391192790896381501310437708987204 + 0.9101334047676183761532873794426475906201 i":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x3.243f6cp-1 + 0 i) == -2.287733242885645987394874673945769518150e7 + 0.0 i":
+float: 1
+ifloat: 1
+
+# ctan_tonearest
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i":
+float: 1
+ifloat: 1
+
+# ctanh
+Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0 + 0x3.243f6cp-1 i) == 0.0 - 2.287733242885645987394874673945769518150e7 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
+float: 2
+ifloat: 2
+Test "Imaginary part of: ctanh (1 + 0x1p1023 i) == 0.8786063118883068695462540226219865087189 - 0.2254627924997545057926782581695274244229 i":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (1 + 0x1p127 i) == 0.9101334047676183761532873794426475906201 + 0.2446359391192790896381501310437708987204 i":
+double: 1
+idouble: 1
+
+# ctanh_tonearest
+Test "Real part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i":
+float: 1
+ifloat: 1
+
+# erf
+Test "erf (1.25) == 0.922900128256458230136523481197281140":
+double: 1
+idouble: 1
+
+# erfc
+Test "erfc (0x1.f7303cp+1) == 2.705500297238986897105236321218861842255e-8":
+double: 1
+idouble: 1
+Test "erfc (0x1.ffa002p+2) == 1.233585992097580296336099501489175967033e-29":
+float: 1
+ifloat: 1
+Test "erfc (2.0) == 0.00467773498104726583793074363274707139":
+double: 1
+idouble: 1
+Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8":
+double: 1
+idouble: 1
+
+# exp10
+Test "exp10 (-1) == 0.1":
+double: 1
+idouble: 1
+Test "exp10 (-305) == 1.0e-305":
+double: 1
+idouble: 1
+Test "exp10 (-36) == 1.0e-36":
+double: 1
+idouble: 1
+Test "exp10 (3) == 1000":
+double: 1
+idouble: 1
+Test "exp10 (36) == 1.0e36":
+double: 1
+idouble: 1
+
+# expm1
+Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
+double: 1
+idouble: 1
+Test "expm1 (1) == M_El - 1.0":
+float: 1
+ifloat: 1
+Test "expm1 (500.0) == 1.4035922178528374107397703328409120821806e+217":
+double: 1
+idouble: 1
+
+# fma
+Test "fma (-0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983) == 0x1.7ffffe00007ffp-983":
+double: 1
+idouble: 1
+Test "fma (0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300) == 0x1.fffffffffffffp-1":
+double: 1
+idouble: 1
+Test "fma (0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022) == -0x0.b22757123bbe9p-1022":
+double: 1
+idouble: 1
+Test "fma (0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022) == 0x0.0000010000003p-1022":
+double: 1
+idouble: 1
+Test "fma (0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24) == 0x1.7ff802p+13":
+float: 1
+ifloat: 1
+Test "fma (0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022) == 0x0.0000010000001p-1022":
+double: 1
+idouble: 1
+
+# hypot
+Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (-0.7, 12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (-12.4, -0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (-12.4, 0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (12.4, -0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+
+# j0
+Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "j0 (0.75) == 0.864242275166648623555731103820923211":
+float: 1
+ifloat: 1
+Test "j0 (0x1.d7ce3ap+107) == 2.775523647291230802651040996274861694514e-17":
+float: 2
+ifloat: 2
+Test "j0 (10.0) == -0.245935764451348335197760862485328754":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "j0 (2.0) == 0.223890779141235668051827454649948626":
+float: 2
+ifloat: 2
+Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "j0 (8.0) == 0.171650807137553906090869407851972001":
+float: 1
+ifloat: 1
+
+# j1
+Test "j1 (0x1.3ffp+74) == 1.818984347516051243459364437186082741567e-12":
+double: 1
+idouble: 1
+Test "j1 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
+double: 1
+idouble: 1
+Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
+float: 2
+ifloat: 2
+Test "j1 (2.0) == 0.576724807756873387202448242269137087":
+double: 1
+idouble: 1
+Test "j1 (8.0) == 0.234636346853914624381276651590454612":
+double: 1
+idouble: 1
+
+# jn
+Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (0, 0.75) == 0.864242275166648623555731103820923211":
+float: 1
+ifloat: 1
+Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
+float: 2
+ifloat: 2
+Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
+float: 1
+ifloat: 1
+Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
+float: 2
+ifloat: 2
+Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
+double: 1
+idouble: 1
+Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
+double: 1
+idouble: 1
+Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "jn (2, 0x1.ffff62p+99) == -4.43860668048170034334926693188979974489e-16":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+Test "jn (2, 2.4048255576957729) == 0.43175480701968038399746111312430703":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
+float: 1
+ifloat: 1
+Test "jn (3, 2.4048255576957729) == 0.19899990535769083404042146764530813":
+double: 3
+idouble: 3
+Test "jn (4, 2.4048255576957729) == 0.647466661641779720084932282551219891E-1":
+double: 1
+idouble: 1
+Test "jn (5, 2.4048255576957729) == 0.163892432048058525099230549946147698E-1":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "jn (6, 2.4048255576957729) == 0.34048184720278336646673682895929161E-2":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+Test "jn (7, 2.4048255576957729) == 0.60068836573295394221291569249883076E-3":
+double: 3
+float: 5
+idouble: 3
+ifloat: 5
+Test "jn (8, 2.4048255576957729) == 0.92165786705344923232879022467054148E-4":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+Test "jn (9, 2.4048255576957729) == 0.12517270977961513005428966643852564E-4":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+# lgamma
+Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+# log10
+Test "log10 (0.75) == -0.124938736608299953132449886193870744":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "log10 (e) == log10(e)":
+float: 1
+ifloat: 1
+
+# log1p
+Test "log1p (-0.25) == -0.287682072451780927439219005993827432":
+float: 1
+ifloat: 1
+
+# pow
+Test "pow (0x0.ffffffp0, -0x1p24) == 2.7182819094701610539628664526874952929416":
+float: 1
+ifloat: 1
+Test "pow (0x0.ffffffp0, 0x1p24) == 0.3678794302077803437135155590023422899744":
+float: 1
+ifloat: 1
+Test "pow (0x1.000002p0, 0x1p24) == 7.3890552180866447284268641248075832310141":
+float: 1
+ifloat: 1
+
+# sin_tonearest
+Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226":
+float: 1
+ifloat: 1
+
+# sincos
+Test "sincos (0x1p+120, &sin_res, &cos_res) puts -9.25879022854837867303861764107414946730833e-01 in cos_res":
+float: 1
+ifloat: 1
+Test "sincos (0x1p+127, &sin_res, &cos_res) puts 7.81914638714960072263910298466369236613162e-01 in cos_res":
+float: 1
+ifloat: 1
+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
+double: 1
+idouble: 1
+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
+float: 1
+ifloat: 1
+
+# tgamma
+Test "tgamma (-0.5) == -2 sqrt (pi)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0.5) == sqrt (pi)":
+float: 1
+ifloat: 1
+Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# y0
+Test "y0 (0x1.3ffp+74) == 1.818984347516051243459467456433028748678e-12":
+double: 1
+idouble: 1
+Test "y0 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
+double: 1
+idouble: 1
+Test "y0 (0x1p-10) == -4.4865150767109739412411806297168793661098":
+double: 1
+idouble: 1
+Test "y0 (0x1p-110) == -4.861363632869203777249475899390797503250e+1":
+double: 1
+idouble: 1
+Test "y0 (0x1p-20) == -8.8992283012125827603076426611387876938160":
+float: 1
+ifloat: 1
+Test "y0 (0x1p-30) == -1.3311940304267782826037118027401817264906e+1":
+float: 1
+ifloat: 1
+Test "y0 (0x1p-40) == -1.7724652307320814696990854700366226762563e+1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y0 (0x1p-50) == -2.2137364310373846564919987139743760738155e+1":
+float: 1
+ifloat: 1
+Test "y0 (0x1p-70) == -3.0962788316479910300778244424468159753887e+1":
+double: 1
+idouble: 1
+Test "y0 (0x1p-80) == -3.5375500319532942168707373066828113573541e+1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "y0 (1.5) == 0.382448923797758843955068554978089862":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
+float: 1
+ifloat: 1
+Test "y0 (8.0) == 0.223521489387566220527323400498620359":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# y1
+Test "y1 (0.125) == -5.19993611253477499595928744876579921":
+double: 1
+idouble: 1
+Test "y1 (0x1.27e204p+99) == -8.881610148467797208469612080785210013461e-16":
+double: 1
+idouble: 1
+Test "y1 (0x1p-10) == -6.5190099301063115047395187618929589514382e+02":
+double: 1
+idouble: 1
+Test "y1 (1.5) == -0.412308626973911295952829820633445323":
+float: 1
+ifloat: 1
+Test "y1 (10.0) == 0.249015424206953883923283474663222803":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "y1 (2.0) == -0.107032431540937546888370772277476637":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y1 (8.0) == -0.158060461731247494255555266187483550":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+# yn
+Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
+float: 1
+ifloat: 1
+Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
+double: 1
+idouble: 1
+Test "yn (1, 1.5) == -0.412308626973911295952829820633445323":
+float: 1
+ifloat: 1
+Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (1, 8.0) == -0.158060461731247494255555266187483550":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
+double: 1
+idouble: 1
+Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (10, 1.0) == -121618014.278689189288130426667971145":
+double: 1
+idouble: 1
+Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
+double: 2
+idouble: 2
+Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
+double: 1
+idouble: 1
+Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (3, 10.0) == -0.251362657183837329779204747654240998":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
+double: 1
+idouble: 1
+
+# Maximal error of functions:
+Function: "atan2":
+float: 1
+ifloat: 1
+
+Function: "atanh":
+float: 1
+ifloat: 1
+
+Function: Real part of "cacos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "cacos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "cacosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "cacosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "casin":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "casin":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "casinh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "casinh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "catan":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "catanh":
+double: 4
+idouble: 4
+
+Function: "cbrt":
+double: 1
+idouble: 1
+
+Function: Real part of "ccos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ccos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "ccosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ccosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "cexp":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: Imaginary part of "cexp":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: Real part of "clog":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "clog":
+float: 1
+ifloat: 1
+
+Function: Real part of "clog10":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Imaginary part of "clog10":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "cos":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: "cos_tonearest":
+float: 1
+ifloat: 1
+
+Function: Real part of "cpow":
+double: 2
+float: 4
+idouble: 2
+ifloat: 4
+
+Function: Imaginary part of "cpow":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Real part of "csin":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "csinh":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "csinh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "csqrt":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "csqrt":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "ctan":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ctan":
+double: 1
+idouble: 1
+
+Function: Real part of "ctan_tonearest":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "ctan_tonearest":
+float: 1
+ifloat: 1
+
+Function: Real part of "ctanh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ctanh":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: Real part of "ctanh_tonearest":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "ctanh_tonearest":
+float: 1
+ifloat: 1
+
+Function: "erf":
+double: 1
+idouble: 1
+
+Function: "erfc":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "exp10":
+double: 1
+idouble: 1
+
+Function: "expm1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "fma":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "hypot":
+float: 1
+ifloat: 1
+
+Function: "j0":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: "j1":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: "jn":
+double: 4
+float: 5
+idouble: 4
+ifloat: 5
+
+Function: "lgamma":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: "log10":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: "log1p":
+float: 1
+ifloat: 1
+
+Function: "pow":
+float: 1
+ifloat: 1
+
+Function: "sin_tonearest":
+float: 1
+ifloat: 1
+
+Function: "sincos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "tan":
+double: 1
+idouble: 1
+
+Function: "tgamma":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "y0":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: "y1":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+
+Function: "yn":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+
+# end of automatic generation
diff --git a/ports/sysdeps/microblaze/machine-gmon.h b/ports/sysdeps/microblaze/machine-gmon.h
new file mode 100644
index 0000000..0cfaa19
--- /dev/null
+++ b/ports/sysdeps/microblaze/machine-gmon.h
@@ -0,0 +1,30 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* We need a special version of the `mcount' function because it has
+   to preserve more registers than your usual function.  */
+
+void __mcount_internal (unsigned long frompc, unsigned long selfpc);
+
+#define _MCOUNT_DECL(frompc, selfpc) \
+void __mcount_internal (unsigned long frompc, unsigned long selfpc)
+
+
+/* Define MCOUNT as empty since we have the implementation in another
+   file.  */
+#define MCOUNT
diff --git a/ports/sysdeps/microblaze/math_private.h b/ports/sysdeps/microblaze/math_private.h
new file mode 100644
index 0000000..4603fae
--- /dev/null
+++ b/ports/sysdeps/microblaze/math_private.h
@@ -0,0 +1,33 @@
+#ifndef _MATH_PRIVATE_H
+
+/* Suppress use of exceptions here to avoid build errors if the FE_*
+   macros aren't definied. Only allow rounding modes implemented for
+   MicroBlaze.
+
+   This does mean that some code will silently fail to report exceptions,
+   set rounding mode as expected, etc., but it allows math code to compile
+   that otherwise wouldn't (such as math/s_fma.c) and so is valuable.
+
+   We intentionally ignore the "exception" arguments of functions that
+   take an exception, since we can't even evaluate the argument
+   without causing a build failure.  The extra level of statement
+   expression wrapping avoids "statement with no effect" warnings.
+   Since the callers don't check for errors anyway, we just claim
+   success in every case.
+
+   The overrides for libc_ functions must happen before we include
+   the generic math_private.h, and the overrides for regular
+   <fenv.h> functions must happen afterwards, to avoid clashing with
+   the declarations of those functions.  */
+
+#define libc_fesetround(rnd)			({ 0; })
+#define libc_fetestexcept(exc)			({ 0; })
+#define libc_feholdexcept_setround(env, exc)	({ (void) (env); 0; })
+#define libc_feupdateenv_test(env, exc)		({ (void) (env); 0; })
+
+#include_next <math_private.h>
+
+#define feraiseexcept(excepts)			({ 0; })
+#define feclearexcept(exc)			({ 0; })
+
+#endif
diff --git a/ports/sysdeps/microblaze/memusage.h b/ports/sysdeps/microblaze/memusage.h
new file mode 100644
index 0000000..a4974b2
--- /dev/null
+++ b/ports/sysdeps/microblaze/memusage.h
@@ -0,0 +1,21 @@
+/* Copyright (C) 2000-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define GETSP() ({ register uintptr_t stack_ptr asm ("r1"); stack_ptr; })
+
+#include <sysdeps/generic/memusage.h>
diff --git a/ports/sysdeps/microblaze/nptl/Makefile b/ports/sysdeps/microblaze/nptl/Makefile
new file mode 100644
index 0000000..3c0521a
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/Makefile
@@ -0,0 +1,21 @@
+# Copyright (C) 2005-2013 Free Software Foundation, Inc.
+#
+# This file is part of the GNU C Library.
+#
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# The GNU C Library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library.  If not, see
+# <http://www.gnu.org/licenses/>.
+
+ifeq ($(subdir),csu)
+gen-as-const-headers += tcb-offsets.sym
+endif
diff --git a/ports/sysdeps/microblaze/nptl/pthread_spin_lock.c b/ports/sysdeps/microblaze/nptl/pthread_spin_lock.c
new file mode 100644
index 0000000..0d12517
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/pthread_spin_lock.c
@@ -0,0 +1,24 @@
+/* Copyright (C) 2008-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SPIN_LOCK_READS_BETWEEN_CMPXCHG 1000
+
+/* We can't use the normal "#include <nptl/pthread_spin_lock.c>" because
+   it will resolve to this very file.  Using "sysdeps/.." as reference to the
+   top level directory does the job.  */
+#include <sysdeps/../nptl/pthread_spin_lock.c>
diff --git a/ports/sysdeps/microblaze/nptl/pthreaddef.h b/ports/sysdeps/microblaze/nptl/pthreaddef.h
new file mode 100644
index 0000000..7250437
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/pthreaddef.h
@@ -0,0 +1,41 @@
+/* Copyright (C) 2002-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <string.h>
+
+/* Default stack size.  */
+#define ARCH_STACK_DEFAULT_SIZE	(2 * 1024 * 1024)
+
+/* Required stack pointer alignment at beginning.  */
+#define STACK_ALIGN		16
+
+/* Minimal stack size after allocating thread descriptor and guard size.  */
+#define MINIMAL_REST_STACK	2048
+
+/* Alignment requirement for TCB.  */
+#define TCB_ALIGNMENT		16
+
+
+/* Location of current stack frame.  */
+#define CURRENT_STACK_FRAME	__builtin_frame_address (0)
+
+/* XXX Until we have a better place keep the definitions here.  */
+
+#define __exit_thread_inline(val) \
+  INLINE_SYSCALL (exit, 1, (val))
diff --git a/ports/sysdeps/microblaze/nptl/tcb-offsets.sym b/ports/sysdeps/microblaze/nptl/tcb-offsets.sym
new file mode 100644
index 0000000..647ccc7
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/tcb-offsets.sym
@@ -0,0 +1,11 @@
+#include <sysdep.h>
+#include <tls.h>
+
+--
+
+-- Derive offsets relative to the thread register.
+#define thread_offsetof(mem)	(long)(offsetof (struct pthread, mem) - sizeof (struct pthread))
+
+MULTIPLE_THREADS_OFFSET		thread_offsetof (header.multiple_threads)
+PID_OFFSET			thread_offsetof (pid)
+TID_OFFSET			thread_offsetof (tid)
diff --git a/ports/sysdeps/microblaze/nptl/tls.h b/ports/sysdeps/microblaze/nptl/tls.h
new file mode 100644
index 0000000..998b499
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/tls.h
@@ -0,0 +1,155 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _TLS_H
+# define _TLS_H	1
+
+# include <dl-sysdep.h>
+
+#ifndef __ASSEMBLER__
+# include <stdbool.h>
+# include <stddef.h>
+# include <stdint.h>
+
+/* Type for the dtv.  */
+typedef union dtv
+{
+  size_t counter;
+  struct
+  {
+    void *val;
+    bool is_static;
+  } pointer;
+} dtv_t;
+
+#else /* __ASSEMBLER__ */
+# include <tcb-offsets.h>
+#endif /* __ASSEMBLER__ */
+
+#ifndef __ASSEMBLER__
+
+/* Get system call information.  */
+# include <sysdep.h>
+
+/* The TP points to the start of the thread blocks.  */
+# define TLS_DTV_AT_TP	1
+
+/* Get the thread descriptor definition.  */
+# include <nptl/descr.h>
+
+typedef struct
+{
+  dtv_t *dtv;
+  void *private;
+} tcbhead_t;
+
+static inline void *__microblaze_get_thread_area (void)
+{
+	register void * volatile __microblaze_thread_area asm ("r21");
+	return (void *)__microblaze_thread_area;
+}
+
+# define READ_THREAD_POINTER() \
+    ({ __microblaze_get_thread_area(); })
+
+/* This is the size of the initial TCB.  */
+# define TLS_INIT_TCB_SIZE	sizeof (tcbhead_t)
+
+/* Alignment requirements for the initial TCB.  */
+# define TLS_INIT_TCB_ALIGN	__alignof__ (tcbhead_t)
+
+/* This is the size of the TCB.  */
+# define TLS_TCB_SIZE		sizeof (tcbhead_t)
+
+/* This is the size we need before TCB.  */
+# define TLS_PRE_TCB_SIZE	sizeof (struct pthread)
+
+/* Alignment requirements for the TCB.  */
+# define TLS_TCB_ALIGN		__alignof__ (struct pthread)
+
+/* Install the dtv pointer.  The pointer passed is to the element with
+   index -1 which contain the length.  */
+# define INSTALL_DTV(tcbp, dtvp) \
+  (((tcbhead_t *) (tcbp))->dtv = (dtvp) + 1)
+
+/* Install new dtv for current thread.  */
+# define INSTALL_NEW_DTV(dtv) \
+  (THREAD_DTV() = (dtv))
+
+/* Return dtv of given thread descriptor.  */
+# define GET_DTV(tcbp) \
+  (((tcbhead_t *) (tcbp))->dtv)
+
+/* Code to initially initialize the thread pointer.
+   r21 is reserved for thread pointer.  */
+# define TLS_INIT_TP(tcbp, secondcall) \
+  ({ __asm __volatile ("or r21,r0,%0" : : "r" ((void *)tcbp)); 0; })
+
+/* Return the address of the dtv for the current thread.  */
+# define THREAD_DTV() \
+  (((tcbhead_t *) READ_THREAD_POINTER())->dtv)
+
+/* Return the thread descriptor for the current thread.  */
+# define THREAD_SELF \
+ (((struct pthread *) READ_THREAD_POINTER()) - 1)
+
+/* Magic for libthread_db to know how to do THREAD_SELF.  */
+# define DB_THREAD_SELF \
+  CONST_THREAD_AREA (32, sizeof (struct pthread))
+
+/* Read member of the thread descriptor directly.  */
+# define THREAD_GETMEM(descr, member) (descr->member)
+
+/* Same as THREAD_GETMEM, but the member offset can be non-constant.  */
+# define THREAD_GETMEM_NC(descr, member, idx) \
+    (descr->member[idx])
+
+/* Set member of the thread descriptor directly.  */
+# define THREAD_SETMEM(descr, member, value) \
+    (descr->member = (value))
+
+/* Same as THREAD_SETMEM, but the member offset can be non-constant.  */
+# define THREAD_SETMEM_NC(descr, member, idx, value) \
+    (descr->member[idx] = (value))
+
+/* Get and set the global scope generation counter in struct pthread.  */
+# define THREAD_GSCOPE_FLAG_UNUSED 0
+# define THREAD_GSCOPE_FLAG_USED   1
+# define THREAD_GSCOPE_FLAG_WAIT   2
+# define THREAD_GSCOPE_RESET_FLAG() \
+  do									     \
+    { int __res								     \
+	= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag,	     \
+			       THREAD_GSCOPE_FLAG_UNUSED);		     \
+      if (__res == THREAD_GSCOPE_FLAG_WAIT)				     \
+	lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE);   \
+    }									     \
+  while (0)
+# define THREAD_GSCOPE_SET_FLAG() \
+  do									     \
+    {									     \
+      THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED;	     \
+      atomic_write_barrier ();						     \
+    }									     \
+  while (0)
+# define THREAD_GSCOPE_WAIT() \
+  GL (dl_wait_lookup_done) ()
+
+#endif /* __ASSEMBLER__ */
+
+#endif	/* tls.h.  */
diff --git a/ports/sysdeps/microblaze/preconfigure b/ports/sysdeps/microblaze/preconfigure
new file mode 100644
index 0000000..90e2e63
--- /dev/null
+++ b/ports/sysdeps/microblaze/preconfigure
@@ -0,0 +1,3 @@
+case "$machine" in
+microblaze*)	base_machine=microblaze machine=microblaze ;;
+esac
diff --git a/ports/sysdeps/microblaze/setjmp.S b/ports/sysdeps/microblaze/setjmp.S
new file mode 100644
index 0000000..28abcb2
--- /dev/null
+++ b/ports/sysdeps/microblaze/setjmp.S
@@ -0,0 +1,75 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+/* This source produces 3 functions:
+   __sigsetjmp (jmpbuf,savemask)
+   setjmp (jmpbuf) - equivalent to __sigsetjump (jmpbuf, 1)
+   _setjmp (jmpbuf) - equivalent to __sigsetjump (jmpbuf, 0)
+*/
+
+#ifndef setjmp_name
+# define setjmp_name __sigsetjmp
+# define SET_MASK_ARG
+#else
+# define SET_MASK_ARG    addik r6,r0,SAVEMASK
+#endif
+
+ENTRY (setjmp_name)
+    swi   r1,r5,0
+    swi   r2,r5,4
+    swi   r13,r5,8
+    swi   r14,r5,12
+    swi   r15,r5,16
+    swi   r16,r5,20
+    swi   r17,r5,24
+    swi   r18,r5,28
+    swi   r19,r5,32
+    swi   r20,r5,36
+    swi   r21,r5,40
+    swi   r22,r5,44
+    swi   r23,r5,48
+    swi   r24,r5,52
+    swi   r25,r5,56
+    swi   r26,r5,60
+    swi   r27,r5,64
+    swi   r28,r5,68
+    swi   r29,r5,72
+    swi   r30,r5,76
+    swi   r31,r5,80
+
+    SET_MASK_ARG
+
+	/* Make a tail call to __sigjmp_save; it takes the same args.  */
+#ifdef	PIC
+	/* We cannot use the PLT, because it requires that r20 be set, but
+           we can't save and restore our caller's value.  Instead, we do an
+           indirect jump through the GOT, using for the temporary register
+           %ecx, which is call-clobbered.  */
+    mfs   r12,rpc
+    addik r12,r12,_GLOBAL_OFFSET_TABLE_+8
+    lwi   r12,r12,__sigjmp_save@GOT
+    brad  r12
+#else
+    brid  __sigjmp_save
+#endif
+    nop
+END (setjmp_name)
+
+libc_hidden_def (setjmp_name)
diff --git a/ports/sysdeps/microblaze/shlib-versions b/ports/sysdeps/microblaze/shlib-versions
new file mode 100644
index 0000000..6ec43db
--- /dev/null
+++ b/ports/sysdeps/microblaze/shlib-versions
@@ -0,0 +1 @@
+microblaze.*-.*-linux.*	DEFAULT			GLIBC_2.18
diff --git a/ports/sysdeps/microblaze/sotruss-lib.c b/ports/sysdeps/microblaze/sotruss-lib.c
new file mode 100644
index 0000000..26c2b9b
--- /dev/null
+++ b/ports/sysdeps/microblaze/sotruss-lib.c
@@ -0,0 +1,49 @@
+/* Override generic sotruss-lib.c to define actual functions for MicroBlaze.
+   Copyright (C) 2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define HAVE_ARCH_PLTENTER
+#define HAVE_ARCH_PLTEXIT
+
+#include <elf/sotruss-lib.c>
+
+ElfW(Addr)
+la_microblaze_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)),
+                     unsigned int ndx __attribute__ ((unused)),
+                     uintptr_t *refcook, uintptr_t *defcook,
+                     La_microblaze_regs *regs, unsigned int *flags,
+                     const char *symname, long int *framesizep)
+{
+  print_enter (refcook, defcook, symname,
+	       regs->lr_r0, regs->lr_r1, regs->lr_sp,
+	       *flags);
+
+  /* No need to copy anything, we will not need the parameters in any case.  */
+  *framesizep = 0;
+
+  return sym->st_value;
+}
+
+unsigned int
+la_microblaze_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
+                    uintptr_t *defcook, const struct La_microblaze_regs *inregs,
+                    struct La_microblaze_retval *outregs, const char *symname)
+{
+  print_exit (refcook, defcook, symname, outregs->lrv_r3);
+
+  return 0;
+}
diff --git a/ports/sysdeps/microblaze/stackinfo.h b/ports/sysdeps/microblaze/stackinfo.h
new file mode 100644
index 0000000..542bc6f
--- /dev/null
+++ b/ports/sysdeps/microblaze/stackinfo.h
@@ -0,0 +1,34 @@
+/* Copyright (C) 2001-2012 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This file contains a bit of information about the stack allocation
+   of the processor.  */
+
+#ifndef _STACKINFO_H
+# define _STACKINFO_H	1
+
+# include <elf.h>
+
+/* On MicroBlaze the stack grows down.  */
+# define _STACK_GROWS_DOWN	1
+
+/* Default to an executable stack.  PF_X can be overridden if PT_GNU_STACK is
+ * present, but it is presumed absent.  */
+# define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X)
+
+#endif	/* stackinfo.h.  */
diff --git a/ports/sysdeps/microblaze/start.S b/ports/sysdeps/microblaze/start.S
new file mode 100644
index 0000000..675daae
--- /dev/null
+++ b/ports/sysdeps/microblaze/start.S
@@ -0,0 +1,84 @@
+/* Copyright (C) 1995-2012 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   In addition to the permissions in the GNU Lesser General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file with other
+   programs, and to distribute those programs without any restriction
+   coming from the use of this file. (The GNU Lesser General Public
+   License restrictions do apply in other respects; for example, they
+   cover modification of the file, and distribution when not linked
+   into another program.)
+
+   Note that people who make modified versions of this file are not
+   obligated to grant this special exception for their modified
+   versions; it is their choice whether to do so. The GNU Lesser
+   General Public License gives permission to release a modified
+   version without this exception; this exception also makes it
+   possible to release a modified version which carries forward this
+   exception.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+	.text
+	.globl _start
+	.type _start,@function
+_start:
+	/* On entry the stack contains the following args:
+           r1+0 - argc
+           r1+4 - argv[0]
+           ...
+           r1+4*(argc-1) - argv[argc-1]
+           r1+4*argc - NULL
+           r1+4*argc + 4 - envp[0]
+           ...
+           NULL
+	*/
+	addk	r3,r0,r0
+	addk	r5,r1,r0
+1:
+	addik	r5,r5,4
+	lw	r4,r5,r0
+	bneid	r4,1b
+	addik	r3,r3,1
+	addik	r6,r3,-1
+	sw	r6,r1,r0
+	addik	r7,r1,4
+	addik	r1,r1,-24
+#ifdef SHARED
+	/* Setup PIC.  */
+	mfs	r20,rpc
+	addik	r20,r20,_GLOBAL_OFFSET_TABLE_+8
+	lwi	r5,r20,main@GOT
+	lwi	r8,r20,__libc_csu_init@GOT
+	lwi	r9,r20,__libc_csu_fini@GOT
+	brid	__libc_start_main@PLT
+	addk	r10,r0,r0
+#else
+	addik	r5,r0,main
+	addik	r8,r0,__libc_csu_init
+	addik	r9,r0,__libc_csu_fini
+	brid	__libc_start_main
+	addk	r10,r0,r0
+#endif
+
+/* Define a symbol for the first piece of initialized data.  */
+	.data
+	.globl __data_start
+__data_start:
+	.long 0
+	.weak data_start
+	data_start = __data_start
diff --git a/ports/sysdeps/microblaze/sysdep.h b/ports/sysdeps/microblaze/sysdep.h
new file mode 100644
index 0000000..7fc6bd3
--- /dev/null
+++ b/ports/sysdeps/microblaze/sysdep.h
@@ -0,0 +1,86 @@
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdeps/generic/sysdep.h>
+
+#ifdef	__ASSEMBLER__
+
+/* Syntactic details of assembler.  */
+
+#define ALIGNARG(log2) log2
+#define ASM_SIZE_DIRECTIVE(name) .size name,.-name
+
+/* Define an entry point visible from C.  */
+#define ENTRY(name)							      \
+  .globl C_SYMBOL_NAME(name);						      \
+  .type C_SYMBOL_NAME(name),@function;							      \
+  .align ALIGNARG(2);							      \
+  C_LABEL(name)								      \
+  CALL_MCOUNT
+
+#undef END
+#define END(name) ASM_SIZE_DIRECTIVE(name)
+
+
+/* If compiled for profiling, call `_mcount' at the start of each function.  */
+#ifdef	PROF
+/* The mcount code relies on a normal frame pointer being on the stack
+   to locate our caller, so push one just for its benefit.  */
+# define CALL_MCOUNT \
+  addik r1,r1,-4;	\
+  swi r15,r1,0;		\
+  brlid r15,JUMPTARGET(mcount); \
+  nop;			\
+  lwi r15,r1,0;		\
+  addik r1,r1,4;
+#else
+# define CALL_MCOUNT		/* Do nothing.  */
+#endif
+
+/* Since C identifiers are not normally prefixed with an underscore
+   on this system, the asm identifier `syscall_error' intrudes on the
+   C name space.  Make sure we use an innocuous name.  */
+#define syscall_error	__syscall_error
+#define mcount		_mcount
+
+#define PSEUDO(name, syscall_name, args)				      \
+  .globl syscall_error;							      \
+  ENTRY (name)								      \
+    DO_CALL (syscall_name, args);					      \
+    /* jcc JUMPTARGET(syscall_error) FIXME.  */
+
+#define ret \
+  rtsd r15,8; nop;
+
+#undef PSEUDO_END
+#define PSEUDO_END(name)						      \
+  END (name)
+
+#undef JUMPTARGET
+#ifdef PIC
+# define JUMPTARGET(name)	name##@PLTPC
+#else
+# define JUMPTARGET(name)	name
+#endif
+
+/* Local label name for asm code.  */
+#ifndef L
+# define L(name) $L##name
+#endif
+
+#endif	/* __ASSEMBLER__  */
diff --git a/ports/sysdeps/microblaze/tls-macros.h b/ports/sysdeps/microblaze/tls-macros.h
new file mode 100644
index 0000000..9a8030a
--- /dev/null
+++ b/ports/sysdeps/microblaze/tls-macros.h
@@ -0,0 +1,44 @@
+/* Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define TLS_LD(x)					\
+  ({ char *__result;					\
+     int __offset;					\
+     extern void *__tls_get_addr (void *);		\
+     asm ("mfs r20,rpc \n"				\
+	  "addik r20,r20,_GLOBAL_OFFSET_TABLE_+8\n"     \
+	  "addik %0,r20," #x "@TLSLDM"                  \
+	  : "=r" (__result));				\
+     __result = (char *)__tls_get_addr (__result);	\
+     asm ("addik %0,r0,"#x"@TLSDTPREL"                  \
+	  : "=r" (__offset));				\
+     (int *) (__result + __offset); })
+
+
+#define TLS_GD(x)					\
+  ({ int *__result;					\
+     extern void *__tls_get_addr (void *);		\
+     asm ("mfs  r20,rpc\n"				\
+	  "addik r20,r20,_GLOBAL_OFFSET_TABLE_+8\n"     \
+	  "addik %0,r20," #x "@TLSGD"			\
+	  : "=r" (__result));				\
+     (int *)__tls_get_addr (__result); })
+
+#define TLS_LE(x) TLS_LD(x)
+
+#define TLS_IE(x) TLS_GD(x)
diff --git a/ports/sysdeps/microblaze/tst-audit.h b/ports/sysdeps/microblaze/tst-audit.h
new file mode 100644
index 0000000..4a8c664
--- /dev/null
+++ b/ports/sysdeps/microblaze/tst-audit.h
@@ -0,0 +1,25 @@
+/* Definitions for testing PLT entry/exit auditing.  MicroBlaze version.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define pltenter la_microblaze_gnu_pltenter
+#define pltexit la_microblaze_gnu_pltexit
+#define La_regs La_microblaze_regs
+#define La_retval La_microblaze_retval
+#define int_retval lrv_r3
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/Makefile b/ports/sysdeps/unix/sysv/linux/microblaze/Makefile
new file mode 100644
index 0000000..6145532
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/Makefile
@@ -0,0 +1,3 @@
+ifeq ($(subdir),resource)
+sysdep_routines += backtrace_linux
+endif
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/Versions b/ports/sysdeps/unix/sysv/linux/microblaze/Versions
new file mode 100644
index 0000000..aa48a3c
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/Versions
@@ -0,0 +1,5 @@
+libc {
+  GLIBC_2.18 {
+    fallocate64;
+  }
+}
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S b/ports/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S
new file mode 100644
index 0000000..ff3fda4
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S
@@ -0,0 +1,29 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+	.text
+ENTRY (__revisit_longjmp_chk)
+	rtsd	r15,0
+	nop
+PSEUDO_END (__revisit_longjmp_chk)
+ENTRY (____longjmp_chk)
+	rtsd	r15,0
+	nop
+PSEUDO_END (____longjmp_chk)
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h
new file mode 100644
index 0000000..8191503
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h
@@ -0,0 +1,86 @@
+/* O_*, F_*, FD_* bit values for Linux.
+   Copyright (C) 1995-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef	_FCNTL_H
+# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+#endif
+
+#define O_CREAT		 00000100	/* not fcntl.  */
+#define O_TRUNC		 00001000	/* not fcntl.  */
+#define O_EXCL		 00000200	/* not fcntl.  */
+#define O_NOCTTY	 00000400	/* not fcntl.  */
+
+#define O_NONBLOCK	 00004000
+#define O_APPEND	 00002000
+#define O_SYNC		 04000000
+
+#define __O_DIRECTORY	 00200000	/* Must be a directory.  */
+#define __O_NOFOLLOW	 00400000	/* Do not follow links.  */
+#define __O_CLOEXEC	 02000000 	/* Set close_on_exec.  */
+
+#define __O_DIRECT	 00040000 	/* Direct disk access.  */
+#define __O_NOATIME	 01000000 	/* Do not set atime.  */
+#define __O_PATH	 010000000 	/* Resolve pathname but do not open file.  */
+
+/* Not necessary, files are always with 64bit off_t.  */
+#define __O_LARGEFILE	00100000
+
+#define __O_DSYNC	00010000	/* Synchronize data.  */
+
+#define F_GETLK		5	/* Get record locking info.  */
+#define F_SETLK		6	/* Set record locking info (non-blocking).  */
+#define F_SETLKW	7	/* Set record locking info (blocking).  */
+#define F_GETLK64	12	/* Get record locking info.  */
+#define F_SETLK64	13	/* Set record locking info (non-blocking).  */
+#define F_SETLKW64	14 	/* Set record locking info (blocking).  */
+
+#define __F_SETOWN	8	/* Get owner of socket (receiver of SIGIO).  */
+#define __F_GETOWN	9	/* Set owner of socket (receiver of SIGIO).  */
+
+/* For posix fcntl() and `l_type' field of a `struct flock' for lockf().  */
+#define F_RDLCK		0	/* Read lock.  */
+#define F_WRLCK		1	/* Write lock.  */
+#define F_UNLCK		2	/* Remove lock.  */
+
+/* for old implementation of bsd flock ().  */
+#define F_EXLCK		4	/* or 3.  */
+#define F_SHLCK		8	/* or 4.  */
+
+/* We don't need to support __USE_FILE_OFFSET64.  */
+struct flock
+  {
+    short int l_type;	/* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;	/* Where `l_start' is relative to (like `lseek').  */
+    __off_t l_start;	/* Offset where the lock begins.  */
+    __off_t l_len;	/* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;	/* Process holding the lock.  */
+  };
+
+#ifdef __USE_LARGEFILE64
+struct flock64
+  {
+    short int l_type;	/* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;	/* Where `l_start' is relative to (like `lseek').  */
+    __off64_t l_start;	/* Offset where the lock begins.  */
+    __off64_t l_len;	/* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;	/* Process holding the lock.  */
+  };
+#endif
+
+/* Include generic Linux declarations.  */
+#include <bits/fcntl-linux.h>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/bits/mman.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/mman.h
new file mode 100644
index 0000000..59e2c0e
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/mman.h
@@ -0,0 +1,42 @@
+/* Definitions for POSIX memory map interface.  Linux/MicroBlaze version.
+
+   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_MMAN_H
+# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
+#endif
+
+/* The following definitions basically come from the kernel headers.
+   But the kernel header is not namespace clean.  */
+
+#ifdef __USE_MISC
+/* These are Linux-specific.  */
+# define MAP_GROWSDOWN	0x00100		/* Stack-like segment.  */
+# define MAP_DENYWRITE	0x00800		/* ETXTBSY.  */
+# define MAP_EXECUTABLE	0x01000		/* Mark it as an executable.  */
+# define MAP_LOCKED	0x02000		/* Lock the mapping.  */
+# define MAP_NORESERVE	0x04000		/* Don't check for reservations.  */
+# define MAP_POPULATE	0x08000		/* Populate (prefault) pagetables.  */
+# define MAP_NONBLOCK	0x10000		/* Do not block on IO.  */
+# define MAP_STACK	0x20000		/* Allocation is for a stack.  */
+# define MAP_HUGETLB	0x40000		/* Create huge page mapping.  */
+#endif
+
+/* Include generic Linux declarations.  */
+#include <bits/mman-linux.h>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/bits/stat.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/stat.h
new file mode 100644
index 0000000..37288eb
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/stat.h
@@ -0,0 +1,203 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _SYS_STAT_H && !defined _FCNTL_H
+# error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+#endif
+
+#ifndef _BITS_STAT_H
+#define _BITS_STAT_H	1
+
+/* Versions of the `struct stat' data structure.  */
+#define _STAT_VER_LINUX_OLD	1
+#define _STAT_VER_KERNEL	1
+#define _STAT_VER_SVR4		2
+#define _STAT_VER_LINUX		3
+#define _STAT_VER		_STAT_VER_LINUX	/* The one defined below.  */
+
+/* Versions of the `xmknod' interface.  */
+#define _MKNOD_VER_LINUX	1
+#define _MKNOD_VER_SVR4		2
+#define _MKNOD_VER		_MKNOD_VER_LINUX /* The bits defined below.  */
+
+#ifndef __USE_FILE_OFFSET64
+struct stat
+{
+        __dev_t         st_dev; /* Device.  */
+        __ino_t         st_ino; /* File serial number.  */
+        __mode_t        st_mode; /* File mode.  */
+        __nlink_t       st_nlink; /* Link count.  */
+        __uid_t         st_uid; /* User ID of the file's owner.  */
+        __gid_t         st_gid; /* Group ID of the file's group.  */
+        __dev_t         st_rdev; /* Device number, if device.  */
+        unsigned long   __pad2;
+        __off_t         st_size; /* Size of file, in bytes.  */
+        __blksize_t     st_blksize; /* Optimal block size for I/O.  */
+        int             __pad3;
+        __blkcnt_t      st_blocks; /* Number 512-byte blocks allocated.  */
+#ifdef __USE_MISC
+        /* Nanosecond resolution timestamps are stored in a format
+         * equivalent to 'struct timespec'. This is the type used
+         * whenever possible but the Unix namespace rules do not allow the
+         * identifier 'timespec' to appear in the <sys/stat.h> header.
+         * Therefore we have to handle the use of this header in strictly
+         * standard-compliant sources special.  */
+        struct timespec         st_atim; /* Time of last access.  */
+        struct timespec         st_mtim; /* Time of last modification.  */
+        struct timespec         st_ctim; /* Time of last status change.  */
+# define st_atime st_atim.tv_sec        /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+        __time_t                st_atime; /* Time of last access.  */
+        unsigned long int       st_atimensec; /* Nscecs of last access.  */
+        __time_t                st_mtime; /* Time of last modification.  */
+        unsigned long int       st_mtimensec; /* Nsecs of last modification.  */
+        __time_t                st_ctime; /* Time of last status change.  */
+        unsigned long int       st_ctimensec; /* Nsecs of last status change.  */
+#endif
+        unsigned int    __unused4;
+        unsigned int    __unused5;
+};
+#else /* __USE_FILE_OFFSET64 */
+/* MS: If __USE_FILE_OFFSET64 is setup then struct stat should match stat64
+ * structure. Glibc has no type __dev64_t that's why I had to use standard
+ * type for st_dev and st_rdev. Several architectures uses pads after st_dev
+ * but this approach covers BIG and LITTLE endian. I think it is better to
+ * create one ifdef to separate stats structures.  */
+struct stat
+{
+        unsigned long long      st_dev; /* Device.  */
+        __ino64_t               st_ino; /* 32bit file serial number.  */
+        __mode_t                st_mode; /* File mode.  */
+        __nlink_t               st_nlink; /* Link count.  */
+        __uid_t                 st_uid; /* User ID of the file's owner.  */
+        __gid_t                 st_gid; /* Group ID of the file's group.  */
+        unsigned long long      st_rdev; /* Device number, if device.  */
+        unsigned long long      __pad2;
+        __off64_t               st_size; /* Size of file, in bytes.  */
+        __blksize_t             st_blksize; /* Optimal block size for I/O.  */
+        int                     __pad3;
+        __blkcnt64_t            st_blocks; /* Number 512-byte blocks allocated.  */
+#ifdef __USE_MISC
+        /* Nanosecond resolution timestamps are stored in a format
+         * equivalent to 'struct timespec'. This is the type used
+         * whenever possible but the Unix namespace rules do not allow the
+         * identifier 'timespec' to appear in the <sys/stat.h> header.
+         * Therefore we have to handle the use of this header in strictly
+         * standard-compliant sources special.  */
+        struct timespec         st_atim; /* Time of last access.  */
+        struct timespec         st_mtim; /* Time of last modification.  */
+        struct timespec         st_ctim; /* Time of last status change.  */
+# define st_atime st_atim.tv_sec        /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+        __time_t                st_atime; /* Time of last access.  */
+        unsigned long int       st_atimensec; /* Nscecs of last access.  */
+        __time_t                st_mtime; /* Time of last modification.  */
+        unsigned long int       st_mtimensec; /* Nsecs of last modification.  */
+        __time_t                st_ctime; /* Time of last status change.  */
+        unsigned long int       st_ctimensec; /* Nsecs of last status change.  */
+#endif
+        unsigned int    __unused4;
+        unsigned int    __unused5;
+};
+#endif /* __USE_FILE_OFFSET64 */
+
+#ifdef __USE_LARGEFILE64
+struct stat64
+{
+        unsigned long long      st_dev; /* Device.  */
+        __ino64_t               st_ino; /* 32bit file serial number.  */
+        __mode_t                st_mode; /* File mode.  */
+        __nlink_t               st_nlink; /* Link count.  */
+        __uid_t                 st_uid; /* User ID of the file's owner.  */
+        __gid_t                 st_gid; /* Group ID of the file's group.  */
+        unsigned long long      st_rdev; /* Device number, if device.  */
+        unsigned long long      __pad2;
+        __off64_t               st_size; /* Size of file, in bytes.  */
+        __blksize_t             st_blksize; /* Optimal block size for I/O.  */
+        int                     __pad3;
+        __blkcnt64_t            st_blocks; /* Number 512-byte blocks allocated.  */
+#ifdef __USE_MISC
+        /* Nanosecond resolution timestamps are stored in a format
+         * equivalent to 'struct timespec'. This is the type used
+         * whenever possible but the Unix namespace rules do not allow the
+         * identifier 'timespec' to appear in the <sys/stat.h> header.
+         * Therefore we have to handle the use of this header in strictly
+         * standard-compliant sources special.  */
+        struct timespec         st_atim; /* Time of last access.  */
+        struct timespec         st_mtim; /* Time of last modification.  */
+        struct timespec         st_ctim; /* Time of last status change.  */
+# define st_atime st_atim.tv_sec        /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+        __time_t                st_atime; /* Time of last access.  */
+        unsigned long int       st_atimensec; /* Nscecs of last access.  */
+        __time_t                st_mtime; /* Time of last modification.  */
+        unsigned long int       st_mtimensec; /* Nsecs of last modification.  */
+        __time_t                st_ctime; /* Time of last status change.  */
+        unsigned long int       st_ctimensec; /* Nsecs of last status change.  */
+#endif
+        unsigned int    __unused4;
+        unsigned int    __unused5;
+};
+#endif
+
+/* Tell code we have these members.  */
+#define _STATBUF_ST_BLKSIZE
+#define _STATBUF_ST_RDEV
+/* Nanosecond resolution time values are supported.  */
+#define _STATBUF_ST_NSEC
+
+/* Encoding of the file mode.  */
+
+#define __S_IFMT        0170000 /* These bits determine file type.  */
+
+/* File types.  */
+#define __S_IFDIR       0040000 /* Directory.  */
+#define __S_IFCHR       0020000 /* Character device.  */
+#define __S_IFBLK       0060000 /* Block device.  */
+#define __S_IFREG       0100000 /* Regular file.  */
+#define __S_IFIFO       0010000 /* FIFO.  */
+#define __S_IFLNK       0120000 /* Symbolic link.  */
+#define __S_IFSOCK      0140000 /* Socket.  */
+
+/* POSIX.1b objects.  Note that these macros always evaluate to zero.  But
+   they do it by enforcing the correct use of the macros.  */
+#define __S_TYPEISMQ(buf)  ((buf)->st_mode - (buf)->st_mode)
+#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode)
+#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode)
+
+/* Protection bits.  */
+
+#define __S_ISUID       04000   /* Set user ID on execution.  */
+#define __S_ISGID       02000   /* Set group ID on execution.  */
+#define __S_ISVTX       01000   /* Save swapped text after use (sticky).  */
+#define __S_IREAD       0400    /* Read by owner.  */
+#define __S_IWRITE      0200    /* Write by owner.  */
+#define __S_IEXEC       0100    /* Execute by owner.  */
+
+#ifdef __USE_ATFILE
+# define UTIME_NOW	((1l << 30) - 1l)
+# define UTIME_OMIT	((1l << 30) - 2l)
+#endif
+
+#endif	/* bits/stat.h.  */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/brk.c b/ports/sysdeps/unix/sysv/linux/microblaze/brk.c
new file mode 100644
index 0000000..9f19fb2
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/brk.c
@@ -0,0 +1,44 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <unistd.h>
+#include <sysdep.h>
+
+/* This must be initialized data because commons can't have aliases.  */
+void *__curbrk = 0;
+
+/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt
+   to work around different old braindamage in the old Linux ELF dynamic
+   linker.  */
+weak_alias (__curbrk, ___brk_addr)
+
+int
+__brk (void *addr)
+{
+  INTERNAL_SYSCALL_DECL (err);
+
+  __curbrk = (void *) INTERNAL_SYSCALL (brk, err, 1, addr);
+  if (__curbrk < addr)
+    {
+      __set_errno (ENOMEM);
+      return -1;
+    }
+
+  return 0;
+}
+weak_alias (__brk, brk)
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/clone.S b/ports/sysdeps/unix/sysv/linux/microblaze/clone.S
new file mode 100644
index 0000000..1a56f0e
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/clone.S
@@ -0,0 +1,70 @@
+/* Copyright (C) 1996-2013  Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* clone() is even more special than fork() as it mucks with stacks
+   and invokes a function in the right context after its all over.  */
+
+#include <sysdep.h>
+#define _ERRNO_H	1
+#include <bits/errno.h>
+
+/* int clone (int (*fn)(void *arg), void *child_stack, int flags, void *arg,
+	     pid_t *ptid, struct user_desc *tls, pid_t *ctid);
+
+   INCOMING: r5 (fn), r6 (child_stack), r7 (flags), r8 (arg), r9 (ptid)
+             r10 (tls), 28 (r1) ctid
+   OUTGOING:
+
+   linux: arch/microblaze/entry.S: sys_clone expects
+	r5 (flags)  r6 (child stack) r7 (stack_size) r8 (ptid) r9 (ctid) r10 (tls)
+*/
+
+        .text
+ENTRY (__clone)
+	addik	r3,r0,-EINVAL
+	beqi	r5,SYSCALL_ERROR_LABEL	; // Invalid func
+	beqi	r6,SYSCALL_ERROR_LABEL	; // Invalid stack
+	addik	r6,r6,-8
+	swi	r5,r6,0			; // Push fn onto child's stack
+	swi	r8,r6,4			; // Push arg for child
+	addk	r5,r0,r7		; // flags for clone() syscall
+	addk	r7,r0,r0
+	addk	r8,r0,r9		; // parent tid ptr
+	lwi	r9,r1,28		; // child tid ptr
+	addik	r12,r0,SYS_ify(clone)
+	brki	r14,8
+	addk	r0,r0,r0
+	addik	r4,r0,-4095
+	cmpu	r4,r4,r3
+	bgei	r4,SYSCALL_ERROR_LABEL
+	beqi	r3,L(thread_start)
+	rtsd	r15,8
+	nop
+
+L(thread_start):
+	lwi	r12,r1,0		; // fn
+	lwi	r5,r1,4			; // arg
+	brald	r15,r12
+	nop
+	addk	r5,r0,r3
+	addik	r12,r0,SYS_ify(exit)
+	brki	r14,8
+	nop
+PSEUDO_END(__clone)
+
+weak_alias (__clone,clone)
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/configure b/ports/sysdeps/unix/sysv/linux/microblaze/configure
new file mode 100644
index 0000000..fa7da73
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/configure
@@ -0,0 +1,4 @@
+# This file is generated from configure.in by Autoconf.  DO NOT EDIT!
+ # Local configure fragment for sysdeps/unix/sysv/linux/microblaze.
+
+arch_minimum_kernel=2.6.30
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/configure.in b/ports/sysdeps/unix/sysv/linux/microblaze/configure.in
new file mode 100644
index 0000000..f283d37
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/configure.in
@@ -0,0 +1,4 @@
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+# Local configure fragment for sysdeps/unix/sysv/linux/microblaze.
+
+arch_minimum_kernel=2.6.30
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/fcntl.c b/ports/sysdeps/unix/sysv/linux/microblaze/fcntl.c
new file mode 100644
index 0000000..ea951bc
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/fcntl.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/fcntl.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/fxstat.c b/ports/sysdeps/unix/sysv/linux/microblaze/fxstat.c
new file mode 100644
index 0000000..4f219f0
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/fxstat.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/fxstat.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/fxstatat.c b/ports/sysdeps/unix/sysv/linux/microblaze/fxstatat.c
new file mode 100644
index 0000000..0f8b313
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/fxstatat.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/fxstatat.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getsysstats.c b/ports/sysdeps/unix/sysv/linux/microblaze/getsysstats.c
new file mode 100644
index 0000000..cd8a891
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getsysstats.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* We need to define a special parser for /proc/cpuinfo.  */
+#define GET_NPROCS_PARSER(FD, BUFFER, CP, RE, BUFFER_END, RESULT)	  \
+  do									  \
+    {									  \
+      (RESULT) = 0;							  \
+      /* Read all lines and count the lines starting with the string	  \
+	 "CPU-Family:".  We don't have to fear extremely long lines since \
+	 the kernel will not generate them.  8192 bytes are really	  \
+	 enough.  */							  \
+      char *l;								  \
+      while ((l = next_line (FD, BUFFER, &CP, &RE, BUFFER_END)) != NULL)  \
+	if (strncmp (l, "CPU-Family:", 11) == 0)	      	          \
+	  ++(RESULT);							  \
+    }									  \
+  while (0)
+
+#include <sysdeps/unix/sysv/linux/getsysstats.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/kernel-features.h b/ports/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
new file mode 100644
index 0000000..5f06cbf
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
@@ -0,0 +1,30 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+
+/* MicroBlaze glibc support starts with 2.6.30, guaranteeing many kernel features.  */
+#define __ASSUME_UTIMES			1
+#define __ASSUME_O_CLOEXEC		1
+#define __ASSUME_SOCK_CLOEXEC		1
+#define __ASSUME_IN_NONBLOCK		1
+#define __ASSUME_PIPE2			1
+#define __ASSUME_EVENTFD2		1
+#define __ASSUME_SIGNALFD4		1
+#define __ASSUME_ACCEPT4		1
+#define __ASSUME_DUP3			1
+
+#include_next <kernel-features.h>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/kernel_stat.h b/ports/sysdeps/unix/sysv/linux/microblaze/kernel_stat.h
new file mode 100644
index 0000000..2823856
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/kernel_stat.h
@@ -0,0 +1,49 @@
+/* Definition of `struct stat' used in the kernel
+   Copyright (C) 2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+struct kernel_stat
+{
+        unsigned long   st_dev;         /* Device.  */
+        unsigned long   st_ino;         /* File serial number.  */
+        unsigned int    st_mode;        /* File mode.  */
+        unsigned int    st_nlink;       /* Link count.  */
+        unsigned int    st_uid;         /* User ID of the file's owner.  */
+        unsigned int    st_gid;         /* Group ID of the file's group.  */
+        unsigned long   st_rdev;        /* Device number, if device.  */
+        unsigned long   __pad2;
+#define _HAVE_STAT___PAD2
+#define _HAVE_STAT64___PAD2
+        long            st_size;        /* Size of file, in bytes.  */
+        int             st_blksize;     /* Optimal block size for I/O.  */
+        int             __pad3;
+#define _HAVE_STAT___PAD3
+#define _HAVE_STAT64___PAD3
+        long            st_blocks;      /* Number 512-byte blocks allocated.  */
+        struct timespec st_atim;
+        struct timespec st_mtim;
+        struct timespec st_ctim;
+#define _HAVE_STAT_NSEC
+#define _HAVE_STAT64_NSEC
+        unsigned int    __unused4;
+#define _HAVE_STAT___UNUSED4
+#define _HAVE_STAT64___UNUSED4
+        unsigned int    __unused5;
+#define _HAVE_STAT___UNUSED5
+#define _HAVE_STAT64___UNUSED5
+};
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/lxstat.c b/ports/sysdeps/unix/sysv/linux/microblaze/lxstat.c
new file mode 100644
index 0000000..0efa0ae
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/lxstat.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/lxstat.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/mmap.S b/ports/sysdeps/unix/sysv/linux/microblaze/mmap.S
new file mode 100644
index 0000000..2b67189
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/mmap.S
@@ -0,0 +1,50 @@
+/* Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+#define EINVAL 22
+	.text
+ENTRY (__mmap)
+	addik	r3,r0,-EINVAL
+	andi	r4,r10,0xfff
+	bnei	r4,L(skip)
+	addik	r12,r0,SYS_ify(mmap2)
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10
+	sra	r10,r10 ;	/* mmap2 takes the offset in pages.  */
+	brki	r14,8
+	nop
+L(skip):
+	addik	r4,r0,-4095
+	cmpu	r4,r4,r3
+	bgei	r4,SYSCALL_ERROR_LABEL
+	rtsd	r15,8
+	nop
+PSEUDO_END (__mmap)
+
+weak_alias (__mmap, mmap)
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/msgctl.c b/ports/sysdeps/unix/sysv/linux/microblaze/msgctl.c
new file mode 100644
index 0000000..38aedad
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/msgctl.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/alpha/msgctl.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h
new file mode 100644
index 0000000..b96759d
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h
@@ -0,0 +1,185 @@
+/* Copyright (C) 2002-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _BITS_PTHREADTYPES_H
+#define _BITS_PTHREADTYPES_H	1
+
+#include <endian.h>
+
+#define __SIZEOF_PTHREAD_ATTR_T 36
+#define __SIZEOF_PTHREAD_MUTEX_T 24
+#define __SIZEOF_PTHREAD_MUTEXATTR_T 4
+#define __SIZEOF_PTHREAD_COND_T 48
+#define __SIZEOF_PTHREAD_COND_COMPAT_T 12
+#define __SIZEOF_PTHREAD_CONDATTR_T 4
+#define __SIZEOF_PTHREAD_RWLOCK_T 32
+#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
+#define __SIZEOF_PTHREAD_BARRIER_T 20
+#define __SIZEOF_PTHREAD_BARRIERATTR_T 4
+
+
+/* Thread identifiers.  The structure of the attribute type is not
+   exposed on purpose.  */
+typedef unsigned long int pthread_t;
+
+
+union pthread_attr_t
+{
+  char __size[__SIZEOF_PTHREAD_ATTR_T];
+  long int __align;
+};
+#ifndef __have_pthread_attr_t
+typedef union pthread_attr_t pthread_attr_t;
+# define __have_pthread_attr_t	1
+#endif
+
+
+typedef struct __pthread_internal_slist
+{
+  struct __pthread_internal_slist *__next;
+} __pthread_slist_t;
+
+
+/* Data structures for mutex handling.  The structure of the attribute
+   type is not exposed on purpose.  */
+typedef union
+{
+  struct __pthread_mutex_s
+  {
+    int __lock;
+    unsigned int __count;
+    int __owner;
+    /* KIND must stay at this position in the structure to maintain
+       binary compatibility.  */
+    int __kind;
+    unsigned int __nusers;
+    __extension__ union
+    {
+      int __spins;
+      __pthread_slist_t __list;
+    };
+  } __data;
+  char __size[__SIZEOF_PTHREAD_MUTEX_T];
+  long int __align;
+} pthread_mutex_t;
+
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_MUTEXATTR_T];
+  int __align;
+} pthread_mutexattr_t;
+
+
+/* Data structure for conditional variable handling.  The structure of
+   the attribute type is not exposed on purpose.  */
+typedef union
+{
+  struct
+  {
+    int __lock;
+    unsigned int __futex;
+    __extension__ unsigned long long int __total_seq;
+    __extension__ unsigned long long int __wakeup_seq;
+    __extension__ unsigned long long int __woken_seq;
+    void *__mutex;
+    unsigned int __nwaiters;
+    unsigned int __broadcast_seq;
+  } __data;
+  char __size[__SIZEOF_PTHREAD_COND_T];
+  __extension__ long long int __align;
+} pthread_cond_t;
+
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_CONDATTR_T];
+  int __align;
+} pthread_condattr_t;
+
+
+/* Keys for thread-specific data.  */
+typedef unsigned int pthread_key_t;
+
+
+/* Once-only execution.  */
+typedef int pthread_once_t;
+
+
+#if defined __USE_UNIX98 || defined __USE_XOPEN2K
+/* Data structure for read-write lock variable handling.  The
+   structure of the attribute type is not exposed on purpose.  */
+typedef union
+{
+  struct
+  {
+    int __lock;
+    unsigned int __nr_readers;
+    unsigned int __readers_wakeup;
+    unsigned int __writer_wakeup;
+    unsigned int __nr_readers_queued;
+    unsigned int __nr_writers_queued;
+#if __BYTE_ORDER == __BIG_ENDIAN
+    unsigned char __pad1;
+    unsigned char __pad2;
+    unsigned char __shared;
+    /* FLAGS must stay at this position in the structure to maintain
+       binary compatibility.  */
+    unsigned char __flags;
+#else
+    /* FLAGS must stay at this position in the structure to maintain
+       binary compatibility.  */
+    unsigned char __flags;
+    unsigned char __shared;
+    unsigned char __pad1;
+    unsigned char __pad2;
+#endif
+    int __writer;
+  } __data;
+  char __size[__SIZEOF_PTHREAD_RWLOCK_T];
+  long int __align;
+} pthread_rwlock_t;
+
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T];
+  long int __align;
+} pthread_rwlockattr_t;
+#endif
+
+
+#ifdef __USE_XOPEN2K
+/* POSIX spinlock data type.  */
+typedef volatile int pthread_spinlock_t;
+
+
+/* POSIX barriers data type.  The structure of the type is
+   deliberately not exposed.  */
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_BARRIER_T];
+  long int __align;
+} pthread_barrier_t;
+
+typedef union
+{
+  char __size[__SIZEOF_PTHREAD_BARRIERATTR_T];
+  int __align;
+} pthread_barrierattr_t;
+#endif
+
+
+#endif	/* bits/pthreadtypes.h.  */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/semaphore.h b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/semaphore.h
new file mode 100644
index 0000000..5e6ad38
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/semaphore.h
@@ -0,0 +1,35 @@
+/* Copyright (C) 2002-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SEMAPHORE_H
+# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead."
+#endif
+
+
+#define __SIZEOF_SEM_T	16
+
+
+/* Value returned if `sem_open' failed.  */
+#define SEM_FAILED      ((sem_t *) 0)
+
+
+typedef union
+{
+  char __size[__SIZEOF_SEM_T];
+  long int __align;
+} sem_t;
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/c++-types.data b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/c++-types.data
new file mode 100644
index 0000000..fde53bf
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/c++-types.data
@@ -0,0 +1,67 @@
+blkcnt64_t:x
+blkcnt_t:l
+blksize_t:l
+caddr_t:Pc
+clockid_t:i
+clock_t:l
+daddr_t:i
+dev_t:y
+fd_mask:l
+fsblkcnt64_t:y
+fsblkcnt_t:m
+fsfilcnt64_t:y
+fsfilcnt_t:m
+fsid_t:8__fsid_t
+gid_t:j
+id_t:j
+ino64_t:y
+ino_t:m
+int16_t:s
+int32_t:i
+int64_t:x
+int8_t:a
+intptr_t:i
+key_t:i
+loff_t:x
+mode_t:j
+nlink_t:j
+off64_t:x
+off_t:l
+pid_t:i
+pthread_attr_t:14pthread_attr_t
+pthread_barrier_t:17pthread_barrier_t
+pthread_barrierattr_t:21pthread_barrierattr_t
+pthread_cond_t:14pthread_cond_t
+pthread_condattr_t:18pthread_condattr_t
+pthread_key_t:j
+pthread_mutex_t:15pthread_mutex_t
+pthread_mutexattr_t:19pthread_mutexattr_t
+pthread_once_t:i
+pthread_rwlock_t:16pthread_rwlock_t
+pthread_rwlockattr_t:20pthread_rwlockattr_t
+pthread_spinlock_t:i
+pthread_t:m
+quad_t:x
+register_t:i
+rlim64_t:y
+rlim_t:m
+sigset_t:10__sigset_t
+size_t:j
+socklen_t:j
+ssize_t:i
+suseconds_t:l
+time_t:l
+u_char:h
+uid_t:j
+uint:j
+u_int:j
+u_int16_t:t
+u_int32_t:j
+u_int64_t:y
+u_int8_t:h
+ulong:m
+u_long:m
+u_quad_t:y
+useconds_t:j
+ushort:t
+u_short:t
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c
new file mode 100644
index 0000000..2e645f3
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c
@@ -0,0 +1,23 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Value passed to 'clone' for initialization of the thread register.  */
+#define TLS_VALUE (pd + 1)
+
+/* Get the real implementation.  */
+#include <nptl/sysdeps/pthread/createthread.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/fork.c b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/fork.c
new file mode 100644
index 0000000..0c75863
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/fork.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sched.h>
+#include <signal.h>
+#include <sysdep.h>
+#include <tls.h>
+
+#define ARCH_FORK() \
+  INLINE_SYSCALL (clone, 5,                                                   \
+                  CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, 0,     \
+                  NULL, NULL, &THREAD_SELF->tid)
+
+#include <nptl/sysdeps/unix/sysv/linux/fork.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/ld.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/ld.abilist
new file mode 100644
index 0000000..d4cace2
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/ld.abilist
@@ -0,0 +1,12 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ __libc_memalign F
+ __libc_stack_end D 0x4
+ __stack_chk_guard D 0x4
+ __tls_get_addr F
+ _dl_mcount F
+ _r_debug D 0x14
+ calloc F
+ free F
+ malloc F
+ realloc F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libBrokenLocale.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libBrokenLocale.abilist
new file mode 100644
index 0000000..0ca5b6f
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libBrokenLocale.abilist
@@ -0,0 +1,3 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ __ctype_get_mb_cur_max F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libanl.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libanl.abilist
new file mode 100644
index 0000000..c25a1ab
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libanl.abilist
@@ -0,0 +1,6 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ gai_cancel F
+ gai_error F
+ gai_suspend F
+ getaddrinfo_a F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libc.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libc.abilist
new file mode 100644
index 0000000..6e8d993
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libc.abilist
@@ -0,0 +1,2082 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ _Exit F
+ _IO_2_1_stderr_ D 0x98
+ _IO_2_1_stdin_ D 0x98
+ _IO_2_1_stdout_ D 0x98
+ _IO_adjust_column F
+ _IO_adjust_wcolumn F
+ _IO_default_doallocate F
+ _IO_default_finish F
+ _IO_default_pbackfail F
+ _IO_default_uflow F
+ _IO_default_xsgetn F
+ _IO_default_xsputn F
+ _IO_do_write F
+ _IO_doallocbuf F
+ _IO_fclose F
+ _IO_fdopen F
+ _IO_feof F
+ _IO_ferror F
+ _IO_fflush F
+ _IO_fgetpos F
+ _IO_fgetpos64 F
+ _IO_fgets F
+ _IO_file_attach F
+ _IO_file_close F
+ _IO_file_close_it F
+ _IO_file_doallocate F
+ _IO_file_finish F
+ _IO_file_fopen F
+ _IO_file_init F
+ _IO_file_jumps D 0x54
+ _IO_file_open F
+ _IO_file_overflow F
+ _IO_file_read F
+ _IO_file_seek F
+ _IO_file_seekoff F
+ _IO_file_setbuf F
+ _IO_file_stat F
+ _IO_file_sync F
+ _IO_file_underflow F
+ _IO_file_write F
+ _IO_file_xsputn F
+ _IO_flockfile F
+ _IO_flush_all F
+ _IO_flush_all_linebuffered F
+ _IO_fopen F
+ _IO_fprintf F
+ _IO_fputs F
+ _IO_fread F
+ _IO_free_backup_area F
+ _IO_free_wbackup_area F
+ _IO_fsetpos F
+ _IO_fsetpos64 F
+ _IO_ftell F
+ _IO_ftrylockfile F
+ _IO_funlockfile F
+ _IO_fwrite F
+ _IO_getc F
+ _IO_getline F
+ _IO_getline_info F
+ _IO_gets F
+ _IO_init F
+ _IO_init_marker F
+ _IO_init_wmarker F
+ _IO_iter_begin F
+ _IO_iter_end F
+ _IO_iter_file F
+ _IO_iter_next F
+ _IO_least_wmarker F
+ _IO_link_in F
+ _IO_list_all D 0x4
+ _IO_list_lock F
+ _IO_list_resetlock F
+ _IO_list_unlock F
+ _IO_marker_delta F
+ _IO_marker_difference F
+ _IO_padn F
+ _IO_peekc_locked F
+ _IO_popen F
+ _IO_printf F
+ _IO_proc_close F
+ _IO_proc_open F
+ _IO_putc F
+ _IO_puts F
+ _IO_remove_marker F
+ _IO_seekmark F
+ _IO_seekoff F
+ _IO_seekpos F
+ _IO_seekwmark F
+ _IO_setb F
+ _IO_setbuffer F
+ _IO_setvbuf F
+ _IO_sgetn F
+ _IO_sprintf F
+ _IO_sputbackc F
+ _IO_sputbackwc F
+ _IO_sscanf F
+ _IO_str_init_readonly F
+ _IO_str_init_static F
+ _IO_str_overflow F
+ _IO_str_pbackfail F
+ _IO_str_seekoff F
+ _IO_str_underflow F
+ _IO_sungetc F
+ _IO_sungetwc F
+ _IO_switch_to_get_mode F
+ _IO_switch_to_main_wget_area F
+ _IO_switch_to_wbackup_area F
+ _IO_switch_to_wget_mode F
+ _IO_un_link F
+ _IO_ungetc F
+ _IO_unsave_markers F
+ _IO_unsave_wmarkers F
+ _IO_vfprintf F
+ _IO_vfscanf F
+ _IO_vsprintf F
+ _IO_wdefault_doallocate F
+ _IO_wdefault_finish F
+ _IO_wdefault_pbackfail F
+ _IO_wdefault_uflow F
+ _IO_wdefault_xsgetn F
+ _IO_wdefault_xsputn F
+ _IO_wdo_write F
+ _IO_wdoallocbuf F
+ _IO_wfile_jumps D 0x54
+ _IO_wfile_overflow F
+ _IO_wfile_seekoff F
+ _IO_wfile_sync F
+ _IO_wfile_underflow F
+ _IO_wfile_xsputn F
+ _IO_wmarker_delta F
+ _IO_wsetb F
+ ___brk_addr D 0x4
+ __adjtimex F
+ __after_morecore_hook D 0x4
+ __argz_count F
+ __argz_next F
+ __argz_stringify F
+ __asprintf F
+ __asprintf_chk F
+ __assert F
+ __assert_fail F
+ __assert_perror_fail F
+ __backtrace F
+ __backtrace_symbols F
+ __backtrace_symbols_fd F
+ __bsd_getpgrp F
+ __bzero F
+ __check_rhosts_file D 0x4
+ __chk_fail F
+ __clone F
+ __close F
+ __cmsg_nxthdr F
+ __confstr_chk F
+ __connect F
+ __ctype_b_loc F
+ __ctype_get_mb_cur_max F
+ __ctype_tolower_loc F
+ __ctype_toupper_loc F
+ __curbrk D 0x4
+ __cxa_at_quick_exit F
+ __cxa_atexit F
+ __cxa_finalize F
+ __cxa_thread_atexit_impl F
+ __cyg_profile_func_enter F
+ __cyg_profile_func_exit F
+ __daylight D 0x4
+ __dcgettext F
+ __default_morecore F
+ __dgettext F
+ __dprintf_chk F
+ __dup2 F
+ __duplocale F
+ __endmntent F
+ __environ D 0x4
+ __errno_location F
+ __fbufsize F
+ __fcntl F
+ __fdelt_chk F
+ __fdelt_warn F
+ __ffs F
+ __fgets_chk F
+ __fgets_unlocked_chk F
+ __fgetws_chk F
+ __fgetws_unlocked_chk F
+ __finite F
+ __finitef F
+ __finitel F
+ __flbf F
+ __fork F
+ __fpending F
+ __fprintf_chk F
+ __fpu_control D 0x4
+ __fpurge F
+ __fread_chk F
+ __fread_unlocked_chk F
+ __freadable F
+ __freading F
+ __free_hook D 0x4
+ __freelocale F
+ __fsetlocking F
+ __fwprintf_chk F
+ __fwritable F
+ __fwriting F
+ __fxstat F
+ __fxstat64 F
+ __fxstatat F
+ __fxstatat64 F
+ __getauxval F
+ __getcwd_chk F
+ __getdelim F
+ __getdomainname_chk F
+ __getgroups_chk F
+ __gethostname_chk F
+ __getlogin_r_chk F
+ __getmntent_r F
+ __getpagesize F
+ __getpgid F
+ __getpid F
+ __gets_chk F
+ __gettimeofday F
+ __getwd_chk F
+ __gmtime_r F
+ __h_errno_location F
+ __isalnum_l F
+ __isalpha_l F
+ __isascii_l F
+ __isblank_l F
+ __iscntrl_l F
+ __isctype F
+ __isdigit_l F
+ __isgraph_l F
+ __isinf F
+ __isinff F
+ __isinfl F
+ __islower_l F
+ __isnan F
+ __isnanf F
+ __isnanl F
+ __isoc99_fscanf F
+ __isoc99_fwscanf F
+ __isoc99_scanf F
+ __isoc99_sscanf F
+ __isoc99_swscanf F
+ __isoc99_vfscanf F
+ __isoc99_vfwscanf F
+ __isoc99_vscanf F
+ __isoc99_vsscanf F
+ __isoc99_vswscanf F
+ __isoc99_vwscanf F
+ __isoc99_wscanf F
+ __isprint_l F
+ __ispunct_l F
+ __isspace_l F
+ __isupper_l F
+ __iswalnum_l F
+ __iswalpha_l F
+ __iswblank_l F
+ __iswcntrl_l F
+ __iswctype F
+ __iswctype_l F
+ __iswdigit_l F
+ __iswgraph_l F
+ __iswlower_l F
+ __iswprint_l F
+ __iswpunct_l F
+ __iswspace_l F
+ __iswupper_l F
+ __iswxdigit_l F
+ __isxdigit_l F
+ __ivaliduser F
+ __key_decryptsession_pk_LOCAL D 0x4
+ __key_encryptsession_pk_LOCAL D 0x4
+ __key_gendes_LOCAL D 0x4
+ __libc_allocate_rtsig F
+ __libc_calloc F
+ __libc_current_sigrtmax F
+ __libc_current_sigrtmin F
+ __libc_free F
+ __libc_freeres F
+ __libc_init_first F
+ __libc_mallinfo F
+ __libc_malloc F
+ __libc_mallopt F
+ __libc_memalign F
+ __libc_pvalloc F
+ __libc_realloc F
+ __libc_sa_len F
+ __libc_start_main F
+ __libc_valloc F
+ __longjmp_chk F
+ __lseek F
+ __lxstat F
+ __lxstat64 F
+ __malloc_hook D 0x4
+ __malloc_initialize_hook D 0x4
+ __mbrlen F
+ __mbrtowc F
+ __mbsnrtowcs_chk F
+ __mbsrtowcs_chk F
+ __mbstowcs_chk F
+ __memalign_hook D 0x4
+ __memcpy_chk F
+ __memmove_chk F
+ __mempcpy F
+ __mempcpy_chk F
+ __mempcpy_small F
+ __memset_chk F
+ __monstartup F
+ __morecore D 0x4
+ __nanosleep F
+ __newlocale F
+ __nl_langinfo_l F
+ __nss_configure_lookup F
+ __nss_database_lookup F
+ __nss_group_lookup F
+ __nss_hostname_digits_dots F
+ __nss_hosts_lookup F
+ __nss_next F
+ __nss_passwd_lookup F
+ __obstack_printf_chk F
+ __obstack_vprintf_chk F
+ __open F
+ __open64 F
+ __open64_2 F
+ __open_2 F
+ __openat64_2 F
+ __openat_2 F
+ __overflow F
+ __pipe F
+ __poll F
+ __poll_chk F
+ __posix_getopt F
+ __ppoll_chk F
+ __pread64 F
+ __pread64_chk F
+ __pread_chk F
+ __printf_chk F
+ __printf_fp F
+ __profile_frequency F
+ __progname D 0x4
+ __progname_full D 0x4
+ __ptsname_r_chk F
+ __pwrite64 F
+ __rawmemchr F
+ __rcmd_errstr D 0x4
+ __read F
+ __read_chk F
+ __readlink_chk F
+ __readlinkat_chk F
+ __realloc_hook D 0x4
+ __realpath_chk F
+ __recv_chk F
+ __recvfrom_chk F
+ __register_atfork F
+ __res_init F
+ __res_nclose F
+ __res_ninit F
+ __res_randomid F
+ __res_state F
+ __rpc_thread_createerr F
+ __rpc_thread_svc_fdset F
+ __rpc_thread_svc_max_pollfd F
+ __rpc_thread_svc_pollfd F
+ __sbrk F
+ __sched_cpualloc F
+ __sched_cpucount F
+ __sched_cpufree F
+ __sched_get_priority_max F
+ __sched_get_priority_min F
+ __sched_getparam F
+ __sched_getscheduler F
+ __sched_setscheduler F
+ __sched_yield F
+ __select F
+ __send F
+ __setmntent F
+ __setpgid F
+ __sigaction F
+ __sigaddset F
+ __sigdelset F
+ __sigismember F
+ __signbit F
+ __signbitf F
+ __sigpause F
+ __sigsetjmp F
+ __sigsuspend F
+ __snprintf_chk F
+ __sprintf_chk F
+ __stack_chk_fail F
+ __statfs F
+ __stpcpy F
+ __stpcpy_chk F
+ __stpcpy_small F
+ __stpncpy F
+ __stpncpy_chk F
+ __strcasecmp F
+ __strcasecmp_l F
+ __strcasestr F
+ __strcat_chk F
+ __strcoll_l F
+ __strcpy_chk F
+ __strcpy_small F
+ __strcspn_c1 F
+ __strcspn_c2 F
+ __strcspn_c3 F
+ __strdup F
+ __strerror_r F
+ __strfmon_l F
+ __strftime_l F
+ __strncasecmp_l F
+ __strncat_chk F
+ __strncpy_chk F
+ __strndup F
+ __strpbrk_c2 F
+ __strpbrk_c3 F
+ __strsep_1c F
+ __strsep_2c F
+ __strsep_3c F
+ __strsep_g F
+ __strspn_c1 F
+ __strspn_c2 F
+ __strspn_c3 F
+ __strtod_internal F
+ __strtod_l F
+ __strtof_internal F
+ __strtof_l F
+ __strtok_r F
+ __strtok_r_1c F
+ __strtol_internal F
+ __strtol_l F
+ __strtold_internal F
+ __strtold_l F
+ __strtoll_internal F
+ __strtoll_l F
+ __strtoul_internal F
+ __strtoul_l F
+ __strtoull_internal F
+ __strtoull_l F
+ __strverscmp F
+ __strxfrm_l F
+ __swprintf_chk F
+ __sysconf F
+ __sysctl F
+ __syslog_chk F
+ __sysv_signal F
+ __timezone D 0x4
+ __toascii_l F
+ __tolower_l F
+ __toupper_l F
+ __towctrans F
+ __towctrans_l F
+ __towlower_l F
+ __towupper_l F
+ __ttyname_r_chk F
+ __tzname D 0x8
+ __uflow F
+ __underflow F
+ __uselocale F
+ __vasprintf_chk F
+ __vdprintf_chk F
+ __vfork F
+ __vfprintf_chk F
+ __vfscanf F
+ __vfwprintf_chk F
+ __vprintf_chk F
+ __vsnprintf F
+ __vsnprintf_chk F
+ __vsprintf_chk F
+ __vsscanf F
+ __vswprintf_chk F
+ __vsyslog_chk F
+ __vwprintf_chk F
+ __wait F
+ __waitpid F
+ __wcpcpy_chk F
+ __wcpncpy_chk F
+ __wcrtomb_chk F
+ __wcscasecmp_l F
+ __wcscat_chk F
+ __wcscoll_l F
+ __wcscpy_chk F
+ __wcsftime_l F
+ __wcsncasecmp_l F
+ __wcsncat_chk F
+ __wcsncpy_chk F
+ __wcsnrtombs_chk F
+ __wcsrtombs_chk F
+ __wcstod_internal F
+ __wcstod_l F
+ __wcstof_internal F
+ __wcstof_l F
+ __wcstol_internal F
+ __wcstol_l F
+ __wcstold_internal F
+ __wcstold_l F
+ __wcstoll_internal F
+ __wcstoll_l F
+ __wcstombs_chk F
+ __wcstoul_internal F
+ __wcstoul_l F
+ __wcstoull_internal F
+ __wcstoull_l F
+ __wcsxfrm_l F
+ __wctomb_chk F
+ __wctrans_l F
+ __wctype_l F
+ __wmemcpy_chk F
+ __wmemmove_chk F
+ __wmempcpy_chk F
+ __wmemset_chk F
+ __woverflow F
+ __wprintf_chk F
+ __write F
+ __wuflow F
+ __wunderflow F
+ __xmknod F
+ __xmknodat F
+ __xpg_basename F
+ __xpg_sigpause F
+ __xpg_strerror_r F
+ __xstat F
+ __xstat64 F
+ _authenticate F
+ _dl_mcount_wrapper F
+ _dl_mcount_wrapper_check F
+ _environ D 0x4
+ _exit F
+ _flushlbf F
+ _libc_intl_domainname D 0x5
+ _longjmp F
+ _mcleanup F
+ _mcount F
+ _nl_default_dirname D 0x12
+ _nl_domain_bindings D 0x4
+ _nl_msg_cat_cntr D 0x4
+ _null_auth D 0xc
+ _obstack_allocated_p F
+ _obstack_begin F
+ _obstack_begin_1 F
+ _obstack_free F
+ _obstack_memory_used F
+ _obstack_newchunk F
+ _res D 0x200
+ _res_hconf D 0x30
+ _rpc_dtablesize F
+ _seterr_reply F
+ _setjmp F
+ _sys_errlist D 0x21c
+ _sys_nerr D 0x4
+ _sys_siglist D 0x104
+ _tolower F
+ _toupper F
+ a64l F
+ abort F
+ abs F
+ accept F
+ accept4 F
+ access F
+ acct F
+ addmntent F
+ addseverity F
+ adjtime F
+ adjtimex F
+ advance F
+ alarm F
+ aligned_alloc F
+ alphasort F
+ alphasort64 F
+ argp_err_exit_status D 0x4
+ argp_error F
+ argp_failure F
+ argp_help F
+ argp_parse F
+ argp_program_bug_address D 0x4
+ argp_program_version D 0x4
+ argp_program_version_hook D 0x4
+ argp_state_help F
+ argp_usage F
+ argz_add F
+ argz_add_sep F
+ argz_append F
+ argz_count F
+ argz_create F
+ argz_create_sep F
+ argz_delete F
+ argz_extract F
+ argz_insert F
+ argz_next F
+ argz_replace F
+ argz_stringify F
+ asctime F
+ asctime_r F
+ asprintf F
+ atof F
+ atoi F
+ atol F
+ atoll F
+ authdes_create F
+ authdes_getucred F
+ authdes_pk_create F
+ authnone_create F
+ authunix_create F
+ authunix_create_default F
+ backtrace F
+ backtrace_symbols F
+ backtrace_symbols_fd F
+ basename F
+ bcmp F
+ bcopy F
+ bdflush F
+ bind F
+ bind_textdomain_codeset F
+ bindresvport F
+ bindtextdomain F
+ brk F
+ bsd_signal F
+ bsearch F
+ btowc F
+ bzero F
+ c16rtomb F
+ c32rtomb F
+ calloc F
+ callrpc F
+ canonicalize_file_name F
+ capget F
+ capset F
+ catclose F
+ catgets F
+ catopen F
+ cbc_crypt F
+ cfgetispeed F
+ cfgetospeed F
+ cfmakeraw F
+ cfree F
+ cfsetispeed F
+ cfsetospeed F
+ cfsetspeed F
+ chdir F
+ chflags F
+ chmod F
+ chown F
+ chroot F
+ clearenv F
+ clearerr F
+ clearerr_unlocked F
+ clnt_broadcast F
+ clnt_create F
+ clnt_pcreateerror F
+ clnt_perrno F
+ clnt_perror F
+ clnt_spcreateerror F
+ clnt_sperrno F
+ clnt_sperror F
+ clntraw_create F
+ clnttcp_create F
+ clntudp_bufcreate F
+ clntudp_create F
+ clntunix_create F
+ clock F
+ clock_adjtime F
+ clock_getcpuclockid F
+ clock_getres F
+ clock_gettime F
+ clock_nanosleep F
+ clock_settime F
+ clone F
+ close F
+ closedir F
+ closelog F
+ confstr F
+ connect F
+ copysign F
+ copysignf F
+ copysignl F
+ creat F
+ creat64 F
+ create_module F
+ ctermid F
+ ctime F
+ ctime_r F
+ cuserid F
+ daemon F
+ daylight D 0x4
+ dcgettext F
+ dcngettext F
+ delete_module F
+ des_setparity F
+ dgettext F
+ difftime F
+ dirfd F
+ dirname F
+ div F
+ dl_iterate_phdr F
+ dngettext F
+ dprintf F
+ drand48 F
+ drand48_r F
+ dup F
+ dup2 F
+ dup3 F
+ duplocale F
+ dysize F
+ eaccess F
+ ecb_crypt F
+ ecvt F
+ ecvt_r F
+ endaliasent F
+ endfsent F
+ endgrent F
+ endhostent F
+ endmntent F
+ endnetent F
+ endnetgrent F
+ endprotoent F
+ endpwent F
+ endrpcent F
+ endservent F
+ endsgent F
+ endspent F
+ endttyent F
+ endusershell F
+ endutent F
+ endutxent F
+ environ D 0x4
+ envz_add F
+ envz_entry F
+ envz_get F
+ envz_merge F
+ envz_remove F
+ envz_strip F
+ epoll_create F
+ epoll_create1 F
+ epoll_ctl F
+ epoll_pwait F
+ epoll_wait F
+ erand48 F
+ erand48_r F
+ err F
+ error F
+ error_at_line F
+ error_message_count D 0x4
+ error_one_per_line D 0x4
+ error_print_progname D 0x4
+ errx F
+ ether_aton F
+ ether_aton_r F
+ ether_hostton F
+ ether_line F
+ ether_ntoa F
+ ether_ntoa_r F
+ ether_ntohost F
+ euidaccess F
+ eventfd F
+ eventfd_read F
+ eventfd_write F
+ execl F
+ execle F
+ execlp F
+ execv F
+ execve F
+ execvp F
+ execvpe F
+ exit F
+ faccessat F
+ fallocate F
+ fallocate64 F
+ fanotify_init F
+ fanotify_mark F
+ fattach F
+ fchdir F
+ fchflags F
+ fchmod F
+ fchmodat F
+ fchown F
+ fchownat F
+ fclose F
+ fcloseall F
+ fcntl F
+ fcvt F
+ fcvt_r F
+ fdatasync F
+ fdetach F
+ fdopen F
+ fdopendir F
+ feof F
+ feof_unlocked F
+ ferror F
+ ferror_unlocked F
+ fexecve F
+ fflush F
+ fflush_unlocked F
+ ffs F
+ ffsl F
+ ffsll F
+ fgetc F
+ fgetc_unlocked F
+ fgetgrent F
+ fgetgrent_r F
+ fgetpos F
+ fgetpos64 F
+ fgetpwent F
+ fgetpwent_r F
+ fgets F
+ fgets_unlocked F
+ fgetsgent F
+ fgetsgent_r F
+ fgetspent F
+ fgetspent_r F
+ fgetwc F
+ fgetwc_unlocked F
+ fgetws F
+ fgetws_unlocked F
+ fgetxattr F
+ fileno F
+ fileno_unlocked F
+ finite F
+ finitef F
+ finitel F
+ flistxattr F
+ flock F
+ flockfile F
+ fmemopen F
+ fmtmsg F
+ fnmatch F
+ fopen F
+ fopen64 F
+ fopencookie F
+ fork F
+ fpathconf F
+ fprintf F
+ fputc F
+ fputc_unlocked F
+ fputs F
+ fputs_unlocked F
+ fputwc F
+ fputwc_unlocked F
+ fputws F
+ fputws_unlocked F
+ fread F
+ fread_unlocked F
+ free F
+ freeaddrinfo F
+ freeifaddrs F
+ freelocale F
+ fremovexattr F
+ freopen F
+ freopen64 F
+ frexp F
+ frexpf F
+ frexpl F
+ fscanf F
+ fseek F
+ fseeko F
+ fseeko64 F
+ fsetpos F
+ fsetpos64 F
+ fsetxattr F
+ fstatfs F
+ fstatfs64 F
+ fstatvfs F
+ fstatvfs64 F
+ fsync F
+ ftell F
+ ftello F
+ ftello64 F
+ ftime F
+ ftok F
+ ftruncate F
+ ftruncate64 F
+ ftrylockfile F
+ fts_children F
+ fts_close F
+ fts_open F
+ fts_read F
+ fts_set F
+ ftw F
+ ftw64 F
+ funlockfile F
+ futimens F
+ futimes F
+ futimesat F
+ fwide F
+ fwprintf F
+ fwrite F
+ fwrite_unlocked F
+ fwscanf F
+ gai_strerror F
+ gcvt F
+ get_avphys_pages F
+ get_current_dir_name F
+ get_kernel_syms F
+ get_myaddress F
+ get_nprocs F
+ get_nprocs_conf F
+ get_phys_pages F
+ getaddrinfo F
+ getaliasbyname F
+ getaliasbyname_r F
+ getaliasent F
+ getaliasent_r F
+ getauxval F
+ getc F
+ getc_unlocked F
+ getchar F
+ getchar_unlocked F
+ getcontext F
+ getcwd F
+ getdate F
+ getdate_err D 0x4
+ getdate_r F
+ getdelim F
+ getdirentries F
+ getdirentries64 F
+ getdomainname F
+ getdtablesize F
+ getegid F
+ getenv F
+ geteuid F
+ getfsent F
+ getfsfile F
+ getfsspec F
+ getgid F
+ getgrent F
+ getgrent_r F
+ getgrgid F
+ getgrgid_r F
+ getgrnam F
+ getgrnam_r F
+ getgrouplist F
+ getgroups F
+ gethostbyaddr F
+ gethostbyaddr_r F
+ gethostbyname F
+ gethostbyname2 F
+ gethostbyname2_r F
+ gethostbyname_r F
+ gethostent F
+ gethostent_r F
+ gethostid F
+ gethostname F
+ getifaddrs F
+ getipv4sourcefilter F
+ getitimer F
+ getline F
+ getloadavg F
+ getlogin F
+ getlogin_r F
+ getmntent F
+ getmntent_r F
+ getmsg F
+ getnameinfo F
+ getnetbyaddr F
+ getnetbyaddr_r F
+ getnetbyname F
+ getnetbyname_r F
+ getnetent F
+ getnetent_r F
+ getnetgrent F
+ getnetgrent_r F
+ getnetname F
+ getopt F
+ getopt_long F
+ getopt_long_only F
+ getpagesize F
+ getpass F
+ getpeername F
+ getpgid F
+ getpgrp F
+ getpid F
+ getpmsg F
+ getppid F
+ getpriority F
+ getprotobyname F
+ getprotobyname_r F
+ getprotobynumber F
+ getprotobynumber_r F
+ getprotoent F
+ getprotoent_r F
+ getpt F
+ getpublickey F
+ getpw F
+ getpwent F
+ getpwent_r F
+ getpwnam F
+ getpwnam_r F
+ getpwuid F
+ getpwuid_r F
+ getresgid F
+ getresuid F
+ getrlimit F
+ getrlimit64 F
+ getrpcbyname F
+ getrpcbyname_r F
+ getrpcbynumber F
+ getrpcbynumber_r F
+ getrpcent F
+ getrpcent_r F
+ getrpcport F
+ getrusage F
+ gets F
+ getsecretkey F
+ getservbyname F
+ getservbyname_r F
+ getservbyport F
+ getservbyport_r F
+ getservent F
+ getservent_r F
+ getsgent F
+ getsgent_r F
+ getsgnam F
+ getsgnam_r F
+ getsid F
+ getsockname F
+ getsockopt F
+ getsourcefilter F
+ getspent F
+ getspent_r F
+ getspnam F
+ getspnam_r F
+ getsubopt F
+ gettext F
+ gettimeofday F
+ getttyent F
+ getttynam F
+ getuid F
+ getusershell F
+ getutent F
+ getutent_r F
+ getutid F
+ getutid_r F
+ getutline F
+ getutline_r F
+ getutmp F
+ getutmpx F
+ getutxent F
+ getutxid F
+ getutxline F
+ getw F
+ getwc F
+ getwc_unlocked F
+ getwchar F
+ getwchar_unlocked F
+ getwd F
+ getxattr F
+ glob F
+ glob64 F
+ glob_pattern_p F
+ globfree F
+ globfree64 F
+ gmtime F
+ gmtime_r F
+ gnu_dev_major F
+ gnu_dev_makedev F
+ gnu_dev_minor F
+ gnu_get_libc_release F
+ gnu_get_libc_version F
+ grantpt F
+ group_member F
+ gsignal F
+ gtty F
+ h_errlist D 0x14
+ h_nerr D 0x4
+ hasmntopt F
+ hcreate F
+ hcreate_r F
+ hdestroy F
+ hdestroy_r F
+ herror F
+ host2netname F
+ hsearch F
+ hsearch_r F
+ hstrerror F
+ htonl F
+ htons F
+ iconv F
+ iconv_close F
+ iconv_open F
+ if_freenameindex F
+ if_indextoname F
+ if_nameindex F
+ if_nametoindex F
+ imaxabs F
+ imaxdiv F
+ in6addr_any D 0x10
+ in6addr_loopback D 0x10
+ index F
+ inet6_opt_append F
+ inet6_opt_find F
+ inet6_opt_finish F
+ inet6_opt_get_val F
+ inet6_opt_init F
+ inet6_opt_next F
+ inet6_opt_set_val F
+ inet6_option_alloc F
+ inet6_option_append F
+ inet6_option_find F
+ inet6_option_init F
+ inet6_option_next F
+ inet6_option_space F
+ inet6_rth_add F
+ inet6_rth_getaddr F
+ inet6_rth_init F
+ inet6_rth_reverse F
+ inet6_rth_segments F
+ inet6_rth_space F
+ inet_addr F
+ inet_aton F
+ inet_lnaof F
+ inet_makeaddr F
+ inet_netof F
+ inet_network F
+ inet_nsap_addr F
+ inet_nsap_ntoa F
+ inet_ntoa F
+ inet_ntop F
+ inet_pton F
+ init_module F
+ initgroups F
+ initstate F
+ initstate_r F
+ innetgr F
+ inotify_add_watch F
+ inotify_init F
+ inotify_init1 F
+ inotify_rm_watch F
+ insque F
+ ioctl F
+ iruserok F
+ iruserok_af F
+ isalnum F
+ isalnum_l F
+ isalpha F
+ isalpha_l F
+ isascii F
+ isastream F
+ isatty F
+ isblank F
+ isblank_l F
+ iscntrl F
+ iscntrl_l F
+ isctype F
+ isdigit F
+ isdigit_l F
+ isfdtype F
+ isgraph F
+ isgraph_l F
+ isinf F
+ isinff F
+ isinfl F
+ islower F
+ islower_l F
+ isnan F
+ isnanf F
+ isnanl F
+ isprint F
+ isprint_l F
+ ispunct F
+ ispunct_l F
+ isspace F
+ isspace_l F
+ isupper F
+ isupper_l F
+ iswalnum F
+ iswalnum_l F
+ iswalpha F
+ iswalpha_l F
+ iswblank F
+ iswblank_l F
+ iswcntrl F
+ iswcntrl_l F
+ iswctype F
+ iswctype_l F
+ iswdigit F
+ iswdigit_l F
+ iswgraph F
+ iswgraph_l F
+ iswlower F
+ iswlower_l F
+ iswprint F
+ iswprint_l F
+ iswpunct F
+ iswpunct_l F
+ iswspace F
+ iswspace_l F
+ iswupper F
+ iswupper_l F
+ iswxdigit F
+ iswxdigit_l F
+ isxdigit F
+ isxdigit_l F
+ jrand48 F
+ jrand48_r F
+ key_decryptsession F
+ key_decryptsession_pk F
+ key_encryptsession F
+ key_encryptsession_pk F
+ key_gendes F
+ key_get_conv F
+ key_secretkey_is_set F
+ key_setnet F
+ key_setsecret F
+ kill F
+ killpg F
+ klogctl F
+ l64a F
+ labs F
+ lchmod F
+ lchown F
+ lckpwdf F
+ lcong48 F
+ lcong48_r F
+ ldexp F
+ ldexpf F
+ ldexpl F
+ ldiv F
+ lfind F
+ lgetxattr F
+ link F
+ linkat F
+ listen F
+ listxattr F
+ llabs F
+ lldiv F
+ llistxattr F
+ llseek F
+ loc1 D 0x4
+ loc2 D 0x4
+ localeconv F
+ localtime F
+ localtime_r F
+ lockf F
+ lockf64 F
+ locs D 0x4
+ longjmp F
+ lrand48 F
+ lrand48_r F
+ lremovexattr F
+ lsearch F
+ lseek F
+ lseek64 F
+ lsetxattr F
+ lutimes F
+ madvise F
+ makecontext F
+ mallinfo F
+ malloc F
+ malloc_get_state F
+ malloc_info F
+ malloc_set_state F
+ malloc_stats F
+ malloc_trim F
+ malloc_usable_size F
+ mallopt F
+ mallwatch D 0x4
+ mblen F
+ mbrlen F
+ mbrtoc16 F
+ mbrtoc32 F
+ mbrtowc F
+ mbsinit F
+ mbsnrtowcs F
+ mbsrtowcs F
+ mbstowcs F
+ mbtowc F
+ mcheck F
+ mcheck_check_all F
+ mcheck_pedantic F
+ memalign F
+ memccpy F
+ memchr F
+ memcmp F
+ memcpy F
+ memfrob F
+ memmem F
+ memmove F
+ mempcpy F
+ memrchr F
+ memset F
+ mincore F
+ mkdir F
+ mkdirat F
+ mkdtemp F
+ mkfifo F
+ mkfifoat F
+ mkostemp F
+ mkostemp64 F
+ mkostemps F
+ mkostemps64 F
+ mkstemp F
+ mkstemp64 F
+ mkstemps F
+ mkstemps64 F
+ mktemp F
+ mktime F
+ mlock F
+ mlockall F
+ mmap F
+ mmap64 F
+ modf F
+ modff F
+ modfl F
+ moncontrol F
+ monstartup F
+ mount F
+ mprobe F
+ mprotect F
+ mrand48 F
+ mrand48_r F
+ mremap F
+ msgctl F
+ msgget F
+ msgrcv F
+ msgsnd F
+ msync F
+ mtrace F
+ munlock F
+ munlockall F
+ munmap F
+ muntrace F
+ name_to_handle_at F
+ nanosleep F
+ netname2host F
+ netname2user F
+ newlocale F
+ nfsservctl F
+ nftw F
+ nftw64 F
+ ngettext F
+ nice F
+ nl_langinfo F
+ nl_langinfo_l F
+ nrand48 F
+ nrand48_r F
+ ntohl F
+ ntohs F
+ ntp_adjtime F
+ ntp_gettime F
+ ntp_gettimex F
+ obstack_alloc_failed_handler D 0x4
+ obstack_exit_failure D 0x4
+ obstack_free F
+ obstack_printf F
+ obstack_vprintf F
+ on_exit F
+ open F
+ open64 F
+ open_by_handle_at F
+ open_memstream F
+ open_wmemstream F
+ openat F
+ openat64 F
+ opendir F
+ openlog F
+ optarg D 0x4
+ opterr D 0x4
+ optind D 0x4
+ optopt D 0x4
+ parse_printf_format F
+ passwd2des F
+ pathconf F
+ pause F
+ pclose F
+ perror F
+ personality F
+ pipe F
+ pipe2 F
+ pivot_root F
+ pmap_getmaps F
+ pmap_getport F
+ pmap_rmtcall F
+ pmap_set F
+ pmap_unset F
+ poll F
+ popen F
+ posix_fadvise F
+ posix_fadvise64 F
+ posix_fallocate F
+ posix_fallocate64 F
+ posix_madvise F
+ posix_memalign F
+ posix_openpt F
+ posix_spawn F
+ posix_spawn_file_actions_addclose F
+ posix_spawn_file_actions_adddup2 F
+ posix_spawn_file_actions_addopen F
+ posix_spawn_file_actions_destroy F
+ posix_spawn_file_actions_init F
+ posix_spawnattr_destroy F
+ posix_spawnattr_getflags F
+ posix_spawnattr_getpgroup F
+ posix_spawnattr_getschedparam F
+ posix_spawnattr_getschedpolicy F
+ posix_spawnattr_getsigdefault F
+ posix_spawnattr_getsigmask F
+ posix_spawnattr_init F
+ posix_spawnattr_setflags F
+ posix_spawnattr_setpgroup F
+ posix_spawnattr_setschedparam F
+ posix_spawnattr_setschedpolicy F
+ posix_spawnattr_setsigdefault F
+ posix_spawnattr_setsigmask F
+ posix_spawnp F
+ ppoll F
+ prctl F
+ pread F
+ pread64 F
+ preadv F
+ preadv64 F
+ printf F
+ printf_size F
+ printf_size_info F
+ prlimit F
+ prlimit64 F
+ process_vm_readv F
+ process_vm_writev F
+ profil F
+ program_invocation_name D 0x4
+ program_invocation_short_name D 0x4
+ pselect F
+ psiginfo F
+ psignal F
+ pthread_attr_destroy F
+ pthread_attr_getdetachstate F
+ pthread_attr_getinheritsched F
+ pthread_attr_getschedparam F
+ pthread_attr_getschedpolicy F
+ pthread_attr_getscope F
+ pthread_attr_init F
+ pthread_attr_setdetachstate F
+ pthread_attr_setinheritsched F
+ pthread_attr_setschedparam F
+ pthread_attr_setschedpolicy F
+ pthread_attr_setscope F
+ pthread_cond_broadcast F
+ pthread_cond_destroy F
+ pthread_cond_init F
+ pthread_cond_signal F
+ pthread_cond_timedwait F
+ pthread_cond_wait F
+ pthread_condattr_destroy F
+ pthread_condattr_init F
+ pthread_equal F
+ pthread_exit F
+ pthread_getschedparam F
+ pthread_mutex_destroy F
+ pthread_mutex_init F
+ pthread_mutex_lock F
+ pthread_mutex_unlock F
+ pthread_self F
+ pthread_setcancelstate F
+ pthread_setcanceltype F
+ pthread_setschedparam F
+ ptrace F
+ ptsname F
+ ptsname_r F
+ putc F
+ putc_unlocked F
+ putchar F
+ putchar_unlocked F
+ putenv F
+ putgrent F
+ putmsg F
+ putpmsg F
+ putpwent F
+ puts F
+ putsgent F
+ putspent F
+ pututline F
+ pututxline F
+ putw F
+ putwc F
+ putwc_unlocked F
+ putwchar F
+ putwchar_unlocked F
+ pvalloc F
+ pwrite F
+ pwrite64 F
+ pwritev F
+ pwritev64 F
+ qecvt F
+ qecvt_r F
+ qfcvt F
+ qfcvt_r F
+ qgcvt F
+ qsort F
+ qsort_r F
+ query_module F
+ quick_exit F
+ quotactl F
+ raise F
+ rand F
+ rand_r F
+ random F
+ random_r F
+ rawmemchr F
+ rcmd F
+ rcmd_af F
+ re_comp F
+ re_compile_fastmap F
+ re_compile_pattern F
+ re_exec F
+ re_match F
+ re_match_2 F
+ re_search F
+ re_search_2 F
+ re_set_registers F
+ re_set_syntax F
+ re_syntax_options D 0x4
+ read F
+ readahead F
+ readdir F
+ readdir64 F
+ readdir64_r F
+ readdir_r F
+ readlink F
+ readlinkat F
+ readv F
+ realloc F
+ realpath F
+ reboot F
+ recv F
+ recvfrom F
+ recvmmsg F
+ recvmsg F
+ regcomp F
+ regerror F
+ regexec F
+ regfree F
+ register_printf_function F
+ register_printf_modifier F
+ register_printf_specifier F
+ register_printf_type F
+ registerrpc F
+ remap_file_pages F
+ remove F
+ removexattr F
+ remque F
+ rename F
+ renameat F
+ revoke F
+ rewind F
+ rewinddir F
+ rexec F
+ rexec_af F
+ rexecoptions D 0x4
+ rindex F
+ rmdir F
+ rpc_createerr D 0x10
+ rpmatch F
+ rresvport F
+ rresvport_af F
+ rtime F
+ ruserok F
+ ruserok_af F
+ ruserpass F
+ sbrk F
+ scalbn F
+ scalbnf F
+ scalbnl F
+ scandir F
+ scandir64 F
+ scandirat F
+ scandirat64 F
+ scanf F
+ sched_get_priority_max F
+ sched_get_priority_min F
+ sched_getaffinity F
+ sched_getcpu F
+ sched_getparam F
+ sched_getscheduler F
+ sched_rr_get_interval F
+ sched_setaffinity F
+ sched_setparam F
+ sched_setscheduler F
+ sched_yield F
+ secure_getenv F
+ seed48 F
+ seed48_r F
+ seekdir F
+ select F
+ semctl F
+ semget F
+ semop F
+ semtimedop F
+ send F
+ sendfile F
+ sendfile64 F
+ sendmmsg F
+ sendmsg F
+ sendto F
+ setaliasent F
+ setbuf F
+ setbuffer F
+ setcontext F
+ setdomainname F
+ setegid F
+ setenv F
+ seteuid F
+ setfsent F
+ setfsgid F
+ setfsuid F
+ setgid F
+ setgrent F
+ setgroups F
+ sethostent F
+ sethostid F
+ sethostname F
+ setipv4sourcefilter F
+ setitimer F
+ setjmp F
+ setlinebuf F
+ setlocale F
+ setlogin F
+ setlogmask F
+ setmntent F
+ setnetent F
+ setnetgrent F
+ setns F
+ setpgid F
+ setpgrp F
+ setpriority F
+ setprotoent F
+ setpwent F
+ setregid F
+ setresgid F
+ setresuid F
+ setreuid F
+ setrlimit F
+ setrlimit64 F
+ setrpcent F
+ setservent F
+ setsgent F
+ setsid F
+ setsockopt F
+ setsourcefilter F
+ setspent F
+ setstate F
+ setstate_r F
+ settimeofday F
+ setttyent F
+ setuid F
+ setusershell F
+ setutent F
+ setutxent F
+ setvbuf F
+ setxattr F
+ sgetsgent F
+ sgetsgent_r F
+ sgetspent F
+ sgetspent_r F
+ shmat F
+ shmctl F
+ shmdt F
+ shmget F
+ shutdown F
+ sigaction F
+ sigaddset F
+ sigaltstack F
+ sigandset F
+ sigblock F
+ sigdelset F
+ sigemptyset F
+ sigfillset F
+ siggetmask F
+ sighold F
+ sigignore F
+ siginterrupt F
+ sigisemptyset F
+ sigismember F
+ siglongjmp F
+ signal F
+ signalfd F
+ sigorset F
+ sigpause F
+ sigpending F
+ sigprocmask F
+ sigqueue F
+ sigrelse F
+ sigreturn F
+ sigset F
+ sigsetmask F
+ sigstack F
+ sigsuspend F
+ sigtimedwait F
+ sigvec F
+ sigwait F
+ sigwaitinfo F
+ sleep F
+ snprintf F
+ sockatmark F
+ socket F
+ socketpair F
+ splice F
+ sprintf F
+ sprofil F
+ srand F
+ srand48 F
+ srand48_r F
+ srandom F
+ srandom_r F
+ sscanf F
+ ssignal F
+ sstk F
+ statfs F
+ statfs64 F
+ statvfs F
+ statvfs64 F
+ stderr D 0x4
+ stdin D 0x4
+ stdout D 0x4
+ step F
+ stime F
+ stpcpy F
+ stpncpy F
+ strcasecmp F
+ strcasecmp_l F
+ strcasestr F
+ strcat F
+ strchr F
+ strchrnul F
+ strcmp F
+ strcoll F
+ strcoll_l F
+ strcpy F
+ strcspn F
+ strdup F
+ strerror F
+ strerror_l F
+ strerror_r F
+ strfmon F
+ strfmon_l F
+ strfry F
+ strftime F
+ strftime_l F
+ strlen F
+ strncasecmp F
+ strncasecmp_l F
+ strncat F
+ strncmp F
+ strncpy F
+ strndup F
+ strnlen F
+ strpbrk F
+ strptime F
+ strptime_l F
+ strrchr F
+ strsep F
+ strsignal F
+ strspn F
+ strstr F
+ strtod F
+ strtod_l F
+ strtof F
+ strtof_l F
+ strtoimax F
+ strtok F
+ strtok_r F
+ strtol F
+ strtol_l F
+ strtold F
+ strtold_l F
+ strtoll F
+ strtoll_l F
+ strtoq F
+ strtoul F
+ strtoul_l F
+ strtoull F
+ strtoull_l F
+ strtoumax F
+ strtouq F
+ strverscmp F
+ strxfrm F
+ strxfrm_l F
+ stty F
+ svc_exit F
+ svc_fdset D 0x80
+ svc_getreq F
+ svc_getreq_common F
+ svc_getreq_poll F
+ svc_getreqset F
+ svc_max_pollfd D 0x4
+ svc_pollfd D 0x4
+ svc_register F
+ svc_run F
+ svc_sendreply F
+ svc_unregister F
+ svcauthdes_stats D 0xc
+ svcerr_auth F
+ svcerr_decode F
+ svcerr_noproc F
+ svcerr_noprog F
+ svcerr_progvers F
+ svcerr_systemerr F
+ svcerr_weakauth F
+ svcfd_create F
+ svcraw_create F
+ svctcp_create F
+ svcudp_bufcreate F
+ svcudp_create F
+ svcudp_enablecache F
+ svcunix_create F
+ svcunixfd_create F
+ swab F
+ swapcontext F
+ swapoff F
+ swapon F
+ swprintf F
+ swscanf F
+ symlink F
+ symlinkat F
+ sync F
+ sync_file_range F
+ syncfs F
+ sys_errlist D 0x21c
+ sys_nerr D 0x4
+ sys_sigabbrev D 0x104
+ sys_siglist D 0x104
+ syscall F
+ sysconf F
+ sysctl F
+ sysinfo F
+ syslog F
+ system F
+ sysv_signal F
+ tcdrain F
+ tcflow F
+ tcflush F
+ tcgetattr F
+ tcgetpgrp F
+ tcgetsid F
+ tcsendbreak F
+ tcsetattr F
+ tcsetpgrp F
+ tdelete F
+ tdestroy F
+ tee F
+ telldir F
+ tempnam F
+ textdomain F
+ tfind F
+ time F
+ timegm F
+ timelocal F
+ timerfd_create F
+ timerfd_gettime F
+ timerfd_settime F
+ times F
+ timespec_get F
+ timezone D 0x4
+ tmpfile F
+ tmpfile64 F
+ tmpnam F
+ tmpnam_r F
+ toascii F
+ tolower F
+ tolower_l F
+ toupper F
+ toupper_l F
+ towctrans F
+ towctrans_l F
+ towlower F
+ towlower_l F
+ towupper F
+ towupper_l F
+ tr_break F
+ truncate F
+ truncate64 F
+ tsearch F
+ ttyname F
+ ttyname_r F
+ ttyslot F
+ twalk F
+ tzname D 0x8
+ tzset F
+ ualarm F
+ ulckpwdf F
+ ulimit F
+ umask F
+ umount F
+ umount2 F
+ uname F
+ ungetc F
+ ungetwc F
+ unlink F
+ unlinkat F
+ unlockpt F
+ unsetenv F
+ unshare F
+ updwtmp F
+ updwtmpx F
+ uselib F
+ uselocale F
+ user2netname F
+ usleep F
+ ustat F
+ utime F
+ utimensat F
+ utimes F
+ utmpname F
+ utmpxname F
+ valloc F
+ vasprintf F
+ vdprintf F
+ verr F
+ verrx F
+ versionsort F
+ versionsort64 F
+ vfork F
+ vfprintf F
+ vfscanf F
+ vfwprintf F
+ vfwscanf F
+ vhangup F
+ vlimit F
+ vmsplice F
+ vprintf F
+ vscanf F
+ vsnprintf F
+ vsprintf F
+ vsscanf F
+ vswprintf F
+ vswscanf F
+ vsyslog F
+ vtimes F
+ vwarn F
+ vwarnx F
+ vwprintf F
+ vwscanf F
+ wait F
+ wait3 F
+ wait4 F
+ waitid F
+ waitpid F
+ warn F
+ warnx F
+ wcpcpy F
+ wcpncpy F
+ wcrtomb F
+ wcscasecmp F
+ wcscasecmp_l F
+ wcscat F
+ wcschr F
+ wcschrnul F
+ wcscmp F
+ wcscoll F
+ wcscoll_l F
+ wcscpy F
+ wcscspn F
+ wcsdup F
+ wcsftime F
+ wcsftime_l F
+ wcslen F
+ wcsncasecmp F
+ wcsncasecmp_l F
+ wcsncat F
+ wcsncmp F
+ wcsncpy F
+ wcsnlen F
+ wcsnrtombs F
+ wcspbrk F
+ wcsrchr F
+ wcsrtombs F
+ wcsspn F
+ wcsstr F
+ wcstod F
+ wcstod_l F
+ wcstof F
+ wcstof_l F
+ wcstoimax F
+ wcstok F
+ wcstol F
+ wcstol_l F
+ wcstold F
+ wcstold_l F
+ wcstoll F
+ wcstoll_l F
+ wcstombs F
+ wcstoq F
+ wcstoul F
+ wcstoul_l F
+ wcstoull F
+ wcstoull_l F
+ wcstoumax F
+ wcstouq F
+ wcswcs F
+ wcswidth F
+ wcsxfrm F
+ wcsxfrm_l F
+ wctob F
+ wctomb F
+ wctrans F
+ wctrans_l F
+ wctype F
+ wctype_l F
+ wcwidth F
+ wmemchr F
+ wmemcmp F
+ wmemcpy F
+ wmemmove F
+ wmempcpy F
+ wmemset F
+ wordexp F
+ wordfree F
+ wprintf F
+ write F
+ writev F
+ wscanf F
+ xdecrypt F
+ xdr_accepted_reply F
+ xdr_array F
+ xdr_authdes_cred F
+ xdr_authdes_verf F
+ xdr_authunix_parms F
+ xdr_bool F
+ xdr_bytes F
+ xdr_callhdr F
+ xdr_callmsg F
+ xdr_char F
+ xdr_cryptkeyarg F
+ xdr_cryptkeyarg2 F
+ xdr_cryptkeyres F
+ xdr_des_block F
+ xdr_double F
+ xdr_enum F
+ xdr_float F
+ xdr_free F
+ xdr_getcredres F
+ xdr_hyper F
+ xdr_int F
+ xdr_int16_t F
+ xdr_int32_t F
+ xdr_int64_t F
+ xdr_int8_t F
+ xdr_key_netstarg F
+ xdr_key_netstres F
+ xdr_keybuf F
+ xdr_keystatus F
+ xdr_long F
+ xdr_longlong_t F
+ xdr_netnamestr F
+ xdr_netobj F
+ xdr_opaque F
+ xdr_opaque_auth F
+ xdr_pmap F
+ xdr_pmaplist F
+ xdr_pointer F
+ xdr_quad_t F
+ xdr_reference F
+ xdr_rejected_reply F
+ xdr_replymsg F
+ xdr_rmtcall_args F
+ xdr_rmtcallres F
+ xdr_short F
+ xdr_sizeof F
+ xdr_string F
+ xdr_u_char F
+ xdr_u_hyper F
+ xdr_u_int F
+ xdr_u_long F
+ xdr_u_longlong_t F
+ xdr_u_quad_t F
+ xdr_u_short F
+ xdr_uint16_t F
+ xdr_uint32_t F
+ xdr_uint64_t F
+ xdr_uint8_t F
+ xdr_union F
+ xdr_unixcred F
+ xdr_vector F
+ xdr_void F
+ xdr_wrapstring F
+ xdrmem_create F
+ xdrrec_create F
+ xdrrec_endofrecord F
+ xdrrec_eof F
+ xdrrec_skiprecord F
+ xdrstdio_create F
+ xencrypt F
+ xprt_register F
+ xprt_unregister F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libcrypt.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libcrypt.abilist
new file mode 100644
index 0000000..0ac28c5
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libcrypt.abilist
@@ -0,0 +1,9 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ crypt F
+ crypt_r F
+ encrypt F
+ encrypt_r F
+ fcrypt F
+ setkey F
+ setkey_r F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libdl.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libdl.abilist
new file mode 100644
index 0000000..aa89245
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libdl.abilist
@@ -0,0 +1,11 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ dladdr F
+ dladdr1 F
+ dlclose F
+ dlerror F
+ dlinfo F
+ dlmopen F
+ dlopen F
+ dlsym F
+ dlvsym F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libm.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libm.abilist
new file mode 100644
index 0000000..8d6327c
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libm.abilist
@@ -0,0 +1,370 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ _LIB_VERSION D 0x4
+ __acos_finite F
+ __acosf_finite F
+ __acosh_finite F
+ __acoshf_finite F
+ __asin_finite F
+ __asinf_finite F
+ __atan2_finite F
+ __atan2f_finite F
+ __atanh_finite F
+ __atanhf_finite F
+ __clog10 F
+ __clog10f F
+ __clog10l F
+ __cosh_finite F
+ __coshf_finite F
+ __exp10_finite F
+ __exp10f_finite F
+ __exp2_finite F
+ __exp2f_finite F
+ __exp_finite F
+ __expf_finite F
+ __finite F
+ __finitef F
+ __finitel F
+ __fmod_finite F
+ __fmodf_finite F
+ __fpclassify F
+ __fpclassifyf F
+ __gamma_r_finite F
+ __gammaf_r_finite F
+ __hypot_finite F
+ __hypotf_finite F
+ __issignaling F
+ __issignalingf F
+ __j0_finite F
+ __j0f_finite F
+ __j1_finite F
+ __j1f_finite F
+ __jn_finite F
+ __jnf_finite F
+ __lgamma_r_finite F
+ __lgammaf_r_finite F
+ __log10_finite F
+ __log10f_finite F
+ __log2_finite F
+ __log2f_finite F
+ __log_finite F
+ __logf_finite F
+ __pow_finite F
+ __powf_finite F
+ __remainder_finite F
+ __remainderf_finite F
+ __scalb_finite F
+ __scalbf_finite F
+ __signbit F
+ __signbitf F
+ __sinh_finite F
+ __sinhf_finite F
+ __sqrt_finite F
+ __sqrtf_finite F
+ __y0_finite F
+ __y0f_finite F
+ __y1_finite F
+ __y1f_finite F
+ __yn_finite F
+ __ynf_finite F
+ acos F
+ acosf F
+ acosh F
+ acoshf F
+ acoshl F
+ acosl F
+ asin F
+ asinf F
+ asinh F
+ asinhf F
+ asinhl F
+ asinl F
+ atan F
+ atan2 F
+ atan2f F
+ atan2l F
+ atanf F
+ atanh F
+ atanhf F
+ atanhl F
+ atanl F
+ cabs F
+ cabsf F
+ cabsl F
+ cacos F
+ cacosf F
+ cacosh F
+ cacoshf F
+ cacoshl F
+ cacosl F
+ carg F
+ cargf F
+ cargl F
+ casin F
+ casinf F
+ casinh F
+ casinhf F
+ casinhl F
+ casinl F
+ catan F
+ catanf F
+ catanh F
+ catanhf F
+ catanhl F
+ catanl F
+ cbrt F
+ cbrtf F
+ cbrtl F
+ ccos F
+ ccosf F
+ ccosh F
+ ccoshf F
+ ccoshl F
+ ccosl F
+ ceil F
+ ceilf F
+ ceill F
+ cexp F
+ cexpf F
+ cexpl F
+ cimag F
+ cimagf F
+ cimagl F
+ clog F
+ clog10 F
+ clog10f F
+ clog10l F
+ clogf F
+ clogl F
+ conj F
+ conjf F
+ conjl F
+ copysign F
+ copysignf F
+ copysignl F
+ cos F
+ cosf F
+ cosh F
+ coshf F
+ coshl F
+ cosl F
+ cpow F
+ cpowf F
+ cpowl F
+ cproj F
+ cprojf F
+ cprojl F
+ creal F
+ crealf F
+ creall F
+ csin F
+ csinf F
+ csinh F
+ csinhf F
+ csinhl F
+ csinl F
+ csqrt F
+ csqrtf F
+ csqrtl F
+ ctan F
+ ctanf F
+ ctanh F
+ ctanhf F
+ ctanhl F
+ ctanl F
+ drem F
+ dremf F
+ dreml F
+ erf F
+ erfc F
+ erfcf F
+ erfcl F
+ erff F
+ erfl F
+ exp F
+ exp10 F
+ exp10f F
+ exp10l F
+ exp2 F
+ exp2f F
+ exp2l F
+ expf F
+ expl F
+ expm1 F
+ expm1f F
+ expm1l F
+ fabs F
+ fabsf F
+ fabsl F
+ fdim F
+ fdimf F
+ fdiml F
+ feclearexcept F
+ fedisableexcept F
+ feenableexcept F
+ fegetenv F
+ fegetexcept F
+ fegetexceptflag F
+ fegetround F
+ feholdexcept F
+ feraiseexcept F
+ fesetenv F
+ fesetexceptflag F
+ fesetround F
+ fetestexcept F
+ feupdateenv F
+ finite F
+ finitef F
+ finitel F
+ floor F
+ floorf F
+ floorl F
+ fma F
+ fmaf F
+ fmal F
+ fmax F
+ fmaxf F
+ fmaxl F
+ fmin F
+ fminf F
+ fminl F
+ fmod F
+ fmodf F
+ fmodl F
+ frexp F
+ frexpf F
+ frexpl F
+ gamma F
+ gammaf F
+ gammal F
+ hypot F
+ hypotf F
+ hypotl F
+ ilogb F
+ ilogbf F
+ ilogbl F
+ j0 F
+ j0f F
+ j0l F
+ j1 F
+ j1f F
+ j1l F
+ jn F
+ jnf F
+ jnl F
+ ldexp F
+ ldexpf F
+ ldexpl F
+ lgamma F
+ lgamma_r F
+ lgammaf F
+ lgammaf_r F
+ lgammal F
+ lgammal_r F
+ llrint F
+ llrintf F
+ llrintl F
+ llround F
+ llroundf F
+ llroundl F
+ log F
+ log10 F
+ log10f F
+ log10l F
+ log1p F
+ log1pf F
+ log1pl F
+ log2 F
+ log2f F
+ log2l F
+ logb F
+ logbf F
+ logbl F
+ logf F
+ logl F
+ lrint F
+ lrintf F
+ lrintl F
+ lround F
+ lroundf F
+ lroundl F
+ matherr F
+ modf F
+ modff F
+ modfl F
+ nan F
+ nanf F
+ nanl F
+ nearbyint F
+ nearbyintf F
+ nearbyintl F
+ nextafter F
+ nextafterf F
+ nextafterl F
+ nexttoward F
+ nexttowardf F
+ nexttowardl F
+ pow F
+ pow10 F
+ pow10f F
+ pow10l F
+ powf F
+ powl F
+ remainder F
+ remainderf F
+ remainderl F
+ remquo F
+ remquof F
+ remquol F
+ rint F
+ rintf F
+ rintl F
+ round F
+ roundf F
+ roundl F
+ scalb F
+ scalbf F
+ scalbl F
+ scalbln F
+ scalblnf F
+ scalblnl F
+ scalbn F
+ scalbnf F
+ scalbnl F
+ signgam D 0x4
+ significand F
+ significandf F
+ significandl F
+ sin F
+ sincos F
+ sincosf F
+ sincosl F
+ sinf F
+ sinh F
+ sinhf F
+ sinhl F
+ sinl F
+ sqrt F
+ sqrtf F
+ sqrtl F
+ tan F
+ tanf F
+ tanh F
+ tanhf F
+ tanhl F
+ tanl F
+ tgamma F
+ tgammaf F
+ tgammal F
+ trunc F
+ truncf F
+ truncl F
+ y0 F
+ y0f F
+ y0l F
+ y1 F
+ y1f F
+ y1l F
+ yn F
+ ynf F
+ ynl F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libnsl.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libnsl.abilist
new file mode 100644
index 0000000..a476875
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libnsl.abilist
@@ -0,0 +1,123 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ __free_fdresult F
+ __nis_default_access F
+ __nis_default_group F
+ __nis_default_owner F
+ __nis_default_ttl F
+ __nis_finddirectory F
+ __nis_hash F
+ __nisbind_connect F
+ __nisbind_create F
+ __nisbind_destroy F
+ __nisbind_next F
+ __yp_check F
+ nis_add F
+ nis_add_entry F
+ nis_addmember F
+ nis_checkpoint F
+ nis_clone_directory F
+ nis_clone_object F
+ nis_clone_result F
+ nis_creategroup F
+ nis_destroy_object F
+ nis_destroygroup F
+ nis_dir_cmp F
+ nis_domain_of F
+ nis_domain_of_r F
+ nis_first_entry F
+ nis_free_directory F
+ nis_free_object F
+ nis_free_request F
+ nis_freenames F
+ nis_freeresult F
+ nis_freeservlist F
+ nis_freetags F
+ nis_getnames F
+ nis_getservlist F
+ nis_ismember F
+ nis_leaf_of F
+ nis_leaf_of_r F
+ nis_lerror F
+ nis_list F
+ nis_local_directory F
+ nis_local_group F
+ nis_local_host F
+ nis_local_principal F
+ nis_lookup F
+ nis_mkdir F
+ nis_modify F
+ nis_modify_entry F
+ nis_name_of F
+ nis_name_of_r F
+ nis_next_entry F
+ nis_perror F
+ nis_ping F
+ nis_print_directory F
+ nis_print_entry F
+ nis_print_group F
+ nis_print_group_entry F
+ nis_print_link F
+ nis_print_object F
+ nis_print_result F
+ nis_print_rights F
+ nis_print_table F
+ nis_read_obj F
+ nis_remove F
+ nis_remove_entry F
+ nis_removemember F
+ nis_rmdir F
+ nis_servstate F
+ nis_sperrno F
+ nis_sperror F
+ nis_sperror_r F
+ nis_stats F
+ nis_verifygroup F
+ nis_write_obj F
+ readColdStartFile F
+ writeColdStartFile F
+ xdr_cback_data F
+ xdr_domainname F
+ xdr_keydat F
+ xdr_mapname F
+ xdr_obj_p F
+ xdr_peername F
+ xdr_valdat F
+ xdr_yp_buf F
+ xdr_ypall F
+ xdr_ypbind_binding F
+ xdr_ypbind_resp F
+ xdr_ypbind_resptype F
+ xdr_ypbind_setdom F
+ xdr_ypdelete_args F
+ xdr_ypmap_parms F
+ xdr_ypmaplist F
+ xdr_yppush_status F
+ xdr_yppushresp_xfr F
+ xdr_ypreq_key F
+ xdr_ypreq_nokey F
+ xdr_ypreq_xfr F
+ xdr_ypresp_all F
+ xdr_ypresp_key_val F
+ xdr_ypresp_maplist F
+ xdr_ypresp_master F
+ xdr_ypresp_order F
+ xdr_ypresp_val F
+ xdr_ypresp_xfr F
+ xdr_ypstat F
+ xdr_ypupdate_args F
+ xdr_ypxfrstat F
+ yp_all F
+ yp_bind F
+ yp_first F
+ yp_get_default_domain F
+ yp_maplist F
+ yp_master F
+ yp_match F
+ yp_next F
+ yp_order F
+ yp_unbind F
+ yp_update F
+ ypbinderr_string F
+ yperr_string F
+ ypprot_err F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libpthread.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libpthread.abilist
new file mode 100644
index 0000000..f2c65fb
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libpthread.abilist
@@ -0,0 +1,224 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ _IO_flockfile F
+ _IO_ftrylockfile F
+ _IO_funlockfile F
+ __close F
+ __connect F
+ __errno_location F
+ __fcntl F
+ __fork F
+ __h_errno_location F
+ __libc_allocate_rtsig F
+ __libc_current_sigrtmax F
+ __libc_current_sigrtmin F
+ __lseek F
+ __nanosleep F
+ __open F
+ __open64 F
+ __pread64 F
+ __pthread_cleanup_routine F
+ __pthread_getspecific F
+ __pthread_key_create F
+ __pthread_mutex_destroy F
+ __pthread_mutex_init F
+ __pthread_mutex_lock F
+ __pthread_mutex_trylock F
+ __pthread_mutex_unlock F
+ __pthread_mutexattr_destroy F
+ __pthread_mutexattr_init F
+ __pthread_mutexattr_settype F
+ __pthread_once F
+ __pthread_register_cancel F
+ __pthread_register_cancel_defer F
+ __pthread_rwlock_destroy F
+ __pthread_rwlock_init F
+ __pthread_rwlock_rdlock F
+ __pthread_rwlock_tryrdlock F
+ __pthread_rwlock_trywrlock F
+ __pthread_rwlock_unlock F
+ __pthread_rwlock_wrlock F
+ __pthread_setspecific F
+ __pthread_unregister_cancel F
+ __pthread_unregister_cancel_restore F
+ __pthread_unwind_next F
+ __pwrite64 F
+ __read F
+ __res_state F
+ __send F
+ __sigaction F
+ __vfork F
+ __wait F
+ __write F
+ _pthread_cleanup_pop F
+ _pthread_cleanup_pop_restore F
+ _pthread_cleanup_push F
+ _pthread_cleanup_push_defer F
+ accept F
+ close F
+ connect F
+ fcntl F
+ flockfile F
+ fork F
+ fsync F
+ ftrylockfile F
+ funlockfile F
+ longjmp F
+ lseek F
+ lseek64 F
+ msync F
+ nanosleep F
+ open F
+ open64 F
+ pause F
+ pread F
+ pread64 F
+ pthread_attr_destroy F
+ pthread_attr_getaffinity_np F
+ pthread_attr_getdetachstate F
+ pthread_attr_getguardsize F
+ pthread_attr_getinheritsched F
+ pthread_attr_getschedparam F
+ pthread_attr_getschedpolicy F
+ pthread_attr_getscope F
+ pthread_attr_getstack F
+ pthread_attr_getstackaddr F
+ pthread_attr_getstacksize F
+ pthread_attr_init F
+ pthread_attr_setaffinity_np F
+ pthread_attr_setdetachstate F
+ pthread_attr_setguardsize F
+ pthread_attr_setinheritsched F
+ pthread_attr_setschedparam F
+ pthread_attr_setschedpolicy F
+ pthread_attr_setscope F
+ pthread_attr_setstack F
+ pthread_attr_setstackaddr F
+ pthread_attr_setstacksize F
+ pthread_barrier_destroy F
+ pthread_barrier_init F
+ pthread_barrier_wait F
+ pthread_barrierattr_destroy F
+ pthread_barrierattr_getpshared F
+ pthread_barrierattr_init F
+ pthread_barrierattr_setpshared F
+ pthread_cancel F
+ pthread_cond_broadcast F
+ pthread_cond_destroy F
+ pthread_cond_init F
+ pthread_cond_signal F
+ pthread_cond_timedwait F
+ pthread_cond_wait F
+ pthread_condattr_destroy F
+ pthread_condattr_getclock F
+ pthread_condattr_getpshared F
+ pthread_condattr_init F
+ pthread_condattr_setclock F
+ pthread_condattr_setpshared F
+ pthread_create F
+ pthread_detach F
+ pthread_equal F
+ pthread_exit F
+ pthread_getaffinity_np F
+ pthread_getattr_np F
+ pthread_getconcurrency F
+ pthread_getcpuclockid F
+ pthread_getname_np F
+ pthread_getschedparam F
+ pthread_getspecific F
+ pthread_join F
+ pthread_key_create F
+ pthread_key_delete F
+ pthread_kill F
+ pthread_kill_other_threads_np F
+ pthread_mutex_consistent F
+ pthread_mutex_consistent_np F
+ pthread_mutex_destroy F
+ pthread_mutex_getprioceiling F
+ pthread_mutex_init F
+ pthread_mutex_lock F
+ pthread_mutex_setprioceiling F
+ pthread_mutex_timedlock F
+ pthread_mutex_trylock F
+ pthread_mutex_unlock F
+ pthread_mutexattr_destroy F
+ pthread_mutexattr_getkind_np F
+ pthread_mutexattr_getprioceiling F
+ pthread_mutexattr_getprotocol F
+ pthread_mutexattr_getpshared F
+ pthread_mutexattr_getrobust F
+ pthread_mutexattr_getrobust_np F
+ pthread_mutexattr_gettype F
+ pthread_mutexattr_init F
+ pthread_mutexattr_setkind_np F
+ pthread_mutexattr_setprioceiling F
+ pthread_mutexattr_setprotocol F
+ pthread_mutexattr_setpshared F
+ pthread_mutexattr_setrobust F
+ pthread_mutexattr_setrobust_np F
+ pthread_mutexattr_settype F
+ pthread_once F
+ pthread_rwlock_destroy F
+ pthread_rwlock_init F
+ pthread_rwlock_rdlock F
+ pthread_rwlock_timedrdlock F
+ pthread_rwlock_timedwrlock F
+ pthread_rwlock_tryrdlock F
+ pthread_rwlock_trywrlock F
+ pthread_rwlock_unlock F
+ pthread_rwlock_wrlock F
+ pthread_rwlockattr_destroy F
+ pthread_rwlockattr_getkind_np F
+ pthread_rwlockattr_getpshared F
+ pthread_rwlockattr_init F
+ pthread_rwlockattr_setkind_np F
+ pthread_rwlockattr_setpshared F
+ pthread_self F
+ pthread_setaffinity_np F
+ pthread_setcancelstate F
+ pthread_setcanceltype F
+ pthread_setconcurrency F
+ pthread_setname_np F
+ pthread_setschedparam F
+ pthread_setschedprio F
+ pthread_setspecific F
+ pthread_sigmask F
+ pthread_sigqueue F
+ pthread_spin_destroy F
+ pthread_spin_init F
+ pthread_spin_lock F
+ pthread_spin_trylock F
+ pthread_spin_unlock F
+ pthread_testcancel F
+ pthread_timedjoin_np F
+ pthread_tryjoin_np F
+ pthread_yield F
+ pwrite F
+ pwrite64 F
+ raise F
+ read F
+ recv F
+ recvfrom F
+ recvmsg F
+ sem_close F
+ sem_destroy F
+ sem_getvalue F
+ sem_init F
+ sem_open F
+ sem_post F
+ sem_timedwait F
+ sem_trywait F
+ sem_unlink F
+ sem_wait F
+ send F
+ sendmsg F
+ sendto F
+ sigaction F
+ siglongjmp F
+ sigwait F
+ system F
+ tcdrain F
+ vfork F
+ wait F
+ waitpid F
+ write F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libresolv.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libresolv.abilist
new file mode 100644
index 0000000..d9123c9
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libresolv.abilist
@@ -0,0 +1,93 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ __b64_ntop F
+ __b64_pton F
+ __dn_comp F
+ __dn_count_labels F
+ __dn_expand F
+ __dn_skipname F
+ __fp_nquery F
+ __fp_query F
+ __fp_resstat F
+ __hostalias F
+ __loc_aton F
+ __loc_ntoa F
+ __p_cdname F
+ __p_cdnname F
+ __p_class F
+ __p_class_syms D 0x54
+ __p_fqname F
+ __p_fqnname F
+ __p_option F
+ __p_query F
+ __p_rcode F
+ __p_secstodate F
+ __p_time F
+ __p_type F
+ __p_type_syms D 0x228
+ __putlong F
+ __putshort F
+ __res_close F
+ __res_dnok F
+ __res_hnok F
+ __res_hostalias F
+ __res_isourserver F
+ __res_mailok F
+ __res_mkquery F
+ __res_nameinquery F
+ __res_nmkquery F
+ __res_nquery F
+ __res_nquerydomain F
+ __res_nsearch F
+ __res_nsend F
+ __res_ownok F
+ __res_queriesmatch F
+ __res_query F
+ __res_querydomain F
+ __res_search F
+ __res_send F
+ __sym_ntop F
+ __sym_ntos F
+ __sym_ston F
+ _gethtbyaddr F
+ _gethtbyname F
+ _gethtbyname2 F
+ _gethtent F
+ _getlong F
+ _getshort F
+ _res_opcodes D 0x40
+ _sethtent F
+ inet_net_ntop F
+ inet_net_pton F
+ inet_neta F
+ ns_datetosecs F
+ ns_format_ttl F
+ ns_get16 F
+ ns_get32 F
+ ns_initparse F
+ ns_makecanon F
+ ns_msg_getflag F
+ ns_name_compress F
+ ns_name_ntol F
+ ns_name_ntop F
+ ns_name_pack F
+ ns_name_pton F
+ ns_name_rollback F
+ ns_name_skip F
+ ns_name_uncompress F
+ ns_name_unpack F
+ ns_parse_ttl F
+ ns_parserr F
+ ns_put16 F
+ ns_put32 F
+ ns_samedomain F
+ ns_samename F
+ ns_skiprr F
+ ns_sprintrr F
+ ns_sprintrrf F
+ ns_subdomain F
+ res_gethostbyaddr F
+ res_gethostbyname F
+ res_gethostbyname2 F
+ res_send_setqhook F
+ res_send_setrhook F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/librt.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/librt.abilist
new file mode 100644
index 0000000..211e046
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/librt.abilist
@@ -0,0 +1,42 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ __mq_open_2 F
+ aio_cancel F
+ aio_cancel64 F
+ aio_error F
+ aio_error64 F
+ aio_fsync F
+ aio_fsync64 F
+ aio_init F
+ aio_read F
+ aio_read64 F
+ aio_return F
+ aio_return64 F
+ aio_suspend F
+ aio_suspend64 F
+ aio_write F
+ aio_write64 F
+ clock_getcpuclockid F
+ clock_getres F
+ clock_gettime F
+ clock_nanosleep F
+ clock_settime F
+ lio_listio F
+ lio_listio64 F
+ mq_close F
+ mq_getattr F
+ mq_notify F
+ mq_open F
+ mq_receive F
+ mq_send F
+ mq_setattr F
+ mq_timedreceive F
+ mq_timedsend F
+ mq_unlink F
+ shm_open F
+ shm_unlink F
+ timer_create F
+ timer_delete F
+ timer_getoverrun F
+ timer_gettime F
+ timer_settime F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libthread_db.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libthread_db.abilist
new file mode 100644
index 0000000..61d736a
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libthread_db.abilist
@@ -0,0 +1,42 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ td_init F
+ td_log F
+ td_symbol_list F
+ td_ta_clear_event F
+ td_ta_delete F
+ td_ta_enable_stats F
+ td_ta_event_addr F
+ td_ta_event_getmsg F
+ td_ta_get_nthreads F
+ td_ta_get_ph F
+ td_ta_get_stats F
+ td_ta_map_id2thr F
+ td_ta_map_lwp2thr F
+ td_ta_new F
+ td_ta_reset_stats F
+ td_ta_set_event F
+ td_ta_setconcurrency F
+ td_ta_thr_iter F
+ td_ta_tsd_iter F
+ td_thr_clear_event F
+ td_thr_dbresume F
+ td_thr_dbsuspend F
+ td_thr_event_enable F
+ td_thr_event_getmsg F
+ td_thr_get_info F
+ td_thr_getfpregs F
+ td_thr_getgregs F
+ td_thr_getxregs F
+ td_thr_getxregsize F
+ td_thr_set_event F
+ td_thr_setfpregs F
+ td_thr_setgregs F
+ td_thr_setprio F
+ td_thr_setsigpending F
+ td_thr_setxregs F
+ td_thr_sigsetmask F
+ td_thr_tls_get_addr F
+ td_thr_tlsbase F
+ td_thr_tsd F
+ td_thr_validate F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libutil.abilist b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libutil.abilist
new file mode 100644
index 0000000..5563672
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libutil.abilist
@@ -0,0 +1,8 @@
+GLIBC_2.18
+ GLIBC_2.18 A
+ forkpty F
+ login F
+ login_tty F
+ logout F
+ logwtmp F
+ openpty F
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/localplt.data b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/localplt.data
new file mode 100644
index 0000000..6dd5bcb
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/localplt.data
@@ -0,0 +1,11 @@
+libc.so: __errno_location
+libc.so: __signbit
+libc.so: calloc
+libc.so: free
+libc.so: malloc
+libc.so: memalign
+libc.so: realloc
+libm.so: __signbit
+libm.so: __signbitf
+libm.so: matherr
+libpthread.so: __errno_location
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h
new file mode 100644
index 0000000..a7f64de
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h
@@ -0,0 +1,325 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LOWLEVELLOCK_H
+#define _LOWLEVELLOCK_H	1
+
+#include <time.h>
+#include <sys/param.h>
+#include <bits/pthreadtypes.h>
+#include <atomic.h>
+#include <sysdep.h>
+#include <kernel-features.h>
+#include <tls.h>		/* Need THREAD_*, and header.*.  */
+
+#define FUTEX_WAIT		0
+#define FUTEX_WAKE		1
+#define FUTEX_REQUEUE		3
+#define FUTEX_CMP_REQUEUE	4
+#define FUTEX_WAKE_OP		5
+#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE	((4 << 24) | 1)
+#define FUTEX_LOCK_PI		6
+#define FUTEX_UNLOCK_PI		7
+#define FUTEX_TRYLOCK_PI	8
+#define FUTEX_WAIT_BITSET	9
+#define FUTEX_WAKE_BITSET	10
+#define FUTEX_WAIT_REQUEUE_PI   11
+#define FUTEX_CMP_REQUEUE_PI    12
+#define FUTEX_PRIVATE_FLAG	128
+#define FUTEX_CLOCK_REALTIME	256
+
+#define FUTEX_BITSET_MATCH_ANY	0xffffffff
+
+/* Values for 'private' parameter of locking macros.  Yes, the
+   definition seems to be backwards.  But it is not.  The bit will be
+   reversed before passing to the system call.  */
+#define LLL_PRIVATE	0
+#define LLL_SHARED	FUTEX_PRIVATE_FLAG
+
+
+#if !defined NOT_IN_libc || defined IS_IN_rtld
+/* In libc.so or ld.so all futexes are private.  */
+# ifdef __ASSUME_PRIVATE_FUTEX
+#  define __lll_private_flag(fl, private) \
+  ((fl) | FUTEX_PRIVATE_FLAG)
+# else
+#  define __lll_private_flag(fl, private) \
+  ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex))
+# endif
+#else
+# ifdef __ASSUME_PRIVATE_FUTEX
+#  define __lll_private_flag(fl, private) \
+  (((fl) | FUTEX_PRIVATE_FLAG) ^ (private))
+# else
+#  define __lll_private_flag(fl, private) \
+  (__builtin_constant_p (private)					      \
+   ? ((private) == 0							      \
+      ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex))	      \
+      : (fl))								      \
+   : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG)				      \
+	      & THREAD_GETMEM (THREAD_SELF, header.private_futex))))
+# endif
+#endif
+
+
+#define lll_futex_wait(futexp, val, private) \
+  lll_futex_timed_wait (futexp, val, NULL, private)
+
+#define lll_futex_timed_wait(futexp, val, timespec, private) \
+  ({									      \
+    INTERNAL_SYSCALL_DECL (__err);					      \
+    long int __ret;							      \
+    __ret = INTERNAL_SYSCALL (futex, __err, 4, (long) (futexp),		      \
+			      __lll_private_flag (FUTEX_WAIT, private),	      \
+			      (val), (timespec));			      \
+    INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret;		      \
+  })
+
+#define lll_futex_timed_wait_bitset(futexp, val, timespec, clockbit, private) \
+  ({									\
+    INTERNAL_SYSCALL_DECL (__err);					\
+    long int __ret;							\
+    int __op = FUTEX_WAIT_BITSET | clockbit;				\
+    __ret = INTERNAL_SYSCALL (futex, __err, 6, (long) (futexp),		\
+			      __lll_private_flag (__op, private),	\
+			      (val), (timespec), NULL /* Unused.  */,	\
+			      FUTEX_BITSET_MATCH_ANY);			\
+    INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret;		\
+  })
+
+#define lll_futex_wake(futexp, nr, private) \
+  ({									      \
+    INTERNAL_SYSCALL_DECL (__err);					      \
+    long int __ret;							      \
+    __ret = INTERNAL_SYSCALL (futex, __err, 4, (long) (futexp),		      \
+			      __lll_private_flag (FUTEX_WAKE, private),	      \
+			      (nr), 0);					      \
+    INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret;		      \
+  })
+
+#define lll_robust_dead(futexv, private) \
+  do									      \
+    {									      \
+      int *__futexp = &(futexv);					      \
+      atomic_or (__futexp, FUTEX_OWNER_DIED);				      \
+      lll_futex_wake (__futexp, 1, private);				      \
+    }									      \
+  while (0)
+
+/* Returns non-zero if error happened, zero if success.  */
+#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private)      \
+  ({									      \
+    INTERNAL_SYSCALL_DECL (__err);					      \
+    long int __ret;							      \
+    __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp),		      \
+			      __lll_private_flag (FUTEX_CMP_REQUEUE, private),\
+			      (nr_wake), (nr_move), (mutex), (val));	      \
+    INTERNAL_SYSCALL_ERROR_P (__ret, __err);				      \
+  })
+
+
+/* Returns non-zero if error happened, zero if success.  */
+#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private)    \
+  ({									      \
+    INTERNAL_SYSCALL_DECL (__err);					      \
+    long int __ret;							      \
+									      \
+    __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp),		      \
+			      __lll_private_flag (FUTEX_WAKE_OP, private),    \
+			      (nr_wake), (nr_wake2), (futexp2),		      \
+			      FUTEX_OP_CLEAR_WAKE_IF_GT_ONE);		      \
+    INTERNAL_SYSCALL_ERROR_P (__ret, __err);				      \
+  })
+
+/* Priority Inheritance support.  */
+#define lll_futex_wait_requeue_pi(futexp, val, mutex, private) \
+  lll_futex_timed_wait_requeue_pi (futexp, val, NULL, 0, mutex, private)
+
+#define lll_futex_timed_wait_requeue_pi(futexp, val, timespec, clockbit,      \
+					mutex, private)			      \
+  ({									      \
+    INTERNAL_SYSCALL_DECL (__err);					      \
+    long int __ret;							      \
+    int __op = FUTEX_WAIT_REQUEUE_PI | clockbit;			      \
+									      \
+    __ret = INTERNAL_SYSCALL (futex, __err, 5, (futexp),		      \
+			      __lll_private_flag (__op, private),	      \
+			      (val), (timespec), mutex); 		      \
+    INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret;		      \
+  })
+
+#define lll_futex_cmp_requeue_pi(futexp, nr_wake, nr_move, mutex, val, priv)  \
+  ({									      \
+    INTERNAL_SYSCALL_DECL (__err);					      \
+    long int __ret;							      \
+									      \
+    __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp),		      \
+			      __lll_private_flag (FUTEX_CMP_REQUEUE_PI, priv),\
+			      (nr_wake), (nr_move), (mutex), (val));	      \
+    INTERNAL_SYSCALL_ERROR_P (__ret, __err);				      \
+  })
+
+#define lll_trylock(lock)	\
+  atomic_compare_and_exchange_val_acq(&(lock), 1, 0)
+
+#define lll_cond_trylock(lock)	\
+  atomic_compare_and_exchange_val_acq(&(lock), 2, 0)
+
+#define __lll_robust_trylock(futex, id) \
+  (atomic_compare_and_exchange_val_acq (futex, id, 0) != 0)
+#define lll_robust_trylock(lock, id) \
+  __lll_robust_trylock (&(lock), id)
+
+extern void __lll_lock_wait_private (int *futex) attribute_hidden;
+extern void __lll_lock_wait (int *futex, int private) attribute_hidden;
+extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden;
+
+#define __lll_lock(futex, private)					      \
+  ((void) ({								      \
+    int *__futex = (futex);						      \
+    if (__builtin_expect (atomic_compare_and_exchange_val_acq (__futex, 1, 0),\
+			  0) != 0)					      \
+      {									      \
+	if (__builtin_constant_p (private) && (private) == LLL_PRIVATE)	      \
+	  __lll_lock_wait_private (__futex);				      \
+	else								      \
+	  __lll_lock_wait (__futex, private);				      \
+      }									      \
+  }))
+#define lll_lock(futex, private) __lll_lock (&(futex), private)
+
+
+#define __lll_robust_lock(futex, id, private)				      \
+  ({									      \
+    int *__futex = (futex);						      \
+    int __val = 0;							      \
+									      \
+    if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id,  \
+								0), 0))	      \
+      __val = __lll_robust_lock_wait (__futex, private);		      \
+    __val;								      \
+  })
+#define lll_robust_lock(futex, id, private) \
+  __lll_robust_lock (&(futex), id, private)
+
+
+static inline void __attribute__ ((always_inline))
+__lll_cond_lock (int *futex, int private)
+{
+    if (__builtin_expect (atomic_exchange_acq (futex, 2), 0))
+    __lll_lock_wait (futex, private);
+}
+#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private)
+
+
+#define lll_robust_cond_lock(futex, id, private) \
+  __lll_robust_lock (&(futex), (id) | FUTEX_WAITERS, private)
+
+
+extern int __lll_timedlock_wait (int *futex, const struct timespec *,
+				 int private) attribute_hidden;
+extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *,
+					int private) attribute_hidden;
+
+static inline int __attribute__ ((always_inline))
+__lll_timedlock (int *futex, const struct timespec *abstime, int private)
+{
+  int result = 0;
+    if (__builtin_expect (atomic_compare_and_exchange_val_acq (futex, 1, 0), 0) != 0)
+    result = __lll_timedlock_wait (futex, abstime, private);
+  return result;
+}
+#define lll_timedlock(futex, abstime, private) \
+  __lll_timedlock (&(futex), abstime, private)
+
+
+static inline int __attribute__ ((always_inline))
+__lll_robust_timedlock (int *futex, const struct timespec *abstime,
+			int id, int private)
+{
+  int result = 0;
+    if (__builtin_expect (atomic_compare_and_exchange_bool_acq (futex, id, 0), 0))
+    result = __lll_robust_timedlock_wait (futex, abstime, private);
+  return result;
+}
+#define lll_robust_timedlock(futex, abstime, id, private) \
+  __lll_robust_timedlock (&(futex), abstime, id, private)
+
+
+#define __lll_unlock(futex, private) \
+  ((void) ({								      \
+    int *__futex = (futex);						      \
+    int __val = atomic_exchange_rel (__futex, 0);			      \
+									      \
+    if (__builtin_expect (__val > 1, 0))				      \
+      lll_futex_wake (__futex, 1, private);				      \
+  }))
+#define lll_unlock(futex, private) __lll_unlock(&(futex), private)
+
+
+#define __lll_robust_unlock(futex, private) \
+  ((void) ({								      \
+    int *__futex = (futex);						      \
+    int __val = atomic_exchange_rel (__futex, 0);			      \
+									      \
+    if (__builtin_expect (__val & FUTEX_WAITERS, 0))			      \
+      lll_futex_wake (__futex, 1, private);				      \
+  }))
+#define lll_robust_unlock(futex, private) \
+  __lll_robust_unlock(&(futex), private)
+
+
+#define lll_islocked(futex) \
+  (futex != 0)
+
+
+/* Our internal lock implementation is identical to the binary-compatible
+   mutex implementation.  */
+
+/* Initializers for lock.  */
+#define LLL_LOCK_INITIALIZER		(0)
+#define LLL_LOCK_INITIALIZER_LOCKED	(1)
+
+/* The states of a lock are:
+    0  -  untaken
+    1  -  taken by one user
+   >1  -  taken by more users.  */
+
+/* The kernel notifies a process which uses CLONE_CHILD_CLEARTID via futex
+   wakeup when the clone terminates.  The memory location contains the
+   thread ID while the clone is running and is reset to zero
+   afterwards.	*/
+#define lll_wait_tid(tid) \
+  do {					\
+    __typeof (tid) __tid;		\
+    while ((__tid = (tid)) != 0)	\
+      lll_futex_wait (&(tid), __tid, LLL_SHARED);\
+  } while (0)
+
+extern int __lll_timedwait_tid (int *, const struct timespec *)
+     attribute_hidden;
+
+#define lll_timedwait_tid(tid, abstime) \
+  ({							\
+    int __res = 0;					\
+    if ((tid) != 0)					\
+      __res = __lll_timedwait_tid (&(tid), (abstime));	\
+    __res;						\
+  })
+
+#endif	/* lowlevellock.h.  */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/pt-vfork.S b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/pt-vfork.S
new file mode 100644
index 0000000..51d787f
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/pt-vfork.S
@@ -0,0 +1,21 @@
+/* Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <tcb-offsets.h>
+
+#include "vfork.S"
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/pthread_once.c b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/pthread_once.c
new file mode 100644
index 0000000..b1f2f4d
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/pthread_once.c
@@ -0,0 +1,89 @@
+/* Copyright (C) 2004-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include "pthreadP.h"
+#include <lowlevellock.h>
+
+unsigned long int __fork_generation attribute_hidden;
+
+static void
+clear_once_control (void *arg)
+{
+  pthread_once_t *once_control = (pthread_once_t *) arg;
+
+  *once_control = 0;
+  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+}
+
+int
+__pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
+{
+  for (;;)
+    {
+      int oldval;
+      int newval;
+
+      /* Pseudo code:
+	 newval = __fork_generation | 1;
+	 oldval = *once_control;
+	 if ((oldval & 2) == 0)
+	   *once_control = newval;
+	 Do this atomically.  */
+      do
+	{
+	  newval = __fork_generation | 1;
+	  oldval = *once_control;
+	  if (oldval & 2)
+	    break;
+	} while (atomic_compare_and_exchange_val_acq (once_control, newval, oldval) != oldval);
+
+      /* Check if the initializer has already been done.  */
+      if ((oldval & 2) != 0)
+	return 0;
+
+      /* Check if another thread already runs the initializer.	*/
+      if ((oldval & 1) == 0)
+	break;
+
+      /* Check whether the initializer execution was interrupted by a fork.  */
+      if (oldval != newval)
+	break;
+
+      /* Same generation, some other thread was faster. Wait.  */
+      lll_futex_wait (once_control, oldval, LLL_PRIVATE);
+    }
+
+  /* This thread is the first here.  Do the initialization.
+     Register a cleanup handler so that in case the thread gets
+     interrupted the initialization can be restarted.  */
+  pthread_cleanup_push (clear_once_control, once_control);
+
+  init_routine ();
+
+  pthread_cleanup_pop (0);
+
+  /* Say that the initialisation is done.  */
+  *once_control = __fork_generation | 2;
+
+  /* Wake up all other threads.  */
+  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+
+  return 0;
+}
+weak_alias (__pthread_once, pthread_once)
+hidden_def (__pthread_once)
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/nptl/vfork.S b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/vfork.S
new file mode 100644
index 0000000..a9d8376
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/vfork.S
@@ -0,0 +1,46 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+#define _ERRNO_H	1
+#include <bits/errno.h>
+#include <kernel-features.h>
+#include <tcb-offsets.h>
+
+/* Clone the calling process, but without copying the whole address space.
+   The calling process is suspended until the new process exits or is
+   replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
+   and the process ID of the new process to the old process.  */
+
+ENTRY (__vfork)
+
+#ifdef __NR_vfork
+	DO_CALL (vfork, 0)
+#else
+	DO_CALL (fork, 0)
+#endif
+	addik	r12,r0,-4095
+	cmpu	r12,r12,r3
+	bgei	r12,SYSCALL_ERROR_LABEL
+	rtsd	r15,8
+	nop
+
+PSEUDO_END (__vfork)
+libc_hidden_def (__vfork)
+
+weak_alias (__vfork, vfork)
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/profil-counter.h b/ports/sysdeps/unix/sysv/linux/microblaze/profil-counter.h
new file mode 100644
index 0000000..fedb38b
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/profil-counter.h
@@ -0,0 +1,20 @@
+/* Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* We can use the ix86 version.  */
+#include <sysdeps/unix/sysv/linux/i386/profil-counter.h>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/semctl.c b/ports/sysdeps/unix/sysv/linux/microblaze/semctl.c
new file mode 100644
index 0000000..1451629
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/semctl.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/alpha/semctl.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setgroups.c b/ports/sysdeps/unix/sysv/linux/microblaze/setgroups.c
new file mode 100644
index 0000000..cb9a770
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setgroups.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setgroups.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c b/ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c
new file mode 100644
index 0000000..c121e99
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/alpha/shmctl.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h b/ports/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h
new file mode 100644
index 0000000..e03effa
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h
@@ -0,0 +1,25 @@
+/* Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SIGCONTEXT int _code, struct ucontext *
+#define SIGCONTEXT_EXTRA_ARGS _code,
+#define GET_PC(ctx)    ((void *) (ctx)->uc_mcontext.regs.pc)
+#define GET_FRAME(ctx) ((void *) (ctx)->uc_mcontext.regs.sp)
+#define GET_STACK(ctx) ((void *) (ctx)->uc_mcontext.regs.sp)
+#define CALL_SIGHANDLER(handler, signo, ctx) \
+  (handler)((signo), SIGCONTEXT_EXTRA_ARGS (ctx))
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/socket.S b/ports/sysdeps/unix/sysv/linux/microblaze/socket.S
new file mode 100644
index 0000000..229f54f
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/socket.S
@@ -0,0 +1,126 @@
+/* Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep-cancel.h>
+#include <socketcall.h>
+
+#define P(a, b) P2(a, b)
+#define P2(a, b) a##b
+
+/* The socket-oriented system calls are handled unusally in Linux.
+   They are all gated through the single `socketcall' system call number.
+   `socketcall' takes two arguments: the first is the subcode, specifying
+   which socket function is being called; and the second is a pointer to
+   the arguments to the specific function.
+
+   The .S files for the other calls just #define socket and #include this.
+   They also #define a 'number-of-arguments' word in NARGS, which
+   defaults to 3.  */
+
+#ifndef NARGS
+# ifdef socket
+#  error NARGS not defined
+# endif
+# define NARGS 3
+#endif
+
+/* Stack usage:
+   0 - r15 (return address)
+   4 - 12 args to syscall
+   16 - scratch for cancellation state
+   20 - scratch for return value
+*/
+#define stackadjust 24
+
+#ifndef __socket
+# ifndef NO_WEAK_ALIAS
+#  define __socket P(__,socket)
+# else
+#  define __socket socket
+# endif
+#endif
+
+	.text
+ENTRY(__socket)
+	addik r1,r1,-stackadjust
+	swi r15,r1,0
+#if NARGS >= 1
+	swi  r5,r1,stackadjust+4
+#endif
+#if NARGS >= 2
+	swi  r6,r1,stackadjust+8
+#endif
+#if NARGS >= 3
+	swi  r7,r1,stackadjust+12
+#endif
+#if NARGS >= 4
+	swi  r8,r1,stackadjust+16
+#endif
+#if NARGS >= 5
+	swi  r9,r1,stackadjust+20
+#endif
+#if NARGS >= 6
+	swi  r10,r1,stackadjust+24
+#endif
+/* The rest of the args (if any) are on the caller's stack already.  */
+
+#if defined NEED_CANCELLATION && defined CENABLE
+	SINGLE_THREAD_P
+	bnei	r12,L(socket_cancel)
+#endif
+
+	addik	r12,r0,SYS_ify(socketcall)
+	addik	r5,r0,P(SOCKOP_,socket)
+	addik	r6,r1,stackadjust+4
+	brki	r14,8
+	addk	r0,r0,r0
+	lwi	r15,r1,0
+	addik	r1,r1,stackadjust
+	addik   r4,r0,-4095
+	cmpu	r4,r4,r3
+	bgei	r4,SYSCALL_ERROR_LABEL
+	rtsd	r15,8
+	addk	r0,r0,r0
+
+#if defined NEED_CANCELLATION && defined CENABLE
+L(socket_cancel):
+	CENABLE
+	swi	r3,r1,16
+	addik	r12,r0,SYS_ify(socketcall)
+	addik	r5,r0,P(SOCKOP_,socket)
+	addik	r6,r1,stackadjust+4
+	brki	r14,8
+	addk	r0,r0,r0
+	swi	r3,r1,20
+	lwi	r5,r1,16
+	CDISABLE
+	lwi	r3,r1,20
+	lwi	r15,r1,0
+	addik	r1,r1,stackadjust
+	addik   r4,r0,-4095
+	cmpu	r4,r4,r3
+	bgei	r4,SYSCALL_ERROR_LABEL
+	rtsd	r15,8
+	addk	r0,r0,r0
+#endif
+
+PSEUDO_END (__socket)
+
+#ifndef NO_WEAK_ALIAS
+weak_alias (__socket, socket)
+#endif
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/sys/procfs.h b/ports/sysdeps/unix/sysv/linux/microblaze/sys/procfs.h
new file mode 100644
index 0000000..265ef68
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sys/procfs.h
@@ -0,0 +1,123 @@
+/* Copyright (C) 1996-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_PROCFS_H
+#define _SYS_PROCFS_H	1
+
+/* This is somewhat modelled after the file of the same name on SVR4
+   systems.  It provides a definition of the core file format for ELF
+   used on Linux.  It doesn't have anything to do with the /proc file
+   system, even though Linux has one.
+
+   Anyway, the whole purpose of this file is for GDB and GDB only.
+   Don't read too much into it.  Don't use it for anything other than
+   GDB unless you know what you are doing.  */
+
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/user.h>
+
+__BEGIN_DECLS
+
+/* Type for a general-purpose register.  */
+typedef unsigned long elf_greg_t;
+
+/* And the whole bunch of them.  We could have used `struct
+   user_regs_struct' directly in the typedef, but tradition says that
+   the register set is an array, which does have some peculiar
+   semantics, so leave it that way.  */
+#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof (elf_greg_t))
+typedef elf_greg_t elf_gregset_t[ELF_NGREG];
+
+/* Register set for the floating-point registers.  */
+typedef struct user_fpregs_struct elf_fpregset_t;
+
+
+/* Signal info.  */
+struct elf_siginfo
+  {
+    int si_signo;			/* Signal number.  */
+    int si_code;			/* Extra code.  */
+    int si_errno;			/* Errno.  */
+  };
+
+/* Definitions to generate Intel SVR4-like core files.  These mostly
+   have the same names as the SVR4 types with "elf_" tacked on the
+   front to prevent clashes with Linux definitions, and the typedef
+   forms have been avoided.  This is mostly like the SVR4 structure,
+   but more Linuxy, with things that Linux does not support and which
+   GDB doesn't really use excluded.  */
+
+struct elf_prstatus
+  {
+    struct elf_siginfo pr_info;		/* Info associated with signal.  */
+    short int pr_cursig;		/* Current signal.  */
+    unsigned long int pr_sigpend;	/* Set of pending signals.  */
+    unsigned long int pr_sighold;	/* Set of held signals.  */
+    __pid_t pr_pid;
+    __pid_t pr_ppid;
+    __pid_t pr_pgrp;
+    __pid_t pr_sid;
+    struct timeval pr_utime;		/* User time.  */
+    struct timeval pr_stime;		/* System time.  */
+    struct timeval pr_cutime;		/* Cumulative user time.  */
+    struct timeval pr_cstime;		/* Cumulative system time.  */
+    elf_gregset_t pr_reg;		/* GP registers.  */
+    int pr_fpvalid;			/* True if math copro being used.  */
+  };
+
+
+#define ELF_PRARGSZ     (80)    /* Number of chars for args.  */
+
+struct elf_prpsinfo
+  {
+    char pr_state;			/* Numeric process state.  */
+    char pr_sname;			/* Char for pr_state.  */
+    char pr_zomb;			/* Zombie.  */
+    char pr_nice;			/* Nice val.  */
+    unsigned long int pr_flag;		/* Flags.  */
+    unsigned short int pr_uid;
+    unsigned short int pr_gid;
+    int pr_pid, pr_ppid, pr_pgrp, pr_sid;
+    /* Lots missing.  */
+    char pr_fname[16];			/* Filename of executable.  */
+    char pr_psargs[ELF_PRARGSZ];	/* Initial part of arg list.  */
+  };
+
+/* The rest of this file provides the types for emulation of the
+   Solaris <proc_service.h> interfaces that should be implemented by
+   users of libthread_db.  */
+
+/* Addresses.  */
+typedef void *psaddr_t;
+
+/* Register sets.  Linux has different names.  */
+typedef elf_gregset_t prgregset_t;
+typedef elf_fpregset_t prfpregset_t;
+
+/* We don't have any differences between processes and threads,
+   therefore have only one PID type.  */
+typedef __pid_t lwpid_t;
+
+/* Process status and info.  In the end we do provide typedefs for them.  */
+typedef struct elf_prstatus prstatus_t;
+typedef struct elf_prpsinfo prpsinfo_t;
+
+__END_DECLS
+
+#endif	/* sys/procfs.h.  */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/sys/user.h b/ports/sysdeps/unix/sysv/linux/microblaze/sys/user.h
new file mode 100644
index 0000000..3c6397e
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sys/user.h
@@ -0,0 +1,77 @@
+/* Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_USER_H
+#define _SYS_USER_H	1
+
+/* The whole purpose of this file is for GDB and GDB only.  Don't read
+   too much into it.  Don't use it for anything other than GDB unless
+   you know what you are doing.  */
+
+struct user_fpregs_struct
+{
+  long int cwd;
+  long int swd;
+  long int twd;
+  long int fip;
+  long int fcs;
+  long int foo;
+  long int fos;
+  long int st_space [20];
+};
+
+struct user_regs_struct
+{
+  unsigned int gpr[32];
+  unsigned int pc;
+  unsigned int msr;
+  unsigned int ear;
+  unsigned int esr;
+  unsigned int fsr;
+  unsigned int btr;
+  unsigned int pvr[12];
+};
+
+struct user
+{
+  struct user_regs_struct	regs;
+  int				u_fpvalid;
+  struct user_fpregs_struct	elf_fpregset_t;
+  unsigned long int		u_tsize;
+  unsigned long int		u_dsize;
+  unsigned long int		u_ssize;
+  unsigned long			start_code;
+  unsigned long			start_stack;
+  long int			signal;
+  int				reserved;
+  struct user_regs_struct*	u_ar0;
+  struct user_fpregs_struct*	u_fpstate;
+  unsigned long int		magic;
+  char				u_comm [32];
+  int				u_debugreg [8];
+};
+
+#define PAGE_SHIFT		12
+#define PAGE_SIZE		(1UL << PAGE_SHIFT)
+#define PAGE_MASK		(~(PAGE_SIZE-1))
+#define NBPG			PAGE_SIZE
+#define UPAGES			1
+#define HOST_TEXT_START_ADDR	(u.start_code)
+#define HOST_STACK_END_ADDR	(u.start_stack + u.u_ssize * NBPG)
+
+#endif	/* _SYS_USER_H */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/syscall.S b/ports/sysdeps/unix/sysv/linux/microblaze/syscall.S
new file mode 100644
index 0000000..7e5cea4
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/syscall.S
@@ -0,0 +1,37 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+	.text
+ENTRY (syscall)
+	addk	r12,r0,r5
+	addk	r5,r0,r6
+	addk	r6,r0,r7
+	addk	r7,r0,r8
+	addk	r8,r0,r9
+	addk	r9,r0,r10
+	lwi	r10,r1,28
+	brki	r14,8
+	addk	r0,r0,r0
+	addik	r4,r0,-4095
+	cmpu	r4,r4,r3
+	bgei	r4,SYSCALL_ERROR_LABEL
+	rtsd	r15,8
+	nop
+PSEUDO_END (syscall)
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/syscalls.list b/ports/sysdeps/unix/sysv/linux/microblaze/syscalls.list
new file mode 100644
index 0000000..86fd40b
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/syscalls.list
@@ -0,0 +1,18 @@
+# File name	Caller	Syscall name	Args	Strong name	Weak names
+
+cacheflush	EXTRA	cacheflush	i:iiii	__cacheflush	cacheflush
+
+prlimit64	EXTRA	prlimit64	i:iipp	prlimit64
+fanotify_mark	EXTRA	fanotify_mark	i:iiiiis	fanotify_mark
+
+# Semaphore and shm system calls.  msgctl, shmctl, and semctl have C
+# wrappers (to set __IPC_64).
+msgget          -       msgget          i:ii    __msgget        msgget
+msgrcv          -       msgrcv          Ci:ibnii __msgrcv       msgrcv
+msgsnd          -       msgsnd          Ci:ibni __msgsnd        msgsnd
+shmat           -       shmat           i:ipi   __shmat         shmat
+shmdt           -       shmdt           i:s     __shmdt         shmdt
+shmget          -       shmget          i:iii   __shmget        shmget
+semop           -       semop           i:ipi   __semop         semop
+semtimedop      -       semtimedop      i:ipip  semtimedop
+semget          -       semget          i:iii   __semget        semget
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/sysdep.S b/ports/sysdeps/unix/sysv/linux/microblaze/sysdep.S
new file mode 100644
index 0000000..32e9407
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sysdep.S
@@ -0,0 +1,39 @@
+/* Copyright (C) 2009-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+
+/* The following code is only used in the shared library when we
+   compile the reentrant version.  Otherwise each system call defines
+   each own version.  */
+
+#ifndef	PIC
+
+/* The syscall stubs jump here when they detect an error.  */
+
+#undef CALL_MCOUNT
+#define CALL_MCOUNT /* Don't insert the profiling call, it clobbers %d0.  */
+
+	.text
+ENTRY (__syscall_error)
+	rsubk	r3,r3,r0
+	rtsd	r15,8
+	addik	r3,r0,-1	/* delay slot.  */
+END (__syscall_error)
+#endif /* PIC.  */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h b/ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h
new file mode 100755
index 0000000..c40a242
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h
@@ -0,0 +1,306 @@
+/* Copyright (C) 2000-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdeps/microblaze/sysdep.h>
+#include <sys/syscall.h>
+
+/* Defines RTLD_PRIVATE_ERRNO.  */
+#include <dl-sysdep.h>
+
+/* In order to get __set_errno() definition in INLINE_SYSCALL.  */
+#ifndef __ASSEMBLER__
+# include <errno.h>
+#endif
+
+/* For Linux we can use the system call table in the header file
+	/usr/include/asm/unistd.h
+   of the kernel.  But these symbols do not follow the SYS_* syntax
+   so we have to redefine the `SYS_ify' macro here.  */
+#undef SYS_ify
+# define SYS_ify(syscall_name)	__NR_##syscall_name
+
+#ifdef __ASSEMBLER__
+
+/* In microblaze ABI function call arguments are passed in registers
+   r5...r10. The return value is stored in r3 (or r3:r4 regiters pair).
+   Linux syscall uses the same convention with the addition that the
+   syscall number is passed in r12. To enter the kernel "brki r14,8"
+   instruction is used.
+   None of the abovementioned registers are presumed across function call
+   or syscall.
+*/
+/* Linux uses a negative return value to indicate syscall errors, unlike
+   most Unices, which use the condition codes' carry flag.
+
+   Since version 2.1 the return value of a system call might be negative
+   even if the call succeeded.  E.g., the `lseek' system call might return
+   a large offset.  Therefore we must not anymore test for < 0, but test
+   for a real error by making sure the value in %d0 is a real error
+   number.  Linus said he will make sure the no syscall returns a value
+   in -1 .. -4095 as a valid result so we can savely test with -4095.  */
+
+/* We don't want the label for the error handler to be visible in the symbol
+   table when we define it here.  */
+#ifdef PIC
+# define SYSCALL_ERROR_LABEL 0f
+#else
+# define SYSCALL_ERROR_LABEL __syscall_error
+#endif
+
+#undef PSEUDO
+#define	PSEUDO(name, syscall_name, args)		\
+  .text;						\
+  ENTRY (name)						\
+    DO_CALL (syscall_name, args);			\
+    addik r12,r0,-4095;					\
+    cmpu  r12,r12,r3;					\
+    bgei r12,SYSCALL_ERROR_LABEL;
+
+#undef PSEUDO_END
+#define PSEUDO_END(name)				\
+  SYSCALL_ERROR_HANDLER;				\
+  END (name)
+
+#undef PSEUDO_NOERRNO
+#define	PSEUDO_NOERRNO(name, syscall_name, args)	\
+  .text;						\
+  ENTRY (name)						\
+    DO_CALL (syscall_name, args);
+
+#undef PSEUDO_END_NOERRNO
+#define PSEUDO_END_NOERRNO(name)			\
+  END (name)
+
+/* The function has to return the error code.  */
+#undef	PSEUDO_ERRVAL
+#define	PSEUDO_ERRVAL(name, syscall_name, args)		\
+  .text;						\
+  ENTRY (name)						\
+    DO_CALL (syscall_name, args);			\
+
+#undef	PSEUDO_END_ERRVAL
+#define	PSEUDO_END_ERRVAL(name) \
+  END (name)
+
+#define ret_NOERRNO \
+    rtsd r15,8; addk r0,r0,r0;
+
+#define ret_ERRVAL \
+    rtsd r15,8; rsubk r3,r3,r0;
+
+#ifdef PIC
+# define SYSCALL_ERROR_LABEL_DCL 0
+# if RTLD_PRIVATE_ERRNO
+#  define SYSCALL_ERROR_HANDLER				\
+SYSCALL_ERROR_LABEL_DCL:				\
+    mfs   r12,rpc;					\
+    addik r12,r12,_GLOBAL_OFFSET_TABLE_+8;		\
+    lwi   r12,r12,rtld_errno@GOT;			\
+    rsubk r3,r3,r0;					\
+    swi	  r3,r12,0;					\
+    rtsd  r15,8;					\
+    addik r3,r0,-1;
+# else /* !RTLD_PRIVATE_ERRNO.  */
+/* Store (-r3) into errno through the GOT.  */
+#  if defined _LIBC_REENTRANT
+#  define SYSCALL_ERROR_HANDLER				\
+SYSCALL_ERROR_LABEL_DCL:				\
+    addik r1,r1,-16;					\
+    swi   r15,r1,0;					\
+    swi   r20,r1,8;					\
+    rsubk r3,r3,r0;					\
+    swi   r3,r1,12;					\
+    mfs   r20,rpc;					\
+    addik r20,r20,_GLOBAL_OFFSET_TABLE_+8;		\
+    brlid r15,__errno_location@PLT;			\
+    nop;						\
+    lwi   r4,r1,12;					\
+    swi   r4,r3,0;					\
+    lwi   r20,r1,8;					\
+    lwi   r15,r1,0;					\
+    addik r1,r1,16;					\
+    rtsd  r15,8;					\
+    addik r3,r0,-1;
+#  else /* !_LIBC_REENTRANT.  */
+#  define SYSCALL_ERROR_HANDLER				\
+SYSCALL_ERROR_LABEL_DCL:				\
+    mfs   r12,rpc;					\
+    addik r12,r12,_GLOBAL_OFFSET_TABLE_+8;		\
+    lwi   r12,r12,errno@GOT;				\
+    rsubk r3,r3,r0;					\
+    swi	  r3,r12,0;					\
+    rtsd  r15,8;					\
+    addik r3,r0,-1;
+#  endif /* _LIBC_REENTRANT.  */
+# endif /* RTLD_PRIVATE_ERRNO.  */
+#else
+# define SYSCALL_ERROR_HANDLER	/* Nothing here; code in sysdep.S is used.  */
+#endif /* PIC.  */
+
+#define DO_CALL(syscall_name, args)			      		      \
+    addik r12,r0,SYS_ify (syscall_name);				      \
+    brki  r14,8;							      \
+    addk  r0,r0,r0;
+
+#else /* not __ASSEMBLER__ */
+
+/* Define a macro which expands into the inline wrapper code for a system
+   call.  */
+#undef INLINE_SYSCALL
+#define INLINE_SYSCALL(name, nr, args...)				\
+({	INTERNAL_SYSCALL_DECL(err);  					\
+	unsigned long resultvar = INTERNAL_SYSCALL(name, err, nr, args);\
+	if (INTERNAL_SYSCALL_ERROR_P (resultvar, err))			\
+       {								\
+	    __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, err));	\
+	    resultvar = (unsigned long) -1;				\
+       }								\
+	(long) resultvar;						\
+})
+
+#undef INTERNAL_SYSCALL_DECL
+#define INTERNAL_SYSCALL_DECL(err) do { } while (0)
+
+/* Define a macro which expands inline into the wrapper code for a system
+   call.  This use is for internal calls that do not need to handle errors
+   normally.  It will never touch errno.  This returns just what the kernel
+   gave back.  */
+#undef INTERNAL_SYSCALL
+#define INTERNAL_SYSCALL(name, err, nr, args...)	\
+  inline_syscall##nr(SYS_ify(name), args)
+
+#undef INTERNAL_SYSCALL_NCS
+#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \
+  inline_syscall##nr(name, args)
+
+#undef INTERNAL_SYSCALL_ERROR_P
+#define INTERNAL_SYSCALL_ERROR_P(val, err)		\
+  ((unsigned int) (val) >= -4095U)
+
+#undef INTERNAL_SYSCALL_ERRNO
+#define INTERNAL_SYSCALL_ERRNO(val, err)	(-(val))
+
+#define SYSCALL_CLOBBERS_6 "r11", "r4", "memory"
+#define SYSCALL_CLOBBERS_5 "r10", SYSCALL_CLOBBERS_6
+#define SYSCALL_CLOBBERS_4 "r9", SYSCALL_CLOBBERS_5
+#define SYSCALL_CLOBBERS_3 "r8", SYSCALL_CLOBBERS_4
+#define SYSCALL_CLOBBERS_2 "r7", SYSCALL_CLOBBERS_3
+#define SYSCALL_CLOBBERS_1 "r6", SYSCALL_CLOBBERS_2
+#define SYSCALL_CLOBBERS_0 "r5", SYSCALL_CLOBBERS_1
+
+#define inline_syscall0(name,dummy)			\
+  ({ \
+    register long ret __asm__("r3");			\
+    register long __r12 __asm__("r12") = name;	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r12)					\
+      : SYSCALL_CLOBBERS_0 ); ret;			\
+  })
+
+#define inline_syscall1(name,arg1)			\
+  ({ \
+    register long ret __asm__("r3");			\
+    register long __r12 __asm__("r12") = name;	\
+    register long __r5 __asm__("r5") = (long)(arg1);	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r12)				\
+      : SYSCALL_CLOBBERS_1 ); ret;			\
+  })
+
+#define inline_syscall2(name,arg1,arg2)		\
+  ({ \
+    register long ret __asm__("r3");			\
+    register long __r12 __asm__("r12") = name;	\
+    register long __r5 __asm__("r5") = (long)(arg1);	\
+    register long __r6 __asm__("r6") = (long)(arg2);	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r12)		\
+      : SYSCALL_CLOBBERS_2 ); ret;			\
+  })
+
+
+#define inline_syscall3(name,arg1,arg2,arg3)		\
+  ({ \
+    register long ret __asm__("r3");			\
+    register long __r12 __asm__("r12") = name;	\
+    register long __r5 __asm__("r5") = (long)(arg1);	\
+    register long __r6 __asm__("r6") = (long)(arg2);	\
+    register long __r7 __asm__("r7") = (long)(arg3);	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r12)	\
+      : SYSCALL_CLOBBERS_3 ); ret;			\
+  })
+
+
+#define inline_syscall4(name,arg1,arg2,arg3,arg4)	\
+  ({ \
+    register long ret __asm__("r3");			\
+    register long __r12 __asm__("r12") = name;	\
+    register long __r5 __asm__("r5") = (long)(arg1);	\
+    register long __r6 __asm__("r6") = (long)(arg2);	\
+    register long __r7 __asm__("r7") = (long)(arg3);	\
+    register long __r8 __asm__("r8") = (long)(arg4);	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r8),"r"(__r12)	\
+      : SYSCALL_CLOBBERS_4 ); ret;			\
+  })
+
+
+#define inline_syscall5(name,arg1,arg2,arg3,arg4,arg5)	\
+  ({ \
+    register long ret __asm__("r3");			\
+    register long __r12 __asm__("r12") = name;	\
+    register long __r5 __asm__("r5") = (long)(arg1);	\
+    register long __r6 __asm__("r6") = (long)(arg2);	\
+    register long __r7 __asm__("r7") = (long)(arg3);	\
+    register long __r8 __asm__("r8") = (long)(arg4);	\
+    register long __r9 __asm__("r9") = (long)(arg5);	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r8),"r"(__r9), "r"(__r12)	\
+      : SYSCALL_CLOBBERS_5 ); ret;			\
+  })
+
+
+#define inline_syscall6(name,arg1,arg2,arg3,arg4,arg5,arg6)	\
+  ({ \
+    register long ret __asm__("r3");			\
+    register long __r12 __asm__("r12") = name;	\
+    register long __r5 __asm__("r5") = (long)(arg1);	\
+    register long __r6 __asm__("r6") = (long)(arg2);	\
+    register long __r7 __asm__("r7") = (long)(arg3);	\
+    register long __r8 __asm__("r8") = (long)(arg4);	\
+    register long __r9 __asm__("r9") = (long)(arg5);	\
+    register long __r10 __asm__("r10") = (long)(arg6);	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r8),"r"(__r9), "r"(__r10), "r"(__r12)	\
+      : SYSCALL_CLOBBERS_6 ); ret;			\
+  })
+
+
+/* Pointer mangling is not yet supported for Microblaze.  */
+#define PTR_MANGLE(var) (void) (var)
+#define PTR_DEMANGLE(var) (void) (var)
+
+#endif /* not __ASSEMBLER__ */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/xstat.c b/ports/sysdeps/unix/sysv/linux/microblaze/xstat.c
new file mode 100644
index 0000000..e9869f5
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/xstat.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/xstat.c>
-- 
1.7.0.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v2 2/2] Add MicroBlaze Port
  2013-04-09  8:20     ` David Holsgrove
@ 2013-04-09  8:32       ` Andreas Schwab
  2013-04-11  7:58         ` David Holsgrove
                           ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Andreas Schwab @ 2013-04-09  8:32 UTC (permalink / raw)
  To: David Holsgrove
  Cc: libc-ports, Roland McGrath, Joseph Myers, John Williams,
	Edgar Iglesias, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala, Tom Shui

David Holsgrove <david.holsgrove@xilinx.com> writes:

> +inline long
> +get_frame_size (unsigned long instr)
> +{
> +    return abs ((short signed) (instr & 0xFFFF));
> +}
> +
> +static unsigned long *
> +find_frame_creation (unsigned long *pc)
> +{
> +    int i;

Two spaces indent.

> +
> +    /* NOTE: Distance to search is arbitrary
> +     *   250 works well for most things,
> +     *   750 picks up things like tcp_recvmsg(),
> +     *  1000 needed for fat_fill_super().  */

No initial * in comments.  No () when referring to functions, instead of
actual calls.

> +            if ((!(*pprev_pc) || ((*pprev_pc) & 3)))

The innermost parens are confusing and redundant, likewise for the outer
pair.

> +    array[0]=(void *)pc;

Space around operators and after the cast.

> +#define atomic_compare_and_exchange_val_acq(mem, newval, oldval)              \
> +  ({                                                                          \
> +    __typeof (*(mem)) __result;                                               \
> +    if (sizeof (*mem) == 4)                                                   \
> +      __result = __arch_compare_and_exchange_val_32_acq(mem, newval, oldval); \

Space before open paren.

Andreas.

-- 
Andreas Schwab, SUSE Labs, schwab@suse.de
GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
"And now for something completely different."

^ permalink raw reply	[flat|nested] 14+ messages in thread

* RE: [PATCH v2 2/2] Add MicroBlaze Port
  2013-04-09  8:32       ` Andreas Schwab
@ 2013-04-11  7:58         ` David Holsgrove
  2013-04-16  0:51         ` David Holsgrove
  2013-04-17  0:18         ` David Holsgrove
  2 siblings, 0 replies; 14+ messages in thread
From: David Holsgrove @ 2013-04-11  7:58 UTC (permalink / raw)
  To: Andreas Schwab
  Cc: libc-ports, Roland McGrath, Joseph Myers, John Williams,
	Edgar Iglesias, Vinod Kathail, Vidhumouli Hunsigida,
	Nagaraju Mekala, Tom Shui

[-- Attachment #1: Type: text/plain, Size: 2148 bytes --]

Hi Andreas,

> -----Original Message-----
> From: Andreas Schwab [mailto:schwab@suse.de]
> Sent: Tuesday, 9 April 2013 6:32 pm
> To: David Holsgrove
> Cc: libc-ports@sourceware.org; Roland McGrath; Joseph Myers; John Williams;
> Edgar Iglesias; Vinod Kathail; Vidhumouli Hunsigida; Nagaraju Mekala; Tom Shui
> Subject: Re: [PATCH v2 2/2] Add MicroBlaze Port
> 
> David Holsgrove <david.holsgrove@xilinx.com> writes:
> 
> > +inline long
> > +get_frame_size (unsigned long instr)
> > +{
> > +    return abs ((short signed) (instr & 0xFFFF));
> > +}
> > +
> > +static unsigned long *
> > +find_frame_creation (unsigned long *pc)
> > +{
> > +    int i;
> 
> Two spaces indent.
> 
> > +
> > +    /* NOTE: Distance to search is arbitrary
> > +     *   250 works well for most things,
> > +     *   750 picks up things like tcp_recvmsg(),
> > +     *  1000 needed for fat_fill_super().  */
> 
> No initial * in comments.  No () when referring to functions, instead of
> actual calls.
> 
> > +            if ((!(*pprev_pc) || ((*pprev_pc) & 3)))
> 
> The innermost parens are confusing and redundant, likewise for the outer
> pair.
> 
> > +    array[0]=(void *)pc;
> 
> Space around operators and after the cast.
> 
> > +#define atomic_compare_and_exchange_val_acq(mem, newval, oldval)
> \
> > +  ({                                                                          \
> > +    __typeof (*(mem)) __result;                                               \
> > +    if (sizeof (*mem) == 4)                                                   \
> > +      __result = __arch_compare_and_exchange_val_32_acq(mem, newval,
> oldval); \
> 
> Space before open paren.
> 

Thanks for the comments - I've fixed and given another pass over the whole patch,
corrected some backslash alignments and believe it should have cleanly formatted
comments throughout.

Updated patch attached.

thanks again,
David

> Andreas.
> 
> --
> Andreas Schwab, SUSE Labs, schwab@suse.de
> GPG Key fingerprint = 0196 BAD8 1CE9 1970 F4BE  1748 E4D4 88E3 0EEA B9D7
> "And now for something completely different."




[-- Attachment #2: 0002-MicroBlaze-Port.patch --]
[-- Type: application/octet-stream, Size: 326220 bytes --]

From 5e8fdd2b933b90cf603ba6966c605eeac4c4368e Mon Sep 17 00:00:00 2001
From: David Holsgrove <david.holsgrove@petalogix.com>
Date: Tue, 10 Jan 2012 15:38:42 +1000
Subject: [PATCH 2/2] MicroBlaze Port

Signed-off-by: David Holsgrove <david.holsgrove@petalogix.com>
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
---
 ports/ChangeLog.microblaze                         |  101 +
 ports/sysdeps/microblaze/Implies                   |    4 +
 ports/sysdeps/microblaze/Makefile                  |   26 +
 ports/sysdeps/microblaze/__longjmp.S               |   55 +
 ports/sysdeps/microblaze/_mcount.S                 |   91 +
 ports/sysdeps/microblaze/abort-instr.h             |    2 +
 ports/sysdeps/microblaze/asm-syntax.h              |   24 +
 ports/sysdeps/microblaze/backtrace.c               |  139 ++
 ports/sysdeps/microblaze/backtrace_linux.c         |   59 +
 ports/sysdeps/microblaze/bits/atomic.h             |  269 +++
 ports/sysdeps/microblaze/bits/endian.h             |   30 +
 ports/sysdeps/microblaze/bits/fenv.h               |   42 +
 ports/sysdeps/microblaze/bits/link.h               |   57 +
 ports/sysdeps/microblaze/bits/setjmp.h             |   37 +
 ports/sysdeps/microblaze/bsd-_setjmp.S             |   22 +
 ports/sysdeps/microblaze/bsd-setjmp.S              |   22 +
 ports/sysdeps/microblaze/crti.S                    |   89 +
 ports/sysdeps/microblaze/crtn.S                    |   52 +
 ports/sysdeps/microblaze/dl-machine.h              |  299 +++
 ports/sysdeps/microblaze/dl-tls.h                  |   29 +
 ports/sysdeps/microblaze/dl-trampoline.S           |  109 +
 ports/sysdeps/microblaze/fegetround.c              |   24 +
 ports/sysdeps/microblaze/fesetround.c              |   25 +
 ports/sysdeps/microblaze/gccframe.h                |   21 +
 ports/sysdeps/microblaze/jmpbuf-unwind.h           |   46 +
 ports/sysdeps/microblaze/ldsodefs.h                |   45 +
 ports/sysdeps/microblaze/libc-tls.c                |   32 +
 ports/sysdeps/microblaze/libm-test-ulps            | 1728 ++++++++++++++++
 ports/sysdeps/microblaze/machine-gmon.h            |   30 +
 ports/sysdeps/microblaze/math_private.h            |   33 +
 ports/sysdeps/microblaze/memusage.h                |   21 +
 ports/sysdeps/microblaze/nptl/Makefile             |   21 +
 ports/sysdeps/microblaze/nptl/pthread_spin_lock.c  |   24 +
 ports/sysdeps/microblaze/nptl/pthreaddef.h         |   40 +
 ports/sysdeps/microblaze/nptl/tcb-offsets.sym      |   11 +
 ports/sysdeps/microblaze/nptl/tls.h                |  155 ++
 ports/sysdeps/microblaze/preconfigure              |    3 +
 ports/sysdeps/microblaze/setjmp.S                  |   75 +
 ports/sysdeps/microblaze/shlib-versions            |    1 +
 ports/sysdeps/microblaze/sotruss-lib.c             |   52 +
 ports/sysdeps/microblaze/stackinfo.h               |   34 +
 ports/sysdeps/microblaze/start.S                   |   84 +
 ports/sysdeps/microblaze/sysdep.h                  |   85 +
 ports/sysdeps/microblaze/tls-macros.h              |   46 +
 ports/sysdeps/microblaze/tst-audit.h               |   25 +
 ports/sysdeps/unix/sysv/linux/microblaze/Makefile  |    3 +
 ports/sysdeps/unix/sysv/linux/microblaze/Versions  |    5 +
 .../unix/sysv/linux/microblaze/____longjmp_chk.S   |   29 +
 .../unix/sysv/linux/microblaze/bits/fcntl.h        |   86 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/mman.h |   42 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/stat.h |  203 ++
 ports/sysdeps/unix/sysv/linux/microblaze/brk.c     |   44 +
 ports/sysdeps/unix/sysv/linux/microblaze/clone.S   |   72 +
 ports/sysdeps/unix/sysv/linux/microblaze/configure |    4 +
 .../unix/sysv/linux/microblaze/configure.in        |    4 +
 ports/sysdeps/unix/sysv/linux/microblaze/fcntl.c   |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/fxstat.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/fxstatat.c  |    1 +
 .../unix/sysv/linux/microblaze/getsysstats.c       |   34 +
 .../unix/sysv/linux/microblaze/kernel-features.h   |   30 +
 .../unix/sysv/linux/microblaze/kernel_stat.h       |   49 +
 ports/sysdeps/unix/sysv/linux/microblaze/lxstat.c  |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/mmap.S    |   50 +
 ports/sysdeps/unix/sysv/linux/microblaze/msgctl.c  |    1 +
 .../sysv/linux/microblaze/nptl/bits/pthreadtypes.h |  176 ++
 .../sysv/linux/microblaze/nptl/bits/semaphore.h    |   32 +
 .../unix/sysv/linux/microblaze/nptl/c++-types.data |   67 +
 .../unix/sysv/linux/microblaze/nptl/createthread.c |   23 +
 .../sysdeps/unix/sysv/linux/microblaze/nptl/fork.c |   29 +
 .../unix/sysv/linux/microblaze/nptl/ld.abilist     |   12 +
 .../linux/microblaze/nptl/libBrokenLocale.abilist  |    3 +
 .../unix/sysv/linux/microblaze/nptl/libanl.abilist |    6 +
 .../unix/sysv/linux/microblaze/nptl/libc.abilist   | 2082 ++++++++++++++++++++
 .../sysv/linux/microblaze/nptl/libcrypt.abilist    |    9 +
 .../unix/sysv/linux/microblaze/nptl/libdl.abilist  |   11 +
 .../unix/sysv/linux/microblaze/nptl/libm.abilist   |  370 ++++
 .../unix/sysv/linux/microblaze/nptl/libnsl.abilist |  123 ++
 .../sysv/linux/microblaze/nptl/libpthread.abilist  |  224 +++
 .../sysv/linux/microblaze/nptl/libresolv.abilist   |   93 +
 .../unix/sysv/linux/microblaze/nptl/librt.abilist  |   42 +
 .../linux/microblaze/nptl/libthread_db.abilist     |   42 +
 .../sysv/linux/microblaze/nptl/libutil.abilist     |    8 +
 .../unix/sysv/linux/microblaze/nptl/localplt.data  |   11 +
 .../unix/sysv/linux/microblaze/nptl/lowlevellock.h |  317 +++
 .../unix/sysv/linux/microblaze/nptl/pt-vfork.S     |   21 +
 .../unix/sysv/linux/microblaze/nptl/pthread_once.c |   89 +
 .../unix/sysv/linux/microblaze/nptl/vfork.S        |   46 +
 .../unix/sysv/linux/microblaze/profil-counter.h    |    2 +
 ports/sysdeps/unix/sysv/linux/microblaze/semctl.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setgroups.c |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c  |    1 +
 .../unix/sysv/linux/microblaze/sigcontextinfo.h    |   25 +
 ports/sysdeps/unix/sysv/linux/microblaze/socket.S  |  126 ++
 .../unix/sysv/linux/microblaze/sys/procfs.h        |  123 ++
 .../sysdeps/unix/sysv/linux/microblaze/sys/user.h  |   77 +
 ports/sysdeps/unix/sysv/linux/microblaze/syscall.S |   37 +
 .../unix/sysv/linux/microblaze/syscalls.list       |   18 +
 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.S  |   39 +
 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h  |  307 +++
 ports/sysdeps/unix/sysv/linux/microblaze/xstat.c   |    1 +
 100 files changed, 9473 insertions(+), 0 deletions(-)
 create mode 100644 ports/ChangeLog.microblaze
 create mode 100644 ports/sysdeps/microblaze/Implies
 create mode 100644 ports/sysdeps/microblaze/Makefile
 create mode 100644 ports/sysdeps/microblaze/__longjmp.S
 create mode 100644 ports/sysdeps/microblaze/_mcount.S
 create mode 100644 ports/sysdeps/microblaze/abort-instr.h
 create mode 100644 ports/sysdeps/microblaze/asm-syntax.h
 create mode 100644 ports/sysdeps/microblaze/backtrace.c
 create mode 100644 ports/sysdeps/microblaze/backtrace_linux.c
 create mode 100755 ports/sysdeps/microblaze/bits/atomic.h
 create mode 100644 ports/sysdeps/microblaze/bits/endian.h
 create mode 100644 ports/sysdeps/microblaze/bits/fenv.h
 create mode 100644 ports/sysdeps/microblaze/bits/link.h
 create mode 100644 ports/sysdeps/microblaze/bits/setjmp.h
 create mode 100644 ports/sysdeps/microblaze/bsd-_setjmp.S
 create mode 100644 ports/sysdeps/microblaze/bsd-setjmp.S
 create mode 100644 ports/sysdeps/microblaze/crti.S
 create mode 100644 ports/sysdeps/microblaze/crtn.S
 create mode 100644 ports/sysdeps/microblaze/dl-machine.h
 create mode 100644 ports/sysdeps/microblaze/dl-tls.h
 create mode 100644 ports/sysdeps/microblaze/dl-trampoline.S
 create mode 100644 ports/sysdeps/microblaze/fegetround.c
 create mode 100644 ports/sysdeps/microblaze/fesetround.c
 create mode 100644 ports/sysdeps/microblaze/gccframe.h
 create mode 100644 ports/sysdeps/microblaze/jmpbuf-unwind.h
 create mode 100644 ports/sysdeps/microblaze/ldsodefs.h
 create mode 100644 ports/sysdeps/microblaze/libc-tls.c
 create mode 100644 ports/sysdeps/microblaze/libm-test-ulps
 create mode 100644 ports/sysdeps/microblaze/machine-gmon.h
 create mode 100644 ports/sysdeps/microblaze/math_private.h
 create mode 100644 ports/sysdeps/microblaze/memusage.h
 create mode 100644 ports/sysdeps/microblaze/nptl/Makefile
 create mode 100644 ports/sysdeps/microblaze/nptl/pthread_spin_lock.c
 create mode 100644 ports/sysdeps/microblaze/nptl/pthreaddef.h
 create mode 100644 ports/sysdeps/microblaze/nptl/tcb-offsets.sym
 create mode 100644 ports/sysdeps/microblaze/nptl/tls.h
 create mode 100644 ports/sysdeps/microblaze/preconfigure
 create mode 100644 ports/sysdeps/microblaze/setjmp.S
 create mode 100644 ports/sysdeps/microblaze/shlib-versions
 create mode 100644 ports/sysdeps/microblaze/sotruss-lib.c
 create mode 100644 ports/sysdeps/microblaze/stackinfo.h
 create mode 100644 ports/sysdeps/microblaze/start.S
 create mode 100644 ports/sysdeps/microblaze/sysdep.h
 create mode 100644 ports/sysdeps/microblaze/tls-macros.h
 create mode 100644 ports/sysdeps/microblaze/tst-audit.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/Makefile
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/Versions
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/mman.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/stat.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/brk.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/clone.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/configure
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/configure.in
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/fcntl.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/fxstat.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/fxstatat.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getsysstats.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/kernel-features.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/kernel_stat.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/lxstat.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/mmap.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/msgctl.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/semaphore.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/c++-types.data
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/fork.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/ld.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libBrokenLocale.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libanl.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libc.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libcrypt.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libdl.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libm.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libnsl.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libpthread.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libresolv.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/librt.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libthread_db.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/libutil.abilist
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/localplt.data
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/pt-vfork.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/pthread_once.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/nptl/vfork.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/profil-counter.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/semctl.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setgroups.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/socket.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/sys/procfs.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/sys/user.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/syscall.S
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/syscalls.list
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.S
 create mode 100755 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/xstat.c

diff --git a/ports/ChangeLog.microblaze b/ports/ChangeLog.microblaze
new file mode 100644
index 0000000..4323270
--- /dev/null
+++ b/ports/ChangeLog.microblaze
@@ -0,0 +1,101 @@
+2013-03-28  David Holsgrove  <david.holsgrove@xilinx.com>
+
+	* sysdeps/microblaze/Implies: New file.
+	* sysdeps/microblaze/Makefile: New file.
+	* sysdeps/microblaze/__longjmp.S: New file.
+	* sysdeps/microblaze/_mcount.S: New file.
+	* sysdeps/microblaze/abort-instr.h: New file.
+	* sysdeps/microblaze/asm-syntax.h: New file.
+	* sysdeps/microblaze/backtrace.c: New file.
+	* sysdeps/microblaze/backtrace_linux.c: New file.
+	* sysdeps/microblaze/bits/atomic.h: New file.
+	* sysdeps/microblaze/bits/endian.h: New file.
+	* sysdeps/microblaze/bits/fenv.h: New file.
+	* sysdeps/microblaze/bits/link.h: New file.
+	* sysdeps/microblaze/bits/setjmp.h: New file.
+	* sysdeps/microblaze/bsd-_setjmp.S: New file.
+	* sysdeps/microblaze/bsd-setjmp.S: New file.
+	* sysdeps/microblaze/crti.S: New file.
+	* sysdeps/microblaze/crtn.S: New file.
+	* sysdeps/microblaze/dl-machine.h: New file.
+	* sysdeps/microblaze/dl-tls.h: New file.
+	* sysdeps/microblaze/dl-trampoline.S: New file.
+	* sysdeps/microblaze/fegetround.c: New file.
+	* sysdeps/microblaze/fesetround.c: New file.
+	* sysdeps/microblaze/gccframe.h: New file.
+	* sysdeps/microblaze/jmpbuf-unwind.h: New file.
+	* sysdeps/microblaze/ldsodefs.h: New file.
+	* sysdeps/microblaze/libc-tls.c: New file.
+	* sysdeps/microblaze/libm-test-ulps: New file.
+	* sysdeps/microblaze/machine-gmon.h: New file.
+	* sysdeps/microblaze/math_private.h: New file.
+	* sysdeps/microblaze/memusage.h: New file.
+	* sysdeps/microblaze/nptl/Makefile: New file.
+	* sysdeps/microblaze/nptl/pthread_spin_lock.c: New file.
+	* sysdeps/microblaze/nptl/pthreaddef.h: New file.
+	* sysdeps/microblaze/nptl/tcb-offsets.sym: New file.
+	* sysdeps/microblaze/nptl/tls.h: New file.
+	* sysdeps/microblaze/preconfigure: New file.
+	* sysdeps/microblaze/setjmp.S: New file.
+	* sysdeps/microblaze/shlib-versions: New file.
+	* sysdeps/microblaze/sotruss-lib.c: New file.
+	* sysdeps/microblaze/stackinfo.h: New file.
+	* sysdeps/microblaze/start.S: New file.
+	* sysdeps/microblaze/sysdep.h: New file.
+	* sysdeps/microblaze/tls-macros.h: New file.
+	* sysdeps/microblaze/tst-audit.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/Makefile: New file.
+	* sysdeps/unix/sysv/linux/microblaze/Versions: New file.
+	* sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S: New file.
+	* sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/bits/mman.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/bits/stat.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/brk.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/clone.S: New file.
+	* sysdeps/unix/sysv/linux/microblaze/configure: New file.
+	* sysdeps/unix/sysv/linux/microblaze/configure.in: New file.
+	* sysdeps/unix/sysv/linux/microblaze/fcntl.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/fxstat.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/fxstatat.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/getsysstats.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/kernel-features.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/kernel_stat.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/lxstat.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/mmap.S: New file.
+	* sysdeps/unix/sysv/linux/microblaze/msgctl.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/bits/semaphore.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/c++-types.data: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/fork.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/ld.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libBrokenLocale.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libanl.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libc.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libcrypt.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libdl.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libm.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libnsl.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libpthread.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libresolv.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/librt.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libthread_db.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/libutil.abilist: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/localplt.data: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/pt-vfork.S: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/pthread_once.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/nptl/vfork.S: New file.
+	* sysdeps/unix/sysv/linux/microblaze/profil-counter.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/semctl.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/shmctl.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/setgroups.c: New file.
+	* sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/socket.S: New file.
+	* sysdeps/unix/sysv/linux/microblaze/sys/procfs.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/sys/user.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/syscall.S: New file.
+	* sysdeps/unix/sysv/linux/microblaze/syscalls.list: New file.
+	* sysdeps/unix/sysv/linux/microblaze/sysdep.S: New file.
+	* sysdeps/unix/sysv/linux/microblaze/sysdep.h: New file.
+	* sysdeps/unix/sysv/linux/microblaze/xstat.c: New file.
diff --git a/ports/sysdeps/microblaze/Implies b/ports/sysdeps/microblaze/Implies
new file mode 100644
index 0000000..73c766c
--- /dev/null
+++ b/ports/sysdeps/microblaze/Implies
@@ -0,0 +1,4 @@
+wordsize-32
+# MicroBlaze uses IEEE 754 floating point.
+ieee754/flt-32
+ieee754/dbl-64
diff --git a/ports/sysdeps/microblaze/Makefile b/ports/sysdeps/microblaze/Makefile
new file mode 100644
index 0000000..cc82a74
--- /dev/null
+++ b/ports/sysdeps/microblaze/Makefile
@@ -0,0 +1,26 @@
+ifeq ($(subdir),elf)
+CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused
+endif
+
+ifeq ($(subdir),gmon)
+sysdep_routines += _mcount
+endif
+
+ifeq ($(subdir),resource)
+sysdep_routines += backtrace_linux
+endif
+
+$(objpfx)libm.so: $(elfobjdir)/ld.so
+$(objpfx)libcrypt.so: $(elfobjdir)/ld.so
+$(objpfx)libresolv.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_dns.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_files.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_db.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_nis.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_nisplus.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_hesiod.so: $(elfobjdir)/ld.so
+$(objpfx)libnss_compat.so: $(elfobjdir)/ld.so
+$(objpfx)libanl.so: $(elfobjdir)/ld.so
+$(objpfx)libnsl.so: $(elfobjdir)/ld.so
+$(objpfx)libcidn.so: $(elfobjdir)/ld.so
+$(objpfx)libutil.so: $(elfobjdir)/ld.so
diff --git a/ports/sysdeps/microblaze/__longjmp.S b/ports/sysdeps/microblaze/__longjmp.S
new file mode 100644
index 0000000..a49c33f
--- /dev/null
+++ b/ports/sysdeps/microblaze/__longjmp.S
@@ -0,0 +1,55 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+/* Jump to the position specified by ENV, causing the
+   setjmp call there to return VAL, or 1 if VAL is 0.  */
+
+/* void __longjmp (__jmp_buf env, int val) */
+
+ENTRY(__longjmp)
+    lwi   r1,r5,0
+    lwi   r2,r5,4
+    lwi   r13,r5,8
+    lwi   r14,r5,12
+    lwi   r15,r5,16
+    lwi   r16,r5,20
+    lwi   r17,r5,24
+    lwi   r18,r5,28
+    lwi   r19,r5,32
+    lwi   r20,r5,36
+    lwi   r21,r5,40
+    lwi   r22,r5,44
+    lwi   r23,r5,48
+    lwi   r24,r5,52
+    lwi   r25,r5,56
+    lwi   r26,r5,60
+    lwi   r27,r5,64
+    lwi   r28,r5,68
+    lwi   r29,r5,72
+    lwi   r30,r5,76
+    lwi   r31,r5,80
+    addk  r3,r6,r0
+    beqi  r3,L(return_1)
+    rtsd  r15,8
+    nop
+L(return_1):
+    rtsd  r15,8
+    addik r3,r0,1	/* delay slot.  */
+END(__longjmp)
diff --git a/ports/sysdeps/microblaze/_mcount.S b/ports/sysdeps/microblaze/_mcount.S
new file mode 100644
index 0000000..7d4f40a
--- /dev/null
+++ b/ports/sysdeps/microblaze/_mcount.S
@@ -0,0 +1,91 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+	.global	_mcount
+	.type	_mcount, @function
+_mcount:
+	# Save regs.
+	addik   r1, r1,-4 * 24
+	swi	r31, r1, 4 * 23
+	swi	r30, r1, 4 * 22
+	swi	r29, r1, 4 * 21
+	swi	r28, r1, 4 * 20
+	swi	r27, r1, 4 * 19
+	swi	r26, r1, 4 * 18
+	swi	r25, r1, 4 * 17
+	swi	r24, r1, 4 * 16
+	swi	r23, r1, 4 * 15
+	swi	r22, r1, 4 * 14
+	swi	r21, r1, 4 * 13
+	swi	r20, r1, 4 * 12
+	swi	r19, r1, 4 * 11
+	swi	r15, r1, 4 * 10
+	swi	r12, r1, 4 * 9
+	swi	r11, r1, 4 * 8
+	swi	r10, r1, 4 * 7
+	swi	r8, r1, 4 * 6
+	swi	r7, r1, 4 * 5
+	swi	r6, r1, 4 * 4
+	swi	r5, r1, 4 * 3
+	swi	r4, r1, 4 * 2
+	swi	r3, r1, 4 * 1
+	swi	r2, r1, 4 * 0
+
+#ifdef SHARED
+	mfs     r20,rpc
+	addik   r20,r20,_GLOBAL_OFFSET_TABLE_+8
+	addk	r6, r0, r15	# callee is in r15.
+	brlid	r15, __mcount_internal@PLT
+	lwi	r5, r1, 4 * 24	# caller is on the stack.
+#else
+	# Pass from/to in r5 and r6.
+	addk	r6, r0, r15	# callee is in r15.
+	bralid	r15, __mcount_internal
+	lwi	r5, r1, 4 * 24	# caller is on the stack.
+#endif
+
+	# Reload regs
+	lwi	r31, r1, 4 * 23
+	lwi	r30, r1, 4 * 22
+	lwi	r29, r1, 4 * 21
+	lwi	r28, r1, 4 * 20
+	lwi	r27, r1, 4 * 19
+	lwi	r26, r1, 4 * 18
+	lwi	r25, r1, 4 * 17
+	lwi	r24, r1, 4 * 16
+	lwi	r23, r1, 4 * 15
+	lwi	r22, r1, 4 * 14
+	lwi	r21, r1, 4 * 13
+	lwi	r20, r1, 4 * 12
+	lwi	r19, r1, 4 * 11
+	lwi	r15, r1, 4 * 10
+	lwi	r12, r1, 4 * 9
+	lwi	r11, r1, 4 * 8
+	lwi	r10, r1, 4 * 7
+	lwi	r8, r1, 4 * 6
+	lwi	r7, r1, 4 * 5
+	lwi	r6, r1, 4 * 4
+	lwi	r5, r1, 4 * 3
+	lwi	r4, r1, 4 * 2
+	lwi	r3, r1, 4 * 1
+	lwi	r2, r1, 4 * 0
+
+	rtsd	r15, 8
+	addik	r1, r1, 4 * 24
+
+	.size	_mcount, . - _mcount
diff --git a/ports/sysdeps/microblaze/abort-instr.h b/ports/sysdeps/microblaze/abort-instr.h
new file mode 100644
index 0000000..38469d4
--- /dev/null
+++ b/ports/sysdeps/microblaze/abort-instr.h
@@ -0,0 +1,2 @@
+/* An instruction which should crash any program is `illegal'.  */
+#define ABORT_INSTRUCTION asm ("brki r0, -1")
diff --git a/ports/sysdeps/microblaze/asm-syntax.h b/ports/sysdeps/microblaze/asm-syntax.h
new file mode 100644
index 0000000..fc8fbcd
--- /dev/null
+++ b/ports/sysdeps/microblaze/asm-syntax.h
@@ -0,0 +1,24 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#undef ALIGN
+#define ALIGN(log) .align 1<<log
+
+#define R_(r) %##r
+#define R(r) R_(r)
+#define L(label) .##label
diff --git a/ports/sysdeps/microblaze/backtrace.c b/ports/sysdeps/microblaze/backtrace.c
new file mode 100644
index 0000000..de0695d
--- /dev/null
+++ b/ports/sysdeps/microblaze/backtrace.c
@@ -0,0 +1,139 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdio.h>
+#include <string.h>
+#include <sysdep.h>
+#include <signal.h>
+#include <execinfo.h>
+
+extern int
+_identify_sighandler (unsigned long fp, unsigned long pc,
+                      unsigned long *pprev_fp, unsigned long *pprev_pc,
+                      unsigned long *retaddr);
+
+inline long
+get_frame_size (unsigned long instr)
+{
+  return abs ((short signed) (instr & 0xFFFF));
+}
+
+static unsigned long *
+find_frame_creation (unsigned long *pc)
+{
+  int i;
+
+  /* NOTE: Distance to search is arbitrary.
+     250 works well for most things,
+     750 picks up things like tcp_recvmsg,
+     1000 needed for fat_fill_super.  */
+  for (i = 0; i < 1000; i++, pc--)
+    {
+      unsigned long instr;
+      unsigned long frame_size;
+
+      instr = *pc;
+
+      /* Is the instruction of the form
+         addik r1, r1, foo ? */
+      if ((instr & 0xFFFF0000) != 0x30210000)
+        continue;
+
+      frame_size = get_frame_size (instr);
+
+      if ((frame_size < 8) || (frame_size & 3))
+        return NULL;
+
+      return pc;
+    }
+  return NULL;
+}
+
+static int
+lookup_prev_stack_frame (unsigned long fp, unsigned long pc,
+                         unsigned long *pprev_fp, unsigned long *pprev_pc,
+                         unsigned long *retaddr)
+{
+  unsigned long *prologue = NULL;
+
+  int is_signalhandler = _identify_sighandler (fp, pc, pprev_fp,
+                                               pprev_pc, retaddr);
+
+  if (!is_signalhandler)
+    {
+      prologue = find_frame_creation ((unsigned long *) pc);
+
+      if (prologue)
+        {
+          long frame_size = get_frame_size (*prologue);
+          *pprev_fp = fp + frame_size;
+          if (*retaddr != 0)
+            *pprev_pc = *retaddr;
+          else
+            *pprev_pc = *(unsigned long *) fp;
+
+          *retaddr = 0;
+          if (!*pprev_pc || (*pprev_pc & 3))
+            prologue=0;
+        }
+      else
+        {
+          *pprev_pc = 0;
+          *pprev_fp = fp;
+          *retaddr = 0;
+        }
+    }
+    return (!*pprev_pc || (*pprev_pc & 3)) ? -1 : 0;
+}
+
+int
+__backtrace (void **array, int size)
+{
+  unsigned long pc, fp;
+  unsigned long ppc, pfp;
+  /* Return address(r15) is required in the signal handler case, since the
+     return address of the function which causes the signal may not be
+     recorded in the stack.  */
+  unsigned long retaddr; 
+
+  int count;
+  int rc = 0;
+
+  __asm__ __volatile__ ("mfs %0, rpc"
+                        : "=r"(pc));
+
+  __asm__ __volatile__ ("add %0, r1, r0"
+                        : "=r"(fp));
+
+  array[0] = (void *) pc;
+  retaddr = 0;
+  for (count = 1; count < size; count++)
+    {
+      rc = lookup_prev_stack_frame (fp, pc, &pfp, &ppc, &retaddr);
+
+      fp = pfp;
+      pc = ppc;
+      array[count] = (void *) pc;
+      if (rc)
+        return count;
+    }
+  return count;
+}
+
+weak_alias (__backtrace, backtrace)
+libc_hidden_def (__backtrace)
diff --git a/ports/sysdeps/microblaze/backtrace_linux.c b/ports/sysdeps/microblaze/backtrace_linux.c
new file mode 100644
index 0000000..55fa061
--- /dev/null
+++ b/ports/sysdeps/microblaze/backtrace_linux.c
@@ -0,0 +1,59 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stddef.h>
+#include <asm/sigcontext.h>
+#include <linux/signal.h>
+#include <asm-generic/ucontext.h>
+#include <asm/unistd.h>
+
+int
+_identify_sighandler (unsigned long fp, unsigned long pc,
+                      unsigned long *pprev_fp, unsigned long *pprev_pc,
+                      unsigned long *retaddr)
+{
+  unsigned long *tramp = 0;
+  struct ucontext *uc;
+
+  if (*retaddr == 0)
+    {
+      /* Kernel inserts the tramp between the signal handler frame and the
+         caller frame in signal handling.  */
+      tramp = (unsigned long *) pc;
+      tramp += 2;
+      if ((*tramp == (0x31800000 | __NR_rt_sigreturn))
+          && (*(tramp+1) == 0xb9cc0008))
+        {
+          /* Signal handler function argument are:
+             int sig_num, siginfo_t * info, void * ucontext
+             therefore ucontext is the 3rd argument.  */
+          unsigned long ucptr = ((unsigned long) tramp
+                                 - sizeof (struct ucontext));
+          uc = (struct ucontext *) ucptr;
+          *pprev_pc = uc->uc_mcontext.regs.pc;
+          /* Need to record the return address since the return address of the
+             function which causes this signal may not be recorded in the
+             stack.  */
+          *pprev_fp = uc->uc_mcontext.regs.r1;
+          *retaddr = uc->uc_mcontext.regs.r15;
+          /* It is a signal handler.  */
+          return 1;
+        }
+    }
+  return 0;
+}
diff --git a/ports/sysdeps/microblaze/bits/atomic.h b/ports/sysdeps/microblaze/bits/atomic.h
new file mode 100755
index 0000000..2daaa7e
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/atomic.h
@@ -0,0 +1,269 @@
+/* Copyright (C) 2003-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdint.h>
+#include <sysdep.h>
+
+
+typedef int8_t atomic8_t;
+typedef uint8_t uatomic8_t;
+typedef int_fast8_t atomic_fast8_t;
+typedef uint_fast8_t uatomic_fast8_t;
+
+typedef int32_t atomic32_t;
+typedef uint32_t uatomic32_t;
+typedef int_fast32_t atomic_fast32_t;
+typedef uint_fast32_t uatomic_fast32_t;
+
+typedef intptr_t atomicptr_t;
+typedef uintptr_t uatomicptr_t;
+typedef intmax_t atomic_max_t;
+typedef uintmax_t uatomic_max_t;
+
+
+/* Microblaze does not have byte and halfword forms of load and reserve and
+   store conditional. So for microblaze we stub out the 8- and 16-bit forms.  */
+#define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval)            \
+  (abort (), 0)
+
+#define __arch_compare_and_exchange_bool_16_acq(mem, newval, oldval)           \
+  (abort (), 0)
+
+#define __arch_compare_and_exchange_bool_8_rel(mem, newval, oldval)            \
+  (abort (), 0)
+
+#define __arch_compare_and_exchange_bool_16_rel(mem, newval, oldval)           \
+  (abort (), 0)
+
+#define __arch_compare_and_exchange_val_32_acq(mem, newval, oldval)            \
+  ({                                                                           \
+      __typeof (*(mem)) __tmp;                                                 \
+      __typeof (mem)  __memp = (mem);                                          \
+      int test;                                                                \
+      __asm __volatile (                                                       \
+                "   addc    r0, r0, r0;"                                       \
+                "1: lwx     %0, %3, r0;"                                       \
+                "   addic   %1, r0, 0;"                                        \
+                "   bnei    %1, 1b;"                                           \
+                "   cmp     %1, %0, %4;"                                       \
+                "   bnei    %1, 2f;"                                           \
+                "   swx     %5, %3, r0;"                                       \
+                "   addic   %1, r0, 0;"                                        \
+                "   bnei    %1, 1b;"                                           \
+                "2:"                                                           \
+                    : "=&r" (__tmp),                                           \
+                    "=&r" (test),                                              \
+                    "=m" (*__memp)                                             \
+                    : "r" (__memp),                                            \
+                    "r" (oldval),                                              \
+                    "r" (newval)                                               \
+                    : "cc", "memory");                                         \
+      __tmp;                                                                   \
+  })
+
+#define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval)            \
+  (abort (), (__typeof (*mem)) 0)
+
+#define atomic_compare_and_exchange_val_acq(mem, newval, oldval)               \
+  ({                                                                           \
+    __typeof (*(mem)) __result;                                                \
+    if (sizeof (*mem) == 4)                                                    \
+      __result = __arch_compare_and_exchange_val_32_acq (mem, newval, oldval); \
+    else if (sizeof (*mem) == 8)                                               \
+      __result = __arch_compare_and_exchange_val_64_acq (mem, newval, oldval); \
+    else                                                                       \
+       abort ();                                                               \
+    __result;                                                                  \
+  })
+
+#define atomic_compare_and_exchange_val_rel(mem, newval, oldval)               \
+  ({                                                                           \
+    __typeof (*(mem)) __result;                                                \
+    if (sizeof (*mem) == 4)                                                    \
+      __result = __arch_compare_and_exchange_val_32_acq (mem, newval, oldval); \
+    else if (sizeof (*mem) == 8)                                               \
+      __result = __arch_compare_and_exchange_val_64_acq (mem, newval, oldval); \
+    else                                                                       \
+       abort ();                                                               \
+    __result;                                                                  \
+  })
+
+#define __arch_atomic_exchange_32_acq(mem, value)                              \
+  ({                                                                           \
+      __typeof (*(mem)) __tmp;                                                 \
+      __typeof (mem)  __memp = (mem);                                          \
+      int test;                                                                \
+      __asm __volatile (                                                       \
+                "   addc    r0, r0, r0;"                                       \
+                "1: lwx     %0, %4, r0;"                                       \
+                "   addic   %1, r0, 0;"                                        \
+                "   bnei    %1, 1b;"                                           \
+                "   swx     %3, %4, r0;"                                       \
+                "   addic   %1, r0, 0;"                                        \
+                "   bnei    %1, 1b;"                                           \
+                    : "=&r" (__tmp),                                           \
+                    "=&r" (test),                                              \
+                    "=m" (*__memp)                                             \
+                    : "r" (value),                                             \
+                    "r" (__memp)                                               \
+                    : "cc", "memory");                                         \
+      __tmp;                                                                   \
+  })
+
+#define __arch_atomic_exchange_64_acq(mem, newval)                             \
+  (abort (), (__typeof (*mem)) 0)
+
+#define atomic_exchange_acq(mem, value)                                        \
+  ({                                                                           \
+    __typeof (*(mem)) __result;                                                \
+    if (sizeof (*mem) == 4)                                                    \
+      __result = __arch_atomic_exchange_32_acq (mem, value);                   \
+    else if (sizeof (*mem) == 8)                                               \
+      __result = __arch_atomic_exchange_64_acq (mem, value);                   \
+    else                                                                       \
+       abort ();                                                               \
+    __result;                                                                  \
+  })
+
+#define atomic_exchange_rel(mem, value)                                        \
+  ({                                                                           \
+    __typeof (*(mem)) __result;                                                \
+    if (sizeof (*mem) == 4)                                                    \
+      __result = __arch_atomic_exchange_32_acq (mem, value);                   \
+    else if (sizeof (*mem) == 8)                                               \
+      __result = __arch_atomic_exchange_64_acq (mem, value);                   \
+    else                                                                       \
+       abort ();                                                               \
+    __result;                                                                  \
+  })
+
+#define __arch_atomic_exchange_and_add_32(mem, value)                          \
+  ({                                                                           \
+    __typeof (*(mem)) __tmp;                                                   \
+      __typeof (mem)  __memp = (mem);                                          \
+    int test;                                                                  \
+    __asm __volatile (                                                         \
+                "   addc    r0, r0, r0;"                                       \
+                "1: lwx     %0, %4, r0;"                                       \
+                "   addic   %1, r0, 0;"                                        \
+                "   bnei    %1, 1b;"                                           \
+                "   add     %1, %3, %0;"                                       \
+                "   swx     %1, %4, r0;"                                       \
+                "   addic   %1, r0, 0;"                                        \
+                "   bnei    %1, 1b;"                                           \
+                    : "=&r" (__tmp),                                           \
+                    "=&r" (test),                                              \
+                    "=m" (*__memp)                                             \
+                    : "r" (value),                                             \
+                    "r" (__memp)                                               \
+                    : "cc", "memory");                                         \
+    __tmp;                                                                     \
+  })
+
+#define __arch_atomic_exchange_and_add_64(mem, value)                          \
+  (abort (), (__typeof (*mem)) 0)
+
+#define atomic_exchange_and_add(mem, value)                                    \
+  ({                                                                           \
+    __typeof (*(mem)) __result;                                                \
+    if (sizeof (*mem) == 4)                                                    \
+      __result = __arch_atomic_exchange_and_add_32 (mem, value);               \
+    else if (sizeof (*mem) == 8)                                               \
+      __result = __arch_atomic_exchange_and_add_64 (mem, value);               \
+    else                                                                       \
+       abort ();                                                               \
+    __result;                                                                  \
+  })
+
+#define __arch_atomic_increment_val_32(mem)                                    \
+  ({                                                                           \
+    __typeof (*(mem)) __val;                                                   \
+    int test;                                                                  \
+    __asm __volatile (                                                         \
+                "   addc    r0, r0, r0;"                                       \
+                "1: lwx     %0, %3, r0;"                                       \
+                "   addic   %1, r0, 0;"                                        \
+                "   bnei    %1, 1b;"                                           \
+                "   addi    %0, %0, 1;"                                        \
+                "   swx     %0, %3, r0;"                                       \
+                "   addic   %1, r0, 0;"                                        \
+                "   bnei    %1, 1b;"                                           \
+                    : "=&r" (__val),                                           \
+                    "=&r" (test),                                              \
+                    "=m" (*mem)                                                \
+                    : "r" (mem),                                               \
+                    "m" (*mem)                                                 \
+                    : "cc", "memory");                                         \
+    __val;                                                                     \
+  })
+
+#define __arch_atomic_increment_val_64(mem)                                    \
+  (abort (), (__typeof (*mem)) 0)
+
+#define atomic_increment_val(mem)                                              \
+  ({                                                                           \
+    __typeof (*(mem)) __result;                                                \
+    if (sizeof (*(mem)) == 4)                                                  \
+      __result = __arch_atomic_increment_val_32 (mem);                         \
+    else if (sizeof (*(mem)) == 8)                                             \
+      __result = __arch_atomic_increment_val_64 (mem);                         \
+    else                                                                       \
+       abort ();                                                               \
+    __result;                                                                  \
+  })
+
+#define atomic_increment(mem) ({ atomic_increment_val (mem); (void) 0; })
+
+#define __arch_atomic_decrement_val_32(mem)                                    \
+  ({                                                                           \
+    __typeof (*(mem)) __val;                                                   \
+    int test;                                                                  \
+    __asm __volatile (                                                         \
+                "   addc    r0, r0, r0;"                                       \
+                "1: lwx     %0, %3, r0;"                                       \
+                "   addic   %1, r0, 0;"                                        \
+                "   bnei    %1, 1b;"                                           \
+                "   rsubi   %0, %0, 1;"                                        \
+                "   swx     %0, %3, r0;"                                       \
+                "   addic   %1, r0, 0;"                                        \
+                "   bnei    %1, 1b;"                                           \
+                    : "=&r" (__val),                                           \
+                    "=&r" (test),                                              \
+                    "=m" (*mem)                                                \
+                    : "r" (mem),                                               \
+                    "m" (*mem)                                                 \
+                    : "cc", "memory");                                         \
+    __val;                                                                     \
+  })
+
+#define __arch_atomic_decrement_val_64(mem)                                    \
+  (abort (), (__typeof (*mem)) 0)
+
+#define atomic_decrement_val(mem)                                              \
+  ({                                                                           \
+    __typeof (*(mem)) __result;                                                \
+    if (sizeof (*(mem)) == 4)                                                  \
+      __result = __arch_atomic_decrement_val_32 (mem);                         \
+    else if (sizeof (*(mem)) == 8)                                             \
+      __result = __arch_atomic_decrement_val_64 (mem);                         \
+    else                                                                       \
+       abort ();                                                               \
+    __result;                                                                  \
+  })
+
+#define atomic_decrement(mem) ({ atomic_decrement_val (mem); (void) 0; })
diff --git a/ports/sysdeps/microblaze/bits/endian.h b/ports/sysdeps/microblaze/bits/endian.h
new file mode 100644
index 0000000..174c115
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/endian.h
@@ -0,0 +1,30 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _ENDIAN_H
+# error "Never use <bits/endian.h> directly; include <endian.h> instead."
+#endif
+
+/* MicroBlaze can be either big or little endian.  */
+#ifdef _BIG_ENDIAN
+# define __BYTE_ORDER __BIG_ENDIAN
+# define __FLOAT_WORD_ORDER __BIG_ENDIAN
+#else
+# define __BYTE_ORDER __LITTLE_ENDIAN
+# define __FLOAT_WORD_ORDER __LITTLE_ENDIAN
+#endif
diff --git a/ports/sysdeps/microblaze/bits/fenv.h b/ports/sysdeps/microblaze/bits/fenv.h
new file mode 100644
index 0000000..49dd8cd
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/fenv.h
@@ -0,0 +1,42 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _FENV_H
+# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+#endif
+
+/* MicroBlaze supports only round-to-nearest.  The software
+   floating-point support also acts this way.  */
+enum
+  {
+    __FE_UNDEFINED = 0,
+
+    FE_TONEAREST =
+#define FE_TONEAREST	0x1
+    FE_TONEAREST,
+  };
+
+#define FE_ALL_EXCEPT 0
+
+/* Type representing exception flags (if there were any).  */
+typedef unsigned int fexcept_t;
+
+/* Type representing floating-point environment.  */
+typedef unsigned int fenv_t;
+
+/* If the default argument is used we use this value.  */
+#define FE_DFL_ENV	((const fenv_t *) -1l)
diff --git a/ports/sysdeps/microblaze/bits/link.h b/ports/sysdeps/microblaze/bits/link.h
new file mode 100644
index 0000000..2b2842a
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/link.h
@@ -0,0 +1,57 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _LINK_H
+# error "Never include <bits/link.h> directly; use <link.h> instead."
+#endif
+
+/* Registers for entry into PLT on Microblaze.  */
+typedef struct La_microblaze_regs
+{
+  uint32_t lr_r0;
+  uint32_t lr_r1;
+  uint32_t lr_sp;
+} La_microblaze_regs;
+
+/* Return values for calls from PLT on Microblaze.  */
+typedef struct La_microblaze_retval
+{
+  uint32_t lrv_r3;
+} La_microblaze_retval;
+
+
+__BEGIN_DECLS
+
+extern Elf32_Addr la_microblaze_gnu_pltenter (Elf32_Sym *__sym,
+                                              unsigned int __ndx,
+                                              uintptr_t *__refcook,
+                                              uintptr_t *__defcook,
+                                              La_microblaze_regs *__regs,
+                                              unsigned int *__flags,
+                                              const char *__symname,
+                                              long int *__framesizep);
+
+extern unsigned int la_microblaze_gnu_pltexit (Elf32_Sym *__sym,
+                                               unsigned int __ndx,
+                                               uintptr_t *__refcook,
+                                               uintptr_t *__defcook,
+                                               const La_microblaze_regs *__inregs,
+                                               La_microblaze_retval *__outregs,
+                                               const char *__symname);
+
+__END_DECLS
diff --git a/ports/sysdeps/microblaze/bits/setjmp.h b/ports/sysdeps/microblaze/bits/setjmp.h
new file mode 100644
index 0000000..19f83db
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/setjmp.h
@@ -0,0 +1,37 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Define the machine-dependent type `jmp_buf'.  */
+
+#ifndef _BITS_SETJMP_H
+# define _BITS_SETJMP_H 1
+
+#if !defined _SETJMP_H && !defined _PTHREAD_H
+# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
+#endif
+
+typedef struct
+  {
+    /* There are 21 4-byte registers that should be saved:
+       r1, r2, r13-r31. Actually, there seems no need to save
+       r14, r16, r17, r18 (return addresses for interrupt/exception/trap).  */
+    int *__sp; /* dedicated name for r1.  */
+    long int __gregs[20];
+  } __jmp_buf[1];
+
+#endif
diff --git a/ports/sysdeps/microblaze/bsd-_setjmp.S b/ports/sysdeps/microblaze/bsd-_setjmp.S
new file mode 100644
index 0000000..22c8d20
--- /dev/null
+++ b/ports/sysdeps/microblaze/bsd-_setjmp.S
@@ -0,0 +1,22 @@
+/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'.
+   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define setjmp_name _setjmp
+#define SAVEMASK 0
+
+#include <setjmp.S>
diff --git a/ports/sysdeps/microblaze/bsd-setjmp.S b/ports/sysdeps/microblaze/bsd-setjmp.S
new file mode 100644
index 0000000..e25b6cb
--- /dev/null
+++ b/ports/sysdeps/microblaze/bsd-setjmp.S
@@ -0,0 +1,22 @@
+/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'.
+   Copyright (C) 1995-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define setjmp_name setjmp
+#define SAVEMASK 1
+
+#include <setjmp.S>
diff --git a/ports/sysdeps/microblaze/crti.S b/ports/sysdeps/microblaze/crti.S
new file mode 100644
index 0000000..e06b666
--- /dev/null
+++ b/ports/sysdeps/microblaze/crti.S
@@ -0,0 +1,89 @@
+/* Special .init and .fini section support for MicroBlaze.
+   Copyright (C) 2012-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   In addition to the permissions in the GNU Lesser General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file with other
+   programs, and to distribute those programs without any restriction
+   coming from the use of this file. (The GNU Lesser General Public
+   License restrictions do apply in other respects; for example, they
+   cover modification of the file, and distribution when not linked
+   into another program.)
+
+   Note that people who make modified versions of this file are not
+   obligated to grant this special exception for their modified
+   versions; it is their choice whether to do so. The GNU Lesser
+   General Public License gives permission to release a modified
+   version without this exception; this exception also makes it
+   possible to release a modified version which carries forward this
+   exception.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* crti.S puts a function prologue at the beginning of the .init and
+   .fini sections and defines global symbols for those addresses, so
+   they can be called as functions.  The symbols _init and _fini are
+   magic and cause the linker to emit DT_INIT and DT_FINI.  */
+
+#include <libc-symbols.h>
+#include <sysdep.h>
+
+#ifndef PREINIT_FUNCTION
+# define PREINIT_FUNCTION __gmon_start__
+#endif
+
+#ifndef PREINIT_FUNCTION_WEAK
+# define PREINIT_FUNCTION_WEAK 1
+#endif
+
+#if PREINIT_FUNCTION_WEAK
+	weak_extern (PREINIT_FUNCTION)
+#else
+	.hidden PREINIT_FUNCTION
+#endif
+
+	.section .init,"ax",@progbits
+	.align	2
+	.globl	_init
+	.type	_init, @function
+_init:
+	addik	r1,r1,-32
+	swi	r20,r1,28
+	mfs	r20,rpc
+	addik	r20,r20,_GLOBAL_OFFSET_TABLE_+8
+	lwi	r3,r20,PREINIT_FUNCTION@GOT
+#if PREINIT_FUNCTION_WEAK
+	beqid   r3,$Lno_weak_fn:
+	swi     r15,r1,0
+	brlid	r15,PREINIT_FUNCTION@PLT
+$Lno_weak_fn:
+#else
+	swi     r15,r1,0
+	brald	r15,r3
+#endif
+	nop		# Unfilled delay slot
+
+	.section .fini,"ax",@progbits
+	.align	2
+	.globl	_fini
+	.type	_fini, @function
+_fini:
+	addik	r1,r1,-32
+	swi	r20,r1,28
+	swi	r15,r1,0
+	mfs	r20,rpc
+	addik	r20,r20,_GLOBAL_OFFSET_TABLE_+8
+
diff --git a/ports/sysdeps/microblaze/crtn.S b/ports/sysdeps/microblaze/crtn.S
new file mode 100644
index 0000000..5928c2d
--- /dev/null
+++ b/ports/sysdeps/microblaze/crtn.S
@@ -0,0 +1,52 @@
+/* Special .init and .fini section support for MicroBlaze.
+   Copyright (C) 1995-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   In addition to the permissions in the GNU Lesser General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file with other
+   programs, and to distribute those programs without any restriction
+   coming from the use of this file. (The GNU Lesser General Public
+   License restrictions do apply in other respects; for example, they
+   cover modification of the file, and distribution when not linked
+   into another program.)
+
+   Note that people who make modified versions of this file are not
+   obligated to grant this special exception for their modified
+   versions; it is their choice whether to do so. The GNU Lesser
+   General Public License gives permission to release a modified
+   version without this exception; this exception also makes it
+   possible to release a modified version which carries forward this
+   exception.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* crtn.S puts function epilogues in the .init and .fini sections
+   corresponding to the prologues in crti.S. */
+
+#include <sysdep.h>
+
+	.section .init,"ax",@progbits
+	lwi	r15,r1,0
+	lwi	r20,r1,28
+	rtsd	r15,8
+	addik	r1,r1,32
+
+	.section .fini,"ax",@progbits
+	lwi	r15,r1,0
+	lwi	r20,r1,28
+	rtsd	r15,8
+	addik	r1,r1,32
+
diff --git a/ports/sysdeps/microblaze/dl-machine.h b/ports/sysdeps/microblaze/dl-machine.h
new file mode 100644
index 0000000..7471bdd
--- /dev/null
+++ b/ports/sysdeps/microblaze/dl-machine.h
@@ -0,0 +1,299 @@
+/* Copyright (C) 1995-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef dl_machine_h
+#define dl_machine_h
+
+#define ELF_MACHINE_NAME "microblaze"
+
+#include <sys/param.h>
+#include <tls.h>
+
+/* Return nonzero iff ELF header is compatible with the running host.  */
+static inline int
+elf_machine_matches_host (const Elf32_Ehdr *ehdr)
+{
+  return (ehdr->e_machine == EM_MICROBLAZE);
+}
+
+/* Return the link-time address of _DYNAMIC.  Conveniently, this is the
+   first element of the GOT.  This must be inlined in a function which
+   uses global data.  */
+static inline Elf32_Addr
+elf_machine_dynamic (void)
+{
+  /* This produces a GOTOFF reloc that resolves to zero at link time, so in
+     fact just loads from the GOT register directly.  By doing it without
+     an asm we can let the compiler choose any register.  */
+
+  Elf32_Addr got_entry_0;
+  __asm__ __volatile__(
+    "lwi %0,r20,0"
+    :"=r"(got_entry_0)
+    );
+  return got_entry_0;
+}
+
+/* Return the run-time load address of the shared object.  */
+static inline Elf32_Addr
+elf_machine_load_address (void)
+{
+  /* Compute the difference between the runtime address of _DYNAMIC as seen
+     by a GOTOFF reference, and the link-time address found in the special
+     unrelocated first GOT entry.  */
+
+  Elf32_Addr dyn;
+  __asm__ __volatile__ (
+    "addik %0,r20,_DYNAMIC@GOTOFF"
+    : "=r"(dyn)
+    );
+  return dyn - elf_machine_dynamic ();
+}
+
+/* Set up the loaded object described by L so its unrelocated PLT
+   entries will jump to the on-demand fixup code in dl-runtime.c.  */
+
+static inline int __attribute__ ((always_inline))
+elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
+{
+  extern void _dl_runtime_resolve (Elf32_Word);
+  extern void _dl_runtime_profile (Elf32_Word);
+
+  return lazy;
+}
+
+/* The PLT uses Elf32_Rela relocs.  */
+#define elf_machine_relplt elf_machine_rela
+
+/* Mask identifying addresses reserved for the user program,
+   where the dynamic linker should not map anything.  */
+#define ELF_MACHINE_USER_ADDRESS_MASK	0x80000000UL
+
+/* Initial entry point code for the dynamic linker.
+   The C function `_dl_start' is the real entry point;
+   its return value is the user program's entry point.  */
+
+#define RTLD_START asm ("\
+	.text\n\
+	.globl _start\n\
+	.type _start,@function\n\
+_start:\n\
+	addk  r5,r0,r1\n\
+	addk  r3,r0,r0\n\
+1:\n\
+	addik r5,r5,4\n\
+	lw    r4,r5,r0\n\
+	bneid r4,1b\n\
+	addik r3,r3,1\n\
+	addik r3,r3,-1\n\
+	addk  r5,r0,r1\n\
+	sw    r3,r5,r0\n\
+	addik r1,r1,-24\n\
+	sw    r15,r1,r0\n\
+	brlid r15,_dl_start\n\
+	nop\n\
+	/* FALLTHRU.  */\n\
+\n\
+	.globl _dl_start_user\n\
+	.type _dl_start_user,@function\n\
+_dl_start_user:\n\
+	mfs   r20,rpc\n\
+	addik r20,r20,_GLOBAL_OFFSET_TABLE_+8\n\
+	lwi   r4,r20,_dl_skip_args@GOTOFF\n\
+	lwi   r5,r1,24\n\
+	rsubk r5,r4,r5\n\
+	addk  r4,r4,r4\n\
+	addk  r4,r4,r4\n\
+	addk  r1,r1,r4\n\
+	swi   r5,r1,24\n\
+	swi   r3,r1,20\n\
+	addk  r6,r5,r0\n\
+	addk  r5,r5,r5\n\
+	addk  r5,r5,r5\n\
+	addik r7,r1,28\n\
+	addk  r8,r7,r5\n\
+	addik r8,r8,4\n\
+	lwi   r5,r20,_rtld_local@GOTOFF\n\
+	brlid r15,_dl_init_internal\n\
+	nop\n\
+	lwi   r5,r1,24\n\
+	lwi   r3,r1,20\n\
+	addk  r4,r5,r5\n\
+	addk  r4,r4,r4\n\
+	addik r6,r1,28\n\
+	addk  r7,r6,r4\n\
+	addik r7,r7,4\n\
+	addik r15,r20,_dl_fini@GOTOFF\n\
+	addik r15,r15,-8\n\
+	brad  r3\n\
+	addik r1,r1,24\n\
+	nop\n\
+	.size _dl_start_user, . - _dl_start_user\n\
+	.previous");
+
+/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or
+   TLS variable, so undefined references should not be allowed to
+   define the value.
+   ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
+   of the main executable's symbols, as for a COPY reloc.  */
+#ifndef RTLD_BOOTSTRAP
+# define elf_machine_type_class(type) \
+  (((type) == R_MICROBLAZE_JUMP_SLOT || \
+    (type) == R_MICROBLAZE_TLSDTPREL32 || \
+    (type) == R_MICROBLAZE_TLSDTPMOD32 || \
+    (type) == R_MICROBLAZE_TLSTPREL32) \
+    * ELF_RTYPE_CLASS_PLT \
+   | ((type) == R_MICROBLAZE_COPY) * ELF_RTYPE_CLASS_COPY)
+#else
+# define elf_machine_type_class(type) \
+  (((type) == R_MICROBLAZE_JUMP_SLOT) * ELF_RTYPE_CLASS_PLT \
+   | ((type) == R_MICROBLAZE_COPY) * ELF_RTYPE_CLASS_COPY)
+#endif
+
+/* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.  */
+#define ELF_MACHINE_JMP_SLOT	R_MICROBLAZE_JUMP_SLOT
+
+/* The microblaze never uses Elf32_Rel relocations.  */
+#define ELF_MACHINE_NO_REL 1
+
+static inline Elf32_Addr
+elf_machine_fixup_plt (struct link_map *map, lookup_t t,
+		       const Elf32_Rela *reloc,
+		       Elf32_Addr *reloc_addr, Elf32_Addr value)
+{
+  return *reloc_addr = value;
+}
+
+/* Return the final value of a plt relocation. Ignore the addend.  */
+static inline Elf32_Addr
+elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc,
+		       Elf32_Addr value)
+{
+  return value;
+}
+
+#endif /* !dl_machine_h.  */
+
+/* Names of the architecture-specific auditing callback functions.  */
+#define ARCH_LA_PLTENTER microblaze_gnu_pltenter
+#define ARCH_LA_PLTEXIT microblaze_gnu_pltexit
+
+#ifdef RESOLVE_MAP
+
+/* Perform the relocation specified by RELOC and SYM (which is fully resolved).
+   MAP is the object containing the reloc.  */
+
+/* Macro to put 32-bit relocation value into 2 words.  */
+#define PUT_REL_64(rel_addr,val) \
+  do { \
+    ((unsigned short *)(rel_addr))[1] = (val) >> 16; \
+    ((unsigned short *)(rel_addr))[3] = (val) & 0xffff; \
+  } while (0)
+
+auto inline void __attribute__ ((always_inline))
+elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
+		  const Elf32_Sym *sym, const struct r_found_version *version,
+		  void *const reloc_addr_arg, int skip_ifunc)
+{
+  Elf32_Addr *const reloc_addr = reloc_addr_arg;
+  const int r_type = ELF32_R_TYPE (reloc->r_info);
+
+  if (__builtin_expect (r_type == R_MICROBLAZE_64_PCREL, 0))
+    PUT_REL_64 (reloc_addr, map->l_addr + reloc->r_addend);
+  else if (r_type == R_MICROBLAZE_REL)
+    *reloc_addr = map->l_addr + reloc->r_addend;
+  else
+    {
+      const Elf32_Sym *const refsym = sym;
+      struct link_map *sym_map = RESOLVE_MAP (&sym, version, r_type);
+      Elf32_Addr value = sym == NULL ? 0 : sym_map->l_addr + sym->st_value;
+
+      value += reloc->r_addend;
+      if (r_type == R_MICROBLAZE_GLOB_DAT ||
+          r_type == R_MICROBLAZE_JUMP_SLOT ||
+          r_type == R_MICROBLAZE_32)
+	{
+	  *reloc_addr = value;
+	}
+      else if (r_type == R_MICROBLAZE_COPY)
+	{
+	  if (sym != NULL && (sym->st_size > refsym->st_size
+	      || (sym->st_size < refsym->st_size && GLRO (dl_verbose))) )
+	    {
+	      const char *strtab;
+
+	      strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
+	      _dl_error_printf ("\
+%s: Symbol `%s' has different size in shared object, consider re-linking\n",
+				rtld_progname ?: "<program name unknown>",
+				strtab + refsym->st_name);
+	    }
+	  memcpy (reloc_addr_arg, (void *) value,
+		  MIN (sym->st_size, refsym->st_size));
+	}
+      else if (r_type == R_MICROBLAZE_NONE)
+	{
+	}
+#if !defined RTLD_BOOTSTRAP
+      else if (r_type == R_MICROBLAZE_TLSDTPMOD32)
+	{
+	  if (sym_map != NULL)
+	    *reloc_addr = sym_map->l_tls_modid;
+	}
+      else if (r_type == R_MICROBLAZE_TLSDTPREL32)
+	{
+	  if (sym != NULL)
+	    *reloc_addr = sym->st_value + reloc->r_addend;
+	}
+      else if (r_type == R_MICROBLAZE_TLSTPREL32)
+	{
+	  if (sym != NULL)
+	    {
+	      CHECK_STATIC_TLS (map, sym_map);
+	      *reloc_addr = sym->st_value + sym_map->l_tls_offset + reloc->r_addend;
+	    }
+	}
+#endif
+      else
+	{
+	  _dl_reloc_bad_type (map, r_type, 0);
+	}
+    }
+}
+
+auto inline void
+elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc,
+			   void *const reloc_addr_arg)
+{
+  Elf32_Addr *const reloc_addr = reloc_addr_arg;
+  PUT_REL_64 (reloc_addr, l_addr + reloc->r_addend);
+}
+
+auto inline void
+elf_machine_lazy_rel (struct link_map *map,
+		      Elf32_Addr l_addr, const Elf32_Rela *reloc,
+		      int skip_ifunc)
+{
+  Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset);
+  if (ELF32_R_TYPE (reloc->r_info) == R_MICROBLAZE_JUMP_SLOT)
+    *reloc_addr += l_addr;
+  else
+    _dl_reloc_bad_type (map, ELF32_R_TYPE (reloc->r_info), 1);
+}
+
+#endif /* RESOLVE_MAP.  */
diff --git a/ports/sysdeps/microblaze/dl-tls.h b/ports/sysdeps/microblaze/dl-tls.h
new file mode 100644
index 0000000..0e7f2e5
--- /dev/null
+++ b/ports/sysdeps/microblaze/dl-tls.h
@@ -0,0 +1,29 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* Type used for the representation of TLS information in the GOT.  */
+typedef struct
+{
+  unsigned long int ti_module;
+  unsigned long int ti_offset;
+} tls_index;
+
+extern void *__tls_get_addr (tls_index *ti);
+
+/* Value used for dtv entries for which the allocation is delayed.  */
+#define TLS_DTV_UNALLOCATED	((void *) -1l)
diff --git a/ports/sysdeps/microblaze/dl-trampoline.S b/ports/sysdeps/microblaze/dl-trampoline.S
new file mode 100644
index 0000000..f10e22e
--- /dev/null
+++ b/ports/sysdeps/microblaze/dl-trampoline.S
@@ -0,0 +1,109 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+#include <libc-symbols.h>
+
+#ifndef PROF
+
+    .text
+    .globl  _dl_runtime_resolve
+    .type   _dl_runtime_resolve, @function
+    .align  4
+_dl_runtime_resolve:
+    addik r1,r1,-40
+    swi   r5,r1,12
+    swi   r6,r1,16
+    swi   r7,r1,20
+    swi   r8,r1,24
+    swi   r9,r1,28
+    swi   r10,r1,32
+    swi   r15,r1,0
+    addk r5,r0,r4
+    brlid r15, _dl_fixup
+    addk r6,r0,r3; /* delay slot.  */
+    lwi   r10,r1,32
+    lwi   r9,r1,28
+    lwi   r8,r1,24
+    lwi   r7,r1,20
+    lwi   r6,r1,16
+    lwi   r5,r1,12
+    lwi   r15,r1,0
+    brad  r3
+    addik r1,r1,40; /* delay slot.  */
+    .size _dl_runtime_resolve, . - _dl_runtime_resolve
+
+    .text
+    .globl  _dl_runtime_profile
+    .type   _dl_runtime_profile, @function
+    .align  4
+_dl_runtime_profile:
+    addik r1,r1,-40
+    swi   r5,r1,12
+    swi   r6,r1,16
+    swi   r7,r1,20
+    swi   r8,r1,24
+    swi   r9,r1,28
+    swi   r10,r1,32
+    swi   r15,r1,0
+    addk r5,r0,r4
+    brlid r15, _dl_profile_fixup
+    addk r6,r0,r3; /* delay slot.  */
+    lwi   r10,r1,32
+    lwi   r9,r1,28
+    lwi   r8,r1,24
+    lwi   r7,r1,20
+    lwi   r6,r1,16
+    lwi   r5,r1,12
+    lwi   r15,r1,0
+    brad  r3
+    addik r1,r1,40; /* delay slot.  */
+    .size _dl_runtime_profile, . - _dl_runtime_profile
+
+#else
+
+    .text
+    .globl  _dl_runtime_resolve
+    .type   _dl_runtime_resolve, @function
+    .align  4
+_dl_runtime_resolve:
+    addik r1,r1,-40
+    swi   r5,r1,12
+    swi   r6,r1,16
+    swi   r7,r1,20
+    swi   r8,r1,24
+    swi   r9,r1,28
+    swi   r10,r1,32
+    swi   r15,r1,0
+    addk r5,r0,r4
+    brlid r15, fixup
+    addk r6,r0,r3; /* delay slot.  */
+    lwi   r10,r1,32
+    lwi   r9,r1,28
+    lwi   r8,r1,24
+    lwi   r7,r1,20
+    lwi   r6,r1,16
+    lwi   r5,r1,12
+    lwi   r15,r1,0
+    brad  r3
+    addik r1,r1,40; /* delay slot.  */
+    .size _dl_runtime_resolve, . - _dl_runtime_resolve
+    .globl _dl_runtime_profile
+    .set _dl_runtime_profile, _dl_runtime_resolve
+
+#endif
diff --git a/ports/sysdeps/microblaze/fegetround.c b/ports/sysdeps/microblaze/fegetround.c
new file mode 100644
index 0000000..4f47dd1
--- /dev/null
+++ b/ports/sysdeps/microblaze/fegetround.c
@@ -0,0 +1,24 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+
+int
+fegetround (void)
+{
+  return FE_TONEAREST;
+}
diff --git a/ports/sysdeps/microblaze/fesetround.c b/ports/sysdeps/microblaze/fesetround.c
new file mode 100644
index 0000000..8ca4e51
--- /dev/null
+++ b/ports/sysdeps/microblaze/fesetround.c
@@ -0,0 +1,25 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <fenv.h>
+
+int
+fesetround (int round)
+{
+  return (round == FE_TONEAREST) ? 0 : 1;
+}
+libm_hidden_def (fesetround)
diff --git a/ports/sysdeps/microblaze/gccframe.h b/ports/sysdeps/microblaze/gccframe.h
new file mode 100644
index 0000000..4561cf2
--- /dev/null
+++ b/ports/sysdeps/microblaze/gccframe.h
@@ -0,0 +1,21 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define FIRST_PSEUDO_REGISTER 78
+
+#include <sysdeps/generic/gccframe.h>
diff --git a/ports/sysdeps/microblaze/jmpbuf-unwind.h b/ports/sysdeps/microblaze/jmpbuf-unwind.h
new file mode 100644
index 0000000..237b035
--- /dev/null
+++ b/ports/sysdeps/microblaze/jmpbuf-unwind.h
@@ -0,0 +1,46 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <setjmp.h>
+#include <stdint.h>
+#include <unwind.h>
+#include <sysdep.h>
+
+/* Test if longjmp to JMPBUF would unwind the frame
+   containing a local variable at ADDRESS.  */
+#define _JMPBUF_UNWINDS(jmpbuf, address, demangle)		\
+  ((void *) (address) < (void *) demangle ((jmpbuf)[0].__sp))
+
+#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \
+  _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj)
+
+static inline uintptr_t __attribute__ ((unused))
+_jmpbuf_sp (__jmp_buf regs)
+{
+  uintptr_t sp = regs[0].__sp;
+#ifdef PTR_DEMANGLE
+  PTR_DEMANGLE (sp);
+#endif
+  return sp;
+}
+
+#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
+  ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj))
+
+/* We use the normal longjmp for unwinding.  */
+#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val)
diff --git a/ports/sysdeps/microblaze/ldsodefs.h b/ports/sysdeps/microblaze/ldsodefs.h
new file mode 100644
index 0000000..74f68e9
--- /dev/null
+++ b/ports/sysdeps/microblaze/ldsodefs.h
@@ -0,0 +1,45 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _MICROBLAZE_LDSODEFS_H
+#define _MICROBLAZE_LDSODEFS_H 1
+
+#include <elf.h>
+
+struct La_microblaze_regs;
+struct La_microblaze_retval;
+
+#define ARCH_PLTENTER_MEMBERS                                                \
+  Elf32_Addr (*microblaze_gnu_pltenter) (Elf32_Sym *, unsigned int,          \
+                                         uintptr_t *,                        \
+                                         uintptr_t *,                        \
+                                         struct La_microblaze_regs *,        \
+                                         unsigned int *, const char *name,   \
+                                         long int *framesizep);
+
+#define ARCH_PLTEXIT_MEMBERS                                                 \
+  unsigned int (*microblaze_gnu_pltexit) (Elf32_Sym *, unsigned int,         \
+                                          uintptr_t *,                       \
+                                          uintptr_t *,                       \
+                                          const struct La_microblaze_regs *, \
+                                          struct La_microblaze_retval *,     \
+                                          const char *);
+
+#include_next <ldsodefs.h>
+
+#endif
diff --git a/ports/sysdeps/microblaze/libc-tls.c b/ports/sysdeps/microblaze/libc-tls.c
new file mode 100644
index 0000000..1dacdca
--- /dev/null
+++ b/ports/sysdeps/microblaze/libc-tls.c
@@ -0,0 +1,32 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <csu/libc-tls.c>
+#include <dl-tls.h>
+
+/* On Microblaze, linker optimizations are not required, so __tls_get_addr
+   can be called even in statically linked binaries.  In this case module
+   must be always 1 and PT_TLS segment exist in the binary, otherwise it
+   would not link.  */
+
+void *
+__tls_get_addr (tls_index *ti)
+{
+  dtv_t *dtv = THREAD_DTV ();
+  return (char *) dtv[1].pointer.val + ti->ti_offset;
+}
diff --git a/ports/sysdeps/microblaze/libm-test-ulps b/ports/sysdeps/microblaze/libm-test-ulps
new file mode 100644
index 0000000..9fde9b1
--- /dev/null
+++ b/ports/sysdeps/microblaze/libm-test-ulps
@@ -0,0 +1,1728 @@
+# Begin of automatic generation
+
+# atan2
+Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025":
+float: 1
+ifloat: 1
+Test "atan2 (-max_value, -min_value) == -pi/2":
+float: 1
+ifloat: 1
+Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025":
+float: 1
+ifloat: 1
+Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772":
+float: 1
+ifloat: 1
+
+# atanh
+Test "atanh (0.75) == 0.972955074527656652552676371721589865":
+float: 1
+ifloat: 1
+
+# cacos
+Test "Imaginary part of: cacos (+0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (+0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (+0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0 + 0.5 i) == pi/2 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 + 1.0 i) == pi/2 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 + 1.5 i) == pi/2 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (-0 - 0.5 i) == pi/2 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 - 1.0 i) == pi/2 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: cacos (-0 - 1.5 i) == pi/2 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Real part of: cacos (-1.0 + 0x1p50 i) == 1.570796326794897507409741391764983781004 - 3.535050620855721078027883819436759661753e1 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-1.0 - 0x1p50 i) == 1.570796326794897507409741391764983781004 + 3.535050620855721078027883819436759661753e1 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (-2 - 3 i) == 2.1414491111159960199416055713254211 + 1.9833870299165354323470769028940395 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacos (0.5 + +0 i) == 1.047197551196597746154214461093167628066 - 0 i":
+double: 1
+idouble: 1
+Test "Real part of: cacos (0.5 - 0 i) == 1.047197551196597746154214461093167628066 + +0 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp1023 + 0x1.fp1023 i) == 7.853981633974483096156608458198757210493e-1 - 7.107906849659093345062145442726115449315e2 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacos (0x1.fp127 + 0x1.fp127 i) == 7.853981633974483096156608458198757210493e-1 - 8.973081118419833726837456344608533993585e1 i":
+double: 1
+idouble: 1
+
+# cacosh
+Test "Real part of: cacosh (+0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (+0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (+0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0 + 0.5 i) == 0.4812118250596034474977589134243684231352 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 + 1.0 i) == 0.8813735870195430252326093249797923090282 + pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 + 1.5 i) == 1.194763217287109304111930828519090523536 + pi/2 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-0 - 0.5 i) == 0.4812118250596034474977589134243684231352 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 - 1.0 i) == 0.8813735870195430252326093249797923090282 - pi/2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: cacosh (-0 - 1.5 i) == 1.194763217287109304111930828519090523536 - pi/2 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 + +0 i) == +0 + 2.094395102393195492308428922186335256131 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cacosh (-0.5 - 0 i) == +0 - 2.094395102393195492308428922186335256131 i":
+double: 1
+idouble: 1
+Test "Real part of: cacosh (-1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + pi i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (-1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - pi i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cacosh (-2 - 3 i) == 1.9833870299165354323470769028940395 - 2.1414491111159960199416055713254211 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (1.5 + +0 i) == 0.9624236501192068949955178268487368462704 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: cacosh (1.5 - 0 i) == 0.9624236501192068949955178268487368462704 - 0 i":
+float: 1
+ifloat: 1
+
+# casin
+Test "Imaginary part of: casin (+0 + 0.5 i) == +0 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 + 1.0 i) == +0 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 + 1.5 i) == +0 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (+0 - 0.5 i) == +0 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 - 1.0 i) == +0 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (+0 - 1.5 i) == +0 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0 + 0.5 i) == -0 + 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 + 1.0 i) == -0 + 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 + 1.5 i) == -0 + 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (-0 - 0.5 i) == -0 - 0.4812118250596034474977589134243684231352 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 - 1.0 i) == -0 - 0.8813735870195430252326093249797923090282 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (-0 - 1.5 i) == -0 - 1.194763217287109304111930828519090523536 i":
+double: 1
+idouble: 1
+Test "Real part of: casin (0.75 + 1.25 i) == 0.453276177638793913448921196101971749 + 1.13239363160530819522266333696834467 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: casin (0x1.fp1023 + 0x1.fp1023 i) == 7.853981633974483096156608458198757210493e-1 + 7.107906849659093345062145442726115449315e2 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: casin (0x1.fp127 + 0x1.fp127 i) == 7.853981633974483096156608458198757210493e-1 + 8.973081118419833726837456344608533993585e1 i":
+double: 1
+idouble: 1
+
+# casinh
+Test "Real part of: casinh (-0.5 + +0 i) == -0.4812118250596034474977589134243684231352 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-0.5 - 0 i) == -0.4812118250596034474977589134243684231352 - 0 i":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 + +0 i) == -0.8813735870195430252326093249797923090282 + +0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.0 - 0 i) == -0.8813735870195430252326093249797923090282 - 0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (-1.5 + +0 i) == -1.194763217287109304111930828519090523536 + +0 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (-1.5 - 0 i) == -1.194763217287109304111930828519090523536 - 0 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0.5 + +0 i) == 0.4812118250596034474977589134243684231352 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.5 - 0 i) == 0.4812118250596034474977589134243684231352 - 0 i":
+float: 1
+ifloat: 1
+Test "Real part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: casinh (0.75 + 1.25 i) == 1.03171853444778027336364058631006594 + 0.911738290968487636358489564316731207 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (0x1.fp1023 + 0x1.fp1023 i) == 7.107906849659093345062145442726115449315e2 + 7.853981633974483096156608458198757210493e-1 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (0x1.fp127 + 0x1.fp127 i) == 8.973081118419833726837456344608533993585e1 + 7.853981633974483096156608458198757210493e-1 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.0 + +0 i) == 0.8813735870195430252326093249797923090282 + +0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.0 - 0 i) == 0.8813735870195430252326093249797923090282 - 0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: casinh (1.5 + +0 i) == 1.194763217287109304111930828519090523536 + +0 i":
+double: 1
+idouble: 1
+Test "Real part of: casinh (1.5 - 0 i) == 1.194763217287109304111930828519090523536 - 0 i":
+double: 1
+idouble: 1
+
+# catan
+Test "Imaginary part of: catan (-2 - 3 i) == -1.4099210495965755225306193844604208 - 0.22907268296853876629588180294200276 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# catanh
+Test "Real part of: catanh (-2 - 3 i) == -0.14694666622552975204743278515471595 - 1.3389725222944935611241935759091443 i":
+double: 4
+idouble: 4
+Test "Real part of: catanh (0.75 + 1.25 i) == 0.261492138795671927078652057366532140 + 0.996825126463918666098902241310446708 i":
+double: 1
+idouble: 1
+
+# cbrt
+Test "cbrt (-27.0) == -3.0":
+double: 1
+idouble: 1
+Test "cbrt (0.75) == 0.908560296416069829445605878163630251":
+double: 1
+idouble: 1
+Test "cbrt (0.9921875) == 0.997389022060725270579075195353955217":
+double: 1
+idouble: 1
+
+# ccos
+Test "Imaginary part of: ccos (-0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (-0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (-0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (-0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (-2 - 3 i) == -4.18962569096880723013255501961597373 - 9.10922789375533659797919726277886212 i":
+float: 1
+ifloat: 1
+Test "Real part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0.75 + 1.25 i) == 1.38173873063425888530729933139078645 - 1.09193013555397466170919531722024128 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0.75 + 710.5 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (0.75 + 89.5 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0.75 - 710.5 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccos (0.75 - 89.5 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccos (0x1p-1074 + 1440 i) == inf - 5.981479269486130556466515778180916082415e301 i":
+double: 1
+idouble: 1
+
+# ccosh
+Test "Real part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-2 - 3 i) == -3.72454550491532256547397070325597253 + 0.511822569987384608834463849801875634 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (-710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (-89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (-89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (0.75 + 1.25 i) == 0.408242591877968807788852146397499084 + 0.780365930845853240391326216300863152 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (1440 + 0x1p-1074 i) == inf + 5.981479269486130556466515778180916082415e301 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ccosh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ccosh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+
+# cexp
+Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (-95 + 0.75 i) == 4.039714446238306526889476684000081624047e-42 + 3.763383677300535390271646960780570275931e-42 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (0.75 + 1.25 i) == 0.667537446429131586942201977015932112 + 2.00900045494094876258347228145863909 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (1440 + 0x1p-1074 i) == inf + 1.196295853897226111293303155636183216483e302 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "Imaginary part of: cexp (50 + 0x1p127 i) == 4.053997150228616856622417636046265337193e21 + 3.232070315463388524466674772633810238819e21 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (500 + 0x1p1023 i) == -1.159886268932754433233243794561351783426e217 + 7.904017694554466595359379965081774849708e216 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: cexp (709.8125 + 0.75 i) == 1.355121963080879535248452862759108365762e308 + 1.262426823598609432507811340856186873507e308 i":
+double: 1
+idouble: 1
+Test "Real part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: cexp (88.75 + 0.75 i) == 2.558360358486542817001900410314204322891e38 + 2.383359453227311447654736314679677655100e38 i":
+float: 2
+ifloat: 2
+
+# clog
+Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 2.649094276923003995420209214900915462737e-10 + 3.141592653589793238462643383279502884197 i":
+double: 1
+idouble: 1
+Test "Real part of: clog (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 2.649094282537168795982991778475646793277e-10 + 3.141592652530155111500161671113150737892 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog (-0x1.234566p-40 - 1.0 i) == 5.354083939753840089583620652120903838944e-25 - 1.570796326795931422008642456283782656359 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.fp+127 + 0x1p-149 i) == 88.69109041335841930424871526389807508374 + pi i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1.fp+127 - 0x1p-149 i) == 88.69109041335841930424871526389807508374 - pi i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (-0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (-0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x0.ffffffp0 + 0x0.ffffffp-100 i) == -5.960464655174753498633255797994360530379e-8 + 7.888609052210118054117285652827862296732e-31 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.000566p0 + 0x1.234p-10 i) == 8.298731898331237038231468223024422855654e-5 + 1.110938609507128729312743251313024793990e-3 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.fp+127 + 0x1p-149 i) == 88.69109041335841930424871526389807508374 + +0 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1.fp+127 - 0x1p-149 i) == 88.69109041335841930424871526389807508374 - 0 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1p-1074 + 0x1p-1074 i) == -744.0934983311012896593986823853525458290 + pi/4 i":
+double: 1
+idouble: 1
+Test "Real part of: clog (0x1p-147 + 0x1p-147 i) == -101.5460619520319878296245057936228672231 + pi/4 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1p-149 + 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 + pi/2 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (0x1p-149 - 0x1.fp+127 i) == 88.69109041335841930424871526389807508374 - pi/2 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog (0x2818p-15 + 0x798fp-15 i) == 1.5366822245016167178749091974664853785194e-08 + 1.2522014929038946066987318471922169174157 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog (1.0 + 0x1.234566p-10 i) == 6.172834701221959432440126967147726538097e-7 + 1.111110564353742042376451655136933182201e-3 i":
+float: 1
+ifloat: 1
+
+# clog10
+Test "Imaginary part of: clog10 (-0 + inf i) == inf + pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-0 - inf i) == inf - pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 1.150487026509145544402795327729455391948e-10 + 1.364376353841841347485783625431355770210 i":
+double: 2
+idouble: 2
+Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-1000 i) == 1.150487026509145544402795327729455391948e-10 + 1.364376353841841347485783625431355770210 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 1.150487028947346337782682105935961875822e-10 + 1.364376353381646356131680448946397884147 i":
+double: 2
+idouble: 2
+Test "Imaginary part of: clog10 (-0x1.0000000123456p0 + 0x1.2345678p-30 i) == 1.150487028947346337782682105935961875822e-10 + 1.364376353381646356131680448946397884147 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1.fp+1023 + 0x1p-1074 i) == 308.2409272754311106024666378243768099991 + 1.364376353841841347485783625431355770210 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1.fp+1023 - 0x1p-1074 i) == 308.2409272754311106024666378243768099991 - 1.364376353841841347485783625431355770210 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1.fp+127 + 0x1p-149 i) == 38.51805116050395969095658815123105801479 + 1.364376353841841347485783625431355770210 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-0x1.fp+127 - 0x1p-149 i) == 38.51805116050395969095658815123105801479 - 1.364376353841841347485783625431355770210 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-0x1p-1074 + 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 + 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1p-1074 - 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 - 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1p-149 + 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 + 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-0x1p-149 - 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 - 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-1.0 + 0x1.234566p-20 i) == 2.556638434669064077889576526006849923281e-13 + 1.364375882602207106407956770293808181427 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-2 - 3 i) == 0.556971676153418384603252578971164214 - 0.937554462986374708541507952140189646 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (-3 + inf i) == inf + pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-3 - inf i) == inf - pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf + 0 i) == inf + pi*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf + 1 i) == inf + pi*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf - 0 i) == inf - pi*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (-inf - 1 i) == inf - pi*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0 + inf i) == inf + pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0 - inf i) == inf - pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (0x0.fffffffffffff8p0 + 0x0.fffffffffffff8p-1000 i) == -4.821637332766435821255375046554377090472e-17 + 4.053112396770095089737411317782466262176e-302 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x0.ffffffp0 + 0x0.ffffffp-100 i) == -2.588596909321764128428416045209904492216e-8 + 3.425979381266895667295625489912064603415e-31 i":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-10 i) == 3.604093470239754109961125085078190708674e-5 + 4.824745078422174667425851670822596859720e-4 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.000566p0 + 0x1.234p-10 i) == 3.604093470239754109961125085078190708674e-5 + 4.824745078422174667425851670822596859720e-4 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1.000566p0 + 0x1.234p-100 i) == 3.577293486783822178310971763308187385546e-5 + 3.897399639875661463735636919790792140598e-31 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.234566p-30 + 1.0 i) == 2.438200411482400072282924063740535840474e-19 + 6.821881764607257184291586401763604544928e-1 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.234566p-50 + 1.0 i) == 2.217530356103816369479108963807448194409e-31 + 6.821881769209202348667823902864283966959e-1 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.234566p-60 + 1.0 i) == 2.114801746467415208319767917450504756866e-37 + 6.821881769209206733143018621078368211515e-1 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1.fffffep+127 + 0x1.fffffep+127 i) == 38.68235441693561449174780668781319348761 + pi/4*log10(e) i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (0x1.fffffep+127 + 1.0 i) == 38.53183941910362389414093724045094697423 + 1.276276851248440096917018665609900318458e-39 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (0x10673dd0f2481p-51 + 0x7ef1d17cefbd2p-51 i) == 1.3918041236396763648388478552321724382899e-29 + 0.6263795733790237053262025311642907438291 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i) == 2.2081507730821788480616336165447731164865e-32 + 0.5484039935757001196548030312819898864760 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1367a310575591p-54 + 0x3cfcc0a0541f60p-54 i) == 2.2081507730821788480616336165447731164865e-32 + 0.5484039935757001196548030312819898864760 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x164c74eea876p-45 + 0x16f393482f77p-45 i) == -1.3155760824064879362415202279780039150764e-26 + 0.3473590599762514228227328130640352044313 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1a6p-10 + 0x3a5p-10 i) == -6.2126412844802358329771948751248003038444e-07 + 0.4977135139537443711784513409096950995985 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1074 + 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 + 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x1p-1074 + 0x1p-1074 i) == -323.1557003452838130619487034867432642357 + pi/4*log10(e) i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-1074 - 0x1.fp+1023 i) == 308.2409272754311106024666378243768099991 - 0.6821881769209206737428918127156778851051 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-147 + 0x1p-147 i) == -44.10089436477324509881274807713822842154 + pi/4*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-149 + 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 + 0.6821881769209206737428918127156778851051 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-149 + 0x1p-149 i) == -44.70295435610120748924022586658721447508 + pi/4*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-149 - 0x1.fp+127 i) == 38.51805116050395969095658815123105801479 - 0.6821881769209206737428918127156778851051 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-509 + 1.0 i) == 7.730698388614835910296270976605350994446e-308 + 6.821881769209206737428918127156778851051e-1 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-510 + 1.0 i) == 1.932674597153708977574067744151337748612e-308 + 6.821881769209206737428918127156778851051e-1 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-511 + 1.0 i) == 4.831686492884272443935169360378344371529e-309 + 6.821881769209206737428918127156778851051e-1 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x1p-61 + 1.0 i) == 4.084085680564517578238994467153626207224e-38 + 6.821881769209206735545466044044889962925e-1 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-62 + 1.0 i) == 1.021021420141129394559748616788406551878e-38 + 6.821881769209206736487192085600834406988e-1 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x1p-63 + 1.0 i) == 2.552553550352823486399371541971016379740e-39 + 6.821881769209206736958055106378806629019e-1 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: clog10 (0x2818p-15 + 0x798fp-15 i) == 6.6737261053986614395049481326819059203910e-09 + 0.5438241985991753781478398141908629586460 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x2818p-15 + 0x798fp-15 i) == 6.6737261053986614395049481326819059203910e-09 + 0.5438241985991753781478398141908629586460 i":
+float: 1
+ifloat: 1
+Test "Real part of: clog10 (0x2dd46725bp-35 + 0x7783a1284p-35 i) == 1.9312741086596516918394613098872836703188e-20 + 0.5231613813514771042838490538484014771862 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i) == -1.9440841725722970687903291200493082253766e-13 + 0.5193774116724956222518530053006822210323 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (0x2ede88p-23 + 0x771c3fp-23 i) == -1.9440841725722970687903291200493082253766e-13 + 0.5193774116724956222518530053006822210323 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0x4447d7175p-35 + 0x6c445e00ap-35 i) == -6.4375803621988389731799033530075237868110e-21 + 0.4378257977686804492768642780897650927167 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x5b06b680ea2ccp-52 + 0xef452b965da9fp-52 i) == 3.6079845358966994996207055940336690133424e-30 + 0.5243112258263349992771652393178033846555 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0x9b57bp-20 + 0xcb7b4p-20 i) == -1.7182001068739620267773842120965071561416e-11 + 0.3990121149225253562859800593935899629087 i":
+double: 1
+idouble: 1
+Test "Real part of: clog10 (0xf2p-10 + 0x3e3p-10 i) == 2.6921240173351112953324592659528481616879e-06 + 0.5785726025799636431142862788413361783862 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0xf2p-10 + 0x3e3p-10 i) == 2.6921240173351112953324592659528481616879e-06 + 0.5785726025799636431142862788413361783862 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (0xfe961079616p-45 + 0x1bc37e09e6d1p-45 i) == 2.3329549194675052736016290082882121135546e-26 + 0.4561756099441139182878993697611751382976 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (1.0 + 0x1.234566p-10 i) == 2.680828048441605163181684680300513080769e-7 + 4.825491868832381486767558728169977751564e-4 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: clog10 (3 + inf i) == inf + pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (3 - inf i) == inf - pi/2*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (inf + inf i) == inf + pi/4*log10(e) i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: clog10 (inf - inf i) == inf - pi/4*log10(e) i":
+float: 1
+ifloat: 1
+
+# cos
+Test "cos (0x1p+120) == -9.25879022854837867303861764107414946730833e-01":
+float: 1
+ifloat: 1
+Test "cos (0x1p+127) == 7.81914638714960072263910298466369236613162e-01":
+float: 1
+ifloat: 1
+Test "cos (M_PI_6l * 2.0) == 0.5":
+double: 1
+idouble: 1
+Test "cos (M_PI_6l * 4.0) == -0.5":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+# cos_tonearest
+Test "cos_tonearest (7) == 0.7539022543433046381411975217191820122183":
+float: 1
+ifloat: 1
+
+# cpow
+Test "Real part of: cpow (0.75 + 1.25 i, 0.0 + 1.0 i) == 0.331825439177608832276067945276730566 + 0.131338600281188544930936345230903032 i":
+float: 1
+ifloat: 1
+Test "Real part of: cpow (0.75 + 1.25 i, 0.75 + 1.25 i) == 0.117506293914473555420279832210420483 + 0.346552747708338676483025352060418001 i":
+double: 1
+float: 4
+idouble: 1
+ifloat: 4
+Test "Real part of: cpow (0.75 + 1.25 i, 1.0 + 1.0 i) == 0.0846958290317209430433805274189191353 + 0.513285749182902449043287190519090481 i":
+double: 2
+float: 3
+idouble: 2
+ifloat: 3
+Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
+double: 1
+float: 4
+idouble: 1
+ifloat: 4
+Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
+float: 2
+ifloat: 2
+Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+# csin
+Test "Real part of: csin (-0.75 + 710.5 i) == -1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i":
+double: 1
+idouble: 1
+Test "Real part of: csin (-0.75 + 89.5 i) == -2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: csin (-0.75 - 710.5 i) == -1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i":
+double: 1
+idouble: 1
+Test "Real part of: csin (-0.75 - 89.5 i) == -2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: csin (0.75 + 710.5 i) == 1.255317763348154410745082950806112487736e308 + 1.347490911916428129246890157395342279438e308 i":
+double: 1
+idouble: 1
+Test "Real part of: csin (0.75 + 89.5 i) == 2.522786001038096774676288412995370563339e38 + 2.708024460708609732016532185663087200560e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: csin (0.75 - 710.5 i) == 1.255317763348154410745082950806112487736e308 - 1.347490911916428129246890157395342279438e308 i":
+double: 1
+idouble: 1
+Test "Real part of: csin (0.75 - 89.5 i) == 2.522786001038096774676288412995370563339e38 - 2.708024460708609732016532185663087200560e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: csin (0x1p-1074 + 1440 i) == 5.981479269486130556466515778180916082415e301 + inf i":
+double: 1
+idouble: 1
+
+# csinh
+Test "Imaginary part of: csinh (-2 - 3 i) == 3.59056458998577995201256544779481679 - 0.530921086248519805267040090660676560 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (-710.5 + 0.75 i) == -1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (-710.5 - 0.75 i) == -1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (-89.5 + 0.75 i) == -2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (-89.5 - 0.75 i) == -2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Real part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (0.75 + 1.25 i) == 0.259294854551162779153349830618433028 + 1.22863452409509552219214606515777594 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (1440 + 0x1p-1074 i) == inf + 5.981479269486130556466515778180916082415e301 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (710.5 + 0.75 i) == 1.347490911916428129246890157395342279438e308 + 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (710.5 - 0.75 i) == 1.347490911916428129246890157395342279438e308 - 1.255317763348154410745082950806112487736e308 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csinh (89.5 + 0.75 i) == 2.708024460708609732016532185663087200560e38 + 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csinh (89.5 - 0.75 i) == 2.708024460708609732016532185663087200560e38 - 2.522786001038096774676288412995370563339e38 i":
+float: 1
+ifloat: 1
+
+# csqrt
+Test "Real part of: csqrt (-0x1.000002p-126 - 0x1.000002p-126 i) == 4.934094449071842328766868579214125217132e-20 - 1.191195773697904627170323731331667740087e-19 i":
+double: 1
+idouble: 1
+Test "Real part of: csqrt (-2 + 3 i) == 0.89597747612983812471573375529004348 + 1.6741492280355400404480393008490519 i":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (-2 - 3 i) == 0.89597747612983812471573375529004348 - 1.6741492280355400404480393008490519 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: csqrt (0x1.000002p-126 + 0x1.000002p-126 i) == 1.191195773697904627170323731331667740087e-19 + 4.934094449071842328766868579214125217132e-20 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffep+127 + 1.0 i) == 1.844674352395372953599975585936590505260e+19 + 2.710505511993121390769065968615872097053e-20 i":
+float: 1
+ifloat: 1
+Test "Real part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1.fffffffffffffp+1023 i) == 1.473094556905565378990473658199034571917e+154 + 6.101757441282702188537080005372547713595e+153 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: csqrt (0x1.fffffffffffffp+1023 + 0x1p+1023 i) == 1.379778091031440685006200821918878702861e+154 + 3.257214233483129514781233066898042490248e+153 i":
+double: 1
+idouble: 1
+
+# ctan
+Test "Real part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan (-2 - 3 i) == 0.376402564150424829275122113032269084e-2 - 1.00323862735360980144635859782192726 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0.75 + 1.25 i) == 0.160807785916206426725166058173438663 + 0.975363285031235646193581759755216379 i":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x1p1023 + 1 i) == -0.2254627924997545057926782581695274244229 + 0.8786063118883068695462540226219865087189 i":
+double: 1
+idouble: 1
+Test "Imaginary part of: ctan (0x1p127 + 1 i) == 0.2446359391192790896381501310437708987204 + 0.9101334047676183761532873794426475906201 i":
+double: 1
+idouble: 1
+Test "Real part of: ctan (0x3.243f6cp-1 + 0 i) == -2.287733242885645987394874673945769518150e7 + 0.0 i":
+float: 1
+ifloat: 1
+
+# ctan_tonearest
+Test "Real part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctan_tonearest (0x1.921fb6p+0 + 0x1p-149 i) == -2.287733242885645987394874673945769518150e7 + 7.334008549954377778731880988481078535821e-31 i":
+float: 1
+ifloat: 1
+
+# ctanh
+Test "Real part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (-2 - 3 i) == -0.965385879022133124278480269394560686 + 0.988437503832249372031403430350121098e-2 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0 + 0x3.243f6cp-1 i) == 0.0 - 2.287733242885645987394874673945769518150e7 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0 + pi/4 i) == 0.0 + 1.0 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Real part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "Imaginary part of: ctanh (0.75 + 1.25 i) == 1.37260757053378320258048606571226857 + 0.385795952609750664177596760720790220 i":
+float: 2
+ifloat: 2
+Test "Imaginary part of: ctanh (1 + 0x1p1023 i) == 0.8786063118883068695462540226219865087189 - 0.2254627924997545057926782581695274244229 i":
+double: 1
+idouble: 1
+Test "Real part of: ctanh (1 + 0x1p127 i) == 0.9101334047676183761532873794426475906201 + 0.2446359391192790896381501310437708987204 i":
+double: 1
+idouble: 1
+
+# ctanh_tonearest
+Test "Real part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i":
+float: 1
+ifloat: 1
+Test "Imaginary part of: ctanh_tonearest (0x1p-149 + 0x1.921fb6p+0 i) == 7.334008549954377778731880988481078535821e-31 - 2.287733242885645987394874673945769518150e7 i":
+float: 1
+ifloat: 1
+
+# erf
+Test "erf (1.25) == 0.922900128256458230136523481197281140":
+double: 1
+idouble: 1
+
+# erfc
+Test "erfc (0x1.f7303cp+1) == 2.705500297238986897105236321218861842255e-8":
+double: 1
+idouble: 1
+Test "erfc (0x1.ffa002p+2) == 1.233585992097580296336099501489175967033e-29":
+float: 1
+ifloat: 1
+Test "erfc (2.0) == 0.00467773498104726583793074363274707139":
+double: 1
+idouble: 1
+Test "erfc (4.125) == 0.542340079956506600531223408575531062e-8":
+double: 1
+idouble: 1
+
+# exp10
+Test "exp10 (-1) == 0.1":
+double: 1
+idouble: 1
+Test "exp10 (-305) == 1.0e-305":
+double: 1
+idouble: 1
+Test "exp10 (-36) == 1.0e-36":
+double: 1
+idouble: 1
+Test "exp10 (3) == 1000":
+double: 1
+idouble: 1
+Test "exp10 (36) == 1.0e36":
+double: 1
+idouble: 1
+
+# expm1
+Test "expm1 (0.75) == 1.11700001661267466854536981983709561":
+double: 1
+idouble: 1
+Test "expm1 (1) == M_El - 1.0":
+float: 1
+ifloat: 1
+Test "expm1 (500.0) == 1.4035922178528374107397703328409120821806e+217":
+double: 1
+idouble: 1
+
+# fma
+Test "fma (-0x1.fffffffffffffp-711, 0x1.fffffffffffffp-275, 0x1.fffffe00007ffp-983) == 0x1.7ffffe00007ffp-983":
+double: 1
+idouble: 1
+Test "fma (0x1.0000002p+0, 0x1.ffffffcp-1, -0x1p-300) == 0x1.fffffffffffffp-1":
+double: 1
+idouble: 1
+Test "fma (0x1.153d650bb9f06p-907, 0x1.2d01230d48407p-125, -0x0.b278d5acfc3cp-1022) == -0x0.b22757123bbe9p-1022":
+double: 1
+idouble: 1
+Test "fma (0x1.4000004p-967, 0x1p-106, 0x0.000001p-1022) == 0x0.0000010000003p-1022":
+double: 1
+idouble: 1
+Test "fma (0x1.7ff8p+13, 0x1.000002p+0, 0x1.ffffp-24) == 0x1.7ff802p+13":
+float: 1
+ifloat: 1
+Test "fma (0x1.7fffff8p-968, 0x1p-106, 0x0.000001p-1022) == 0x0.0000010000001p-1022":
+double: 1
+idouble: 1
+
+# hypot
+Test "hypot (-0.7, -12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (-0.7, 12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (-12.4, -0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (-12.4, 0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (0.7, -12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (0.7, 12.4) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (12.4, -0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+Test "hypot (12.4, 0.7) == 12.419742348374220601176836866763271":
+float: 1
+ifloat: 1
+
+# j0
+Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "j0 (0.75) == 0.864242275166648623555731103820923211":
+float: 1
+ifloat: 1
+Test "j0 (0x1.d7ce3ap+107) == 2.775523647291230802651040996274861694514e-17":
+float: 2
+ifloat: 2
+Test "j0 (10.0) == -0.245935764451348335197760862485328754":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "j0 (2.0) == 0.223890779141235668051827454649948626":
+float: 2
+ifloat: 2
+Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "j0 (8.0) == 0.171650807137553906090869407851972001":
+float: 1
+ifloat: 1
+
+# j1
+Test "j1 (0x1.3ffp+74) == 1.818984347516051243459364437186082741567e-12":
+double: 1
+idouble: 1
+Test "j1 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
+double: 1
+idouble: 1
+Test "j1 (10.0) == 0.0434727461688614366697487680258592883":
+float: 2
+ifloat: 2
+Test "j1 (2.0) == 0.576724807756873387202448242269137087":
+double: 1
+idouble: 1
+Test "j1 (8.0) == 0.234636346853914624381276651590454612":
+double: 1
+idouble: 1
+
+# jn
+Test "jn (0, -4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (0, 0.75) == 0.864242275166648623555731103820923211":
+float: 1
+ifloat: 1
+Test "jn (0, 10.0) == -0.245935764451348335197760862485328754":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (0, 2.0) == 0.223890779141235668051827454649948626":
+float: 2
+ifloat: 2
+Test "jn (0, 4.0) == -3.9714980986384737228659076845169804197562E-1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (0, 8.0) == 0.171650807137553906090869407851972001":
+float: 1
+ifloat: 1
+Test "jn (1, 10.0) == 0.0434727461688614366697487680258592883":
+float: 2
+ifloat: 2
+Test "jn (1, 2.0) == 0.576724807756873387202448242269137087":
+double: 1
+idouble: 1
+Test "jn (1, 8.0) == 0.234636346853914624381276651590454612":
+double: 1
+idouble: 1
+Test "jn (10, 0.125) == 0.250543369809369890173993791865771547e-18":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (10, 0.75) == 0.149621713117596814698712483621682835e-10":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (10, 10.0) == 0.207486106633358857697278723518753428":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+Test "jn (10, 2.0) == 0.251538628271673670963516093751820639e-6":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "jn (2, 0x1.ffff62p+99) == -4.43860668048170034334926693188979974489e-16":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+Test "jn (2, 2.4048255576957729) == 0.43175480701968038399746111312430703":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "jn (3, 0.125) == 0.406503832554912875023029337653442868e-4":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (3, 0.75) == 0.848438342327410884392755236884386804e-2":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "jn (3, 10.0) == 0.0583793793051868123429354784103409563":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "jn (3, 2.0) == 0.128943249474402051098793332969239835":
+float: 1
+ifloat: 1
+Test "jn (3, 2.4048255576957729) == 0.19899990535769083404042146764530813":
+double: 3
+idouble: 3
+Test "jn (4, 2.4048255576957729) == 0.647466661641779720084932282551219891E-1":
+double: 1
+idouble: 1
+Test "jn (5, 2.4048255576957729) == 0.163892432048058525099230549946147698E-1":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "jn (6, 2.4048255576957729) == 0.34048184720278336646673682895929161E-2":
+double: 4
+float: 3
+idouble: 4
+ifloat: 3
+Test "jn (7, 2.4048255576957729) == 0.60068836573295394221291569249883076E-3":
+double: 3
+float: 5
+idouble: 3
+ifloat: 5
+Test "jn (8, 2.4048255576957729) == 0.92165786705344923232879022467054148E-4":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+Test "jn (9, 2.4048255576957729) == 0.12517270977961513005428966643852564E-4":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+# lgamma
+Test "lgamma (0.7) == 0.260867246531666514385732417016759578":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "lgamma (1.2) == -0.853740900033158497197028392998854470e-1":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+# log10
+Test "log10 (0.75) == -0.124938736608299953132449886193870744":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "log10 (e) == log10(e)":
+float: 1
+ifloat: 1
+
+# log1p
+Test "log1p (-0.25) == -0.287682072451780927439219005993827432":
+float: 1
+ifloat: 1
+
+# pow
+Test "pow (0x0.ffffffp0, -0x1p24) == 2.7182819094701610539628664526874952929416":
+float: 1
+ifloat: 1
+Test "pow (0x0.ffffffp0, 0x1p24) == 0.3678794302077803437135155590023422899744":
+float: 1
+ifloat: 1
+Test "pow (0x1.000002p0, 0x1p24) == 7.3890552180866447284268641248075832310141":
+float: 1
+ifloat: 1
+
+# sin_tonearest
+Test "sin_tonearest (1) == 0.8414709848078965066525023216302989996226":
+float: 1
+ifloat: 1
+
+# sincos
+Test "sincos (0x1p+120, &sin_res, &cos_res) puts -9.25879022854837867303861764107414946730833e-01 in cos_res":
+float: 1
+ifloat: 1
+Test "sincos (0x1p+127, &sin_res, &cos_res) puts 7.81914638714960072263910298466369236613162e-01 in cos_res":
+float: 1
+ifloat: 1
+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
+double: 1
+idouble: 1
+Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
+float: 1
+ifloat: 1
+
+# tgamma
+Test "tgamma (-0.5) == -2 sqrt (pi)":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "tgamma (0.5) == sqrt (pi)":
+float: 1
+ifloat: 1
+Test "tgamma (0.7) == 1.29805533264755778568117117915281162":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# y0
+Test "y0 (0x1.3ffp+74) == 1.818984347516051243459467456433028748678e-12":
+double: 1
+idouble: 1
+Test "y0 (0x1.ff00000000002p+840) == 1.846591691699331493194965158699937660696e-127":
+double: 1
+idouble: 1
+Test "y0 (0x1p-10) == -4.4865150767109739412411806297168793661098":
+double: 1
+idouble: 1
+Test "y0 (0x1p-110) == -4.861363632869203777249475899390797503250e+1":
+double: 1
+idouble: 1
+Test "y0 (0x1p-20) == -8.8992283012125827603076426611387876938160":
+float: 1
+ifloat: 1
+Test "y0 (0x1p-30) == -1.3311940304267782826037118027401817264906e+1":
+float: 1
+ifloat: 1
+Test "y0 (0x1p-40) == -1.7724652307320814696990854700366226762563e+1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y0 (0x1p-50) == -2.2137364310373846564919987139743760738155e+1":
+float: 1
+ifloat: 1
+Test "y0 (0x1p-70) == -3.0962788316479910300778244424468159753887e+1":
+double: 1
+idouble: 1
+Test "y0 (0x1p-80) == -3.5375500319532942168707373066828113573541e+1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y0 (1.0) == 0.0882569642156769579829267660235151628":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "y0 (1.5) == 0.382448923797758843955068554978089862":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "y0 (10.0) == 0.0556711672835993914244598774101900481":
+float: 1
+ifloat: 1
+Test "y0 (8.0) == 0.223521489387566220527323400498620359":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+# y1
+Test "y1 (0.125) == -5.19993611253477499595928744876579921":
+double: 1
+idouble: 1
+Test "y1 (0x1.27e204p+99) == -8.881610148467797208469612080785210013461e-16":
+double: 1
+idouble: 1
+Test "y1 (0x1p-10) == -6.5190099301063115047395187618929589514382e+02":
+double: 1
+idouble: 1
+Test "y1 (1.5) == -0.412308626973911295952829820633445323":
+float: 1
+ifloat: 1
+Test "y1 (10.0) == 0.249015424206953883923283474663222803":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "y1 (2.0) == -0.107032431540937546888370772277476637":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "y1 (8.0) == -0.158060461731247494255555266187483550":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+# yn
+Test "yn (0, 1.0) == 0.0882569642156769579829267660235151628":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (0, 1.5) == 0.382448923797758843955068554978089862":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+Test "yn (0, 10.0) == 0.0556711672835993914244598774101900481":
+float: 1
+ifloat: 1
+Test "yn (0, 8.0) == 0.223521489387566220527323400498620359":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (1, 0.125) == -5.19993611253477499595928744876579921":
+double: 1
+idouble: 1
+Test "yn (1, 1.5) == -0.412308626973911295952829820633445323":
+float: 1
+ifloat: 1
+Test "yn (1, 10.0) == 0.249015424206953883923283474663222803":
+double: 3
+float: 1
+idouble: 3
+ifloat: 1
+Test "yn (1, 2.0) == -0.107032431540937546888370772277476637":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (1, 8.0) == -0.158060461731247494255555266187483550":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+Test "yn (10, 0.125) == -127057845771019398.252538486899753195":
+double: 1
+idouble: 1
+Test "yn (10, 0.75) == -2133501638.90573424452445412893839236":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (10, 1.0) == -121618014.278689189288130426667971145":
+double: 1
+idouble: 1
+Test "yn (10, 10.0) == -0.359814152183402722051986577343560609":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (10, 2.0) == -129184.542208039282635913145923304214":
+double: 2
+idouble: 2
+Test "yn (3, 0.125) == -2612.69757350066712600220955744091741":
+double: 1
+idouble: 1
+Test "yn (3, 0.75) == -12.9877176234475433186319774484809207":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (3, 10.0) == -0.251362657183837329779204747654240998":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+Test "yn (3, 2.0) == -1.12778377684042778608158395773179238":
+double: 1
+idouble: 1
+
+# Maximal error of functions:
+Function: "atan2":
+float: 1
+ifloat: 1
+
+Function: "atanh":
+float: 1
+ifloat: 1
+
+Function: Real part of "cacos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "cacos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "cacosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "cacosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "casin":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "casin":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "casinh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "casinh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "catan":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "catanh":
+double: 4
+idouble: 4
+
+Function: "cbrt":
+double: 1
+idouble: 1
+
+Function: Real part of "ccos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ccos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "ccosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ccosh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "cexp":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: Imaginary part of "cexp":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: Real part of "clog":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "clog":
+float: 1
+ifloat: 1
+
+Function: Real part of "clog10":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Imaginary part of "clog10":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "cos":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: "cos_tonearest":
+float: 1
+ifloat: 1
+
+Function: Real part of "cpow":
+double: 2
+float: 4
+idouble: 2
+ifloat: 4
+
+Function: Imaginary part of "cpow":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: Real part of "csin":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "csinh":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "csinh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "csqrt":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "csqrt":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Real part of "ctan":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ctan":
+double: 1
+idouble: 1
+
+Function: Real part of "ctan_tonearest":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "ctan_tonearest":
+float: 1
+ifloat: 1
+
+Function: Real part of "ctanh":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: Imaginary part of "ctanh":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: Real part of "ctanh_tonearest":
+float: 1
+ifloat: 1
+
+Function: Imaginary part of "ctanh_tonearest":
+float: 1
+ifloat: 1
+
+Function: "erf":
+double: 1
+idouble: 1
+
+Function: "erfc":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "exp10":
+double: 1
+idouble: 1
+
+Function: "expm1":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "fma":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "hypot":
+float: 1
+ifloat: 1
+
+Function: "j0":
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
+
+Function: "j1":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: "jn":
+double: 4
+float: 5
+idouble: 4
+ifloat: 5
+
+Function: "lgamma":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: "log10":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+
+Function: "log1p":
+float: 1
+ifloat: 1
+
+Function: "pow":
+float: 1
+ifloat: 1
+
+Function: "sin_tonearest":
+float: 1
+ifloat: 1
+
+Function: "sincos":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "tan":
+double: 1
+idouble: 1
+
+Function: "tgamma":
+double: 1
+float: 1
+idouble: 1
+ifloat: 1
+
+Function: "y0":
+double: 2
+float: 1
+idouble: 2
+ifloat: 1
+
+Function: "y1":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+
+Function: "yn":
+double: 3
+float: 2
+idouble: 3
+ifloat: 2
+
+# end of automatic generation
diff --git a/ports/sysdeps/microblaze/machine-gmon.h b/ports/sysdeps/microblaze/machine-gmon.h
new file mode 100644
index 0000000..0cfaa19
--- /dev/null
+++ b/ports/sysdeps/microblaze/machine-gmon.h
@@ -0,0 +1,30 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* We need a special version of the `mcount' function because it has
+   to preserve more registers than your usual function.  */
+
+void __mcount_internal (unsigned long frompc, unsigned long selfpc);
+
+#define _MCOUNT_DECL(frompc, selfpc) \
+void __mcount_internal (unsigned long frompc, unsigned long selfpc)
+
+
+/* Define MCOUNT as empty since we have the implementation in another
+   file.  */
+#define MCOUNT
diff --git a/ports/sysdeps/microblaze/math_private.h b/ports/sysdeps/microblaze/math_private.h
new file mode 100644
index 0000000..39b7172
--- /dev/null
+++ b/ports/sysdeps/microblaze/math_private.h
@@ -0,0 +1,33 @@
+#ifndef _MATH_PRIVATE_H
+
+/* Suppress use of exceptions here to avoid build errors if the FE_*
+   macros aren't definied. Only allow rounding modes implemented for
+   MicroBlaze.
+
+   This does mean that some code will silently fail to report exceptions,
+   set rounding mode as expected, etc., but it allows math code to compile
+   that otherwise wouldn't (such as math/s_fma.c) and so is valuable.
+
+   We intentionally ignore the "exception" arguments of functions that
+   take an exception, since we can't even evaluate the argument
+   without causing a build failure.  The extra level of statement
+   expression wrapping avoids "statement with no effect" warnings.
+   Since the callers don't check for errors anyway, we just claim
+   success in every case.
+
+   The overrides for libc_ functions must happen before we include
+   the generic math_private.h, and the overrides for regular
+   <fenv.h> functions must happen afterwards, to avoid clashing with
+   the declarations of those functions.  */
+
+#define libc_fesetround(rnd)                   ({ 0; })
+#define libc_fetestexcept(exc)                 ({ 0; })
+#define libc_feholdexcept_setround(env, exc)   ({ (void) (env); 0; })
+#define libc_feupdateenv_test(env, exc)        ({ (void) (env); 0; })
+
+#include_next <math_private.h>
+
+#define feraiseexcept(excepts)                 ({ 0; })
+#define feclearexcept(exc)                     ({ 0; })
+
+#endif
diff --git a/ports/sysdeps/microblaze/memusage.h b/ports/sysdeps/microblaze/memusage.h
new file mode 100644
index 0000000..a4974b2
--- /dev/null
+++ b/ports/sysdeps/microblaze/memusage.h
@@ -0,0 +1,21 @@
+/* Copyright (C) 2000-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define GETSP() ({ register uintptr_t stack_ptr asm ("r1"); stack_ptr; })
+
+#include <sysdeps/generic/memusage.h>
diff --git a/ports/sysdeps/microblaze/nptl/Makefile b/ports/sysdeps/microblaze/nptl/Makefile
new file mode 100644
index 0000000..3c0521a
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/Makefile
@@ -0,0 +1,21 @@
+# Copyright (C) 2005-2013 Free Software Foundation, Inc.
+#
+# This file is part of the GNU C Library.
+#
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# The GNU C Library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library.  If not, see
+# <http://www.gnu.org/licenses/>.
+
+ifeq ($(subdir),csu)
+gen-as-const-headers += tcb-offsets.sym
+endif
diff --git a/ports/sysdeps/microblaze/nptl/pthread_spin_lock.c b/ports/sysdeps/microblaze/nptl/pthread_spin_lock.c
new file mode 100644
index 0000000..0d12517
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/pthread_spin_lock.c
@@ -0,0 +1,24 @@
+/* Copyright (C) 2008-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define SPIN_LOCK_READS_BETWEEN_CMPXCHG 1000
+
+/* We can't use the normal "#include <nptl/pthread_spin_lock.c>" because
+   it will resolve to this very file.  Using "sysdeps/.." as reference to the
+   top level directory does the job.  */
+#include <sysdeps/../nptl/pthread_spin_lock.c>
diff --git a/ports/sysdeps/microblaze/nptl/pthreaddef.h b/ports/sysdeps/microblaze/nptl/pthreaddef.h
new file mode 100644
index 0000000..29d5828
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/pthreaddef.h
@@ -0,0 +1,40 @@
+/* Copyright (C) 2002-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <stdlib.h>
+#include <string.h>
+
+/* Default stack size.  */
+#define ARCH_STACK_DEFAULT_SIZE  (2 * 1024 * 1024)
+
+/* Required stack pointer alignment at beginning.  */
+#define STACK_ALIGN         16
+
+/* Minimal stack size after allocating thread descriptor and guard size.  */
+#define MINIMAL_REST_STACK  2048
+
+/* Alignment requirement for TCB.  */
+#define TCB_ALIGNMENT       16
+
+/* Location of current stack frame.  */
+#define CURRENT_STACK_FRAME __builtin_frame_address (0)
+
+/* XXX Until we have a better place keep the definitions here.  */
+
+#define __exit_thread_inline(val) \
+  INLINE_SYSCALL (exit, 1, (val))
diff --git a/ports/sysdeps/microblaze/nptl/tcb-offsets.sym b/ports/sysdeps/microblaze/nptl/tcb-offsets.sym
new file mode 100644
index 0000000..18afbee
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/tcb-offsets.sym
@@ -0,0 +1,11 @@
+#include <sysdep.h>
+#include <tls.h>
+
+--
+
+-- Abuse tls.h macros to derive offsets relative to the thread register.
+#define thread_offsetof(mem)	(long)(offsetof (struct pthread, mem) - sizeof (struct pthread))
+
+MULTIPLE_THREADS_OFFSET	thread_offsetof (header.multiple_threads)
+PID_OFFSET			thread_offsetof (pid)
+TID_OFFSET			thread_offsetof (tid)
diff --git a/ports/sysdeps/microblaze/nptl/tls.h b/ports/sysdeps/microblaze/nptl/tls.h
new file mode 100644
index 0000000..9598982
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/tls.h
@@ -0,0 +1,155 @@
+/* Copyright (C) 2005-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _TLS_H
+# define _TLS_H 1
+
+# include <dl-sysdep.h>
+
+#ifndef __ASSEMBLER__
+# include <stdbool.h>
+# include <stddef.h>
+# include <stdint.h>
+
+/* Type for the dtv.  */
+typedef union dtv
+{
+  size_t counter;
+  struct
+  {
+    void *val;
+    bool is_static;
+  } pointer;
+} dtv_t;
+
+#else /* __ASSEMBLER__ */
+# include <tcb-offsets.h>
+#endif /* __ASSEMBLER__ */
+
+#ifndef __ASSEMBLER__
+
+/* Get system call information.  */
+# include <sysdep.h>
+
+/* The TP points to the start of the thread blocks.  */
+# define TLS_DTV_AT_TP  1
+
+/* Get the thread descriptor definition.  */
+# include <nptl/descr.h>
+
+typedef struct
+{
+  dtv_t *dtv;
+  void *private;
+} tcbhead_t;
+
+static inline void *__microblaze_get_thread_area (void)
+{
+  register void * volatile __microblaze_thread_area asm ("r21");
+  return (void *) __microblaze_thread_area;
+}
+
+# define READ_THREAD_POINTER() \
+  ({ __microblaze_get_thread_area(); })
+
+/* This is the size of the initial TCB.  */
+# define TLS_INIT_TCB_SIZE  sizeof (tcbhead_t)
+
+/* Alignment requirements for the initial TCB.  */
+# define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t)
+
+/* This is the size of the TCB.  */
+# define TLS_TCB_SIZE       sizeof (tcbhead_t)
+
+/* This is the size we need before TCB.  */
+# define TLS_PRE_TCB_SIZE   sizeof (struct pthread)
+
+/* Alignment requirements for the TCB.  */
+# define TLS_TCB_ALIGN      __alignof__ (struct pthread)
+
+/* Install the dtv pointer.  The pointer passed is to the element with
+   index -1 which contain the length.  */
+# define INSTALL_DTV(tcbp, dtvp) \
+  (((tcbhead_t *) (tcbp))->dtv = (dtvp) + 1)
+
+/* Install new dtv for current thread.  */
+# define INSTALL_NEW_DTV(dtv) \
+  (THREAD_DTV() = (dtv))
+
+/* Return dtv of given thread descriptor.  */
+# define GET_DTV(tcbp) \
+  (((tcbhead_t *) (tcbp))->dtv)
+
+/* Code to initially initialize the thread pointer.
+   r21 is reserved for thread pointer.  */
+# define TLS_INIT_TP(tcbp, secondcall) \
+  ({ __asm __volatile ("or r21,r0,%0" : : "r" ((void *)tcbp)); 0; })
+
+/* Return the address of the dtv for the current thread.  */
+# define THREAD_DTV() \
+  (((tcbhead_t *) READ_THREAD_POINTER())->dtv)
+
+/* Return the thread descriptor for the current thread.  */
+# define THREAD_SELF \
+  (((struct pthread *) READ_THREAD_POINTER()) - 1)
+
+/* Magic for libthread_db to know how to do THREAD_SELF.  */
+# define DB_THREAD_SELF \
+  CONST_THREAD_AREA (32, sizeof (struct pthread))
+
+/* Read member of the thread descriptor directly.  */
+# define THREAD_GETMEM(descr, member) (descr->member)
+
+/* Same as THREAD_GETMEM, but the member offset can be non-constant.  */
+# define THREAD_GETMEM_NC(descr, member, idx) \
+  (descr->member[idx])
+
+/* Set member of the thread descriptor directly.  */
+# define THREAD_SETMEM(descr, member, value) \
+  (descr->member = (value))
+
+/* Same as THREAD_SETMEM, but the member offset can be non-constant.  */
+# define THREAD_SETMEM_NC(descr, member, idx, value) \
+  (descr->member[idx] = (value))
+
+/* Get and set the global scope generation counter in struct pthread.  */
+# define THREAD_GSCOPE_FLAG_UNUSED 0
+# define THREAD_GSCOPE_FLAG_USED   1
+# define THREAD_GSCOPE_FLAG_WAIT   2
+# define THREAD_GSCOPE_RESET_FLAG()                                         \
+  do                                                                        \
+    { int __res                                                             \
+      = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag,              \
+                             THREAD_GSCOPE_FLAG_UNUSED);                    \
+      if (__res == THREAD_GSCOPE_FLAG_WAIT)                                 \
+        lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE);  \
+    }                                                                       \
+  while (0)
+# define THREAD_GSCOPE_SET_FLAG()                                           \
+  do                                                                        \
+    {                                                                       \
+      THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED;            \
+      atomic_write_barrier ();                                              \
+    }                                                                       \
+  while (0)
+# define THREAD_GSCOPE_WAIT() \
+  GL (dl_wait_lookup_done) ()
+
+#endif /* __ASSEMBLER__ */
+
+#endif /* tls.h.  */
diff --git a/ports/sysdeps/microblaze/preconfigure b/ports/sysdeps/microblaze/preconfigure
new file mode 100644
index 0000000..90e2e63
--- /dev/null
+++ b/ports/sysdeps/microblaze/preconfigure
@@ -0,0 +1,3 @@
+case "$machine" in
+microblaze*)	base_machine=microblaze machine=microblaze ;;
+esac
diff --git a/ports/sysdeps/microblaze/setjmp.S b/ports/sysdeps/microblaze/setjmp.S
new file mode 100644
index 0000000..4a2bd22
--- /dev/null
+++ b/ports/sysdeps/microblaze/setjmp.S
@@ -0,0 +1,75 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+/* This source produces 3 functions:
+   __sigsetjmp (jmpbuf,savemask)
+   setjmp (jmpbuf) - equivalent to __sigsetjump (jmpbuf, 1)
+   _setjmp (jmpbuf) - equivalent to __sigsetjump (jmpbuf, 0)
+*/
+
+#ifndef setjmp_name
+# define setjmp_name __sigsetjmp
+# define SET_MASK_ARG
+#else
+# define SET_MASK_ARG    addik r6,r0,SAVEMASK
+#endif
+
+ENTRY (setjmp_name)
+    swi   r1,r5,0
+    swi   r2,r5,4
+    swi   r13,r5,8
+    swi   r14,r5,12
+    swi   r15,r5,16
+    swi   r16,r5,20
+    swi   r17,r5,24
+    swi   r18,r5,28
+    swi   r19,r5,32
+    swi   r20,r5,36
+    swi   r21,r5,40
+    swi   r22,r5,44
+    swi   r23,r5,48
+    swi   r24,r5,52
+    swi   r25,r5,56
+    swi   r26,r5,60
+    swi   r27,r5,64
+    swi   r28,r5,68
+    swi   r29,r5,72
+    swi   r30,r5,76
+    swi   r31,r5,80
+
+    SET_MASK_ARG
+
+    /* Make a tail call to __sigjmp_save; it takes the same args.  */
+#ifdef	PIC
+    /* We cannot use the PLT, because it requires that r20 be set, but
+       we can't save and restore our caller's value.  Instead, we do an
+       indirect jump through the GOT, using the temporary register
+       %ecx, which is call-clobbered.  */
+    mfs   r12,rpc
+    addik r12,r12,_GLOBAL_OFFSET_TABLE_+8
+    lwi   r12,r12,__sigjmp_save@GOT
+    brad  r12
+#else
+    brid  __sigjmp_save
+#endif
+    nop
+END (setjmp_name)
+
+libc_hidden_def (setjmp_name)
diff --git a/ports/sysdeps/microblaze/shlib-versions b/ports/sysdeps/microblaze/shlib-versions
new file mode 100644
index 0000000..6ec43db
--- /dev/null
+++ b/ports/sysdeps/microblaze/shlib-versions
@@ -0,0 +1 @@
+microblaze.*-.*-linux.*	DEFAULT			GLIBC_2.18
diff --git a/ports/sysdeps/microblaze/sotruss-lib.c b/ports/sysdeps/microblaze/sotruss-lib.c
new file mode 100644
index 0000000..8865488
--- /dev/null
+++ b/ports/sysdeps/microblaze/sotruss-lib.c
@@ -0,0 +1,52 @@
+/* Override generic sotruss-lib.c to define actual functions for MicroBlaze.
+   Copyright (C) 2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define HAVE_ARCH_PLTENTER
+#define HAVE_ARCH_PLTEXIT
+
+#include <elf/sotruss-lib.c>
+
+ElfW(Addr)
+la_microblaze_gnu_pltenter (ElfW(Sym) *sym __attribute__ ((unused)),
+                            unsigned int ndx __attribute__ ((unused)),
+                            uintptr_t *refcook, uintptr_t *defcook,
+                            La_microblaze_regs *regs, unsigned int *flags,
+                            const char *symname, long int *framesizep)
+{
+  print_enter (refcook, defcook, symname,
+               regs->lr_r0, regs->lr_r1, regs->lr_sp,
+               *flags);
+
+  /* No need to copy anything, we will not need the parameters in any case.  */
+  *framesizep = 0;
+
+  return sym->st_value;
+}
+
+unsigned int
+la_microblaze_gnu_pltexit (ElfW(Sym) *sym, unsigned int ndx,
+                           uintptr_t *refcook,
+                           uintptr_t *defcook,
+                           const struct La_microblaze_regs *inregs,
+                           struct La_microblaze_retval *outregs,
+                           const char *symname)
+{
+  print_exit (refcook, defcook, symname, outregs->lrv_r3);
+
+  return 0;
+}
diff --git a/ports/sysdeps/microblaze/stackinfo.h b/ports/sysdeps/microblaze/stackinfo.h
new file mode 100644
index 0000000..542bc6f
--- /dev/null
+++ b/ports/sysdeps/microblaze/stackinfo.h
@@ -0,0 +1,34 @@
+/* Copyright (C) 2001-2012 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+/* This file contains a bit of information about the stack allocation
+   of the processor.  */
+
+#ifndef _STACKINFO_H
+# define _STACKINFO_H	1
+
+# include <elf.h>
+
+/* On MicroBlaze the stack grows down.  */
+# define _STACK_GROWS_DOWN	1
+
+/* Default to an executable stack.  PF_X can be overridden if PT_GNU_STACK is
+ * present, but it is presumed absent.  */
+# define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X)
+
+#endif	/* stackinfo.h.  */
diff --git a/ports/sysdeps/microblaze/start.S b/ports/sysdeps/microblaze/start.S
new file mode 100644
index 0000000..fbbf3bf
--- /dev/null
+++ b/ports/sysdeps/microblaze/start.S
@@ -0,0 +1,84 @@
+/* Copyright (C) 1995-2012 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   In addition to the permissions in the GNU Lesser General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file with other
+   programs, and to distribute those programs without any restriction
+   coming from the use of this file. (The GNU Lesser General Public
+   License restrictions do apply in other respects; for example, they
+   cover modification of the file, and distribution when not linked
+   into another program.)
+
+   Note that people who make modified versions of this file are not
+   obligated to grant this special exception for their modified
+   versions; it is their choice whether to do so. The GNU Lesser
+   General Public License gives permission to release a modified
+   version without this exception; this exception also makes it
+   possible to release a modified version which carries forward this
+   exception.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+    .text
+    .globl _start
+    .type _start,@function
+_start:
+    /* On entry the stack contains the following args:
+         r1+0 - argc
+         r1+4 - argv[0]
+         ...
+         r1+4*(argc-1) - argv[argc-1]
+         r1+4*argc - NULL
+         r1+4*argc + 4 - envp[0]
+         ...
+         NULL
+    */
+    addk    r3,r0,r0
+    addk    r5,r1,r0
+1:
+    addik   r5,r5,4
+    lw      r4,r5,r0
+    bneid   r4,1b
+    addik   r3,r3,1
+    addik   r6,r3,-1
+    sw      r6,r1,r0
+    addik   r7,r1,4
+    addik   r1,r1,-24
+#ifdef SHARED
+    /* Setup PIC.  */
+    mfs     r20,rpc
+    addik   r20,r20,_GLOBAL_OFFSET_TABLE_+8
+    lwi     r5,r20,main@GOT
+    lwi     r8,r20,__libc_csu_init@GOT
+    lwi     r9,r20,__libc_csu_fini@GOT
+    brid    __libc_start_main@PLT
+    addk    r10,r0,r0
+#else
+    addik   r5,r0,main
+    addik   r8,r0,__libc_csu_init
+    addik   r9,r0,__libc_csu_fini
+    brid    __libc_start_main
+    addk    r10,r0,r0
+#endif
+
+/* Define a symbol for the first piece of initialized data.  */
+    .data
+    .globl __data_start
+__data_start:
+    .long 0
+    .weak data_start
+    data_start = __data_start
diff --git a/ports/sysdeps/microblaze/sysdep.h b/ports/sysdeps/microblaze/sysdep.h
new file mode 100644
index 0000000..4fe4607
--- /dev/null
+++ b/ports/sysdeps/microblaze/sysdep.h
@@ -0,0 +1,85 @@
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdeps/generic/sysdep.h>
+
+#ifdef  __ASSEMBLER__
+
+/* Syntactic details of assembler.  */
+
+# define ALIGNARG(log2) log2
+# define ASM_SIZE_DIRECTIVE(name) .size name,.-name
+
+/* Define an entry point visible from C.  */
+# define ENTRY(name)                          \
+  .globl C_SYMBOL_NAME(name);                 \
+  .type C_SYMBOL_NAME(name),@function;        \
+  .align ALIGNARG(2);                         \
+  C_LABEL(name)                               \
+  CALL_MCOUNT
+
+# undef END
+# define END(name) ASM_SIZE_DIRECTIVE(name)
+
+
+/* If compiled for profiling, call `_mcount' at the start of each function.  */
+# ifdef  PROF
+/* The mcount code relies on a normal frame pointer being on the stack
+   to locate our caller, so push one just for its benefit.  */
+#  define CALL_MCOUNT                         \
+   addik r1,r1,-4;                            \
+   swi r15,r1,0;                              \
+   brlid r15,JUMPTARGET(mcount);              \
+   nop;                                       \
+   lwi r15,r1,0;                              \
+   addik r1,r1,4;
+# else
+#  define CALL_MCOUNT        /* Do nothing.  */
+# endif
+
+/* Since C identifiers are not normally prefixed with an underscore
+   on this system, the asm identifier `syscall_error' intrudes on the
+   C name space.  Make sure we use an innocuous name.  */
+# define syscall_error   __syscall_error
+# define mcount      _mcount
+
+# define PSEUDO(name, syscall_name, args)     \
+  .globl syscall_error;                       \
+  ENTRY (name)                                \
+    DO_CALL (syscall_name, args);
+
+# define ret                                  \
+  rtsd r15,8; nop;
+
+# undef PSEUDO_END
+# define PSEUDO_END(name)                     \
+  END (name)
+
+# undef JUMPTARGET
+# ifdef PIC
+#  define JUMPTARGET(name)   name##@PLTPC
+# else
+#  define JUMPTARGET(name)   name
+# endif
+
+/* Local label name for asm code.  */
+# ifndef L
+#  define L(name) $L##name
+# endif
+
+# endif  /* __ASSEMBLER__  */
diff --git a/ports/sysdeps/microblaze/tls-macros.h b/ports/sysdeps/microblaze/tls-macros.h
new file mode 100644
index 0000000..df58430
--- /dev/null
+++ b/ports/sysdeps/microblaze/tls-macros.h
@@ -0,0 +1,46 @@
+/* Copyright (C) 2009-2012 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define TLS_LD(x)                                  \
+  ({                                               \
+    char *__result;                                \
+    int __offset;                                  \
+    extern void *__tls_get_addr (void *);          \
+    asm ("mfs r20,rpc \n"                          \
+         "addik r20,r20,_GLOBAL_OFFSET_TABLE_+8\n" \
+         "addik %0,r20," #x "@TLSLDM"              \
+         : "=r" (__result));                       \
+    __result = (char *) __tls_get_addr (__result); \
+    asm ("addik %0,r0,"#x"@TLSDTPREL"              \
+         : "=r" (__offset));                       \
+    (int *) (__result + __offset); })
+
+
+#define TLS_GD(x)                                  \
+  ({                                               \
+    int *__result;                                 \
+    extern void *__tls_get_addr (void *);          \
+    asm ("mfs  r20,rpc\n"                          \
+         "addik r20,r20,_GLOBAL_OFFSET_TABLE_+8\n" \
+         "addik %0,r20," #x "@TLSGD"               \
+         : "=r" (__result));                       \
+    (int *) __tls_get_addr (__result); })
+
+#define TLS_LE(x) TLS_LD(x)
+
+#define TLS_IE(x) TLS_GD(x)
diff --git a/ports/sysdeps/microblaze/tst-audit.h b/ports/sysdeps/microblaze/tst-audit.h
new file mode 100644
index 0000000..90c1b25
--- /dev/null
+++ b/ports/sysdeps/microblaze/tst-audit.h
@@ -0,0 +1,25 @@
+/* Definitions for testing PLT entry/exit auditing.  MicroBlaze version.
+
+   Copyright (C) 2012 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define pltenter   la_microblaze_gnu_pltenter
+#define pltexit    la_microblaze_gnu_pltexit
+#define La_regs    La_microblaze_regs
+#define La_retval  La_microblaze_retval
+#define int_retval lrv_r3
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/Makefile b/ports/sysdeps/unix/sysv/linux/microblaze/Makefile
new file mode 100644
index 0000000..6145532
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/Makefile
@@ -0,0 +1,3 @@
+ifeq ($(subdir),resource)
+sysdep_routines += backtrace_linux
+endif
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/Versions b/ports/sysdeps/unix/sysv/linux/microblaze/Versions
new file mode 100644
index 0000000..aa48a3c
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/Versions
@@ -0,0 +1,5 @@
+libc {
+  GLIBC_2.18 {
+    fallocate64;
+  }
+}
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S b/ports/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S
new file mode 100644
index 0000000..ff3fda4
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S
@@ -0,0 +1,29 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+
+	.text
+ENTRY (__revisit_longjmp_chk)
+	rtsd	r15,0
+	nop
+PSEUDO_END (__revisit_longjmp_chk)
+ENTRY (____longjmp_chk)
+	rtsd	r15,0
+	nop
+PSEUDO_END (____longjmp_chk)
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h
new file mode 100644
index 0000000..1a7bd42
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h
@@ -0,0 +1,86 @@
+/* O_*, F_*, FD_* bit values for Linux.
+   Copyright (C) 1995-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef	_FCNTL_H
+# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+#endif
+
+#define O_CREAT	 00000100	/* not fcntl.  */
+#define O_TRUNC	 00001000	/* not fcntl.  */
+#define O_EXCL		 00000200	/* not fcntl.  */
+#define O_NOCTTY	 00000400	/* not fcntl.  */
+
+#define O_NONBLOCK	 00004000
+#define O_APPEND	 00002000
+#define O_SYNC		 04000000
+
+#define __O_DIRECTORY	 00200000	/* Must be a directory.  */
+#define __O_NOFOLLOW	 00400000	/* Do not follow links.  */
+#define __O_CLOEXEC	 02000000 	/* Set close_on_exec.  */
+
+#define __O_DIRECT	 00040000 	/* Direct disk access.  */
+#define __O_NOATIME	 01000000 	/* Do not set atime.  */
+#define __O_PATH	 010000000 	/* Resolve pathname but do not open file.  */
+
+/* Not necessary, files are always with 64bit off_t.  */
+#define __O_LARGEFILE	00100000
+
+#define __O_DSYNC	00010000	/* Synchronize data.  */
+
+#define F_GETLK	5	/* Get record locking info.  */
+#define F_SETLK	6	/* Set record locking info (non-blocking).  */
+#define F_SETLKW	7	/* Set record locking info (blocking).  */
+#define F_GETLK64	12	/* Get record locking info.  */
+#define F_SETLK64	13	/* Set record locking info (non-blocking).  */
+#define F_SETLKW64	14 	/* Set record locking info (blocking).  */
+
+#define __F_SETOWN	8	/* Get owner of socket (receiver of SIGIO).  */
+#define __F_GETOWN	9	/* Set owner of socket (receiver of SIGIO).  */
+
+/* For posix fcntl() and `l_type' field of a `struct flock' for lockf().  */
+#define F_RDLCK	0	/* Read lock.  */
+#define F_WRLCK	1	/* Write lock.  */
+#define F_UNLCK	2	/* Remove lock.  */
+
+/* for old implementation of bsd flock ().  */
+#define F_EXLCK	4	/* or 3.  */
+#define F_SHLCK	8	/* or 4.  */
+
+/* We don't need to support __USE_FILE_OFFSET64.  */
+struct flock
+  {
+    short int l_type;		/* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;	/* Where `l_start' is relative to (like `lseek').  */
+    __off_t l_start;		/* Offset where the lock begins.  */
+    __off_t l_len;		/* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;		/* Process holding the lock.  */
+  };
+
+#ifdef __USE_LARGEFILE64
+struct flock64
+  {
+    short int l_type;		/* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK.  */
+    short int l_whence;	/* Where `l_start' is relative to (like `lseek').  */
+    __off64_t l_start;		/* Offset where the lock begins.  */
+    __off64_t l_len;		/* Size of the locked area; zero means until EOF.  */
+    __pid_t l_pid;		/* Process holding the lock.  */
+  };
+#endif
+
+/* Include generic Linux declarations.  */
+#include <bits/fcntl-linux.h>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/bits/mman.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/mman.h
new file mode 100644
index 0000000..5dd5302
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/mman.h
@@ -0,0 +1,42 @@
+/* Definitions for POSIX memory map interface.  Linux/MicroBlaze version.
+
+   Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _SYS_MMAN_H
+# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead."
+#endif
+
+/* The following definitions basically come from the kernel headers.
+   But the kernel header is not namespace clean.  */
+
+#ifdef __USE_MISC
+/* These are Linux-specific.  */
+# define MAP_GROWSDOWN      0x00100     /* Stack-like segment.  */
+# define MAP_DENYWRITE      0x00800     /* ETXTBSY.  */
+# define MAP_EXECUTABLE     0x01000     /* Mark it as an executable.  */
+# define MAP_LOCKED         0x02000     /* Lock the mapping.  */
+# define MAP_NORESERVE      0x04000     /* Don't check for reservations.  */
+# define MAP_POPULATE       0x08000     /* Populate (prefault) pagetables.  */
+# define MAP_NONBLOCK       0x10000     /* Do not block on IO.  */
+# define MAP_STACK          0x20000     /* Allocation is for a stack.  */
+# define MAP_HUGETLB        0x40000     /* Create huge page mapping.  */
+#endif
+
+/* Include generic Linux declarations.  */
+#include <bits/mman-linux.h>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/bits/stat.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/stat.h
new file mode 100644
index 0000000..0fa0edb
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/stat.h
@@ -0,0 +1,203 @@
+/* Copyright (C) 1997-2013 Free Software Foundation, Inc.
+
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#if !defined _SYS_STAT_H && !defined _FCNTL_H
+# error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
+#endif
+
+#ifndef _BITS_STAT_H
+#define _BITS_STAT_H	1
+
+/* Versions of the `struct stat' data structure.  */
+#define _STAT_VER_LINUX_OLD    1
+#define _STAT_VER_KERNEL       1
+#define _STAT_VER_SVR4         2
+#define _STAT_VER_LINUX        3
+#define _STAT_VER              _STAT_VER_LINUX  /* The one defined below.  */
+
+/* Versions of the `xmknod' interface.  */
+#define _MKNOD_VER_LINUX       1
+#define _MKNOD_VER_SVR4        2
+#define _MKNOD_VER             _MKNOD_VER_LINUX  /* The bits defined below.  */
+
+#ifndef __USE_FILE_OFFSET64
+struct stat
+{
+        __dev_t         st_dev;     /* Device.  */
+        __ino_t         st_ino;     /* File serial number.  */
+        __mode_t        st_mode;    /* File mode.  */
+        __nlink_t       st_nlink;   /* Link count.  */
+        __uid_t         st_uid;     /* User ID of the file's owner.  */
+        __gid_t         st_gid;     /* Group ID of the file's group.  */
+        __dev_t         st_rdev;    /* Device number, if device.  */
+        unsigned long   __pad2;
+        __off_t         st_size;    /* Size of file, in bytes.  */
+        __blksize_t     st_blksize; /* Optimal block size for I/O.  */
+        int             __pad3;
+        __blkcnt_t      st_blocks;  /* Number 512-byte blocks allocated.  */
+#ifdef __USE_MISC
+        /* Nanosecond resolution timestamps are stored in a format
+         * equivalent to 'struct timespec'. This is the type used
+         * whenever possible but the Unix namespace rules do not allow the
+         * identifier 'timespec' to appear in the <sys/stat.h> header.
+         * Therefore we have to handle the use of this header in strictly
+         * standard-compliant sources special.  */
+        struct timespec         st_atim; /* Time of last access.  */
+        struct timespec         st_mtim; /* Time of last modification.  */
+        struct timespec         st_ctim; /* Time of last status change.  */
+# define st_atime st_atim.tv_sec         /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+        __time_t                st_atime;     /* Time of last access.  */
+        unsigned long int       st_atimensec; /* Nscecs of last access.  */
+        __time_t                st_mtime;     /* Time of last modification.  */
+        unsigned long int       st_mtimensec; /* Nsecs of last modification.  */
+        __time_t                st_ctime;     /* Time of last status change.  */
+        unsigned long int       st_ctimensec; /* Nsecs of last status change.  */
+#endif
+        unsigned int            __unused4;
+        unsigned int            __unused5;
+};
+#else /* __USE_FILE_OFFSET64 */
+/* MS: If __USE_FILE_OFFSET64 is setup then struct stat should match stat64
+ * structure. Glibc has no type __dev64_t that's why I had to use standard
+ * type for st_dev and st_rdev. Several architectures uses pads after st_dev
+ * but this approach covers BIG and LITTLE endian. I think it is better to
+ * create one ifdef to separate stats structures.  */
+struct stat
+{
+        unsigned long long      st_dev;     /* Device.  */
+        __ino64_t               st_ino;     /* 32bit file serial number.  */
+        __mode_t                st_mode;    /* File mode.  */
+        __nlink_t               st_nlink;   /* Link count.  */
+        __uid_t                 st_uid;     /* User ID of the file's owner.  */
+        __gid_t                 st_gid;     /* Group ID of the file's group.  */
+        unsigned long long      st_rdev;    /* Device number, if device.  */
+        unsigned long long      __pad2;
+        __off64_t               st_size;    /* Size of file, in bytes.  */
+        __blksize_t             st_blksize; /* Optimal block size for I/O.  */
+        int                     __pad3;
+        __blkcnt64_t            st_blocks;  /* Number 512-byte blocks allocated.  */
+#ifdef __USE_MISC
+        /* Nanosecond resolution timestamps are stored in a format
+         * equivalent to 'struct timespec'. This is the type used
+         * whenever possible but the Unix namespace rules do not allow the
+         * identifier 'timespec' to appear in the <sys/stat.h> header.
+         * Therefore we have to handle the use of this header in strictly
+         * standard-compliant sources special.  */
+        struct timespec         st_atim;      /* Time of last access.  */
+        struct timespec         st_mtim;      /* Time of last modification.  */
+        struct timespec         st_ctim;      /* Time of last status change.  */
+# define st_atime st_atim.tv_sec              /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+        __time_t                st_atime;     /* Time of last access.  */
+        unsigned long int       st_atimensec; /* Nscecs of last access.  */
+        __time_t                st_mtime;     /* Time of last modification.  */
+        unsigned long int       st_mtimensec; /* Nsecs of last modification.  */
+        __time_t                st_ctime;     /* Time of last status change.  */
+        unsigned long int       st_ctimensec; /* Nsecs of last status change.  */
+#endif
+        unsigned int            __unused4;
+        unsigned int            __unused5;
+};
+#endif /* __USE_FILE_OFFSET64 */
+
+#ifdef __USE_LARGEFILE64
+struct stat64
+{
+        unsigned long long      st_dev;     /* Device.  */
+        __ino64_t               st_ino;     /* 32bit file serial number.  */
+        __mode_t                st_mode;    /* File mode.  */
+        __nlink_t               st_nlink;   /* Link count.  */
+        __uid_t                 st_uid;     /* User ID of the file's owner.  */
+        __gid_t                 st_gid;     /* Group ID of the file's group.  */
+        unsigned long long      st_rdev;    /* Device number, if device.  */
+        unsigned long long      __pad2;
+        __off64_t               st_size;    /* Size of file, in bytes.  */
+        __blksize_t             st_blksize; /* Optimal block size for I/O.  */
+        int                     __pad3;
+        __blkcnt64_t            st_blocks;  /* Number 512-byte blocks allocated.  */
+#ifdef __USE_MISC
+        /* Nanosecond resolution timestamps are stored in a format
+         * equivalent to 'struct timespec'. This is the type used
+         * whenever possible but the Unix namespace rules do not allow the
+         * identifier 'timespec' to appear in the <sys/stat.h> header.
+         * Therefore we have to handle the use of this header in strictly
+         * standard-compliant sources special.  */
+        struct timespec         st_atim;    /* Time of last access.  */
+        struct timespec         st_mtim;    /* Time of last modification.  */
+        struct timespec         st_ctim;    /* Time of last status change.  */
+# define st_atime st_atim.tv_sec            /* Backward compatibility.  */
+# define st_mtime st_mtim.tv_sec
+# define st_ctime st_ctim.tv_sec
+#else
+        __time_t                st_atime;     /* Time of last access.  */
+        unsigned long int       st_atimensec; /* Nscecs of last access.  */
+        __time_t                st_mtime;     /* Time of last modification.  */
+        unsigned long int       st_mtimensec; /* Nsecs of last modification.  */
+        __time_t                st_ctime;     /* Time of last status change.  */
+        unsigned long int       st_ctimensec; /* Nsecs of last status change.  */
+#endif
+        unsigned int            __unused4;
+        unsigned int            __unused5;
+};
+#endif
+
+/* Tell code we have these members.  */
+#define _STATBUF_ST_BLKSIZE
+#define _STATBUF_ST_RDEV
+/* Nanosecond resolution time values are supported.  */
+#define _STATBUF_ST_NSEC
+
+/* Encoding of the file mode.  */
+
+#define __S_IFMT        0170000 /* These bits determine file type.  */
+
+/* File types.  */
+#define __S_IFDIR       0040000 /* Directory.  */
+#define __S_IFCHR       0020000 /* Character device.  */
+#define __S_IFBLK       0060000 /* Block device.  */
+#define __S_IFREG       0100000 /* Regular file.  */
+#define __S_IFIFO       0010000 /* FIFO.  */
+#define __S_IFLNK       0120000 /* Symbolic link.  */
+#define __S_IFSOCK      0140000 /* Socket.  */
+
+/* POSIX.1b objects.  Note that these macros always evaluate to zero.  But
+   they do it by enforcing the correct use of the macros.  */
+#define __S_TYPEISMQ(buf)  ((buf)->st_mode - (buf)->st_mode)
+#define __S_TYPEISSEM(buf) ((buf)->st_mode - (buf)->st_mode)
+#define __S_TYPEISSHM(buf) ((buf)->st_mode - (buf)->st_mode)
+
+/* Protection bits.  */
+
+#define __S_ISUID       04000   /* Set user ID on execution.  */
+#define __S_ISGID       02000   /* Set group ID on execution.  */
+#define __S_ISVTX       01000   /* Save swapped text after use (sticky).  */
+#define __S_IREAD       0400    /* Read by owner.  */
+#define __S_IWRITE      0200    /* Write by owner.  */
+#define __S_IEXEC       0100    /* Execute by owner.  */
+
+#ifdef __USE_ATFILE
+# define UTIME_NOW	((1l << 30) - 1l)
+# define UTIME_OMIT	((1l << 30) - 2l)
+#endif
+
+#endif	/* bits/stat.h.  */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/brk.c b/ports/sysdeps/unix/sysv/linux/microblaze/brk.c
new file mode 100644
index 0000000..9f19fb2
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/brk.c
@@ -0,0 +1,44 @@
+/* Copyright (C) 2011-2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library.  If not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <errno.h>
+#include <unistd.h>
+#include <sysdep.h>
+
+/* This must be initialized data because commons can't have aliases.  */
+void *