public inbox for libc-ports@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 1/3 ports] Add MicroBlaze Port
@ 2012-11-29  5:27 David Holsgrove
  2012-11-29  5:43 ` Mike Frysinger
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: David Holsgrove @ 2012-11-29  5:27 UTC (permalink / raw)
  To: libc-ports
  Cc: John Williams, Edgar E. Iglesias, Vinod Kathail, Tom Shui,
	Vidhumouli Hunsigida, Nagaraju Mekala

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

This series of patches adds glibc support for MicroBlaze architecture.

The first patch adds the microblaze glibc/ports component.

The second patch will be forwarded to libc-alpha, as it adds
microblaze relocations to elf/elf.h

The final patch is the latest version of config.sub from the upstream
repo (config.guess hasnt moved) and adds support for microblaze-xilinx
targets.

Thanks,
David

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

From b96102989b6a4d0bec15c366bf2f3387a4e4a1cd 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] MicroBlaze Port

Signed-off-by: David Holsgrove <david.holsgrove@petalogix.com>
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
---
 ports/ChangeLog.microblaze                         |  137 ++
 ports/sysdeps/microblaze/Implies                   |    4 +
 ports/sysdeps/microblaze/Makefile                  |   31 +
 ports/sysdeps/microblaze/Versions                  |    6 +
 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              |   44 +
 ports/sysdeps/microblaze/backtrace.c               |  117 ++
 ports/sysdeps/microblaze/backtrace_linux.c         |   48 +
 ports/sysdeps/microblaze/bits/atomic.h             |  276 +++
 ports/sysdeps/microblaze/bits/endian.h             |   30 +
 ports/sysdeps/microblaze/bits/fenv.h               |   77 +
 ports/sysdeps/microblaze/bits/link.h               |   55 +
 ports/sysdeps/microblaze/bits/setjmp.h             |   37 +
 ports/sysdeps/microblaze/bits/wordsize.h           |    3 +
 ports/sysdeps/microblaze/bsd-_setjmp.S             |   22 +
 ports/sysdeps/microblaze/bsd-setjmp.S              |   22 +
 ports/sysdeps/microblaze/configure                 |  122 ++
 ports/sysdeps/microblaze/configure.in              |   32 +
 ports/sysdeps/microblaze/crti.S                    |   90 +
 ports/sysdeps/microblaze/crtn.S                    |   55 +
 ports/sysdeps/microblaze/dl-machine.h              |  303 +++
 ports/sysdeps/microblaze/dl-tls.h                  |   29 +
 ports/sysdeps/microblaze/dl-trampoline.S           |  109 +
 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/machine-gmon.h            |   30 +
 ports/sysdeps/microblaze/memusage.h                |   21 +
 ports/sysdeps/microblaze/nptl/Makefile             |   21 +
 ports/sysdeps/microblaze/nptl/pthread_spin_lock.c  |   30 +
 .../sysdeps/microblaze/nptl/pthread_spin_trylock.c |   27 +
 ports/sysdeps/microblaze/nptl/pthreaddef.h         |   39 +
 ports/sysdeps/microblaze/nptl/tcb-offsets.sym      |   11 +
 ports/sysdeps/microblaze/nptl/tls.h                |  162 ++
 ports/sysdeps/microblaze/preconfigure              |    3 +
 ports/sysdeps/microblaze/setjmp.S                  |   75 +
 ports/sysdeps/microblaze/stackinfo.h               |   34 +
 ports/sysdeps/microblaze/start.S                   |   67 +
 ports/sysdeps/microblaze/sysdep.h                  |  113 +
 ports/sysdeps/microblaze/tls-macros.h              |   44 +
 ports/sysdeps/unix/sysv/linux/microblaze/Makefile  |   12 +
 ports/sysdeps/unix/sysv/linux/microblaze/Versions  |   42 +
 .../unix/sysv/linux/microblaze/____longjmp_chk.S   |   29 +
 .../unix/sysv/linux/microblaze/alphasort64.c       |    1 +
 .../unix/sysv/linux/microblaze/bits/fcntl.h        |   57 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/ipc.h  |   55 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/mman.h |  114 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/msq.h  |   77 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/sem.h  |   87 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/shm.h  |  102 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/stat.h |  203 ++
 ports/sysdeps/unix/sysv/linux/microblaze/brk.c     |   47 +
 ports/sysdeps/unix/sysv/linux/microblaze/clone.S   |   70 +
 ports/sysdeps/unix/sysv/linux/microblaze/configure |    4 +
 .../unix/sysv/linux/microblaze/configure.in        |    5 +
 .../unix/sysv/linux/microblaze/dl-librecon.h       |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/fchown.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/fchownat.c  |    1 +
 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/getdents64.c        |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/getegid.c |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/geteuid.c |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/getgid.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/getgroups.c |    2 +
 ports/sysdeps/unix/sysv/linux/microblaze/getmsg.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/getresgid.c |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/getresuid.c |    1 +
 .../unix/sysv/linux/microblaze/getrlimit64.c       |    1 +
 .../unix/sysv/linux/microblaze/getsysstats.c       |   35 +
 ports/sysdeps/unix/sysv/linux/microblaze/getuid.c  |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/glob64.c  |    1 +
 .../unix/sysv/linux/microblaze/kernel_stat.h       |   32 +
 ports/sysdeps/unix/sysv/linux/microblaze/lchown.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/ldconfig.h  |   19 +
 ports/sysdeps/unix/sysv/linux/microblaze/lockf64.c |    1 +
 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  |  130 ++
 .../sysv/linux/microblaze/nptl/bits/pthreadtypes.h |  185 ++
 .../sysv/linux/microblaze/nptl/bits/semaphore.h    |   35 +
 .../unix/sysv/linux/microblaze/nptl/createthread.c |   23 +
 .../sysdeps/unix/sysv/linux/microblaze/nptl/fork.c |   29 +
 .../unix/sysv/linux/microblaze/nptl/ld.abilist     |   18 +
 .../linux/microblaze/nptl/libBrokenLocale.abilist  |    3 +
 .../unix/sysv/linux/microblaze/nptl/libanl.abilist |    6 +
 .../unix/sysv/linux/microblaze/nptl/libc.abilist   | 2174 ++++++++++++++++++++
 .../sysv/linux/microblaze/nptl/libcrypt.abilist    |    9 +
 .../unix/sysv/linux/microblaze/nptl/libdl.abilist  |   18 +
 .../unix/sysv/linux/microblaze/nptl/libm.abilist   |  383 ++++
 .../unix/sysv/linux/microblaze/nptl/libnsl.abilist |  127 ++
 .../sysv/linux/microblaze/nptl/libpthread.abilist  |  267 +++
 .../sysv/linux/microblaze/nptl/libresolv.abilist   |  104 +
 .../unix/sysv/linux/microblaze/nptl/librt.abilist  |   52 +
 .../linux/microblaze/nptl/libthread_db.abilist     |   48 +
 .../sysv/linux/microblaze/nptl/libutil.abilist     |    8 +
 .../unix/sysv/linux/microblaze/nptl/localplt.data  |   13 +
 .../unix/sysv/linux/microblaze/nptl/lowlevellock.c |  132 ++
 .../unix/sysv/linux/microblaze/nptl/lowlevellock.h |  292 +++
 .../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/oldgetrlimit64.c    |    1 +
 .../unix/sysv/linux/microblaze/profil-counter.h    |   20 +
 ports/sysdeps/unix/sysv/linux/microblaze/putmsg.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/readdir64.c |    1 +
 .../unix/sysv/linux/microblaze/readdir64_r.c       |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/scandir64.c |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/semctl.c  |  189 ++
 ports/sysdeps/unix/sysv/linux/microblaze/setegid.c |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/seteuid.c |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setfsgid.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setfsuid.c  |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/setgid.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setgroups.c |    2 +
 .../sysdeps/unix/sysv/linux/microblaze/setregid.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setresgid.c |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setresuid.c |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setreuid.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setrlimit.c |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/setuid.c  |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c  |  154 ++
 .../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       |    8 +
 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.S  |   39 +
 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h  |  390 ++++
 .../unix/sysv/linux/microblaze/versionsort64.c     |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/xstat.c   |    1 +
 136 files changed, 9097 insertions(+)
 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/Versions
 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 100644 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/bits/wordsize.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/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/machine-gmon.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/pthread_spin_trylock.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/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/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/alphasort64.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/ipc.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/mman.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/msq.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/sem.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/shm.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/dl-librecon.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/fchown.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/fchownat.c
 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/getdents64.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getegid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/geteuid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getgid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getgroups.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getmsg.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getresgid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getresuid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getrlimit64.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getsysstats.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getuid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/glob64.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/kernel_stat.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/lchown.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/ldconfig.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/lockf64.c
 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/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/oldgetrlimit64.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/profil-counter.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/putmsg.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/readdir64.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/readdir64_r.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/scandir64.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/semctl.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setegid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/seteuid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setfsgid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setfsuid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setgid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setgroups.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setregid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setresgid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setresuid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setreuid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setrlimit.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setuid.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 100644 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/versionsort64.c
 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..468ce25
--- /dev/null
+++ b/ports/ChangeLog.microblaze
@@ -0,0 +1,137 @@
+2012-11-29  David Holsgrove  <david.holsgrove@xilinx.com>
+
+	* sysdeps/microblaze/Implies: New file
+	* sysdeps/microblaze/Makefile: New file
+	* sysdeps/microblaze/Versions: 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/bits/wordsize.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/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/machine-gmon.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/pthread_spin_trylock.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/stackinfo.h: New file
+	* sysdeps/microblaze/start.S: New file
+	* sysdeps/microblaze/sysdep.h: New file
+	* sysdeps/microblaze/tls-macros.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/alphasort64.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/bits/ipc.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/bits/mman.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/bits/msq.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/bits/sem.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/bits/shm.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/dl-librecon.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/fchown.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/fchownat.c: 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/getdents64.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getegid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/geteuid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getgid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getgroups.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getmsg.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getresgid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getresuid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getrlimit64.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getsysstats.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getuid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/glob64.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/kernel_stat.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/lchown.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/ldconfig.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/lockf64.c: 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/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/oldgetrlimit64.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/profil-counter.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/putmsg.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/readdir64.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/readdir64_r.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/scandir64.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/semctl.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setegid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/seteuid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setfsgid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setfsuid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setgid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setgroups.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setregid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setresgid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setresuid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setreuid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setrlimit.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setuid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/shmctl.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/versionsort64.c: 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..5635633
--- /dev/null
+++ b/ports/sysdeps/microblaze/Makefile
@@ -0,0 +1,31 @@
+pic-ccflag = -fPIC
+
+# Make sure setjmp.c is compiled with a frame pointer
+CFLAGS-setjmp.c := -fno-omit-frame-pointer
+
+ifeq ($(subdir),elf)
+CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused
+endif
+
+ifeq ($(subdir),gmon)
+sysdep_routines += _mcount
+endif
+
+ifeq ($(subdir),resource)
+sysdep_routines += oldgetrlimit64 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/Versions b/ports/sysdeps/microblaze/Versions
new file mode 100644
index 0000000..2b020f8
--- /dev/null
+++ b/ports/sysdeps/microblaze/Versions
@@ -0,0 +1,6 @@
+libc {
+  GLIBC_2.0 {
+    # Functions from libgcc.
+    __divdi3; __moddi3; __udivdi3; __umoddi3;
+  }
+}
diff --git a/ports/sysdeps/microblaze/__longjmp.S b/ports/sysdeps/microblaze/__longjmp.S
new file mode 100644
index 0000000..3a6b76f
--- /dev/null
+++ b/ports/sysdeps/microblaze/__longjmp.S
@@ -0,0 +1,55 @@
+/* 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 <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..d55a593
--- /dev/null
+++ b/ports/sysdeps/microblaze/_mcount.S
@@ -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/>.  */
+
+	.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..528ec90
--- /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") /* Hope, this works */
diff --git a/ports/sysdeps/microblaze/asm-syntax.h b/ports/sysdeps/microblaze/asm-syntax.h
new file mode 100644
index 0000000..fc16f35
--- /dev/null
+++ b/ports/sysdeps/microblaze/asm-syntax.h
@@ -0,0 +1,44 @@
+/* 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/>.  */
+
+#ifdef HAVE_ELF
+
+/* ELF uses byte-counts for .align, most others use log2 of count of bytes.  */
+#define ALIGNARG(log2) 1<<log2
+/* For ELF we need the `.type' directive to make shared libs work right.  */
+#define PROLOG(name) .type name,@function
+#define EPILOG(name) .size name,.-name
+/* For ELF we need to prefix register names and local labels.  */
+#ifdef __STDC__
+#define R_(r) %##r
+#define R(r) R_(r)
+#define L(label) .##label
+#else
+#define R(r) %/**/r
+#define L(label) ./**/label
+#endif
+
+#else
+
+#define ALIGNARG(log2) log2
+#define PROLOG(name) /* Nothing.  */
+#define EPILOG(name) /* Nothing.  */
+#define R(r) r
+#define L(label) label
+
+#endif
diff --git a/ports/sysdeps/microblaze/backtrace.c b/ports/sysdeps/microblaze/backtrace.c
new file mode 100644
index 0000000..7af1fb5
--- /dev/null
+++ b/ports/sysdeps/microblaze/backtrace.c
@@ -0,0 +1,117 @@
+
+#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..7b311e7
--- /dev/null
+++ b/ports/sysdeps/microblaze/backtrace_linux.c
@@ -0,0 +1,48 @@
+#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) {
+		/*fprintf(stderr, "working out sig-handler (pc = %08x)\n", pc);*/
+		/* In this case, the pc pointer should be accessible */
+		/* Kernel insert the a tramp between the signal handler frame and the
+		   caller frame in signal handling This is how the kernel add the tramp
+		   between frames:
+		   err |= __put_user(0x31800000 | __NR_rt_sigreturn ,
+		   frame->tramp + 0); // addi r12, r0, __NR_sigreturn
+		   err |= __put_user(0xb9cc0008, frame->tramp + 1); // brki r14, 0x8
+		   regs->r15 = ((unsigned long)frame->tramp)-8;
+		*/
+		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);
+			/*fprintf(stderr, "tramp = %08x\n", tramp);*/
+			/*fprintf(stderr, "ucptr = %08x\n", ucptr);*/
+			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 100644
index 0000000..92b8380
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/atomic.h
@@ -0,0 +1,276 @@
+/* Copyright (C) 2003-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 <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;"    /* clean carry bit*/                              \
+                "1: lwx     %0, %3, r0;"    /* atomic_add_return */                           \
+                "   addic   %1, r0, 0;"     /* check Carry*/                                  \
+                "   bnei    %1, 1b;"        /* jump if Carry is set*/                         \
+                "   cmp     %1, %0, %4;"    /* compare signed values loaded/newval */         \
+                "   bnei    %1, 2f;"        /* if is not equal - jump over */                 \
+                "   swx     %5, %3, r0;"    /* save newval */                                 \
+                "   addic   %1, r0, 0;"     /* check Carry if saving was OK */                \
+                "   bnei    %1, 1b;"        /* jump if swx wasn't successful */               \
+                "2:"                                                                          \
+                    : "=&r" (__tmp),        /* %0 */                                          \
+                    "=&r" (test),           /* %1 */                                          \
+                    "=m" (*__memp)          /* Dummy output so gcc knows writing *__memp */   \
+                    : "r" (__memp),         /* %3 */                                          \
+                    "r" (oldval),           /* %4 */                                          \
+                    "r" (newval)            /* %5 */                                          \
+                    : "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) {                                                                 \
+        if (__builtin_types_compatible_p (typeof (*mem), int))                                \
+            __result = __arch_compare_and_exchange_val_32_acq(mem, newval, oldval);           \
+        else if (__builtin_types_compatible_p (typeof (*mem), unsigned int))                  \
+            __result = __arch_compare_and_exchange_val_32_acq_unsigned(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;"    /* clean carry bit*/                              \
+                "1: lwx     %0, %4, r0;"    /* atomic_add_return */                           \
+                "   addic   %1, r0, 0;"     /* check Carry*/                                  \
+                "   bnei    %1, 1b;"        /* jump if Carry is set*/                         \
+                "   swx     %3, %4, r0;"    /* save newval */                                 \
+                "   addic   %1, r0, 0;"     /* check Carry if saving was OK */                \
+                "   bnei    %1, 1b;"        /* jump if swx wasn't successful */               \
+                    : "=&r" (__tmp),        /* %0 */                                          \
+                    "=&r" (test),           /* %1 */                                          \
+                    "=m" (*__memp)          /* Dummy output so gcc knows writing *__memp */   \
+                    : "r" (value),          /* %3 */                                          \
+                    "r" (__memp)            /* %4 */                                          \
+                    : "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;"    /* clean carry bit*/                              \
+                "1: lwx     %0, %4, r0;"    /* atomic_add_return */                           \
+                "   addic   %1, r0, 0;"     /* check Carry*/                                  \
+                "   bnei    %1, 1b;"        /* jump if Carry is set*/                         \
+                "   add     %1, %3, %0;"    /* add value */                                   \
+                "   swx     %1, %4, r0;"    /* save value back */                             \
+                "   addic   %1, r0, 0;"     /* check Carry if saving was OK */                \
+                "   bnei    %1, 1b;"        /* jump if swx wasn't successful */               \
+                    : "=&r" (__tmp),        /* %0 */                                          \
+                    "=&r" (test),           /* %1 */                                          \
+                    "=m" (*__memp)          /* Dummy output so gcc knows writing *__memp */   \
+                    : "r" (value),          /* %3 */                                          \
+                    "r" (__memp)            /* %4 */                                          \
+                    : "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;"    /* clean carry bit*/                              \
+                "1: lwx     %0, %3, r0;"    /* atomic_add_return*/                            \
+                "   addic   %1, r0, 0;"     /* check Carry*/                                  \
+                "   bnei    %1, 1b;"        /* jump if Carry is set*/                         \
+                "   addi    %0, %0, 1;"     /* add 1 */                                       \
+                "   swx     %0, %3, r0;"    /* save value back */                             \
+                "   addic   %1, r0, 0;"     /* check Carry if saving was OK */                \
+                "   bnei    %1, 1b;"        /* jump if swx wasn't successful */               \
+                    : "=&r" (__val),        /* %0 */                                          \
+                    "=&r" (test),           /* %1 */                                          \
+                    "=m" (*mem)             /* Dummy output so gcc knows writing *mem */      \
+                    : "r" (mem),            /* %3 */                                          \
+                    "m" (*mem)              /* %4 */                                          \
+                    : "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;"    /* clean carry bit*/                              \
+                "1: lwx     %0, %3, r0;"    /* atomic_add_return*/                            \
+                "   addic   %1, r0, 0;"     /* check Carry*/                                  \
+                "   bnei    %1, 1b;"        /* jump if Carry is set*/                         \
+                "   rsubi   %0, %0, 1;"     /* sub 1 */                                       \
+                "   swx     %0, %3, r0;"    /* save value back */                             \
+                "   addic   %1, r0, 0;"     /* check Carry if saving was OK */                \
+                "   bnei    %1, 1b;"        /* jump if swx wasn't successful */               \
+                    : "=&r" (__val),        /* %0 */                                          \
+                    "=&r" (test),           /* %1 */                                          \
+                    "=m" (*mem)             /* Dummy output so gcc knows writing *mem */      \
+                    : "r" (mem),            /* %3 */                                          \
+                    "m" (*mem)              /* %4 */                                          \
+                    : "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..42b4eaa
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/endian.h
@@ -0,0 +1,30 @@
+/* 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/>.  */
+
+#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..e3de962
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/fenv.h
@@ -0,0 +1,77 @@
+/* Copyright (C) 2004-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/>.  */
+
+#ifndef _FENV_H
+# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+#endif
+
+
+/* Define bits representing the exception.  We use the bit positions
+   of the appropriate bits in the FPU control word.  */
+enum
+  {
+    FE_INEXACT = 0x04,
+#define FE_INEXACT	FE_INEXACT
+    FE_UNDERFLOW = 0x08,
+#define FE_UNDERFLOW	FE_UNDERFLOW
+    FE_OVERFLOW = 0x10,
+#define FE_OVERFLOW	FE_OVERFLOW
+    FE_DIVBYZERO = 0x20,
+#define FE_DIVBYZERO	FE_DIVBYZERO
+    FE_INVALID = 0x40,
+#define FE_INVALID	FE_INVALID
+  };
+
+#define FE_ALL_EXCEPT \
+	(FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID)
+
+/* The MIPS FPU supports all of the four defined rounding modes.  We
+   use again the bit positions in the FPU control word as the values
+   for the appropriate macros.  */
+enum
+  {
+    FE_TONEAREST = 0x0,
+#define FE_TONEAREST	FE_TONEAREST
+    FE_TOWARDZERO = 0x1,
+#define FE_TOWARDZERO	FE_TOWARDZERO
+    FE_UPWARD = 0x2,
+#define FE_UPWARD	FE_UPWARD
+    FE_DOWNWARD = 0x3
+#define FE_DOWNWARD	FE_DOWNWARD
+  };
+
+
+/* Type representing exception flags.  */
+typedef unsigned short int fexcept_t;
+
+
+/* Type representing floating-point environment.  This function corresponds
+   to the layout of the block written by the `fstenv'.  */
+typedef struct
+  {
+    unsigned int __fp_control_register;
+  }
+fenv_t;
+
+/* If the default argument is used we use this value.  */
+#define FE_DFL_ENV	((__const fenv_t *) -1)
+
+#ifdef __USE_GNU
+/* Floating-point environment where none of the exception is masked.  */
+# define FE_NOMASK_ENV  ((__const fenv_t *) -2)
+#endif
diff --git a/ports/sysdeps/microblaze/bits/link.h b/ports/sysdeps/microblaze/bits/link.h
new file mode 100644
index 0000000..e958be4
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/link.h
@@ -0,0 +1,55 @@
+/* Copyright (C) 2005-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/>.  */
+
+#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..041feb7
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/setjmp.h
@@ -0,0 +1,37 @@
+/* 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/>.  */
+
+/* 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/bits/wordsize.h b/ports/sysdeps/microblaze/bits/wordsize.h
new file mode 100644
index 0000000..23d379a
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/wordsize.h
@@ -0,0 +1,3 @@
+/* Determine the wordsize from the preprocessor defines.  */
+
+# define __WORDSIZE	32
diff --git a/ports/sysdeps/microblaze/bsd-_setjmp.S b/ports/sysdeps/microblaze/bsd-_setjmp.S
new file mode 100644
index 0000000..7173a5a
--- /dev/null
+++ b/ports/sysdeps/microblaze/bsd-_setjmp.S
@@ -0,0 +1,22 @@
+/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'.
+   Copyright (C) 1997, 1998, 2002, 2008 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..6a03c5c
--- /dev/null
+++ b/ports/sysdeps/microblaze/bsd-setjmp.S
@@ -0,0 +1,22 @@
+/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'.
+   Copyright (C) 1995-1997,2000,2001,2002,2003 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..a1b3bd3
--- /dev/null
+++ b/ports/sysdeps/microblaze/configure
@@ -0,0 +1,122 @@
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+# This file is generated from configure.in by Autoconf.  DO NOT EDIT!
+ # Local configure fragment for sysdeps/microblaze/elf.
+
+if test "$usetls" != no; then
+# Check for support of thread-local storage handling in assembler and
+# linker.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Microblaze TLS support" >&5
+$as_echo_n "checking for Microblaze TLS support... " >&6; }
+if test "${libc_cv_microblaze_tls+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.s <<\EOF
+       .section .tdata,"awT",@progbits
+x:
+       .word 2
+       .text
+       addik r5,r20,x@TLSGD
+       addik r5,r20,x@TLSLDM'
+EOF
+if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+  libc_cv_microblaze_tls=yes
+else
+  libc_cv_microblaze_tls=no
+fi
+rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_microblaze_tls" >&5
+$as_echo "$libc_cv_microblaze_tls" >&6; }
+if test $libc_cv_microblaze_tls = yes; then
+  $as_echo "#define HAVE_TLS_SUPPORT 1" >>confdefs.h
+
+fi
+fi
+
+#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..1330fd2
--- /dev/null
+++ b/ports/sysdeps/microblaze/configure.in
@@ -0,0 +1,32 @@
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+# Local configure fragment for sysdeps/microblaze/elf.
+
+if test "$usetls" != no; then
+# Check for support of thread-local storage handling in assembler and
+# linker.
+AC_CACHE_CHECK(for Microblaze TLS support, libc_cv_microblaze_tls, [dnl
+cat > conftest.s <<\EOF
+       .section .tdata,"awT",@progbits
+x:
+       .word 2
+       .text
+       addik r5,r20,x@TLSGD
+       addik r5,r20,x@TLSLDM'
+EOF
+dnl
+if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
+  libc_cv_microblaze_tls=yes
+else
+  libc_cv_microblaze_tls=no
+fi
+rm -f conftest*])
+if test $libc_cv_microblaze_tls = yes; then
+  AC_DEFINE(HAVE_TLS_SUPPORT)
+fi
+fi
+
+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..01ef591
--- /dev/null
+++ b/ports/sysdeps/microblaze/crti.S
@@ -0,0 +1,90 @@
+/* Special .init and .fini section support for MicroBlaze.
+   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/>.  */
+
+/* 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..1683c96
--- /dev/null
+++ b/ports/sysdeps/microblaze/crtn.S
@@ -0,0 +1,55 @@
+/* Special .init and .fini section support for MicroBlaze.
+   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/>.  */
+
+/* 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..249d3af
--- /dev/null
+++ b/ports/sysdeps/microblaze/dl-machine.h
@@ -0,0 +1,303 @@
+/* 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/>.  */
+
+#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 ||
+		ehdr->e_machine == EM_NEW_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)
+{
+  Elf32_Addr *got;
+  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, so
+   PLT entries 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.  */
+#if (!defined RTLD_BOOTSTRAP || USE___THREAD)
+#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..c004e0f
--- /dev/null
+++ b/ports/sysdeps/microblaze/dl-tls.h
@@ -0,0 +1,29 @@
+/* Copyright (C) 2005-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/>.  */
+
+/* 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..170fb5b
--- /dev/null
+++ b/ports/sysdeps/microblaze/dl-trampoline.S
@@ -0,0 +1,109 @@
+/* Copyright (C) 2005-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 <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/gccframe.h b/ports/sysdeps/microblaze/gccframe.h
new file mode 100644
index 0000000..0129585
--- /dev/null
+++ b/ports/sysdeps/microblaze/gccframe.h
@@ -0,0 +1,21 @@
+/* Copyright (C) 2005-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 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..b0751da
--- /dev/null
+++ b/ports/sysdeps/microblaze/jmpbuf-unwind.h
@@ -0,0 +1,46 @@
+/* Copyright (C) 2005-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 <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..48c061f
--- /dev/null
+++ b/ports/sysdeps/microblaze/ldsodefs.h
@@ -0,0 +1,41 @@
+/* Copyright (C) 2005-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/>.  */
+
+#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..67b67fe
--- /dev/null
+++ b/ports/sysdeps/microblaze/libc-tls.c
@@ -0,0 +1,32 @@
+/* Copyright (C) 2005-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 <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/machine-gmon.h b/ports/sysdeps/microblaze/machine-gmon.h
new file mode 100644
index 0000000..2153835
--- /dev/null
+++ b/ports/sysdeps/microblaze/machine-gmon.h
@@ -0,0 +1,30 @@
+/* Copyright (C) 2011-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/>.  */
+
+/* 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/memusage.h b/ports/sysdeps/microblaze/memusage.h
new file mode 100644
index 0000000..bd57016
--- /dev/null
+++ b/ports/sysdeps/microblaze/memusage.h
@@ -0,0 +1,21 @@
+/* Copyright (C) 2000-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 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..0b4b221
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/Makefile
@@ -0,0 +1,21 @@
+# Copyright (C) 2005-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/>.
+
+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..7d2f129
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/pthread_spin_lock.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 2008-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 <atomic.h>
+#include "pthreadP.h"
+
+int
+pthread_spin_lock (pthread_spinlock_t *lock)
+{
+  while (atomic_compare_and_exchange_val_acq (lock, 1, 0) != 0)
+   while (*lock != 0)
+    ;
+
+  return 0;
+}
diff --git a/ports/sysdeps/microblaze/nptl/pthread_spin_trylock.c b/ports/sysdeps/microblaze/nptl/pthread_spin_trylock.c
new file mode 100644
index 0000000..4a876c1
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/pthread_spin_trylock.c
@@ -0,0 +1,27 @@
+/* Copyright (C) 2008-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 <errno.h>
+#include <atomic.h>
+#include "pthreadP.h"
+
+int
+pthread_spin_trylock (pthread_spinlock_t *lock)
+{
+  return atomic_compare_and_exchange_val_acq (lock, 1, 0) ? EBUSY : 0;
+}
diff --git a/ports/sysdeps/microblaze/nptl/pthreaddef.h b/ports/sysdeps/microblaze/nptl/pthreaddef.h
new file mode 100644
index 0000000..eb8ee89
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/pthreaddef.h
@@ -0,0 +1,39 @@
+/* Copyright (C) 2002-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/>.  */
+
+/* Default stack size.  */
+#define ARCH_STACK_DEFAULT_SIZE	(2 * 1024 * 1024)
+
+/* Required stack pointer alignment at beginning.  SSE requires 16
+   bytes.  */
+#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..8c48607
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/tls.h
@@ -0,0 +1,162 @@
+/* Copyright (C) 2005-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/>.  */
+
+#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;
+
+/* r21 is reserved for thread pointer */
+static inline int __microblaze_set_thread_area(void *tp)
+{
+	asm("or r21,r0,%0" : : "r" (tp));
+	return 0;
+}
+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(); })
+
+# define SET_THREAD_POINTER(x) \
+    ({ __microblaze_set_thread_area(x); })
+
+/* 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	16
+
+/* 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		16
+
+/* 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. */
+# define TLS_INIT_TP(tcbp, secondcall) \
+  ({  SET_THREAD_POINTER ((tcbp)); })
+
+/* 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))
+
+/* Access to data in the thread descriptor is easy.  */
+#define THREAD_GETMEM(descr, member) \
+  descr->member
+#define THREAD_GETMEM_NC(descr, member, idx) \
+  descr->member[idx]
+#define THREAD_SETMEM(descr, member, value) \
+  descr->member = (value)
+#define THREAD_SETMEM_NC(descr, member, idx, value) \
+  descr->member[idx] = (value)
+
+/* Initializing the thread pointer will generate a SIGILL if the syscall
+   is not available.  */
+#define TLS_INIT_TP_EXPENSIVE 1
+
+/* 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..e67e97e
--- /dev/null
+++ b/ports/sysdeps/microblaze/setjmp.S
@@ -0,0 +1,75 @@
+/* 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 <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/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..51939e5
--- /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..4baa091
--- /dev/null
+++ b/ports/sysdeps/microblaze/sysdep.h
@@ -0,0 +1,113 @@
+/* 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.  */
+
+# ifdef HAVE_ELF
+
+/* ELF uses byte-counts for .align, most others use log2 of count of bytes.  */
+#  define ALIGNARG(log2) 1<<log2
+/* For ELF we need the `.type' directive to make shared libs work right.  */
+#  define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg
+#  define ASM_SIZE_DIRECTIVE(name) .size name,.-name
+
+/* In ELF C symbols are asm symbols.  */
+#  undef NO_UNDERSCORES
+#  define NO_UNDERSCORES
+
+# else
+
+#  define ALIGNARG(log2) log2
+#  define ASM_TYPE_DIRECTIVE(name,type)	/* Nothing is specified.  */
+#  define ASM_SIZE_DIRECTIVE(name)	/* Nothing is specified.  */
+
+# endif
+
+
+/* Define an entry point visible from C.
+
+   There is currently a bug in gdb which prevents us from specifying
+   incomplete stabs information.  Fake some entries here which specify
+   the current source file.  */
+# define ENTRY(name)							      \
+  .globl C_SYMBOL_NAME(name);						      \
+  ASM_TYPE_DIRECTIVE (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
+
+# ifdef	NO_UNDERSCORES
+/* 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
+# endif
+
+# 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
+
+/* Assembler local label name */
+#define L(name) $L##name
+
+#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/unix/sysv/linux/microblaze/Makefile b/ports/sysdeps/unix/sysv/linux/microblaze/Makefile
new file mode 100644
index 0000000..3cf2b6a
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/Makefile
@@ -0,0 +1,12 @@
+ifeq ($(subdir),misc)
+sysdep_routines += mremap
+endif
+
+ifeq ($(subdir),elf)
+sysdep-others += lddlibc4
+install-bin += lddlibc4
+endif
+
+ifeq ($(subdir),resource)
+sysdep_routines += oldgetrlimit64 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..cf363fa
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/Versions
@@ -0,0 +1,42 @@
+libc {
+  GLIBC_2.0 {
+    # Exception handling support functions from libgcc
+    __register_frame; __register_frame_table; __deregister_frame;
+    __frame_state_for; __register_frame_info_table;
+
+    # c*
+    cacheflush;
+  }
+  GLIBC_2.2 {
+    # functions used in other libraries
+    __xstat64; __fxstat64; __lxstat64;
+
+    # a*
+    alphasort64;
+
+    # g*
+    glob64;
+
+    # New rlimit interface
+    getrlimit; setrlimit; getrlimit64; setrlimit64;
+
+    # r*
+    readdir64; readdir64_r;
+
+    # s*
+    scandir64;
+
+    # v*
+    versionsort64;
+  }
+  GLIBC_2.3.3 {
+    posix_fadvise64; posix_fallocate64;
+    setcontext; getcontext; swapcontext; makecontext;
+  }
+  GLIBC_2.3.4 {
+    setcontext; getcontext; swapcontext; makecontext;
+  }
+  GLIBC_2.11 {
+    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..5fed890
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S
@@ -0,0 +1,29 @@
+/* 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 <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/alphasort64.c b/ports/sysdeps/unix/sysv/linux/microblaze/alphasort64.c
new file mode 100644
index 0000000..0b5ae47
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/alphasort64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/alphasort64.c>
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..076c4a2
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h
@@ -0,0 +1,57 @@
+/* O_*, F_*, FD_* bit values for Linux.
+   Copyright (C) 2011, 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/>.  */
+
+#ifndef	_FCNTL_H
+# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+#endif
+
+# define O_DIRECTORY    0200000 /* Must be a directory.  */
+# define O_NOFOLLOW     0400000 /* Do not follow links.  */
+# define O_DIRECT        040000 /* Direct disk access.  */
+#ifdef __USE_LARGEFILE64
+# define O_LARGEFILE    0100000
+#endif
+
+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').  */
+#ifndef __USE_FILE_OFFSET64
+    __off_t l_start;	/* Offset where the lock begins.  */
+    __off_t l_len;	/* Size of the locked area; zero means until EOF.  */
+#else
+    __off64_t l_start;	/* Offset where the lock begins.  */
+    __off64_t l_len;	/* Size of the locked area; zero means until EOF.  */
+#endif
+    __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/ipc.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/ipc.h
new file mode 100644
index 0000000..f3acb93
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/ipc.h
@@ -0,0 +1,55 @@
+/* Copyright (C) 2011, 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/>.  */
+
+#ifndef _SYS_IPC_H
+# error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
+#endif
+
+#include <bits/types.h>
+
+/* Mode bits for `msgget', `semget', and `shmget'.  */
+#define IPC_CREAT	01000		/* Create key if key does not exist. */
+#define IPC_EXCL	02000		/* Fail if key exists.  */
+#define IPC_NOWAIT	04000		/* Return error on wait.  */
+
+/* Control commands for `msgctl', `semctl', and `shmctl'.  */
+#define IPC_RMID	0		/* Remove identifier.  */
+#define IPC_SET		1		/* Set `ipc_perm' options.  */
+#define IPC_STAT	2		/* Get `ipc_perm' options.  */
+#ifdef __USE_GNU
+# define IPC_INFO	3		/* See ipcs.  */
+#endif
+
+/* Special key values.  */
+#define IPC_PRIVATE	((__key_t) 0)	/* Private key.  */
+
+
+/* Data structure used to pass permission information to IPC operations.  */
+struct ipc_perm
+  {
+    __key_t __key;			/* Key.  */
+    __uid_t uid;			/* Owner's user ID.  */
+    __gid_t gid;			/* Owner's group ID.  */
+    __uid_t cuid;			/* Creator's user ID.  */
+    __gid_t cgid;			/* Creator's group ID.  */
+    unsigned short int mode;		/* Read/write permission.  */
+    unsigned short int __seq;		/* Sequence number.  */
+    unsigned short int __pad1;
+    unsigned long int __unused1;
+    unsigned long int __unused2;
+  };
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..740e70c
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/mman.h
@@ -0,0 +1,114 @@
+/* Definitions for POSIX memory map interface.  Linux/MicroBlaze version.
+
+   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/>.  */
+
+#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.  */
+
+
+/* Protections are chosen from these bits, OR'd together.  The
+   implementation does not necessarily support PROT_EXEC or PROT_WRITE
+   without PROT_READ.  The only guarantees are that no writing will be
+   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
+
+#define PROT_READ	0x1		/* Page can be read.  */
+#define PROT_WRITE	0x2		/* Page can be written.  */
+#define PROT_EXEC	0x4		/* Page can be executed.  */
+#define PROT_NONE	0x0		/* Page can not be accessed.  */
+#define PROT_GROWSDOWN	0x01000000	/* Extend change to start of
+					   growsdown vma (mprotect only).  */
+#define PROT_GROWSUP	0x02000000	/* Extend change to start of
+					   growsup vma (mprotect only).  */
+
+/* Sharing types (must choose one and only one of these).  */
+#define MAP_SHARED	0x01		/* Share changes.  */
+#define MAP_PRIVATE	0x02		/* Changes are private.  */
+#ifdef __USE_MISC
+# define MAP_TYPE	0x0f		/* Mask for type of mapping.  */
+#endif
+
+/* Other flags.  */
+#define MAP_FIXED	0x10		/* Interpret addr exactly.  */
+#ifdef __USE_MISC
+# define MAP_FILE	0
+# define MAP_ANONYMOUS	0x20		/* Don't use a file.  */
+# define MAP_ANON	MAP_ANONYMOUS
+#endif
+
+/* These are Linux-specific.  */
+#ifdef __USE_MISC
+# 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
+
+/* Flags to `msync'.  */
+#define MS_ASYNC	1		/* Sync memory asynchronously.  */
+#define MS_SYNC		4		/* Synchronous memory sync.  */
+#define MS_INVALIDATE	2		/* Invalidate the caches.  */
+
+/* Flags for `mlockall'.  */
+#define MCL_CURRENT	1		/* Lock all currently mapped pages.  */
+#define MCL_FUTURE	2		/* Lock all additions to address
+					   space.  */
+
+/* Flags for `mremap'.  */
+#ifdef __USE_GNU
+# define MREMAP_MAYMOVE	1
+# define MREMAP_FIXED	2
+#endif
+
+/* Advice to `madvise'.  */
+#ifdef __USE_BSD
+# define MADV_NORMAL	  0	/* No further special treatment.  */
+# define MADV_RANDOM	  1	/* Expect random page references.  */
+# define MADV_SEQUENTIAL  2	/* Expect sequential page references.  */
+# define MADV_WILLNEED	  3	/* Will need these pages.  */
+# define MADV_DONTNEED	  4	/* Don't need these pages.  */
+# define MADV_REMOVE	  9	/* Remove these pages and resources.  */
+# define MADV_DONTFORK	  10	/* Do not inherit across fork.  */
+# define MADV_DOFORK	  11	/* Do inherit across fork.  */
+# define MADV_MERGEABLE	  12	/* KSM may merge identical pages.  */
+# define MADV_UNMERGEABLE 13	/* KSM may not merge identical pages.  */
+# define MADV_HUGEPAGE	  14	/* Worth backing with hugepages.  */
+# define MADV_NOHUGEPAGE  15	/* Not worth backing with hugepages.  */
+# define MADV_DONTDUMP	  16    /* Explicity exclude from the core dump,
+                                   overrides the coredump filter bits.  */
+# define MADV_DODUMP	  17	/* Clear the MADV_DONTDUMP flag.  */
+# define MADV_HWPOISON	  100	/* Poison a page for testing.  */
+#endif
+
+/* The POSIX people had to invent similar names for the same things.  */
+#ifdef __USE_XOPEN2K
+# define POSIX_MADV_NORMAL	0 /* No further special treatment.  */
+# define POSIX_MADV_RANDOM	1 /* Expect random page references.  */
+# define POSIX_MADV_SEQUENTIAL	2 /* Expect sequential page references.  */
+# define POSIX_MADV_WILLNEED	3 /* Will need these pages.  */
+# define POSIX_MADV_DONTNEED	4 /* Don't need these pages.  */
+#endif
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/bits/msq.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/msq.h
new file mode 100644
index 0000000..cb7eca7
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/msq.h
@@ -0,0 +1,77 @@
+/* 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/>.  */
+
+#ifndef _SYS_MSG_H
+# error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
+#endif
+
+#include <bits/types.h>
+
+/* Define options for message queue functions.  */
+#define MSG_NOERROR	010000	/* no error if message is too big */
+#ifdef __USE_GNU
+# define MSG_EXCEPT	020000	/* recv any msg except of specified type */
+#endif
+
+/* Types used in the structure definition.  */
+typedef unsigned long int msgqnum_t;
+typedef unsigned long int msglen_t;
+
+
+/* Structure of record for one message inside the kernel.
+   The type `struct msg' is opaque.  */
+struct msqid_ds
+{
+  struct ipc_perm msg_perm;	/* structure describing operation permission */
+  __time_t msg_stime;		/* time of last msgsnd command */
+  unsigned long int __unused1;
+  __time_t msg_rtime;		/* time of last msgrcv command */
+  unsigned long int __unused2;
+  __time_t msg_ctime;		/* time of last change */
+  unsigned long int __unused3;
+  unsigned long int __msg_cbytes; /* current number of bytes on queue */
+  msgqnum_t msg_qnum;		/* number of messages currently on queue */
+  msglen_t msg_qbytes;		/* max number of bytes allowed on queue */
+  __pid_t msg_lspid;		/* pid of last msgsnd() */
+  __pid_t msg_lrpid;		/* pid of last msgrcv() */
+  unsigned long int __unused4;
+  unsigned long int __unused5;
+};
+
+#ifdef __USE_MISC
+
+# define msg_cbytes	__msg_cbytes
+
+/* ipcs ctl commands */
+# define MSG_STAT 11
+# define MSG_INFO 12
+
+/* buffer for msgctl calls IPC_INFO, MSG_INFO */
+struct msginfo
+  {
+    int msgpool;
+    int msgmap;
+    int msgmax;
+    int msgmnb;
+    int msgmni;
+    int msgssz;
+    int msgtql;
+    unsigned short int msgseg;
+  };
+
+#endif /* __USE_MISC */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/bits/sem.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/sem.h
new file mode 100644
index 0000000..2968301
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/sem.h
@@ -0,0 +1,87 @@
+/* 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/>.  */
+
+#ifndef _SYS_SEM_H
+# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+#endif
+
+#include <sys/types.h>
+
+/* Flags for `semop'.  */
+#define SEM_UNDO	0x1000		/* undo the operation on exit */
+
+/* Commands for `semctl'.  */
+#define GETPID		11		/* get sempid */
+#define GETVAL		12		/* get semval */
+#define GETALL		13		/* get all semval's */
+#define GETNCNT		14		/* get semncnt */
+#define GETZCNT		15		/* get semzcnt */
+#define SETVAL		16		/* set semval */
+#define SETALL		17		/* set all semval's */
+
+
+/* Data structure describing a set of semaphores.  */
+struct semid_ds
+{
+  struct ipc_perm sem_perm;		/* operation permission struct */
+  __time_t sem_otime;			/* last semop() time */
+  unsigned long int __unused1;
+  __time_t sem_ctime;			/* last time changed by semctl() */
+  unsigned long int __unused2;
+  unsigned long int sem_nsems;		/* number of semaphores in set */
+  unsigned long int __unused3;
+  unsigned long int __unused4;
+};
+
+/* The user should define a union like the following to use it for arguments
+   for `semctl'.
+
+   union semun
+   {
+     int val;				<= value for SETVAL
+     struct semid_ds *buf;		<= buffer for IPC_STAT & IPC_SET
+     unsigned short int *array;		<= array for GETALL & SETALL
+     struct seminfo *__buf;		<= buffer for IPC_INFO
+   };
+
+   Previous versions of this file used to define this union but this is
+   incorrect.  One can test the macro _SEM_SEMUN_UNDEFINED to see whether
+   one must define the union or not.  */
+#define _SEM_SEMUN_UNDEFINED	1
+
+#ifdef __USE_MISC
+
+/* ipcs ctl cmds */
+# define SEM_STAT 18
+# define SEM_INFO 19
+
+struct  seminfo
+{
+  int semmap;
+  int semmni;
+  int semmns;
+  int semmnu;
+  int semmsl;
+  int semopm;
+  int semume;
+  int semusz;
+  int semvmx;
+  int semaem;
+};
+
+#endif /* __USE_MISC */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/bits/shm.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/shm.h
new file mode 100644
index 0000000..8460718
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/shm.h
@@ -0,0 +1,102 @@
+/* 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/>.  */
+
+#ifndef _SYS_SHM_H
+# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+#endif
+
+#include <bits/types.h>
+
+/* Permission flag for shmget.  */
+#define SHM_R		0400		/* or S_IRUGO from <linux/stat.h> */
+#define SHM_W		0200		/* or S_IWUGO from <linux/stat.h> */
+
+/* Flags for `shmat'.  */
+#define SHM_RDONLY	010000		/* attach read-only else read-write */
+#define SHM_RND		020000		/* round attach address to SHMLBA */
+#define SHM_REMAP	040000		/* take-over region on attach */
+
+/* Commands for `shmctl'.  */
+#define SHM_LOCK	11		/* lock segment (root only) */
+#define SHM_UNLOCK	12		/* unlock segment (root only) */
+
+__BEGIN_DECLS
+
+/* Segment low boundary address multiple.  */
+#define SHMLBA		(__getpagesize ())
+extern int __getpagesize (void) __THROW __attribute__ ((__const__));
+
+
+/* Type to count number of attaches.  */
+typedef unsigned long int shmatt_t;
+
+/* Data structure describing a set of semaphores.  */
+struct shmid_ds
+  {
+    struct ipc_perm shm_perm;		/* operation permission struct */
+    size_t shm_segsz;			/* size of segment in bytes */
+    __time_t shm_atime;			/* time of last shmat() */
+    unsigned long int __unused1;
+    __time_t shm_dtime;			/* time of last shmdt() */
+    unsigned long int __unused2;
+    __time_t shm_ctime;			/* time of last change by shmctl() */
+    unsigned long int __unused3;
+    __pid_t shm_cpid;			/* pid of creator */
+    __pid_t shm_lpid;			/* pid of last shmop */
+    shmatt_t shm_nattch;		/* number of current attaches */
+    unsigned long int __unused4;
+    unsigned long int __unused5;
+  };
+
+#ifdef __USE_MISC
+
+/* ipcs ctl commands */
+# define SHM_STAT 	13
+# define SHM_INFO 	14
+
+/* shm_mode upper byte flags */
+# define SHM_DEST	01000	/* segment will be destroyed on last detach */
+# define SHM_LOCKED	02000   /* segment will not be swapped */
+# define SHM_HUGETLB	04000	/* segment is mapped via hugetlb */
+
+struct	shminfo
+  {
+    unsigned long int shmmax;
+    unsigned long int shmmin;
+    unsigned long int shmmni;
+    unsigned long int shmseg;
+    unsigned long int shmall;
+    unsigned long int __unused1;
+    unsigned long int __unused2;
+    unsigned long int __unused3;
+    unsigned long int __unused4;
+  };
+
+struct shm_info
+  {
+    int used_ids;
+    unsigned long int shm_tot;	/* total allocated shm */
+    unsigned long int shm_rss;	/* total resident shm */
+    unsigned long int shm_swp;	/* total swapped shm */
+    unsigned long int swap_attempts;
+    unsigned long int swap_successes;
+  };
+
+#endif /* __USE_MISC */
+
+__END_DECLS
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..edf0212
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/stat.h
@@ -0,0 +1,203 @@
+/* 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/>.  */
+
+#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..da10866
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/brk.c
@@ -0,0 +1,47 @@
+/* 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 <errno.h>
+#include <unistd.h>
+#include <sysdep.h>
+
+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/x86 ELF
+   dynamic linker.  Sigh.  */
+weak_alias (__curbrk, ___brk_addr)
+
+int
+__brk (void *addr)
+{
+  void *newbrk;
+
+  INTERNAL_SYSCALL_DECL (err);
+  newbrk = (void *) INTERNAL_SYSCALL (brk, err, 1, addr);
+  __curbrk = newbrk;
+
+  if (newbrk < 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..f86404d
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/clone.S
@@ -0,0 +1,70 @@
+/* Copyright (C) 1996-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/>.  */
+
+/* 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..4486fba
--- /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!
+
+libc_cv_gcc_unwind_find_fde=yes
+arch_minimum_kernel=2.0.10
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..cfb6163
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/configure.in
@@ -0,0 +1,5 @@
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+# Local configure fragment for sysdeps/unix/sysv/linux/microblaze.
+
+libc_cv_gcc_unwind_find_fde=yes
+arch_minimum_kernel=2.0.10
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/dl-librecon.h b/ports/sysdeps/unix/sysv/linux/microblaze/dl-librecon.h
new file mode 100644
index 0000000..dbb4e75
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/dl-librecon.h
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/dl-librecon.h>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/fchown.c b/ports/sysdeps/unix/sysv/linux/microblaze/fchown.c
new file mode 100644
index 0000000..3a69ecc
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/fchown.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/fchown.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/fchownat.c b/ports/sysdeps/unix/sysv/linux/microblaze/fchownat.c
new file mode 100644
index 0000000..dfed76a
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/fchownat.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/fchownat.c>
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/getdents64.c b/ports/sysdeps/unix/sysv/linux/microblaze/getdents64.c
new file mode 100644
index 0000000..0c75fb5
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getdents64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getdents64.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getegid.c b/ports/sysdeps/unix/sysv/linux/microblaze/getegid.c
new file mode 100644
index 0000000..37b4b4a
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getegid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getegid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/geteuid.c b/ports/sysdeps/unix/sysv/linux/microblaze/geteuid.c
new file mode 100644
index 0000000..ebcb555
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/geteuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/geteuid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getgid.c b/ports/sysdeps/unix/sysv/linux/microblaze/getgid.c
new file mode 100644
index 0000000..0a4d606
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getgid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getgid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getgroups.c b/ports/sysdeps/unix/sysv/linux/microblaze/getgroups.c
new file mode 100644
index 0000000..102ea24
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getgroups.c
@@ -0,0 +1,2 @@
+/* We also have to rewrite the kernel gid_t to the user land type.  */
+#include <sysdeps/unix/sysv/linux/i386/getgroups.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getmsg.c b/ports/sysdeps/unix/sysv/linux/microblaze/getmsg.c
new file mode 100644
index 0000000..3a1fa08
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getmsg.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getmsg.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getresgid.c b/ports/sysdeps/unix/sysv/linux/microblaze/getresgid.c
new file mode 100644
index 0000000..b703a41
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getresgid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getresgid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getresuid.c b/ports/sysdeps/unix/sysv/linux/microblaze/getresuid.c
new file mode 100644
index 0000000..0b14cef
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getresuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getresuid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getrlimit64.c b/ports/sysdeps/unix/sysv/linux/microblaze/getrlimit64.c
new file mode 100644
index 0000000..fef018f
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getrlimit64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getrlimit64.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..4c8443e
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getsysstats.c
@@ -0,0 +1,35 @@
+/* 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/>.  */
+
+/* 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:".  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:", 4) == 0)	      	     		  \
+	  ++(RESULT);							  \
+    }									  \
+  while (0)
+
+#include <sysdeps/unix/sysv/linux/getsysstats.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getuid.c b/ports/sysdeps/unix/sysv/linux/microblaze/getuid.c
new file mode 100644
index 0000000..d682c79
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getuid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/glob64.c b/ports/sysdeps/unix/sysv/linux/microblaze/glob64.c
new file mode 100644
index 0000000..82a9a29
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/glob64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/glob64.c>
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..b855c1b
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/kernel_stat.h
@@ -0,0 +1,32 @@
+/* Definition of `struct stat' used in the kernel..  */
+
+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/lchown.c b/ports/sysdeps/unix/sysv/linux/microblaze/lchown.c
new file mode 100644
index 0000000..c89de99
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/lchown.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/lchown.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/ldconfig.h b/ports/sysdeps/unix/sysv/linux/microblaze/ldconfig.h
new file mode 100644
index 0000000..31770f1
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/ldconfig.h
@@ -0,0 +1,19 @@
+/* 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/>.  */
+
+#include <sysdeps/unix/sysv/linux/i386/ldconfig.h>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/lockf64.c b/ports/sysdeps/unix/sysv/linux/microblaze/lockf64.c
new file mode 100644
index 0000000..a88f5a7
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/lockf64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/lockf64.c>
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..ffcb303
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/mmap.S
@@ -0,0 +1,50 @@
+/* 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/>.  */
+
+#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..376ad0f
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/msgctl.c
@@ -0,0 +1,130 @@
+/* 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/>.  */
+
+#include <errno.h>
+#include <sys/msg.h>
+#include <ipc_priv.h>
+
+#include <sysdep.h>
+#include <string.h>
+#include <sys/syscall.h>
+#include <shlib-compat.h>
+#include <bp-checks.h>
+
+#include "kernel-features.h"
+
+struct __old_msqid_ds
+{
+  struct __old_ipc_perm msg_perm;	/* structure describing operation permission */
+  struct msg *__unbounded __msg_first;	/* pointer to first message on queue */
+  struct msg *__unbounded __msg_last;	/* pointer to last message on queue */
+  __time_t msg_stime;			/* time of last msgsnd command */
+  __time_t msg_rtime;			/* time of last msgrcv command */
+  __time_t msg_ctime;			/* time of last change */
+  struct wait_queue *__unbounded __wwait; /* ??? */
+  struct wait_queue *__unbounded __rwait; /* ??? */
+  unsigned short int __msg_cbytes;	/* current number of bytes on queue */
+  unsigned short int msg_qnum;		/* number of messages currently on queue */
+  unsigned short int msg_qbytes;	/* max number of bytes allowed on queue */
+  __ipc_pid_t msg_lspid;		/* pid of last msgsnd() */
+  __ipc_pid_t msg_lrpid;		/* pid of last msgrcv() */
+};
+
+/* Allows to control internal state and destruction of message queue
+   objects.  */
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+int __old_msgctl (int, int, struct __old_msqid_ds *);
+#endif
+int __new_msgctl (int, int, struct msqid_ds *);
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+int
+attribute_compat_text_section
+__old_msgctl (int msqid, int cmd, struct __old_msqid_ds *buf)
+{
+  return INLINE_SYSCALL (msgctl, 3, msqid, cmd, CHECK_1 (buf));
+}
+compat_symbol (libc, __old_msgctl, msgctl, GLIBC_2_0);
+#endif
+
+int
+__new_msgctl (int msqid, int cmd, struct msqid_ds *buf)
+{
+
+#if __ASSUME_IPC64 > 0
+  return INLINE_SYSCALL (msgctl, 3, msqid, cmd | __IPC_64, CHECK_1 (buf));
+#else
+  switch (cmd) {
+    case MSG_STAT:
+    case IPC_STAT:
+    case IPC_SET:
+      break;
+    default:
+      return INLINE_SYSCALL (msgctl, 3, msqid, cmd, CHECK_1 (buf));
+  }
+
+  {
+    int result;
+    struct __old_msqid_ds old;
+
+    /* Unfortunately there is no way how to find out for sure whether
+       we should use old or new msgctl.  */
+    result = INLINE_SYSCALL (msgctl, 3, msqid, cmd | __IPC_64, CHECK_1 (buf));
+    if (result != -1 || errno != EINVAL)
+      return result;
+
+    if (cmd == IPC_SET)
+      {
+	old.msg_perm.uid = buf->msg_perm.uid;
+	old.msg_perm.gid = buf->msg_perm.gid;
+	old.msg_perm.mode = buf->msg_perm.mode;
+	old.msg_qbytes = buf->msg_qbytes;
+	if (old.msg_perm.uid != buf->msg_perm.uid ||
+	    old.msg_perm.gid != buf->msg_perm.gid ||
+	    old.msg_qbytes != buf->msg_qbytes)
+	  {
+	    __set_errno (EINVAL);
+	    return -1;
+	  }
+      }
+    result = INLINE_SYSCALL (msgctl, 3, msqid, cmd, __ptrvalue (&old));
+    if (result != -1 && cmd != IPC_SET)
+      {
+	memset(buf, 0, sizeof(*buf));
+	buf->msg_perm.__key = old.msg_perm.__key;
+	buf->msg_perm.uid = old.msg_perm.uid;
+	buf->msg_perm.gid = old.msg_perm.gid;
+	buf->msg_perm.cuid = old.msg_perm.cuid;
+	buf->msg_perm.cgid = old.msg_perm.cgid;
+	buf->msg_perm.mode = old.msg_perm.mode;
+	buf->msg_perm.__seq = old.msg_perm.__seq;
+	buf->msg_stime = old.msg_stime;
+	buf->msg_rtime = old.msg_rtime;
+	buf->msg_ctime = old.msg_ctime;
+	buf->__msg_cbytes = old.__msg_cbytes;
+	buf->msg_qnum = old.msg_qnum;
+	buf->msg_qbytes = old.msg_qbytes;
+	buf->msg_lspid = old.msg_lspid;
+	buf->msg_lrpid = old.msg_lrpid;
+      }
+    return result;
+  }
+#endif
+}
+
+versioned_symbol (libc, __new_msgctl, msgctl, GLIBC_2_2);
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..5a422b6
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h
@@ -0,0 +1,185 @@
+/* Copyright (C) 2002-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/>.  */
+
+#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..0ae59ec
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/semaphore.h
@@ -0,0 +1,35 @@
+/* Copyright (C) 2002-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/>.  */
+
+#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/createthread.c b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c
new file mode 100644
index 0000000..19e4318
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c
@@ -0,0 +1,23 @@
+/* Copyright (C) 2005-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/>.  */
+
+/* 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..dcd4307
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/fork.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 2005-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 <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..fc11e36
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/ld.abilist
@@ -0,0 +1,18 @@
+GLIBC_2.0
+ GLIBC_2.0 A
+ __libc_memalign F
+ _r_debug D 0x14
+ calloc F
+ free F
+ malloc F
+ realloc F
+GLIBC_2.1
+ GLIBC_2.1 A
+ __libc_stack_end D 0x4
+ _dl_mcount F
+GLIBC_2.3
+ GLIBC_2.3 A
+ __tls_get_addr F
+GLIBC_2.4
+ GLIBC_2.4 A
+ __stack_chk_guard D 0x4
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..f4ca37f
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libBrokenLocale.abilist
@@ -0,0 +1,3 @@
+GLIBC_2.0
+ GLIBC_2.0 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..c9755d8
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libanl.abilist
@@ -0,0 +1,6 @@
+GLIBC_2.2.3
+ GLIBC_2.2.3 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..c2f036d
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libc.abilist
@@ -0,0 +1,2174 @@
+GCC_3.0
+ GCC_3.0 A
+ _Unwind_Find_FDE F
+ __deregister_frame_info_bases F
+ __register_frame_info_bases F
+ __register_frame_info_table_bases F
+GLIBC_2.0
+ GLIBC_2.0 A
+ _IO_adjust_column 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_fgets F
+ _IO_file_attach F
+ _IO_file_close F
+ _IO_file_close_it F
+ _IO_file_doallocate 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_fsetpos F
+ _IO_ftell F
+ _IO_ftrylockfile F
+ _IO_funlockfile F
+ _IO_fwrite F
+ _IO_getc F
+ _IO_getline F
+ _IO_gets F
+ _IO_init F
+ _IO_init_marker F
+ _IO_link_in F
+ _IO_list_all D 0x4
+ _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_setb F
+ _IO_setbuffer F
+ _IO_setvbuf F
+ _IO_sgetn F
+ _IO_sprintf F
+ _IO_sputbackc F
+ _IO_sscanf F
+ _IO_stderr_ D 0x50
+ _IO_stdin_ D 0x50
+ _IO_stdout_ D 0x50
+ _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_switch_to_get_mode F
+ _IO_un_link F
+ _IO_ungetc F
+ _IO_unsave_markers F
+ _IO_vfprintf F
+ _IO_vfscanf F
+ _IO_vsprintf F
+ ___brk_addr D 0x4
+ __after_morecore_hook D 0x4
+ __argz_count F
+ __argz_next F
+ __argz_stringify F
+ __assert_fail F
+ __assert_perror_fail F
+ __bsd_getpgrp F
+ __bzero F
+ __check_rhosts_file D 0x4
+ __cmsg_nxthdr F
+ __ctype32_b D 0x4
+ __ctype_b D 0x4
+ __ctype_get_mb_cur_max F
+ __ctype_tolower D 0x4
+ __ctype_toupper D 0x4
+ __curbrk D 0x4
+ __daylight D 0x4
+ __dcgettext F
+ __default_morecore F
+ __deregister_frame F
+ __deregister_frame_info F
+ __dgettext F
+ __dup2 F
+ __divdi3 F
+ __environ D 0x4
+ __errno_location F
+ __fcntl F
+ __ffs F
+ __finite F
+ __finitef F
+ __finitel F
+ __fork F
+ __fpu_control D 0x4
+ __frame_state_for F
+ __free_hook D 0x4
+ __fxstat F
+ __getdelim F
+ __getpagesize F
+ __getpgid F
+ __getpid F
+ __gettimeofday F
+ __gmtime_r F
+ __h_errno_location F
+ __isinf F
+ __isinff F
+ __isinfl F
+ __isnan F
+ __isnanf F
+ __isnanl F
+ __iswctype F
+ __ivaliduser F
+ __libc_calloc F
+ __libc_free F
+ __libc_init_first F
+ __libc_mallinfo F
+ __libc_malloc F
+ __libc_mallopt F
+ __libc_memalign F
+ __libc_pvalloc F
+ __libc_realloc F
+ __libc_start_main F
+ __libc_valloc F
+ __lxstat F
+ __malloc_hook D 0x4
+ __malloc_initialize_hook D 0x4
+ __mbrlen F
+ __mbrtowc F
+ __memalign_hook D 0x4
+ __mempcpy F
+ __moddi3 F
+ __monstartup F
+ __morecore D 0x4
+ __nss_configure_lookup F
+ __nss_database_lookup F
+ __nss_group_lookup F
+ __nss_hosts_lookup F
+ __nss_next F
+ __nss_passwd_lookup F
+ __overflow F
+ __pipe F
+ __printf_fp F
+ __profile_frequency F
+ __progname D 0x4
+ __progname_full D 0x4
+ __rcmd_errstr D 0x4
+ __realloc_hook D 0x4
+ __register_frame F
+ __register_frame_info F
+ __register_frame_info_table F
+ __register_frame_table F
+ __res_randomid F
+ __sbrk F
+ __secure_getenv F
+ __select F
+ __setpgid F
+ __sigaction F
+ __sigaddset F
+ __sigdelset F
+ __sigismember F
+ __sigpause F
+ __statfs F
+ __stpcpy F
+ __stpncpy F
+ __strcasecmp F
+ __strdup F
+ __strerror_r F
+ __strtod_internal F
+ __strtof_internal F
+ __strtok_r F
+ __strtol_internal F
+ __strtold_internal F
+ __strtoll_internal F
+ __strtoq_internal F
+ __strtoul_internal F
+ __strtoull_internal F
+ __strtouq_internal F
+ __sysv_signal F
+ __timezone D 0x4
+ __tzname D 0x8
+ __udivdi3 F
+ __uflow F
+ __umoddi3 F
+ __underflow F
+ __vfscanf F
+ __vsnprintf F
+ __vsscanf F
+ __wait F
+ __waitpid F
+ __wcstod_internal F
+ __wcstof_internal F
+ __wcstol_internal F
+ __wcstold_internal F
+ __wcstoll_internal F
+ __wcstoul_internal F
+ __wcstoull_internal F
+ __xmknod F
+ __xpg_basename F
+ __xstat F
+ _environ D 0x4
+ _exit 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 D 0x4
+ _obstack_allocated_p F
+ _obstack_begin F
+ _obstack_begin_1 F
+ _obstack_free F
+ _obstack_memory_used F
+ _obstack_newchunk F
+ _res D 0x200
+ _rpc_dtablesize F
+ _seterr_reply F
+ _setjmp F
+ _sys_errlist D 0x1ec
+ _sys_nerr D 0x4
+ _sys_siglist D 0x80
+ _tolower F
+ _toupper F
+ a64l F
+ abort F
+ abs F
+ accept F
+ addmntent F
+ adjtime F
+ advance F
+ alphasort 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
+ atexit F
+ atof F
+ atoi F
+ atol F
+ atoll F
+ authnone_create F
+ authunix_create F
+ authunix_create_default F
+ basename F
+ bcmp F
+ bcopy F
+ bind F
+ bindresvport F
+ bindtextdomain F
+ brk F
+ bsd_signal F
+ bsearch F
+ btowc F
+ bzero F
+ cacheflush F
+ calloc F
+ callrpc F
+ canonicalize_file_name F
+ catclose F
+ catgets F
+ catopen 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
+ clock F
+ clone F
+ close F
+ closedir F
+ closelog F
+ confstr F
+ connect F
+ copysign F
+ copysignf F
+ copysignl F
+ ctermid F
+ ctime F
+ ctime_r F
+ cuserid F
+ daemon F
+ daylight D 0x4
+ dcgettext F
+ dgettext F
+ difftime F
+ dirfd F
+ dirname F
+ div F
+ dprintf F
+ drand48 F
+ drand48_r F
+ dysize 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
+ endspent F
+ endttyent F
+ endusershell F
+ endutent F
+ environ D 0x4
+ envz_add F
+ envz_entry F
+ envz_get F
+ envz_merge F
+ envz_remove F
+ envz_strip 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
+ execl F
+ execle F
+ execlp F
+ execv F
+ execve F
+ execvp F
+ exit F
+ fchflags F
+ fchown F
+ fclose F
+ fcloseall F
+ fcntl F
+ fcvt F
+ fcvt_r F
+ fdopen F
+ feof F
+ feof_unlocked F
+ ferror F
+ ferror_unlocked F
+ fexecve F
+ fflush F
+ fflush_unlocked F
+ ffs F
+ fgetc F
+ fgetgrent F
+ fgetgrent_r F
+ fgetpos F
+ fgetpwent F
+ fgetpwent_r F
+ fgets F
+ fgetspent F
+ fgetspent_r F
+ fileno F
+ fileno_unlocked F
+ finite F
+ finitef F
+ finitel F
+ flockfile F
+ fnmatch F
+ fopen F
+ fopencookie F
+ fork F
+ fpathconf F
+ fprintf F
+ fputc F
+ fputc_unlocked F
+ fputs F
+ fread F
+ free F
+ freeaddrinfo F
+ freopen F
+ frexp F
+ frexpf F
+ frexpl F
+ fscanf F
+ fseek F
+ fsetpos F
+ ftell F
+ ftime F
+ ftok F
+ ftrylockfile F
+ fts_children F
+ fts_close F
+ fts_open F
+ fts_read F
+ fts_set F
+ ftw F
+ funlockfile F
+ fwrite F
+ gcvt F
+ get_avphys_pages F
+ get_current_dir_name 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
+ getc F
+ getc_unlocked F
+ getchar F
+ getchar_unlocked F
+ getcwd F
+ getdelim F
+ getdirentries 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
+ 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
+ getline F
+ getlogin F
+ getlogin_r F
+ getmntent F
+ getmntent_r F
+ getnetbyaddr F
+ getnetbyaddr_r F
+ getnetbyname F
+ getnetbyname_r F
+ getnetent F
+ getnetent_r F
+ getnetgrent F
+ getnetgrent_r F
+ getopt F
+ getopt_long F
+ getopt_long_only F
+ getpagesize F
+ getpass F
+ getpid F
+ getpriority F
+ getprotobyname F
+ getprotobyname_r F
+ getprotobynumber F
+ getprotobynumber_r F
+ getprotoent F
+ getprotoent_r F
+ getpublickey F
+ getpw F
+ getpwent F
+ getpwent_r F
+ getpwnam F
+ getpwnam_r F
+ getpwuid F
+ getpwuid_r F
+ getresgid F
+ getresuid F
+ getrpcbyname F
+ getrpcbyname_r F
+ getrpcbynumber F
+ getrpcbynumber_r F
+ getrpcent F
+ getrpcent_r F
+ getrpcport F
+ gets F
+ getsecretkey F
+ getservbyname F
+ getservbyname_r F
+ getservbyport F
+ getservbyport_r F
+ getservent F
+ getservent_r F
+ getsockname F
+ getspent F
+ getspent_r F
+ getspnam F
+ getspnam_r F
+ getsubopt F
+ gettext F
+ getttyent F
+ getttynam F
+ getuid F
+ getusershell F
+ getutent F
+ getutent_r F
+ getutid F
+ getutid_r F
+ getutline F
+ getutline_r F
+ getw F
+ getwd F
+ glob F
+ glob_pattern_p F
+ globfree F
+ gmtime F
+ gmtime_r 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
+ hsearch F
+ hsearch_r F
+ hstrerror F
+ htonl F
+ htons F
+ index 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
+ initgroups F
+ initstate F
+ initstate_r F
+ innetgr F
+ insque F
+ iruserok F
+ isalnum F
+ isalpha F
+ isascii F
+ isatty F
+ isblank F
+ iscntrl F
+ isdigit F
+ isfdtype F
+ isgraph F
+ isinf F
+ isinff F
+ isinfl F
+ islower F
+ isnan F
+ isnanf F
+ isnanl F
+ isprint F
+ ispunct F
+ isspace F
+ isupper F
+ iswalnum F
+ iswalpha F
+ iswcntrl F
+ iswctype F
+ iswdigit F
+ iswgraph F
+ iswlower F
+ iswprint F
+ iswpunct F
+ iswspace F
+ iswupper F
+ iswxdigit F
+ isxdigit F
+ jrand48 F
+ jrand48_r F
+ kill F
+ killpg F
+ l64a F
+ labs F
+ lchown F
+ lckpwdf F
+ lcong48 F
+ lcong48_r F
+ ldexp F
+ ldexpf F
+ ldexpl F
+ ldiv F
+ lfind F
+ listen F
+ llabs F
+ lldiv F
+ llseek F
+ loc1 D 0x4
+ loc2 D 0x4
+ localeconv F
+ localtime F
+ localtime_r F
+ lockf F
+ locs D 0x4
+ longjmp F
+ lrand48 F
+ lrand48_r F
+ lsearch F
+ lseek F
+ mallinfo F
+ malloc F
+ malloc_get_state F
+ malloc_set_state F
+ malloc_stats F
+ malloc_trim F
+ malloc_usable_size F
+ mallopt F
+ mallwatch D 0x4
+ mblen F
+ mbrlen F
+ mbrtowc F
+ mbsinit F
+ mbsnrtowcs F
+ mbsrtowcs F
+ mbstowcs F
+ mbtowc F
+ mcheck F
+ memalign F
+ memccpy F
+ memchr F
+ memcmp F
+ memcpy F
+ memfrob F
+ memmem F
+ memmove F
+ memset F
+ mkfifo F
+ mkstemp F
+ mktemp F
+ mktime F
+ modf F
+ modff F
+ modfl F
+ monstartup F
+ mprobe F
+ mrand48 F
+ mrand48_r F
+ msgctl F
+ msgget F
+ msgrcv F
+ msgsnd F
+ mtrace F
+ muntrace F
+ nice F
+ nl_langinfo F
+ nrand48 F
+ nrand48_r F
+ ntohl F
+ ntohs 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
+ open_memstream F
+ opendir F
+ openlog F
+ optarg D 0x4
+ opterr D 0x4
+ optind D 0x4
+ optopt D 0x4
+ parse_printf_format F
+ pathconf F
+ pclose F
+ perror F
+ personality F
+ pmap_getmaps F
+ pmap_getport F
+ pmap_rmtcall F
+ pmap_set F
+ pmap_unset F
+ popen F
+ printf F
+ profil F
+ program_invocation_name D 0x4
+ program_invocation_short_name D 0x4
+ pselect 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
+ putc F
+ putc_unlocked F
+ putchar F
+ putchar_unlocked F
+ putenv F
+ putpwent F
+ puts F
+ putspent F
+ pututline F
+ putw F
+ pvalloc F
+ qecvt F
+ qecvt_r F
+ qfcvt F
+ qfcvt_r F
+ qgcvt F
+ qsort F
+ raise F
+ rand F
+ rand_r F
+ random F
+ random_r F
+ rcmd F
+ re_comp F
+ re_compile_fastmap F
+ re_compile_pattern F
+ re_exec F
+ re_match F
+ re_match_2 F
+ re_max_failures D 0x4
+ re_search F
+ re_search_2 F
+ re_set_registers F
+ re_set_syntax F
+ re_syntax_options D 0x4
+ read F
+ readdir F
+ readdir_r F
+ readlink F
+ readv F
+ realloc F
+ realpath F
+ reboot F
+ regcomp F
+ regerror F
+ regexec F
+ regfree F
+ register_printf_function F
+ registerrpc F
+ remove F
+ remque F
+ res_init F
+ revoke F
+ rewind F
+ rewinddir F
+ rexec F
+ rexecoptions D 0x4
+ rindex F
+ rpc_createerr D 0x10
+ rpmatch F
+ rresvport F
+ ruserok F
+ ruserpass F
+ sbrk F
+ scalbn F
+ scalbnf F
+ scalbnl F
+ scandir F
+ scanf F
+ seed48 F
+ seed48_r F
+ seekdir F
+ semctl F
+ semget F
+ semop F
+ setaliasent F
+ setbuf F
+ setbuffer F
+ setcontext F
+ setegid F
+ setenv F
+ seteuid F
+ setfsent F
+ setfsgid F
+ setfsuid F
+ setgid F
+ setgrent F
+ setgroups F
+ sethostent F
+ sethostid F
+ setlinebuf F
+ setlocale F
+ setlogin F
+ setlogmask F
+ setmntent F
+ setnetent F
+ setnetgrent F
+ setpgrp F
+ setprotoent F
+ setpwent F
+ setregid F
+ setresgid F
+ setresuid F
+ setreuid F
+ setrpcent F
+ setservent F
+ setsockopt F
+ setspent F
+ setstate F
+ setstate_r F
+ setttyent F
+ setuid F
+ setusershell F
+ setutent F
+ setvbuf F
+ sgetspent F
+ sgetspent_r F
+ shmat F
+ shmctl F
+ shmdt F
+ shmget F
+ sigaction F
+ sigaddset F
+ sigandset F
+ sigblock F
+ sigdelset F
+ sigemptyset F
+ sigfillset F
+ siggetmask F
+ siginterrupt F
+ sigisemptyset F
+ sigismember F
+ siglongjmp F
+ signal F
+ sigorset F
+ sigpause F
+ sigpending F
+ sigprocmask F
+ sigreturn F
+ sigsetmask F
+ sigstack F
+ sigsuspend F
+ sigvec F
+ sigwait F
+ sleep F
+ snprintf F
+ socket F
+ sprintf F
+ srand F
+ srand48 F
+ srand48_r F
+ srandom F
+ srandom_r F
+ sscanf F
+ ssignal F
+ sstk F
+ stderr D 0x4
+ stdin D 0x4
+ stdout D 0x4
+ step F
+ stpcpy F
+ stpncpy F
+ strcasecmp F
+ strcat F
+ strchr F
+ strcmp F
+ strcoll F
+ strcpy F
+ strcspn F
+ strdup F
+ strerror F
+ strerror_r F
+ strfmon F
+ strfry F
+ strftime F
+ strlen F
+ strncasecmp F
+ strncat F
+ strncmp F
+ strncpy F
+ strndup F
+ strnlen F
+ strpbrk F
+ strptime F
+ strrchr F
+ strsep F
+ strsignal F
+ strspn F
+ strstr F
+ strtod F
+ strtof F
+ strtok F
+ strtok_r F
+ strtol F
+ strtold F
+ strtoll F
+ strtoq F
+ strtoul F
+ strtoull F
+ strtouq F
+ strxfrm F
+ stty F
+ svc_exit F
+ svc_fdset D 0x80
+ svc_getreq F
+ svc_getreqset F
+ 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
+ swab F
+ sys_errlist D 0x1ec
+ sys_nerr D 0x4
+ sys_sigabbrev D 0x80
+ sys_siglist D 0x80
+ syscall F
+ sysconf F
+ sysctl F
+ syslog F
+ system F
+ tcdrain F
+ tcflow F
+ tcflush F
+ tcgetattr F
+ tcgetpgrp F
+ tcsendbreak F
+ tcsetattr F
+ tcsetpgrp F
+ tdelete F
+ telldir F
+ tempnam F
+ textdomain F
+ tfind F
+ time F
+ timegm F
+ timelocal F
+ times F
+ timezone D 0x4
+ tmpfile F
+ tmpnam F
+ tmpnam_r F
+ toascii F
+ tolower F
+ toupper F
+ towctrans F
+ towlower F
+ towupper F
+ tr_break F
+ tsearch F
+ ttyname F
+ ttyname_r F
+ ttyslot F
+ twalk F
+ tzname D 0x8
+ tzset F
+ ualarm F
+ ulckpwdf F
+ ulimit F
+ ungetc F
+ unlink F
+ unsetenv F
+ updwtmp F
+ usleep F
+ ustat F
+ utimes F
+ utmpname F
+ valloc F
+ vasprintf F
+ vdprintf F
+ verr F
+ verrx F
+ vfprintf F
+ vfscanf F
+ vlimit F
+ vprintf F
+ vscanf F
+ vsnprintf F
+ vsprintf F
+ vsscanf F
+ vsyslog F
+ vtimes F
+ vwarn F
+ vwarnx F
+ wait F
+ wait3 F
+ waitpid F
+ warn F
+ warnx F
+ wcpcpy F
+ wcpncpy F
+ wcrtomb F
+ wcscat F
+ wcschr F
+ wcscmp F
+ wcscoll F
+ wcscpy F
+ wcscspn F
+ wcsdup F
+ wcslen F
+ wcsncat F
+ wcsncmp F
+ wcsncpy F
+ wcsnrtombs F
+ wcspbrk F
+ wcsrchr F
+ wcsrtombs F
+ wcsspn F
+ wcsstr F
+ wcstod F
+ wcstof F
+ wcstok F
+ wcstol F
+ wcstold F
+ wcstombs F
+ wcstoq F
+ wcstoul F
+ wcstouq F
+ wcswidth F
+ wcsxfrm F
+ wctob F
+ wctomb F
+ wctrans F
+ wctype F
+ wcwidth F
+ wmemchr F
+ wmemcmp F
+ wmemcpy F
+ wmemmove F
+ wmemset F
+ write F
+ writev F
+ xdr_accepted_reply F
+ xdr_array 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_int F
+ xdr_key_netstarg F
+ xdr_key_netstres F
+ xdr_keybuf F
+ xdr_keystatus F
+ xdr_long F
+ xdr_netobj F
+ xdr_opaque F
+ xdr_opaque_auth F
+ xdr_pmap F
+ xdr_pmaplist F
+ xdr_pointer F
+ xdr_reference F
+ xdr_rejected_reply F
+ xdr_replymsg F
+ xdr_rmtcall_args F
+ xdr_rmtcallres F
+ xdr_short F
+ xdr_string F
+ xdr_u_char F
+ xdr_u_int F
+ xdr_u_long F
+ xdr_u_short F
+ xdr_union 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
+GLIBC_2.1
+ GLIBC_2.1 A
+ _IO_2_1_stderr_ D 0x98
+ _IO_2_1_stdin_ D 0x98
+ _IO_2_1_stdout_ D 0x98
+ _IO_do_write F
+ _IO_fclose F
+ _IO_fdopen F
+ _IO_fgetpos64 F
+ _IO_file_attach F
+ _IO_file_close_it F
+ _IO_file_finish F
+ _IO_file_fopen F
+ _IO_file_init F
+ _IO_file_overflow F
+ _IO_file_seekoff F
+ _IO_file_setbuf F
+ _IO_file_sync F
+ _IO_file_underflow F
+ _IO_file_write F
+ _IO_file_xsputn F
+ _IO_fopen F
+ _IO_fsetpos64 F
+ _IO_getline_info F
+ _IO_popen F
+ _IO_proc_close F
+ _IO_proc_open F
+ __asprintf F
+ __backtrace F
+ __backtrace_symbols F
+ __backtrace_symbols_fd F
+ __duplocale F
+ __freelocale F
+ __fxstat64 F
+ __isalnum_l F
+ __isalpha_l F
+ __isascii_l F
+ __isblank_l F
+ __iscntrl_l F
+ __isdigit_l F
+ __isgraph_l F
+ __islower_l 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_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
+ __key_decryptsession_pk_LOCAL D 0x4
+ __key_encryptsession_pk_LOCAL D 0x4
+ __key_gendes_LOCAL D 0x4
+ __libc_allocate_rtsig F
+ __libc_current_sigrtmax F
+ __libc_current_sigrtmin F
+ __libc_freeres F
+ __libc_sa_len F
+ __lxstat64 F
+ __newlocale F
+ __pread64 F
+ __pwrite64 F
+ __rawmemchr F
+ __signbit F
+ __signbitf F
+ __strcasecmp_l F
+ __strcasestr F
+ __strcoll_l F
+ __strfmon_l F
+ __strncasecmp_l F
+ __strtod_l F
+ __strtof_l F
+ __strtol_l F
+ __strtold_l F
+ __strtoll_l F
+ __strtoul_l F
+ __strtoull_l F
+ __strxfrm_l F
+ __toascii_l F
+ __tolower_l F
+ __toupper_l F
+ __towctrans F
+ __towctrans_l F
+ __towlower_l F
+ __towupper_l F
+ __wcscasecmp_l F
+ __wcscoll_l F
+ __wcsncasecmp_l F
+ __wcstod_l F
+ __wcstof_l F
+ __wcstol_l F
+ __wcstold_l F
+ __wcstoll_l F
+ __wcstoul_l F
+ __wcstoull_l F
+ __wcsxfrm_l F
+ __wctype_l F
+ __xstat64 F
+ _authenticate F
+ _dl_mcount_wrapper F
+ _dl_mcount_wrapper_check F
+ _sys_errlist D 0x1f4
+ _sys_nerr D 0x4
+ _sys_siglist D 0x100
+ addseverity 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
+ authdes_create F
+ authdes_getucred F
+ authdes_pk_create F
+ backtrace F
+ backtrace_symbols F
+ backtrace_symbols_fd F
+ cbc_crypt F
+ clntunix_create F
+ creat64 F
+ des_setparity F
+ ecb_crypt F
+ endutxent F
+ fattach F
+ fclose F
+ fdetach F
+ fdopen F
+ ffsl F
+ ffsll F
+ fgetc_unlocked F
+ fgetpos64 F
+ fgets_unlocked F
+ fmtmsg F
+ fopen F
+ fopen64 F
+ fputs_unlocked F
+ fread_unlocked F
+ freopen64 F
+ fseeko F
+ fseeko64 F
+ fsetpos64 F
+ fstatfs64 F
+ fstatvfs F
+ fstatvfs64 F
+ ftello F
+ ftello64 F
+ ftruncate64 F
+ ftw64 F
+ fwrite_unlocked F
+ gai_strerror F
+ getcontext F
+ getdate F
+ getdate_err D 0x4
+ getdate_r F
+ getmsg F
+ getnameinfo F
+ getnetname F
+ getpt F
+ getrlimit64 F
+ getutxent F
+ getutxid F
+ getutxline F
+ glob64 F
+ globfree64 F
+ gnu_get_libc_release F
+ gnu_get_libc_version F
+ grantpt F
+ host2netname F
+ iconv F
+ iconv_close F
+ iconv_open F
+ if_freenameindex F
+ if_indextoname F
+ if_nameindex F
+ if_nametoindex F
+ in6addr_any D 0x10
+ in6addr_loopback D 0x10
+ isastream F
+ iswblank 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
+ lockf64 F
+ lseek64 F
+ makecontext F
+ mempcpy F
+ mmap64 F
+ netname2host F
+ netname2user F
+ nftw F
+ nftw64 F
+ ntp_gettime F
+ open64 F
+ passwd2des F
+ pclose F
+ popen F
+ pread F
+ pread64 F
+ printf_size F
+ printf_size_info F
+ pthread_attr_init F
+ ptsname F
+ ptsname_r F
+ putgrent F
+ putmsg F
+ pututxline F
+ pwrite F
+ pwrite64 F
+ rawmemchr F
+ readdir64 F
+ readdir64_r F
+ rtime F
+ scandir64 F
+ setrlimit64 F
+ setutxent F
+ sighold F
+ sigignore F
+ sigqueue F
+ sigrelse F
+ sigset F
+ sigtimedwait F
+ sigwaitinfo F
+ statfs64 F
+ statvfs F
+ statvfs64 F
+ strcasestr F
+ strtoimax F
+ strtoumax F
+ strverscmp F
+ svcunix_create F
+ svcunixfd_create F
+ swapcontext F
+ sys_errlist D 0x1f4
+ sys_nerr D 0x4
+ sys_sigabbrev D 0x100
+ sys_siglist D 0x100
+ sysv_signal F
+ tcgetsid F
+ tdestroy F
+ tmpfile F
+ tmpfile64 F
+ truncate64 F
+ unlockpt F
+ updwtmpx F
+ user2netname F
+ utmpxname F
+ versionsort F
+ versionsort64 F
+ waitid F
+ wcscasecmp F
+ wcsncasecmp F
+ wcsnlen F
+ wcstoimax F
+ wcstoll F
+ wcstoull F
+ wcstoumax F
+ wcswcs F
+ wordexp F
+ wordfree F
+ xdecrypt F
+ xdr_authdes_cred F
+ xdr_authdes_verf F
+ xdr_getcredres F
+ xdr_int16_t F
+ xdr_int32_t F
+ xdr_int8_t F
+ xdr_netnamestr F
+ xdr_sizeof F
+ xdr_uint16_t F
+ xdr_uint32_t F
+ xdr_uint8_t F
+ xdr_unixcred F
+__poll GLIBC_2.1 w ? D .text 00000000
+capget GLIBC_2.1 g ? D .text 00000000
+capset GLIBC_2.1 g ? D .text 00000000
+getpmsg GLIBC_2.1 g ? D .text 00000000
+ntp_adjtime GLIBC_2.1 w ? D .text 00000000
+putpmsg GLIBC_2.1 g ? D .text 00000000
+sendfile GLIBC_2.1 g ? D .text 00000000
+umount2 GLIBC_2.1 w ? D .text 00000000
+GLIBC_2.1.1
+ GLIBC_2.1.1 A
+ _Exit F
+ __mempcpy_small F
+ __stpcpy_small F
+ __strcpy_small F
+ __strcspn_c1 F
+ __strcspn_c2 F
+ __strcspn_c3 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
+ __strtok_r_1c F
+ __strverscmp F
+ getutmp F
+ getutmpx F
+ imaxabs F
+ imaxdiv F
+ strchrnul F
+ xdr_hyper F
+ xdr_int64_t F
+ xdr_longlong_t F
+ xdr_u_hyper F
+ xdr_u_longlong_t F
+ xdr_uint64_t F
+GLIBC_2.1.2
+ GLIBC_2.1.2 A
+ getaliasbyname_r F
+ getaliasent_r F
+ getgrent_r F
+ getgrgid_r F
+ getgrnam_r F
+ gethostbyaddr_r F
+ gethostbyname2_r F
+ gethostbyname_r F
+ gethostent_r F
+ getnetbyaddr_r F
+ getnetbyname_r F
+ getnetent_r F
+ getprotobyname_r F
+ getprotobynumber_r F
+ getprotoent_r F
+ getpwent_r F
+ getpwnam_r F
+ getpwuid_r F
+ getrpcbyname_r F
+ getrpcbynumber_r F
+ getrpcent_r F
+ getservbyname_r F
+ getservbyport_r F
+ getservent_r F
+ getspent_r F
+ getspnam_r F
+__vfork GLIBC_2.1.2 g ? D .text 00000000
+GLIBC_2.1.3
+ GLIBC_2.1.3 A
+ __cxa_atexit F
+ __cxa_finalize F
+ __sigsuspend F
+GLIBC_2.10
+ GLIBC_2.10 A
+ __cxa_at_quick_exit F
+ __posix_getopt F
+ accept4 F
+ endsgent F
+ fallocate F
+ fgetsgent F
+ fgetsgent_r F
+ getsgent F
+ getsgent_r F
+ getsgnam F
+ getsgnam_r F
+ malloc_info F
+ preadv F
+ preadv64 F
+ psiginfo F
+ putsgent F
+ pwritev F
+ pwritev64 F
+ quick_exit F
+ register_printf_modifier F
+ register_printf_specifier F
+ register_printf_type F
+ setsgent F
+ sgetsgent F
+ sgetsgent_r F
+GLIBC_2.11
+ GLIBC_2.11 A
+ __longjmp_chk F
+ execvpe F
+ fallocate64 F
+ mkostemps F
+ mkostemps64 F
+ mkstemps F
+ mkstemps64 F
+GLIBC_2.12
+ GLIBC_2.12 A
+ _sys_errlist D 0x21c
+ _sys_nerr D 0x4
+ ntp_gettimex F
+ recvmmsg F
+ sys_errlist D 0x21c
+ sys_nerr D 0x4
+GLIBC_2.13
+ GLIBC_2.13 A
+ prlimit F
+fanotify_init GLIBC_2.13 g ? D .text 00000000
+fanotify_mark GLIBC_2.13 g ? D .text 00000000
+prlimit64 GLIBC_2.13 g ? D .text 00000000
+GLIBC_2.14
+ GLIBC_2.14 A
+ sendmmsg F
+clock_adjtime GLIBC_2.14 g ? D .text 00000000
+name_to_handle_at GLIBC_2.14 g ? D .text 00000000
+open_by_handle_at GLIBC_2.14 g ? D .text 00000000
+setns GLIBC_2.14 g ? D .text 00000000
+syncfs GLIBC_2.14 g ? D .text 00000000
+GLIBC_2.15
+ GLIBC_2.15 A
+ __fdelt_chk F
+ __fdelt_warn F
+ posix_spawn F
+ posix_spawnp F
+ scandirat F
+ scandirat64 F
+process_vm_readv GLIBC_2.15 g ? D .text 00000000
+process_vm_writev GLIBC_2.15 g ? D .text 00000000
+GLIBC_2.16
+ GLIBC_2.16 A
+ __getauxval F
+ __poll_chk F
+ __ppoll_chk F
+ aligned_alloc F
+ c16rtomb F
+ c32rtomb F
+ getauxval F
+ mbrtoc16 F
+ mbrtoc32 F
+ timespec_get F
+GLIBC_2.17
+ GLIBC_2.17 A
+ clock_getcpuclockid F
+ clock_getres F
+ clock_gettime F
+ clock_nanosleep F
+ clock_settime F
+ secure_getenv F
+GLIBC_2.2
+ GLIBC_2.2 A
+ _IO_adjust_wcolumn F
+ _IO_fgetpos F
+ _IO_fgetpos64 F
+ _IO_free_wbackup_area F
+ _IO_fsetpos F
+ _IO_fsetpos64 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_list_lock F
+ _IO_list_resetlock F
+ _IO_list_unlock F
+ _IO_seekwmark F
+ _IO_sputbackwc F
+ _IO_sungetwc F
+ _IO_switch_to_main_wget_area F
+ _IO_switch_to_wbackup_area F
+ _IO_switch_to_wget_mode F
+ _IO_unsave_wmarkers 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
+ __assert F
+ __ctype32_tolower D 0x4
+ __ctype32_toupper D 0x4
+ __cyg_profile_func_enter F
+ __cyg_profile_func_exit F
+ __endmntent F
+ __fbufsize F
+ __flbf F
+ __fpending F
+ __fpurge F
+ __freadable F
+ __freading F
+ __fsetlocking F
+ __fwritable F
+ __fwriting F
+ __fxstat64 F
+ __getmntent_r F
+ __lxstat64 F
+ __nl_langinfo_l F
+ __open64 F
+ __res_init F
+ __res_nclose F
+ __res_ninit F
+ __res_state F
+ __setmntent F
+ __strndup F
+ __sysconf F
+ __sysctl F
+ __wctrans_l F
+ __woverflow F
+ __wuflow F
+ __wunderflow F
+ __xpg_sigpause F
+ __xstat64 F
+ _flushlbf F
+ _res_hconf D 0x30
+ alphasort64 F
+ bind_textdomain_codeset F
+ dcngettext F
+ dngettext F
+ fgetpos F
+ fgetpos64 F
+ fgetwc F
+ fgetwc_unlocked F
+ fgetws F
+ fgetws_unlocked F
+ fmemopen F
+ fopencookie F
+ fputwc F
+ fputwc_unlocked F
+ fputws F
+ fputws_unlocked F
+ fsetpos F
+ fsetpos64 F
+ fwide F
+ fwprintf F
+ fwscanf F
+ getdirentries64 F
+ getloadavg F
+ getrlimit64 F
+ getwc F
+ getwc_unlocked F
+ getwchar F
+ getwchar_unlocked F
+ glob64 F
+ iruserok_af F
+ localeconv F
+ mcheck_check_all F
+ mcheck_pedantic F
+ memrchr F
+ mkdtemp F
+ mkstemp64 F
+ moncontrol F
+ msgctl F
+ ngettext F
+ posix_fadvise F
+ posix_fadvise64 F
+ posix_fallocate F
+ posix_fallocate64 F
+ posix_madvise F
+ posix_memalign 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
+ putwc F
+ putwc_unlocked F
+ putwchar F
+ putwchar_unlocked F
+ rcmd_af F
+ readdir64 F
+ readdir64_r F
+ rexec_af F
+ rresvport_af F
+ ruserok_af F
+ scandir64 F
+ semctl F
+ setrlimit F
+ shmctl F
+ svc_getreq_common F
+ svc_getreq_poll F
+ svc_max_pollfd D 0x4
+ svc_pollfd D 0x4
+ swprintf F
+ swscanf F
+ ungetwc F
+ versionsort64 F
+ vfwprintf F
+ vfwscanf F
+ vswprintf F
+ vswscanf F
+ vwprintf F
+ vwscanf F
+ wcschrnul F
+ wcsftime F
+ wmempcpy F
+ wprintf F
+ wscanf F
+__statfs GLIBC_2.2 g ? D .text 00000000
+getrlimit GLIBC_2.2 g ? D .text 00000000
+mincore GLIBC_2.2 g ? D .text 00000000
+GLIBC_2.2.1
+ GLIBC_2.2.1 A
+ posix_openpt F
+pivot_root GLIBC_2.2.1 g ? D .text 00000000
+GLIBC_2.2.2
+ GLIBC_2.2.2 A
+ __nss_hostname_digits_dots F
+GLIBC_2.2.3
+ GLIBC_2.2.3 A
+ __rpc_thread_createerr F
+ __rpc_thread_svc_fdset F
+ __rpc_thread_svc_max_pollfd F
+ __rpc_thread_svc_pollfd F
+ fnmatch F
+ sprofil F
+GLIBC_2.2.4
+ GLIBC_2.2.4 A
+ dl_iterate_phdr F
+ getgrouplist F
+ sockatmark F
+GLIBC_2.2.6
+ GLIBC_2.2.6 A
+__nanosleep GLIBC_2.2.6 w ? D .text 00000000
+GLIBC_2.3
+ GLIBC_2.3 A
+ __ctype_b_loc F
+ __ctype_tolower_loc F
+ __ctype_toupper_loc F
+ __isctype F
+ __strftime_l F
+ __uselocale F
+ __wcsftime_l F
+ _sys_errlist D 0x1f8
+ _sys_nerr D 0x4
+ duplocale F
+ freeifaddrs F
+ freelocale F
+ futimes F
+ getifaddrs F
+ isalnum_l F
+ isalpha_l F
+ isblank_l F
+ iscntrl_l F
+ isctype F
+ isdigit_l F
+ isgraph_l F
+ islower_l 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_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
+ lutimes F
+ newlocale F
+ nl_langinfo_l F
+ readahead F
+ realpath F
+ strcasecmp_l F
+ strcoll_l F
+ strfmon_l F
+ strftime_l F
+ strncasecmp_l F
+ strtod_l F
+ strtof_l F
+ strtol_l F
+ strtold_l F
+ strtoll_l F
+ strtoul_l F
+ strtoull_l F
+ strxfrm_l F
+ sys_errlist D 0x1f8
+ sys_nerr D 0x4
+ tolower_l F
+ toupper_l F
+ towctrans_l F
+ towlower_l F
+ towupper_l F
+ uselocale F
+ wcscasecmp_l F
+ wcscoll_l F
+ wcsftime_l F
+ wcsncasecmp_l F
+ wcstod_l F
+ wcstof_l F
+ wcstol_l F
+ wcstold_l F
+ wcstoll_l F
+ wcstoul_l F
+ wcstoull_l F
+ wcsxfrm_l F
+ wctrans_l F
+ wctype_l F
+fgetxattr GLIBC_2.3 g ? D .text 00000000
+flistxattr GLIBC_2.3 g ? D .text 00000000
+fremovexattr GLIBC_2.3 g ? D .text 00000000
+fsetxattr GLIBC_2.3 g ? D .text 00000000
+getxattr GLIBC_2.3 g ? D .text 00000000
+lgetxattr GLIBC_2.3 g ? D .text 00000000
+listxattr GLIBC_2.3 g ? D .text 00000000
+llistxattr GLIBC_2.3 g ? D .text 00000000
+lremovexattr GLIBC_2.3 g ? D .text 00000000
+lsetxattr GLIBC_2.3 g ? D .text 00000000
+removexattr GLIBC_2.3 g ? D .text 00000000
+sendfile64 GLIBC_2.3 g ? D .text 00000000
+setxattr GLIBC_2.3 g ? D .text 00000000
+GLIBC_2.3.2
+ GLIBC_2.3.2 A
+ __register_atfork F
+ lchmod 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
+ strptime_l F
+epoll_create GLIBC_2.3.2 g ? D .text 00000000
+epoll_ctl GLIBC_2.3.2 g ? D .text 00000000
+epoll_wait GLIBC_2.3.2 g ? D .text 00000000
+GLIBC_2.3.3
+ GLIBC_2.3.3 A
+ _sys_siglist D 0x104
+ gnu_dev_major F
+ gnu_dev_makedev F
+ gnu_dev_minor 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
+ nftw F
+ nftw64 F
+ posix_fadvise64 F
+ posix_fallocate64 F
+ sched_getaffinity F
+ sched_setaffinity F
+ semtimedop F
+ sys_sigabbrev D 0x104
+ sys_siglist D 0x104
+remap_file_pages GLIBC_2.3.3 w ? D .text 00000000
+GLIBC_2.3.4
+ GLIBC_2.3.4 A
+ __chk_fail F
+ __fprintf_chk F
+ __gets_chk F
+ __memcpy_chk F
+ __memmove_chk F
+ __mempcpy_chk F
+ __memset_chk F
+ __printf_chk F
+ __snprintf_chk F
+ __sprintf_chk F
+ __stpcpy_chk F
+ __strcat_chk F
+ __strcpy_chk F
+ __strncat_chk F
+ __strncpy_chk F
+ __vfprintf_chk F
+ __vprintf_chk F
+ __vsnprintf_chk F
+ __vsprintf_chk F
+ __xpg_strerror_r F
+ getipv4sourcefilter F
+ getsourcefilter F
+ regexec F
+ sched_getaffinity F
+ sched_setaffinity F
+ setipv4sourcefilter F
+ setsourcefilter F
+ xdr_quad_t F
+ xdr_u_quad_t F
+GLIBC_2.4
+ GLIBC_2.4 A
+ __confstr_chk F
+ __fgets_chk F
+ __fgets_unlocked_chk F
+ __fgetws_chk F
+ __fgetws_unlocked_chk F
+ __fwprintf_chk F
+ __fxstatat F
+ __fxstatat64 F
+ __getcwd_chk F
+ __getdomainname_chk F
+ __getgroups_chk F
+ __gethostname_chk F
+ __getlogin_r_chk F
+ __getwd_chk F
+ __mbsnrtowcs_chk F
+ __mbsrtowcs_chk F
+ __mbstowcs_chk F
+ __pread64_chk F
+ __pread_chk F
+ __ptsname_r_chk F
+ __read_chk F
+ __readlink_chk F
+ __realpath_chk F
+ __recv_chk F
+ __recvfrom_chk F
+ __stack_chk_fail F
+ __stpncpy_chk F
+ __swprintf_chk F
+ __syslog_chk F
+ __ttyname_r_chk F
+ __vfwprintf_chk F
+ __vswprintf_chk F
+ __vsyslog_chk F
+ __vwprintf_chk F
+ __wcpcpy_chk F
+ __wcpncpy_chk F
+ __wcrtomb_chk F
+ __wcscat_chk F
+ __wcscpy_chk F
+ __wcsncat_chk F
+ __wcsncpy_chk F
+ __wcsnrtombs_chk F
+ __wcsrtombs_chk F
+ __wcstombs_chk F
+ __wctomb_chk F
+ __wmemcpy_chk F
+ __wmemmove_chk F
+ __wmempcpy_chk F
+ __wmemset_chk F
+ __wprintf_chk F
+ __xmknodat F
+ _sys_errlist D 0x210
+ _sys_nerr D 0x4
+ eaccess F
+ faccessat F
+ fchmodat F
+ fchownat F
+ fdopendir F
+ futimesat F
+ linkat F
+ mkdirat F
+ mkfifoat F
+ open_wmemstream F
+ openat F
+ openat64 F
+ ppoll F
+ readlinkat F
+ renameat F
+ symlinkat F
+ sys_errlist D 0x210
+ sys_nerr D 0x4
+ unlinkat F
+inotify_add_watch GLIBC_2.4 g ? D .text 00000000
+inotify_init GLIBC_2.4 g ? D .text 00000000
+inotify_rm_watch GLIBC_2.4 g ? D .text 00000000
+unshare GLIBC_2.4 g ? D .text 00000000
+GLIBC_2.5
+ GLIBC_2.5 A
+ __readlinkat_chk 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_rth_add F
+ inet6_rth_getaddr F
+ inet6_rth_init F
+ inet6_rth_reverse F
+ inet6_rth_segments F
+ inet6_rth_space F
+splice GLIBC_2.5 g ? D .text 00000000
+tee GLIBC_2.5 g ? D .text 00000000
+vmsplice GLIBC_2.5 g ? D .text 00000000
+GLIBC_2.6
+ GLIBC_2.6 A
+ __sched_cpucount F
+ epoll_pwait F
+ futimens F
+ sched_getcpu F
+ strerror_l F
+ sync_file_range F
+ utimensat F
+GLIBC_2.7
+ GLIBC_2.7 A
+ __fread_chk F
+ __fread_unlocked_chk 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
+ __open64_2 F
+ __open_2 F
+ __openat64_2 F
+ __openat_2 F
+ __sched_cpualloc F
+ __sched_cpufree F
+ eventfd F
+ eventfd_read F
+ eventfd_write F
+ mkostemp F
+ mkostemp64 F
+ signalfd F
+GLIBC_2.8
+ GLIBC_2.8 A
+ __asprintf_chk F
+ __dprintf_chk F
+ __obstack_printf_chk F
+ __obstack_vprintf_chk F
+ __vasprintf_chk F
+ __vdprintf_chk F
+ qsort_r F
+timerfd_create GLIBC_2.8 g ? D .text 00000000
+timerfd_gettime GLIBC_2.8 g ? D .text 00000000
+timerfd_settime GLIBC_2.8 g ? D .text 00000000
+GLIBC_2.9
+ GLIBC_2.9 A
+dup3 GLIBC_2.9 w ? D .text 00000000
+epoll_create1 GLIBC_2.9 g ? D .text 00000000
+inotify_init1 GLIBC_2.9 g ? D .text 00000000
+pipe2 GLIBC_2.9 w ? D .text 00000000
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..1df145f
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libcrypt.abilist
@@ -0,0 +1,9 @@
+GLIBC_2.0
+ GLIBC_2.0 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..62e6b41
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libdl.abilist
@@ -0,0 +1,18 @@
+GLIBC_2.0
+ GLIBC_2.0 A
+ dladdr F
+ dlclose F
+ dlerror F
+ dlopen F
+ dlsym F
+GLIBC_2.1
+ GLIBC_2.1 A
+ dlopen F
+ dlvsym F
+GLIBC_2.3.3
+ GLIBC_2.3.3 A
+ dladdr1 F
+ dlinfo F
+GLIBC_2.3.4
+ GLIBC_2.3.4 A
+ dlmopen 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..7516c7c
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libm.abilist
@@ -0,0 +1,383 @@
+GLIBC_2.0
+ GLIBC_2.0 A
+ _LIB_VERSION D 0x4
+ 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
+ cbrt F
+ cbrtf F
+ cbrtl F
+ ceil F
+ ceilf F
+ ceill F
+ copysign F
+ copysignf F
+ copysignl F
+ cos F
+ cosf F
+ cosh F
+ coshf F
+ coshl F
+ cosl F
+ drem F
+ dremf F
+ dreml F
+ erf F
+ erfc F
+ erfcf F
+ erfcl F
+ erff F
+ erfl F
+ exp F
+ expf F
+ expl F
+ expm1 F
+ expm1f F
+ expm1l F
+ fabs F
+ fabsf F
+ fabsl F
+ finite F
+ finitef F
+ finitel F
+ floor F
+ floorf F
+ floorl 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
+ log F
+ log10 F
+ log10f F
+ log10l F
+ log1p F
+ log1pf F
+ log1pl F
+ logb F
+ logbf F
+ logbl F
+ logf F
+ logl F
+ matherr F
+ modf F
+ modff F
+ modfl F
+ nextafter F
+ nextafterf F
+ nextafterl F
+ pow F
+ powf F
+ powl F
+ remainder F
+ remainderf F
+ remainderl F
+ rint F
+ rintf F
+ rintl F
+ scalb F
+ scalbf F
+ scalbl F
+ scalbn F
+ scalbnf F
+ scalbnl F
+ signgam D 0x4
+ significand F
+ significandf F
+ significandl F
+ sin 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
+ y0 F
+ y0f F
+ y0l F
+ y1 F
+ y1f F
+ y1l F
+ yn F
+ ynf F
+ ynl F
+GLIBC_2.1
+ GLIBC_2.1 A
+ __clog10 F
+ __clog10f F
+ __clog10l F
+ __finite F
+ __finitef F
+ __finitel F
+ __fpclassify F
+ __fpclassifyf F
+ __signbit F
+ __signbitf 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
+ ccos F
+ ccosf F
+ ccosh F
+ ccoshf F
+ ccoshl F
+ ccosl 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
+ 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
+ exp10 F
+ exp10f F
+ exp10l F
+ exp2 F
+ exp2f F
+ fdim F
+ fdimf F
+ fdiml F
+ feclearexcept F
+ fegetenv F
+ fegetexceptflag F
+ fegetround F
+ feholdexcept F
+ feraiseexcept F
+ fesetenv F
+ fesetexceptflag F
+ fesetround F
+ fetestexcept F
+ feupdateenv F
+ fma F
+ fmaf F
+ fmal F
+ fmax F
+ fmaxf F
+ fmaxl F
+ fmin F
+ fminf F
+ fminl F
+ llrint F
+ llrintf F
+ llrintl F
+ llround F
+ llroundf F
+ llroundl F
+ log2 F
+ log2f F
+ log2l F
+ lrint F
+ lrintf F
+ lrintl F
+ lround F
+ lroundf F
+ lroundl F
+ nan F
+ nanf F
+ nanl F
+ nearbyint F
+ nearbyintf F
+ nearbyintl F
+ nexttoward F
+ nexttowardf F
+ nexttowardl F
+ pow10 F
+ pow10f F
+ pow10l F
+ remquo F
+ remquof F
+ remquol F
+ round F
+ roundf F
+ roundl F
+ scalbln F
+ scalblnf F
+ scalblnl F
+ sincos F
+ sincosf F
+ sincosl F
+ tgamma F
+ tgammaf F
+ tgammal F
+ trunc F
+ truncf F
+ truncl F
+GLIBC_2.15
+ GLIBC_2.15 A
+ __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
+ __cosh_finite F
+ __coshf_finite F
+ __exp10_finite F
+ __exp10f_finite F
+ __exp2_finite F
+ __exp2f_finite F
+ __exp_finite F
+ __expf_finite F
+ __fmod_finite F
+ __fmodf_finite 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
+ __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
+GLIBC_2.2
+ GLIBC_2.2 A
+ feclearexcept F
+ fedisableexcept F
+ feenableexcept F
+ fegetenv F
+ fegetexcept F
+ fegetexceptflag F
+ feraiseexcept F
+ fesetenv F
+ fesetexceptflag F
+ feupdateenv F
+GLIBC_2.4
+ GLIBC_2.4 A
+ exp2l 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..4241e2d
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libnsl.abilist
@@ -0,0 +1,127 @@
+GLIBC_2.0
+ GLIBC_2.0 A
+ __yp_check F
+ xdr_domainname F
+ xdr_keydat F
+ xdr_mapname F
+ xdr_peername F
+ xdr_valdat F
+ xdr_yp_buf 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
+GLIBC_2.1
+ GLIBC_2.1 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
+ 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_obj_p F
+GLIBC_2.2
+ GLIBC_2.2 A
+ xdr_ypall 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..b54080d9
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libpthread.abilist
@@ -0,0 +1,267 @@
+GLIBC_2.0
+ GLIBC_2.0 A
+ _IO_flockfile F
+ _IO_ftrylockfile F
+ _IO_funlockfile F
+ __errno_location F
+ __fcntl F
+ __fork F
+ __h_errno_location 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_setspecific F
+ __sigaction F
+ __wait F
+ _pthread_cleanup_pop F
+ _pthread_cleanup_pop_restore F
+ _pthread_cleanup_push F
+ _pthread_cleanup_push_defer F
+ fcntl F
+ flockfile F
+ fork F
+ ftrylockfile F
+ funlockfile F
+ longjmp F
+ pthread_atfork 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_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_init F
+ pthread_create F
+ pthread_detach F
+ pthread_equal F
+ pthread_exit 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_destroy F
+ pthread_mutex_init F
+ pthread_mutex_lock F
+ pthread_mutex_trylock F
+ pthread_mutex_unlock F
+ pthread_mutexattr_destroy F
+ pthread_mutexattr_getkind_np F
+ pthread_mutexattr_init F
+ pthread_mutexattr_setkind_np F
+ pthread_once F
+ pthread_self F
+ pthread_setcancelstate F
+ pthread_setcanceltype F
+ pthread_setschedparam F
+ pthread_setspecific F
+ pthread_sigmask F
+ pthread_testcancel F
+ raise F
+ sem_destroy F
+ sem_getvalue F
+ sem_init F
+ sem_post F
+ sem_trywait F
+ sem_wait F
+ sigaction F
+ siglongjmp F
+ sigwait F
+ system F
+ tcdrain F
+ wait F
+ waitpid F
+__close GLIBC_2.0 w ? D .text 00000000
+__connect GLIBC_2.0 w ? D .text 00000000
+__lseek GLIBC_2.0 w ? D .text 00000000
+__open GLIBC_2.0 w ? D .text 00000000
+__read GLIBC_2.0 w ? D .text 00000000
+__send GLIBC_2.0 w ? D .text 00000000
+__write GLIBC_2.0 w ? D .text 00000000
+accept GLIBC_2.0 w ? D .text 00000000
+close GLIBC_2.0 w ? D .text 00000000
+connect GLIBC_2.0 w ? D .text 00000000
+fsync GLIBC_2.0 w ? D .text 00000000
+lseek GLIBC_2.0 w ? D .text 00000000
+msync GLIBC_2.0 w ? D .text 00000000
+nanosleep GLIBC_2.0 w ? D .text 00000000
+open GLIBC_2.0 w ? D .text 00000000
+pause GLIBC_2.0 w ? D .text 00000000
+read GLIBC_2.0 w ? D .text 00000000
+recv GLIBC_2.0 w ? D .text 00000000
+recvfrom GLIBC_2.0 w ? D .text 00000000
+recvmsg GLIBC_2.0 w ? D .text 00000000
+send GLIBC_2.0 w ? D .text 00000000
+sendmsg GLIBC_2.0 w ? D .text 00000000
+sendto GLIBC_2.0 w ? D .text 00000000
+vfork GLIBC_2.0 w ? D .text 00000000
+write GLIBC_2.0 w ? D .text 00000000
+GLIBC_2.1
+ GLIBC_2.1 A
+ __libc_allocate_rtsig F
+ __libc_current_sigrtmax F
+ __libc_current_sigrtmin F
+ pthread_attr_getguardsize F
+ pthread_attr_getstackaddr F
+ pthread_attr_getstacksize F
+ pthread_attr_init F
+ pthread_attr_setguardsize F
+ pthread_attr_setstackaddr F
+ pthread_attr_setstacksize F
+ pthread_create F
+ pthread_getconcurrency F
+ pthread_mutexattr_gettype F
+ pthread_mutexattr_settype 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_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_setconcurrency F
+ sem_destroy F
+ sem_getvalue F
+ sem_init F
+ sem_post F
+ sem_trywait F
+ sem_wait F
+GLIBC_2.1.1
+ GLIBC_2.1.1 A
+ sem_close F
+ sem_open F
+ sem_unlink F
+GLIBC_2.1.2
+ GLIBC_2.1.2 A
+__vfork GLIBC_2.1.2 g ? D .text 00000000
+GLIBC_2.11
+ GLIBC_2.11 A
+ pthread_sigqueue F
+GLIBC_2.12
+ GLIBC_2.12 A
+ pthread_getname_np F
+ pthread_mutex_consistent F
+ pthread_mutexattr_getrobust F
+ pthread_mutexattr_setrobust F
+ pthread_setname_np F
+GLIBC_2.2
+ GLIBC_2.2 A
+ __open64 F
+ __pread64 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
+ __pwrite64 F
+ __res_state F
+ lseek64 F
+ open64 F
+ pread F
+ pread64 F
+ pthread_attr_getstack F
+ pthread_attr_setstack F
+ pthread_barrier_destroy F
+ pthread_barrier_init F
+ pthread_barrier_wait F
+ pthread_barrierattr_destroy F
+ pthread_barrierattr_init F
+ pthread_barrierattr_setpshared F
+ pthread_condattr_getpshared F
+ pthread_condattr_setpshared F
+ pthread_getcpuclockid F
+ pthread_mutex_timedlock F
+ pthread_mutexattr_getpshared F
+ pthread_mutexattr_setpshared F
+ pthread_rwlock_timedrdlock F
+ pthread_rwlock_timedwrlock F
+ pthread_spin_destroy F
+ pthread_spin_init F
+ pthread_spin_lock F
+ pthread_spin_trylock F
+ pthread_spin_unlock F
+ pthread_yield F
+ pwrite F
+ pwrite64 F
+ sem_timedwait F
+GLIBC_2.2.3
+ GLIBC_2.2.3 A
+ pthread_getattr_np F
+GLIBC_2.2.6
+ GLIBC_2.2.6 A
+__nanosleep GLIBC_2.2.6 w ? D .text 00000000
+GLIBC_2.3.2
+ GLIBC_2.3.2 A
+ pthread_cond_broadcast F
+ pthread_cond_destroy F
+ pthread_cond_init F
+ pthread_cond_signal F
+ pthread_cond_timedwait F
+ pthread_cond_wait F
+GLIBC_2.3.3
+ GLIBC_2.3.3 A
+ __pthread_cleanup_routine F
+ __pthread_register_cancel F
+ __pthread_register_cancel_defer F
+ __pthread_unregister_cancel F
+ __pthread_unregister_cancel_restore F
+ __pthread_unwind_next F
+ pthread_attr_getaffinity_np F
+ pthread_attr_setaffinity_np F
+ pthread_barrierattr_getpshared F
+ pthread_condattr_getclock F
+ pthread_condattr_setclock F
+ pthread_getaffinity_np F
+ pthread_setaffinity_np F
+ pthread_timedjoin_np F
+ pthread_tryjoin_np F
+GLIBC_2.3.4
+ GLIBC_2.3.4 A
+ pthread_attr_getaffinity_np F
+ pthread_attr_setaffinity_np F
+ pthread_getaffinity_np F
+ pthread_setaffinity_np F
+ pthread_setschedprio F
+GLIBC_2.4
+ GLIBC_2.4 A
+ pthread_mutex_consistent_np F
+ pthread_mutex_getprioceiling F
+ pthread_mutex_setprioceiling F
+ pthread_mutexattr_getprioceiling F
+ pthread_mutexattr_getprotocol F
+ pthread_mutexattr_getrobust_np F
+ pthread_mutexattr_setprioceiling F
+ pthread_mutexattr_setprotocol F
+ pthread_mutexattr_setrobust_np 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..f68333d
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libresolv.abilist
@@ -0,0 +1,104 @@
+GLIBC_2.0
+ GLIBC_2.0 A
+ __b64_ntop F
+ __b64_pton F
+ __dn_comp F
+ __dn_count_labels 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_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_isourserver F
+ __res_mailok F
+ __res_nameinquery F
+ __res_ownok F
+ __res_queriesmatch 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
+ dn_expand F
+ inet_net_ntop F
+ inet_net_pton F
+ inet_neta F
+ res_gethostbyaddr F
+ res_gethostbyname F
+ res_gethostbyname2 F
+ res_mkquery F
+ res_query F
+ res_querydomain F
+ res_search F
+ res_send_setqhook F
+ res_send_setrhook F
+GLIBC_2.2
+ GLIBC_2.2 A
+ __dn_expand F
+ __res_hostalias F
+ __res_mkquery F
+ __res_nmkquery F
+ __res_nquery F
+ __res_nquerydomain F
+ __res_nsearch F
+ __res_nsend F
+ __res_query F
+ __res_querydomain F
+ __res_search F
+GLIBC_2.3.2
+ GLIBC_2.3.2 A
+ __p_rcode F
+GLIBC_2.9
+ GLIBC_2.9 A
+ 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
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..0636806
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/librt.abilist
@@ -0,0 +1,52 @@
+GLIBC_2.1
+ GLIBC_2.1 A
+ 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
+ lio_listio F
+ lio_listio64 F
+GLIBC_2.2
+ GLIBC_2.2 A
+ clock_getcpuclockid F
+ clock_getres F
+ clock_gettime F
+ clock_nanosleep F
+ clock_settime F
+ shm_open F
+ shm_unlink F
+ timer_create F
+ timer_delete F
+ timer_getoverrun F
+ timer_gettime F
+ timer_settime F
+GLIBC_2.3.4
+ GLIBC_2.3.4 A
+ mq_close F
+ mq_getattr F
+ mq_notify F
+ mq_open F
+ mq_receive F
+ mq_send F
+ mq_unlink F
+mq_setattr GLIBC_2.3.4 w ? D .text 00000000
+mq_timedreceive GLIBC_2.3.4 w ? D .text 00000000
+mq_timedsend GLIBC_2.3.4 w ? D .text 00000000
+GLIBC_2.4
+ GLIBC_2.4 A
+ lio_listio F
+ lio_listio64 F
+GLIBC_2.7
+ GLIBC_2.7 A
+ __mq_open_2 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..f331380
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libthread_db.abilist
@@ -0,0 +1,48 @@
+GLIBC_2.1.3
+ GLIBC_2.1.3 A
+ td_init F
+ td_log 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_tsd F
+ td_thr_validate F
+GLIBC_2.2.3
+ GLIBC_2.2.3 A
+ td_symbol_list F
+GLIBC_2.3
+ GLIBC_2.3 A
+ td_thr_tls_get_addr F
+GLIBC_2.3.3
+ GLIBC_2.3.3 A
+ td_thr_tlsbase 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..7422687
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libutil.abilist
@@ -0,0 +1,8 @@
+GLIBC_2.0
+ GLIBC_2.0 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..109522e
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/localplt.data
@@ -0,0 +1,13 @@
+libc.so: __signbit
+libc.so: calloc
+libc.so: free
+libc.so: fscanf
+libc.so: malloc
+libc.so: memalign
+libc.so: raise
+libc.so: realloc
+libm.so: __signbit
+libm.so: __signbitf
+libm.so: matherr
+libpthread.so: __errno_location
+libpthread.so: raise
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..02eaa96
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.c
@@ -0,0 +1,132 @@
+/* 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 <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..ee719e4
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h
@@ -0,0 +1,292 @@
+/* Copyright (C) 2005-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/>.  */
+
+#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_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
+
+/* Initialize locks to zero.  */
+#define LLL_MUTEX_LOCK_INITIALIZER (0)
+
+#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, (futexp),		      \
+			      __lll_private_flag (FUTEX_WAIT, private),	      \
+			      (val), (timespec));			      \
+    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, (futexp),		      \
+			      __lll_private_flag (FUTEX_WAKE, private),	      \
+			      (nr), 0);					      \
+    INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret;		      \
+  })
+
+#define lll_robust_dead(futexv, private) \
+  do									      \
+    {									      \
+      INTERNAL_SYSCALL_DECL (__err);					      \
+      int *__futexp = &(futexv);					      \
+									      \
+      atomic_or (__futexp, FUTEX_OWNER_DIED);				      \
+      INTERNAL_SYSCALL (futex, __err, 4, __futexp,			      \
+			__lll_private_flag (FUTEX_WAKE, private), 1, 0);      \
+    }									      \
+  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);				      \
+  })
+
+/* Set *futex to 1 if it is 0, atomically.  Returns the old value */
+static inline int __attribute__((always_inline))
+__lll_trylock(int *futex)
+{
+  return atomic_compare_and_exchange_val_acq (futex, 1, 0) != 0;
+}
+#define lll_trylock(lock)       __lll_trylock (&(lock))
+
+/* Set *futex to 2 if it is 0, atomically.  Returns the old value */
+static inline int __attribute__((always_inline))
+__lll_cond_trylock(int *futex)
+{
+  return atomic_compare_and_exchange_val_acq (futex, 2, 0) != 0;
+}
+#define lll_cond_trylock(lock)  __lll_cond_trylock (&(lock))
+
+/* Set *futex to ID if it is 0, atomically.  Returns the old value */
+static inline int __attribute__((always_inline))
+__lll_robust_trylock(int *futex, int id)
+{
+  return 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(lock, private) \
+  (void) ({								      \
+    int *__futex = &(lock);						      \
+    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_robust_lock(lock, id, private) \
+  ({									      \
+    int *__futex = &(lock);						      \
+    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_cond_lock(lock, private) \
+  (void) ({								      \
+    int *__futex = &(lock);						      \
+    if (__builtin_expect (atomic_compare_and_exchange_val_acq (__futex, 2, 0),\
+			  0) != 0)					      \
+      __lll_lock_wait (__futex, private);				      \
+  })
+
+#define lll_robust_cond_lock(lock, id, private) \
+  ({									      \
+    int *__futex = &(lock);						      \
+    int __val = 0;							      \
+    int __id = id | FUTEX_WAITERS;					      \
+    if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, __id,\
+								0), 0))	      \
+      __val = __lll_robust_lock_wait (__futex, private);		      \
+    __val;								      \
+  })
+
+
+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;
+
+#define lll_timedlock(lock, abstime, private) \
+  ({									      \
+    int *__futex = &(lock);						      \
+    int __val = 0;							      \
+    if (__builtin_expect (atomic_compare_and_exchange_val_acq (__futex, 1, 0),\
+			  0) != 0)					      \
+       __val = __lll_timedlock_wait (__futex, abstime, private);	      \
+     __val;								      \
+  })
+
+#define lll_robust_timedlock(lock, abstime, id, private) \
+  ({									      \
+    int *__futex = &(lock);						      \
+    int __val = 0;							      \
+    if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id,  \
+								0), 0))	      \
+      __val = __lll_robust_timedlock_wait (__futex, abstime, private);	      \
+    __val;								      \
+  })
+
+#define lll_unlock(lock, private) \
+  ((void) ({								      \
+    int *__futex = &(lock);						      \
+    int __val = atomic_exchange_rel (__futex, 0);			      \
+    if (__builtin_expect (__val > 1, 0))				      \
+	 lll_futex_wake (__futex, 1, private);			\
+  }))
+
+#define lll_robust_unlock(lock, private) \
+  ((void) ({								      \
+    int *__futex = &(lock);						      \
+    int __val = atomic_exchange_rel (__futex, 0);			      \
+    if (__builtin_expect (__val & FUTEX_WAITERS, 0))			      \
+	 lll_futex_wake (__futex, 1, 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_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..0490e72
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/pt-vfork.S
@@ -0,0 +1,21 @@
+/* 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/>.  */
+
+#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..0897e1e
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/pthread_once.c
@@ -0,0 +1,90 @@
+/* Copyright (C) 2004-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 "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..cf6e5a7
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/vfork.S
@@ -0,0 +1,46 @@
+/* Copyright (C) 2005-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 <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/oldgetrlimit64.c b/ports/sysdeps/unix/sysv/linux/microblaze/oldgetrlimit64.c
new file mode 100644
index 0000000..4c27e95
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/oldgetrlimit64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c>
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..65b96e5
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/profil-counter.h
@@ -0,0 +1,20 @@
+/* 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/>.  */
+
+/* We can use the ix86 version.  */
+#include <sysdeps/unix/sysv/linux/i386/profil-counter.h>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/putmsg.c b/ports/sysdeps/unix/sysv/linux/microblaze/putmsg.c
new file mode 100644
index 0000000..ebc1680
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/putmsg.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/putmsg.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/readdir64.c b/ports/sysdeps/unix/sysv/linux/microblaze/readdir64.c
new file mode 100644
index 0000000..2ea26dd
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/readdir64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/readdir64.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/readdir64_r.c b/ports/sysdeps/unix/sysv/linux/microblaze/readdir64_r.c
new file mode 100644
index 0000000..9f54f89
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/readdir64_r.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/readdir64_r.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/scandir64.c b/ports/sysdeps/unix/sysv/linux/microblaze/scandir64.c
new file mode 100644
index 0000000..506fd88
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/scandir64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/scandir64.c>
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..66ba114
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/semctl.c
@@ -0,0 +1,189 @@
+/* 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/>.  */
+
+#include <errno.h>
+#include <stdarg.h>
+#include <sys/sem.h>
+#include <ipc_priv.h>
+
+#include <sysdep.h>
+#include <string.h>
+#include <sys/syscall.h>
+#include <shlib-compat.h>
+
+#include "kernel-features.h"
+
+struct __old_semid_ds
+{
+  struct __old_ipc_perm sem_perm;	/* operation permission struct */
+  __time_t sem_otime;			/* last semop() time */
+  __time_t sem_ctime;			/* last time changed by semctl() */
+  struct sem *__unbounded __sembase;	/* ptr to first semaphore in array */
+  struct sem_queue *__unbounded __sem_pending; /* pending operations */
+  struct sem_queue *__unbounded __sem_pending_last; /* last pending operation */
+  struct sem_undo *__unbounded __undo;	/* ondo requests on this array */
+  unsigned short int sem_nsems;		/* number of semaphores in set */
+};
+
+/* Define a `union semun' suitable for Linux here.  */
+union semun
+{
+  int val;			/* value for SETVAL */
+  struct semid_ds *buf;		/* buffer for IPC_STAT & IPC_SET */
+  unsigned short int *array;	/* array for GETALL & SETALL */
+  struct seminfo *__buf;	/* buffer for IPC_INFO */
+  struct __old_semid_ds *__old_buf;
+};
+
+#include <bp-checks.h>
+#include <bp-semctl.h>		/* definition of CHECK_SEMCTL needs union semum */
+
+/* Return identifier for array of NSEMS semaphores associated with
+   KEY.  */
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+int __old_semctl (int semid, int semnum, int cmd, ...);
+#endif
+int __new_semctl (int semid, int semnum, int cmd, ...);
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+int
+attribute_compat_text_section
+__old_semctl (int semid, int semnum, int cmd, ...)
+{
+  union semun arg;
+  va_list ap;
+
+  va_start (ap, cmd);
+
+  /* Get the argument only if required.  */
+  arg.buf = NULL;
+  switch (cmd)
+    {
+    case SETVAL:        /* arg.val */
+    case GETALL:        /* arg.array */
+    case SETALL:
+    case IPC_STAT:      /* arg.buf */
+    case IPC_SET:
+    case SEM_STAT:
+    case IPC_INFO:      /* arg.__buf */
+    case SEM_INFO:
+      va_start (ap, cmd);
+      arg = va_arg (ap, union semun);
+      va_end (ap);
+      break;
+    }
+
+  va_end (ap);
+
+  return INLINE_SYSCALL (semctl, 4, semid, semnum, cmd, CHECK_SEMCTL (&arg, semid, cmd)->array);
+}
+compat_symbol (libc, __old_semctl, semctl, GLIBC_2_0);
+#endif
+
+int
+__new_semctl (int semid, int semnum, int cmd, ...)
+{
+  union semun arg;
+  va_list ap;
+
+  va_start (ap, cmd);
+
+  /* Get the argument only if required.  */
+  arg.buf = NULL;
+  switch (cmd)
+    {
+    case SETVAL:        /* arg.val */
+    case GETALL:        /* arg.array */
+    case SETALL:
+    case IPC_STAT:      /* arg.buf */
+    case IPC_SET:
+    case SEM_STAT:
+    case IPC_INFO:      /* arg.__buf */
+    case SEM_INFO:
+      va_start (ap, cmd);
+      arg = va_arg (ap, union semun);
+      va_end (ap);
+      break;
+    }
+
+  va_end (ap);
+
+#if __ASSUME_IPC64 > 0
+  return INLINE_SYSCALL (semctl, 4, semid, semnum, cmd | __IPC_64,
+			 CHECK_SEMCTL (&arg, semid, cmd | __IPC_64)->array);
+#else
+  switch (cmd)
+    {
+    case SEM_STAT:
+    case IPC_STAT:
+    case IPC_SET:
+      break;
+    default:
+      return INLINE_SYSCALL (semctl, 4, semid, semnum, cmd,
+			     CHECK_SEMCTL (&arg, semid, cmd)->array);
+    }
+
+  {
+    int save_errno = errno, result;
+    struct __old_semid_ds old;
+    struct semid_ds *buf;
+
+    /* Unfortunately there is no way how to find out for sure whether
+       we should use old or new semctl.  */
+    result = INLINE_SYSCALL (semctl, 4, semid, semnum, cmd | __IPC_64,
+			     CHECK_SEMCTL (&arg, semid, cmd | __IPC_64)->array);
+    if (result != -1 || errno != EINVAL)
+      return result;
+
+    __set_errno(save_errno);
+    buf = arg.buf;
+    arg.__old_buf = &old;
+    if (cmd == IPC_SET)
+      {
+	old.sem_perm.uid = buf->sem_perm.uid;
+	old.sem_perm.gid = buf->sem_perm.gid;
+	old.sem_perm.mode = buf->sem_perm.mode;
+	if (old.sem_perm.uid != buf->sem_perm.uid ||
+	    old.sem_perm.gid != buf->sem_perm.gid)
+	  {
+	    __set_errno (EINVAL);
+	    return -1;
+	  }
+      }
+    result = INLINE_SYSCALL (semctl, 4, semid, semnum, cmd,
+			     CHECK_SEMCTL (&arg, semid, cmd)->array);
+    if (result != -1 && cmd != IPC_SET)
+      {
+	memset(buf, 0, sizeof(*buf));
+	buf->sem_perm.__key = old.sem_perm.__key;
+	buf->sem_perm.uid = old.sem_perm.uid;
+	buf->sem_perm.gid = old.sem_perm.gid;
+	buf->sem_perm.cuid = old.sem_perm.cuid;
+	buf->sem_perm.cgid = old.sem_perm.cgid;
+	buf->sem_perm.mode = old.sem_perm.mode;
+	buf->sem_perm.__seq = old.sem_perm.__seq;
+	buf->sem_otime = old.sem_otime;
+	buf->sem_ctime = old.sem_ctime;
+	buf->sem_nsems = old.sem_nsems;
+      }
+    return result;
+  }
+#endif
+}
+
+versioned_symbol (libc, __new_semctl, semctl, GLIBC_2_2);
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setegid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setegid.c
new file mode 100644
index 0000000..2e3a54c
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setegid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setegid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/seteuid.c b/ports/sysdeps/unix/sysv/linux/microblaze/seteuid.c
new file mode 100644
index 0000000..18e41d0
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/seteuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/seteuid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setfsgid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setfsgid.c
new file mode 100644
index 0000000..0886712
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setfsgid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setfsgid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setfsuid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setfsuid.c
new file mode 100644
index 0000000..a9f22eb
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setfsuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setfsuid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setgid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setgid.c
new file mode 100644
index 0000000..377021d
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setgid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setgid.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..0e70862
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setgroups.c
@@ -0,0 +1,2 @@
+/* We also have to rewrite the kernel gid_t to the user land type.  */
+#include <sysdeps/unix/sysv/linux/i386/setgroups.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setregid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setregid.c
new file mode 100644
index 0000000..99c57ad
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setregid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setregid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setresgid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setresgid.c
new file mode 100644
index 0000000..daca1a4
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setresgid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setresgid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setresuid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setresuid.c
new file mode 100644
index 0000000..3aeabe9
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setresuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setresuid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setreuid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setreuid.c
new file mode 100644
index 0000000..8ad6122
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setreuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setreuid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setrlimit.c b/ports/sysdeps/unix/sysv/linux/microblaze/setrlimit.c
new file mode 100644
index 0000000..bfaef74
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setrlimit.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setrlimit.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setuid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setuid.c
new file mode 100644
index 0000000..de39437
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setuid.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..2fd0540
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c
@@ -0,0 +1,154 @@
+/* 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/>.  */
+
+#include <errno.h>
+#include <sys/shm.h>
+#include <ipc_priv.h>
+
+#include <sysdep.h>
+#include <string.h>
+#include <sys/syscall.h>
+#include <bits/wordsize.h>
+#include <shlib-compat.h>
+#include <bp-checks.h>
+
+#include <kernel-features.h>
+
+struct __old_shmid_ds
+{
+  struct __old_ipc_perm shm_perm;	/* operation permission struct */
+  int shm_segsz;			/* size of segment in bytes */
+  __time_t shm_atime;			/* time of last shmat() */
+  __time_t shm_dtime;			/* time of last shmdt() */
+  __time_t shm_ctime;			/* time of last change by shmctl() */
+  __ipc_pid_t shm_cpid;			/* pid of creator */
+  __ipc_pid_t shm_lpid;			/* pid of last shmop */
+  unsigned short int shm_nattch;	/* number of current attaches */
+  unsigned short int __shm_npages;	/* size of segment (pages) */
+  unsigned long int *__unbounded __shm_pages; /* array of ptrs to frames -> SHMMAX */
+  struct vm_area_struct *__unbounded __attaches; /* descriptors for attaches */
+};
+
+struct __old_shminfo
+{
+  int shmmax;
+  int shmmin;
+  int shmmni;
+  int shmseg;
+  int shmall;
+};
+
+/* Provide operations to control over shared memory segments.  */
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+int __old_shmctl (int, int, struct __old_shmid_ds *);
+#endif
+int __new_shmctl (int, int, struct shmid_ds *);
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+int
+attribute_compat_text_section
+__old_shmctl (int shmid, int cmd, struct __old_shmid_ds *buf)
+{
+  return INLINE_SYSCALL (shmctl, 3, shmid, cmd, CHECK_1_NULL_OK (buf));
+}
+compat_symbol (libc, __old_shmctl, shmctl, GLIBC_2_0);
+#endif
+
+int
+__new_shmctl (int shmid, int cmd, struct shmid_ds *buf)
+{
+#if __ASSUME_IPC64 > 0
+  return INLINE_SYSCALL (shmctl, 3, shmid, cmd | __IPC_64, CHECK_1 (buf));
+#else
+  switch (cmd) {
+    case SHM_STAT:
+    case IPC_STAT:
+    case IPC_SET:
+#if __WORDSIZE != 32
+    case IPC_INFO:
+#endif
+      break;
+    default:
+      return INLINE_SYSCALL (shmctl, 3, shmid, cmd, CHECK_1 (buf));
+  }
+
+  {
+    int save_errno = errno, result;
+    union
+      {
+	struct __old_shmid_ds ds;
+	struct __old_shminfo info;
+      } old;
+
+    /* Unfortunately there is no way how to find out for sure whether
+       we should use old or new shmctl.  */
+    result = INLINE_SYSCALL (shmctl, 3, shmid, cmd | __IPC_64, CHECK_1 (buf));
+    if (result != -1 || errno != EINVAL)
+      return result;
+
+    __set_errno(save_errno);
+    if (cmd == IPC_SET)
+      {
+	old.ds.shm_perm.uid = buf->shm_perm.uid;
+	old.ds.shm_perm.gid = buf->shm_perm.gid;
+	old.ds.shm_perm.mode = buf->shm_perm.mode;
+	if (old.ds.shm_perm.uid != buf->shm_perm.uid ||
+	    old.ds.shm_perm.gid != buf->shm_perm.gid)
+	  {
+	    __set_errno (EINVAL);
+	    return -1;
+	  }
+      }
+    result = INLINE_SYSCALL (shmctl, 3, shmid, cmd, __ptrvalue (&old.ds));
+    if (result != -1 && (cmd == SHM_STAT || cmd == IPC_STAT))
+      {
+	memset(buf, 0, sizeof(*buf));
+	buf->shm_perm.__key = old.ds.shm_perm.__key;
+	buf->shm_perm.uid = old.ds.shm_perm.uid;
+	buf->shm_perm.gid = old.ds.shm_perm.gid;
+	buf->shm_perm.cuid = old.ds.shm_perm.cuid;
+	buf->shm_perm.cgid = old.ds.shm_perm.cgid;
+	buf->shm_perm.mode = old.ds.shm_perm.mode;
+	buf->shm_perm.__seq = old.ds.shm_perm.__seq;
+	buf->shm_atime = old.ds.shm_atime;
+	buf->shm_dtime = old.ds.shm_dtime;
+	buf->shm_ctime = old.ds.shm_ctime;
+	buf->shm_segsz = old.ds.shm_segsz;
+	buf->shm_nattch = old.ds.shm_nattch;
+	buf->shm_cpid = old.ds.shm_cpid;
+	buf->shm_lpid = old.ds.shm_lpid;
+      }
+#if __WORDSIZE != 32
+    else if (result != -1 && cmd == IPC_INFO)
+      {
+	struct shminfo *i = (struct shminfo *)buf;
+
+	memset(i, 0, sizeof(*i));
+	i->shmmax = old.info.shmmax;
+	i->shmmin = old.info.shmmin;
+	i->shmmni = old.info.shmmni;
+	i->shmseg = old.info.shmseg;
+	i->shmall = old.info.shmall;
+      }
+#endif
+    return result;
+  }
+#endif
+}
+
+versioned_symbol (libc, __new_shmctl, shmctl, GLIBC_2_2);
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..11adfde
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h
@@ -0,0 +1,25 @@
+/* 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 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..c6e5ba1
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/socket.S
@@ -0,0 +1,126 @@
+/* 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/>.  */
+
+#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..156cd7b
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sys/procfs.h
@@ -0,0 +1,123 @@
+/* Copyright (C) 1996-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/>.  */
+
+#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..79881a9
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sys/user.h
@@ -0,0 +1,77 @@
+/* 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/>.  */
+
+#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	i387;
+  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..46d663e
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/syscall.S
@@ -0,0 +1,37 @@
+/* Copyright (C) 2005-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 <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..c69d83b
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/syscalls.list
@@ -0,0 +1,8 @@
+# File name	Caller	Syscall name	Args	Strong name	Weak names
+
+cacheflush	EXTRA	cacheflush	i:iiii	__cacheflush	cacheflush
+oldgetrlimit	EXTRA	getrlimit	i:ip	__old_getrlimit	getrlimit@GLIBC_2.0
+oldsetrlimit	EXTRA	setrlimit	i:ip	__old_setrlimit	setrlimit@GLIBC_2.0
+
+prlimit64	EXTRA	prlimit64	i:iipp	prlimit64
+fanotify_mark	EXTRA	fanotify_mark	i:iiiiis	fanotify_mark
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..0765905
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sysdep.S
@@ -0,0 +1,39 @@
+/* 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/>.  */
+
+#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 100644
index 0000000..b4886c9
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h
@@ -0,0 +1,390 @@
+/* Copyright (C) 2005-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/microblaze/sysdep.h>
+#include <sys/syscall.h>
+
+/* Defines RTLD_PRIVATE_ERRNO.  */
+#include <dl-sysdep.h>
+
+/* 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
+#ifdef __STDC__
+# define SYS_ify(syscall_name)	__NR_##syscall_name
+#else
+# define SYS_ify(syscall_name)	__NR_/**/syscall_name
+#endif
+
+#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 (sc_err); \
+     unsigned int _sys_result = INTERNAL_SYSCALL (name, sc_err, nr, args);	\
+     if (INTERNAL_SYSCALL_ERROR_P (_sys_result, sc_err))\
+       {								\
+	 __set_errno (INTERNAL_SYSCALL_ERRNO (_sys_result, sc_err));		\
+	 _sys_result = (unsigned int) -1;				\
+       }								\
+     (int) _sys_result; })
+
+#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...)	\
+  INTERNAL_SYSCALL_##nr(name,args)
+
+#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 INTERNAL_SYSCALL_0(name,dummy)			\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = SYS_ify(name);	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r12)					\
+      : SYSCALL_CLOBBERS_0 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_NCS_0(number,dummy)			\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = number;	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r12)					\
+      : SYSCALL_CLOBBERS_0 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_1(name,arg1)			\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = SYS_ify(name);	\
+    register int __r5 __asm__("r5") = arg1;		\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r12)				\
+      : SYSCALL_CLOBBERS_1 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_NCS_1(number,arg1)			\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = number;	\
+    register int __r5 __asm__("r5") = arg1;		\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r12)				\
+      : SYSCALL_CLOBBERS_1 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_2(name,arg1,arg2)		\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = SYS_ify(name);	\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r12)		\
+      : SYSCALL_CLOBBERS_2 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_NCS_2(number,arg1,arg2)		\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = number;	\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r12)		\
+      : SYSCALL_CLOBBERS_2 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_3(name,arg1,arg2,arg3)		\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = SYS_ify(name);	\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    register int __r7 __asm__("r7") = arg3;		\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r12)	\
+      : SYSCALL_CLOBBERS_3 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_NCS_3(number,arg1,arg2,arg3)		\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = number;	        \
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    register int __r7 __asm__("r7") = arg3;		\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r12)	\
+      : SYSCALL_CLOBBERS_3 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_4(name,arg1,arg2,arg3,arg4)	\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = SYS_ify(name);	\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    register int __r7 __asm__("r7") = arg3;		\
+    register int __r8 __asm__("r8") = arg4;		\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r8),"r"(__r12)	\
+      : SYSCALL_CLOBBERS_4 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_NCS_4(number,arg1,arg2,arg3,arg4)	\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = number;	\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    register int __r7 __asm__("r7") = arg3;		\
+    register int __r8 __asm__("r8") = arg4;		\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r8),"r"(__r12)	\
+      : SYSCALL_CLOBBERS_4 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_5(name,arg1,arg2,arg3,arg4,arg5)	\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = SYS_ify(name);	\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    register int __r7 __asm__("r7") = arg3;		\
+    register int __r8 __asm__("r8") = arg4;		\
+    register int __r9 __asm__("r9") = 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 INTERNAL_SYSCALL_NCS_5(number,arg1,arg2,arg3,arg4,arg5)	\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = number;		\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    register int __r7 __asm__("r7") = arg3;		\
+    register int __r8 __asm__("r8") = arg4;		\
+    register int __r9 __asm__("r9") = 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 INTERNAL_SYSCALL_6(name,arg1,arg2,arg3,arg4,arg5,arg6)	\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = SYS_ify(name);	\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    register int __r7 __asm__("r7") = arg3;		\
+    register int __r8 __asm__("r8") = arg4;		\
+    register int __r9 __asm__("r9") = arg5;		\
+    register int __r10 __asm__("r10") = 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;			\
+  })
+
+
+#define INTERNAL_SYSCALL_NCS_6(number,arg1,arg2,arg3,arg4,arg5,arg6)	\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = number;		\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    register int __r7 __asm__("r7") = arg3;		\
+    register int __r8 __asm__("r8") = arg4;		\
+    register int __r9 __asm__("r9") = arg5;		\
+    register int __r10 __asm__("r10") = 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;			\
+  })
+
+#define INTERNAL_SYSCALL_NCS(number, err, nr, args...)		\
+	INTERNAL_SYSCALL_NCS_##nr(number, 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))
+
+/* 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/versionsort64.c b/ports/sysdeps/unix/sysv/linux/microblaze/versionsort64.c
new file mode 100644
index 0000000..144b691
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/versionsort64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/versionsort64.c>
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.9.5


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

* Re: [PATCH 1/3 ports] Add MicroBlaze Port
  2012-11-29  5:27 [PATCH 1/3 ports] Add MicroBlaze Port David Holsgrove
@ 2012-11-29  5:43 ` Mike Frysinger
  2012-11-29  5:52 ` [PATCH] " David Holsgrove
  2012-11-29 16:11 ` [PATCH 1/3 ports] Add " Joseph S. Myers
  2 siblings, 0 replies; 8+ messages in thread
From: Mike Frysinger @ 2012-11-29  5:43 UTC (permalink / raw)
  To: libc-ports
  Cc: David Holsgrove, John Williams, Edgar E. Iglesias, Vinod Kathail,
	Tom Shui, Vidhumouli Hunsigida, Nagaraju Mekala

[-- Attachment #1: Type: Text/Plain, Size: 651 bytes --]

On Thursday 29 November 2012 00:27:26 David Holsgrove wrote:
> This series of patches adds glibc support for MicroBlaze architecture.
> 
> The first patch adds the microblaze glibc/ports component.
> 
> The second patch will be forwarded to libc-alpha, as it adds
> microblaze relocations to elf/elf.h
> 
> The final patch is the latest version of config.sub from the upstream
> repo (config.guess hasnt moved) and adds support for microblaze-xilinx
> targets.

please use `git send-email`, or fix your e-mail client to post the patches 
inline.  you're attaching them with base64 encoding which makes it much harder 
to review.
-mike

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

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

* [PATCH] MicroBlaze Port
  2012-11-29  5:27 [PATCH 1/3 ports] Add MicroBlaze Port David Holsgrove
  2012-11-29  5:43 ` Mike Frysinger
@ 2012-11-29  5:52 ` David Holsgrove
  2012-11-29 16:03   ` Carlos O'Donell
  2012-11-29 17:35   ` Joseph S. Myers
  2012-11-29 16:11 ` [PATCH 1/3 ports] Add " Joseph S. Myers
  2 siblings, 2 replies; 8+ messages in thread
From: David Holsgrove @ 2012-11-29  5:52 UTC (permalink / raw)
  To: libc-ports
  Cc: john.williams, edgar.iglesias, vinodk, tshui, vidhum, nmekala,
	David Holsgrove

From: David Holsgrove <david.holsgrove@petalogix.com>

Signed-off-by: David Holsgrove <david.holsgrove@petalogix.com>
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
---
 ports/ChangeLog.microblaze                         |  137 ++
 ports/sysdeps/microblaze/Implies                   |    4 +
 ports/sysdeps/microblaze/Makefile                  |   31 +
 ports/sysdeps/microblaze/Versions                  |    6 +
 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              |   44 +
 ports/sysdeps/microblaze/backtrace.c               |  117 ++
 ports/sysdeps/microblaze/backtrace_linux.c         |   48 +
 ports/sysdeps/microblaze/bits/atomic.h             |  276 +++
 ports/sysdeps/microblaze/bits/endian.h             |   30 +
 ports/sysdeps/microblaze/bits/fenv.h               |   77 +
 ports/sysdeps/microblaze/bits/link.h               |   55 +
 ports/sysdeps/microblaze/bits/setjmp.h             |   37 +
 ports/sysdeps/microblaze/bits/wordsize.h           |    3 +
 ports/sysdeps/microblaze/bsd-_setjmp.S             |   22 +
 ports/sysdeps/microblaze/bsd-setjmp.S              |   22 +
 ports/sysdeps/microblaze/configure                 |  122 ++
 ports/sysdeps/microblaze/configure.in              |   32 +
 ports/sysdeps/microblaze/crti.S                    |   90 +
 ports/sysdeps/microblaze/crtn.S                    |   55 +
 ports/sysdeps/microblaze/dl-machine.h              |  303 +++
 ports/sysdeps/microblaze/dl-tls.h                  |   29 +
 ports/sysdeps/microblaze/dl-trampoline.S           |  109 +
 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/machine-gmon.h            |   30 +
 ports/sysdeps/microblaze/memusage.h                |   21 +
 ports/sysdeps/microblaze/nptl/Makefile             |   21 +
 ports/sysdeps/microblaze/nptl/pthread_spin_lock.c  |   30 +
 .../sysdeps/microblaze/nptl/pthread_spin_trylock.c |   27 +
 ports/sysdeps/microblaze/nptl/pthreaddef.h         |   39 +
 ports/sysdeps/microblaze/nptl/tcb-offsets.sym      |   11 +
 ports/sysdeps/microblaze/nptl/tls.h                |  162 ++
 ports/sysdeps/microblaze/preconfigure              |    3 +
 ports/sysdeps/microblaze/setjmp.S                  |   75 +
 ports/sysdeps/microblaze/stackinfo.h               |   34 +
 ports/sysdeps/microblaze/start.S                   |   67 +
 ports/sysdeps/microblaze/sysdep.h                  |  113 +
 ports/sysdeps/microblaze/tls-macros.h              |   44 +
 ports/sysdeps/unix/sysv/linux/microblaze/Makefile  |   12 +
 ports/sysdeps/unix/sysv/linux/microblaze/Versions  |   42 +
 .../unix/sysv/linux/microblaze/____longjmp_chk.S   |   29 +
 .../unix/sysv/linux/microblaze/alphasort64.c       |    1 +
 .../unix/sysv/linux/microblaze/bits/fcntl.h        |   57 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/ipc.h  |   55 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/mman.h |  114 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/msq.h  |   77 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/sem.h  |   87 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/shm.h  |  102 +
 .../sysdeps/unix/sysv/linux/microblaze/bits/stat.h |  203 ++
 ports/sysdeps/unix/sysv/linux/microblaze/brk.c     |   47 +
 ports/sysdeps/unix/sysv/linux/microblaze/clone.S   |   70 +
 ports/sysdeps/unix/sysv/linux/microblaze/configure |    4 +
 .../unix/sysv/linux/microblaze/configure.in        |    5 +
 .../unix/sysv/linux/microblaze/dl-librecon.h       |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/fchown.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/fchownat.c  |    1 +
 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/getdents64.c        |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/getegid.c |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/geteuid.c |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/getgid.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/getgroups.c |    2 +
 ports/sysdeps/unix/sysv/linux/microblaze/getmsg.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/getresgid.c |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/getresuid.c |    1 +
 .../unix/sysv/linux/microblaze/getrlimit64.c       |    1 +
 .../unix/sysv/linux/microblaze/getsysstats.c       |   35 +
 ports/sysdeps/unix/sysv/linux/microblaze/getuid.c  |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/glob64.c  |    1 +
 .../unix/sysv/linux/microblaze/kernel_stat.h       |   32 +
 ports/sysdeps/unix/sysv/linux/microblaze/lchown.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/ldconfig.h  |   19 +
 ports/sysdeps/unix/sysv/linux/microblaze/lockf64.c |    1 +
 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  |  130 ++
 .../sysv/linux/microblaze/nptl/bits/pthreadtypes.h |  185 ++
 .../sysv/linux/microblaze/nptl/bits/semaphore.h    |   35 +
 .../unix/sysv/linux/microblaze/nptl/createthread.c |   23 +
 .../sysdeps/unix/sysv/linux/microblaze/nptl/fork.c |   29 +
 .../unix/sysv/linux/microblaze/nptl/ld.abilist     |   18 +
 .../linux/microblaze/nptl/libBrokenLocale.abilist  |    3 +
 .../unix/sysv/linux/microblaze/nptl/libanl.abilist |    6 +
 .../unix/sysv/linux/microblaze/nptl/libc.abilist   | 2174 ++++++++++++++++++++
 .../sysv/linux/microblaze/nptl/libcrypt.abilist    |    9 +
 .../unix/sysv/linux/microblaze/nptl/libdl.abilist  |   18 +
 .../unix/sysv/linux/microblaze/nptl/libm.abilist   |  383 ++++
 .../unix/sysv/linux/microblaze/nptl/libnsl.abilist |  127 ++
 .../sysv/linux/microblaze/nptl/libpthread.abilist  |  267 +++
 .../sysv/linux/microblaze/nptl/libresolv.abilist   |  104 +
 .../unix/sysv/linux/microblaze/nptl/librt.abilist  |   52 +
 .../linux/microblaze/nptl/libthread_db.abilist     |   48 +
 .../sysv/linux/microblaze/nptl/libutil.abilist     |    8 +
 .../unix/sysv/linux/microblaze/nptl/localplt.data  |   13 +
 .../unix/sysv/linux/microblaze/nptl/lowlevellock.c |  132 ++
 .../unix/sysv/linux/microblaze/nptl/lowlevellock.h |  292 +++
 .../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/oldgetrlimit64.c    |    1 +
 .../unix/sysv/linux/microblaze/profil-counter.h    |   20 +
 ports/sysdeps/unix/sysv/linux/microblaze/putmsg.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/readdir64.c |    1 +
 .../unix/sysv/linux/microblaze/readdir64_r.c       |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/scandir64.c |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/semctl.c  |  189 ++
 ports/sysdeps/unix/sysv/linux/microblaze/setegid.c |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/seteuid.c |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setfsgid.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setfsuid.c  |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/setgid.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setgroups.c |    2 +
 .../sysdeps/unix/sysv/linux/microblaze/setregid.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setresgid.c |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setresuid.c |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setreuid.c  |    1 +
 .../sysdeps/unix/sysv/linux/microblaze/setrlimit.c |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/setuid.c  |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c  |  154 ++
 .../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       |    8 +
 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.S  |   39 +
 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h  |  390 ++++
 .../unix/sysv/linux/microblaze/versionsort64.c     |    1 +
 ports/sysdeps/unix/sysv/linux/microblaze/xstat.c   |    1 +
 136 files changed, 9097 insertions(+)
 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/Versions
 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 100644 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/bits/wordsize.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/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/machine-gmon.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/pthread_spin_trylock.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/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/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/alphasort64.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/ipc.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/mman.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/msq.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/sem.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/bits/shm.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/dl-librecon.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/fchown.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/fchownat.c
 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/getdents64.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getegid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/geteuid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getgid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getgroups.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getmsg.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getresgid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getresuid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getrlimit64.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getsysstats.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/getuid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/glob64.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/kernel_stat.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/lchown.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/ldconfig.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/lockf64.c
 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/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/oldgetrlimit64.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/profil-counter.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/putmsg.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/readdir64.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/readdir64_r.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/scandir64.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/semctl.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setegid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/seteuid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setfsgid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setfsuid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setgid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setgroups.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setregid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setresgid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setresuid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setreuid.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setrlimit.c
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/setuid.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 100644 ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h
 create mode 100644 ports/sysdeps/unix/sysv/linux/microblaze/versionsort64.c
 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..468ce25
--- /dev/null
+++ b/ports/ChangeLog.microblaze
@@ -0,0 +1,137 @@
+2012-11-29  David Holsgrove  <david.holsgrove@xilinx.com>
+
+	* sysdeps/microblaze/Implies: New file
+	* sysdeps/microblaze/Makefile: New file
+	* sysdeps/microblaze/Versions: 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/bits/wordsize.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/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/machine-gmon.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/pthread_spin_trylock.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/stackinfo.h: New file
+	* sysdeps/microblaze/start.S: New file
+	* sysdeps/microblaze/sysdep.h: New file
+	* sysdeps/microblaze/tls-macros.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/alphasort64.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/bits/ipc.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/bits/mman.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/bits/msq.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/bits/sem.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/bits/shm.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/dl-librecon.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/fchown.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/fchownat.c: 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/getdents64.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getegid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/geteuid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getgid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getgroups.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getmsg.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getresgid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getresuid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getrlimit64.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getsysstats.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/getuid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/glob64.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/kernel_stat.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/lchown.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/ldconfig.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/lockf64.c: 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/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/oldgetrlimit64.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/profil-counter.h: New file
+	* sysdeps/unix/sysv/linux/microblaze/putmsg.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/readdir64.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/readdir64_r.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/scandir64.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/semctl.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setegid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/seteuid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setfsgid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setfsuid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setgid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setgroups.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setregid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setresgid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setresuid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setreuid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setrlimit.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/setuid.c: New file
+	* sysdeps/unix/sysv/linux/microblaze/shmctl.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/versionsort64.c: 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..5635633
--- /dev/null
+++ b/ports/sysdeps/microblaze/Makefile
@@ -0,0 +1,31 @@
+pic-ccflag = -fPIC
+
+# Make sure setjmp.c is compiled with a frame pointer
+CFLAGS-setjmp.c := -fno-omit-frame-pointer
+
+ifeq ($(subdir),elf)
+CFLAGS-rtld.c += -Wno-uninitialized -Wno-unused
+endif
+
+ifeq ($(subdir),gmon)
+sysdep_routines += _mcount
+endif
+
+ifeq ($(subdir),resource)
+sysdep_routines += oldgetrlimit64 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/Versions b/ports/sysdeps/microblaze/Versions
new file mode 100644
index 0000000..2b020f8
--- /dev/null
+++ b/ports/sysdeps/microblaze/Versions
@@ -0,0 +1,6 @@
+libc {
+  GLIBC_2.0 {
+    # Functions from libgcc.
+    __divdi3; __moddi3; __udivdi3; __umoddi3;
+  }
+}
diff --git a/ports/sysdeps/microblaze/__longjmp.S b/ports/sysdeps/microblaze/__longjmp.S
new file mode 100644
index 0000000..3a6b76f
--- /dev/null
+++ b/ports/sysdeps/microblaze/__longjmp.S
@@ -0,0 +1,55 @@
+/* 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 <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..d55a593
--- /dev/null
+++ b/ports/sysdeps/microblaze/_mcount.S
@@ -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/>.  */
+
+	.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..528ec90
--- /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") /* Hope, this works */
diff --git a/ports/sysdeps/microblaze/asm-syntax.h b/ports/sysdeps/microblaze/asm-syntax.h
new file mode 100644
index 0000000..fc16f35
--- /dev/null
+++ b/ports/sysdeps/microblaze/asm-syntax.h
@@ -0,0 +1,44 @@
+/* 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/>.  */
+
+#ifdef HAVE_ELF
+
+/* ELF uses byte-counts for .align, most others use log2 of count of bytes.  */
+#define ALIGNARG(log2) 1<<log2
+/* For ELF we need the `.type' directive to make shared libs work right.  */
+#define PROLOG(name) .type name,@function
+#define EPILOG(name) .size name,.-name
+/* For ELF we need to prefix register names and local labels.  */
+#ifdef __STDC__
+#define R_(r) %##r
+#define R(r) R_(r)
+#define L(label) .##label
+#else
+#define R(r) %/**/r
+#define L(label) ./**/label
+#endif
+
+#else
+
+#define ALIGNARG(log2) log2
+#define PROLOG(name) /* Nothing.  */
+#define EPILOG(name) /* Nothing.  */
+#define R(r) r
+#define L(label) label
+
+#endif
diff --git a/ports/sysdeps/microblaze/backtrace.c b/ports/sysdeps/microblaze/backtrace.c
new file mode 100644
index 0000000..7af1fb5
--- /dev/null
+++ b/ports/sysdeps/microblaze/backtrace.c
@@ -0,0 +1,117 @@
+
+#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..7b311e7
--- /dev/null
+++ b/ports/sysdeps/microblaze/backtrace_linux.c
@@ -0,0 +1,48 @@
+#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) {
+		/*fprintf(stderr, "working out sig-handler (pc = %08x)\n", pc);*/
+		/* In this case, the pc pointer should be accessible */
+		/* Kernel insert the a tramp between the signal handler frame and the
+		   caller frame in signal handling This is how the kernel add the tramp
+		   between frames:
+		   err |= __put_user(0x31800000 | __NR_rt_sigreturn ,
+		   frame->tramp + 0); // addi r12, r0, __NR_sigreturn
+		   err |= __put_user(0xb9cc0008, frame->tramp + 1); // brki r14, 0x8
+		   regs->r15 = ((unsigned long)frame->tramp)-8;
+		*/
+		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);
+			/*fprintf(stderr, "tramp = %08x\n", tramp);*/
+			/*fprintf(stderr, "ucptr = %08x\n", ucptr);*/
+			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 100644
index 0000000..92b8380
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/atomic.h
@@ -0,0 +1,276 @@
+/* Copyright (C) 2003-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 <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;"    /* clean carry bit*/                              \
+                "1: lwx     %0, %3, r0;"    /* atomic_add_return */                           \
+                "   addic   %1, r0, 0;"     /* check Carry*/                                  \
+                "   bnei    %1, 1b;"        /* jump if Carry is set*/                         \
+                "   cmp     %1, %0, %4;"    /* compare signed values loaded/newval */         \
+                "   bnei    %1, 2f;"        /* if is not equal - jump over */                 \
+                "   swx     %5, %3, r0;"    /* save newval */                                 \
+                "   addic   %1, r0, 0;"     /* check Carry if saving was OK */                \
+                "   bnei    %1, 1b;"        /* jump if swx wasn't successful */               \
+                "2:"                                                                          \
+                    : "=&r" (__tmp),        /* %0 */                                          \
+                    "=&r" (test),           /* %1 */                                          \
+                    "=m" (*__memp)          /* Dummy output so gcc knows writing *__memp */   \
+                    : "r" (__memp),         /* %3 */                                          \
+                    "r" (oldval),           /* %4 */                                          \
+                    "r" (newval)            /* %5 */                                          \
+                    : "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) {                                                                 \
+        if (__builtin_types_compatible_p (typeof (*mem), int))                                \
+            __result = __arch_compare_and_exchange_val_32_acq(mem, newval, oldval);           \
+        else if (__builtin_types_compatible_p (typeof (*mem), unsigned int))                  \
+            __result = __arch_compare_and_exchange_val_32_acq_unsigned(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;"    /* clean carry bit*/                              \
+                "1: lwx     %0, %4, r0;"    /* atomic_add_return */                           \
+                "   addic   %1, r0, 0;"     /* check Carry*/                                  \
+                "   bnei    %1, 1b;"        /* jump if Carry is set*/                         \
+                "   swx     %3, %4, r0;"    /* save newval */                                 \
+                "   addic   %1, r0, 0;"     /* check Carry if saving was OK */                \
+                "   bnei    %1, 1b;"        /* jump if swx wasn't successful */               \
+                    : "=&r" (__tmp),        /* %0 */                                          \
+                    "=&r" (test),           /* %1 */                                          \
+                    "=m" (*__memp)          /* Dummy output so gcc knows writing *__memp */   \
+                    : "r" (value),          /* %3 */                                          \
+                    "r" (__memp)            /* %4 */                                          \
+                    : "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;"    /* clean carry bit*/                              \
+                "1: lwx     %0, %4, r0;"    /* atomic_add_return */                           \
+                "   addic   %1, r0, 0;"     /* check Carry*/                                  \
+                "   bnei    %1, 1b;"        /* jump if Carry is set*/                         \
+                "   add     %1, %3, %0;"    /* add value */                                   \
+                "   swx     %1, %4, r0;"    /* save value back */                             \
+                "   addic   %1, r0, 0;"     /* check Carry if saving was OK */                \
+                "   bnei    %1, 1b;"        /* jump if swx wasn't successful */               \
+                    : "=&r" (__tmp),        /* %0 */                                          \
+                    "=&r" (test),           /* %1 */                                          \
+                    "=m" (*__memp)          /* Dummy output so gcc knows writing *__memp */   \
+                    : "r" (value),          /* %3 */                                          \
+                    "r" (__memp)            /* %4 */                                          \
+                    : "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;"    /* clean carry bit*/                              \
+                "1: lwx     %0, %3, r0;"    /* atomic_add_return*/                            \
+                "   addic   %1, r0, 0;"     /* check Carry*/                                  \
+                "   bnei    %1, 1b;"        /* jump if Carry is set*/                         \
+                "   addi    %0, %0, 1;"     /* add 1 */                                       \
+                "   swx     %0, %3, r0;"    /* save value back */                             \
+                "   addic   %1, r0, 0;"     /* check Carry if saving was OK */                \
+                "   bnei    %1, 1b;"        /* jump if swx wasn't successful */               \
+                    : "=&r" (__val),        /* %0 */                                          \
+                    "=&r" (test),           /* %1 */                                          \
+                    "=m" (*mem)             /* Dummy output so gcc knows writing *mem */      \
+                    : "r" (mem),            /* %3 */                                          \
+                    "m" (*mem)              /* %4 */                                          \
+                    : "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;"    /* clean carry bit*/                              \
+                "1: lwx     %0, %3, r0;"    /* atomic_add_return*/                            \
+                "   addic   %1, r0, 0;"     /* check Carry*/                                  \
+                "   bnei    %1, 1b;"        /* jump if Carry is set*/                         \
+                "   rsubi   %0, %0, 1;"     /* sub 1 */                                       \
+                "   swx     %0, %3, r0;"    /* save value back */                             \
+                "   addic   %1, r0, 0;"     /* check Carry if saving was OK */                \
+                "   bnei    %1, 1b;"        /* jump if swx wasn't successful */               \
+                    : "=&r" (__val),        /* %0 */                                          \
+                    "=&r" (test),           /* %1 */                                          \
+                    "=m" (*mem)             /* Dummy output so gcc knows writing *mem */      \
+                    : "r" (mem),            /* %3 */                                          \
+                    "m" (*mem)              /* %4 */                                          \
+                    : "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..42b4eaa
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/endian.h
@@ -0,0 +1,30 @@
+/* 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/>.  */
+
+#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..e3de962
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/fenv.h
@@ -0,0 +1,77 @@
+/* Copyright (C) 2004-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/>.  */
+
+#ifndef _FENV_H
+# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
+#endif
+
+
+/* Define bits representing the exception.  We use the bit positions
+   of the appropriate bits in the FPU control word.  */
+enum
+  {
+    FE_INEXACT = 0x04,
+#define FE_INEXACT	FE_INEXACT
+    FE_UNDERFLOW = 0x08,
+#define FE_UNDERFLOW	FE_UNDERFLOW
+    FE_OVERFLOW = 0x10,
+#define FE_OVERFLOW	FE_OVERFLOW
+    FE_DIVBYZERO = 0x20,
+#define FE_DIVBYZERO	FE_DIVBYZERO
+    FE_INVALID = 0x40,
+#define FE_INVALID	FE_INVALID
+  };
+
+#define FE_ALL_EXCEPT \
+	(FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID)
+
+/* The MIPS FPU supports all of the four defined rounding modes.  We
+   use again the bit positions in the FPU control word as the values
+   for the appropriate macros.  */
+enum
+  {
+    FE_TONEAREST = 0x0,
+#define FE_TONEAREST	FE_TONEAREST
+    FE_TOWARDZERO = 0x1,
+#define FE_TOWARDZERO	FE_TOWARDZERO
+    FE_UPWARD = 0x2,
+#define FE_UPWARD	FE_UPWARD
+    FE_DOWNWARD = 0x3
+#define FE_DOWNWARD	FE_DOWNWARD
+  };
+
+
+/* Type representing exception flags.  */
+typedef unsigned short int fexcept_t;
+
+
+/* Type representing floating-point environment.  This function corresponds
+   to the layout of the block written by the `fstenv'.  */
+typedef struct
+  {
+    unsigned int __fp_control_register;
+  }
+fenv_t;
+
+/* If the default argument is used we use this value.  */
+#define FE_DFL_ENV	((__const fenv_t *) -1)
+
+#ifdef __USE_GNU
+/* Floating-point environment where none of the exception is masked.  */
+# define FE_NOMASK_ENV  ((__const fenv_t *) -2)
+#endif
diff --git a/ports/sysdeps/microblaze/bits/link.h b/ports/sysdeps/microblaze/bits/link.h
new file mode 100644
index 0000000..e958be4
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/link.h
@@ -0,0 +1,55 @@
+/* Copyright (C) 2005-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/>.  */
+
+#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..041feb7
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/setjmp.h
@@ -0,0 +1,37 @@
+/* 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/>.  */
+
+/* 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/bits/wordsize.h b/ports/sysdeps/microblaze/bits/wordsize.h
new file mode 100644
index 0000000..23d379a
--- /dev/null
+++ b/ports/sysdeps/microblaze/bits/wordsize.h
@@ -0,0 +1,3 @@
+/* Determine the wordsize from the preprocessor defines.  */
+
+# define __WORDSIZE	32
diff --git a/ports/sysdeps/microblaze/bsd-_setjmp.S b/ports/sysdeps/microblaze/bsd-_setjmp.S
new file mode 100644
index 0000000..7173a5a
--- /dev/null
+++ b/ports/sysdeps/microblaze/bsd-_setjmp.S
@@ -0,0 +1,22 @@
+/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'.
+   Copyright (C) 1997, 1998, 2002, 2008 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..6a03c5c
--- /dev/null
+++ b/ports/sysdeps/microblaze/bsd-setjmp.S
@@ -0,0 +1,22 @@
+/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'.
+   Copyright (C) 1995-1997,2000,2001,2002,2003 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..a1b3bd3
--- /dev/null
+++ b/ports/sysdeps/microblaze/configure
@@ -0,0 +1,122 @@
+
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
+
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+# This file is generated from configure.in by Autoconf.  DO NOT EDIT!
+ # Local configure fragment for sysdeps/microblaze/elf.
+
+if test "$usetls" != no; then
+# Check for support of thread-local storage handling in assembler and
+# linker.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Microblaze TLS support" >&5
+$as_echo_n "checking for Microblaze TLS support... " >&6; }
+if test "${libc_cv_microblaze_tls+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat > conftest.s <<\EOF
+       .section .tdata,"awT",@progbits
+x:
+       .word 2
+       .text
+       addik r5,r20,x@TLSGD
+       addik r5,r20,x@TLSLDM'
+EOF
+if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then
+  libc_cv_microblaze_tls=yes
+else
+  libc_cv_microblaze_tls=no
+fi
+rm -f conftest*
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_microblaze_tls" >&5
+$as_echo "$libc_cv_microblaze_tls" >&6; }
+if test $libc_cv_microblaze_tls = yes; then
+  $as_echo "#define HAVE_TLS_SUPPORT 1" >>confdefs.h
+
+fi
+fi
+
+#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..1330fd2
--- /dev/null
+++ b/ports/sysdeps/microblaze/configure.in
@@ -0,0 +1,32 @@
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+# Local configure fragment for sysdeps/microblaze/elf.
+
+if test "$usetls" != no; then
+# Check for support of thread-local storage handling in assembler and
+# linker.
+AC_CACHE_CHECK(for Microblaze TLS support, libc_cv_microblaze_tls, [dnl
+cat > conftest.s <<\EOF
+       .section .tdata,"awT",@progbits
+x:
+       .word 2
+       .text
+       addik r5,r20,x@TLSGD
+       addik r5,r20,x@TLSLDM'
+EOF
+dnl
+if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
+  libc_cv_microblaze_tls=yes
+else
+  libc_cv_microblaze_tls=no
+fi
+rm -f conftest*])
+if test $libc_cv_microblaze_tls = yes; then
+  AC_DEFINE(HAVE_TLS_SUPPORT)
+fi
+fi
+
+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..01ef591
--- /dev/null
+++ b/ports/sysdeps/microblaze/crti.S
@@ -0,0 +1,90 @@
+/* Special .init and .fini section support for MicroBlaze.
+   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/>.  */
+
+/* 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..1683c96
--- /dev/null
+++ b/ports/sysdeps/microblaze/crtn.S
@@ -0,0 +1,55 @@
+/* Special .init and .fini section support for MicroBlaze.
+   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/>.  */
+
+/* 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..249d3af
--- /dev/null
+++ b/ports/sysdeps/microblaze/dl-machine.h
@@ -0,0 +1,303 @@
+/* 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/>.  */
+
+#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 ||
+		ehdr->e_machine == EM_NEW_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)
+{
+  Elf32_Addr *got;
+  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, so
+   PLT entries 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.  */
+#if (!defined RTLD_BOOTSTRAP || USE___THREAD)
+#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..c004e0f
--- /dev/null
+++ b/ports/sysdeps/microblaze/dl-tls.h
@@ -0,0 +1,29 @@
+/* Copyright (C) 2005-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/>.  */
+
+/* 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..170fb5b
--- /dev/null
+++ b/ports/sysdeps/microblaze/dl-trampoline.S
@@ -0,0 +1,109 @@
+/* Copyright (C) 2005-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 <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/gccframe.h b/ports/sysdeps/microblaze/gccframe.h
new file mode 100644
index 0000000..0129585
--- /dev/null
+++ b/ports/sysdeps/microblaze/gccframe.h
@@ -0,0 +1,21 @@
+/* Copyright (C) 2005-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 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..b0751da
--- /dev/null
+++ b/ports/sysdeps/microblaze/jmpbuf-unwind.h
@@ -0,0 +1,46 @@
+/* Copyright (C) 2005-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 <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..48c061f
--- /dev/null
+++ b/ports/sysdeps/microblaze/ldsodefs.h
@@ -0,0 +1,41 @@
+/* Copyright (C) 2005-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/>.  */
+
+#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..67b67fe
--- /dev/null
+++ b/ports/sysdeps/microblaze/libc-tls.c
@@ -0,0 +1,32 @@
+/* Copyright (C) 2005-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 <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/machine-gmon.h b/ports/sysdeps/microblaze/machine-gmon.h
new file mode 100644
index 0000000..2153835
--- /dev/null
+++ b/ports/sysdeps/microblaze/machine-gmon.h
@@ -0,0 +1,30 @@
+/* Copyright (C) 2011-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/>.  */
+
+/* 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/memusage.h b/ports/sysdeps/microblaze/memusage.h
new file mode 100644
index 0000000..bd57016
--- /dev/null
+++ b/ports/sysdeps/microblaze/memusage.h
@@ -0,0 +1,21 @@
+/* Copyright (C) 2000-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 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..0b4b221
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/Makefile
@@ -0,0 +1,21 @@
+# Copyright (C) 2005-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/>.
+
+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..7d2f129
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/pthread_spin_lock.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 2008-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 <atomic.h>
+#include "pthreadP.h"
+
+int
+pthread_spin_lock (pthread_spinlock_t *lock)
+{
+  while (atomic_compare_and_exchange_val_acq (lock, 1, 0) != 0)
+   while (*lock != 0)
+    ;
+
+  return 0;
+}
diff --git a/ports/sysdeps/microblaze/nptl/pthread_spin_trylock.c b/ports/sysdeps/microblaze/nptl/pthread_spin_trylock.c
new file mode 100644
index 0000000..4a876c1
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/pthread_spin_trylock.c
@@ -0,0 +1,27 @@
+/* Copyright (C) 2008-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 <errno.h>
+#include <atomic.h>
+#include "pthreadP.h"
+
+int
+pthread_spin_trylock (pthread_spinlock_t *lock)
+{
+  return atomic_compare_and_exchange_val_acq (lock, 1, 0) ? EBUSY : 0;
+}
diff --git a/ports/sysdeps/microblaze/nptl/pthreaddef.h b/ports/sysdeps/microblaze/nptl/pthreaddef.h
new file mode 100644
index 0000000..eb8ee89
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/pthreaddef.h
@@ -0,0 +1,39 @@
+/* Copyright (C) 2002-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/>.  */
+
+/* Default stack size.  */
+#define ARCH_STACK_DEFAULT_SIZE	(2 * 1024 * 1024)
+
+/* Required stack pointer alignment at beginning.  SSE requires 16
+   bytes.  */
+#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..8c48607
--- /dev/null
+++ b/ports/sysdeps/microblaze/nptl/tls.h
@@ -0,0 +1,162 @@
+/* Copyright (C) 2005-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/>.  */
+
+#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;
+
+/* r21 is reserved for thread pointer */
+static inline int __microblaze_set_thread_area(void *tp)
+{
+	asm("or r21,r0,%0" : : "r" (tp));
+	return 0;
+}
+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(); })
+
+# define SET_THREAD_POINTER(x) \
+    ({ __microblaze_set_thread_area(x); })
+
+/* 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	16
+
+/* 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		16
+
+/* 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. */
+# define TLS_INIT_TP(tcbp, secondcall) \
+  ({  SET_THREAD_POINTER ((tcbp)); })
+
+/* 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))
+
+/* Access to data in the thread descriptor is easy.  */
+#define THREAD_GETMEM(descr, member) \
+  descr->member
+#define THREAD_GETMEM_NC(descr, member, idx) \
+  descr->member[idx]
+#define THREAD_SETMEM(descr, member, value) \
+  descr->member = (value)
+#define THREAD_SETMEM_NC(descr, member, idx, value) \
+  descr->member[idx] = (value)
+
+/* Initializing the thread pointer will generate a SIGILL if the syscall
+   is not available.  */
+#define TLS_INIT_TP_EXPENSIVE 1
+
+/* 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..e67e97e
--- /dev/null
+++ b/ports/sysdeps/microblaze/setjmp.S
@@ -0,0 +1,75 @@
+/* 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 <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/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..51939e5
--- /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..4baa091
--- /dev/null
+++ b/ports/sysdeps/microblaze/sysdep.h
@@ -0,0 +1,113 @@
+/* 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.  */
+
+# ifdef HAVE_ELF
+
+/* ELF uses byte-counts for .align, most others use log2 of count of bytes.  */
+#  define ALIGNARG(log2) 1<<log2
+/* For ELF we need the `.type' directive to make shared libs work right.  */
+#  define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg
+#  define ASM_SIZE_DIRECTIVE(name) .size name,.-name
+
+/* In ELF C symbols are asm symbols.  */
+#  undef NO_UNDERSCORES
+#  define NO_UNDERSCORES
+
+# else
+
+#  define ALIGNARG(log2) log2
+#  define ASM_TYPE_DIRECTIVE(name,type)	/* Nothing is specified.  */
+#  define ASM_SIZE_DIRECTIVE(name)	/* Nothing is specified.  */
+
+# endif
+
+
+/* Define an entry point visible from C.
+
+   There is currently a bug in gdb which prevents us from specifying
+   incomplete stabs information.  Fake some entries here which specify
+   the current source file.  */
+# define ENTRY(name)							      \
+  .globl C_SYMBOL_NAME(name);						      \
+  ASM_TYPE_DIRECTIVE (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
+
+# ifdef	NO_UNDERSCORES
+/* 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
+# endif
+
+# 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
+
+/* Assembler local label name */
+#define L(name) $L##name
+
+#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/unix/sysv/linux/microblaze/Makefile b/ports/sysdeps/unix/sysv/linux/microblaze/Makefile
new file mode 100644
index 0000000..3cf2b6a
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/Makefile
@@ -0,0 +1,12 @@
+ifeq ($(subdir),misc)
+sysdep_routines += mremap
+endif
+
+ifeq ($(subdir),elf)
+sysdep-others += lddlibc4
+install-bin += lddlibc4
+endif
+
+ifeq ($(subdir),resource)
+sysdep_routines += oldgetrlimit64 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..cf363fa
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/Versions
@@ -0,0 +1,42 @@
+libc {
+  GLIBC_2.0 {
+    # Exception handling support functions from libgcc
+    __register_frame; __register_frame_table; __deregister_frame;
+    __frame_state_for; __register_frame_info_table;
+
+    # c*
+    cacheflush;
+  }
+  GLIBC_2.2 {
+    # functions used in other libraries
+    __xstat64; __fxstat64; __lxstat64;
+
+    # a*
+    alphasort64;
+
+    # g*
+    glob64;
+
+    # New rlimit interface
+    getrlimit; setrlimit; getrlimit64; setrlimit64;
+
+    # r*
+    readdir64; readdir64_r;
+
+    # s*
+    scandir64;
+
+    # v*
+    versionsort64;
+  }
+  GLIBC_2.3.3 {
+    posix_fadvise64; posix_fallocate64;
+    setcontext; getcontext; swapcontext; makecontext;
+  }
+  GLIBC_2.3.4 {
+    setcontext; getcontext; swapcontext; makecontext;
+  }
+  GLIBC_2.11 {
+    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..5fed890
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/____longjmp_chk.S
@@ -0,0 +1,29 @@
+/* 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 <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/alphasort64.c b/ports/sysdeps/unix/sysv/linux/microblaze/alphasort64.c
new file mode 100644
index 0000000..0b5ae47
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/alphasort64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/alphasort64.c>
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..076c4a2
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h
@@ -0,0 +1,57 @@
+/* O_*, F_*, FD_* bit values for Linux.
+   Copyright (C) 2011, 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/>.  */
+
+#ifndef	_FCNTL_H
+# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
+#endif
+
+# define O_DIRECTORY    0200000 /* Must be a directory.  */
+# define O_NOFOLLOW     0400000 /* Do not follow links.  */
+# define O_DIRECT        040000 /* Direct disk access.  */
+#ifdef __USE_LARGEFILE64
+# define O_LARGEFILE    0100000
+#endif
+
+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').  */
+#ifndef __USE_FILE_OFFSET64
+    __off_t l_start;	/* Offset where the lock begins.  */
+    __off_t l_len;	/* Size of the locked area; zero means until EOF.  */
+#else
+    __off64_t l_start;	/* Offset where the lock begins.  */
+    __off64_t l_len;	/* Size of the locked area; zero means until EOF.  */
+#endif
+    __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/ipc.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/ipc.h
new file mode 100644
index 0000000..f3acb93
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/ipc.h
@@ -0,0 +1,55 @@
+/* Copyright (C) 2011, 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/>.  */
+
+#ifndef _SYS_IPC_H
+# error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead."
+#endif
+
+#include <bits/types.h>
+
+/* Mode bits for `msgget', `semget', and `shmget'.  */
+#define IPC_CREAT	01000		/* Create key if key does not exist. */
+#define IPC_EXCL	02000		/* Fail if key exists.  */
+#define IPC_NOWAIT	04000		/* Return error on wait.  */
+
+/* Control commands for `msgctl', `semctl', and `shmctl'.  */
+#define IPC_RMID	0		/* Remove identifier.  */
+#define IPC_SET		1		/* Set `ipc_perm' options.  */
+#define IPC_STAT	2		/* Get `ipc_perm' options.  */
+#ifdef __USE_GNU
+# define IPC_INFO	3		/* See ipcs.  */
+#endif
+
+/* Special key values.  */
+#define IPC_PRIVATE	((__key_t) 0)	/* Private key.  */
+
+
+/* Data structure used to pass permission information to IPC operations.  */
+struct ipc_perm
+  {
+    __key_t __key;			/* Key.  */
+    __uid_t uid;			/* Owner's user ID.  */
+    __gid_t gid;			/* Owner's group ID.  */
+    __uid_t cuid;			/* Creator's user ID.  */
+    __gid_t cgid;			/* Creator's group ID.  */
+    unsigned short int mode;		/* Read/write permission.  */
+    unsigned short int __seq;		/* Sequence number.  */
+    unsigned short int __pad1;
+    unsigned long int __unused1;
+    unsigned long int __unused2;
+  };
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..740e70c
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/mman.h
@@ -0,0 +1,114 @@
+/* Definitions for POSIX memory map interface.  Linux/MicroBlaze version.
+
+   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/>.  */
+
+#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.  */
+
+
+/* Protections are chosen from these bits, OR'd together.  The
+   implementation does not necessarily support PROT_EXEC or PROT_WRITE
+   without PROT_READ.  The only guarantees are that no writing will be
+   allowed without PROT_WRITE and no access will be allowed for PROT_NONE. */
+
+#define PROT_READ	0x1		/* Page can be read.  */
+#define PROT_WRITE	0x2		/* Page can be written.  */
+#define PROT_EXEC	0x4		/* Page can be executed.  */
+#define PROT_NONE	0x0		/* Page can not be accessed.  */
+#define PROT_GROWSDOWN	0x01000000	/* Extend change to start of
+					   growsdown vma (mprotect only).  */
+#define PROT_GROWSUP	0x02000000	/* Extend change to start of
+					   growsup vma (mprotect only).  */
+
+/* Sharing types (must choose one and only one of these).  */
+#define MAP_SHARED	0x01		/* Share changes.  */
+#define MAP_PRIVATE	0x02		/* Changes are private.  */
+#ifdef __USE_MISC
+# define MAP_TYPE	0x0f		/* Mask for type of mapping.  */
+#endif
+
+/* Other flags.  */
+#define MAP_FIXED	0x10		/* Interpret addr exactly.  */
+#ifdef __USE_MISC
+# define MAP_FILE	0
+# define MAP_ANONYMOUS	0x20		/* Don't use a file.  */
+# define MAP_ANON	MAP_ANONYMOUS
+#endif
+
+/* These are Linux-specific.  */
+#ifdef __USE_MISC
+# 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
+
+/* Flags to `msync'.  */
+#define MS_ASYNC	1		/* Sync memory asynchronously.  */
+#define MS_SYNC		4		/* Synchronous memory sync.  */
+#define MS_INVALIDATE	2		/* Invalidate the caches.  */
+
+/* Flags for `mlockall'.  */
+#define MCL_CURRENT	1		/* Lock all currently mapped pages.  */
+#define MCL_FUTURE	2		/* Lock all additions to address
+					   space.  */
+
+/* Flags for `mremap'.  */
+#ifdef __USE_GNU
+# define MREMAP_MAYMOVE	1
+# define MREMAP_FIXED	2
+#endif
+
+/* Advice to `madvise'.  */
+#ifdef __USE_BSD
+# define MADV_NORMAL	  0	/* No further special treatment.  */
+# define MADV_RANDOM	  1	/* Expect random page references.  */
+# define MADV_SEQUENTIAL  2	/* Expect sequential page references.  */
+# define MADV_WILLNEED	  3	/* Will need these pages.  */
+# define MADV_DONTNEED	  4	/* Don't need these pages.  */
+# define MADV_REMOVE	  9	/* Remove these pages and resources.  */
+# define MADV_DONTFORK	  10	/* Do not inherit across fork.  */
+# define MADV_DOFORK	  11	/* Do inherit across fork.  */
+# define MADV_MERGEABLE	  12	/* KSM may merge identical pages.  */
+# define MADV_UNMERGEABLE 13	/* KSM may not merge identical pages.  */
+# define MADV_HUGEPAGE	  14	/* Worth backing with hugepages.  */
+# define MADV_NOHUGEPAGE  15	/* Not worth backing with hugepages.  */
+# define MADV_DONTDUMP	  16    /* Explicity exclude from the core dump,
+                                   overrides the coredump filter bits.  */
+# define MADV_DODUMP	  17	/* Clear the MADV_DONTDUMP flag.  */
+# define MADV_HWPOISON	  100	/* Poison a page for testing.  */
+#endif
+
+/* The POSIX people had to invent similar names for the same things.  */
+#ifdef __USE_XOPEN2K
+# define POSIX_MADV_NORMAL	0 /* No further special treatment.  */
+# define POSIX_MADV_RANDOM	1 /* Expect random page references.  */
+# define POSIX_MADV_SEQUENTIAL	2 /* Expect sequential page references.  */
+# define POSIX_MADV_WILLNEED	3 /* Will need these pages.  */
+# define POSIX_MADV_DONTNEED	4 /* Don't need these pages.  */
+#endif
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/bits/msq.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/msq.h
new file mode 100644
index 0000000..cb7eca7
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/msq.h
@@ -0,0 +1,77 @@
+/* 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/>.  */
+
+#ifndef _SYS_MSG_H
+# error "Never use <bits/msq.h> directly; include <sys/msg.h> instead."
+#endif
+
+#include <bits/types.h>
+
+/* Define options for message queue functions.  */
+#define MSG_NOERROR	010000	/* no error if message is too big */
+#ifdef __USE_GNU
+# define MSG_EXCEPT	020000	/* recv any msg except of specified type */
+#endif
+
+/* Types used in the structure definition.  */
+typedef unsigned long int msgqnum_t;
+typedef unsigned long int msglen_t;
+
+
+/* Structure of record for one message inside the kernel.
+   The type `struct msg' is opaque.  */
+struct msqid_ds
+{
+  struct ipc_perm msg_perm;	/* structure describing operation permission */
+  __time_t msg_stime;		/* time of last msgsnd command */
+  unsigned long int __unused1;
+  __time_t msg_rtime;		/* time of last msgrcv command */
+  unsigned long int __unused2;
+  __time_t msg_ctime;		/* time of last change */
+  unsigned long int __unused3;
+  unsigned long int __msg_cbytes; /* current number of bytes on queue */
+  msgqnum_t msg_qnum;		/* number of messages currently on queue */
+  msglen_t msg_qbytes;		/* max number of bytes allowed on queue */
+  __pid_t msg_lspid;		/* pid of last msgsnd() */
+  __pid_t msg_lrpid;		/* pid of last msgrcv() */
+  unsigned long int __unused4;
+  unsigned long int __unused5;
+};
+
+#ifdef __USE_MISC
+
+# define msg_cbytes	__msg_cbytes
+
+/* ipcs ctl commands */
+# define MSG_STAT 11
+# define MSG_INFO 12
+
+/* buffer for msgctl calls IPC_INFO, MSG_INFO */
+struct msginfo
+  {
+    int msgpool;
+    int msgmap;
+    int msgmax;
+    int msgmnb;
+    int msgmni;
+    int msgssz;
+    int msgtql;
+    unsigned short int msgseg;
+  };
+
+#endif /* __USE_MISC */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/bits/sem.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/sem.h
new file mode 100644
index 0000000..2968301
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/sem.h
@@ -0,0 +1,87 @@
+/* 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/>.  */
+
+#ifndef _SYS_SEM_H
+# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
+#endif
+
+#include <sys/types.h>
+
+/* Flags for `semop'.  */
+#define SEM_UNDO	0x1000		/* undo the operation on exit */
+
+/* Commands for `semctl'.  */
+#define GETPID		11		/* get sempid */
+#define GETVAL		12		/* get semval */
+#define GETALL		13		/* get all semval's */
+#define GETNCNT		14		/* get semncnt */
+#define GETZCNT		15		/* get semzcnt */
+#define SETVAL		16		/* set semval */
+#define SETALL		17		/* set all semval's */
+
+
+/* Data structure describing a set of semaphores.  */
+struct semid_ds
+{
+  struct ipc_perm sem_perm;		/* operation permission struct */
+  __time_t sem_otime;			/* last semop() time */
+  unsigned long int __unused1;
+  __time_t sem_ctime;			/* last time changed by semctl() */
+  unsigned long int __unused2;
+  unsigned long int sem_nsems;		/* number of semaphores in set */
+  unsigned long int __unused3;
+  unsigned long int __unused4;
+};
+
+/* The user should define a union like the following to use it for arguments
+   for `semctl'.
+
+   union semun
+   {
+     int val;				<= value for SETVAL
+     struct semid_ds *buf;		<= buffer for IPC_STAT & IPC_SET
+     unsigned short int *array;		<= array for GETALL & SETALL
+     struct seminfo *__buf;		<= buffer for IPC_INFO
+   };
+
+   Previous versions of this file used to define this union but this is
+   incorrect.  One can test the macro _SEM_SEMUN_UNDEFINED to see whether
+   one must define the union or not.  */
+#define _SEM_SEMUN_UNDEFINED	1
+
+#ifdef __USE_MISC
+
+/* ipcs ctl cmds */
+# define SEM_STAT 18
+# define SEM_INFO 19
+
+struct  seminfo
+{
+  int semmap;
+  int semmni;
+  int semmns;
+  int semmnu;
+  int semmsl;
+  int semopm;
+  int semume;
+  int semusz;
+  int semvmx;
+  int semaem;
+};
+
+#endif /* __USE_MISC */
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/bits/shm.h b/ports/sysdeps/unix/sysv/linux/microblaze/bits/shm.h
new file mode 100644
index 0000000..8460718
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/shm.h
@@ -0,0 +1,102 @@
+/* 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/>.  */
+
+#ifndef _SYS_SHM_H
+# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
+#endif
+
+#include <bits/types.h>
+
+/* Permission flag for shmget.  */
+#define SHM_R		0400		/* or S_IRUGO from <linux/stat.h> */
+#define SHM_W		0200		/* or S_IWUGO from <linux/stat.h> */
+
+/* Flags for `shmat'.  */
+#define SHM_RDONLY	010000		/* attach read-only else read-write */
+#define SHM_RND		020000		/* round attach address to SHMLBA */
+#define SHM_REMAP	040000		/* take-over region on attach */
+
+/* Commands for `shmctl'.  */
+#define SHM_LOCK	11		/* lock segment (root only) */
+#define SHM_UNLOCK	12		/* unlock segment (root only) */
+
+__BEGIN_DECLS
+
+/* Segment low boundary address multiple.  */
+#define SHMLBA		(__getpagesize ())
+extern int __getpagesize (void) __THROW __attribute__ ((__const__));
+
+
+/* Type to count number of attaches.  */
+typedef unsigned long int shmatt_t;
+
+/* Data structure describing a set of semaphores.  */
+struct shmid_ds
+  {
+    struct ipc_perm shm_perm;		/* operation permission struct */
+    size_t shm_segsz;			/* size of segment in bytes */
+    __time_t shm_atime;			/* time of last shmat() */
+    unsigned long int __unused1;
+    __time_t shm_dtime;			/* time of last shmdt() */
+    unsigned long int __unused2;
+    __time_t shm_ctime;			/* time of last change by shmctl() */
+    unsigned long int __unused3;
+    __pid_t shm_cpid;			/* pid of creator */
+    __pid_t shm_lpid;			/* pid of last shmop */
+    shmatt_t shm_nattch;		/* number of current attaches */
+    unsigned long int __unused4;
+    unsigned long int __unused5;
+  };
+
+#ifdef __USE_MISC
+
+/* ipcs ctl commands */
+# define SHM_STAT 	13
+# define SHM_INFO 	14
+
+/* shm_mode upper byte flags */
+# define SHM_DEST	01000	/* segment will be destroyed on last detach */
+# define SHM_LOCKED	02000   /* segment will not be swapped */
+# define SHM_HUGETLB	04000	/* segment is mapped via hugetlb */
+
+struct	shminfo
+  {
+    unsigned long int shmmax;
+    unsigned long int shmmin;
+    unsigned long int shmmni;
+    unsigned long int shmseg;
+    unsigned long int shmall;
+    unsigned long int __unused1;
+    unsigned long int __unused2;
+    unsigned long int __unused3;
+    unsigned long int __unused4;
+  };
+
+struct shm_info
+  {
+    int used_ids;
+    unsigned long int shm_tot;	/* total allocated shm */
+    unsigned long int shm_rss;	/* total resident shm */
+    unsigned long int shm_swp;	/* total swapped shm */
+    unsigned long int swap_attempts;
+    unsigned long int swap_successes;
+  };
+
+#endif /* __USE_MISC */
+
+__END_DECLS
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..edf0212
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/stat.h
@@ -0,0 +1,203 @@
+/* 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/>.  */
+
+#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..da10866
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/brk.c
@@ -0,0 +1,47 @@
+/* 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 <errno.h>
+#include <unistd.h>
+#include <sysdep.h>
+
+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/x86 ELF
+   dynamic linker.  Sigh.  */
+weak_alias (__curbrk, ___brk_addr)
+
+int
+__brk (void *addr)
+{
+  void *newbrk;
+
+  INTERNAL_SYSCALL_DECL (err);
+  newbrk = (void *) INTERNAL_SYSCALL (brk, err, 1, addr);
+  __curbrk = newbrk;
+
+  if (newbrk < 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..f86404d
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/clone.S
@@ -0,0 +1,70 @@
+/* Copyright (C) 1996-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/>.  */
+
+/* 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..4486fba
--- /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!
+
+libc_cv_gcc_unwind_find_fde=yes
+arch_minimum_kernel=2.0.10
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..cfb6163
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/configure.in
@@ -0,0 +1,5 @@
+GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
+# Local configure fragment for sysdeps/unix/sysv/linux/microblaze.
+
+libc_cv_gcc_unwind_find_fde=yes
+arch_minimum_kernel=2.0.10
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/dl-librecon.h b/ports/sysdeps/unix/sysv/linux/microblaze/dl-librecon.h
new file mode 100644
index 0000000..dbb4e75
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/dl-librecon.h
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/dl-librecon.h>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/fchown.c b/ports/sysdeps/unix/sysv/linux/microblaze/fchown.c
new file mode 100644
index 0000000..3a69ecc
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/fchown.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/fchown.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/fchownat.c b/ports/sysdeps/unix/sysv/linux/microblaze/fchownat.c
new file mode 100644
index 0000000..dfed76a
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/fchownat.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/fchownat.c>
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/getdents64.c b/ports/sysdeps/unix/sysv/linux/microblaze/getdents64.c
new file mode 100644
index 0000000..0c75fb5
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getdents64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getdents64.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getegid.c b/ports/sysdeps/unix/sysv/linux/microblaze/getegid.c
new file mode 100644
index 0000000..37b4b4a
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getegid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getegid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/geteuid.c b/ports/sysdeps/unix/sysv/linux/microblaze/geteuid.c
new file mode 100644
index 0000000..ebcb555
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/geteuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/geteuid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getgid.c b/ports/sysdeps/unix/sysv/linux/microblaze/getgid.c
new file mode 100644
index 0000000..0a4d606
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getgid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getgid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getgroups.c b/ports/sysdeps/unix/sysv/linux/microblaze/getgroups.c
new file mode 100644
index 0000000..102ea24
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getgroups.c
@@ -0,0 +1,2 @@
+/* We also have to rewrite the kernel gid_t to the user land type.  */
+#include <sysdeps/unix/sysv/linux/i386/getgroups.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getmsg.c b/ports/sysdeps/unix/sysv/linux/microblaze/getmsg.c
new file mode 100644
index 0000000..3a1fa08
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getmsg.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getmsg.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getresgid.c b/ports/sysdeps/unix/sysv/linux/microblaze/getresgid.c
new file mode 100644
index 0000000..b703a41
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getresgid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getresgid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getresuid.c b/ports/sysdeps/unix/sysv/linux/microblaze/getresuid.c
new file mode 100644
index 0000000..0b14cef
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getresuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getresuid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getrlimit64.c b/ports/sysdeps/unix/sysv/linux/microblaze/getrlimit64.c
new file mode 100644
index 0000000..fef018f
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getrlimit64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getrlimit64.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..4c8443e
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getsysstats.c
@@ -0,0 +1,35 @@
+/* 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/>.  */
+
+/* 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:".  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:", 4) == 0)	      	     		  \
+	  ++(RESULT);							  \
+    }									  \
+  while (0)
+
+#include <sysdeps/unix/sysv/linux/getsysstats.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/getuid.c b/ports/sysdeps/unix/sysv/linux/microblaze/getuid.c
new file mode 100644
index 0000000..d682c79
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/getuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/getuid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/glob64.c b/ports/sysdeps/unix/sysv/linux/microblaze/glob64.c
new file mode 100644
index 0000000..82a9a29
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/glob64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/glob64.c>
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..b855c1b
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/kernel_stat.h
@@ -0,0 +1,32 @@
+/* Definition of `struct stat' used in the kernel..  */
+
+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/lchown.c b/ports/sysdeps/unix/sysv/linux/microblaze/lchown.c
new file mode 100644
index 0000000..c89de99
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/lchown.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/lchown.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/ldconfig.h b/ports/sysdeps/unix/sysv/linux/microblaze/ldconfig.h
new file mode 100644
index 0000000..31770f1
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/ldconfig.h
@@ -0,0 +1,19 @@
+/* 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/>.  */
+
+#include <sysdeps/unix/sysv/linux/i386/ldconfig.h>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/lockf64.c b/ports/sysdeps/unix/sysv/linux/microblaze/lockf64.c
new file mode 100644
index 0000000..a88f5a7
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/lockf64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/lockf64.c>
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..ffcb303
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/mmap.S
@@ -0,0 +1,50 @@
+/* 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/>.  */
+
+#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..376ad0f
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/msgctl.c
@@ -0,0 +1,130 @@
+/* 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/>.  */
+
+#include <errno.h>
+#include <sys/msg.h>
+#include <ipc_priv.h>
+
+#include <sysdep.h>
+#include <string.h>
+#include <sys/syscall.h>
+#include <shlib-compat.h>
+#include <bp-checks.h>
+
+#include "kernel-features.h"
+
+struct __old_msqid_ds
+{
+  struct __old_ipc_perm msg_perm;	/* structure describing operation permission */
+  struct msg *__unbounded __msg_first;	/* pointer to first message on queue */
+  struct msg *__unbounded __msg_last;	/* pointer to last message on queue */
+  __time_t msg_stime;			/* time of last msgsnd command */
+  __time_t msg_rtime;			/* time of last msgrcv command */
+  __time_t msg_ctime;			/* time of last change */
+  struct wait_queue *__unbounded __wwait; /* ??? */
+  struct wait_queue *__unbounded __rwait; /* ??? */
+  unsigned short int __msg_cbytes;	/* current number of bytes on queue */
+  unsigned short int msg_qnum;		/* number of messages currently on queue */
+  unsigned short int msg_qbytes;	/* max number of bytes allowed on queue */
+  __ipc_pid_t msg_lspid;		/* pid of last msgsnd() */
+  __ipc_pid_t msg_lrpid;		/* pid of last msgrcv() */
+};
+
+/* Allows to control internal state and destruction of message queue
+   objects.  */
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+int __old_msgctl (int, int, struct __old_msqid_ds *);
+#endif
+int __new_msgctl (int, int, struct msqid_ds *);
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+int
+attribute_compat_text_section
+__old_msgctl (int msqid, int cmd, struct __old_msqid_ds *buf)
+{
+  return INLINE_SYSCALL (msgctl, 3, msqid, cmd, CHECK_1 (buf));
+}
+compat_symbol (libc, __old_msgctl, msgctl, GLIBC_2_0);
+#endif
+
+int
+__new_msgctl (int msqid, int cmd, struct msqid_ds *buf)
+{
+
+#if __ASSUME_IPC64 > 0
+  return INLINE_SYSCALL (msgctl, 3, msqid, cmd | __IPC_64, CHECK_1 (buf));
+#else
+  switch (cmd) {
+    case MSG_STAT:
+    case IPC_STAT:
+    case IPC_SET:
+      break;
+    default:
+      return INLINE_SYSCALL (msgctl, 3, msqid, cmd, CHECK_1 (buf));
+  }
+
+  {
+    int result;
+    struct __old_msqid_ds old;
+
+    /* Unfortunately there is no way how to find out for sure whether
+       we should use old or new msgctl.  */
+    result = INLINE_SYSCALL (msgctl, 3, msqid, cmd | __IPC_64, CHECK_1 (buf));
+    if (result != -1 || errno != EINVAL)
+      return result;
+
+    if (cmd == IPC_SET)
+      {
+	old.msg_perm.uid = buf->msg_perm.uid;
+	old.msg_perm.gid = buf->msg_perm.gid;
+	old.msg_perm.mode = buf->msg_perm.mode;
+	old.msg_qbytes = buf->msg_qbytes;
+	if (old.msg_perm.uid != buf->msg_perm.uid ||
+	    old.msg_perm.gid != buf->msg_perm.gid ||
+	    old.msg_qbytes != buf->msg_qbytes)
+	  {
+	    __set_errno (EINVAL);
+	    return -1;
+	  }
+      }
+    result = INLINE_SYSCALL (msgctl, 3, msqid, cmd, __ptrvalue (&old));
+    if (result != -1 && cmd != IPC_SET)
+      {
+	memset(buf, 0, sizeof(*buf));
+	buf->msg_perm.__key = old.msg_perm.__key;
+	buf->msg_perm.uid = old.msg_perm.uid;
+	buf->msg_perm.gid = old.msg_perm.gid;
+	buf->msg_perm.cuid = old.msg_perm.cuid;
+	buf->msg_perm.cgid = old.msg_perm.cgid;
+	buf->msg_perm.mode = old.msg_perm.mode;
+	buf->msg_perm.__seq = old.msg_perm.__seq;
+	buf->msg_stime = old.msg_stime;
+	buf->msg_rtime = old.msg_rtime;
+	buf->msg_ctime = old.msg_ctime;
+	buf->__msg_cbytes = old.__msg_cbytes;
+	buf->msg_qnum = old.msg_qnum;
+	buf->msg_qbytes = old.msg_qbytes;
+	buf->msg_lspid = old.msg_lspid;
+	buf->msg_lrpid = old.msg_lrpid;
+      }
+    return result;
+  }
+#endif
+}
+
+versioned_symbol (libc, __new_msgctl, msgctl, GLIBC_2_2);
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..5a422b6
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/pthreadtypes.h
@@ -0,0 +1,185 @@
+/* Copyright (C) 2002-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/>.  */
+
+#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..0ae59ec
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/bits/semaphore.h
@@ -0,0 +1,35 @@
+/* Copyright (C) 2002-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/>.  */
+
+#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/createthread.c b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c
new file mode 100644
index 0000000..19e4318
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/createthread.c
@@ -0,0 +1,23 @@
+/* Copyright (C) 2005-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/>.  */
+
+/* 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..dcd4307
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/fork.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 2005-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 <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..fc11e36
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/ld.abilist
@@ -0,0 +1,18 @@
+GLIBC_2.0
+ GLIBC_2.0 A
+ __libc_memalign F
+ _r_debug D 0x14
+ calloc F
+ free F
+ malloc F
+ realloc F
+GLIBC_2.1
+ GLIBC_2.1 A
+ __libc_stack_end D 0x4
+ _dl_mcount F
+GLIBC_2.3
+ GLIBC_2.3 A
+ __tls_get_addr F
+GLIBC_2.4
+ GLIBC_2.4 A
+ __stack_chk_guard D 0x4
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..f4ca37f
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libBrokenLocale.abilist
@@ -0,0 +1,3 @@
+GLIBC_2.0
+ GLIBC_2.0 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..c9755d8
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libanl.abilist
@@ -0,0 +1,6 @@
+GLIBC_2.2.3
+ GLIBC_2.2.3 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..c2f036d
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libc.abilist
@@ -0,0 +1,2174 @@
+GCC_3.0
+ GCC_3.0 A
+ _Unwind_Find_FDE F
+ __deregister_frame_info_bases F
+ __register_frame_info_bases F
+ __register_frame_info_table_bases F
+GLIBC_2.0
+ GLIBC_2.0 A
+ _IO_adjust_column 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_fgets F
+ _IO_file_attach F
+ _IO_file_close F
+ _IO_file_close_it F
+ _IO_file_doallocate 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_fsetpos F
+ _IO_ftell F
+ _IO_ftrylockfile F
+ _IO_funlockfile F
+ _IO_fwrite F
+ _IO_getc F
+ _IO_getline F
+ _IO_gets F
+ _IO_init F
+ _IO_init_marker F
+ _IO_link_in F
+ _IO_list_all D 0x4
+ _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_setb F
+ _IO_setbuffer F
+ _IO_setvbuf F
+ _IO_sgetn F
+ _IO_sprintf F
+ _IO_sputbackc F
+ _IO_sscanf F
+ _IO_stderr_ D 0x50
+ _IO_stdin_ D 0x50
+ _IO_stdout_ D 0x50
+ _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_switch_to_get_mode F
+ _IO_un_link F
+ _IO_ungetc F
+ _IO_unsave_markers F
+ _IO_vfprintf F
+ _IO_vfscanf F
+ _IO_vsprintf F
+ ___brk_addr D 0x4
+ __after_morecore_hook D 0x4
+ __argz_count F
+ __argz_next F
+ __argz_stringify F
+ __assert_fail F
+ __assert_perror_fail F
+ __bsd_getpgrp F
+ __bzero F
+ __check_rhosts_file D 0x4
+ __cmsg_nxthdr F
+ __ctype32_b D 0x4
+ __ctype_b D 0x4
+ __ctype_get_mb_cur_max F
+ __ctype_tolower D 0x4
+ __ctype_toupper D 0x4
+ __curbrk D 0x4
+ __daylight D 0x4
+ __dcgettext F
+ __default_morecore F
+ __deregister_frame F
+ __deregister_frame_info F
+ __dgettext F
+ __dup2 F
+ __divdi3 F
+ __environ D 0x4
+ __errno_location F
+ __fcntl F
+ __ffs F
+ __finite F
+ __finitef F
+ __finitel F
+ __fork F
+ __fpu_control D 0x4
+ __frame_state_for F
+ __free_hook D 0x4
+ __fxstat F
+ __getdelim F
+ __getpagesize F
+ __getpgid F
+ __getpid F
+ __gettimeofday F
+ __gmtime_r F
+ __h_errno_location F
+ __isinf F
+ __isinff F
+ __isinfl F
+ __isnan F
+ __isnanf F
+ __isnanl F
+ __iswctype F
+ __ivaliduser F
+ __libc_calloc F
+ __libc_free F
+ __libc_init_first F
+ __libc_mallinfo F
+ __libc_malloc F
+ __libc_mallopt F
+ __libc_memalign F
+ __libc_pvalloc F
+ __libc_realloc F
+ __libc_start_main F
+ __libc_valloc F
+ __lxstat F
+ __malloc_hook D 0x4
+ __malloc_initialize_hook D 0x4
+ __mbrlen F
+ __mbrtowc F
+ __memalign_hook D 0x4
+ __mempcpy F
+ __moddi3 F
+ __monstartup F
+ __morecore D 0x4
+ __nss_configure_lookup F
+ __nss_database_lookup F
+ __nss_group_lookup F
+ __nss_hosts_lookup F
+ __nss_next F
+ __nss_passwd_lookup F
+ __overflow F
+ __pipe F
+ __printf_fp F
+ __profile_frequency F
+ __progname D 0x4
+ __progname_full D 0x4
+ __rcmd_errstr D 0x4
+ __realloc_hook D 0x4
+ __register_frame F
+ __register_frame_info F
+ __register_frame_info_table F
+ __register_frame_table F
+ __res_randomid F
+ __sbrk F
+ __secure_getenv F
+ __select F
+ __setpgid F
+ __sigaction F
+ __sigaddset F
+ __sigdelset F
+ __sigismember F
+ __sigpause F
+ __statfs F
+ __stpcpy F
+ __stpncpy F
+ __strcasecmp F
+ __strdup F
+ __strerror_r F
+ __strtod_internal F
+ __strtof_internal F
+ __strtok_r F
+ __strtol_internal F
+ __strtold_internal F
+ __strtoll_internal F
+ __strtoq_internal F
+ __strtoul_internal F
+ __strtoull_internal F
+ __strtouq_internal F
+ __sysv_signal F
+ __timezone D 0x4
+ __tzname D 0x8
+ __udivdi3 F
+ __uflow F
+ __umoddi3 F
+ __underflow F
+ __vfscanf F
+ __vsnprintf F
+ __vsscanf F
+ __wait F
+ __waitpid F
+ __wcstod_internal F
+ __wcstof_internal F
+ __wcstol_internal F
+ __wcstold_internal F
+ __wcstoll_internal F
+ __wcstoul_internal F
+ __wcstoull_internal F
+ __xmknod F
+ __xpg_basename F
+ __xstat F
+ _environ D 0x4
+ _exit 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 D 0x4
+ _obstack_allocated_p F
+ _obstack_begin F
+ _obstack_begin_1 F
+ _obstack_free F
+ _obstack_memory_used F
+ _obstack_newchunk F
+ _res D 0x200
+ _rpc_dtablesize F
+ _seterr_reply F
+ _setjmp F
+ _sys_errlist D 0x1ec
+ _sys_nerr D 0x4
+ _sys_siglist D 0x80
+ _tolower F
+ _toupper F
+ a64l F
+ abort F
+ abs F
+ accept F
+ addmntent F
+ adjtime F
+ advance F
+ alphasort 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
+ atexit F
+ atof F
+ atoi F
+ atol F
+ atoll F
+ authnone_create F
+ authunix_create F
+ authunix_create_default F
+ basename F
+ bcmp F
+ bcopy F
+ bind F
+ bindresvport F
+ bindtextdomain F
+ brk F
+ bsd_signal F
+ bsearch F
+ btowc F
+ bzero F
+ cacheflush F
+ calloc F
+ callrpc F
+ canonicalize_file_name F
+ catclose F
+ catgets F
+ catopen 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
+ clock F
+ clone F
+ close F
+ closedir F
+ closelog F
+ confstr F
+ connect F
+ copysign F
+ copysignf F
+ copysignl F
+ ctermid F
+ ctime F
+ ctime_r F
+ cuserid F
+ daemon F
+ daylight D 0x4
+ dcgettext F
+ dgettext F
+ difftime F
+ dirfd F
+ dirname F
+ div F
+ dprintf F
+ drand48 F
+ drand48_r F
+ dysize 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
+ endspent F
+ endttyent F
+ endusershell F
+ endutent F
+ environ D 0x4
+ envz_add F
+ envz_entry F
+ envz_get F
+ envz_merge F
+ envz_remove F
+ envz_strip 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
+ execl F
+ execle F
+ execlp F
+ execv F
+ execve F
+ execvp F
+ exit F
+ fchflags F
+ fchown F
+ fclose F
+ fcloseall F
+ fcntl F
+ fcvt F
+ fcvt_r F
+ fdopen F
+ feof F
+ feof_unlocked F
+ ferror F
+ ferror_unlocked F
+ fexecve F
+ fflush F
+ fflush_unlocked F
+ ffs F
+ fgetc F
+ fgetgrent F
+ fgetgrent_r F
+ fgetpos F
+ fgetpwent F
+ fgetpwent_r F
+ fgets F
+ fgetspent F
+ fgetspent_r F
+ fileno F
+ fileno_unlocked F
+ finite F
+ finitef F
+ finitel F
+ flockfile F
+ fnmatch F
+ fopen F
+ fopencookie F
+ fork F
+ fpathconf F
+ fprintf F
+ fputc F
+ fputc_unlocked F
+ fputs F
+ fread F
+ free F
+ freeaddrinfo F
+ freopen F
+ frexp F
+ frexpf F
+ frexpl F
+ fscanf F
+ fseek F
+ fsetpos F
+ ftell F
+ ftime F
+ ftok F
+ ftrylockfile F
+ fts_children F
+ fts_close F
+ fts_open F
+ fts_read F
+ fts_set F
+ ftw F
+ funlockfile F
+ fwrite F
+ gcvt F
+ get_avphys_pages F
+ get_current_dir_name 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
+ getc F
+ getc_unlocked F
+ getchar F
+ getchar_unlocked F
+ getcwd F
+ getdelim F
+ getdirentries 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
+ 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
+ getline F
+ getlogin F
+ getlogin_r F
+ getmntent F
+ getmntent_r F
+ getnetbyaddr F
+ getnetbyaddr_r F
+ getnetbyname F
+ getnetbyname_r F
+ getnetent F
+ getnetent_r F
+ getnetgrent F
+ getnetgrent_r F
+ getopt F
+ getopt_long F
+ getopt_long_only F
+ getpagesize F
+ getpass F
+ getpid F
+ getpriority F
+ getprotobyname F
+ getprotobyname_r F
+ getprotobynumber F
+ getprotobynumber_r F
+ getprotoent F
+ getprotoent_r F
+ getpublickey F
+ getpw F
+ getpwent F
+ getpwent_r F
+ getpwnam F
+ getpwnam_r F
+ getpwuid F
+ getpwuid_r F
+ getresgid F
+ getresuid F
+ getrpcbyname F
+ getrpcbyname_r F
+ getrpcbynumber F
+ getrpcbynumber_r F
+ getrpcent F
+ getrpcent_r F
+ getrpcport F
+ gets F
+ getsecretkey F
+ getservbyname F
+ getservbyname_r F
+ getservbyport F
+ getservbyport_r F
+ getservent F
+ getservent_r F
+ getsockname F
+ getspent F
+ getspent_r F
+ getspnam F
+ getspnam_r F
+ getsubopt F
+ gettext F
+ getttyent F
+ getttynam F
+ getuid F
+ getusershell F
+ getutent F
+ getutent_r F
+ getutid F
+ getutid_r F
+ getutline F
+ getutline_r F
+ getw F
+ getwd F
+ glob F
+ glob_pattern_p F
+ globfree F
+ gmtime F
+ gmtime_r 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
+ hsearch F
+ hsearch_r F
+ hstrerror F
+ htonl F
+ htons F
+ index 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
+ initgroups F
+ initstate F
+ initstate_r F
+ innetgr F
+ insque F
+ iruserok F
+ isalnum F
+ isalpha F
+ isascii F
+ isatty F
+ isblank F
+ iscntrl F
+ isdigit F
+ isfdtype F
+ isgraph F
+ isinf F
+ isinff F
+ isinfl F
+ islower F
+ isnan F
+ isnanf F
+ isnanl F
+ isprint F
+ ispunct F
+ isspace F
+ isupper F
+ iswalnum F
+ iswalpha F
+ iswcntrl F
+ iswctype F
+ iswdigit F
+ iswgraph F
+ iswlower F
+ iswprint F
+ iswpunct F
+ iswspace F
+ iswupper F
+ iswxdigit F
+ isxdigit F
+ jrand48 F
+ jrand48_r F
+ kill F
+ killpg F
+ l64a F
+ labs F
+ lchown F
+ lckpwdf F
+ lcong48 F
+ lcong48_r F
+ ldexp F
+ ldexpf F
+ ldexpl F
+ ldiv F
+ lfind F
+ listen F
+ llabs F
+ lldiv F
+ llseek F
+ loc1 D 0x4
+ loc2 D 0x4
+ localeconv F
+ localtime F
+ localtime_r F
+ lockf F
+ locs D 0x4
+ longjmp F
+ lrand48 F
+ lrand48_r F
+ lsearch F
+ lseek F
+ mallinfo F
+ malloc F
+ malloc_get_state F
+ malloc_set_state F
+ malloc_stats F
+ malloc_trim F
+ malloc_usable_size F
+ mallopt F
+ mallwatch D 0x4
+ mblen F
+ mbrlen F
+ mbrtowc F
+ mbsinit F
+ mbsnrtowcs F
+ mbsrtowcs F
+ mbstowcs F
+ mbtowc F
+ mcheck F
+ memalign F
+ memccpy F
+ memchr F
+ memcmp F
+ memcpy F
+ memfrob F
+ memmem F
+ memmove F
+ memset F
+ mkfifo F
+ mkstemp F
+ mktemp F
+ mktime F
+ modf F
+ modff F
+ modfl F
+ monstartup F
+ mprobe F
+ mrand48 F
+ mrand48_r F
+ msgctl F
+ msgget F
+ msgrcv F
+ msgsnd F
+ mtrace F
+ muntrace F
+ nice F
+ nl_langinfo F
+ nrand48 F
+ nrand48_r F
+ ntohl F
+ ntohs 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
+ open_memstream F
+ opendir F
+ openlog F
+ optarg D 0x4
+ opterr D 0x4
+ optind D 0x4
+ optopt D 0x4
+ parse_printf_format F
+ pathconf F
+ pclose F
+ perror F
+ personality F
+ pmap_getmaps F
+ pmap_getport F
+ pmap_rmtcall F
+ pmap_set F
+ pmap_unset F
+ popen F
+ printf F
+ profil F
+ program_invocation_name D 0x4
+ program_invocation_short_name D 0x4
+ pselect 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
+ putc F
+ putc_unlocked F
+ putchar F
+ putchar_unlocked F
+ putenv F
+ putpwent F
+ puts F
+ putspent F
+ pututline F
+ putw F
+ pvalloc F
+ qecvt F
+ qecvt_r F
+ qfcvt F
+ qfcvt_r F
+ qgcvt F
+ qsort F
+ raise F
+ rand F
+ rand_r F
+ random F
+ random_r F
+ rcmd F
+ re_comp F
+ re_compile_fastmap F
+ re_compile_pattern F
+ re_exec F
+ re_match F
+ re_match_2 F
+ re_max_failures D 0x4
+ re_search F
+ re_search_2 F
+ re_set_registers F
+ re_set_syntax F
+ re_syntax_options D 0x4
+ read F
+ readdir F
+ readdir_r F
+ readlink F
+ readv F
+ realloc F
+ realpath F
+ reboot F
+ regcomp F
+ regerror F
+ regexec F
+ regfree F
+ register_printf_function F
+ registerrpc F
+ remove F
+ remque F
+ res_init F
+ revoke F
+ rewind F
+ rewinddir F
+ rexec F
+ rexecoptions D 0x4
+ rindex F
+ rpc_createerr D 0x10
+ rpmatch F
+ rresvport F
+ ruserok F
+ ruserpass F
+ sbrk F
+ scalbn F
+ scalbnf F
+ scalbnl F
+ scandir F
+ scanf F
+ seed48 F
+ seed48_r F
+ seekdir F
+ semctl F
+ semget F
+ semop F
+ setaliasent F
+ setbuf F
+ setbuffer F
+ setcontext F
+ setegid F
+ setenv F
+ seteuid F
+ setfsent F
+ setfsgid F
+ setfsuid F
+ setgid F
+ setgrent F
+ setgroups F
+ sethostent F
+ sethostid F
+ setlinebuf F
+ setlocale F
+ setlogin F
+ setlogmask F
+ setmntent F
+ setnetent F
+ setnetgrent F
+ setpgrp F
+ setprotoent F
+ setpwent F
+ setregid F
+ setresgid F
+ setresuid F
+ setreuid F
+ setrpcent F
+ setservent F
+ setsockopt F
+ setspent F
+ setstate F
+ setstate_r F
+ setttyent F
+ setuid F
+ setusershell F
+ setutent F
+ setvbuf F
+ sgetspent F
+ sgetspent_r F
+ shmat F
+ shmctl F
+ shmdt F
+ shmget F
+ sigaction F
+ sigaddset F
+ sigandset F
+ sigblock F
+ sigdelset F
+ sigemptyset F
+ sigfillset F
+ siggetmask F
+ siginterrupt F
+ sigisemptyset F
+ sigismember F
+ siglongjmp F
+ signal F
+ sigorset F
+ sigpause F
+ sigpending F
+ sigprocmask F
+ sigreturn F
+ sigsetmask F
+ sigstack F
+ sigsuspend F
+ sigvec F
+ sigwait F
+ sleep F
+ snprintf F
+ socket F
+ sprintf F
+ srand F
+ srand48 F
+ srand48_r F
+ srandom F
+ srandom_r F
+ sscanf F
+ ssignal F
+ sstk F
+ stderr D 0x4
+ stdin D 0x4
+ stdout D 0x4
+ step F
+ stpcpy F
+ stpncpy F
+ strcasecmp F
+ strcat F
+ strchr F
+ strcmp F
+ strcoll F
+ strcpy F
+ strcspn F
+ strdup F
+ strerror F
+ strerror_r F
+ strfmon F
+ strfry F
+ strftime F
+ strlen F
+ strncasecmp F
+ strncat F
+ strncmp F
+ strncpy F
+ strndup F
+ strnlen F
+ strpbrk F
+ strptime F
+ strrchr F
+ strsep F
+ strsignal F
+ strspn F
+ strstr F
+ strtod F
+ strtof F
+ strtok F
+ strtok_r F
+ strtol F
+ strtold F
+ strtoll F
+ strtoq F
+ strtoul F
+ strtoull F
+ strtouq F
+ strxfrm F
+ stty F
+ svc_exit F
+ svc_fdset D 0x80
+ svc_getreq F
+ svc_getreqset F
+ 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
+ swab F
+ sys_errlist D 0x1ec
+ sys_nerr D 0x4
+ sys_sigabbrev D 0x80
+ sys_siglist D 0x80
+ syscall F
+ sysconf F
+ sysctl F
+ syslog F
+ system F
+ tcdrain F
+ tcflow F
+ tcflush F
+ tcgetattr F
+ tcgetpgrp F
+ tcsendbreak F
+ tcsetattr F
+ tcsetpgrp F
+ tdelete F
+ telldir F
+ tempnam F
+ textdomain F
+ tfind F
+ time F
+ timegm F
+ timelocal F
+ times F
+ timezone D 0x4
+ tmpfile F
+ tmpnam F
+ tmpnam_r F
+ toascii F
+ tolower F
+ toupper F
+ towctrans F
+ towlower F
+ towupper F
+ tr_break F
+ tsearch F
+ ttyname F
+ ttyname_r F
+ ttyslot F
+ twalk F
+ tzname D 0x8
+ tzset F
+ ualarm F
+ ulckpwdf F
+ ulimit F
+ ungetc F
+ unlink F
+ unsetenv F
+ updwtmp F
+ usleep F
+ ustat F
+ utimes F
+ utmpname F
+ valloc F
+ vasprintf F
+ vdprintf F
+ verr F
+ verrx F
+ vfprintf F
+ vfscanf F
+ vlimit F
+ vprintf F
+ vscanf F
+ vsnprintf F
+ vsprintf F
+ vsscanf F
+ vsyslog F
+ vtimes F
+ vwarn F
+ vwarnx F
+ wait F
+ wait3 F
+ waitpid F
+ warn F
+ warnx F
+ wcpcpy F
+ wcpncpy F
+ wcrtomb F
+ wcscat F
+ wcschr F
+ wcscmp F
+ wcscoll F
+ wcscpy F
+ wcscspn F
+ wcsdup F
+ wcslen F
+ wcsncat F
+ wcsncmp F
+ wcsncpy F
+ wcsnrtombs F
+ wcspbrk F
+ wcsrchr F
+ wcsrtombs F
+ wcsspn F
+ wcsstr F
+ wcstod F
+ wcstof F
+ wcstok F
+ wcstol F
+ wcstold F
+ wcstombs F
+ wcstoq F
+ wcstoul F
+ wcstouq F
+ wcswidth F
+ wcsxfrm F
+ wctob F
+ wctomb F
+ wctrans F
+ wctype F
+ wcwidth F
+ wmemchr F
+ wmemcmp F
+ wmemcpy F
+ wmemmove F
+ wmemset F
+ write F
+ writev F
+ xdr_accepted_reply F
+ xdr_array 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_int F
+ xdr_key_netstarg F
+ xdr_key_netstres F
+ xdr_keybuf F
+ xdr_keystatus F
+ xdr_long F
+ xdr_netobj F
+ xdr_opaque F
+ xdr_opaque_auth F
+ xdr_pmap F
+ xdr_pmaplist F
+ xdr_pointer F
+ xdr_reference F
+ xdr_rejected_reply F
+ xdr_replymsg F
+ xdr_rmtcall_args F
+ xdr_rmtcallres F
+ xdr_short F
+ xdr_string F
+ xdr_u_char F
+ xdr_u_int F
+ xdr_u_long F
+ xdr_u_short F
+ xdr_union 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
+GLIBC_2.1
+ GLIBC_2.1 A
+ _IO_2_1_stderr_ D 0x98
+ _IO_2_1_stdin_ D 0x98
+ _IO_2_1_stdout_ D 0x98
+ _IO_do_write F
+ _IO_fclose F
+ _IO_fdopen F
+ _IO_fgetpos64 F
+ _IO_file_attach F
+ _IO_file_close_it F
+ _IO_file_finish F
+ _IO_file_fopen F
+ _IO_file_init F
+ _IO_file_overflow F
+ _IO_file_seekoff F
+ _IO_file_setbuf F
+ _IO_file_sync F
+ _IO_file_underflow F
+ _IO_file_write F
+ _IO_file_xsputn F
+ _IO_fopen F
+ _IO_fsetpos64 F
+ _IO_getline_info F
+ _IO_popen F
+ _IO_proc_close F
+ _IO_proc_open F
+ __asprintf F
+ __backtrace F
+ __backtrace_symbols F
+ __backtrace_symbols_fd F
+ __duplocale F
+ __freelocale F
+ __fxstat64 F
+ __isalnum_l F
+ __isalpha_l F
+ __isascii_l F
+ __isblank_l F
+ __iscntrl_l F
+ __isdigit_l F
+ __isgraph_l F
+ __islower_l 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_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
+ __key_decryptsession_pk_LOCAL D 0x4
+ __key_encryptsession_pk_LOCAL D 0x4
+ __key_gendes_LOCAL D 0x4
+ __libc_allocate_rtsig F
+ __libc_current_sigrtmax F
+ __libc_current_sigrtmin F
+ __libc_freeres F
+ __libc_sa_len F
+ __lxstat64 F
+ __newlocale F
+ __pread64 F
+ __pwrite64 F
+ __rawmemchr F
+ __signbit F
+ __signbitf F
+ __strcasecmp_l F
+ __strcasestr F
+ __strcoll_l F
+ __strfmon_l F
+ __strncasecmp_l F
+ __strtod_l F
+ __strtof_l F
+ __strtol_l F
+ __strtold_l F
+ __strtoll_l F
+ __strtoul_l F
+ __strtoull_l F
+ __strxfrm_l F
+ __toascii_l F
+ __tolower_l F
+ __toupper_l F
+ __towctrans F
+ __towctrans_l F
+ __towlower_l F
+ __towupper_l F
+ __wcscasecmp_l F
+ __wcscoll_l F
+ __wcsncasecmp_l F
+ __wcstod_l F
+ __wcstof_l F
+ __wcstol_l F
+ __wcstold_l F
+ __wcstoll_l F
+ __wcstoul_l F
+ __wcstoull_l F
+ __wcsxfrm_l F
+ __wctype_l F
+ __xstat64 F
+ _authenticate F
+ _dl_mcount_wrapper F
+ _dl_mcount_wrapper_check F
+ _sys_errlist D 0x1f4
+ _sys_nerr D 0x4
+ _sys_siglist D 0x100
+ addseverity 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
+ authdes_create F
+ authdes_getucred F
+ authdes_pk_create F
+ backtrace F
+ backtrace_symbols F
+ backtrace_symbols_fd F
+ cbc_crypt F
+ clntunix_create F
+ creat64 F
+ des_setparity F
+ ecb_crypt F
+ endutxent F
+ fattach F
+ fclose F
+ fdetach F
+ fdopen F
+ ffsl F
+ ffsll F
+ fgetc_unlocked F
+ fgetpos64 F
+ fgets_unlocked F
+ fmtmsg F
+ fopen F
+ fopen64 F
+ fputs_unlocked F
+ fread_unlocked F
+ freopen64 F
+ fseeko F
+ fseeko64 F
+ fsetpos64 F
+ fstatfs64 F
+ fstatvfs F
+ fstatvfs64 F
+ ftello F
+ ftello64 F
+ ftruncate64 F
+ ftw64 F
+ fwrite_unlocked F
+ gai_strerror F
+ getcontext F
+ getdate F
+ getdate_err D 0x4
+ getdate_r F
+ getmsg F
+ getnameinfo F
+ getnetname F
+ getpt F
+ getrlimit64 F
+ getutxent F
+ getutxid F
+ getutxline F
+ glob64 F
+ globfree64 F
+ gnu_get_libc_release F
+ gnu_get_libc_version F
+ grantpt F
+ host2netname F
+ iconv F
+ iconv_close F
+ iconv_open F
+ if_freenameindex F
+ if_indextoname F
+ if_nameindex F
+ if_nametoindex F
+ in6addr_any D 0x10
+ in6addr_loopback D 0x10
+ isastream F
+ iswblank 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
+ lockf64 F
+ lseek64 F
+ makecontext F
+ mempcpy F
+ mmap64 F
+ netname2host F
+ netname2user F
+ nftw F
+ nftw64 F
+ ntp_gettime F
+ open64 F
+ passwd2des F
+ pclose F
+ popen F
+ pread F
+ pread64 F
+ printf_size F
+ printf_size_info F
+ pthread_attr_init F
+ ptsname F
+ ptsname_r F
+ putgrent F
+ putmsg F
+ pututxline F
+ pwrite F
+ pwrite64 F
+ rawmemchr F
+ readdir64 F
+ readdir64_r F
+ rtime F
+ scandir64 F
+ setrlimit64 F
+ setutxent F
+ sighold F
+ sigignore F
+ sigqueue F
+ sigrelse F
+ sigset F
+ sigtimedwait F
+ sigwaitinfo F
+ statfs64 F
+ statvfs F
+ statvfs64 F
+ strcasestr F
+ strtoimax F
+ strtoumax F
+ strverscmp F
+ svcunix_create F
+ svcunixfd_create F
+ swapcontext F
+ sys_errlist D 0x1f4
+ sys_nerr D 0x4
+ sys_sigabbrev D 0x100
+ sys_siglist D 0x100
+ sysv_signal F
+ tcgetsid F
+ tdestroy F
+ tmpfile F
+ tmpfile64 F
+ truncate64 F
+ unlockpt F
+ updwtmpx F
+ user2netname F
+ utmpxname F
+ versionsort F
+ versionsort64 F
+ waitid F
+ wcscasecmp F
+ wcsncasecmp F
+ wcsnlen F
+ wcstoimax F
+ wcstoll F
+ wcstoull F
+ wcstoumax F
+ wcswcs F
+ wordexp F
+ wordfree F
+ xdecrypt F
+ xdr_authdes_cred F
+ xdr_authdes_verf F
+ xdr_getcredres F
+ xdr_int16_t F
+ xdr_int32_t F
+ xdr_int8_t F
+ xdr_netnamestr F
+ xdr_sizeof F
+ xdr_uint16_t F
+ xdr_uint32_t F
+ xdr_uint8_t F
+ xdr_unixcred F
+__poll GLIBC_2.1 w ? D .text 00000000
+capget GLIBC_2.1 g ? D .text 00000000
+capset GLIBC_2.1 g ? D .text 00000000
+getpmsg GLIBC_2.1 g ? D .text 00000000
+ntp_adjtime GLIBC_2.1 w ? D .text 00000000
+putpmsg GLIBC_2.1 g ? D .text 00000000
+sendfile GLIBC_2.1 g ? D .text 00000000
+umount2 GLIBC_2.1 w ? D .text 00000000
+GLIBC_2.1.1
+ GLIBC_2.1.1 A
+ _Exit F
+ __mempcpy_small F
+ __stpcpy_small F
+ __strcpy_small F
+ __strcspn_c1 F
+ __strcspn_c2 F
+ __strcspn_c3 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
+ __strtok_r_1c F
+ __strverscmp F
+ getutmp F
+ getutmpx F
+ imaxabs F
+ imaxdiv F
+ strchrnul F
+ xdr_hyper F
+ xdr_int64_t F
+ xdr_longlong_t F
+ xdr_u_hyper F
+ xdr_u_longlong_t F
+ xdr_uint64_t F
+GLIBC_2.1.2
+ GLIBC_2.1.2 A
+ getaliasbyname_r F
+ getaliasent_r F
+ getgrent_r F
+ getgrgid_r F
+ getgrnam_r F
+ gethostbyaddr_r F
+ gethostbyname2_r F
+ gethostbyname_r F
+ gethostent_r F
+ getnetbyaddr_r F
+ getnetbyname_r F
+ getnetent_r F
+ getprotobyname_r F
+ getprotobynumber_r F
+ getprotoent_r F
+ getpwent_r F
+ getpwnam_r F
+ getpwuid_r F
+ getrpcbyname_r F
+ getrpcbynumber_r F
+ getrpcent_r F
+ getservbyname_r F
+ getservbyport_r F
+ getservent_r F
+ getspent_r F
+ getspnam_r F
+__vfork GLIBC_2.1.2 g ? D .text 00000000
+GLIBC_2.1.3
+ GLIBC_2.1.3 A
+ __cxa_atexit F
+ __cxa_finalize F
+ __sigsuspend F
+GLIBC_2.10
+ GLIBC_2.10 A
+ __cxa_at_quick_exit F
+ __posix_getopt F
+ accept4 F
+ endsgent F
+ fallocate F
+ fgetsgent F
+ fgetsgent_r F
+ getsgent F
+ getsgent_r F
+ getsgnam F
+ getsgnam_r F
+ malloc_info F
+ preadv F
+ preadv64 F
+ psiginfo F
+ putsgent F
+ pwritev F
+ pwritev64 F
+ quick_exit F
+ register_printf_modifier F
+ register_printf_specifier F
+ register_printf_type F
+ setsgent F
+ sgetsgent F
+ sgetsgent_r F
+GLIBC_2.11
+ GLIBC_2.11 A
+ __longjmp_chk F
+ execvpe F
+ fallocate64 F
+ mkostemps F
+ mkostemps64 F
+ mkstemps F
+ mkstemps64 F
+GLIBC_2.12
+ GLIBC_2.12 A
+ _sys_errlist D 0x21c
+ _sys_nerr D 0x4
+ ntp_gettimex F
+ recvmmsg F
+ sys_errlist D 0x21c
+ sys_nerr D 0x4
+GLIBC_2.13
+ GLIBC_2.13 A
+ prlimit F
+fanotify_init GLIBC_2.13 g ? D .text 00000000
+fanotify_mark GLIBC_2.13 g ? D .text 00000000
+prlimit64 GLIBC_2.13 g ? D .text 00000000
+GLIBC_2.14
+ GLIBC_2.14 A
+ sendmmsg F
+clock_adjtime GLIBC_2.14 g ? D .text 00000000
+name_to_handle_at GLIBC_2.14 g ? D .text 00000000
+open_by_handle_at GLIBC_2.14 g ? D .text 00000000
+setns GLIBC_2.14 g ? D .text 00000000
+syncfs GLIBC_2.14 g ? D .text 00000000
+GLIBC_2.15
+ GLIBC_2.15 A
+ __fdelt_chk F
+ __fdelt_warn F
+ posix_spawn F
+ posix_spawnp F
+ scandirat F
+ scandirat64 F
+process_vm_readv GLIBC_2.15 g ? D .text 00000000
+process_vm_writev GLIBC_2.15 g ? D .text 00000000
+GLIBC_2.16
+ GLIBC_2.16 A
+ __getauxval F
+ __poll_chk F
+ __ppoll_chk F
+ aligned_alloc F
+ c16rtomb F
+ c32rtomb F
+ getauxval F
+ mbrtoc16 F
+ mbrtoc32 F
+ timespec_get F
+GLIBC_2.17
+ GLIBC_2.17 A
+ clock_getcpuclockid F
+ clock_getres F
+ clock_gettime F
+ clock_nanosleep F
+ clock_settime F
+ secure_getenv F
+GLIBC_2.2
+ GLIBC_2.2 A
+ _IO_adjust_wcolumn F
+ _IO_fgetpos F
+ _IO_fgetpos64 F
+ _IO_free_wbackup_area F
+ _IO_fsetpos F
+ _IO_fsetpos64 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_list_lock F
+ _IO_list_resetlock F
+ _IO_list_unlock F
+ _IO_seekwmark F
+ _IO_sputbackwc F
+ _IO_sungetwc F
+ _IO_switch_to_main_wget_area F
+ _IO_switch_to_wbackup_area F
+ _IO_switch_to_wget_mode F
+ _IO_unsave_wmarkers 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
+ __assert F
+ __ctype32_tolower D 0x4
+ __ctype32_toupper D 0x4
+ __cyg_profile_func_enter F
+ __cyg_profile_func_exit F
+ __endmntent F
+ __fbufsize F
+ __flbf F
+ __fpending F
+ __fpurge F
+ __freadable F
+ __freading F
+ __fsetlocking F
+ __fwritable F
+ __fwriting F
+ __fxstat64 F
+ __getmntent_r F
+ __lxstat64 F
+ __nl_langinfo_l F
+ __open64 F
+ __res_init F
+ __res_nclose F
+ __res_ninit F
+ __res_state F
+ __setmntent F
+ __strndup F
+ __sysconf F
+ __sysctl F
+ __wctrans_l F
+ __woverflow F
+ __wuflow F
+ __wunderflow F
+ __xpg_sigpause F
+ __xstat64 F
+ _flushlbf F
+ _res_hconf D 0x30
+ alphasort64 F
+ bind_textdomain_codeset F
+ dcngettext F
+ dngettext F
+ fgetpos F
+ fgetpos64 F
+ fgetwc F
+ fgetwc_unlocked F
+ fgetws F
+ fgetws_unlocked F
+ fmemopen F
+ fopencookie F
+ fputwc F
+ fputwc_unlocked F
+ fputws F
+ fputws_unlocked F
+ fsetpos F
+ fsetpos64 F
+ fwide F
+ fwprintf F
+ fwscanf F
+ getdirentries64 F
+ getloadavg F
+ getrlimit64 F
+ getwc F
+ getwc_unlocked F
+ getwchar F
+ getwchar_unlocked F
+ glob64 F
+ iruserok_af F
+ localeconv F
+ mcheck_check_all F
+ mcheck_pedantic F
+ memrchr F
+ mkdtemp F
+ mkstemp64 F
+ moncontrol F
+ msgctl F
+ ngettext F
+ posix_fadvise F
+ posix_fadvise64 F
+ posix_fallocate F
+ posix_fallocate64 F
+ posix_madvise F
+ posix_memalign 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
+ putwc F
+ putwc_unlocked F
+ putwchar F
+ putwchar_unlocked F
+ rcmd_af F
+ readdir64 F
+ readdir64_r F
+ rexec_af F
+ rresvport_af F
+ ruserok_af F
+ scandir64 F
+ semctl F
+ setrlimit F
+ shmctl F
+ svc_getreq_common F
+ svc_getreq_poll F
+ svc_max_pollfd D 0x4
+ svc_pollfd D 0x4
+ swprintf F
+ swscanf F
+ ungetwc F
+ versionsort64 F
+ vfwprintf F
+ vfwscanf F
+ vswprintf F
+ vswscanf F
+ vwprintf F
+ vwscanf F
+ wcschrnul F
+ wcsftime F
+ wmempcpy F
+ wprintf F
+ wscanf F
+__statfs GLIBC_2.2 g ? D .text 00000000
+getrlimit GLIBC_2.2 g ? D .text 00000000
+mincore GLIBC_2.2 g ? D .text 00000000
+GLIBC_2.2.1
+ GLIBC_2.2.1 A
+ posix_openpt F
+pivot_root GLIBC_2.2.1 g ? D .text 00000000
+GLIBC_2.2.2
+ GLIBC_2.2.2 A
+ __nss_hostname_digits_dots F
+GLIBC_2.2.3
+ GLIBC_2.2.3 A
+ __rpc_thread_createerr F
+ __rpc_thread_svc_fdset F
+ __rpc_thread_svc_max_pollfd F
+ __rpc_thread_svc_pollfd F
+ fnmatch F
+ sprofil F
+GLIBC_2.2.4
+ GLIBC_2.2.4 A
+ dl_iterate_phdr F
+ getgrouplist F
+ sockatmark F
+GLIBC_2.2.6
+ GLIBC_2.2.6 A
+__nanosleep GLIBC_2.2.6 w ? D .text 00000000
+GLIBC_2.3
+ GLIBC_2.3 A
+ __ctype_b_loc F
+ __ctype_tolower_loc F
+ __ctype_toupper_loc F
+ __isctype F
+ __strftime_l F
+ __uselocale F
+ __wcsftime_l F
+ _sys_errlist D 0x1f8
+ _sys_nerr D 0x4
+ duplocale F
+ freeifaddrs F
+ freelocale F
+ futimes F
+ getifaddrs F
+ isalnum_l F
+ isalpha_l F
+ isblank_l F
+ iscntrl_l F
+ isctype F
+ isdigit_l F
+ isgraph_l F
+ islower_l 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_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
+ lutimes F
+ newlocale F
+ nl_langinfo_l F
+ readahead F
+ realpath F
+ strcasecmp_l F
+ strcoll_l F
+ strfmon_l F
+ strftime_l F
+ strncasecmp_l F
+ strtod_l F
+ strtof_l F
+ strtol_l F
+ strtold_l F
+ strtoll_l F
+ strtoul_l F
+ strtoull_l F
+ strxfrm_l F
+ sys_errlist D 0x1f8
+ sys_nerr D 0x4
+ tolower_l F
+ toupper_l F
+ towctrans_l F
+ towlower_l F
+ towupper_l F
+ uselocale F
+ wcscasecmp_l F
+ wcscoll_l F
+ wcsftime_l F
+ wcsncasecmp_l F
+ wcstod_l F
+ wcstof_l F
+ wcstol_l F
+ wcstold_l F
+ wcstoll_l F
+ wcstoul_l F
+ wcstoull_l F
+ wcsxfrm_l F
+ wctrans_l F
+ wctype_l F
+fgetxattr GLIBC_2.3 g ? D .text 00000000
+flistxattr GLIBC_2.3 g ? D .text 00000000
+fremovexattr GLIBC_2.3 g ? D .text 00000000
+fsetxattr GLIBC_2.3 g ? D .text 00000000
+getxattr GLIBC_2.3 g ? D .text 00000000
+lgetxattr GLIBC_2.3 g ? D .text 00000000
+listxattr GLIBC_2.3 g ? D .text 00000000
+llistxattr GLIBC_2.3 g ? D .text 00000000
+lremovexattr GLIBC_2.3 g ? D .text 00000000
+lsetxattr GLIBC_2.3 g ? D .text 00000000
+removexattr GLIBC_2.3 g ? D .text 00000000
+sendfile64 GLIBC_2.3 g ? D .text 00000000
+setxattr GLIBC_2.3 g ? D .text 00000000
+GLIBC_2.3.2
+ GLIBC_2.3.2 A
+ __register_atfork F
+ lchmod 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
+ strptime_l F
+epoll_create GLIBC_2.3.2 g ? D .text 00000000
+epoll_ctl GLIBC_2.3.2 g ? D .text 00000000
+epoll_wait GLIBC_2.3.2 g ? D .text 00000000
+GLIBC_2.3.3
+ GLIBC_2.3.3 A
+ _sys_siglist D 0x104
+ gnu_dev_major F
+ gnu_dev_makedev F
+ gnu_dev_minor 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
+ nftw F
+ nftw64 F
+ posix_fadvise64 F
+ posix_fallocate64 F
+ sched_getaffinity F
+ sched_setaffinity F
+ semtimedop F
+ sys_sigabbrev D 0x104
+ sys_siglist D 0x104
+remap_file_pages GLIBC_2.3.3 w ? D .text 00000000
+GLIBC_2.3.4
+ GLIBC_2.3.4 A
+ __chk_fail F
+ __fprintf_chk F
+ __gets_chk F
+ __memcpy_chk F
+ __memmove_chk F
+ __mempcpy_chk F
+ __memset_chk F
+ __printf_chk F
+ __snprintf_chk F
+ __sprintf_chk F
+ __stpcpy_chk F
+ __strcat_chk F
+ __strcpy_chk F
+ __strncat_chk F
+ __strncpy_chk F
+ __vfprintf_chk F
+ __vprintf_chk F
+ __vsnprintf_chk F
+ __vsprintf_chk F
+ __xpg_strerror_r F
+ getipv4sourcefilter F
+ getsourcefilter F
+ regexec F
+ sched_getaffinity F
+ sched_setaffinity F
+ setipv4sourcefilter F
+ setsourcefilter F
+ xdr_quad_t F
+ xdr_u_quad_t F
+GLIBC_2.4
+ GLIBC_2.4 A
+ __confstr_chk F
+ __fgets_chk F
+ __fgets_unlocked_chk F
+ __fgetws_chk F
+ __fgetws_unlocked_chk F
+ __fwprintf_chk F
+ __fxstatat F
+ __fxstatat64 F
+ __getcwd_chk F
+ __getdomainname_chk F
+ __getgroups_chk F
+ __gethostname_chk F
+ __getlogin_r_chk F
+ __getwd_chk F
+ __mbsnrtowcs_chk F
+ __mbsrtowcs_chk F
+ __mbstowcs_chk F
+ __pread64_chk F
+ __pread_chk F
+ __ptsname_r_chk F
+ __read_chk F
+ __readlink_chk F
+ __realpath_chk F
+ __recv_chk F
+ __recvfrom_chk F
+ __stack_chk_fail F
+ __stpncpy_chk F
+ __swprintf_chk F
+ __syslog_chk F
+ __ttyname_r_chk F
+ __vfwprintf_chk F
+ __vswprintf_chk F
+ __vsyslog_chk F
+ __vwprintf_chk F
+ __wcpcpy_chk F
+ __wcpncpy_chk F
+ __wcrtomb_chk F
+ __wcscat_chk F
+ __wcscpy_chk F
+ __wcsncat_chk F
+ __wcsncpy_chk F
+ __wcsnrtombs_chk F
+ __wcsrtombs_chk F
+ __wcstombs_chk F
+ __wctomb_chk F
+ __wmemcpy_chk F
+ __wmemmove_chk F
+ __wmempcpy_chk F
+ __wmemset_chk F
+ __wprintf_chk F
+ __xmknodat F
+ _sys_errlist D 0x210
+ _sys_nerr D 0x4
+ eaccess F
+ faccessat F
+ fchmodat F
+ fchownat F
+ fdopendir F
+ futimesat F
+ linkat F
+ mkdirat F
+ mkfifoat F
+ open_wmemstream F
+ openat F
+ openat64 F
+ ppoll F
+ readlinkat F
+ renameat F
+ symlinkat F
+ sys_errlist D 0x210
+ sys_nerr D 0x4
+ unlinkat F
+inotify_add_watch GLIBC_2.4 g ? D .text 00000000
+inotify_init GLIBC_2.4 g ? D .text 00000000
+inotify_rm_watch GLIBC_2.4 g ? D .text 00000000
+unshare GLIBC_2.4 g ? D .text 00000000
+GLIBC_2.5
+ GLIBC_2.5 A
+ __readlinkat_chk 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_rth_add F
+ inet6_rth_getaddr F
+ inet6_rth_init F
+ inet6_rth_reverse F
+ inet6_rth_segments F
+ inet6_rth_space F
+splice GLIBC_2.5 g ? D .text 00000000
+tee GLIBC_2.5 g ? D .text 00000000
+vmsplice GLIBC_2.5 g ? D .text 00000000
+GLIBC_2.6
+ GLIBC_2.6 A
+ __sched_cpucount F
+ epoll_pwait F
+ futimens F
+ sched_getcpu F
+ strerror_l F
+ sync_file_range F
+ utimensat F
+GLIBC_2.7
+ GLIBC_2.7 A
+ __fread_chk F
+ __fread_unlocked_chk 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
+ __open64_2 F
+ __open_2 F
+ __openat64_2 F
+ __openat_2 F
+ __sched_cpualloc F
+ __sched_cpufree F
+ eventfd F
+ eventfd_read F
+ eventfd_write F
+ mkostemp F
+ mkostemp64 F
+ signalfd F
+GLIBC_2.8
+ GLIBC_2.8 A
+ __asprintf_chk F
+ __dprintf_chk F
+ __obstack_printf_chk F
+ __obstack_vprintf_chk F
+ __vasprintf_chk F
+ __vdprintf_chk F
+ qsort_r F
+timerfd_create GLIBC_2.8 g ? D .text 00000000
+timerfd_gettime GLIBC_2.8 g ? D .text 00000000
+timerfd_settime GLIBC_2.8 g ? D .text 00000000
+GLIBC_2.9
+ GLIBC_2.9 A
+dup3 GLIBC_2.9 w ? D .text 00000000
+epoll_create1 GLIBC_2.9 g ? D .text 00000000
+inotify_init1 GLIBC_2.9 g ? D .text 00000000
+pipe2 GLIBC_2.9 w ? D .text 00000000
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..1df145f
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libcrypt.abilist
@@ -0,0 +1,9 @@
+GLIBC_2.0
+ GLIBC_2.0 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..62e6b41
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libdl.abilist
@@ -0,0 +1,18 @@
+GLIBC_2.0
+ GLIBC_2.0 A
+ dladdr F
+ dlclose F
+ dlerror F
+ dlopen F
+ dlsym F
+GLIBC_2.1
+ GLIBC_2.1 A
+ dlopen F
+ dlvsym F
+GLIBC_2.3.3
+ GLIBC_2.3.3 A
+ dladdr1 F
+ dlinfo F
+GLIBC_2.3.4
+ GLIBC_2.3.4 A
+ dlmopen 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..7516c7c
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libm.abilist
@@ -0,0 +1,383 @@
+GLIBC_2.0
+ GLIBC_2.0 A
+ _LIB_VERSION D 0x4
+ 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
+ cbrt F
+ cbrtf F
+ cbrtl F
+ ceil F
+ ceilf F
+ ceill F
+ copysign F
+ copysignf F
+ copysignl F
+ cos F
+ cosf F
+ cosh F
+ coshf F
+ coshl F
+ cosl F
+ drem F
+ dremf F
+ dreml F
+ erf F
+ erfc F
+ erfcf F
+ erfcl F
+ erff F
+ erfl F
+ exp F
+ expf F
+ expl F
+ expm1 F
+ expm1f F
+ expm1l F
+ fabs F
+ fabsf F
+ fabsl F
+ finite F
+ finitef F
+ finitel F
+ floor F
+ floorf F
+ floorl 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
+ log F
+ log10 F
+ log10f F
+ log10l F
+ log1p F
+ log1pf F
+ log1pl F
+ logb F
+ logbf F
+ logbl F
+ logf F
+ logl F
+ matherr F
+ modf F
+ modff F
+ modfl F
+ nextafter F
+ nextafterf F
+ nextafterl F
+ pow F
+ powf F
+ powl F
+ remainder F
+ remainderf F
+ remainderl F
+ rint F
+ rintf F
+ rintl F
+ scalb F
+ scalbf F
+ scalbl F
+ scalbn F
+ scalbnf F
+ scalbnl F
+ signgam D 0x4
+ significand F
+ significandf F
+ significandl F
+ sin 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
+ y0 F
+ y0f F
+ y0l F
+ y1 F
+ y1f F
+ y1l F
+ yn F
+ ynf F
+ ynl F
+GLIBC_2.1
+ GLIBC_2.1 A
+ __clog10 F
+ __clog10f F
+ __clog10l F
+ __finite F
+ __finitef F
+ __finitel F
+ __fpclassify F
+ __fpclassifyf F
+ __signbit F
+ __signbitf 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
+ ccos F
+ ccosf F
+ ccosh F
+ ccoshf F
+ ccoshl F
+ ccosl 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
+ 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
+ exp10 F
+ exp10f F
+ exp10l F
+ exp2 F
+ exp2f F
+ fdim F
+ fdimf F
+ fdiml F
+ feclearexcept F
+ fegetenv F
+ fegetexceptflag F
+ fegetround F
+ feholdexcept F
+ feraiseexcept F
+ fesetenv F
+ fesetexceptflag F
+ fesetround F
+ fetestexcept F
+ feupdateenv F
+ fma F
+ fmaf F
+ fmal F
+ fmax F
+ fmaxf F
+ fmaxl F
+ fmin F
+ fminf F
+ fminl F
+ llrint F
+ llrintf F
+ llrintl F
+ llround F
+ llroundf F
+ llroundl F
+ log2 F
+ log2f F
+ log2l F
+ lrint F
+ lrintf F
+ lrintl F
+ lround F
+ lroundf F
+ lroundl F
+ nan F
+ nanf F
+ nanl F
+ nearbyint F
+ nearbyintf F
+ nearbyintl F
+ nexttoward F
+ nexttowardf F
+ nexttowardl F
+ pow10 F
+ pow10f F
+ pow10l F
+ remquo F
+ remquof F
+ remquol F
+ round F
+ roundf F
+ roundl F
+ scalbln F
+ scalblnf F
+ scalblnl F
+ sincos F
+ sincosf F
+ sincosl F
+ tgamma F
+ tgammaf F
+ tgammal F
+ trunc F
+ truncf F
+ truncl F
+GLIBC_2.15
+ GLIBC_2.15 A
+ __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
+ __cosh_finite F
+ __coshf_finite F
+ __exp10_finite F
+ __exp10f_finite F
+ __exp2_finite F
+ __exp2f_finite F
+ __exp_finite F
+ __expf_finite F
+ __fmod_finite F
+ __fmodf_finite 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
+ __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
+GLIBC_2.2
+ GLIBC_2.2 A
+ feclearexcept F
+ fedisableexcept F
+ feenableexcept F
+ fegetenv F
+ fegetexcept F
+ fegetexceptflag F
+ feraiseexcept F
+ fesetenv F
+ fesetexceptflag F
+ feupdateenv F
+GLIBC_2.4
+ GLIBC_2.4 A
+ exp2l 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..4241e2d
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libnsl.abilist
@@ -0,0 +1,127 @@
+GLIBC_2.0
+ GLIBC_2.0 A
+ __yp_check F
+ xdr_domainname F
+ xdr_keydat F
+ xdr_mapname F
+ xdr_peername F
+ xdr_valdat F
+ xdr_yp_buf 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
+GLIBC_2.1
+ GLIBC_2.1 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
+ 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_obj_p F
+GLIBC_2.2
+ GLIBC_2.2 A
+ xdr_ypall 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..b54080d9
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libpthread.abilist
@@ -0,0 +1,267 @@
+GLIBC_2.0
+ GLIBC_2.0 A
+ _IO_flockfile F
+ _IO_ftrylockfile F
+ _IO_funlockfile F
+ __errno_location F
+ __fcntl F
+ __fork F
+ __h_errno_location 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_setspecific F
+ __sigaction F
+ __wait F
+ _pthread_cleanup_pop F
+ _pthread_cleanup_pop_restore F
+ _pthread_cleanup_push F
+ _pthread_cleanup_push_defer F
+ fcntl F
+ flockfile F
+ fork F
+ ftrylockfile F
+ funlockfile F
+ longjmp F
+ pthread_atfork 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_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_init F
+ pthread_create F
+ pthread_detach F
+ pthread_equal F
+ pthread_exit 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_destroy F
+ pthread_mutex_init F
+ pthread_mutex_lock F
+ pthread_mutex_trylock F
+ pthread_mutex_unlock F
+ pthread_mutexattr_destroy F
+ pthread_mutexattr_getkind_np F
+ pthread_mutexattr_init F
+ pthread_mutexattr_setkind_np F
+ pthread_once F
+ pthread_self F
+ pthread_setcancelstate F
+ pthread_setcanceltype F
+ pthread_setschedparam F
+ pthread_setspecific F
+ pthread_sigmask F
+ pthread_testcancel F
+ raise F
+ sem_destroy F
+ sem_getvalue F
+ sem_init F
+ sem_post F
+ sem_trywait F
+ sem_wait F
+ sigaction F
+ siglongjmp F
+ sigwait F
+ system F
+ tcdrain F
+ wait F
+ waitpid F
+__close GLIBC_2.0 w ? D .text 00000000
+__connect GLIBC_2.0 w ? D .text 00000000
+__lseek GLIBC_2.0 w ? D .text 00000000
+__open GLIBC_2.0 w ? D .text 00000000
+__read GLIBC_2.0 w ? D .text 00000000
+__send GLIBC_2.0 w ? D .text 00000000
+__write GLIBC_2.0 w ? D .text 00000000
+accept GLIBC_2.0 w ? D .text 00000000
+close GLIBC_2.0 w ? D .text 00000000
+connect GLIBC_2.0 w ? D .text 00000000
+fsync GLIBC_2.0 w ? D .text 00000000
+lseek GLIBC_2.0 w ? D .text 00000000
+msync GLIBC_2.0 w ? D .text 00000000
+nanosleep GLIBC_2.0 w ? D .text 00000000
+open GLIBC_2.0 w ? D .text 00000000
+pause GLIBC_2.0 w ? D .text 00000000
+read GLIBC_2.0 w ? D .text 00000000
+recv GLIBC_2.0 w ? D .text 00000000
+recvfrom GLIBC_2.0 w ? D .text 00000000
+recvmsg GLIBC_2.0 w ? D .text 00000000
+send GLIBC_2.0 w ? D .text 00000000
+sendmsg GLIBC_2.0 w ? D .text 00000000
+sendto GLIBC_2.0 w ? D .text 00000000
+vfork GLIBC_2.0 w ? D .text 00000000
+write GLIBC_2.0 w ? D .text 00000000
+GLIBC_2.1
+ GLIBC_2.1 A
+ __libc_allocate_rtsig F
+ __libc_current_sigrtmax F
+ __libc_current_sigrtmin F
+ pthread_attr_getguardsize F
+ pthread_attr_getstackaddr F
+ pthread_attr_getstacksize F
+ pthread_attr_init F
+ pthread_attr_setguardsize F
+ pthread_attr_setstackaddr F
+ pthread_attr_setstacksize F
+ pthread_create F
+ pthread_getconcurrency F
+ pthread_mutexattr_gettype F
+ pthread_mutexattr_settype 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_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_setconcurrency F
+ sem_destroy F
+ sem_getvalue F
+ sem_init F
+ sem_post F
+ sem_trywait F
+ sem_wait F
+GLIBC_2.1.1
+ GLIBC_2.1.1 A
+ sem_close F
+ sem_open F
+ sem_unlink F
+GLIBC_2.1.2
+ GLIBC_2.1.2 A
+__vfork GLIBC_2.1.2 g ? D .text 00000000
+GLIBC_2.11
+ GLIBC_2.11 A
+ pthread_sigqueue F
+GLIBC_2.12
+ GLIBC_2.12 A
+ pthread_getname_np F
+ pthread_mutex_consistent F
+ pthread_mutexattr_getrobust F
+ pthread_mutexattr_setrobust F
+ pthread_setname_np F
+GLIBC_2.2
+ GLIBC_2.2 A
+ __open64 F
+ __pread64 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
+ __pwrite64 F
+ __res_state F
+ lseek64 F
+ open64 F
+ pread F
+ pread64 F
+ pthread_attr_getstack F
+ pthread_attr_setstack F
+ pthread_barrier_destroy F
+ pthread_barrier_init F
+ pthread_barrier_wait F
+ pthread_barrierattr_destroy F
+ pthread_barrierattr_init F
+ pthread_barrierattr_setpshared F
+ pthread_condattr_getpshared F
+ pthread_condattr_setpshared F
+ pthread_getcpuclockid F
+ pthread_mutex_timedlock F
+ pthread_mutexattr_getpshared F
+ pthread_mutexattr_setpshared F
+ pthread_rwlock_timedrdlock F
+ pthread_rwlock_timedwrlock F
+ pthread_spin_destroy F
+ pthread_spin_init F
+ pthread_spin_lock F
+ pthread_spin_trylock F
+ pthread_spin_unlock F
+ pthread_yield F
+ pwrite F
+ pwrite64 F
+ sem_timedwait F
+GLIBC_2.2.3
+ GLIBC_2.2.3 A
+ pthread_getattr_np F
+GLIBC_2.2.6
+ GLIBC_2.2.6 A
+__nanosleep GLIBC_2.2.6 w ? D .text 00000000
+GLIBC_2.3.2
+ GLIBC_2.3.2 A
+ pthread_cond_broadcast F
+ pthread_cond_destroy F
+ pthread_cond_init F
+ pthread_cond_signal F
+ pthread_cond_timedwait F
+ pthread_cond_wait F
+GLIBC_2.3.3
+ GLIBC_2.3.3 A
+ __pthread_cleanup_routine F
+ __pthread_register_cancel F
+ __pthread_register_cancel_defer F
+ __pthread_unregister_cancel F
+ __pthread_unregister_cancel_restore F
+ __pthread_unwind_next F
+ pthread_attr_getaffinity_np F
+ pthread_attr_setaffinity_np F
+ pthread_barrierattr_getpshared F
+ pthread_condattr_getclock F
+ pthread_condattr_setclock F
+ pthread_getaffinity_np F
+ pthread_setaffinity_np F
+ pthread_timedjoin_np F
+ pthread_tryjoin_np F
+GLIBC_2.3.4
+ GLIBC_2.3.4 A
+ pthread_attr_getaffinity_np F
+ pthread_attr_setaffinity_np F
+ pthread_getaffinity_np F
+ pthread_setaffinity_np F
+ pthread_setschedprio F
+GLIBC_2.4
+ GLIBC_2.4 A
+ pthread_mutex_consistent_np F
+ pthread_mutex_getprioceiling F
+ pthread_mutex_setprioceiling F
+ pthread_mutexattr_getprioceiling F
+ pthread_mutexattr_getprotocol F
+ pthread_mutexattr_getrobust_np F
+ pthread_mutexattr_setprioceiling F
+ pthread_mutexattr_setprotocol F
+ pthread_mutexattr_setrobust_np 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..f68333d
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libresolv.abilist
@@ -0,0 +1,104 @@
+GLIBC_2.0
+ GLIBC_2.0 A
+ __b64_ntop F
+ __b64_pton F
+ __dn_comp F
+ __dn_count_labels 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_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_isourserver F
+ __res_mailok F
+ __res_nameinquery F
+ __res_ownok F
+ __res_queriesmatch 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
+ dn_expand F
+ inet_net_ntop F
+ inet_net_pton F
+ inet_neta F
+ res_gethostbyaddr F
+ res_gethostbyname F
+ res_gethostbyname2 F
+ res_mkquery F
+ res_query F
+ res_querydomain F
+ res_search F
+ res_send_setqhook F
+ res_send_setrhook F
+GLIBC_2.2
+ GLIBC_2.2 A
+ __dn_expand F
+ __res_hostalias F
+ __res_mkquery F
+ __res_nmkquery F
+ __res_nquery F
+ __res_nquerydomain F
+ __res_nsearch F
+ __res_nsend F
+ __res_query F
+ __res_querydomain F
+ __res_search F
+GLIBC_2.3.2
+ GLIBC_2.3.2 A
+ __p_rcode F
+GLIBC_2.9
+ GLIBC_2.9 A
+ 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
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..0636806
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/librt.abilist
@@ -0,0 +1,52 @@
+GLIBC_2.1
+ GLIBC_2.1 A
+ 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
+ lio_listio F
+ lio_listio64 F
+GLIBC_2.2
+ GLIBC_2.2 A
+ clock_getcpuclockid F
+ clock_getres F
+ clock_gettime F
+ clock_nanosleep F
+ clock_settime F
+ shm_open F
+ shm_unlink F
+ timer_create F
+ timer_delete F
+ timer_getoverrun F
+ timer_gettime F
+ timer_settime F
+GLIBC_2.3.4
+ GLIBC_2.3.4 A
+ mq_close F
+ mq_getattr F
+ mq_notify F
+ mq_open F
+ mq_receive F
+ mq_send F
+ mq_unlink F
+mq_setattr GLIBC_2.3.4 w ? D .text 00000000
+mq_timedreceive GLIBC_2.3.4 w ? D .text 00000000
+mq_timedsend GLIBC_2.3.4 w ? D .text 00000000
+GLIBC_2.4
+ GLIBC_2.4 A
+ lio_listio F
+ lio_listio64 F
+GLIBC_2.7
+ GLIBC_2.7 A
+ __mq_open_2 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..f331380
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libthread_db.abilist
@@ -0,0 +1,48 @@
+GLIBC_2.1.3
+ GLIBC_2.1.3 A
+ td_init F
+ td_log 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_tsd F
+ td_thr_validate F
+GLIBC_2.2.3
+ GLIBC_2.2.3 A
+ td_symbol_list F
+GLIBC_2.3
+ GLIBC_2.3 A
+ td_thr_tls_get_addr F
+GLIBC_2.3.3
+ GLIBC_2.3.3 A
+ td_thr_tlsbase 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..7422687
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/libutil.abilist
@@ -0,0 +1,8 @@
+GLIBC_2.0
+ GLIBC_2.0 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..109522e
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/localplt.data
@@ -0,0 +1,13 @@
+libc.so: __signbit
+libc.so: calloc
+libc.so: free
+libc.so: fscanf
+libc.so: malloc
+libc.so: memalign
+libc.so: raise
+libc.so: realloc
+libm.so: __signbit
+libm.so: __signbitf
+libm.so: matherr
+libpthread.so: __errno_location
+libpthread.so: raise
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..02eaa96
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.c
@@ -0,0 +1,132 @@
+/* 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 <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..ee719e4
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h
@@ -0,0 +1,292 @@
+/* Copyright (C) 2005-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/>.  */
+
+#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_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
+
+/* Initialize locks to zero.  */
+#define LLL_MUTEX_LOCK_INITIALIZER (0)
+
+#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, (futexp),		      \
+			      __lll_private_flag (FUTEX_WAIT, private),	      \
+			      (val), (timespec));			      \
+    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, (futexp),		      \
+			      __lll_private_flag (FUTEX_WAKE, private),	      \
+			      (nr), 0);					      \
+    INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret;		      \
+  })
+
+#define lll_robust_dead(futexv, private) \
+  do									      \
+    {									      \
+      INTERNAL_SYSCALL_DECL (__err);					      \
+      int *__futexp = &(futexv);					      \
+									      \
+      atomic_or (__futexp, FUTEX_OWNER_DIED);				      \
+      INTERNAL_SYSCALL (futex, __err, 4, __futexp,			      \
+			__lll_private_flag (FUTEX_WAKE, private), 1, 0);      \
+    }									      \
+  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);				      \
+  })
+
+/* Set *futex to 1 if it is 0, atomically.  Returns the old value */
+static inline int __attribute__((always_inline))
+__lll_trylock(int *futex)
+{
+  return atomic_compare_and_exchange_val_acq (futex, 1, 0) != 0;
+}
+#define lll_trylock(lock)       __lll_trylock (&(lock))
+
+/* Set *futex to 2 if it is 0, atomically.  Returns the old value */
+static inline int __attribute__((always_inline))
+__lll_cond_trylock(int *futex)
+{
+  return atomic_compare_and_exchange_val_acq (futex, 2, 0) != 0;
+}
+#define lll_cond_trylock(lock)  __lll_cond_trylock (&(lock))
+
+/* Set *futex to ID if it is 0, atomically.  Returns the old value */
+static inline int __attribute__((always_inline))
+__lll_robust_trylock(int *futex, int id)
+{
+  return 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(lock, private) \
+  (void) ({								      \
+    int *__futex = &(lock);						      \
+    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_robust_lock(lock, id, private) \
+  ({									      \
+    int *__futex = &(lock);						      \
+    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_cond_lock(lock, private) \
+  (void) ({								      \
+    int *__futex = &(lock);						      \
+    if (__builtin_expect (atomic_compare_and_exchange_val_acq (__futex, 2, 0),\
+			  0) != 0)					      \
+      __lll_lock_wait (__futex, private);				      \
+  })
+
+#define lll_robust_cond_lock(lock, id, private) \
+  ({									      \
+    int *__futex = &(lock);						      \
+    int __val = 0;							      \
+    int __id = id | FUTEX_WAITERS;					      \
+    if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, __id,\
+								0), 0))	      \
+      __val = __lll_robust_lock_wait (__futex, private);		      \
+    __val;								      \
+  })
+
+
+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;
+
+#define lll_timedlock(lock, abstime, private) \
+  ({									      \
+    int *__futex = &(lock);						      \
+    int __val = 0;							      \
+    if (__builtin_expect (atomic_compare_and_exchange_val_acq (__futex, 1, 0),\
+			  0) != 0)					      \
+       __val = __lll_timedlock_wait (__futex, abstime, private);	      \
+     __val;								      \
+  })
+
+#define lll_robust_timedlock(lock, abstime, id, private) \
+  ({									      \
+    int *__futex = &(lock);						      \
+    int __val = 0;							      \
+    if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id,  \
+								0), 0))	      \
+      __val = __lll_robust_timedlock_wait (__futex, abstime, private);	      \
+    __val;								      \
+  })
+
+#define lll_unlock(lock, private) \
+  ((void) ({								      \
+    int *__futex = &(lock);						      \
+    int __val = atomic_exchange_rel (__futex, 0);			      \
+    if (__builtin_expect (__val > 1, 0))				      \
+	 lll_futex_wake (__futex, 1, private);			\
+  }))
+
+#define lll_robust_unlock(lock, private) \
+  ((void) ({								      \
+    int *__futex = &(lock);						      \
+    int __val = atomic_exchange_rel (__futex, 0);			      \
+    if (__builtin_expect (__val & FUTEX_WAITERS, 0))			      \
+	 lll_futex_wake (__futex, 1, 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_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..0490e72
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/pt-vfork.S
@@ -0,0 +1,21 @@
+/* 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/>.  */
+
+#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..0897e1e
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/pthread_once.c
@@ -0,0 +1,90 @@
+/* Copyright (C) 2004-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 "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..cf6e5a7
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/vfork.S
@@ -0,0 +1,46 @@
+/* Copyright (C) 2005-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 <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/oldgetrlimit64.c b/ports/sysdeps/unix/sysv/linux/microblaze/oldgetrlimit64.c
new file mode 100644
index 0000000..4c27e95
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/oldgetrlimit64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/oldgetrlimit64.c>
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..65b96e5
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/profil-counter.h
@@ -0,0 +1,20 @@
+/* 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/>.  */
+
+/* We can use the ix86 version.  */
+#include <sysdeps/unix/sysv/linux/i386/profil-counter.h>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/putmsg.c b/ports/sysdeps/unix/sysv/linux/microblaze/putmsg.c
new file mode 100644
index 0000000..ebc1680
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/putmsg.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/putmsg.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/readdir64.c b/ports/sysdeps/unix/sysv/linux/microblaze/readdir64.c
new file mode 100644
index 0000000..2ea26dd
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/readdir64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/readdir64.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/readdir64_r.c b/ports/sysdeps/unix/sysv/linux/microblaze/readdir64_r.c
new file mode 100644
index 0000000..9f54f89
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/readdir64_r.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/readdir64_r.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/scandir64.c b/ports/sysdeps/unix/sysv/linux/microblaze/scandir64.c
new file mode 100644
index 0000000..506fd88
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/scandir64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/scandir64.c>
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..66ba114
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/semctl.c
@@ -0,0 +1,189 @@
+/* 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/>.  */
+
+#include <errno.h>
+#include <stdarg.h>
+#include <sys/sem.h>
+#include <ipc_priv.h>
+
+#include <sysdep.h>
+#include <string.h>
+#include <sys/syscall.h>
+#include <shlib-compat.h>
+
+#include "kernel-features.h"
+
+struct __old_semid_ds
+{
+  struct __old_ipc_perm sem_perm;	/* operation permission struct */
+  __time_t sem_otime;			/* last semop() time */
+  __time_t sem_ctime;			/* last time changed by semctl() */
+  struct sem *__unbounded __sembase;	/* ptr to first semaphore in array */
+  struct sem_queue *__unbounded __sem_pending; /* pending operations */
+  struct sem_queue *__unbounded __sem_pending_last; /* last pending operation */
+  struct sem_undo *__unbounded __undo;	/* ondo requests on this array */
+  unsigned short int sem_nsems;		/* number of semaphores in set */
+};
+
+/* Define a `union semun' suitable for Linux here.  */
+union semun
+{
+  int val;			/* value for SETVAL */
+  struct semid_ds *buf;		/* buffer for IPC_STAT & IPC_SET */
+  unsigned short int *array;	/* array for GETALL & SETALL */
+  struct seminfo *__buf;	/* buffer for IPC_INFO */
+  struct __old_semid_ds *__old_buf;
+};
+
+#include <bp-checks.h>
+#include <bp-semctl.h>		/* definition of CHECK_SEMCTL needs union semum */
+
+/* Return identifier for array of NSEMS semaphores associated with
+   KEY.  */
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+int __old_semctl (int semid, int semnum, int cmd, ...);
+#endif
+int __new_semctl (int semid, int semnum, int cmd, ...);
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+int
+attribute_compat_text_section
+__old_semctl (int semid, int semnum, int cmd, ...)
+{
+  union semun arg;
+  va_list ap;
+
+  va_start (ap, cmd);
+
+  /* Get the argument only if required.  */
+  arg.buf = NULL;
+  switch (cmd)
+    {
+    case SETVAL:        /* arg.val */
+    case GETALL:        /* arg.array */
+    case SETALL:
+    case IPC_STAT:      /* arg.buf */
+    case IPC_SET:
+    case SEM_STAT:
+    case IPC_INFO:      /* arg.__buf */
+    case SEM_INFO:
+      va_start (ap, cmd);
+      arg = va_arg (ap, union semun);
+      va_end (ap);
+      break;
+    }
+
+  va_end (ap);
+
+  return INLINE_SYSCALL (semctl, 4, semid, semnum, cmd, CHECK_SEMCTL (&arg, semid, cmd)->array);
+}
+compat_symbol (libc, __old_semctl, semctl, GLIBC_2_0);
+#endif
+
+int
+__new_semctl (int semid, int semnum, int cmd, ...)
+{
+  union semun arg;
+  va_list ap;
+
+  va_start (ap, cmd);
+
+  /* Get the argument only if required.  */
+  arg.buf = NULL;
+  switch (cmd)
+    {
+    case SETVAL:        /* arg.val */
+    case GETALL:        /* arg.array */
+    case SETALL:
+    case IPC_STAT:      /* arg.buf */
+    case IPC_SET:
+    case SEM_STAT:
+    case IPC_INFO:      /* arg.__buf */
+    case SEM_INFO:
+      va_start (ap, cmd);
+      arg = va_arg (ap, union semun);
+      va_end (ap);
+      break;
+    }
+
+  va_end (ap);
+
+#if __ASSUME_IPC64 > 0
+  return INLINE_SYSCALL (semctl, 4, semid, semnum, cmd | __IPC_64,
+			 CHECK_SEMCTL (&arg, semid, cmd | __IPC_64)->array);
+#else
+  switch (cmd)
+    {
+    case SEM_STAT:
+    case IPC_STAT:
+    case IPC_SET:
+      break;
+    default:
+      return INLINE_SYSCALL (semctl, 4, semid, semnum, cmd,
+			     CHECK_SEMCTL (&arg, semid, cmd)->array);
+    }
+
+  {
+    int save_errno = errno, result;
+    struct __old_semid_ds old;
+    struct semid_ds *buf;
+
+    /* Unfortunately there is no way how to find out for sure whether
+       we should use old or new semctl.  */
+    result = INLINE_SYSCALL (semctl, 4, semid, semnum, cmd | __IPC_64,
+			     CHECK_SEMCTL (&arg, semid, cmd | __IPC_64)->array);
+    if (result != -1 || errno != EINVAL)
+      return result;
+
+    __set_errno(save_errno);
+    buf = arg.buf;
+    arg.__old_buf = &old;
+    if (cmd == IPC_SET)
+      {
+	old.sem_perm.uid = buf->sem_perm.uid;
+	old.sem_perm.gid = buf->sem_perm.gid;
+	old.sem_perm.mode = buf->sem_perm.mode;
+	if (old.sem_perm.uid != buf->sem_perm.uid ||
+	    old.sem_perm.gid != buf->sem_perm.gid)
+	  {
+	    __set_errno (EINVAL);
+	    return -1;
+	  }
+      }
+    result = INLINE_SYSCALL (semctl, 4, semid, semnum, cmd,
+			     CHECK_SEMCTL (&arg, semid, cmd)->array);
+    if (result != -1 && cmd != IPC_SET)
+      {
+	memset(buf, 0, sizeof(*buf));
+	buf->sem_perm.__key = old.sem_perm.__key;
+	buf->sem_perm.uid = old.sem_perm.uid;
+	buf->sem_perm.gid = old.sem_perm.gid;
+	buf->sem_perm.cuid = old.sem_perm.cuid;
+	buf->sem_perm.cgid = old.sem_perm.cgid;
+	buf->sem_perm.mode = old.sem_perm.mode;
+	buf->sem_perm.__seq = old.sem_perm.__seq;
+	buf->sem_otime = old.sem_otime;
+	buf->sem_ctime = old.sem_ctime;
+	buf->sem_nsems = old.sem_nsems;
+      }
+    return result;
+  }
+#endif
+}
+
+versioned_symbol (libc, __new_semctl, semctl, GLIBC_2_2);
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setegid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setegid.c
new file mode 100644
index 0000000..2e3a54c
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setegid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setegid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/seteuid.c b/ports/sysdeps/unix/sysv/linux/microblaze/seteuid.c
new file mode 100644
index 0000000..18e41d0
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/seteuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/seteuid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setfsgid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setfsgid.c
new file mode 100644
index 0000000..0886712
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setfsgid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setfsgid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setfsuid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setfsuid.c
new file mode 100644
index 0000000..a9f22eb
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setfsuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setfsuid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setgid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setgid.c
new file mode 100644
index 0000000..377021d
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setgid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setgid.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..0e70862
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setgroups.c
@@ -0,0 +1,2 @@
+/* We also have to rewrite the kernel gid_t to the user land type.  */
+#include <sysdeps/unix/sysv/linux/i386/setgroups.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setregid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setregid.c
new file mode 100644
index 0000000..99c57ad
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setregid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setregid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setresgid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setresgid.c
new file mode 100644
index 0000000..daca1a4
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setresgid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setresgid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setresuid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setresuid.c
new file mode 100644
index 0000000..3aeabe9
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setresuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setresuid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setreuid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setreuid.c
new file mode 100644
index 0000000..8ad6122
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setreuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setreuid.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setrlimit.c b/ports/sysdeps/unix/sysv/linux/microblaze/setrlimit.c
new file mode 100644
index 0000000..bfaef74
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setrlimit.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setrlimit.c>
diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/setuid.c b/ports/sysdeps/unix/sysv/linux/microblaze/setuid.c
new file mode 100644
index 0000000..de39437
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/setuid.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/setuid.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..2fd0540
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c
@@ -0,0 +1,154 @@
+/* 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/>.  */
+
+#include <errno.h>
+#include <sys/shm.h>
+#include <ipc_priv.h>
+
+#include <sysdep.h>
+#include <string.h>
+#include <sys/syscall.h>
+#include <bits/wordsize.h>
+#include <shlib-compat.h>
+#include <bp-checks.h>
+
+#include <kernel-features.h>
+
+struct __old_shmid_ds
+{
+  struct __old_ipc_perm shm_perm;	/* operation permission struct */
+  int shm_segsz;			/* size of segment in bytes */
+  __time_t shm_atime;			/* time of last shmat() */
+  __time_t shm_dtime;			/* time of last shmdt() */
+  __time_t shm_ctime;			/* time of last change by shmctl() */
+  __ipc_pid_t shm_cpid;			/* pid of creator */
+  __ipc_pid_t shm_lpid;			/* pid of last shmop */
+  unsigned short int shm_nattch;	/* number of current attaches */
+  unsigned short int __shm_npages;	/* size of segment (pages) */
+  unsigned long int *__unbounded __shm_pages; /* array of ptrs to frames -> SHMMAX */
+  struct vm_area_struct *__unbounded __attaches; /* descriptors for attaches */
+};
+
+struct __old_shminfo
+{
+  int shmmax;
+  int shmmin;
+  int shmmni;
+  int shmseg;
+  int shmall;
+};
+
+/* Provide operations to control over shared memory segments.  */
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+int __old_shmctl (int, int, struct __old_shmid_ds *);
+#endif
+int __new_shmctl (int, int, struct shmid_ds *);
+
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
+int
+attribute_compat_text_section
+__old_shmctl (int shmid, int cmd, struct __old_shmid_ds *buf)
+{
+  return INLINE_SYSCALL (shmctl, 3, shmid, cmd, CHECK_1_NULL_OK (buf));
+}
+compat_symbol (libc, __old_shmctl, shmctl, GLIBC_2_0);
+#endif
+
+int
+__new_shmctl (int shmid, int cmd, struct shmid_ds *buf)
+{
+#if __ASSUME_IPC64 > 0
+  return INLINE_SYSCALL (shmctl, 3, shmid, cmd | __IPC_64, CHECK_1 (buf));
+#else
+  switch (cmd) {
+    case SHM_STAT:
+    case IPC_STAT:
+    case IPC_SET:
+#if __WORDSIZE != 32
+    case IPC_INFO:
+#endif
+      break;
+    default:
+      return INLINE_SYSCALL (shmctl, 3, shmid, cmd, CHECK_1 (buf));
+  }
+
+  {
+    int save_errno = errno, result;
+    union
+      {
+	struct __old_shmid_ds ds;
+	struct __old_shminfo info;
+      } old;
+
+    /* Unfortunately there is no way how to find out for sure whether
+       we should use old or new shmctl.  */
+    result = INLINE_SYSCALL (shmctl, 3, shmid, cmd | __IPC_64, CHECK_1 (buf));
+    if (result != -1 || errno != EINVAL)
+      return result;
+
+    __set_errno(save_errno);
+    if (cmd == IPC_SET)
+      {
+	old.ds.shm_perm.uid = buf->shm_perm.uid;
+	old.ds.shm_perm.gid = buf->shm_perm.gid;
+	old.ds.shm_perm.mode = buf->shm_perm.mode;
+	if (old.ds.shm_perm.uid != buf->shm_perm.uid ||
+	    old.ds.shm_perm.gid != buf->shm_perm.gid)
+	  {
+	    __set_errno (EINVAL);
+	    return -1;
+	  }
+      }
+    result = INLINE_SYSCALL (shmctl, 3, shmid, cmd, __ptrvalue (&old.ds));
+    if (result != -1 && (cmd == SHM_STAT || cmd == IPC_STAT))
+      {
+	memset(buf, 0, sizeof(*buf));
+	buf->shm_perm.__key = old.ds.shm_perm.__key;
+	buf->shm_perm.uid = old.ds.shm_perm.uid;
+	buf->shm_perm.gid = old.ds.shm_perm.gid;
+	buf->shm_perm.cuid = old.ds.shm_perm.cuid;
+	buf->shm_perm.cgid = old.ds.shm_perm.cgid;
+	buf->shm_perm.mode = old.ds.shm_perm.mode;
+	buf->shm_perm.__seq = old.ds.shm_perm.__seq;
+	buf->shm_atime = old.ds.shm_atime;
+	buf->shm_dtime = old.ds.shm_dtime;
+	buf->shm_ctime = old.ds.shm_ctime;
+	buf->shm_segsz = old.ds.shm_segsz;
+	buf->shm_nattch = old.ds.shm_nattch;
+	buf->shm_cpid = old.ds.shm_cpid;
+	buf->shm_lpid = old.ds.shm_lpid;
+      }
+#if __WORDSIZE != 32
+    else if (result != -1 && cmd == IPC_INFO)
+      {
+	struct shminfo *i = (struct shminfo *)buf;
+
+	memset(i, 0, sizeof(*i));
+	i->shmmax = old.info.shmmax;
+	i->shmmin = old.info.shmmin;
+	i->shmmni = old.info.shmmni;
+	i->shmseg = old.info.shmseg;
+	i->shmall = old.info.shmall;
+      }
+#endif
+    return result;
+  }
+#endif
+}
+
+versioned_symbol (libc, __new_shmctl, shmctl, GLIBC_2_2);
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..11adfde
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sigcontextinfo.h
@@ -0,0 +1,25 @@
+/* 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 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..c6e5ba1
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/socket.S
@@ -0,0 +1,126 @@
+/* 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/>.  */
+
+#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..156cd7b
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sys/procfs.h
@@ -0,0 +1,123 @@
+/* Copyright (C) 1996-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/>.  */
+
+#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..79881a9
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sys/user.h
@@ -0,0 +1,77 @@
+/* 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/>.  */
+
+#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	i387;
+  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..46d663e
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/syscall.S
@@ -0,0 +1,37 @@
+/* Copyright (C) 2005-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 <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..c69d83b
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/syscalls.list
@@ -0,0 +1,8 @@
+# File name	Caller	Syscall name	Args	Strong name	Weak names
+
+cacheflush	EXTRA	cacheflush	i:iiii	__cacheflush	cacheflush
+oldgetrlimit	EXTRA	getrlimit	i:ip	__old_getrlimit	getrlimit@GLIBC_2.0
+oldsetrlimit	EXTRA	setrlimit	i:ip	__old_setrlimit	setrlimit@GLIBC_2.0
+
+prlimit64	EXTRA	prlimit64	i:iipp	prlimit64
+fanotify_mark	EXTRA	fanotify_mark	i:iiiiis	fanotify_mark
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..0765905
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sysdep.S
@@ -0,0 +1,39 @@
+/* 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/>.  */
+
+#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 100644
index 0000000..b4886c9
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/sysdep.h
@@ -0,0 +1,390 @@
+/* Copyright (C) 2005-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/microblaze/sysdep.h>
+#include <sys/syscall.h>
+
+/* Defines RTLD_PRIVATE_ERRNO.  */
+#include <dl-sysdep.h>
+
+/* 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
+#ifdef __STDC__
+# define SYS_ify(syscall_name)	__NR_##syscall_name
+#else
+# define SYS_ify(syscall_name)	__NR_/**/syscall_name
+#endif
+
+#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 (sc_err); \
+     unsigned int _sys_result = INTERNAL_SYSCALL (name, sc_err, nr, args);	\
+     if (INTERNAL_SYSCALL_ERROR_P (_sys_result, sc_err))\
+       {								\
+	 __set_errno (INTERNAL_SYSCALL_ERRNO (_sys_result, sc_err));		\
+	 _sys_result = (unsigned int) -1;				\
+       }								\
+     (int) _sys_result; })
+
+#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...)	\
+  INTERNAL_SYSCALL_##nr(name,args)
+
+#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 INTERNAL_SYSCALL_0(name,dummy)			\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = SYS_ify(name);	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r12)					\
+      : SYSCALL_CLOBBERS_0 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_NCS_0(number,dummy)			\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = number;	\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r12)					\
+      : SYSCALL_CLOBBERS_0 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_1(name,arg1)			\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = SYS_ify(name);	\
+    register int __r5 __asm__("r5") = arg1;		\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r12)				\
+      : SYSCALL_CLOBBERS_1 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_NCS_1(number,arg1)			\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = number;	\
+    register int __r5 __asm__("r5") = arg1;		\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r12)				\
+      : SYSCALL_CLOBBERS_1 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_2(name,arg1,arg2)		\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = SYS_ify(name);	\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r12)		\
+      : SYSCALL_CLOBBERS_2 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_NCS_2(number,arg1,arg2)		\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = number;	\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r12)		\
+      : SYSCALL_CLOBBERS_2 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_3(name,arg1,arg2,arg3)		\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = SYS_ify(name);	\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    register int __r7 __asm__("r7") = arg3;		\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r12)	\
+      : SYSCALL_CLOBBERS_3 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_NCS_3(number,arg1,arg2,arg3)		\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = number;	        \
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    register int __r7 __asm__("r7") = arg3;		\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r12)	\
+      : SYSCALL_CLOBBERS_3 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_4(name,arg1,arg2,arg3,arg4)	\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = SYS_ify(name);	\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    register int __r7 __asm__("r7") = arg3;		\
+    register int __r8 __asm__("r8") = arg4;		\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r8),"r"(__r12)	\
+      : SYSCALL_CLOBBERS_4 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_NCS_4(number,arg1,arg2,arg3,arg4)	\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = number;	\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    register int __r7 __asm__("r7") = arg3;		\
+    register int __r8 __asm__("r8") = arg4;		\
+    __asm__ __volatile__( "brki r14,8; nop;"		\
+      : "=r"(ret)					\
+      : "r"(__r5), "r"(__r6), "r"(__r7), "r"(__r8),"r"(__r12)	\
+      : SYSCALL_CLOBBERS_4 ); ret;			\
+  })
+
+#define INTERNAL_SYSCALL_5(name,arg1,arg2,arg3,arg4,arg5)	\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = SYS_ify(name);	\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    register int __r7 __asm__("r7") = arg3;		\
+    register int __r8 __asm__("r8") = arg4;		\
+    register int __r9 __asm__("r9") = 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 INTERNAL_SYSCALL_NCS_5(number,arg1,arg2,arg3,arg4,arg5)	\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = number;		\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    register int __r7 __asm__("r7") = arg3;		\
+    register int __r8 __asm__("r8") = arg4;		\
+    register int __r9 __asm__("r9") = 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 INTERNAL_SYSCALL_6(name,arg1,arg2,arg3,arg4,arg5,arg6)	\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = SYS_ify(name);	\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    register int __r7 __asm__("r7") = arg3;		\
+    register int __r8 __asm__("r8") = arg4;		\
+    register int __r9 __asm__("r9") = arg5;		\
+    register int __r10 __asm__("r10") = 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;			\
+  })
+
+
+#define INTERNAL_SYSCALL_NCS_6(number,arg1,arg2,arg3,arg4,arg5,arg6)	\
+  ({ \
+    register int ret __asm__("r3");			\
+    register int __r12 __asm__("r12") = number;		\
+    register int __r5 __asm__("r5") = arg1;		\
+    register int __r6 __asm__("r6") = arg2;		\
+    register int __r7 __asm__("r7") = arg3;		\
+    register int __r8 __asm__("r8") = arg4;		\
+    register int __r9 __asm__("r9") = arg5;		\
+    register int __r10 __asm__("r10") = 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;			\
+  })
+
+#define INTERNAL_SYSCALL_NCS(number, err, nr, args...)		\
+	INTERNAL_SYSCALL_NCS_##nr(number, 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))
+
+/* 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/versionsort64.c b/ports/sysdeps/unix/sysv/linux/microblaze/versionsort64.c
new file mode 100644
index 0000000..144b691
--- /dev/null
+++ b/ports/sysdeps/unix/sysv/linux/microblaze/versionsort64.c
@@ -0,0 +1 @@
+#include <sysdeps/unix/sysv/linux/i386/versionsort64.c>
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.9.5

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

* Re: [PATCH] MicroBlaze Port
  2012-11-29  5:52 ` [PATCH] " David Holsgrove
@ 2012-11-29 16:03   ` Carlos O'Donell
  2012-11-29 17:35   ` Joseph S. Myers
  1 sibling, 0 replies; 8+ messages in thread
From: Carlos O'Donell @ 2012-11-29 16:03 UTC (permalink / raw)
  To: David Holsgrove
  Cc: libc-ports, john.williams, edgar.iglesias, vinodk, tshui, vidhum,
	nmekala, David Holsgrove

On Thu, Nov 29, 2012 at 12:50 AM, David Holsgrove
<david.holsgrove@xilinx.com> wrote:
> From: David Holsgrove <david.holsgrove@petalogix.com>
>
> Signed-off-by: David Holsgrove <david.holsgrove@petalogix.com>
> Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>

Thanks for the new port!

I just wanted to set the expectation here.

We are in the middle of the 2.17 code freeze.

The master branch will likely thaw at the
start of Janaury once 2.17 goes out and open
for 2.18 development.

We can still work on reviewing your patches,
but keep in mind that our resources are
focused on the current 2.17 release.

To start off with what is your FSF copyright
status?

Cheers,
Carlos.

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

* Re: [PATCH 1/3 ports] Add MicroBlaze Port
  2012-11-29  5:27 [PATCH 1/3 ports] Add MicroBlaze Port David Holsgrove
  2012-11-29  5:43 ` Mike Frysinger
  2012-11-29  5:52 ` [PATCH] " David Holsgrove
@ 2012-11-29 16:11 ` Joseph S. Myers
  2 siblings, 0 replies; 8+ messages in thread
From: Joseph S. Myers @ 2012-11-29 16:11 UTC (permalink / raw)
  To: David Holsgrove
  Cc: libc-ports, John Williams, Edgar E. Iglesias, Vinod Kathail,
	Tom Shui, Vidhumouli Hunsigida, Nagaraju Mekala

On Thu, 29 Nov 2012, David Holsgrove wrote:

> This series of patches adds glibc support for MicroBlaze architecture.
> 
> The first patch adds the microblaze glibc/ports component.

You don't give any background or rationale for the design choices you 
made.  There are several things in this submission that don't generally 
make sense for new ports.

You need to say how the port was tested.  Do you have any compilation 
warnings (building with GCC 4.7 or later)?  If so, you need to make sure 
they are architecture-independent, or do not relate to any issue with the 
port itself.  Do you have any testsuite failures?  If so, what tests fail, 
and why?

-- 
Joseph S. Myers
joseph@codesourcery.com

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

* Re: [PATCH] MicroBlaze Port
  2012-11-29  5:52 ` [PATCH] " David Holsgrove
  2012-11-29 16:03   ` Carlos O'Donell
@ 2012-11-29 17:35   ` Joseph S. Myers
  2012-11-30  0:16     ` David Holsgrove
  1 sibling, 1 reply; 8+ messages in thread
From: Joseph S. Myers @ 2012-11-29 17:35 UTC (permalink / raw)
  To: David Holsgrove
  Cc: libc-ports, john.williams, edgar.iglesias, vinodk, tshui, vidhum,
	nmekala, David Holsgrove

First some general comments about things missing from the port:

* You don't have a shlib-versions file.  A new port should generally set 
the minimum symbol version to that of the next glibc release, so either 
GLIBC_2.17 or GLIBC_2.18 depending on when this port gets in, which is 
done with a DEFAULT line in a shlib-versions file.

* You don't have a kernel-features.h file.  There are various features 
that the generic kernel-features.h file only enables for particular 
architectures, not unconditionally for all kernels with a certain version 
or later.  As for other architectures, you need to go through all those 
macros and define them in the MicroBlaze kernel-features.h for the 
relevant kernel.org kernel versions in which the feature was added 
(unconditionally, if the feature was present for MicroBlaze in kernel 
2.6.30 when MicroBlaze support was added).

* You don't have a libm-test-ulps file, and should add one.  A review of 
test results should have shown that such a file was missing.

* You don't have a sotruss-lib.c file, and should add one.  A review of 
compiler warnings should have shown that such a file was missing.

* You don't have a tst-audit.h file, and should add one.

Now more specific comments on the changes:

> +++ b/ports/sysdeps/microblaze/Makefile
> @@ -0,0 +1,31 @@
> +pic-ccflag = -fPIC

This appears to be the default.

> +# Make sure setjmp.c is compiled with a frame pointer
> +CFLAGS-setjmp.c := -fno-omit-frame-pointer

Comments (which should end with ".") should not just repeat the plain 
meaning of the source code.  Instead, explain *why* a frame pointer is 
needed (on this architecture).

> +$(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

I don't think it's a good idea to put this sort of thing in sysdeps files; 
certainly not when you need to name every library, probably including new 
ones as and when added to glibc.

Instead, note that on x86_64, for example, the installed libc.so linker 
script contains:

GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a  AS_NEEDED ( /lib64/ld-linux-x86-64.so.2 ) )

I think we should make all the miscellaneous shared libraries and .so 
files be linked more like normal libraries linked with a shared glibc 
after installation.  That is, --start-group libc.so libc_nonshared.a 
--as-needed ld.so --no-as-needed --end-group.  And with that change, 
remove all the miscellaneous rules in various makefiles (sysdeps and 
otherwise) to link this or that library with ld.so or libc_nonshared.a.

That sort of architecture-independent change does have risks that would 
put it off past 2.17 now we're in the freeze, but it seems the right way 
to do this rather than duplicating a long list of libraries in sysdeps 
files.

> diff --git a/ports/sysdeps/microblaze/Versions b/ports/sysdeps/microblaze/Versions
> new file mode 100644
> index 0000000..2b020f8
> --- /dev/null
> +++ b/ports/sysdeps/microblaze/Versions
> @@ -0,0 +1,6 @@
> +libc {
> +  GLIBC_2.0 {
> +    # Functions from libgcc.
> +    __divdi3; __moddi3; __udivdi3; __umoddi3;
> +  }
> +}

Will not be needed when you use GLIBC_2.18 in shlib-versions; functions 
from libgcc should only be exported like this for backwards binary 
compatibility in very old ports that have been around since 2.0.

> +++ b/ports/sysdeps/microblaze/asm-syntax.h

> +#ifdef HAVE_ELF

HAVE_ELF is obsolete.  glibc only supports ELF; remove all conditionals on 
it.

> +/* For ELF we need the `.type' directive to make shared libs work right.  */
> +#define PROLOG(name) .type name,@function
> +#define EPILOG(name) .size name,.-name

