- Rules.mak | 6 +
- extra/Configs/Config.avr32 | 31 ++++
- extra/Configs/Config.in | 7 +
- extra/Configs/defconfigs/avr32 | 1 +
- include/elf.h | 51 ++++++
- ldso/include/dl-string.h | 3 +-
- ldso/include/dl-syscall.h | 40 ++--
- ldso/ldso/avr32/dl-debug.h | 45 +++++
- ldso/ldso/avr32/dl-startup.h | 112 ++++++++++++
- ldso/ldso/avr32/dl-syscalls.h | 6 +
- ldso/ldso/avr32/dl-sysdep.h | 105 +++++++++++
- ldso/ldso/avr32/elfinterp.c | 191 ++++++++++++++++++++
- ldso/ldso/avr32/resolve.S | 28 +++
- ldso/ldso/dl-startup.c | 4 +-
- libc/inet/resolv.c | 6 +-
- libc/string/avr32/Makefile | 26 +++
- libc/string/avr32/bcopy.S | 26 +++
- libc/string/avr32/bzero.S | 22 +++
- libc/string/avr32/memcmp.S | 61 +++++++
- libc/string/avr32/memcpy.S | 111 ++++++++++++
- libc/string/avr32/memmove.S | 116 ++++++++++++
- libc/string/avr32/memset.S | 70 +++++++
- libc/string/avr32/strcmp.S | 91 ++++++++++
- libc/string/avr32/strlen.S | 62 +++++++
- libc/sysdeps/linux/avr32/Makefile | 25 +++
- libc/sysdeps/linux/avr32/Makefile.arch | 13 ++
- libc/sysdeps/linux/avr32/__longjmp.S | 21 +++
- libc/sysdeps/linux/avr32/bits/atomic.h | 120 ++++++++++++
- libc/sysdeps/linux/avr32/bits/byteswap.h | 70 +++++++
- libc/sysdeps/linux/avr32/bits/endian.h | 7 +
- libc/sysdeps/linux/avr32/bits/fcntl.h | 165 +++++++++++++++++
- libc/sysdeps/linux/avr32/bits/kernel_stat.h | 67 +++++++
- libc/sysdeps/linux/avr32/bits/kernel_types.h | 55 ++++++
- libc/sysdeps/linux/avr32/bits/mman.h | 103 +++++++++++
- libc/sysdeps/linux/avr32/bits/setjmp.h | 30 +++
- libc/sysdeps/linux/avr32/bits/stackinfo.h | 28 +++
- libc/sysdeps/linux/avr32/bits/syscalls.h | 143 +++++++++++++++
- .../linux/avr32/bits/uClibc_arch_features.h | 45 +++++
- libc/sysdeps/linux/avr32/bits/wordsize.h | 1 +
- libc/sysdeps/linux/avr32/brk.c | 31 ++++
- libc/sysdeps/linux/avr32/bsd-_setjmp.S | 16 ++
- libc/sysdeps/linux/avr32/bsd-setjmp.S | 16 ++
- libc/sysdeps/linux/avr32/clone.c | 41 +++++
- libc/sysdeps/linux/avr32/crt1.S | 97 ++++++++++
- libc/sysdeps/linux/avr32/crti.S | 26 +++
- libc/sysdeps/linux/avr32/crtn.S | 14 ++
- libc/sysdeps/linux/avr32/mmap.c | 33 ++++
- libc/sysdeps/linux/avr32/setjmp.S | 29 +++
- libc/sysdeps/linux/avr32/sigaction.c | 59 ++++++
- libc/sysdeps/linux/avr32/sigrestorer.S | 15 ++
- libc/sysdeps/linux/avr32/sys/elf.h | 26 +++
- libc/sysdeps/linux/avr32/sys/procfs.h | 123 +++++++++++++
- libc/sysdeps/linux/avr32/sys/ucontext.h | 90 +++++++++
- libc/sysdeps/linux/avr32/sys/user.h | 46 +++++
- libc/sysdeps/linux/avr32/syscall.S | 71 ++++++++
- libc/sysdeps/linux/avr32/vfork.S | 58 ++++++
- .../linuxthreads.old/sysdeps/avr32/pt-machine.h | 73 ++++++++
- libpthread/linuxthreads/sysdeps/avr32/pt-machine.h | 73 ++++++++
- utils/ldd.c | 5 +
- 60 files changed, 3094 insertions(+), 25 deletions(-)
- create mode 100644 extra/Configs/Config.avr32
- create mode 100644 extra/Configs/defconfigs/avr32
- create mode 100644 ldso/ldso/avr32/dl-debug.h
- create mode 100644 ldso/ldso/avr32/dl-startup.h
- create mode 100644 ldso/ldso/avr32/dl-syscalls.h
- create mode 100644 ldso/ldso/avr32/dl-sysdep.h
- create mode 100644 ldso/ldso/avr32/elfinterp.c
- create mode 100644 ldso/ldso/avr32/resolve.S
- create mode 100644 libc/string/avr32/Makefile
- create mode 100644 libc/string/avr32/bcopy.S
- create mode 100644 libc/string/avr32/bzero.S
- create mode 100644 libc/string/avr32/memcmp.S
- create mode 100644 libc/string/avr32/memcpy.S
- create mode 100644 libc/string/avr32/memmove.S
- create mode 100644 libc/string/avr32/memset.S
- create mode 100644 libc/string/avr32/strcmp.S
- create mode 100644 libc/string/avr32/strlen.S
- create mode 100644 libc/sysdeps/linux/avr32/Makefile
- create mode 100644 libc/sysdeps/linux/avr32/Makefile.arch
- create mode 100644 libc/sysdeps/linux/avr32/__longjmp.S
- create mode 100644 libc/sysdeps/linux/avr32/bits/atomic.h
- create mode 100644 libc/sysdeps/linux/avr32/bits/byteswap.h
- create mode 100644 libc/sysdeps/linux/avr32/bits/endian.h
- create mode 100644 libc/sysdeps/linux/avr32/bits/fcntl.h
- create mode 100644 libc/sysdeps/linux/avr32/bits/kernel_stat.h
- create mode 100644 libc/sysdeps/linux/avr32/bits/kernel_types.h
- create mode 100644 libc/sysdeps/linux/avr32/bits/mman.h
- create mode 100644 libc/sysdeps/linux/avr32/bits/setjmp.h
- create mode 100644 libc/sysdeps/linux/avr32/bits/stackinfo.h
- create mode 100644 libc/sysdeps/linux/avr32/bits/syscalls.h
- create mode 100644 libc/sysdeps/linux/avr32/bits/uClibc_arch_features.h
- create mode 100644 libc/sysdeps/linux/avr32/bits/wordsize.h
- create mode 100644 libc/sysdeps/linux/avr32/brk.c
- create mode 100644 libc/sysdeps/linux/avr32/bsd-_setjmp.S
- create mode 100644 libc/sysdeps/linux/avr32/bsd-setjmp.S
- create mode 100644 libc/sysdeps/linux/avr32/clone.c
- create mode 100644 libc/sysdeps/linux/avr32/crt1.S
- create mode 100644 libc/sysdeps/linux/avr32/crti.S
- create mode 100644 libc/sysdeps/linux/avr32/crtn.S
- create mode 100644 libc/sysdeps/linux/avr32/mmap.c
- create mode 100644 libc/sysdeps/linux/avr32/setjmp.S
- create mode 100644 libc/sysdeps/linux/avr32/sigaction.c
- create mode 100644 libc/sysdeps/linux/avr32/sigrestorer.S
- create mode 100644 libc/sysdeps/linux/avr32/sys/elf.h
- create mode 100644 libc/sysdeps/linux/avr32/sys/procfs.h
- create mode 100644 libc/sysdeps/linux/avr32/sys/ucontext.h
- create mode 100644 libc/sysdeps/linux/avr32/sys/user.h
- create mode 100644 libc/sysdeps/linux/avr32/syscall.S
- create mode 100644 libc/sysdeps/linux/avr32/vfork.S
- create mode 100644 libpthread/linuxthreads.old/sysdeps/avr32/pt-machine.h
- create mode 100644 libpthread/linuxthreads/sysdeps/avr32/pt-machine.h
-diff --git a/Rules.mak b/Rules.mak
-index d054bbb..55381cf 100644
--- a/Rules.mak
+++ b/Rules.mak
@@ -313,6 +313,12 @@ ifeq ($(TARGET_ARCH),frv)
# Keep the check_gcc from being needlessly executed
ifndef PIEFLAG
ifneq ($(UCLIBC_BUILD_PIE),y)
-diff --git a/extra/Configs/Config.avr32 b/extra/Configs/Config.avr32
-new file mode 100644
-index 0000000..8d70e6e
--- /dev/null
+++ b/extra/Configs/Config.avr32
@@ -0,0 +1,31 @@
+config LINKRELAX
+ bool "Enable linker optimizations"
+ default y
-diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in
-index 8eab394..10c9f7b 100644
--- a/extra/Configs/Config.in
+++ b/extra/Configs/Config.in
@@ -16,6 +16,9 @@ config TARGET_alpha
if TARGET_bfin
source "extra/Configs/Config.bfin"
endif
-diff --git a/extra/Configs/defconfigs/avr32 b/extra/Configs/defconfigs/avr32
-new file mode 100644
-index 0000000..0b890a2
--- /dev/null
+++ b/extra/Configs/defconfigs/avr32
@@ -0,0 +1 @@
+TARGET_avr32=y
-diff --git a/include/elf.h b/include/elf.h
-index 19805d7..ab90160 100644
--- a/include/elf.h
+++ b/include/elf.h
@@ -354,6 +354,8 @@ typedef struct
/* Renesas H8/300 Relocations */
#define R_H8_NONE 0
-diff --git a/ldso/include/dl-string.h b/ldso/include/dl-string.h
-index 32c5bf8..eb43bd9 100644
--- a/ldso/include/dl-string.h
+++ b/ldso/include/dl-string.h
-@@ -285,7 +285,8 @@ static __always_inline char * _dl_simple_ltoahex(char * local, unsigned long i)
+@@ -285,7 +285,8 @@ static __always_inline char * _dl_simple
/* On some arches constant strings are referenced through the GOT.
* This requires that load_addr must already be defined... */
#if defined(mc68000) || defined(__arm__) || defined(__thumb__) || \
# define CONSTANT_STRING_GOT_FIXUP(X) \
if ((X) < (const char *) load_addr) (X) += load_addr
# define NO_EARLY_SEND_STDERR
-diff --git a/ldso/include/dl-syscall.h b/ldso/include/dl-syscall.h
-index b42416a..4404219 100644
--- a/ldso/include/dl-syscall.h
+++ b/ldso/include/dl-syscall.h
@@ -55,69 +55,69 @@
size_t, bufsiz);
#ifdef __UCLIBC_HAS_SSP__
-@@ -146,14 +146,14 @@ static inline _syscall2(int, _dl_gettimeofday, struct timeval *, tv,
+@@ -146,14 +146,14 @@ static inline _syscall2(int, _dl_gettime
#if defined(__UCLIBC_MMAP_HAS_6_ARGS__) && defined(__NR_mmap)
# define __NR__dl_mmap __NR_mmap
int, prot, int, flags, int, fd, off_t, offset);
/* Some architectures always use 12 as page shift for mmap2() eventhough the
-@@ -164,7 +164,7 @@ static inline _syscall6(__ptr_t, __syscall_mmap2, __ptr_t, addr, size_t, len,
+@@ -164,7 +164,7 @@ static inline _syscall6(__ptr_t, __sysca
# define MMAP2_PAGE_SHIFT 12
#endif
int flags, int fd, unsigned long offset)
{
if (offset & ((1 << MMAP2_PAGE_SHIFT) - 1))
-@@ -177,8 +177,8 @@ static inline void * _dl_mmap(void * addr, unsigned long size, int prot,
+@@ -177,8 +177,8 @@ static inline void * _dl_mmap(void * add
#elif defined(__NR_mmap)
# define __NR__dl_mmap_real __NR_mmap
int flags, int fd, unsigned long offset)
{
unsigned long buffer[6];
-diff --git a/ldso/ldso/avr32/dl-debug.h b/ldso/ldso/avr32/dl-debug.h
-new file mode 100644
-index 0000000..fe35539
--- /dev/null
+++ b/ldso/ldso/avr32/dl-debug.h
@@ -0,0 +1,45 @@
+ "R_AVR32_RELATIVE", "R_AVR32_GLOB_DAT", "R_AVR32_JMP_SLOT",
+ "R_AVR32_ALIGN",
+};
-diff --git a/ldso/ldso/avr32/dl-startup.h b/ldso/ldso/avr32/dl-startup.h
-new file mode 100644
-index 0000000..3b9a641
--- /dev/null
+++ b/ldso/ldso/avr32/dl-startup.h
@@ -0,0 +1,112 @@
+ * _dl_boot2, we can just return the address we're supposed to
+ * call. */
+#define START() return _dl_elf_main;
-diff --git a/ldso/ldso/avr32/dl-syscalls.h b/ldso/ldso/avr32/dl-syscalls.h
-new file mode 100644
-index 0000000..996bb87
--- /dev/null
+++ b/ldso/ldso/avr32/dl-syscalls.h
@@ -0,0 +1,6 @@
+extern int _dl_errno;
+#undef __set_errno
+#define __set_errno(X) {(_dl_errno) = (X);}
-diff --git a/ldso/ldso/avr32/dl-sysdep.h b/ldso/ldso/avr32/dl-sysdep.h
-new file mode 100644
-index 0000000..1a30172
--- /dev/null
+++ b/ldso/ldso/avr32/dl-sysdep.h
@@ -0,0 +1,105 @@
+ *reloc_addr = load_off + rpnt->r_addend;
+ } while (--relative_count);
+}
-diff --git a/ldso/ldso/avr32/elfinterp.c b/ldso/ldso/avr32/elfinterp.c
-new file mode 100644
-index 0000000..196292b
--- /dev/null
+++ b/ldso/ldso/avr32/elfinterp.c
@@ -0,0 +1,191 @@
+ return _dl_parse(rpnt->dyn, rpnt->dyn->symbol_scope, rel_addr, rel_size,
+ _dl_do_reloc);
+}
-diff --git a/ldso/ldso/avr32/resolve.S b/ldso/ldso/avr32/resolve.S
-new file mode 100644
-index 0000000..e3cb7f4
--- /dev/null
+++ b/ldso/ldso/avr32/resolve.S
@@ -0,0 +1,28 @@
+ popm r8-r12,lr
+ mov pc, ip
+ .size _dl_linux_resolve, . - _dl_linux_resolve
-diff --git a/ldso/ldso/dl-startup.c b/ldso/ldso/dl-startup.c
-index 5cf1d04..d4294ec 100644
--- a/ldso/ldso/dl-startup.c
+++ b/ldso/ldso/dl-startup.c
@@ -217,7 +217,9 @@ DL_START(unsigned long args)
/* OK, now do the relocations. We do not do a lazy binding here, so
that once we are done, we have considerably more flexibility. */
-diff --git a/libc/inet/resolv.c b/libc/inet/resolv.c
-index f4e6cac..9cdc3fe 100644
--- a/libc/inet/resolv.c
+++ b/libc/inet/resolv.c
-@@ -1643,7 +1643,7 @@ int attribute_hidden __read_etc_hosts_r(FILE * fp, const char * name, int type,
+@@ -1643,7 +1643,7 @@ int attribute_hidden __read_etc_hosts_r(
*result=result_buf;
ret=NETDB_SUCCESS;
#ifdef __UCLIBC_HAS_IPV6__
DPRINTF("Found INET6\n");
addr_list6[0] = in6;
addr_list6[1] = 0;
-@@ -1658,8 +1658,8 @@ int attribute_hidden __read_etc_hosts_r(FILE * fp, const char * name, int type,
+@@ -1658,8 +1658,8 @@ int attribute_hidden __read_etc_hosts_r(
} else {
DPRINTF("Error\n");
ret=TRY_AGAIN;
if (action!=GETHOSTENT) {
fclose(fp);
-diff --git a/libc/string/avr32/Makefile b/libc/string/avr32/Makefile
-new file mode 100644
-index 0000000..e19e9d9
--- /dev/null
+++ b/libc/string/avr32/Makefile
@@ -0,0 +1,26 @@
+include $(top_builddir)Rules.mak
+include ../Makefile.in
+include $(top_srcdir)Makerules
-diff --git a/libc/string/avr32/bcopy.S b/libc/string/avr32/bcopy.S
-new file mode 100644
-index 0000000..87c1e04
--- /dev/null
+++ b/libc/string/avr32/bcopy.S
@@ -0,0 +1,26 @@
+ .size bcopy, . - bcopy
+
+#endif /* __UCLIBC_SUSV3_LEGACY__ */
-diff --git a/libc/string/avr32/bzero.S b/libc/string/avr32/bzero.S
-new file mode 100644
-index 0000000..c999e65
--- /dev/null
+++ b/libc/string/avr32/bzero.S
@@ -0,0 +1,22 @@
+ .size bzero, . - bzero
+
+#endif /* __UCLIBC_SUSV3_LEGACY__ */
-diff --git a/libc/string/avr32/memcmp.S b/libc/string/avr32/memcmp.S
-new file mode 100644
-index 0000000..ae6cc91
--- /dev/null
+++ b/libc/string/avr32/memcmp.S
@@ -0,0 +1,61 @@
+#ifdef __UCLIBC_SUSV3_LEGACY__
+strong_alias(memcmp,bcmp)
+#endif
-diff --git a/libc/string/avr32/memcpy.S b/libc/string/avr32/memcpy.S
-new file mode 100644
-index 0000000..bf091ab
--- /dev/null
+++ b/libc/string/avr32/memcpy.S
@@ -0,0 +1,111 @@
+ .size memcpy, . - memcpy
+
+libc_hidden_def(memcpy)
-diff --git a/libc/string/avr32/memmove.S b/libc/string/avr32/memmove.S
-new file mode 100644
-index 0000000..98287c5
--- /dev/null
+++ b/libc/string/avr32/memmove.S
@@ -0,0 +1,116 @@
+ .size memmove, . - memmove
+
+libc_hidden_def(memmove)
-diff --git a/libc/string/avr32/memset.S b/libc/string/avr32/memset.S
-new file mode 100644
-index 0000000..33cfaed
--- /dev/null
+++ b/libc/string/avr32/memset.S
@@ -0,0 +1,70 @@
+ .size memset, . - memset
+
+libc_hidden_def(memset)
-diff --git a/libc/string/avr32/strcmp.S b/libc/string/avr32/strcmp.S
-new file mode 100644
-index 0000000..f73bd43
--- /dev/null
+++ b/libc/string/avr32/strcmp.S
@@ -0,0 +1,91 @@
+strong_alias(strcmp, strcoll)
+libc_hidden_def(strcoll)
+#endif
-diff --git a/libc/string/avr32/strlen.S b/libc/string/avr32/strlen.S
-new file mode 100644
-index 0000000..5223e53
--- /dev/null
+++ b/libc/string/avr32/strlen.S
@@ -0,0 +1,62 @@
+ .size strlen, . - strlen
+
+libc_hidden_def(strlen)
-diff --git a/libc/sysdeps/linux/avr32/Makefile b/libc/sysdeps/linux/avr32/Makefile
-new file mode 100644
-index 0000000..338abc0
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/Makefile
@@ -0,0 +1,25 @@
+include $(top_builddir)Rules.mak
+include Makefile.arch
+include $(top_srcdir)Makerules
-diff --git a/libc/sysdeps/linux/avr32/Makefile.arch b/libc/sysdeps/linux/avr32/Makefile.arch
-new file mode 100644
-index 0000000..44fc01e
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/Makefile.arch
@@ -0,0 +1,13 @@
+ sigrestorer.S syscall.S vfork.S
+
+include $(top_srcdir)/libc/sysdeps/linux/Makefile.commonarch
-diff --git a/libc/sysdeps/linux/avr32/__longjmp.S b/libc/sysdeps/linux/avr32/__longjmp.S
-new file mode 100644
-index 0000000..6154bb2
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/__longjmp.S
@@ -0,0 +1,21 @@
+ .size __longjmp, . - __longjmp
+
+libc_hidden_def(__longjmp)
-diff --git a/libc/sysdeps/linux/avr32/bits/atomic.h b/libc/sysdeps/linux/avr32/bits/atomic.h
-new file mode 100644
-index 0000000..e6be41f
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/bits/atomic.h
@@ -0,0 +1,120 @@
+ })
+
+#endif /* _AVR32_BITS_ATOMIC_H */
-diff --git a/libc/sysdeps/linux/avr32/bits/byteswap.h b/libc/sysdeps/linux/avr32/bits/byteswap.h
-new file mode 100644
-index 0000000..1c030b9
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/bits/byteswap.h
@@ -0,0 +1,70 @@
+#endif
+
+#endif /* _BITS_BYTESWAP_H */
-diff --git a/libc/sysdeps/linux/avr32/bits/endian.h b/libc/sysdeps/linux/avr32/bits/endian.h
-new file mode 100644
-index 0000000..7bb6358
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/bits/endian.h
@@ -0,0 +1,7 @@
+#endif
+
+#define __BYTE_ORDER __BIG_ENDIAN
-diff --git a/libc/sysdeps/linux/avr32/bits/fcntl.h b/libc/sysdeps/linux/avr32/bits/fcntl.h
-new file mode 100644
-index 0000000..1abff17
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/bits/fcntl.h
@@ -0,0 +1,165 @@
+# define POSIX_FADV_DONTNEED 4 /* Don't need these pages. */
+# define POSIX_FADV_NOREUSE 5 /* Data will be accessed once. */
+#endif
-diff --git a/libc/sysdeps/linux/avr32/bits/kernel_stat.h b/libc/sysdeps/linux/avr32/bits/kernel_stat.h
-new file mode 100644
-index 0000000..f97d23b
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/bits/kernel_stat.h
@@ -0,0 +1,67 @@
+};
+
+#endif /* _BITS_STAT_STRUCT_H */
-diff --git a/libc/sysdeps/linux/avr32/bits/kernel_types.h b/libc/sysdeps/linux/avr32/bits/kernel_types.h
-new file mode 100644
-index 0000000..f7d8b52
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/bits/kernel_types.h
@@ -0,0 +1,55 @@
+} __kernel_fsid_t;
+
+#endif /* __ASM_AVR32_POSIX_TYPES_H */
-diff --git a/libc/sysdeps/linux/avr32/bits/mman.h b/libc/sysdeps/linux/avr32/bits/mman.h
-new file mode 100644
-index 0000000..5f6e3c3
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/bits/mman.h
@@ -0,0 +1,103 @@
+# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */
+# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */
+#endif
-diff --git a/libc/sysdeps/linux/avr32/bits/setjmp.h b/libc/sysdeps/linux/avr32/bits/setjmp.h
-new file mode 100644
-index 0000000..78348a3
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/bits/setjmp.h
@@ -0,0 +1,30 @@
+ ((void *)(address) < (void *)(jmpbuf[__JMP_BUF_SP]))
+
+#endif /* _BITS_SETJMP_H */
-diff --git a/libc/sysdeps/linux/avr32/bits/stackinfo.h b/libc/sysdeps/linux/avr32/bits/stackinfo.h
-new file mode 100644
-index 0000000..29b8452
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/bits/stackinfo.h
@@ -0,0 +1,28 @@
+#define _STACK_GROWS_DOWN 1
+
+#endif /* stackinfo.h */
-diff --git a/libc/sysdeps/linux/avr32/bits/syscalls.h b/libc/sysdeps/linux/avr32/bits/syscalls.h
-new file mode 100644
-index 0000000..22ac059
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/bits/syscalls.h
@@ -0,0 +1,143 @@
+
+#endif /* __ASSEMBLER__ */
+#endif /* _BITS_SYSCALLS_H */
-diff --git a/libc/sysdeps/linux/avr32/bits/uClibc_arch_features.h b/libc/sysdeps/linux/avr32/bits/uClibc_arch_features.h
-new file mode 100644
-index 0000000..e95e8a5
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/bits/uClibc_arch_features.h
@@ -0,0 +1,45 @@
+#define __UCLIBC_HAVE_SIGNED_ZERO__
+
+#endif /* _BITS_UCLIBC_ARCH_FEATURES_H */
-diff --git a/libc/sysdeps/linux/avr32/bits/wordsize.h b/libc/sysdeps/linux/avr32/bits/wordsize.h
-new file mode 100644
-index 0000000..1b5842a
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/bits/wordsize.h
@@ -0,0 +1 @@
+#define __WORDSIZE 32
-diff --git a/libc/sysdeps/linux/avr32/brk.c b/libc/sysdeps/linux/avr32/brk.c
-new file mode 100644
-index 0000000..a54b49a
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/brk.c
@@ -0,0 +1,31 @@
+ return 0;
+}
+libc_hidden_def(brk)
-diff --git a/libc/sysdeps/linux/avr32/bsd-_setjmp.S b/libc/sysdeps/linux/avr32/bsd-_setjmp.S
-new file mode 100644
-index 0000000..be66a10
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/bsd-_setjmp.S
@@ -0,0 +1,16 @@
+ mov r11, 0
+ bral __GI___sigsetjmp
+ .size _setjmp, . - _setjmp
-diff --git a/libc/sysdeps/linux/avr32/bsd-setjmp.S b/libc/sysdeps/linux/avr32/bsd-setjmp.S
-new file mode 100644
-index 0000000..4635eeb
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/bsd-setjmp.S
@@ -0,0 +1,16 @@
+ mov r11, 1
+ bral __GI___sigsetjmp
+ .size setjmp, . - setjmp
-diff --git a/libc/sysdeps/linux/avr32/clone.c b/libc/sysdeps/linux/avr32/clone.c
-new file mode 100644
-index 0000000..e43b0f3
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/clone.c
@@ -0,0 +1,41 @@
+ __set_errno (-err);
+ return -1;
+}
-diff --git a/libc/sysdeps/linux/avr32/crt1.S b/libc/sysdeps/linux/avr32/crt1.S
-new file mode 100644
-index 0000000..ca1fa7a
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/crt1.S
@@ -0,0 +1,97 @@
+3: .long 0 /* Linux executable */
+ .long 2,6,0 /* Earliest compatible kernel */
+4: .align 4
-diff --git a/libc/sysdeps/linux/avr32/crti.S b/libc/sysdeps/linux/avr32/crti.S
-new file mode 100644
-index 0000000..660f47c
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/crti.S
@@ -0,0 +1,26 @@
+ .align 2
+2: .long 1b - _GLOBAL_OFFSET_TABLE_
+3:
-diff --git a/libc/sysdeps/linux/avr32/crtn.S b/libc/sysdeps/linux/avr32/crtn.S
-new file mode 100644
-index 0000000..f7d1040
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/crtn.S
@@ -0,0 +1,14 @@
+ .type _fini, @function
+ ldm sp++, r6, pc
+ .size _fini, . - _fini
-diff --git a/libc/sysdeps/linux/avr32/mmap.c b/libc/sysdeps/linux/avr32/mmap.c
-new file mode 100644
-index 0000000..2ee025a
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/mmap.c
@@ -0,0 +1,33 @@
+ return mmap2(addr, len, prot, flags, fd, pgoff);
+}
+libc_hidden_def(mmap)
-diff --git a/libc/sysdeps/linux/avr32/setjmp.S b/libc/sysdeps/linux/avr32/setjmp.S
-new file mode 100644
-index 0000000..7d0354b
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/setjmp.S
@@ -0,0 +1,29 @@
+ .size __sigsetjmp, . - __sigsetjmp
+
+libc_hidden_def(__sigsetjmp)
-diff --git a/libc/sysdeps/linux/avr32/sigaction.c b/libc/sysdeps/linux/avr32/sigaction.c
-new file mode 100644
-index 0000000..a97ff3d
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/sigaction.c
@@ -0,0 +1,59 @@
+weak_alias(__libc_sigaction, sigaction)
+libc_hidden_weak(sigaction)
+#endif
-diff --git a/libc/sysdeps/linux/avr32/sigrestorer.S b/libc/sysdeps/linux/avr32/sigrestorer.S
-new file mode 100644
-index 0000000..df6a1ba
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/sigrestorer.S
@@ -0,0 +1,15 @@
+__default_rt_sa_restorer:
+ mov r8, __NR_rt_sigreturn
+ scall
-diff --git a/libc/sysdeps/linux/avr32/sys/elf.h b/libc/sysdeps/linux/avr32/sys/elf.h
-new file mode 100644
-index 0000000..faa7310
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/sys/elf.h
@@ -0,0 +1,26 @@
+#include <sys/procfs.h>
+
+#endif /* sys/elf.h */
-diff --git a/libc/sysdeps/linux/avr32/sys/procfs.h b/libc/sysdeps/linux/avr32/sys/procfs.h
-new file mode 100644
-index 0000000..3b37363
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/sys/procfs.h
@@ -0,0 +1,123 @@
+__END_DECLS
+
+#endif /* sys/procfs.h */
-diff --git a/libc/sysdeps/linux/avr32/sys/ucontext.h b/libc/sysdeps/linux/avr32/sys/ucontext.h
-new file mode 100644
-index 0000000..82c7fe2
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/sys/ucontext.h
@@ -0,0 +1,90 @@
+} ucontext_t;
+
+#endif /* sys/ucontext.h */
-diff --git a/libc/sysdeps/linux/avr32/sys/user.h b/libc/sysdeps/linux/avr32/sys/user.h
-new file mode 100644
-index 0000000..c0b3d38
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/sys/user.h
@@ -0,0 +1,46 @@
+};
+
+#endif /* _SYS_USER_H */
-diff --git a/libc/sysdeps/linux/avr32/syscall.S b/libc/sysdeps/linux/avr32/syscall.S
-new file mode 100644
-index 0000000..55c1b1f
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/syscall.S
@@ -0,0 +1,71 @@
+
+
+ .size syscall, . - syscall
-diff --git a/libc/sysdeps/linux/avr32/vfork.S b/libc/sysdeps/linux/avr32/vfork.S
-new file mode 100644
-index 0000000..03ca99f
--- /dev/null
+++ b/libc/sysdeps/linux/avr32/vfork.S
@@ -0,0 +1,58 @@
+
+weak_alias(__vfork,vfork)
+libc_hidden_weak(vfork)
-diff --git a/libpthread/linuxthreads.old/sysdeps/avr32/pt-machine.h b/libpthread/linuxthreads.old/sysdeps/avr32/pt-machine.h
-new file mode 100644
-index 0000000..eccf329
--- /dev/null
+++ b/libpthread/linuxthreads.old/sysdeps/avr32/pt-machine.h
@@ -0,0 +1,73 @@
+}
+
+#endif /* pt-machine.h */
-diff --git a/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h b/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h
-new file mode 100644
-index 0000000..fe12bf8
--- /dev/null
+++ b/libpthread/linuxthreads/sysdeps/avr32/pt-machine.h
@@ -0,0 +1,73 @@
+}
+
+#endif /* pt-machine.h */
-diff --git a/utils/ldd.c b/utils/ldd.c
-index 75ad628..e34acd9 100644
--- a/utils/ldd.c
+++ b/utils/ldd.c
@@ -44,6 +44,11 @@