Nothing uses these macros.  Remove them.

> +/* For ELF we need to prefix register names and local labels.  */
> +#ifdef __STDC__

__STDC__ conditionals are obsolete, remove them.  Remove the conditioned 
macros as well unless there is a real purpose to them once they only have 
a single definition.
> +++ b/ports/sysdeps/microblaze/backtrace.c

Any new file of more than ten lines needs a copyright and license notice.  
This file needs reformatting in accordance with the GNU Coding Standards.

> +++ b/ports/sysdeps/microblaze/backtrace_linux.c

Likewise.

> +++ b/ports/sysdeps/microblaze/bits/atomic.h

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

GNU Coding Standards formatting (no "*" on successive comment lines, two 
spaces after "." in comments).

> +                "   addc    r0, r0, r0;"    /* clean carry bit*/                              \

Full sentence comments ending with ".  ".

> +                    : "=&r" (__tmp),        /* %0 */                                          \

If you use symbolic names for your operands, as supported by all GCC 
versions that can be used to build glibc, you don't need these comments 
explaining the numbers.

> +#define __arch_atomic_exchange_32_acq(mem, value)                                             \

Same comments as above apply here.

> +#define __arch_atomic_exchange_and_add_32(mem, value)                                         \

Likewise.  Please review the whole patch for the above issues; I won't 
mention them where they appear subsequently.

> +/* Define bits representing the exception.  We use the bit positions
> +   of the appropriate bits in the FPU control word.  */
> +enum
> +  {
> +    FE_INEXACT = 0x04,
> +#define FE_INEXACT	FE_INEXACT
> +    FE_UNDERFLOW = 0x08,
> +#define FE_UNDERFLOW	FE_UNDERFLOW
> +    FE_OVERFLOW = 0x10,
> +#define FE_OVERFLOW	FE_OVERFLOW
> +    FE_DIVBYZERO = 0x20,
> +#define FE_DIVBYZERO	FE_DIVBYZERO
> +    FE_INVALID = 0x40,
> +#define FE_INVALID	FE_INVALID
> +  };

This is not the style now used to define constants in enums, where the C 
standard requires them to be usable in #if; please update this code.

> +enum
> +  {
> +    FE_TONEAREST = 0x0,
> +#define FE_TONEAREST	FE_TONEAREST
> +    FE_TOWARDZERO = 0x1,
> +#define FE_TOWARDZERO	FE_TOWARDZERO
> +    FE_UPWARD = 0x2,
> +#define FE_UPWARD	FE_UPWARD
> +    FE_DOWNWARD = 0x3
> +#define FE_DOWNWARD	FE_DOWNWARD

Likewise.  The comment about MIPS also seems suspicious.  And, since you 
define exceptions and rounding modes, you need implementations of the fe* 
fenv.h functions - you don't have them.

> diff --git a/ports/sysdeps/microblaze/bits/wordsize.h b/ports/sysdeps/microblaze/bits/wordsize.h
> new file mode 100644
> index 0000000..23d379a
> --- /dev/null
> +++ b/ports/sysdeps/microblaze/bits/wordsize.h
> @@ -0,0 +1,3 @@
> +/* Determine the wordsize from the preprocessor defines.  */
> +
> +# define __WORDSIZE	32

You don't need this file for an architecture with only one wordsize; 
delete it, and sysdeps/wordsize-32/bits/wordsize.h will be used.

> +++ b/ports/sysdeps/microblaze/bsd-_setjmp.S
> @@ -0,0 +1,22 @@
> +/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'.
> +   Copyright (C) 1997, 1998, 2002, 2008 Free Software Foundation, Inc.

Use <year>-2012 on all new files.  Not mentioned again where the issue 
appears for other files, please check and fix the whole patch for it.

> +++ b/ports/sysdeps/microblaze/configure.in
> @@ -0,0 +1,32 @@
> +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
> +# Local configure fragment for sysdeps/microblaze/elf.
> +
> +if test "$usetls" != no; then
> +# Check for support of thread-local storage handling in assembler and
> +# linker.

TLS configure checks are no longer used and have been removed; remove them 
from this file.

> +/* 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 ||
> +		ehdr->e_machine == EM_NEW_MICROBLAZE ) ;

Given the use of GLIBC_2.18 versions, compatibility with any legacy 
binaries shouldn't arise so you should only need to check for the 
officially allocated value.

> +#if (!defined RTLD_BOOTSTRAP || USE___THREAD)

USE___THREAD is obsolete and has been removed.

> +++ b/ports/sysdeps/microblaze/nptl/pthread_spin_lock.c

Is there an advantage to this file over defining 
SPIN_LOCK_READS_BETWEEN_CMPXCHG to some suitable value and then including 
<sysdeps/../nptl/pthread_spin_lock.c> as various other ports do?  If so, 
please include comments explaining it.

> +++ b/ports/sysdeps/microblaze/nptl/pthread_spin_trylock.c

Again, why not the generic version?

> +# ifdef HAVE_ELF

Obsolete conditionals.

> +#  define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg

ASM_TYPE_DIRECTIVE has been removed.

> +# ifdef	NO_UNDERSCORES

Obsolete conditional.

> diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/Makefile b/ports/sysdeps/unix/sysv/linux/microblaze/Makefile
> new file mode 100644
> index 0000000..3cf2b6a
> --- /dev/null
> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/Makefile
> @@ -0,0 +1,12 @@
> +ifeq ($(subdir),misc)
> +sysdep_routines += mremap
> +endif

You don't have a mremap.S, so this makes no sense.

> +ifeq ($(subdir),elf)
> +sysdep-others += lddlibc4
> +install-bin += lddlibc4
> +endif

This also makes no sense - MicroBlaze certainly never had a.out support in 
kernel.org Linux.

> diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/Versions b/ports/sysdeps/unix/sysv/linux/microblaze/Versions
> new file mode 100644
> index 0000000..cf363fa
> --- /dev/null
> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/Versions

Given GLIBC_2.18 versions, you should only need an entry for fallocate64, 
nothing else.

> diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/alphasort64.c b/ports/sysdeps/unix/sysv/linux/microblaze/alphasort64.c
> new file mode 100644
> index 0000000..0b5ae47
> --- /dev/null
> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/alphasort64.c
> @@ -0,0 +1 @@
> +#include <sysdeps/unix/sysv/linux/i386/alphasort64.c>

Lots of files like this should not be needed in new ports, only very old 
ones.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/fcntl.h

> +# define O_DIRECTORY    0200000 /* Must be a directory.  */
> +# define O_NOFOLLOW     0400000 /* Do not follow links.  */
> +# define O_DIRECT        040000 /* Direct disk access.  */
> +#ifdef __USE_LARGEFILE64
> +# define O_LARGEFILE    0100000
> +#endif

That's not how bits/fcntl.h files using fcntl-linux.h should work.  
Instead, define __O_*, unconditionally; fcntl-linux.h then defines the 
public O_* names.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/msq.h

How does this differ from the generic sysdeps/unix/sysv/linux/bits/msq.h - 
why is it needed?

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/sem.h

Likewise.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/bits/shm.h

Likewise, other than that you're missing SHM_EXEC and SHM_NORESERVE and 
shouldn't be?

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/configure.in
> @@ -0,0 +1,5 @@
> +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
> +# Local configure fragment for sysdeps/unix/sysv/linux/microblaze.
> +
> +libc_cv_gcc_unwind_find_fde=yes

Inappropriate in a new port.

> +arch_minimum_kernel=2.0.10

2.6.16 is the global minimum now, you should use 2.6.30 or newer since 
MicroBlaze kernel support first appeared in 2.6.30.

> diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/dl-librecon.h b/ports/sysdeps/unix/sysv/linux/microblaze/dl-librecon.h
> new file mode 100644
> index 0000000..dbb4e75
> --- /dev/null
> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/dl-librecon.h
> @@ -0,0 +1 @@
> +#include <sysdeps/unix/sysv/linux/i386/dl-librecon.h>

Not relevant.  This is about libc5 and a.out.  libc5 didn't support 
MicroBlaze, only i386 and m68k.

> diff --git a/ports/sysdeps/unix/sysv/linux/microblaze/fchown.c b/ports/sysdeps/unix/sysv/linux/microblaze/fchown.c
> new file mode 100644
> index 0000000..3a69ecc
> --- /dev/null
> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/fchown.c
> @@ -0,0 +1 @@
> +#include <sysdeps/unix/sysv/linux/i386/fchown.c>

Where the i386 file you're including says "Consider moving to 
syscalls.list.", please create a syscalls.list entry for MicroBlaze 
instead of using the i386 file, unless there is a reason that won't work 
in which case you should change the comment in the i386 file to explain 
why syscalls.list can't be used.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/fchownat.c
> @@ -0,0 +1 @@
> +#include <sysdeps/unix/sysv/linux/i386/fchownat.c>

Inappropriate, since 2.6.30 had the fchownat syscall for MicroBlaze and 
all the special backwards compatibility should be irrelevant.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/getdents64.c
> @@ -0,0 +1 @@
> +#include <sysdeps/unix/sysv/linux/i386/getdents64.c>

Appears only to be relevant with old symbol versions.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/getegid.c
> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/geteuid.c
> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/getgid.c

See comments about using syscalls.list.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/getgroups.c
> @@ -0,0 +1,2 @@
> +/* We also have to rewrite the kernel gid_t to the user land type.  */

That doesn't make sense to me.  That's not what the i386 file does.  And 
see the comment about using syscalls.list.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/getresgid.c
> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/getresuid.c

syscalls.list.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/getrlimit64.c

Irrelevant without old symbol versions.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/getuid.c

syscalls.list.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/ldconfig.h

Inappropriate given the lack of libc5.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/msgctl.c

Most of this seems irrelevant compatibility code.

> +__poll GLIBC_2.1 w ? D .text 00000000

Although of course versions will change to GLIBC_2.18, these entries also 
indicate something wrong with the ABI check parsing for MicroBlaze, which 
needs to be fixed.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/nptl/lowlevellock.h

Define lll_futex_timed_wait_bitset.

> +/* The kernel notifies a process which uses CLONE_CLEARTID via futex

You're missing the typo fix from commit 
adcdc775e11f6fc788448b9e2b0b4ef08579e463.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/oldgetrlimit64.c

Should not be relevant.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/readdir64.c
> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/readdir64_r.c
> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/scandir64.c
> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/semctl.c

More files I think can only be relevant to very old ports or that are 
mainly compatibility code.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/setfsgid.c
> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/setfsuid.c

syscalls.list.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/setgroups.c
> @@ -0,0 +1,2 @@
> +/* We also have to rewrite the kernel gid_t to the user land type.  */

Comment seems inappropriate.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/setrlimit.c

syscalls.list.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/shmctl.c

Mainly compatibility code.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/sys/user.h

> +  struct user_fpregs_struct	i387;

Really?  How can this make sense on a non-x86 architecture?

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/syscalls.list

> +oldgetrlimit	EXTRA	getrlimit	i:ip	__old_getrlimit	getrlimit@GLIBC_2.0
> +oldsetrlimit	EXTRA	setrlimit	i:ip	__old_setrlimit	setrlimit@GLIBC_2.0

These bits should no longer be relevant.

> +#ifdef __STDC__

Obsolete conditional.

> +++ b/ports/sysdeps/unix/sysv/linux/microblaze/versionsort64.c

Should not be relevant.

-- 
Joseph S. Myers
joseph@codesourcery.com

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

* RE: [PATCH] MicroBlaze Port
  2012-11-29 17:35   ` Joseph S. Myers
@ 2012-11-30  0:16     ` David Holsgrove
  2012-11-30  0:39       ` Roland McGrath
  0 siblings, 1 reply; 8+ messages in thread
From: David Holsgrove @ 2012-11-30  0:16 UTC (permalink / raw)
  To: Joseph Myers
  Cc: libc-ports, John Williams, edgar.iglesias, Vinod Kathail,
	Tom Shui, Vidhumouli Hunsigida, Nagaraju Mekala

Hi Joseph,

> -----Original Message-----
> From: Joseph Myers [mailto:joseph@codesourcery.com]
> Sent: Friday, 30 November 2012 3:35 am
> To: David Holsgrove
> Cc: libc-ports@sourceware.org; John Williams; edgar.iglesias@gmail.com; Vinod
> Kathail; Tom Shui; Vidhumouli Hunsigida; Nagaraju Mekala;
> david.holsgrove@petalogix.com
> Subject: Re: [PATCH] MicroBlaze Port
> 
> First some general comments about things missing from the port:
> 
[SNIP]

Thanks very much for the comments. The MicroBlaze port has existed out of tree for quite
some time, and as such we've missed some of the changes which occurred upstream for
other ports. I'll address your comments in an updated version of this patch.

I appreciate that the testing for 2.17 release is a busy period, so we'll be grateful for any
progress that can be made here towards inclusion.

thanks again,
David


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


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

* RE: [PATCH] MicroBlaze Port
  2012-11-30  0:16     ` David Holsgrove
@ 2012-11-30  0:39       ` Roland McGrath
  0 siblings, 0 replies; 8+ messages in thread
From: Roland McGrath @ 2012-11-30  0:39 UTC (permalink / raw)
  To: David Holsgrove
  Cc: Joseph Myers, libc-ports, John Williams, edgar.iglesias,
	Vinod Kathail, Tom Shui, Vidhumouli Hunsigida, Nagaraju Mekala

Being in the ports/ tree is no different from being a separate add-on port.
So you can update your code and test it against the trunk that way.

For the items where Joseph suggested the clean solutions would involve some
change to the main tree, you can work on each of those patches and post it
without delay.  We'll decide case-by-case whether each one is safe enough
to commit during the freeze.  elf.h additions will be fine, for example.
If it turns out that all the changes you need outside your own port are
safe enough to let in during the 2.17 freeze, then your port can make 2.17
too.  But we'll have to take it one change at a time and see how it goes.


Thanks,
Roland

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

end of thread, other threads:[~2012-11-30  0:39 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-11-29  5:27 [PATCH 1/3 ports] Add MicroBlaze Port David Holsgrove
2012-11-29  5:43 ` Mike Frysinger
2012-11-29  5:52 ` [PATCH] " David Holsgrove
2012-11-29 16:03   ` Carlos O'Donell
2012-11-29 17:35   ` Joseph S. Myers
2012-11-30  0:16     ` David Holsgrove
2012-11-30  0:39       ` Roland McGrath
2012-11-29 16:11 ` [PATCH 1/3 ports] Add " Joseph S. Myers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).