[packages/dietlibc] up to 0.34 (rel 0.1 memalign patch needs update)
atler
atler at pld-linux.org
Wed Apr 22 01:14:31 CEST 2020
commit 8f178a7a358c8d7146d5a1dcb0d1cb1a79109210
Author: Jan Palus <atler at pld-linux.org>
Date: Wed Apr 22 01:13:45 2020 +0200
up to 0.34 (rel 0.1 memalign patch needs update)
dietlibc-diet-m.patch | 22 +-
dietlibc-nostrip.patch | 39 +-
dietlibc-opt.patch | 2 +-
dietlibc-platform.patch | 6 +-
dietlibc.spec | 12 +-
git.patch | 14478 ----------------------------------------------
umount-arch.patch | 121 -
x32-fixes.patch | 4 +-
8 files changed, 42 insertions(+), 14642 deletions(-)
---
diff --git a/dietlibc.spec b/dietlibc.spec
index 56d6509..9b00464 100644
--- a/dietlibc.spec
+++ b/dietlibc.spec
@@ -10,13 +10,13 @@ Summary: C library optimized for size
Summary(pl.UTF-8): Biblioteka standardowa C zoptymalizowana na rozmiar
Summary(pt_BR.UTF-8): libc pequena otimizada para tamanho
Name: dietlibc
-Version: 0.33
-Release: 5
+Version: 0.34
+Release: 0.1
Epoch: 2
License: GPL v2
Group: Development/Libraries
-Source0: http://www.fefe.de/dietlibc/%{name}-%{version}.tar.bz2
-# Source0-md5: 9d541b9a6623b04ec12e5248b82db7c0
+Source0: http://www.fefe.de/dietlibc/%{name}-%{version}.tar.xz
+# Source0-md5: 4f04a6f642548cc5be716a6e0de6b631
Patch0: %{name}-ppc.patch
Patch1: %{name}-opt.patch
Patch2: %{name}-platform.patch
@@ -25,14 +25,12 @@ Patch4: %{name}-arm.patch
Patch5: %{name}-diet-m.patch
Patch6: %{name}-nostrip.patch
Patch7: %{name}-stackgap-instead-of-ssp.patch
-Patch8: umount-arch.patch
Patch9: %{name}-memalign.patch
Patch10: %{name}-getsubopt.patch
Patch11: %{name}-devmacros.patch
Patch12: %{name}-notify.patch
Patch13: x32-fixes.patch
Patch14: %{name}-no-vsyscall.patch
-Patch100: git.patch
URL: http://www.fefe.de/dietlibc/
BuildRequires: rpmbuild(macros) >= 1.566
BuildRequires: sed >= 4.0
@@ -101,7 +99,6 @@ statyczne.
%prep
%setup -q
%undos arm/md5asm.S
-%patch100 -p1
%patch0 -p1
%patch1 -p1
%patch2 -p1
@@ -110,7 +107,6 @@ statyczne.
%patch5 -p1
%patch6 -p1
%{!?with_ssp:%patch7 -p1}
-%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1
diff --git a/dietlibc-diet-m.patch b/dietlibc-diet-m.patch
index 515e71f..60810a5 100644
--- a/dietlibc-diet-m.patch
+++ b/dietlibc-diet-m.patch
@@ -1,8 +1,8 @@
---- dietlibc-0.30/diet.c.orig 2006-12-31 12:01:17.000000000 +0000
-+++ dietlibc-0.30/diet.c 2006-12-31 12:02:59.000000000 +0000
-@@ -146,26 +146,34 @@
- else if (!strncmp(shortplatform, "athlon", 6)) strcpy(shortplatform, "i386");
+--- dietlibc-0.34/diet.c.orig 2020-04-22 01:00:18.176151567 +0200
++++ dietlibc-0.34/diet.c 2020-04-22 01:02:12.779007194 +0200
+@@ -155,6 +155,14 @@
else if (!strncmp(shortplatform, "amd64", 5)) strcpy(shortplatform, "x86_64");
+ else if (!strncmp(shortplatform, "armv", 4)) strcpy(shortplatform, "arm");
else if (!strncmp(shortplatform, "sparcv", 6)) strcpy(shortplatform, "sparc");
+ if (!strncmp(shortplatform, "x86_64", 6) && (m==32)) strcpy(shortplatform, "i386");
+ else if (!strncmp(shortplatform, "i386", 4) && (m==64)) strcpy(shortplatform, "x86_64");
@@ -12,10 +12,10 @@
+ else if (!strncmp(shortplatform, "ppc", 3) && (m==64)) strcpy(shortplatform, "ppc64");
+ else if (!strncmp(shortplatform, "s390x", 5) && (m==32)) strcpy(shortplatform, "s390");
+ else if (!strncmp(shortplatform, "s390", 4) && (m==64)) strcpy(shortplatform, "s390x");
- else if (strcmp(shortplatform, "powerpc") == 0)
- strcpy(shortplatform, "ppc");
- else if (strcmp(shortplatform, "powerpc64") == 0)
- strcpy(shortplatform, "ppc64");
+ if (!strncmp(shortplatform, "powerpc", 7)) {
+ shortplatform[0] = shortplatform[1] = 'p'; shortplatform[2] = 'c';
+ memmove(&shortplatform[3], &shortplatform[7], strlen(&shortplatform[7]) + 1);
+@@ -168,23 +176,23 @@
} else {
#ifdef __sparc__
#ifdef __arch64__
@@ -28,11 +28,15 @@
#endif
#ifdef __powerpc__
- shortplatform="ppc";
-+ shortplatform=(m==64?"ppc64":"ppc");
++ shortplatform=(m==64?"ppc64":"ppc");
#endif
#ifdef __powerpc64__
+ #ifdef __LITTLE_ENDIAN__
+ shortplatform="ppc64le";
+ #else
- shortplatform="ppc64";
+ shortplatform=(m==32?"ppc":"ppc64");
+ #endif
#endif
#ifdef __i386__
- shortplatform="i386";
diff --git a/dietlibc-nostrip.patch b/dietlibc-nostrip.patch
index 0cff4ea..9c9d492 100644
--- a/dietlibc-nostrip.patch
+++ b/dietlibc-nostrip.patch
@@ -1,49 +1,48 @@
---- dietlibc/Makefile.orig 2006-06-21 21:18:13.000000000 +0200
-+++ dietlibc/Makefile 2006-06-21 21:35:15.252354000 +0200
-@@ -161,7 +161,6 @@
+--- dietlibc-0.34/Makefile.orig 2020-04-22 01:02:35.965574117 +0200
++++ dietlibc-0.34/Makefile 2020-04-22 01:04:39.085029868 +0200
+@@ -184,7 +184,6 @@
- $(OBJDIR)/%.o: %.c
+ $(OBJDIR)/%.o: %.c | $(OBJDIR)
tcc -I. -Iinclude -c $< -o $@
- -$(STRIP) -x -R .comment -R .note $@
else
- $(OBJDIR)/pstart.o: start.S
- $(CCC) $(INC) $(CFLAGS) -DPROFILING -c $< -o $@
-@@ -171,12 +170,10 @@
+ $(OBJDIR)/pstart.o: start.S | $(OBJDIR)
+ $(CCC) $(INC) $(CCFLAGS) -DPROFILING -c $< $(ASM_CFLAGS) -o $@
+@@ -194,11 +193,9 @@
$(OBJDIR)/pthread_%.o: libpthread/pthread_%.c | $(OBJDIR)
- $(CCC) $(INC) $(CFLAGS) $(EXTRACFLAGS) -c $< -o $@
+ $(CCC) $(INC) $(CCFLAGS) $(EXTRACFLAGS) -c $< -o $@
- -$(STRIP) -x -R .comment -R .note $@
- $(OBJDIR)/stack_smash_handler2.o: EXTRACFLAGS:=-fno-omit-frame-pointer
$(OBJDIR)/%.o: %.c | $(OBJDIR)
- $(CCC) $(INC) $(CFLAGS) $(EXTRACFLAGS) -c $< -o $@ -D__dietlibc__
+ $(CCC) $(INC) $(CCFLAGS) $(EXTRACFLAGS) -c $< -o $@ -D__dietlibc__
- -$(STRIP) -x -R .comment -R .note $@
+ endif
+
- $(addprefix $(OBJDIR)/,$(NO_STACK_PROTECTOR)) \
- $(addprefix $(PICODIR)/,$(NO_STACKPROTECTOR)): EXTRACFLAGS+=-fno-stack-protector
-@@ -246,18 +243,15 @@
+@@ -282,18 +279,15 @@
$(PICODIR)/pthread_%.o: libpthread/pthread_%.c | $(PICODIR)
- $(CCC) $(INC) $(CFLAGS) $(EXTRACFLAGS) -fPIC -D__DYN_LIB -c $< -o $@
+ $(CCC) $(INC) $(CCFLAGS) $(EXTRACFLAGS) -fPIC -D__DYN_LIB -c $< -o $@
- $(STRIP) -x -R .comment -R .note $@
$(PICODIR)/%.o: %.c | $(PICODIR)
- $(CCC) $(INC) $(CFLAGS) $(EXTRACFLAGS) -fPIC -D__DYN_LIB -c $< -o $@
+ $(CCC) $(INC) $(CCFLAGS) $(EXTRACFLAGS) -fPIC -D__DYN_LIB -c $< -o $@
- $(STRIP) -x -R .comment -R .note $@
$(PICODIR)/dstart.o: start.S | $(PICODIR)
- $(CCC) $(INC) $(CFLAGS) $(EXTRACFLAGS) -fPIC -D__DYN_LIB $(ASM_CFLAGS) -c $< -o $@
+ $(CCC) $(INC) $(CCFLAGS) $(EXTRACFLAGS) -fPIC -D__DYN_LIB $(ASM_CFLAGS) -c $< -o $@
$(PICODIR)/dyn_so_start.o: dyn_start.c | $(PICODIR)
- $(CCC) $(INC) $(CFLAGS) $(EXTRACFLAGS) -fPIC -D__DYN_LIB -D__DYN_LIB_SHARED -c $< -o $@
+ $(CCC) $(INC) $(CCFLAGS) $(EXTRACFLAGS) -fPIC -D__DYN_LIB -D__DYN_LIB_SHARED -c $< -o $@
- $(STRIP) -x -R .comment -R .note $@
DYN_LIBC_PIC = $(LIBOBJ) $(LIBSTDIOOBJ) $(LIBUGLYOBJ) \
$(LIBCRUFTOBJ) $(LIBCRYPTOBJ) $(LIBSHELLOBJ) $(LIBREGEXOBJ)
-@@ -306,19 +300,15 @@
+@@ -345,19 +339,15 @@
$(OBJDIR)/diet: $(OBJDIR)/start.o $(OBJDIR)/dyn_start.o diet.c $(OBJDIR)/dietlibc.a $(OBJDIR)/dyn_stop.o
- $(CCC) -isystem include $(CFLAGS) -nostdlib -o $@ $^ -DDIETHOME=\"$(HOME)\" -DVERSION=\"$(VERSION)\" -lgcc
+ $(CCC) -isystem include $(CFLAGS) -nostdlib -o $@ $^ -DDIETHOME=\"$(DIETHOME)\" -DVERSION=\"$(VERSION)\" -lgcc
- $(STRIP) -R .comment -R .note $@
$(OBJDIR)/diet-i: $(OBJDIR)/start.o $(OBJDIR)/dyn_start.o diet.c $(OBJDIR)/dietlibc.a $(OBJDIR)/dyn_stop.o
@@ -51,7 +50,7 @@
- $(STRIP) -R .comment -R .note $@
$(PICODIR)/diet-dyn: $(PICODIR)/start.o $(PICODIR)/dyn_start.o diet.c
- $(LD_UNSET) $(CCC) -isystem include $(CFLAGS) -fPIC -nostdlib -o $@ $^ -DDIETHOME=\"$(HOME)\" -D__DYN_LIB -DVERSION=\"$(VERSION)\" -L$(PICODIR) -lc -lgcc $(PICODIR)/dyn_stop.o -Wl,-dynamic-linker=$(HOME)/$(PICODIR)/libdl.so
+ $(LD_UNSET) $(CCC) -isystem include $(CFLAGS) -fPIC -nostdlib -o $@ $^ -DDIETHOME=\"$(DIETHOME)\" -D__DYN_LIB -DVERSION=\"$(VERSION)\" -L$(PICODIR) -lc -lgcc $(PICODIR)/dyn_stop.o -Wl,-dynamic-linker=$(DIETHOME)/$(PICODIR)/libdl.so
- $(STRIP) -R .command -R .note $@
$(PICODIR)/diet-dyn-i: $(PICODIR)/start.o $(PICODIR)/dyn_start.o diet.c
diff --git a/dietlibc-opt.patch b/dietlibc-opt.patch
index c782cd6..1f5c51a 100644
--- a/dietlibc-opt.patch
+++ b/dietlibc-opt.patch
@@ -35,7 +35,7 @@ diff -ur dietlibc-0.30.org/Makefile dietlibc-0.30/Makefile
-endif
-
-ifneq ($(DEBUG),)
--CFLAGS = -g
+-CFLAGS = -g $(EXTRACFLAGS)
-STRIP = :
-endif
CFLAGS += -W -Wall -Wextra -Wchar-subscripts -Wmissing-prototypes -Wmissing-declarations -Wno-switch -Wno-unused -Wredundant-decls -Wshadow
diff --git a/dietlibc-platform.patch b/dietlibc-platform.patch
index 96cf902..1db08fc 100644
--- a/dietlibc-platform.patch
+++ b/dietlibc-platform.patch
@@ -11,6 +11,6 @@ diff -uNrp dietlibc-0.29.orig/diet.c dietlibc-0.29/diet.c
+ else if (!strncmp(shortplatform, "amd64", 5)) strcpy(shortplatform, "x86_64");
+ else if (!strncmp(shortplatform, "armv", 4)) strcpy(shortplatform, "arm");
+ else if (!strncmp(shortplatform, "sparcv", 6)) strcpy(shortplatform, "sparc");
- else if (strcmp(shortplatform, "powerpc") == 0)
- strcpy(shortplatform, "ppc");
- else if (strcmp(shortplatform, "powerpc64") == 0)
+ if (!strncmp(shortplatform, "powerpc", 7)) {
+ shortplatform[0] = shortplatform[1] = 'p'; shortplatform[2] = 'c';
+ memmove(&shortplatform[3], &shortplatform[7], strlen(&shortplatform[7]) + 1);
diff --git a/git.patch b/git.patch
deleted file mode 100644
index c647298..0000000
--- a/git.patch
+++ /dev/null
@@ -1,14478 +0,0 @@
-diff -urN -x .git dietlibc-0.33/alpha/Makefile.add dietlibc/alpha/Makefile.add
---- dietlibc-0.33/alpha/Makefile.add 2012-01-24 18:24:24.000000000 +0000
-+++ dietlibc/alpha/Makefile.add 2015-01-01 12:14:43.454938895 +0000
-@@ -3,3 +3,5 @@
- VPATH:=alpha:syscalls.s:$(VPATH)
-
- LIBOBJ+=$(patsubst %,$(OBJDIR)/%,divq.o divl.o remq.o reml.o __time.o __alarm.o __CAS.o)
-+
-+$(OBJDIR)/__pause.o: include/signal.h
-diff -urN -x .git dietlibc-0.33/alpha/start.S dietlibc/alpha/start.S
---- dietlibc-0.33/alpha/start.S 2006-05-29 16:30:53.000000000 +0000
-+++ dietlibc/alpha/start.S 2015-01-01 12:14:43.454938895 +0000
-@@ -24,6 +24,15 @@
-
- stq $18, environ
-
-+#ifdef WANT_ELFINFO
-+# warning "MAKE ME alpha ASSEMBLER!"
-+1: ldq $19, $18 ; load *envp into $19
-+ addq $18, 1, $18 ; increment *envp
-+ orr $19, $19, $19
-+ jne 1b
-+ stq $18, __elfinfo
-+#endif
-+
- #ifdef WANT_DYNAMIC
- /* in v0 ($0) is the ld.so _fini pointer */
- mov $0, $19 /* mov v0(dynload) to a3 */
-diff -urN -x .git dietlibc-0.33/alpha/syscalls.h dietlibc/alpha/syscalls.h
---- dietlibc-0.33/alpha/syscalls.h 2008-05-06 17:18:34.000000000 +0000
-+++ dietlibc/alpha/syscalls.h 2015-01-01 12:14:43.454938895 +0000
-@@ -412,7 +412,38 @@
- #define __NR_signalfd 476
- #define __NR_timerfd 477
- #define __NR_eventfd 478
--
-+#define __NR_recvmmsg 479
-+#define __NR_fallocate 480
-+#define __NR_timerfd_create 481
-+#define __NR_timerfd_settime 482
-+#define __NR_timerfd_gettime 483
-+#define __NR_signalfd4 484
-+#define __NR_eventfd2 485
-+#define __NR_epoll_create1 486
-+#define __NR_dup3 487
-+#define __NR_pipe2 488
-+#define __NR_inotify_init1 489
-+#define __NR_preadv 490
-+#define __NR_pwritev 491
-+#define __NR_rt_tgsigqueueinfo 492
-+#define __NR_perf_event_open 493
-+#define __NR_fanotify_init 494
-+#define __NR_fanotify_mark 495
-+#define __NR_prlimit64 496
-+#define __NR_name_to_handle_at 497
-+#define __NR_open_by_handle_at 498
-+#define __NR_clock_adjtime 499
-+#define __NR_syncfs 500
-+#define __NR_setns 501
-+#define __NR_accept4 502
-+#define __NR_sendmmsg 503
-+#define __NR_process_vm_readv 504
-+#define __NR_process_vm_writev 505
-+#define __NR_kcmp 506
-+#define __NR_finit_module 507
-+#define __NR_sched_setattr 508
-+#define __NR_sched_getattr 509
-+#define __NR_renameat2 510
-
- #define syscall_weak(name,wsym,sym) \
- .text ; \
-diff -urN -x .git dietlibc-0.33/arm/__aeabi_read_tp.S dietlibc/arm/__aeabi_read_tp.S
---- dietlibc-0.33/arm/__aeabi_read_tp.S 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/arm/__aeabi_read_tp.S 2015-01-01 12:14:43.454938895 +0000
-@@ -0,0 +1,13 @@
-+#include "arm-features.h"
-+
-+FUNC_START __aeabi_read_tp
-+
-+#if __ARM_ARCH__ < 6
-+ mvn r0, #0xf000
-+ sub pc, r0, #31
-+#else
-+ mrc 15, 0, r0, cr13, cr0, 3
-+ bx lr
-+#endif
-+
-+FUNC_END __aeabi_read_tp
-diff -urN -x .git dietlibc-0.33/arm/__aeabi_unwind_cpp.S dietlibc/arm/__aeabi_unwind_cpp.S
---- dietlibc-0.33/arm/__aeabi_unwind_cpp.S 2008-04-11 22:51:11.000000000 +0000
-+++ dietlibc/arm/__aeabi_unwind_cpp.S 2015-01-01 12:14:43.454938895 +0000
-@@ -1,21 +1,14 @@
--.text
--.global __aeabi_unwind_cpp_pr0
--.hidden __aeabi_unwind_cpp_pr0
--.type __aeabi_unwind_cpp_pr0, %function
-+#include "arm-features.h"
-
--.global __aeabi_unwind_cpp_pr1
-+FUNC_START __aeabi_unwind_cpp_pr0
-+FUNC_START __aeabi_unwind_cpp_pr1
-+FUNC_START __aeabi_unwind_cpp_pr2
-+.hidden __aeabi_unwind_cpp_pr0
- .hidden __aeabi_unwind_cpp_pr1
--.type __aeabi_unwind_cpp_pr1, %function
--
--.global __aeabi_unwind_cpp_pr2
- .hidden __aeabi_unwind_cpp_pr2
--.type __aeabi_unwind_cpp_pr2, %function
-
--__aeabi_unwind_cpp_pr0:
--__aeabi_unwind_cpp_pr1:
--__aeabi_unwind_cpp_pr2:
-- mov pc, lr @ return from subroutine
-+ RET
-
--.size __aeabi_unwind_cpp_pr0,.-__aeabi_unwind_cpp_pr0
--.size __aeabi_unwind_cpp_pr1,.-__aeabi_unwind_cpp_pr1
--.size __aeabi_unwind_cpp_pr2,.-__aeabi_unwind_cpp_pr2
-+FUNC_END __aeabi_unwind_cpp_pr2
-+FUNC_END __aeabi_unwind_cpp_pr1
-+FUNC_END __aeabi_unwind_cpp_pr0
-diff -urN -x .git dietlibc-0.33/arm/arm-features.h dietlibc/arm/arm-features.h
---- dietlibc-0.33/arm/arm-features.h 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/arm/arm-features.h 2015-01-01 12:14:43.454938895 +0000
-@@ -0,0 +1,110 @@
-+/* --*- asm -*-- */
-+
-+#ifndef H_DIETLIBC_ARM_FEATURES_H
-+#define H_DIETLIBC_ARM_FEATURES_H
-+
-+/* Stolen from gcc (gcc/config/arm/lib1funcs.asm) */
-+#if defined(__ARM_ARCH_2__)
-+# define __ARM_ARCH__ 2
-+#endif
-+
-+#if defined(__ARM_ARCH_3__)
-+# define __ARM_ARCH__ 3
-+#endif
-+
-+#if defined(__ARM_ARCH_3M__) || defined(__ARM_ARCH_4__) \
-+ || defined(__ARM_ARCH_4T__)
-+# define __ARM_ARCH__ 4
-+#endif
-+
-+#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) \
-+ || defined(__ARM_ARCH_5E__) || defined(__ARM_ARCH_5TE__) \
-+ || defined(__ARM_ARCH_5TEJ__)
-+# define __ARM_ARCH__ 5
-+#endif
-+
-+#if defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) \
-+ || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) \
-+ || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) \
-+ || defined(__ARM_ARCH_6M__)
-+# define __ARM_ARCH__ 6
-+#endif
-+
-+#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) \
-+ || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__)
-+# define __ARM_ARCH__ 7
-+#endif
-+
-+#ifndef __ARM_ARCH__
-+#error Unable to determine architecture.
-+#endif
-+
-+#define DIET_JMPBUFSZ_REGS_REGULAR 10*32/8 /* r4-r11, sp, pc */
-+#define DIET_JMPBUFSZ_REGS_FPv4 16*64/8 /* d0-d15 */
-+
-+#if !defined(__SOFTFP__) || defined(__IWMMXT__)
-+# define DIET_HAVE_COPROC_REGS 1
-+#else
-+# undef DIET_HAVE_COPROC_REGS
-+#endif
-+
-+#ifdef __ASSEMBLER__
-+
-+.macro FUNC_START name
-+ .text
-+ .align 0
-+ .global \name
-+ .type \name, %function
-+\name:
-+.endm
-+
-+.macro FUNC_START_WEAK name
-+ .text
-+ .align 0
-+ .weak \name
-+ .type \name, %function
-+\name:
-+.endm
-+
-+.macro FUNC_END name
-+ .size \name, . - \name
-+.endm
-+
-+.macro RET
-+#if (__ARM_ARCH__ > 4) || defined(__ARM_ARCH_4T__)
-+ bx lr
-+#else
-+ mov pc, lr
-+#endif
-+.endm
-+
-+.macro SWI_UNIFIED name
-+#ifdef __ARM_EABI__
-+ b __unified_syscall_swi
-+#else
-+ swi \name
-+ b __unified_syscall
-+#endif
-+.endm
-+
-+.macro SWI_UNIFIED4
-+#ifdef __ARM_EABI__
-+ b __unified_syscall_swi
-+#else
-+ swi \name
-+ b __unified_syscall4
-+#endif
-+.endm
-+
-+.macro LOAD_ARG4_5
-+#if defined(__ARM_ARCH_4__) || defined(__ARM_ARCH_4T__) || defined(__ARM_ARCH_5T__)
-+ ldr r4, [sp,#16]
-+ ldr r5, [sp,#20]
-+#else
-+ ldrd r4, [sp,#16]
-+#endif
-+.endm
-+
-+#endif /* __ASSEMBLER__ */
-+
-+#endif /* H_DIETLIBC_ARM_FEATURES_H */
-diff -urN -x .git dietlibc-0.33/arm/arm_set_tls.S dietlibc/arm/arm_set_tls.S
---- dietlibc-0.33/arm/arm_set_tls.S 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/arm/arm_set_tls.S 2015-01-01 12:14:43.454938895 +0000
-@@ -0,0 +1,27 @@
-+#include "syscalls.h"
-+#include "arm-features.h"
-+
-+#ifdef __ARM_EABI__
-+
-+@ Calling convention:
-+@ r0 ... thread data
-+@ Returns:
-+@ r0 ... low-level error code
-+FUNC_START __arm_set_tls
-+ mov ip, r7
-+ ldr r7, =__ARM_NR_set_tls
-+ swi 0
-+ mov r7, ip
-+
-+ @ we do not have much options here to handle errors because
-+ @ errno might not be available yet. Return error code as-is
-+ @ and let it handle by the caller
-+
-+ RET
-+FUNC_END __arm_set_tls
-+
-+#else
-+
-+#warning "setup-tls only implemented for ARM_EABI!"
-+
-+#endif
-diff -urN -x .git dietlibc-0.33/arm/clone.S dietlibc/arm/clone.S
---- dietlibc-0.33/arm/clone.S 2008-12-10 20:00:58.000000000 +0000
-+++ dietlibc/arm/clone.S 2015-01-01 12:14:43.454938895 +0000
-@@ -1,11 +1,7 @@
--
- #include <errno.h>
- #include "syscalls.h"
-+#include "arm-features.h"
-
-- .text
-- .weak clone
-- .global __clone
--
- @
- @ Some slightly tricky stuff here... edit with care :-)
- @
-@@ -15,13 +11,12 @@
-
- #define CLONE_VM 0x00000100
- #define CLONE_THREAD 0x00010000
--
-+
- @ ; don't do this yet
- @#define RESET_PID
-
--
--clone:
--__clone:
-+FUNC_START_WEAK clone
-+FUNC_START __clone
- @ ; start with a sanity check
- cmp r0, #0
- cmpne r1, #0
-@@ -31,13 +26,13 @@
- @ ; insert args into stack
- str r3, [r1, #-4]!
- str r0, [r1, #-4]!
--
-+
- @ ; do the system call
- @ ; get the flags
- mov r0, r2
--#ifdef RESET_PID
-+#ifdef RESET_PID
- mov ip, r2
--#endif
-+#endif
- @ ; child sp is already in r1
- stmfd sp!, {r4, r7}
- @stmdb sp!, {r4, r7}
-@@ -46,14 +41,14 @@
- ldr r4, [sp, #16]
- ldr r7, =__NR_clone
- swi 0
--
-+
- cmp r0, #0
- beq 1f
-- ldmfd sp!, {r4, r7}
-+ ldmfd sp!, {r4, r7}
- blt __unified_syscall @ (return code < 0): handle as an error
-- bx lr
--1:
--#ifdef RESET_PID
-+ RET
-+1:
-+#ifdef RESET_PID
- tst ip, #CLONE_THREAD
- bne 3f
-
-@@ -67,21 +62,22 @@
- swi 0
- str r0, [r1, #PID_OFFSET] @ ; not defined yet ??
- str r0, [r1, #TID_OFFSET] @ ; not defined yet ??
--3:
-+3:
- #endif
- @ ; pick the function arg and call address off the stack and execute
- ldr r0, [sp, #4]
- mov lr, pc
- ldr pc, [sp], #8
--
-+
- @ ; and we're done, passing return value through r0
- b _exit @ branch to _exit (PIC safe)
-+FUNC_END __clone
-+FUNC_END clone
-
--
- #else
--
--clone:
--__clone:
-+
-+FUNC_START_WEAK clone
-+FUNC_START __clone
- movs r12, r0 @ check function pointer
- cmpne r1, #0 @ if function check for stack pointer
- moveq r0, #-EINVAL @ if one is not available set errno value
-@@ -101,5 +97,7 @@
- ldmia sp!, { r0, pc } @ load function param and jump to thread function
-
- 1: b _exit @ branch to _exit (PIC safe)
-+FUNC_END __clone
-+FUNC_END clone
-
- #endif
-diff -urN -x .git dietlibc-0.33/arm/dyn_syscalls.S dietlibc/arm/dyn_syscalls.S
---- dietlibc-0.33/arm/dyn_syscalls.S 2012-01-24 18:24:24.000000000 +0000
-+++ dietlibc/arm/dyn_syscalls.S 2015-01-01 12:14:43.454938895 +0000
-@@ -3,16 +3,21 @@
- * Olaf Dreesen
- */
-
-+#include "arm-features.h"
-+
- #include "../syscalls.s/environ.S"
- #include "../syscalls.s/errno.S"
-
- #include <dietfeatures.h>
- #include "syscalls.h"
-
--.text
--__unified_syscall4:
-+#ifdef __ARM_EABI__
-+# error "dyn_syscall.S not ported for EABI yet"
-+#endif
-+
-+FUNC_START __unified_syscall4
- ldmfd sp!, {r4, r5, r6}
--__unified_syscall:
-+FUNC_START __unified_syscall
- cmn r0, #4096
- movcc pc, lr
- rsb r1, r0, #0
-@@ -25,7 +30,9 @@
-
- mvn r0, #0
- #include "dietuglyweaks.h"
-- mov pc, lr
-+ RET
-+FUNC_END __unified_syscall
-+FUNC_END __unified_syscall4
-
- /* ok now include all syscalls.s (*.S) and sysdep *.S */
- #include "mmap.S"
-@@ -104,7 +111,6 @@
- #include "../syscalls.s/n_sigprocmask.S"
- #include "../syscalls.s/n_sigsuspend.S"
- #include "../syscalls.s/nanosleep.S"
--#include "../syscalls.s/nice.S"
- #include "../syscalls.s/open.S"
- #include "../syscalls.s/pause.S"
- #include "../syscalls.s/personality.S"
-@@ -280,9 +286,11 @@
- #include "../syscalls.s/fgetxattr.S"
-
- /* other asm-files w.o. changes ... */
--__exit:
-+FUNC_START __exit
- swi $__NR_exit
- eor pc,lr,lr
-+FUNC_END __exit
-+
- #define _exit __exit
- #include "clone.S"
- #undef _exit
-diff -urN -x .git dietlibc-0.33/arm/__fadvise.c dietlibc/arm/__fadvise.c
---- dietlibc-0.33/arm/__fadvise.c 2011-03-03 18:40:05.000000000 +0000
-+++ dietlibc/arm/__fadvise.c 2015-01-01 12:14:43.454938895 +0000
-@@ -1,5 +1,7 @@
--#include <fcntl.h>
- #include "syscalls.h"
-+#define _LINUX_SOURCE
-+#include <fcntl.h>
-+#include <unistd.h>
-
- #ifndef __NR_fadvise64
- long fadvise64_64(int fd, off64_t offset, off64_t len, int advice)
-diff -urN -x .git dietlibc-0.33/arm/__guard.S dietlibc/arm/__guard.S
---- dietlibc-0.33/arm/__guard.S 2006-06-21 19:55:25.000000000 +0000
-+++ dietlibc/arm/__guard.S 2015-01-01 12:14:43.454938895 +0000
-@@ -1,4 +1,5 @@
- .data
-+.align 2
- .type __guard,#object
- .global __guard
- .type __stack_chk_guard,#object
-@@ -7,3 +8,5 @@
- __stack_chk_guard:
- .long 0xaff00
-
-+.size __guard, . - __guard
-+.size __stack_chk_guard, . - __stack_chk_guard
-diff -urN -x .git dietlibc-0.33/arm/__longjmp.S dietlibc/arm/__longjmp.S
---- dietlibc-0.33/arm/__longjmp.S 2001-07-02 16:06:48.000000000 +0000
-+++ dietlibc/arm/__longjmp.S 2015-01-01 12:14:43.454938895 +0000
-@@ -1,11 +1,23 @@
--.text
--.global __longjmp
--.type __longjmp,function
--__longjmp:
-+#include "arm-features.h"
-+
-+FUNC_START __longjmp
- mov ip, r0
- movs r0, r1
- moveq r0, #1
--#ifndef __SOFTFP__
-- lfm f4, 4, [ip], #48
-+#ifndef __SOFTFP__
-+# if __ARM_ARCH__ == 7
-+ vldm ip!, {d0-d15}
-+# ifdef __ARM_NEON__
-+ vldm ip!, {d16-d31}
-+# endif
-+# else
-+ lfm f4, 4, [ip]!
-+# endif
- #endif
-- ldmia ip, {r4-r11, sp, pc}
-+
-+#ifdef __IWMMXT__
-+# warning "sigjmp will not restore iwmmxt coprocessor registers"
-+#endif
-+
-+ ldmia ip!, {r4-r11, sp, pc}
-+FUNC_END __longjmp
-diff -urN -x .git dietlibc-0.33/arm/Makefile.add dietlibc/arm/Makefile.add
---- dietlibc-0.33/arm/Makefile.add 2012-01-24 18:24:24.000000000 +0000
-+++ dietlibc/arm/Makefile.add 2015-01-01 12:14:43.454938895 +0000
-@@ -1,6 +1,7 @@
-
- LIBOBJ+=$(OBJDIR)/md5asm.o $(OBJDIR)/__aeabi_unwind_cpp.o
- LIBOBJ+=$(OBJDIR)/__fadvise.o $(OBJDIR)/arm_fadvise.o
-+LIBOBJ+=$(OBJDIR)/__aeabi_read_tp.o $(OBJDIR)/arm_set_tls.o
- CFLAGS+=-Os -fomit-frame-pointer -fstrict-aliasing
- #ifdef __ARM_EABI__
- #CFLAGS+=-mabi=aapcs-linux -mno-thumb-interwork
-diff -urN -x .git dietlibc-0.33/arm/mcount.S dietlibc/arm/mcount.S
---- dietlibc-0.33/arm/mcount.S 2002-05-09 03:50:17.000000000 +0000
-+++ dietlibc/arm/mcount.S 2015-01-01 12:14:43.454938895 +0000
-@@ -1,4 +1,4 @@
--
-+#include "arm-features.h"
- @
- @ mcount.S: ARM assembler implementation of mcount
- @
-@@ -27,11 +27,7 @@
- @
- @
-
--.text
--
--.global mcount
--
--mcount:
-+FUNC_START mcount
- mov ip, sp
- stmdb sp!, { r0 - r3, fp, ip, lr, pc } @ build stack frame
- sub fp, ip, #4 @ setup new fp
-@@ -43,4 +39,4 @@
- bl __mcount @ call __mcount
-
- ldmdb fp, { r0 - r3, fp, sp, pc } @ restore context from stack frame and return.
--
-+FUNC_END mcount
-diff -urN -x .git dietlibc-0.33/arm/md5asm.S dietlibc/arm/md5asm.S
---- dietlibc-0.33/arm/md5asm.S 2008-12-10 20:00:58.000000000 +0000
-+++ dietlibc/arm/md5asm.S 2015-01-01 12:14:43.454938895 +0000
-@@ -1,400 +1,394 @@
--/*****************************************************************************
--* Copyright (C) 2002 Andre McCurdy <armccurdy at yahoo.co.uk>
--*
--* "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm"
--*
--* This program is free software. you can redistribute it and/or modify
--* it under the terms of the GNU General Public License as published by
--* the Free Software Foundation; either version 2 of the License, or
--* (at your option) any later version.
--*
--* This program is distributed in the hope that it will be useful,
--* but WITHOUT ANY WARRANTY, without even the implied warranty of
--* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
--* GNU General Public License for more details.
--*
--* You should have received a copy of the GNU General Public License
--* along with this program; if not, write to the Free Software
--* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
--*
--******************************************************************************
--*
--* History:
--*
--* 2002/02/12: Andre McCurdy <armccurdy at yahoo.co.uk>
--* - Original created.
--*
--* 2002/02/13: Andre McCurdy <armccurdy at yahoo.co.uk>
--* - Rewrote MD5Update in assembler (saves 52 bytes).
--* - Added guard so we don't compile anything for Big-Endian targets.
--*
--* 2002/02/22: Andre McCurdy <armccurdy at yahoo.co.uk>
--* - Added new function MD5Update (a wrapper for the original version) which
--* checks for correct 32bit alignment of the input data pointer.
--* - Original MD5Update function renamed __MD5Update.
--* - __MD5Transform symbol no longer exported.
--*
--* 2002/02/25: Andre McCurdy <armccurdy at yahoo.co.uk>
--* - MD5Update re-written in assembler (saves 12 bytes + lots of cycles :-)
--*
--* 2002/03/07: Andre McCurdy <armccurdy at yahoo.co.uk>
--* - _Finally_ fixed hashing from an unaligned buffer in all cases :-)
--*
--******************************************************************************
--*
--* Notes:
--*
--* This code is believed to be Position Independent (ie can be safely used
--* as part of a shared library).
--*
--*****************************************************************************/
--
--#include <endian.h>
--
--#if (__BYTE_ORDER == __LITTLE_ENDIAN)
--
-- .global MD5Init
-- .global MD5Update
--
-- .text
--#ifdef __ARM_EABI__
-- .align 4
--#else
-- .align 2
--#endif
--
-- @ --
-- @ void MD5Init (MD5_CTX* context);
-- @ --
--
--MD5Init:
--
-- adr r1, 1f @ r1 = base address of MD5InitData array
-- ldmia r1, { r1 - r3, r12 } @ load 4 elements from MD5InitData array
-- stmia r0, { r1 - r3, r12 } @ store into MD5 context->state[0..3]
-- mov r1, #0
-- str r1, [r0, #0x10] @ initial count[0] = 0
-- str r1, [r0, #0x14] @ initial count[1] = 0
-- mov pc, lr @ return
--
--1: .word 0x67452301 @ initial MD5 context->state[0]
-- .word 0xefcdab89 @ initial MD5 context->state[1]
-- .word 0x98badcfe @ initial MD5 context->state[2]
-- .word 0x10325476 @ initial MD5 context->state[3]
--
--
-- @ --
-- @ void MD5Update (MD5_CTX* context, const uint8_t* buf, signed int len);
-- @ --
--
--MD5Update:
--
-- stmdb sp!, { r4 - r8, lr }
-- add r4, r0, #(6 * 4) @ r4 = &context->buffer[0]
-- ldmdb r4, { r0, r3 } @ r0 = count[0], r3 = count[1]
-- mov r5, r1 @ r5 = input
-- mov r6, r0, lsr #3 @ r6 = (context->count[0] >> 3)
-- and r6, r6, #0x3f @ r6 = byteIndex = ((context->count[0] >> 3) & 0x3f)
-- adds r0, r0, r2, lsl #3
-- adc r3, r3, r2, lsr #29
-- stmdb r4, { r0, r3 } @ context->count += (inputBytes * 8)
-- rsb r7, r6, #64 @ r7 = (64 - byteIndex) == partLen
-- subs r8, r2, r7 @ r8 = (inputBytes - partLen)
-- add r0, r4, r6
-- bcc 2f
-- mov r2, r7
-- bl memcpy @ memcpy (&context->buffer[byteIndex], input, partLen);
-- sub r0, r4, #(6 * 4)
-- mov r1, r4
-- mov r2, #1
-- bl __MD5Transform @ __MD5Transform (context->state, context->buffer, 1);
-- sub r0, r4, #(6 * 4)
-- add r1, r5, r7
-- mov r2, r8, lsr #6 @ r2 = len = ((inputBytes - partLen) / 64)
-- tst r1, #3 @ if (input & 0x03)
-- adr lr, 1f
-- beq __MD5Transform @ __MD5Transform (context->state, &input[partLen], len);
-- bne __UnalignedMD5Transform @ else __UnalignedMD5Transform (context->state, &input[partLen], len);
--1: mov r0, r4
-- bic r2, r8, #0x3f
-- add r1, r2, r7
-- add r1, r1, r5
-- sub r2, r8, r2
--2: ldmia sp!, { r4 - r8, lr }
-- b memcpy @ classic tail-call optimisation...
--
--
-- @ --
-- @ static void __MD5Transform (uint32_t *buf, const uint32_t *in, int repeat);
-- @ --
--
--MD5MagicData:
--
--1: .word 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee
-- .word 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, ( 3f- 4f-4)
-- .word 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, ( 3f- 4f-4)
-- .word 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, ( 3f- 4f-4)
-- .word 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, ( 4f- 4f-4)
-- .word 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, ( 5f- 9f-4)
-- .word 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, ( 6f- 9f-4)
-- .word 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, ( 7f- 9f-4)
-- .word 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, ( 9f- 9f-4)
-- .word 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, (10f-14f-4)
-- .word 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, (11f-14f-4)
-- .word 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, (12f-14f-4)
-- .word 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, (14f-14f-4)
-- .word 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, (15f-19f-4)
-- .word 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, (16f-19f-4)
-- .word 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391, (17f-19f-4)
-- .word 0x6e4120A9, 0x20657264, 0x7543634d, 0x00796472, (19f-19f-4)
--
--__MD5Transform:
--
-- cmp r2, #0
-- moveq pc, lr @ return if (repeat == 0)
-- stmdb sp!, { r0, r2, r4 - r11, lr } @ stack 'buf', 'repeat' and all callee saved registers
-- ldmia r0, { r2 - r5 } @ r2 = a, r3 = b, r4 = c, r5 = d
--2: adr r0, 1b @ r0 = base address of MD5MagicData
-- ldmia r0!, { r6 - r9 } @ load first 4 elements from MD5MagicData
--3: ldmia r1!, { r10 - r12, lr } @ r10 = in[i], r11 = in[i+1], r12 = in[i+2], lr = in[i+3]
--
-- add r10, r10, r6 @ r10 = in[i] + MD5MagicData[i]
-- eor r6, r4, r5 @ r6 = (c ^ d)
-- and r6, r6, r3 @ r6 = ((c ^ d) & b)
-- eor r6, r6, r5 @ r6 = (((c ^ d) & b) ^ d)
-- add r2, r2, r6 @ a = (((c ^ d) & b) ^ d) + a
-- add r2, r2, r10 @ a = (((c ^ d) & b) ^ d) + a + (in[i] + MD5MagicData[i])
-- add r2, r3, r2, ROR #(32 - 7) @ a = b + (a rotated left by 7 places)
--
-- add r11, r11, r7 @ r11 = in[i+1] + MD5MagicData[i+1]
-- eor r7, r3, r4 @ r7 = (b ^ c)
-- and r7, r7, r2 @ r7 = ((b ^ c) & a)
-- eor r7, r7, r4 @ r7 = (((b ^ c) & a) ^ c)
-- add r5, r5, r7 @ d = (((b ^ c) & a) ^ c) + d
-- add r5, r5, r11 @ d = (((b ^ c) & a) ^ c) + d + (in[i+1] + MD5MagicData[i+1])
-- add r5, r2, r5, ROR #(32 - 12) @ d = a + (d rotated left by 12 places)
--
-- add r12, r12, r8 @ r12 = in[i+2] + MD5MagicData[i+2]
-- eor r8, r2, r3 @ r8 = (a ^ b)
-- and r8, r8, r5 @ r8 = ((a ^ b) & d)
-- eor r8, r8, r3 @ r8 = (((a ^ b) & d) ^ b)
-- add r4, r4, r8 @ c = (((a ^ b) & d) ^ b) + c
-- add r4, r4, r12 @ c = (((a ^ b) & d) ^ b) + c + (in[i+2] + MD5MagicData[i+2])
-- add r4, r5, r4, ROR #(32 - 17) @ c = d + (c rotated left by 17 places)
--
-- add lr, lr, r9 @ lr = in[i+3] + MD5MagicData[i+3]
-- eor r9, r5, r2 @ r9 = (d ^ a)
-- and r9, r9, r4 @ r9 = ((d ^ a) & c)
-- eor r9, r9, r2 @ r9 = (((d ^ a) & c) ^ a)
-- add r3, r3, r9 @ b = (((d ^ a) & c) ^ a) + b
-- add r3, r3, lr @ b = (((d ^ a) & c) ^ a) + b + (in[i+3] + MD5MagicData[i+3])
-- add r3, r4, r3, ROR #(32 - 22) @ b = c + (b rotated left by 22 places)
--
-- ldmia r0!, { r6 - r10 } @ load next 4 elements from MD5MagicData
-- add pc, pc, r10 @ and branch to next state
--
--4: ldr r10, [r1, #-(15*4)] @ r10 = in[ 1]
-- ldr r11, [r1, #-(10*4)] @ r11 = in[ 6]
-- ldr r12, [r1, #-( 5*4)] @ r12 = in[11]
-- ldr lr, [r1, #-(16*4)] @ lr = in[ 0]
-- b 8f
--5: ldr r10, [r1, #-(11*4)] @ r10 = in[ 5]
-- ldr r11, [r1, #-( 6*4)] @ r11 = in[10]
-- ldr r12, [r1, #-( 1*4)] @ r12 = in[15]
-- ldr lr, [r1, #-(12*4)] @ lr = in[ 4]
-- b 8f
--6: ldr r10, [r1, #-( 7*4)] @ r10 = in[ 9]
-- ldr r11, [r1, #-( 2*4)] @ r11 = in[14]
-- ldr r12, [r1, #-(13*4)] @ r12 = in[ 3]
-- ldr lr, [r1, #-( 8*4)] @ lr = in[ 8]
-- b 8f
--7: ldr r10, [r1, #-( 3*4)] @ r10 = in[13]
-- ldr r11, [r1, #-(14*4)] @ r11 = in[ 2]
-- ldr r12, [r1, #-( 9*4)] @ r12 = in[ 7]
-- ldr lr, [r1, #-( 4*4)] @ lr = in[12]
--
--8: add r10, r10, r6 @ r10 = in[x] + MD5MagicData[i]
-- eor r6, r3, r4 @ r6 = (b ^ c)
-- and r6, r6, r5 @ r6 = ((b ^ c) & d)
-- eor r6, r6, r4 @ r6 = (((b ^ c) & d) ^ c)
-- add r2, r2, r6 @ a = (((b ^ c) & d) ^ c) + a
-- add r2, r2, r10 @ a = (((b ^ c) & d) ^ c) + a + (in[x] + MD5MagicData[i])
-- add r2, r3, r2, ROR #(32 - 5) @ a = b + (a rotated left by 5 places)
--
-- add r11, r11, r7 @ r11 = in[x] + MD5MagicData[i+1]
-- eor r7, r2, r3 @ r7 = (a ^ b)
-- and r7, r7, r4 @ r7 = ((a ^ b) & c)
-- eor r7, r7, r3 @ r7 = (((a ^ b) & c) ^ b)
-- add r5, r5, r7 @ d = (((a ^ b) & c) ^ b) + d
-- add r5, r5, r11 @ d = (((a ^ b) & c) ^ b) + d + (in[x] + MD5MagicData[i+1])
-- add r5, r2, r5, ROR #(32 - 9) @ d = a + (d rotated left by 9 places)
--
-- add r12, r12, r8 @ r12 = in[x] + MD5MagicData[i+2]
-- eor r8, r5, r2 @ r8 = (d ^ a)
-- and r8, r8, r3 @ r8 = ((d ^ a) & b)
-- eor r8, r8, r2 @ r8 = (((d ^ a) & b) ^ a)
-- add r4, r4, r8 @ c = (((d ^ a) & b) ^ a) + c
-- add r4, r4, r12 @ c = (((d ^ a) & b) ^ a) + c + (in[x] + MD5MagicData[i+2])
-- add r4, r5, r4, ROR #(32 - 14) @ c = d + (c rotated left by 14 places)
--
-- add lr, lr, r9 @ lr = in[x] + MD5MagicData[i+3]
-- eor r9, r4, r5 @ r9 = (c ^ d)
-- and r9, r9, r2 @ r9 = ((c ^ d) & a)
-- eor r9, r9, r5 @ r9 = (((c ^ d) & a) ^ d)
-- add r3, r3, r9 @ b = (((c ^ d) & a) ^ d) + b
-- add r3, r3, lr @ b = (((c ^ d) & a) ^ d) + b + (in[x] + MD5MagicData[i+3])
-- add r3, r4, r3, ROR #(32 - 20) @ b = c + (b rotated left by 20 places)
--
-- ldmia r0!, { r6 - r10 } @ load next 4 elements from MD5MagicData
-- add pc, pc, r10 @ and branch to next state
--
--9: ldr r10, [r1, #-(11*4)] @ r10 = in[ 5]
-- ldr r11, [r1, #-( 8*4)] @ r11 = in[ 8]
-- ldr r12, [r1, #-( 5*4)] @ r12 = in[11]
-- ldr lr, [r1, #-( 2*4)] @ lr = in[14]
-- b 13f
--10: ldr r10, [r1, #-(15*4)] @ r10 = in[ 1]
-- ldr r11, [r1, #-(12*4)] @ r11 = in[ 4]
-- ldr r12, [r1, #-( 9*4)] @ r12 = in[ 7]
-- ldr lr, [r1, #-( 6*4)] @ lr = in[10]
-- b 13f
--11: ldr r10, [r1, #-( 3*4)] @ r10 = in[13]
-- ldr r11, [r1, #-(16*4)] @ r11 = in[ 0]
-- ldr r12, [r1, #-(13*4)] @ r12 = in[ 3]
-- ldr lr, [r1, #-(10*4)] @ lr = in[ 6]
-- b 13f
--12: ldr r10, [r1, #-( 7*4)] @ r10 = in[ 9]
-- ldr r11, [r1, #-( 4*4)] @ r11 = in[12]
-- ldr r12, [r1, #-( 1*4)] @ r12 = in[15]
-- ldr lr, [r1, #-(14*4)] @ lr = in[ 2]
--
--13: add r10, r10, r6 @ r10 = in[x] + MD5MagicData[i]
-- add r2, r2, r10 @ a += in[x] + MD5MagicData[i]
-- eor r6, r3, r4 @ r6 = (b ^ c)
-- eor r10, r6, r5 @ r10 = (b ^ c ^ d)
-- add r2, r2, r10 @ a += (b ^ c ^ d)
-- add r2, r3, r2, ROR #(32 - 4) @ a = b + (a rotated left by 4 places)
--
-- add r11, r11, r7 @ r11 = in[x] + MD5MagicData[i+1]
-- eor r7, r2, r6 @ r7 = (a ^ b ^ c)
-- add r5, r5, r7 @ d = (a ^ b ^ c) + d
-- add r5, r5, r11 @ d = (a ^ b ^ c) + d + (in[x] + MD5MagicData[i+1])
-- add r5, r2, r5, ROR #(32 - 11) @ d = a + (d rotated left by 11 places)
--
-- add r12, r12, r8 @ r12 = in[x] + MD5MagicData[i+2]
-- add r4, r4, r12 @ c += in[x] + MD5MagicData[i+2]
-- eor r8, r5, r2 @ r8 = (d ^ a)
-- eor r12, r8, r3 @ r12 = (d ^ a ^ b)
-- add r4, r4, r12 @ c += (d ^ a ^ b)
-- add r4, r5, r4, ROR #(32 - 16) @ c = d + (c rotated left by 16 places)
--
-- add lr, lr, r9 @ lr = in[x] + MD5MagicData[i+3]
-- eor r9, r4, r8 @ r9 = (c ^ d ^ a)
-- add r3, r3, r9 @ b = (c ^ d ^ a) + b
-- add r3, r3, lr @ b = (c ^ d ^ a) + b + (in[x] + MD5MagicData[i+3])
-- add r3, r4, r3, ROR #(32 - 23) @ b = c + (b rotated left by 23 places)
--
-- ldmia r0!, { r6 - r10 } @ load next 4 elements from MD5MagicData
-- add pc, pc, r10 @ and branch to next state
--
--14: ldr r10, [r1, #-(16*4)] @ r10 = in[ 0]
-- ldr r11, [r1, #-( 9*4)] @ r11 = in[ 7]
-- ldr r12, [r1, #-( 2*4)] @ r12 = in[14]
-- ldr lr, [r1, #-(11*4)] @ lr = in[ 5]
-- b 18f
--15: ldr r10, [r1, #-( 4*4)] @ r10 = in[12]
-- ldr r11, [r1, #-(13*4)] @ r11 = in[ 3]
-- ldr r12, [r1, #-( 6*4)] @ r12 = in[10]
-- ldr lr, [r1, #-(15*4)] @ lr = in[ 1]
-- b 18f
--16: ldr r10, [r1, #-( 8*4)] @ r10 = in[ 8]
-- ldr r11, [r1, #-( 1*4)] @ r11 = in[15]
-- ldr r12, [r1, #-(10*4)] @ r12 = in[ 6]
-- ldr lr, [r1, #-( 3*4)] @ lr = in[13]
-- b 18f
--17: ldr r10, [r1, #-(12*4)] @ r10 = in[ 4]
-- ldr r11, [r1, #-( 5*4)] @ r11 = in[11]
-- ldr r12, [r1, #-(14*4)] @ r12 = in[ 2]
-- ldr lr, [r1, #-( 7*4)] @ lr = in[ 9]
--
--18: add r10, r10, r6 @ r10 = in[x] + MD5MagicData[i]
-- add r2, r2, r10 @ a += in[x] + MD5MagicData[i]
-- mvn r6, r5 @ r6 = ( ~d)
-- orr r6, r6, r3 @ r6 = (b | ~d)
-- eor r6, r6, r4 @ r6 = (c ^ (b | ~d))
-- add r2, r2, r6 @ a += (c ^ (b | ~d))
-- add r2, r3, r2, ROR #(32 - 6) @ a = b + (a rotated left by 6 places)
--
-- add r11, r11, r7 @ r11 = in[x] + MD5MagicData[i]
-- add r5, r5, r11 @ d += in[x] + MD5MagicData[i]
-- mvn r7, r4 @ r7 = ( ~c)
-- orr r7, r7, r2 @ r7 = (a | ~c)
-- eor r7, r7, r3 @ r7 = (b ^ (a | ~c))
-- add r5, r5, r7 @ d += (b ^ (a | ~c))
-- add r5, r2, r5, ROR #(32 - 10) @ d = a + (d rotated left by 10 places)
--
-- add r12, r12, r8 @ r12 = in[x] + MD5MagicData[i]
-- add r4, r4, r12 @ c += in[x] + MD5MagicData[i]
-- mvn r8, r3 @ r8 = ( ~b)
-- orr r8, r8, r5 @ r8 = (d | ~b)
-- eor r8, r8, r2 @ r8 = (a ^ (d | ~b))
-- add r4, r4, r8 @ c += (a ^ (d | ~b))
-- add r4, r5, r4, ROR #(32 - 15) @ c = d + (c rotated left by 15 places)
--
-- add lr, lr, r9 @ lr = in[x] + MD5MagicData[i]
-- add r3, r3, lr @ b += in[x] + MD5MagicData[i]
-- mvn r9, r2 @ r9 = ( ~a)
-- orr r9, r9, r4 @ r9 = (c | ~a)
-- eor r9, r9, r5 @ r9 = (d ^ (c | ~a))
-- add r3, r3, r9 @ b += (d ^ (c | ~a))
-- add r3, r4, r3, ROR #(32 - 21) @ b = c + (b rotated left by 21 places)
--
-- ldmia r0!, { r6 - r10 } @ load next 4 elements from MD5MagicData
-- add pc, pc, r10 @ and branch to next state
--
--19: ldmia sp, { r0, r10 } @ fetch 'buf' and 'repeat' from the stack
-- ldmia r0, { r6 - r9 } @ r6 = buf[0], r7 = buf[1], r8 = buf[2], r9 = buf[3] (original values..)
-- subs r10, r10, #1
-- strne r10, [sp, #4]
-- add r2, r6, r2
-- add r3, r7, r3
-- add r4, r8, r4
-- add r5, r9, r5
-- stmia r0, { r2 - r5 }
-- bne 2b
-- ldmia sp!, { r0, r2, r4 - r11, pc } @ restore all callee saved registers and return
--
--
-- @ --
-- @ static void __UnalignedMD5Transform (uint32_t *buf, const uint8_t *in, int repeat);
-- @ --
--
--__UnalignedMD5Transform:
--
-- stmdb sp!, { r4 - r7, lr }
-- movs r4, r2, lsl #6 @ r4 = (repeat * 64)
-- ldmeqia sp!, { r4 - r7, pc } @ if ((repeat * 64) == 0) return;
-- mov r5, r0 @ r5 = state
-- mov r6, r1 @ r6 = in
-- sub sp, sp, #256 @ create 256 byte temp buffer
--1: cmp r4, #256
-- mov r0, sp
-- movcc r7, r4
-- movcs r7, #256 @ r7 = (blockCount * 64) = min((repeat * 64), (4 * 64))
-- mov r1, r6
-- mov r2, r7
-- bl memcpy @ memcpy (blockBuffer, in, (blockCount * 64));
-- mov r0, r5
-- mov r1, sp
-- mov r2, r7, lsr #6
-- bl __MD5Transform @ __MD5Transform (state, blockBuffer, blockCount);
-- subs r4, r4, #256 @ (repeat * 64) -= (4 * 64);
-- add r6, r6, #256 @ in += (4 * 64);
-- bgt 1b @ loop while (repeat > 0)
-- add sp, sp, #256 @ return temp buffer to stack
-- ldmia sp!, { r4 - r7, pc } @ return
--
--
--#endif /* __BYTE_ORDER == __LITTLE_ENDIAN */
--
--
-+#include "arm-features.h"
-+
-+/*****************************************************************************
-+* Copyright (C) 2002 Andre McCurdy <armccurdy at yahoo.co.uk>
-+*
-+* "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm"
-+*
-+* This program is free software. you can redistribute it and/or modify
-+* it under the terms of the GNU General Public License as published by
-+* the Free Software Foundation; either version 2 of the License, or
-+* (at your option) any later version.
-+*
-+* This program is distributed in the hope that it will be useful,
-+* but WITHOUT ANY WARRANTY, without even the implied warranty of
-+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+* GNU General Public License for more details.
-+*
-+* You should have received a copy of the GNU General Public License
-+* along with this program; if not, write to the Free Software
-+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+*
-+******************************************************************************
-+*
-+* History:
-+*
-+* 2002/02/12: Andre McCurdy <armccurdy at yahoo.co.uk>
-+* - Original created.
-+*
-+* 2002/02/13: Andre McCurdy <armccurdy at yahoo.co.uk>
-+* - Rewrote MD5Update in assembler (saves 52 bytes).
-+* - Added guard so we don't compile anything for Big-Endian targets.
-+*
-+* 2002/02/22: Andre McCurdy <armccurdy at yahoo.co.uk>
-+* - Added new function MD5Update (a wrapper for the original version) which
-+* checks for correct 32bit alignment of the input data pointer.
-+* - Original MD5Update function renamed __MD5Update.
-+* - __MD5Transform symbol no longer exported.
-+*
-+* 2002/02/25: Andre McCurdy <armccurdy at yahoo.co.uk>
-+* - MD5Update re-written in assembler (saves 12 bytes + lots of cycles :-)
-+*
-+* 2002/03/07: Andre McCurdy <armccurdy at yahoo.co.uk>
-+* - _Finally_ fixed hashing from an unaligned buffer in all cases :-)
-+*
-+******************************************************************************
-+*
-+* Notes:
-+*
-+* This code is believed to be Position Independent (ie can be safely used
-+* as part of a shared library).
-+*
-+*****************************************************************************/
-+
-+#include <endian.h>
-+#include "arm-features.h"
-+
-+#if (__BYTE_ORDER == __LITTLE_ENDIAN)
-+
-+ @ --
-+ @ void MD5Init (MD5_CTX* context);
-+ @ --
-+
-+FUNC_START MD5Init
-+ adr r1, 1f @ r1 = base address of MD5InitData array
-+ ldmia r1, { r1 - r3, r12 } @ load 4 elements from MD5InitData array
-+ stmia r0, { r1 - r3, r12 } @ store into MD5 context->state[0..3]
-+ mov r1, #0
-+ str r1, [r0, #0x10] @ initial count[0] = 0
-+ str r1, [r0, #0x14] @ initial count[1] = 0
-+ RET
-+
-+ .align 3
-+1: .word 0x67452301 @ initial MD5 context->state[0]
-+ .word 0xefcdab89 @ initial MD5 context->state[1]
-+ .word 0x98badcfe @ initial MD5 context->state[2]
-+ .word 0x10325476 @ initial MD5 context->state[3]
-+FUNC_END MD5Init
-+
-+ @ --
-+ @ void MD5Update (MD5_CTX* context, const uint8_t* buf, signed int len);
-+ @ --
-+
-+FUNC_START MD5Update
-+ stmdb sp!, { r4 - r8, lr }
-+ add r4, r0, #(6 * 4) @ r4 = &context->buffer[0]
-+ ldmdb r4, { r0, r3 } @ r0 = count[0], r3 = count[1]
-+ mov r5, r1 @ r5 = input
-+ mov r6, r0, lsr #3 @ r6 = (context->count[0] >> 3)
-+ and r6, r6, #0x3f @ r6 = byteIndex = ((context->count[0] >> 3) & 0x3f)
-+ adds r0, r0, r2, lsl #3
-+ adc r3, r3, r2, lsr #29
-+ stmdb r4, { r0, r3 } @ context->count += (inputBytes * 8)
-+ rsb r7, r6, #64 @ r7 = (64 - byteIndex) == partLen
-+ subs r8, r2, r7 @ r8 = (inputBytes - partLen)
-+ add r0, r4, r6
-+ bcc 2f
-+ mov r2, r7
-+ bl memcpy @ memcpy (&context->buffer[byteIndex], input, partLen);
-+ sub r0, r4, #(6 * 4)
-+ mov r1, r4
-+ mov r2, #1
-+ bl __MD5Transform @ __MD5Transform (context->state, context->buffer, 1);
-+ sub r0, r4, #(6 * 4)
-+ add r1, r5, r7
-+ mov r2, r8, lsr #6 @ r2 = len = ((inputBytes - partLen) / 64)
-+ tst r1, #3 @ if (input & 0x03)
-+ adr lr, 1f
-+ beq __MD5Transform @ __MD5Transform (context->state, &input[partLen], len);
-+ bne __UnalignedMD5Transform @ else __UnalignedMD5Transform (context->state, &input[partLen], len);
-+1: mov r0, r4
-+ bic r2, r8, #0x3f
-+ add r1, r2, r7
-+ add r1, r1, r5
-+ sub r2, r8, r2
-+2: ldmia sp!, { r4 - r8, lr }
-+ b memcpy @ classic tail-call optimisation...
-+FUNC_END MD5Update
-+
-+ @ --
-+ @ static void __MD5Transform (uint32_t *buf, const uint32_t *in, int repeat);
-+ @ --
-+
-+.align 3
-+MD5MagicData:
-+
-+1: .word 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee
-+ .word 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, ( 3f- 4f-4)
-+ .word 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, ( 3f- 4f-4)
-+ .word 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, ( 3f- 4f-4)
-+ .word 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, ( 4f- 4f-4)
-+ .word 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, ( 5f- 9f-4)
-+ .word 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, ( 6f- 9f-4)
-+ .word 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, ( 7f- 9f-4)
-+ .word 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, ( 9f- 9f-4)
-+ .word 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, (10f-14f-4)
-+ .word 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, (11f-14f-4)
-+ .word 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, (12f-14f-4)
-+ .word 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, (14f-14f-4)
-+ .word 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, (15f-19f-4)
-+ .word 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, (16f-19f-4)
-+ .word 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391, (17f-19f-4)
-+ .word 0x6e4120A9, 0x20657264, 0x7543634d, 0x00796472, (19f-19f-4)
-+
-+.align 2
-+__MD5Transform:
-+
-+ cmp r2, #0
-+ moveq pc, lr @ return if (repeat == 0)
-+ stmdb sp!, { r0, r2, r4 - r11, lr } @ stack 'buf', 'repeat' and all callee saved registers
-+ ldmia r0, { r2 - r5 } @ r2 = a, r3 = b, r4 = c, r5 = d
-+2: adr r0, 1b @ r0 = base address of MD5MagicData
-+ ldmia r0!, { r6 - r9 } @ load first 4 elements from MD5MagicData
-+3: ldmia r1!, { r10 - r12, lr } @ r10 = in[i], r11 = in[i+1], r12 = in[i+2], lr = in[i+3]
-+
-+ add r10, r10, r6 @ r10 = in[i] + MD5MagicData[i]
-+ eor r6, r4, r5 @ r6 = (c ^ d)
-+ and r6, r6, r3 @ r6 = ((c ^ d) & b)
-+ eor r6, r6, r5 @ r6 = (((c ^ d) & b) ^ d)
-+ add r2, r2, r6 @ a = (((c ^ d) & b) ^ d) + a
-+ add r2, r2, r10 @ a = (((c ^ d) & b) ^ d) + a + (in[i] + MD5MagicData[i])
-+ add r2, r3, r2, ROR #(32 - 7) @ a = b + (a rotated left by 7 places)
-+
-+ add r11, r11, r7 @ r11 = in[i+1] + MD5MagicData[i+1]
-+ eor r7, r3, r4 @ r7 = (b ^ c)
-+ and r7, r7, r2 @ r7 = ((b ^ c) & a)
-+ eor r7, r7, r4 @ r7 = (((b ^ c) & a) ^ c)
-+ add r5, r5, r7 @ d = (((b ^ c) & a) ^ c) + d
-+ add r5, r5, r11 @ d = (((b ^ c) & a) ^ c) + d + (in[i+1] + MD5MagicData[i+1])
-+ add r5, r2, r5, ROR #(32 - 12) @ d = a + (d rotated left by 12 places)
-+
-+ add r12, r12, r8 @ r12 = in[i+2] + MD5MagicData[i+2]
-+ eor r8, r2, r3 @ r8 = (a ^ b)
-+ and r8, r8, r5 @ r8 = ((a ^ b) & d)
-+ eor r8, r8, r3 @ r8 = (((a ^ b) & d) ^ b)
-+ add r4, r4, r8 @ c = (((a ^ b) & d) ^ b) + c
-+ add r4, r4, r12 @ c = (((a ^ b) & d) ^ b) + c + (in[i+2] + MD5MagicData[i+2])
-+ add r4, r5, r4, ROR #(32 - 17) @ c = d + (c rotated left by 17 places)
-+
-+ add lr, lr, r9 @ lr = in[i+3] + MD5MagicData[i+3]
-+ eor r9, r5, r2 @ r9 = (d ^ a)
-+ and r9, r9, r4 @ r9 = ((d ^ a) & c)
-+ eor r9, r9, r2 @ r9 = (((d ^ a) & c) ^ a)
-+ add r3, r3, r9 @ b = (((d ^ a) & c) ^ a) + b
-+ add r3, r3, lr @ b = (((d ^ a) & c) ^ a) + b + (in[i+3] + MD5MagicData[i+3])
-+ add r3, r4, r3, ROR #(32 - 22) @ b = c + (b rotated left by 22 places)
-+
-+ ldmia r0!, { r6 - r10 } @ load next 4 elements from MD5MagicData
-+ add pc, pc, r10 @ and branch to next state
-+
-+4: ldr r10, [r1, #-(15*4)] @ r10 = in[ 1]
-+ ldr r11, [r1, #-(10*4)] @ r11 = in[ 6]
-+ ldr r12, [r1, #-( 5*4)] @ r12 = in[11]
-+ ldr lr, [r1, #-(16*4)] @ lr = in[ 0]
-+ b 8f
-+5: ldr r10, [r1, #-(11*4)] @ r10 = in[ 5]
-+ ldr r11, [r1, #-( 6*4)] @ r11 = in[10]
-+ ldr r12, [r1, #-( 1*4)] @ r12 = in[15]
-+ ldr lr, [r1, #-(12*4)] @ lr = in[ 4]
-+ b 8f
-+6: ldr r10, [r1, #-( 7*4)] @ r10 = in[ 9]
-+ ldr r11, [r1, #-( 2*4)] @ r11 = in[14]
-+ ldr r12, [r1, #-(13*4)] @ r12 = in[ 3]
-+ ldr lr, [r1, #-( 8*4)] @ lr = in[ 8]
-+ b 8f
-+7: ldr r10, [r1, #-( 3*4)] @ r10 = in[13]
-+ ldr r11, [r1, #-(14*4)] @ r11 = in[ 2]
-+ ldr r12, [r1, #-( 9*4)] @ r12 = in[ 7]
-+ ldr lr, [r1, #-( 4*4)] @ lr = in[12]
-+
-+8: add r10, r10, r6 @ r10 = in[x] + MD5MagicData[i]
-+ eor r6, r3, r4 @ r6 = (b ^ c)
-+ and r6, r6, r5 @ r6 = ((b ^ c) & d)
-+ eor r6, r6, r4 @ r6 = (((b ^ c) & d) ^ c)
-+ add r2, r2, r6 @ a = (((b ^ c) & d) ^ c) + a
-+ add r2, r2, r10 @ a = (((b ^ c) & d) ^ c) + a + (in[x] + MD5MagicData[i])
-+ add r2, r3, r2, ROR #(32 - 5) @ a = b + (a rotated left by 5 places)
-+
-+ add r11, r11, r7 @ r11 = in[x] + MD5MagicData[i+1]
-+ eor r7, r2, r3 @ r7 = (a ^ b)
-+ and r7, r7, r4 @ r7 = ((a ^ b) & c)
-+ eor r7, r7, r3 @ r7 = (((a ^ b) & c) ^ b)
-+ add r5, r5, r7 @ d = (((a ^ b) & c) ^ b) + d
-+ add r5, r5, r11 @ d = (((a ^ b) & c) ^ b) + d + (in[x] + MD5MagicData[i+1])
-+ add r5, r2, r5, ROR #(32 - 9) @ d = a + (d rotated left by 9 places)
-+
-+ add r12, r12, r8 @ r12 = in[x] + MD5MagicData[i+2]
-+ eor r8, r5, r2 @ r8 = (d ^ a)
-+ and r8, r8, r3 @ r8 = ((d ^ a) & b)
-+ eor r8, r8, r2 @ r8 = (((d ^ a) & b) ^ a)
-+ add r4, r4, r8 @ c = (((d ^ a) & b) ^ a) + c
-+ add r4, r4, r12 @ c = (((d ^ a) & b) ^ a) + c + (in[x] + MD5MagicData[i+2])
-+ add r4, r5, r4, ROR #(32 - 14) @ c = d + (c rotated left by 14 places)
-+
-+ add lr, lr, r9 @ lr = in[x] + MD5MagicData[i+3]
-+ eor r9, r4, r5 @ r9 = (c ^ d)
-+ and r9, r9, r2 @ r9 = ((c ^ d) & a)
-+ eor r9, r9, r5 @ r9 = (((c ^ d) & a) ^ d)
-+ add r3, r3, r9 @ b = (((c ^ d) & a) ^ d) + b
-+ add r3, r3, lr @ b = (((c ^ d) & a) ^ d) + b + (in[x] + MD5MagicData[i+3])
-+ add r3, r4, r3, ROR #(32 - 20) @ b = c + (b rotated left by 20 places)
-+
-+ ldmia r0!, { r6 - r10 } @ load next 4 elements from MD5MagicData
-+ add pc, pc, r10 @ and branch to next state
-+
-+9: ldr r10, [r1, #-(11*4)] @ r10 = in[ 5]
-+ ldr r11, [r1, #-( 8*4)] @ r11 = in[ 8]
-+ ldr r12, [r1, #-( 5*4)] @ r12 = in[11]
-+ ldr lr, [r1, #-( 2*4)] @ lr = in[14]
-+ b 13f
-+10: ldr r10, [r1, #-(15*4)] @ r10 = in[ 1]
-+ ldr r11, [r1, #-(12*4)] @ r11 = in[ 4]
-+ ldr r12, [r1, #-( 9*4)] @ r12 = in[ 7]
-+ ldr lr, [r1, #-( 6*4)] @ lr = in[10]
-+ b 13f
-+11: ldr r10, [r1, #-( 3*4)] @ r10 = in[13]
-+ ldr r11, [r1, #-(16*4)] @ r11 = in[ 0]
-+ ldr r12, [r1, #-(13*4)] @ r12 = in[ 3]
-+ ldr lr, [r1, #-(10*4)] @ lr = in[ 6]
-+ b 13f
-+12: ldr r10, [r1, #-( 7*4)] @ r10 = in[ 9]
-+ ldr r11, [r1, #-( 4*4)] @ r11 = in[12]
-+ ldr r12, [r1, #-( 1*4)] @ r12 = in[15]
-+ ldr lr, [r1, #-(14*4)] @ lr = in[ 2]
-+
-+13: add r10, r10, r6 @ r10 = in[x] + MD5MagicData[i]
-+ add r2, r2, r10 @ a += in[x] + MD5MagicData[i]
-+ eor r6, r3, r4 @ r6 = (b ^ c)
-+ eor r10, r6, r5 @ r10 = (b ^ c ^ d)
-+ add r2, r2, r10 @ a += (b ^ c ^ d)
-+ add r2, r3, r2, ROR #(32 - 4) @ a = b + (a rotated left by 4 places)
-+
-+ add r11, r11, r7 @ r11 = in[x] + MD5MagicData[i+1]
-+ eor r7, r2, r6 @ r7 = (a ^ b ^ c)
-+ add r5, r5, r7 @ d = (a ^ b ^ c) + d
-+ add r5, r5, r11 @ d = (a ^ b ^ c) + d + (in[x] + MD5MagicData[i+1])
-+ add r5, r2, r5, ROR #(32 - 11) @ d = a + (d rotated left by 11 places)
-+
-+ add r12, r12, r8 @ r12 = in[x] + MD5MagicData[i+2]
-+ add r4, r4, r12 @ c += in[x] + MD5MagicData[i+2]
-+ eor r8, r5, r2 @ r8 = (d ^ a)
-+ eor r12, r8, r3 @ r12 = (d ^ a ^ b)
-+ add r4, r4, r12 @ c += (d ^ a ^ b)
-+ add r4, r5, r4, ROR #(32 - 16) @ c = d + (c rotated left by 16 places)
-+
-+ add lr, lr, r9 @ lr = in[x] + MD5MagicData[i+3]
-+ eor r9, r4, r8 @ r9 = (c ^ d ^ a)
-+ add r3, r3, r9 @ b = (c ^ d ^ a) + b
-+ add r3, r3, lr @ b = (c ^ d ^ a) + b + (in[x] + MD5MagicData[i+3])
-+ add r3, r4, r3, ROR #(32 - 23) @ b = c + (b rotated left by 23 places)
-+
-+ ldmia r0!, { r6 - r10 } @ load next 4 elements from MD5MagicData
-+ add pc, pc, r10 @ and branch to next state
-+
-+14: ldr r10, [r1, #-(16*4)] @ r10 = in[ 0]
-+ ldr r11, [r1, #-( 9*4)] @ r11 = in[ 7]
-+ ldr r12, [r1, #-( 2*4)] @ r12 = in[14]
-+ ldr lr, [r1, #-(11*4)] @ lr = in[ 5]
-+ b 18f
-+15: ldr r10, [r1, #-( 4*4)] @ r10 = in[12]
-+ ldr r11, [r1, #-(13*4)] @ r11 = in[ 3]
-+ ldr r12, [r1, #-( 6*4)] @ r12 = in[10]
-+ ldr lr, [r1, #-(15*4)] @ lr = in[ 1]
-+ b 18f
-+16: ldr r10, [r1, #-( 8*4)] @ r10 = in[ 8]
-+ ldr r11, [r1, #-( 1*4)] @ r11 = in[15]
-+ ldr r12, [r1, #-(10*4)] @ r12 = in[ 6]
-+ ldr lr, [r1, #-( 3*4)] @ lr = in[13]
-+ b 18f
-+17: ldr r10, [r1, #-(12*4)] @ r10 = in[ 4]
-+ ldr r11, [r1, #-( 5*4)] @ r11 = in[11]
-+ ldr r12, [r1, #-(14*4)] @ r12 = in[ 2]
-+ ldr lr, [r1, #-( 7*4)] @ lr = in[ 9]
-+
-+18: add r10, r10, r6 @ r10 = in[x] + MD5MagicData[i]
-+ add r2, r2, r10 @ a += in[x] + MD5MagicData[i]
-+ mvn r6, r5 @ r6 = ( ~d)
-+ orr r6, r6, r3 @ r6 = (b | ~d)
-+ eor r6, r6, r4 @ r6 = (c ^ (b | ~d))
-+ add r2, r2, r6 @ a += (c ^ (b | ~d))
-+ add r2, r3, r2, ROR #(32 - 6) @ a = b + (a rotated left by 6 places)
-+
-+ add r11, r11, r7 @ r11 = in[x] + MD5MagicData[i]
-+ add r5, r5, r11 @ d += in[x] + MD5MagicData[i]
-+ mvn r7, r4 @ r7 = ( ~c)
-+ orr r7, r7, r2 @ r7 = (a | ~c)
-+ eor r7, r7, r3 @ r7 = (b ^ (a | ~c))
-+ add r5, r5, r7 @ d += (b ^ (a | ~c))
-+ add r5, r2, r5, ROR #(32 - 10) @ d = a + (d rotated left by 10 places)
-+
-+ add r12, r12, r8 @ r12 = in[x] + MD5MagicData[i]
-+ add r4, r4, r12 @ c += in[x] + MD5MagicData[i]
-+ mvn r8, r3 @ r8 = ( ~b)
-+ orr r8, r8, r5 @ r8 = (d | ~b)
-+ eor r8, r8, r2 @ r8 = (a ^ (d | ~b))
-+ add r4, r4, r8 @ c += (a ^ (d | ~b))
-+ add r4, r5, r4, ROR #(32 - 15) @ c = d + (c rotated left by 15 places)
-+
-+ add lr, lr, r9 @ lr = in[x] + MD5MagicData[i]
-+ add r3, r3, lr @ b += in[x] + MD5MagicData[i]
-+ mvn r9, r2 @ r9 = ( ~a)
-+ orr r9, r9, r4 @ r9 = (c | ~a)
-+ eor r9, r9, r5 @ r9 = (d ^ (c | ~a))
-+ add r3, r3, r9 @ b += (d ^ (c | ~a))
-+ add r3, r4, r3, ROR #(32 - 21) @ b = c + (b rotated left by 21 places)
-+
-+ ldmia r0!, { r6 - r10 } @ load next 4 elements from MD5MagicData
-+ add pc, pc, r10 @ and branch to next state
-+
-+19: ldmia sp, { r0, r10 } @ fetch 'buf' and 'repeat' from the stack
-+ ldmia r0, { r6 - r9 } @ r6 = buf[0], r7 = buf[1], r8 = buf[2], r9 = buf[3] (original values..)
-+ subs r10, r10, #1
-+ strne r10, [sp, #4]
-+ add r2, r6, r2
-+ add r3, r7, r3
-+ add r4, r8, r4
-+ add r5, r9, r5
-+ stmia r0, { r2 - r5 }
-+ bne 2b
-+ ldmia sp!, { r0, r2, r4 - r11, pc } @ restore all callee saved registers and return
-+
-+
-+ @ --
-+ @ static void __UnalignedMD5Transform (uint32_t *buf, const uint8_t *in, int repeat);
-+ @ --
-+
-+__UnalignedMD5Transform:
-+
-+ stmdb sp!, { r4 - r7, lr }
-+ movs r4, r2, lsl #6 @ r4 = (repeat * 64)
-+ ldmeqia sp!, { r4 - r7, pc } @ if ((repeat * 64) == 0) return;
-+ mov r5, r0 @ r5 = state
-+ mov r6, r1 @ r6 = in
-+ sub sp, sp, #256 @ create 256 byte temp buffer
-+1: cmp r4, #256
-+ mov r0, sp
-+ movcc r7, r4
-+ movcs r7, #256 @ r7 = (blockCount * 64) = min((repeat * 64), (4 * 64))
-+ mov r1, r6
-+ mov r2, r7
-+ bl memcpy @ memcpy (blockBuffer, in, (blockCount * 64));
-+ mov r0, r5
-+ mov r1, sp
-+ mov r2, r7, lsr #6
-+ bl __MD5Transform @ __MD5Transform (state, blockBuffer, blockCount);
-+ subs r4, r4, #256 @ (repeat * 64) -= (4 * 64);
-+ add r6, r6, #256 @ in += (4 * 64);
-+ bgt 1b @ loop while (repeat > 0)
-+ add sp, sp, #256 @ return temp buffer to stack
-+ ldmia sp!, { r4 - r7, pc } @ return
-+
-+
-+#endif /* __BYTE_ORDER == __LITTLE_ENDIAN */
-+
-+
-diff -urN -x .git dietlibc-0.33/arm/mmap.S dietlibc/arm/mmap.S
---- dietlibc-0.33/arm/mmap.S 2008-12-10 20:00:58.000000000 +0000
-+++ dietlibc/arm/mmap.S 2015-01-01 12:14:43.454938895 +0000
-@@ -1,3 +1,5 @@
-+#include "arm-features.h"
-+
- #include <errno.h>
- #include "syscalls.h"
-
-@@ -28,7 +30,7 @@
- ldr r4, [sp], #4
- ldr r5, [sp], #4
- cmn r0, #4096
-- mov pc, lr @ return
-+ RET
-
- #else
-
-diff -urN -x .git dietlibc-0.33/arm/setjmp.S dietlibc/arm/setjmp.S
---- dietlibc-0.33/arm/setjmp.S 2008-12-10 20:00:58.000000000 +0000
-+++ dietlibc/arm/setjmp.S 2015-01-01 12:14:43.454938895 +0000
-@@ -1,17 +1,41 @@
--.text
--.weak setjmp
--setjmp:
--.global __setjmp
--__setjmp:
-+#include "arm-features.h"
-+
-+FUNC_START_WEAK setjmp
-+FUNC_START __setjmp
- mov r1, #0
--.global __sigsetjmp
--__sigsetjmp:
--.weak sigsetjmp
--sigsetjmp:
--#ifndef __SOFTFP__
-- sfm f4, 4, [r0], #48
-+FUNC_END __setjmp
-+FUNC_END setjmp
-+
-+FUNC_START_WEAK sigsetjmp
-+FUNC_START __sigsetjmp
-+
-+#ifdef DIET_HAVE_COPROC_REGS
-+ /* we have to work on a copy of 'r0' (jmpbuf *) */
-+ mov ip, r0
-+#endif
-+
-+#ifndef __SOFTFP__
-+# if __ARM_ARCH__ >= 7
-+ vstmia ip!, {d0-d15}
-+# ifdef __ARM_NEON__
-+ vstmia ip!, {d16-d31}
-+# endif
-+# else
-+ sfm f4, 4, [ip]!
-+# endif
-+#endif
-+
-+#ifdef __IWMMXT__
-+# warning "setjmp will not save iwmmxt coprocessor registers"
- #endif
-+
-+#ifndef DIET_HAVE_COPROC_REGS
- stmia r0, {r4-r11, sp, lr}
-- sub r0, r0, #48
-- b __sigjmp_save
-
-+#else
-+ stmia ip!, {r4-r11, sp, lr}
-+#endif
-+
-+ b __sigjmp_save
-+FUNC_END __sigsetjmp
-+FUNC_END sigsetjmp
-diff -urN -x .git dietlibc-0.33/arm/start.S dietlibc/arm/start.S
---- dietlibc-0.33/arm/start.S 2012-01-24 18:24:24.000000000 +0000
-+++ dietlibc/arm/start.S 2015-01-01 12:14:43.454938895 +0000
-@@ -1,23 +1,10 @@
--
- #include "dietfeatures.h"
- #include "syscalls.h"
--
-- .text
--#ifdef __ARM_EABI__
-- .align 4
--#else
-- .align 2
--#endif
--
-- .global _start
-- .weak exit
-- .global _exit
--
-+#include "arm-features.h"
-
- #ifdef __ARM_EABI__
-
--_start:
--
-+FUNC_START _start
- mov fp, #0 @ clear the frame pointer
- ldr a1, [sp] @ argc
- add a2, sp, #4 @ argv
-@@ -25,27 +12,40 @@
- add a3, a2, a1, lsl #2 @ &argv[argc]
- add a3, a3, #4 @ envp
- str a3, [ip, #0] @ environ = envp
-- bl main
--
-+
-+#ifdef WANT_ELFINFO
-+ mov r6, a3 @ work on a copy of a3 so that common
-+ @ 'main(argc, argv, envp)' function
-+ @ stays valid
-+1: ldr r5, [r6], #4 @ load *envp and increment it
-+ cmp r5, #0 @ read value==0?
-+ bne 1b
-+ str r6, [ip, #4] @ __elfinfo = envp
-+#endif
-+
-+ bl CALL_IN_STARTCODE
-+
- @
- @ The exit status from main() is already in r0.
- @ We need to branch to 'exit' in case we have linked with 'atexit'.
- @
- bl exit
-+FUNC_END _start
-
--exit:
--_exit:
--
-+FUNC_START _exit
-+FUNC_START_WEAK exit
- mov r7, #__NR_exit
- swi 0 @ never returns.
-
-+ .align 2
- .L3: .word environ
-
--
--#else
-+FUNC_END exit
-+FUNC_END _exit
-+
-+#else
-
--
--_start:
-+FUNC_START _start
-
- #ifdef WANT_DYNAMIC
- mov a4, a1 @ save dynamic ld.so _fini
-@@ -59,11 +59,25 @@
- #ifdef __DYN_LIB
- ldr sl, .L4
- 1: add sl, pc, sl
-- str a3, [sl, ip] @ environ = envp
-+ str a3, [ip, sl]! @ environ = envp; ip = GOT(environ)
- #else
- str a3, [ip, #0] @ environ = envp
- #endif
-
-+#ifdef WANT_ELFINFO
-+ mov r6, a3 @ work on a copy of a3 so that common
-+ @ 'main(argc, argv, envp)' function
-+ @ stays valid
-+1: ldr r5, [r6], #4 @ load *envp and increment it
-+ cmp r5, #0 @ read value==0?
-+ bne 1b
-+#ifdef __DYN_LIB
-+ str r6, [ip, sl] @ __elfinfo = envp
-+#else
-+ str r6, [ip, #4] @ __elfinfo = envp
-+#endif
-+#endif
-+
- #ifdef PROFILING
- stmdb sp!, { r0 - r3 }
- ldr r0, .L5
-@@ -83,18 +97,20 @@
- @ We need to branch to 'exit' in case we have linked with 'atexit'.
- @
- bl exit
-+FUNC_END _start
-
--exit:
--_exit:
--
-+FUNC_START _exit
-+FUNC_START_WEAK exit
- #ifdef PROFILING
- mov r4, r0 @ save a copy of exit status
- bl _stop_monitor
- mov r0, r4
- #endif
- swi $__NR_exit @ never returns.
-+FUNC_END exit
-+FUNC_END _exit
-
--
-+ .align 2
- #ifdef __DYN_LIB
- .L3: .word environ(GOT)
- .L4: .word _GLOBAL_OFFSET_TABLE_-(1b+8)
-diff -urN -x .git dietlibc-0.33/arm/strcpy.S dietlibc/arm/strcpy.S
---- dietlibc-0.33/arm/strcpy.S 2005-08-05 00:29:18.000000000 +0000
-+++ dietlibc/arm/strcpy.S 2015-01-01 12:14:43.454938895 +0000
-@@ -1,10 +1,7 @@
- #include "dietfeatures.h"
-+#include "arm-features.h"
-
--.text
-- .align 2
-- .global strcpy
--
--strcpy:
-+FUNC_START strcpy
- #ifndef WANT_SMALL_STRING_ROUTINES
- mov ip, r0
- ands r2, r1, #3
-@@ -61,6 +58,5 @@
- ldrneb r2, [r1], #1
- #endif
- bne .Lloop
-- mov pc, lr
--.Lfe1:
-- .size strcpy,.Lfe1-strcpy
-+ RET
-+FUNC_END strcpy
-diff -urN -x .git dietlibc-0.33/arm/strlen.S dietlibc/arm/strlen.S
---- dietlibc-0.33/arm/strlen.S 2005-08-05 00:29:18.000000000 +0000
-+++ dietlibc/arm/strlen.S 2015-01-01 12:14:43.454938895 +0000
-@@ -1,12 +1,7 @@
- #include "dietfeatures.h"
-+#include "arm-features.h"
-
-- .text
-- .align 2
--
-- .global strlen
--
--strlen:
--
-+FUNC_START strlen
- #if 0
- teq a1, #0 @ is string pointer NULL ??
- moveq pc, lr @ if so, return 0
-@@ -61,12 +56,10 @@
- sub a1, a1, a2
- #endif
-
-- mov pc, lr
-+ RET
-
- #ifndef WANT_SMALL_STRING_ROUTINES
- .Lmagic:
- .word 0x01010101
- #endif
--
--.Lstrlen:
-- .size strlen,.Lstrlen-strlen
-+FUNC_END strlen
-diff -urN -x .git dietlibc-0.33/arm/syscalls.h dietlibc/arm/syscalls.h
---- dietlibc-0.33/arm/syscalls.h 2012-01-24 18:24:24.000000000 +0000
-+++ dietlibc/arm/syscalls.h 2015-01-01 12:14:43.454938895 +0000
-@@ -365,6 +365,38 @@
- #define __NR_fallocate (__NR_SYSCALL_BASE+352)
- #define __NR_timerfd_settime (__NR_SYSCALL_BASE+353)
- #define __NR_timerfd_gettime (__NR_SYSCALL_BASE+354)
-+#define __NR_signalfd4 (__NR_SYSCALL_BASE+355)
-+#define __NR_eventfd2 (__NR_SYSCALL_BASE+356)
-+#define __NR_epoll_create1 (__NR_SYSCALL_BASE+357)
-+#define __NR_dup3 (__NR_SYSCALL_BASE+358)
-+#define __NR_pipe2 (__NR_SYSCALL_BASE+359)
-+#define __NR_inotify_init1 (__NR_SYSCALL_BASE+360)
-+#define __NR_preadv (__NR_SYSCALL_BASE+361)
-+#define __NR_pwritev (__NR_SYSCALL_BASE+362)
-+#define __NR_rt_tgsigqueueinfo (__NR_SYSCALL_BASE+363)
-+#define __NR_perf_event_open (__NR_SYSCALL_BASE+364)
-+#define __NR_recvmmsg (__NR_SYSCALL_BASE+365)
-+#define __NR_accept4 (__NR_SYSCALL_BASE+366)
-+#define __NR_fanotify_init (__NR_SYSCALL_BASE+367)
-+#define __NR_fanotify_mark (__NR_SYSCALL_BASE+368)
-+#define __NR_prlimit64 (__NR_SYSCALL_BASE+369)
-+#define __NR_name_to_handle_at (__NR_SYSCALL_BASE+370)
-+#define __NR_open_by_handle_at (__NR_SYSCALL_BASE+371)
-+#define __NR_clock_adjtime (__NR_SYSCALL_BASE+372)
-+#define __NR_syncfs (__NR_SYSCALL_BASE+373)
-+#define __NR_sendmmsg (__NR_SYSCALL_BASE+374)
-+#define __NR_setns (__NR_SYSCALL_BASE+375)
-+#define __NR_process_vm_readv (__NR_SYSCALL_BASE+376)
-+#define __NR_process_vm_writev (__NR_SYSCALL_BASE+377)
-+#define __NR_kcmp (__NR_SYSCALL_BASE+378)
-+#define __NR_finit_module (__NR_SYSCALL_BASE+379)
-+#define __NR_sched_setattr (__NR_SYSCALL_BASE+380)
-+#define __NR_sched_getattr (__NR_SYSCALL_BASE+381)
-+#define __NR_renameat2 (__NR_SYSCALL_BASE+382)
-+#define __NR_seccomp (__NR_SYSCALL_BASE+383)
-+#define __NR_getrandom (__NR_SYSCALL_BASE+384)
-+#define __NR_memfd_create (__NR_SYSCALL_BASE+385)
-+
-
- /*
- * The following SWIs are ARM private.
-@@ -700,9 +732,9 @@
- #define __ARGS_getpeername 0
- #define __ARGS_socketpair 0
- #define __ARGS_send 0
--#define __ARGS_sendto 0
-+#define __ARGS_sendto 6
- #define __ARGS_recv 0
--#define __ARGS_recvfrom 0
-+#define __ARGS_recvfrom 6
- #define __ARGS_shutdown 0
- #define __ARGS_setsockopt 0
- #define __ARGS_getsockopt 0
-@@ -768,73 +800,59 @@
- #define __ARGS_timerfd_settime 0
- #define __ARGS_timerfd_gettime 0
-
-+#define __ARGS_signalfd4 0
-+#define __ARGS_eventfd2 0
-+#define __ARGS_epoll_create1 0
-+#define __ARGS_dup3 0
-+#define __ARGS_pipe2 0
-+#define __ARGS_inotify_init1 0
-+#define __ARGS_preadv 0
-+#define __ARGS_pwritev 0
-+#define __ARGS_rt_tgsigqueueinfo 0
-+#define __ARGS_perf_event_open 1
-+#define __ARGS_recvmmsg 1
-+#define __ARGS_accept4 0
-+#define __ARGS_fanotify_init 0
-+#define __ARGS_fanotify_mark 1
-+#define __ARGS_prlimit64 0
-+#define __ARGS_name_to_handle_at 1
-+#define __ARGS_open_by_handle_at 0
-+#define __ARGS_clock_adjtime 0
-+#define __ARGS_syncfs 0
-+#define __ARGS_sendmmsg 0
-+#define __ARGS_setns 0
-+#define __ARGS_process_vm_readv 1
-+#define __ARGS_process_vm_writev 1
-+#define __ARGS_kcmp 1
-+#define __ARGS_finit_module 0
-+
-
- #ifdef __ASSEMBLER__
-
--#ifdef __ARM_EABI__
-+#include "arm-features.h"
-
- #define syscall_weak(name,wsym,sym) __syscall_weak __NR_##name, wsym, sym, __ARGS_##name
- .macro __syscall_weak name wsym sym typ
--.text
--.type \wsym,function
--.weak \wsym
--\wsym:
--.type \sym,function
--.global \sym
--\sym:
-- stmfd sp!,{r4,r5,r7,lr}
-- ldr r4, [sp,#16]
-- ldr r5, [sp,#20]
-- ldr r7, =\name
-- swi 0
-- b __unified_syscall
-+FUNC_START_WEAK \wsym
-+__syscall \name, \sym, \typ
-+FUNC_END \wsym
- .endm
-
-+#ifdef __ARM_EABI__
-
- #define syscall(name,sym) __syscall __NR_##name, sym, __ARGS_##name
- .macro __syscall name sym typ
--.text
--.type \sym,function
--.global \sym
--\sym:
-- stmfd sp!,{r4,r5,r7,lr}
-- ldr r4, [sp,#16]
-- ldr r5, [sp,#20]
-- ldr r7, =\name
-- swi 0
-- b __unified_syscall
-+FUNC_START \sym
-+ ldr ip, =\name
-+ b __unified_syscall_swi
-+FUNC_END \sym
- .endm
-
- #else
-
--#define syscall_weak(name,wsym,sym) __syscall_weak $__NR_##name, wsym, sym, __ARGS_##name
--.macro __syscall_weak name wsym sym typ
--.text
--.type \wsym,function
--.weak \wsym
--\wsym:
--.type \sym,function
--.global \sym
--\sym:
--.ifgt \typ
-- mov ip, sp
-- stmfd sp!,{r4, r5, r6}
-- ldmia ip, {r4, r5, r6}
--.endif
-- swi \name
--.ifgt \typ
-- b __unified_syscall4
--.else
-- b __unified_syscall
--.endif
--.endm
--
- #define syscall(name,sym) __syscall $__NR_##name, sym, __ARGS_##name
- .macro __syscall name sym typ
--.text
--.type \sym,function
--.global \sym
--\sym:
-+FUNC_START \sym
- .ifgt \typ
- mov ip, sp
- stmfd sp!,{r4, r5, r6}
-@@ -846,6 +864,7 @@
- .else
- b __unified_syscall
- .endif
-+FUNC_END \sym
- .endm
-
- #endif
-diff -urN -x .git dietlibc-0.33/arm/__testandset.S dietlibc/arm/__testandset.S
---- dietlibc-0.33/arm/__testandset.S 2001-03-09 19:30:52.000000000 +0000
-+++ dietlibc/arm/__testandset.S 2015-01-01 12:14:43.454938895 +0000
-@@ -1,7 +1,15 @@
--.text
--.global __testandset
--__testandset:
-+#include "arm-features.h"
-+
-+FUNC_START __testandset
- mov r2, r0
- mov r1, #1
-+# if __ARM_ARCH__ < 6
- swp r0, r1, [r2]
-- mov pc, lr
-+# else
-+1: ldrex r0, [r2]
-+ strex r3, r1, [r2]
-+ cmp r3, #0
-+ bne 1b
-+# endif
-+ RET
-+FUNC_END __testandset
-diff -urN -x .git dietlibc-0.33/arm/unified.S dietlibc/arm/unified.S
---- dietlibc-0.33/arm/unified.S 2012-01-24 18:24:24.000000000 +0000
-+++ dietlibc/arm/unified.S 2015-01-01 12:14:43.454938895 +0000
-@@ -1,22 +1,29 @@
--
- #include <dietfeatures.h>
--
-- .text
--#ifdef __ARM_EABI__
-- .align 4
--#else
-- .align 2
--#endif
-- .global __unified_syscall
-- .global __unified_syscall4
--
-+#include "arm-features.h"
-
- #ifdef __ARM_EABI__
-
--__unified_syscall4:
--__unified_syscall:
--
-+/* expects:
-+ * r0-r3 ... syscall arguments 0-3
-+ * ip ... syscall number
-+ */
-+FUNC_START __unified_syscall_swi
-+ .hidden __unified_syscall_swi
-+ stmfd sp!,{r4,r5,r7,lr}
-+ mov r7, ip
-+ LOAD_ARG4_5
-+ swi 0
-+ /* fallthrough to __unified4_syscall */
-+FUNC_END __unified_syscall_swi
-+
-+/* expects:
-+ * r0 ... syscall return value
-+ * original r4-r7 + lr on stack
-+ */
-+FUNC_START __unified_syscall
-+ .hidden __unified_syscall
- cmn r0, #4096
-+#ifndef WANT_THREAD_SAFE
- rsbcs r2, r0, #0
- ldrcs r3, 1f
- mvncs r0, #0
-@@ -25,17 +32,28 @@
- .balign 4
- 1:
- .word errno
--
-+#else
-+ bcc 1f
-+ rsb r4, r0, #0
-+ bl __errno_location
-+ str r4, [r0]
-+ mvn r0, #0
-+1:
-+ ldmfd sp!,{r4,r5,r7,pc}
-+#endif
-+FUNC_END __unified_syscall
-+
- /* here we go and "reuse" the return for weak-void functions */
- #include "dietuglyweaks.h"
-
-- mov pc, lr @ return
-+ RET
-
--#else
--
--__unified_syscall4:
-+#else
-+
-+FUNC_START __unified_syscall4
- ldmia sp!, {r4, r5, r6}
--__unified_syscall:
-+
-+FUNC_START __unified_syscall
- cmn r0, #4096
- movcc pc, lr @ return value comes direct from kernel.
-
-@@ -53,10 +71,13 @@
- /* here we go and "reuse" the return for weak-void functions */
- #include "dietuglyweaks.h"
-
-- mov pc, lr @ return
-+ RET
-
- #ifndef WANT_THREAD_SAFE
-+.align 2
- .L0: .long errno
- #endif
-+FUNC_END __unified_syscall
-+FUNC_END __unified_syscall4
-
- #endif
-diff -urN -x .git dietlibc-0.33/arm/waitpid.S dietlibc/arm/waitpid.S
---- dietlibc-0.33/arm/waitpid.S 2008-12-10 20:00:58.000000000 +0000
-+++ dietlibc/arm/waitpid.S 2015-01-01 12:14:43.454938895 +0000
-@@ -1,15 +1,8 @@
--.text
--#ifdef __ARM_EABI__
--.align 4
--#else
--.align 2
--#endif
--.weak waitpid
--.type waitpid, %function
--waitpid:
--.global __libc_waitpid
--.type __libc_waitpid, %function
--__libc_waitpid:
-- mov r3, #0
-- b wait4
-- .size waitpid, .-waitpid
-+#include "arm-features.h"
-+
-+FUNC_START_WEAK waitpid
-+FUNC_START __libc_waitpid
-+ mov r3, #0
-+ b wait4
-+FUNC_END __libc_waitpid
-+FUNC_END waitpid
-diff -urN -x .git dietlibc-0.33/CHANGES dietlibc/CHANGES
---- dietlibc-0.33/CHANGES 2012-11-02 11:17:28.000000000 +0000
-+++ dietlibc/CHANGES 2015-01-01 12:14:43.451605563 +0000
-@@ -1,3 +1,19 @@
-+0.34:
-+ move stpcpy from libcompat to lib as it is now part of POSIX (Enrico Scholz)
-+ add linux/seccomp.h linux/prctl.h linux/audit.h linux/elf-em.h linux/filter.h
-+ SECURITY: make sure all assembler files mark the stack non-executable so
-+ the kernel can map the stack of the whole program as non-executable
-+ support compiling with clang (no cross compiling yet, and the resulting
-+ binary code is significantly larger than with gcc)
-+ implement experimental C11 threads
-+ fix fgets (Andreas Förster)
-+ add eventfd, inotify_init1, epoll_init1, accept4, recvmmsg, sendmmsg
-+ add dup3, fanotify_init, fanotify_mark, signalfd4, timerfd_settime
-+ add timerfd_gettime, setns, memfd_create, getrandom, syncfs
-+ add preadv, pwritev
-+ add getcontext, setcontext, makecontext, swapcontext (i386 and x86_64 only for now)
-+ add implementation of hsearch and friends
-+
- 0.33:
- first stab at getting TLS to work in actual threads
- use fs: to find current thread on x86_64
-diff -urN -x .git dietlibc-0.33/contrib/dnsd.c dietlibc/contrib/dnsd.c
---- dietlibc-0.33/contrib/dnsd.c 2010-09-25 17:03:25.000000000 +0000
-+++ dietlibc/contrib/dnsd.c 2015-01-01 12:14:43.458272230 +0000
-@@ -281,55 +281,54 @@
- }
-
- static void init_sockets(int* sock6,int* sock4,int port,char* v6ip,char* v4ip) {
-- int s4,s6;
-+ int _s4,_s6;
- int one=1;
- *sock6=-1; *sock4=-1;
-- s6=socket(PF_INET6,SOCK_DGRAM,IPPROTO_UDP);
-- s4=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
-- if (s4==-1 && s6==-1) {
-+ _s6=socket(PF_INET6,SOCK_DGRAM,IPPROTO_UDP);
-+ _s4=socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP);
-+ if (_s4==-1 && _s6==-1) {
- perror("socket");
- return;
- }
-- if (s6!=-1) {
-- setsockopt(s6,SOL_SOCKET,SO_REUSEADDR,&one,sizeof(one));
-+ if (_s6!=-1) {
-+ setsockopt(_s6,SOL_SOCKET,SO_REUSEADDR,&one,sizeof(one));
- memset(&sa6,0,sizeof(sa6));
- sa6.sin6_family=PF_INET6;
- sa6.sin6_port=htons(port);
-- if (bind(s6,(struct sockaddr*)&sa6,sizeof(struct sockaddr_in6))==-1) {
-+ if (bind(_s6,(struct sockaddr*)&sa6,sizeof(struct sockaddr_in6))==-1) {
- perror("bind IPv6");
-- close(s6);
-- s6=-1;
-+ close(_s6);
-+ _s6=-1;
- }
- }
-- if (s4!=-1) {
-- setsockopt(s4,SOL_SOCKET,SO_REUSEADDR,&one,sizeof(one));
-+ if (_s4!=-1) {
-+ setsockopt(_s4,SOL_SOCKET,SO_REUSEADDR,&one,sizeof(one));
- memset(&sa4,0,sizeof(sa4));
- sa4.sin_family=PF_INET;
- sa4.sin_port=htons(port);
-- if (bind(s4,(struct sockaddr*)&sa4,sizeof(struct sockaddr_in))==-1) {
-- if (errno!=EADDRINUSE || s6==-1)
-+ if (bind(_s4,(struct sockaddr*)&sa4,sizeof(struct sockaddr_in))==-1) {
-+ if (errno!=EADDRINUSE || _s6==-1)
- perror("bind IPv4");
-- close(s4);
-- s4=-1;
-+ close(_s4);
-+ _s4=-1;
- }
- }
-- if (s4==-1 && s6==-1) return;
-+ if (_s4==-1 && _s6==-1) return;
-
- {
- int val=255;
-- int one=1;
-- if (s6!=-1) {
-+ if (_s6!=-1) {
- struct ipv6_mreq opt;
-- setsockopt(s6,IPPROTO_IPV6,IPV6_UNICAST_HOPS,&val,sizeof(val));
-- setsockopt(s6,IPPROTO_IPV6,IPV6_MULTICAST_LOOP,&one,sizeof(one));
-+ setsockopt(_s6,IPPROTO_IPV6,IPV6_UNICAST_HOPS,&val,sizeof(val));
-+ setsockopt(_s6,IPPROTO_IPV6,IPV6_MULTICAST_LOOP,&one,sizeof(one));
- memcpy(&opt.ipv6mr_multiaddr,v6ip,16);
- opt.ipv6mr_interface=0;
-- setsockopt(s6,IPPROTO_IPV6,IPV6_ADD_MEMBERSHIP,&opt,sizeof opt);
-- setsockopt(s6,IPPROTO_IPV6,IPV6_PKTINFO,&one,sizeof one);
-+ setsockopt(_s6,IPPROTO_IPV6,IPV6_ADD_MEMBERSHIP,&opt,sizeof opt);
-+ setsockopt(_s6,IPPROTO_IPV6,IPV6_PKTINFO,&one,sizeof one);
- }
- {
- struct ip_mreq opt;
-- int s=(s4==-1?s6:s4);
-+ int s=(_s4==-1?_s6:_s4);
- setsockopt(s,SOL_IP,IP_TTL,&val,sizeof(val));
- memcpy(&opt.imr_multiaddr.s_addr,v4ip,4);
- opt.imr_interface.s_addr=0;
-@@ -338,8 +337,8 @@
- }
- }
-
-- *sock4=s4;
-- *sock6=s6;
-+ *sock4=_s4;
-+ *sock6=_s6;
- }
-
- int main() {
-diff -urN -x .git dietlibc-0.33/.cvsignore dietlibc/.cvsignore
---- dietlibc-0.33/.cvsignore 2007-03-09 13:42:12.000000000 +0000
-+++ dietlibc/.cvsignore 2015-01-01 12:14:43.451605563 +0000
-@@ -28,3 +28,5 @@
- bin-x86_64
- pic-x86_64
- cycles
-+include/errno_definition.h
-+bin-x32
-diff -urN -x .git dietlibc-0.33/diet.c dietlibc/diet.c
---- dietlibc-0.33/diet.c 2012-11-02 11:17:28.000000000 +0000
-+++ dietlibc/diet.c 2015-01-01 12:14:43.461605562 +0000
-@@ -25,10 +25,11 @@
- }
-
- static const char* Os[] = {
-- "i386","-Os","-mpreferred-stack-boundary=2",
-+ "i386","-Os","-mpreferred-stack-boundary=4",
- "-falign-functions=1","-falign-jumps=1",
- "-falign-loops=1","-fomit-frame-pointer",0,
- "x86_64","-Os",0,
-+ "x32","-Os",0,
- "sparc","-Os","-mcpu=supersparc",0,
- "sparc64","-Os","-m64","-mhard-quad-float",0,
- "alpha","-Os","-fomit-frame-pointer",0,
-@@ -41,7 +42,6 @@
- "s390x","-Os","-fomit-frame-pointer",0,
- "sh","-Os","-fomit-frame-pointer",0,
- "ia64","-Os","-fno-omit-frame-pointer",0,
-- "x86_64","-Os","-fstrict-aliasing","-momit-leaf-frame-pointer","-mfancy-math-387",0,
- 0};
-
- static void usage(void) {
-@@ -120,7 +120,6 @@
- } else break;
- } while (1);
- {
-- int i;
- m=0;
- for (i=1; i<argc; ++i) {
- if (!strcmp(argv[i],"-m32")) m=32; else
-@@ -144,6 +143,10 @@
- memmove(shortplatform,argv[1],(size_t)(tmp2-cc));
- platform[tmp2-cc+len]=0;
- if (shortplatform[0]=='i' && shortplatform[2]=='8' && shortplatform[3]=='6') shortplatform[1]='3';
-+ else if (strcmp(shortplatform, "powerpc") == 0)
-+ strcpy(shortplatform, "ppc");
-+ else if (strcmp(shortplatform, "powerpc64") == 0)
-+ strcpy(shortplatform, "ppc64");
- } else {
- #ifdef __sparc__
- #ifdef __arch64__
-@@ -193,15 +196,14 @@
- shortplatform="ia64";
- #endif
- {
-- char *tmp=platform+strlen(platform);
-- strcpy(tmp,shortplatform);
-- shortplatform=tmp;
-+ char *tmp4=platform+strlen(platform);
-+ strcpy(tmp4,shortplatform);
-+ shortplatform=tmp4;
- }
- }
- /* MIPS needs special handling. If argv contains -EL, change
- * platform name to mipsel */
- if (!strcmp(shortplatform,"mips")) {
-- int i;
- for (i=1; i<argc; ++i)
- if (!strcmp(argv[i],"-EL"))
- strcpy(shortplatform,"mipsel");
-@@ -328,7 +330,7 @@
- }
- if (mangleopts)
- if (argv[i][0]=='-' && (argv[i][1]=='O' || argv[i][1]=='f' ||
-- (argv[i][1]=='m' && argv[i][2]!='3' && argv[i][2]!='6'))) {
-+ (argv[i][1]=='m' && argv[i][2]!='3' && argv[i][2]!='6' && argv[i][2]!='x'))) {
- if (strcmp(argv[i],"-fpic") && strcmp(argv[i],"-fno-pic"))
- continue;
- }
-@@ -351,7 +353,7 @@
-
- {
- int fd;
-- char* tmp=getenv("HOME");
-+ tmp=getenv("HOME");
- if (tmp) {
- if (strlen(tmp)+strlen(cc)<900) {
- strcpy(manglebuf,tmp);
-@@ -362,7 +364,6 @@
- if ((fd=open(manglebuf,O_RDONLY))>=0) {
- int len=read(fd,manglebuf,1023);
- if (len>0) {
-- int i;
- manglebuf[len]=0;
- *dest++=manglebuf;
- for (i=1; i<len; ++i) {
-@@ -416,7 +417,6 @@
- #endif
- *dest=0;
- if (verbose) {
-- int i;
- for (i=0; newargv[i]; i++) {
- __write2(newargv[i]);
- __write2(" ");
-diff -urN -x .git dietlibc-0.33/dietdirent.h dietlibc/dietdirent.h
---- dietlibc-0.33/dietdirent.h 2002-07-03 20:33:37.000000000 +0000
-+++ dietlibc/dietdirent.h 2015-01-01 12:14:43.461605562 +0000
-@@ -1,8 +1,28 @@
- #include <sys/shm.h>
-
-+#include "dietpagesize.h"
-+
- struct __dirstream {
- int fd;
-- char buf[PAGE_SIZE-(sizeof (int)*3)];
- unsigned int num;
- unsigned int cur;
-+ unsigned char is_64;
-+ char buf[] __attribute__((__aligned__(8)));
- }; /* stream data from opendir() */
-+
-+struct linux_dirent {
-+ unsigned long d_ino;
-+ unsigned long d_off;
-+ unsigned short d_reclen;
-+ char d_name[1];
-+};
-+
-+struct linux_dirent64 {
-+ uint64_t d_ino;
-+ int64_t d_off;
-+ unsigned short d_reclen;
-+ unsigned char d_type;
-+ char d_name[0];
-+};
-+
-+#define __DIRSTREAM_BUF_SIZE (__DIET_PAGE_SIZE - offsetof(struct __dirstream, buf))
-diff -urN -x .git dietlibc-0.33/dietelfinfo.h dietlibc/dietelfinfo.h
---- dietlibc-0.33/dietelfinfo.h 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/dietelfinfo.h 2015-01-01 12:14:43.461605562 +0000
-@@ -0,0 +1,20 @@
-+#include "dietfeatures.h"
-+
-+#ifdef WANT_ELFINFO
-+#include <elf.h>
-+#include <endian.h>
-+#include <stdint.h>
-+
-+/* TODO: exported interface from <linux/elf.h> has been changed in 2.6.25 so
-+ * the 'elf_addr_t' type is not available anymore. Hence, derive it from
-+ * __WORDSIZE__. */
-+
-+#if __WORDSIZE == 64
-+typedef uint64_t __diet_elf_addr_t;
-+#elif __WORDSIZE == 32
-+typedef uint32_t __diet_elf_addr_t;
-+#endif
-+
-+__diet_elf_addr_t const * __get_elf_aux_value(unsigned int tag)
-+ __attribute__((__visibility__("hidden"),__const__)) __pure;
-+#endif
-diff -urN -x .git dietlibc-0.33/dietfeatures.h dietlibc/dietfeatures.h
---- dietlibc-0.33/dietfeatures.h 2012-11-02 11:17:28.000000000 +0000
-+++ dietlibc/dietfeatures.h 2015-01-01 12:14:43.461605562 +0000
-@@ -29,7 +29,7 @@
- #define WANT_TLS
-
- /* make the startcode, etc. dynamic aware ({con,de}structors) */
--/* #define WANT_DYNAMIC */
-+// #define WANT_DYNAMIC
-
- /* GDB support in the dynamic linker */
- #define WANT_LD_SO_GDB_SUPPORT
-@@ -142,6 +142,16 @@
- #define WANT_SSP
- #endif
-
-+/* Some platforms like x86_64, ppc* or mips do not have a fixed PAGE_SIZE.
-+ * Select WANT_DYN_PAGESIZE to detect the current PAGE_SIZE at runtime. Else,
-+ * define WANT_STATIC_PAGESIZE to a proper value (must be a power of 2)
-+ * matching the configured pagesize of the kernel where your binaries are
-+ * running on.
-+ *
-+ * Selecting WANT_DYN_PAGESIZE enlarges the startup code by around 1-3
-+ * instructions and might add an additional __elfinfo symbol */
-+#define WANT_DYN_PAGESIZE
-+/* #define WANT_STATIC_PAGESIZE 0x10000UL */
-
-
- /* stop uncommenting here ;-) */
-@@ -161,13 +171,6 @@
- #define WANT_SMALL_STRING_ROUTINES
- #endif
-
--#ifdef WANT_THREAD_SAFE
--#ifndef __ASSEMBLER__
--#define errno (*__errno_location())
--#define _REENTRANT
--#endif
--#endif
--
- #ifdef __DYN_LIB
- /* with shared libraries you MUST have a dynamic aware startcode */
- #ifndef WANT_DYNAMIC
-@@ -179,4 +182,12 @@
- #endif
- #endif
-
-+#if defined(__x86_64__) && defined(__ILP32__)
-+#undef WANT_LARGEFILE_BACKCOMPAT
-+#endif
-+
-+#ifdef WANT_DYN_PAGESIZE
-+#define WANT_ELFINFO
-+#endif
-+
- #endif
-diff -urN -x .git dietlibc-0.33/dietpagesize.h dietlibc/dietpagesize.h
---- dietlibc-0.33/dietpagesize.h 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/dietpagesize.h 2015-01-01 12:14:43.461605562 +0000
-@@ -0,0 +1,31 @@
-+#ifndef H_DIETLIBC_DIETPAGESIZE_H
-+#define H_DIETLIBC_DIETPAGESIZE_H
-+
-+#include <strings.h>
-+#include "dietfeatures.h"
-+
-+extern size_t __libc_getpagesize(void) __attribute__((__const__)) __pure;
-+
-+#if defined(WANT_STATIC_PAGESIZE)
-+# define __DIET_PAGE_SIZE_PREDEF (WANT_STATIC_PAGESIZE)
-+# define __DIET_PAGE_SHIFT_PREDEF (ffs(__DIET_PAGE_SIZE_PREDEF)-1)
-+#elif defined(__alpha__) || defined(__sparc__)
-+# define __DIET_PAGE_SIZE_PREDEF (8192UL)
-+# define __DIET_PAGE_SHIFT_PREDEF (13)
-+#elif defined(__powerpc64__)
-+# define __DIET_PAGE_SIZE_PREDEF (65536UL)
-+# define __DIET_PAGE_SHIFT_PREDEF (16)
-+#else
-+# define __DIET_PAGE_SIZE_PREDEF (4096UL)
-+# define __DIET_PAGE_SHIFT_PREDEF (12)
-+#endif
-+
-+#ifdef WANT_DYN_PAGESIZE
-+# define __DIET_PAGE_SIZE (__libc_getpagesize())
-+# define __DIET_PAGE_SHIFT (ffs(__DIET_PAGE_SIZE)-1)
-+#else
-+# define __DIET_PAGE_SIZE __DIET_PAGE_SIZE_PREDEF
-+# define __DIET_PAGE_SHIFT __DIET_PAGE_SHIFT_PREDEF
-+#endif
-+
-+#endif /* H_DIETLIBC_DIETPAGESIZE_H */
-diff -urN -x .git dietlibc-0.33/dietuglyweaks.h dietlibc/dietuglyweaks.h
---- dietlibc-0.33/dietuglyweaks.h 2004-06-30 05:52:30.000000000 +0000
-+++ dietlibc/dietuglyweaks.h 2015-01-01 12:14:43.461605562 +0000
-@@ -4,6 +4,18 @@
- /* if you change something here ... KNOW what you're doing !
- * it'll effect ALL platforms ! */
-
-+#ifdef __clang__
-+.macro DEF_G name
-+.global \name
-+.type \name, at function
-+\name:
-+.endm
-+.macro DEF_W name
-+.weak \name
-+.type \name, at function
-+\name:
-+.endm
-+#else
- .macro DEF_G name
- .global \name
- .type \name,function
-@@ -14,6 +26,7 @@
- .type \name,function
- \name:
- .endm
-+#endif
-
- DEF_W __fflush_stderr
- DEF_W __fflush_stdin
-diff -urN -x .git dietlibc-0.33/dietunaligned.h dietlibc/dietunaligned.h
---- dietlibc-0.33/dietunaligned.h 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/dietunaligned.h 2015-01-01 12:14:43.461605562 +0000
-@@ -0,0 +1,35 @@
-+#ifndef H_DIETLIBC_UNALIGNED_H
-+#define H_DIETLIBC_UNALIGNED_H
-+
-+#include <string.h>
-+#include <inttypes.h>
-+
-+#define read_unaligned(_src) \
-+ ({ \
-+ struct { \
-+ __typeof__(*(_src)) a; \
-+ } __attribute__((__packed__)) *_tmp = (void *)(_src); \
-+ _tmp->a; \
-+ })
-+
-+#define read_unaligned_s(_src, _type, _attr) \
-+ read_unaligned((__typeof__(&((_type *)(0))->_attr))( \
-+ (uintptr_t)(_src) + \
-+ __builtin_offsetof(_type, _attr))) \
-+
-+
-+#define write_unaligned(_v, _dst) \
-+ ({ \
-+ struct { \
-+ __typeof__(*(_dst)) a; \
-+ } __attribute__((__packed__)) *_tmp = (void *)(_dst); \
-+ _tmp->a = (_v); \
-+ })
-+
-+#define write_unaligned_s(_v, _dst, _type, _attr) \
-+ write_unaligned(_v, \
-+ (__typeof__(&((_type *)(0))->_attr))( \
-+ (uintptr_t)(_dst) + \
-+ __builtin_offsetof(_type, _attr))) \
-+
-+#endif /* H_DIETLIBC_UNALIGNED_H */
-diff -urN -x .git dietlibc-0.33/dynlinker/ldso_start.S dietlibc/dynlinker/ldso_start.S
---- dietlibc-0.33/dynlinker/ldso_start.S 2007-03-09 13:42:12.000000000 +0000
-+++ dietlibc/dynlinker/ldso_start.S 2015-01-01 12:14:43.464938896 +0000
-@@ -86,6 +86,15 @@
- .long 0
- #endif
-
-+/* __elfinfo must follow __environ immediately */
-+.global __elfinfo
-+__elfinfo:
-+#if __WORDSIZE == 64
-+ .quad 0
-+#else
-+ .long 0
-+#endif
-+
- .global fini_entry
- fini_entry:
- .long 0
-diff -urN -x .git dietlibc-0.33/dyn_start.c dietlibc/dyn_start.c
---- dietlibc-0.33/dyn_start.c 2008-05-06 17:18:34.000000000 +0000
-+++ dietlibc/dyn_start.c 2015-01-01 12:14:43.464938896 +0000
-@@ -54,10 +54,6 @@
- __deregister_frame_info(__EH_FRAME_BEGIN__);
- }
-
--#ifdef WANT_STACKGAP
--int stackgap(int argc,char* argv[],char* envp[]);
--#endif
--
- #ifndef __DYN_LIB_SHARED
- /* pre main, post _start */
- extern __attribute__((section(".init"))) void _init(void);
-@@ -65,7 +61,7 @@
- int _dyn_start(int argc, char **argv, char **envp, structor dl_init);
- int _dyn_start(int argc, char **argv, char **envp, structor dl_init)
- {
-- int main(int argc, char **argv, char **envp);
-+ int CALL_IN_STARTCODE(int argc, char **argv, char **envp);
-
- #ifndef __arm__
- /* GT: segfaults on arm, don't know why (for now) */
-@@ -82,11 +78,7 @@
- __register_frame_info(__EH_FRAME_BEGIN__, &ob);
- }
-
--#ifdef WANT_STACKGAP
-- return stackgap(argc, argv, envp);
--#else
-- return main(argc, argv, envp);
--#endif
-+ return CALL_IN_STARTCODE(argc, argv, envp);
- }
- #endif
- #endif
-diff -urN -x .git dietlibc-0.33/FAQ dietlibc/FAQ
---- dietlibc-0.33/FAQ 2010-11-09 18:38:34.000000000 +0000
-+++ dietlibc/FAQ 2015-01-01 12:14:43.451605563 +0000
-@@ -246,7 +246,7 @@
- code. Unfortunately, these options have been renamed on gcc 3. You
- can fix this by creating a file ~/.diet/gcc containing this line:
-
-- -Os -fomit-frame-pointer -falign-jumps=1 -falign-loops=1 -mpreferred-stack-boundary=2
-+ -Os -fomit-frame-pointer -falign-jumps=1 -falign-loops=1 -mpreferred-stack-boundary=4
-
- If you get this options not for diet -Os gcc but for diet -Os
- i386-linux-gcc, put this in ~/.diet/i386-linux-gcc instead.
-diff -urN -x .git dietlibc-0.33/findcflags.sh dietlibc/findcflags.sh
---- dietlibc-0.33/findcflags.sh 2005-05-08 15:33:38.000000000 +0000
-+++ dietlibc/findcflags.sh 2015-01-01 12:14:43.464938896 +0000
-@@ -3,6 +3,6 @@
- case $version in
- 2.9*) echo -march=i386 -Os -fomit-frame-pointer -malign-functions=1 -malign-jumps=1 -malign-loops=1 -mpreferred-stack-boundary=2 ;;
- 3.0*) echo -march=i386 -Os -fomit-frame-pointer -malign-functions=1 -malign-jumps=1 -malign-loops=1 -mpreferred-stack-boundary=2 ;;
-- [34]*) echo -Os -fomit-frame-pointer -falign-functions=1 -falign-jumps=1 -falign-loops=1 -mpreferred-stack-boundary=2;;
-+ [34]*) echo -Os -fomit-frame-pointer -falign-functions=1 -falign-jumps=1 -falign-loops=1 -mpreferred-stack-boundary=4;;
- *) echo -O2 -pipe -fomit-frame-pointer ;;
- esac
-diff -urN -x .git dietlibc-0.33/.gitignore dietlibc/.gitignore
---- dietlibc-0.33/.gitignore 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/.gitignore 2015-01-01 12:14:43.451605563 +0000
-@@ -0,0 +1,2 @@
-+/.cvsps
-+/include/errno_definition.h
-diff -urN -x .git dietlibc-0.33/i386/accept4.S dietlibc/i386/accept4.S
---- dietlibc-0.33/i386/accept4.S 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/i386/accept4.S 2015-01-01 12:14:43.464938896 +0000
-@@ -0,0 +1,4 @@
-+#include <linuxnet.h>
-+#include <syscalls.h>
-+
-+__socketcall(accept4,ACCEPT4)
-diff -urN -x .git dietlibc-0.33/i386/dyn_syscalls.S dietlibc/i386/dyn_syscalls.S
---- dietlibc-0.33/i386/dyn_syscalls.S 2012-01-24 18:24:24.000000000 +0000
-+++ dietlibc/i386/dyn_syscalls.S 2015-01-01 12:14:43.464938896 +0000
-@@ -191,7 +191,6 @@
- #include "../syscalls.s/n_sigpending.S"
- #include "../syscalls.s/n_sigprocmask.S"
- #include "../syscalls.s/n_sigsuspend.S"
--#include "../syscalls.s/nice.S"
- #include "../syscalls.s/pause.S"
- #include "../syscalls.s/personality.S"
- #include "../syscalls.s/query_module.S"
-diff -urN -x .git dietlibc-0.33/i386/getcontext.S dietlibc/i386/getcontext.S
---- dietlibc-0.33/i386/getcontext.S 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/i386/getcontext.S 2015-01-01 12:14:43.464938896 +0000
-@@ -0,0 +1,45 @@
-+#include "syscalls.h"
-+
-+.text
-+.global getcontext
-+.type getcontext, at function
-+/* store current CPU context into struct ucontext* */
-+getcontext:
-+ movl 4(%esp),%eax /* load ucontext* */
-+ /* the registers are in uc_mcontext, which starts at offset 20 */
-+ movw %gs,20(%eax)
-+ movw %fs,24(%eax)
-+ movw %es,28(%eax)
-+ movw %ds,32(%eax)
-+ movl %edi,36(%eax)
-+ movl %esi,40(%eax)
-+ movl %ebp,44(%eax)
-+ /* skip esp until we stored ecx */
-+ movl %ebx,52(%eax)
-+ movl %edx,56(%eax)
-+ movl %ecx,60(%eax)
-+ lea 4(%esp),%ecx /* store esp+4 to esp */
-+ mov %ecx,48(%eax)
-+ movl $0,64(%eax) /* eax */
-+ /* not touching trapno and err, no idea what do store there */
-+ movl (%esp),%ecx
-+ movl %ecx,76(%eax) /* store return value from stack into eip of struct */
-+ movw %cs,80(%eax)
-+ /* 84: eflags */
-+ /* 88: esp_at_signal */
-+ movw %ss,92(%eax)
-+
-+ lea 236(%eax),%ecx
-+ movl %ecx,96(%eax)
-+ fnstenv (%ecx)
-+ fldenv (%ecx)
-+ mov %ebx,%edi
-+ xor %ebx,%ebx
-+ xor %ecx,%ecx
-+ lea 108(%eax),%edx
-+ mov $__NR_sigprocmask,%eax
-+ int $0x80
-+ mov %edi,%ebx
-+ xor %eax,%eax
-+ ret
-+.size getcontext, .-getcontext
-diff -urN -x .git dietlibc-0.33/i386/Makefile.add dietlibc/i386/Makefile.add
---- dietlibc-0.33/i386/Makefile.add 2012-01-24 18:24:24.000000000 +0000
-+++ dietlibc/i386/Makefile.add 2015-01-01 12:14:43.464938896 +0000
-@@ -1,7 +1,7 @@
-
- M:=$(shell ./findcflags.sh $(CC))
- LIBOBJ+=$(OBJDIR)/__ten.o $(OBJDIR)/md5asm.o $(OBJDIR)/__restore_rt.o \
--$(OBJDIR)/__CAS.o
-+$(OBJDIR)/__CAS.o $(OBJDIR)/getcontext.o $(OBJDIR)/setcontext.o
- LIBMATH+=acos.o asin.o atan.o ceil.o cos.o exp.o exp10.o exp2.o expm1.o fabs.o floor.o hypot.o log.o log2.o log10.o sin.o sqrt.o copysign.o sincos.o __half.o ldexp.o ilogb.o cbrt.o log1p.o fmod.o libm2.o atan2.o tan.o
- LIBMATH:=$(filter-out acosh.o asinh.o atanh.o cbrt.o copysign.o exp10.o exp2.o expm1.o ilogb.o log2.o,$(LIBMATH))
- #CFLAGS+=-march=i386 -Os -fomit-frame-pointer -malign-functions=0 -malign-jumps=0 -malign-loops=0 -mpreferred-stack-boundary=2
-diff -urN -x .git dietlibc-0.33/i386/recvmmsg.S dietlibc/i386/recvmmsg.S
---- dietlibc-0.33/i386/recvmmsg.S 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/i386/recvmmsg.S 2015-01-01 12:14:43.468272228 +0000
-@@ -0,0 +1,4 @@
-+#include <linuxnet.h>
-+#include <syscalls.h>
-+
-+__socketcall(recvmmsg,RECVMMSG)
-diff -urN -x .git dietlibc-0.33/i386/sendmmsg.S dietlibc/i386/sendmmsg.S
---- dietlibc-0.33/i386/sendmmsg.S 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/i386/sendmmsg.S 2015-01-01 12:14:43.468272228 +0000
-@@ -0,0 +1,4 @@
-+#include <linuxnet.h>
-+#include <syscalls.h>
-+
-+__socketcall(sendmmsg,SENDMMSG)
-diff -urN -x .git dietlibc-0.33/i386/setcontext.S dietlibc/i386/setcontext.S
---- dietlibc-0.33/i386/setcontext.S 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/i386/setcontext.S 2015-01-01 12:14:43.468272228 +0000
-@@ -0,0 +1,48 @@
-+#include "syscalls.h"
-+
-+.text
-+.global __setcontext_trampoline
-+.type __setcontext_trampoline, at function
-+__setcontext_trampoline:
-+ mov %ebx,4(%esp)
-+ /* fall through */
-+.size __setcontext_trampoline,.-__setcontext_trampoline
-+
-+.global setcontext
-+.type setcontext, at function
-+/* switch to stored CPU context from struct ucontext* */
-+setcontext:
-+ movl 4(%esp),%eax /* load ucontext* */
-+ /* first, load the signal mask */
-+ movl %ebx,%edi
-+ xorl %edx,%edx
-+ movl $2,%ebx /* SIG_SETMASK */
-+ lea 108(%eax),%ecx
-+ movl $__NR_sigprocmask,%eax
-+ int $0x80
-+ cmp $-4095,%eax
-+ jb .Lnoerror
-+ jmp __error_unified_syscall
-+.Lnoerror:
-+ movl 4(%esp),%eax /* load ucontext* */
-+ mov %edi,%ebx
-+ lea 236(%eax),%ecx
-+ fldenv (%ecx)
-+
-+ /* the registers are in uc_mcontext, which starts at offset 20 */
-+ /* do not restore gs because it's thread-specific */
-+ movw 24(%eax),%fs
-+ movw 28(%eax),%es
-+ movw 32(%eax),%ds
-+ movl 36(%eax),%edi
-+ movl 40(%eax),%esi
-+ movl 44(%eax),%ebp
-+ movl 48(%eax),%esp
-+ movw 92(%eax),%ss
-+ movl 52(%eax),%ebx
-+ movl 56(%eax),%edx
-+ movl 60(%eax),%ecx
-+
-+ movl 76(%eax),%eax
-+ jmp *%eax
-+.size setcontext, .-setcontext
-diff -urN -x .git dietlibc-0.33/i386/start.S dietlibc/i386/start.S
---- dietlibc-0.33/i386/start.S 2012-01-24 18:24:24.000000000 +0000
-+++ dietlibc/i386/start.S 2015-01-01 12:14:43.468272228 +0000
-@@ -20,12 +20,18 @@
- PIC_INIT /* non-PIC: this is an empty line */
- PUT_VAR %esi, environ, %ecx /* non-PIC: movl %esi,environ */
-
--#ifdef WANT_SYSENTER
-+#if defined(WANT_ELFINFO) || defined(WANT_SYSENTER)
- /* skip environment, scan for NULL */
- 1:
- lodsl
- testl %eax,%eax
- jnz 1b
-+# ifdef WANT_ELFINFO
-+ PUT_VAR %esi, __elfinfo, %ecx
-+# endif
-+#endif
-+
-+#ifdef WANT_SYSENTER
- /* The ELF auxvec follows the environment, consists of key/value pairs.
- We are looking for key 32, which stands for the vsyscall page */
- 1:
-diff -urN -x .git dietlibc-0.33/i386/syscalls.h dietlibc/i386/syscalls.h
---- dietlibc-0.33/i386/syscalls.h 2012-01-24 18:24:24.000000000 +0000
-+++ dietlibc/i386/syscalls.h 2015-01-01 12:14:43.468272228 +0000
-@@ -339,6 +339,23 @@
- #define __NR_fanotify_init 338
- #define __NR_fanotify_mark 339
- #define __NR_prlimit64 340
-+#define __NR_name_to_handle_at 341
-+#define __NR_open_by_handle_at 342
-+#define __NR_clock_adjtime 343
-+#define __NR_syncfs 344
-+#define __NR_sendmmsg 345
-+#define __NR_setns 346
-+#define __NR_process_vm_readv 347
-+#define __NR_process_vm_writev 348
-+#define __NR_kcmp 349
-+#define __NR_finit_module 350
-+#define __NR_sched_setattr 351
-+#define __NR_sched_getattr 352
-+#define __NR_renameat2 353
-+#define __NR_seccomp 354
-+#define __NR_getrandom 355
-+#define __NR_memfd_create 356
-+
-
- #define syscall_weak(name,wsym,sym) \
- .text; \
-@@ -368,7 +385,6 @@
- .Lend##sym: ; \
- .size sym,.Lend##sym-sym
-
--#ifndef __PIC__
- #define __socketcall(name,NAME) \
- .text; \
- .type name, at function; \
-@@ -381,6 +397,3 @@
- jmp socketcall; \
- .Lend##name:; \
- .size name,.Lend##name-name
--#else
--#define __socketcall(name,NAME)
--#endif
-diff -urN -x .git dietlibc-0.33/ia64/clone.S dietlibc/ia64/clone.S
---- dietlibc-0.33/ia64/clone.S 2006-06-23 17:29:33.000000000 +0000
-+++ dietlibc/ia64/clone.S 2015-01-01 12:14:43.468272228 +0000
-@@ -1,4 +1,4 @@
--/* This is untested code which probably won�t work out of the box! */
-+/* This is untested code which probably won't work out of the box! */
-
- #include "syscalls.h"
- #include <errno.h>
-@@ -43,4 +43,5 @@
- br.call.dptk.few b0=__error_unified_syscall
- br.ret.sptk.few b0
- .endp __clone
-+.endp __clone2
- .size __clone, . - __clone
-diff -urN -x .git dietlibc-0.33/ia64/Makefile.add dietlibc/ia64/Makefile.add
---- dietlibc-0.33/ia64/Makefile.add 2012-01-24 18:24:24.000000000 +0000
-+++ dietlibc/ia64/Makefile.add 2015-01-01 12:14:43.468272228 +0000
-@@ -1,2 +1,2 @@
- VPATH:=ia64:syscalls.s:$(VPATH)
--LIBOBJ+=$(OBJDIR)/__time.o $(OBJDIR)/__waitpid.o $(OBJDIR)/__nice.o $(OBJDIR)/__alarm.o $(OBJDIR)/__CAS.o
-+LIBOBJ+=$(OBJDIR)/__time.o $(OBJDIR)/__waitpid.o $(OBJDIR)/__alarm.o $(OBJDIR)/__CAS.o $(OBJDIR)/__pause.o
-diff -urN -x .git dietlibc-0.33/ia64/__pause.c dietlibc/ia64/__pause.c
---- dietlibc-0.33/ia64/__pause.c 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/ia64/__pause.c 2015-01-01 12:14:43.468272228 +0000
-@@ -0,0 +1,10 @@
-+#include <unistd.h>
-+#include <signal.h>
-+
-+int pause(void)
-+{
-+ sigset_t set;
-+ sigemptyset(&set);
-+ sigprocmask(SIG_BLOCK, NULL, &set);
-+ return sigsuspend(&set);
-+}
-diff -urN -x .git dietlibc-0.33/ia64/start.S dietlibc/ia64/start.S
---- dietlibc-0.33/ia64/start.S 2006-05-29 16:30:53.000000000 +0000
-+++ dietlibc/ia64/start.S 2015-01-01 12:14:43.468272228 +0000
-@@ -40,6 +40,16 @@
- ;;
- st8 [r14] = out2 /* store envp in environ */
-
-+#ifdef WANT_ELFINFO
-+# warning "MAKE ME IE64 CODE!"
-+1: ld8 r9 = [out2], 8 /* load *envp and increment it */
-+ orr r9 = r9, r9 /* test for NULL */
-+ bne 1b
-+
-+ adds r14 = 8, r14 /* __elfinfo = environ + 8 */
-+ st8 [r14] = out2 /* store envp in __elfinfo */
-+#endif
-+
- #ifdef WANT_DYNAMIC
- /* FIXME: dl_init parameter ??? */
- br.call.sptk.few rp = _dyn_start
-diff -urN -x .git dietlibc-0.33/ia64/syscalls.h dietlibc/ia64/syscalls.h
---- dietlibc-0.33/ia64/syscalls.h 2008-12-10 20:00:58.000000000 +0000
-+++ dietlibc/ia64/syscalls.h 2015-01-01 12:14:43.468272228 +0000
-@@ -289,6 +289,34 @@
- #define __NR_timerfd_create 1310
- #define __NR_timerfd_settime 1311
- #define __NR_timerfd_gettime 1312
-+#define __NR_signalfd4 1313
-+#define __NR_eventfd2 1314
-+#define __NR_epoll_create1 1315
-+#define __NR_dup3 1316
-+#define __NR_pipe2 1317
-+#define __NR_inotify_init1 1318
-+#define __NR_preadv 1319
-+#define __NR_pwritev 1320
-+#define __NR_rt_tgsigqueueinfo 1321
-+#define __NR_recvmmsg 1322
-+#define __NR_fanotify_init 1323
-+#define __NR_fanotify_mark 1324
-+#define __NR_prlimit64 1325
-+#define __NR_name_to_handle_at 1326
-+#define __NR_open_by_handle_at 1327
-+#define __NR_clock_adjtime 1328
-+#define __NR_syncfs 1329
-+#define __NR_setns 1330
-+#define __NR_sendmmsg 1331
-+#define __NR_process_vm_readv 1332
-+#define __NR_process_vm_writev 1333
-+#define __NR_accept4 1334
-+#define __NR_finit_module 1335
-+#define __NR_sched_setattr 1336
-+#define __NR_sched_getattr 1337
-+#define __NR_renameat2 1338
-+#define __NR_getrandom 1339
-+#define __NR_memfd_create 1340
-
- #define syscall(name, sym) \
- .text; \
-diff -urN -x .git dietlibc-0.33/ia64/unified.S dietlibc/ia64/unified.S
---- dietlibc-0.33/ia64/unified.S 2006-06-23 17:29:33.000000000 +0000
-+++ dietlibc/ia64/unified.S 2015-01-01 12:14:43.468272228 +0000
-@@ -16,9 +16,7 @@
- .text
-
- .globl __unified_syscall
--.proc __unified_syscall
- .globl __error_unified_syscall
--.proc __error_unified_syscall
- .globl _exit
- .proc _exit
-
-@@ -27,11 +25,16 @@
- .endp _exit
- .size _exit, . - _exit
-
-+.proc __unified_syscall
- __unified_syscall:
- break.i 0x100000
- movl r2=errno
- cmp.eq p6,p0=-1,r10
- ;;
-+.endp __unified_syscall
-+.size __unified_syscall, . - __unified_syscall
-+
-+.proc __error_unified_syscall
- __error_unified_syscall:
- (p6) st4 [r2]=r8
- (p6) mov r8=-1
-@@ -39,6 +42,6 @@
- #include "dietuglyweaks.h"
-
- br.ret.sptk.few rp
-+.endp __error_unified_syscall
-
--.size __unified_syscall, __error_unified_syscall - __unified_syscall
- .size __error_unified_syscall, . - __error_unified_syscall
-diff -urN -x .git dietlibc-0.33/include/asm/posix_types.h dietlibc/include/asm/posix_types.h
---- dietlibc-0.33/include/asm/posix_types.h 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/include/asm/posix_types.h 2015-01-01 12:14:43.471605562 +0000
-@@ -0,0 +1,7 @@
-+#ifndef _ASM_POSIX_TYPES_H
-+#define _ASM_POSIX_TYPES_H
-+
-+typedef long __kernel_long_t;
-+typedef unsigned long __kernel_ulong_t;
-+
-+#endif
-diff -urN -x .git dietlibc-0.33/include/asm/prctl.h dietlibc/include/asm/prctl.h
---- dietlibc-0.33/include/asm/prctl.h 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/include/asm/prctl.h 2015-01-01 12:14:43.471605562 +0000
-@@ -0,0 +1,18 @@
-+#ifndef _ASM_PRCTL_H
-+#define _ASM_PRCTL_H
-+
-+#if defined(__x86_64__)
-+
-+#define ARCH_SET_GS 0x1001
-+#define ARCH_SET_FS 0x1002
-+#define ARCH_GET_FS 0x1003
-+#define ARCH_GET_GS 0x1004
-+
-+#elif defined(__i386__)
-+
-+#else
-+
-+#warning "need asm/prctl.h for this platform"
-+#endif
-+
-+#endif
-diff -urN -x .git dietlibc-0.33/include/dirent.h dietlibc/include/dirent.h
---- dietlibc-0.33/include/dirent.h 2012-11-02 11:17:28.000000000 +0000
-+++ dietlibc/include/dirent.h 2015-01-01 12:14:43.471605562 +0000
-@@ -42,8 +42,8 @@
- #endif
- struct dirent64 *readdir64 (DIR *__dirp) __THROW;
- void rewinddir (DIR *__dirp) __THROW;
--void seekdir (DIR *__dirp, long int __pos) __THROW;
--long int telldir (DIR *__dirp) __THROW;
-+void seekdir (DIR *__dirp, long __pos) __THROW;
-+long telldir (DIR *__dirp) __THROW;
-
- int scandir(const char *dir, struct dirent ***namelist,
- int (*selection)(const struct dirent *),
-diff -urN -x .git dietlibc-0.33/include/dlfcn.h dietlibc/include/dlfcn.h
---- dietlibc-0.33/include/dlfcn.h 2005-01-31 12:53:33.000000000 +0000
-+++ dietlibc/include/dlfcn.h 2015-01-01 12:14:43.471605562 +0000
-@@ -14,10 +14,10 @@
-
- __BEGIN_DECLS
-
--void *dlopen (const char *filename, int flag);
--const char *dlerror(void);
--void *dlsym(void *handle, const char *symbol);
--int dlclose (void *handle);
-+void *dlopen (const char *filename, int flag) __THROWNL;
-+const char *dlerror(void) __THROW;
-+void *dlsym(void *handle, const char *symbol) __THROW;
-+int dlclose (void *handle) __THROWNL;
-
- #ifdef _GNU_SOURCE
- typedef struct
-diff -urN -x .git dietlibc-0.33/include/elf.h dietlibc/include/elf.h
---- dietlibc-0.33/include/elf.h 2010-09-25 17:03:25.000000000 +0000
-+++ dietlibc/include/elf.h 2015-01-01 12:14:43.471605562 +0000
-@@ -954,6 +954,15 @@
-
- #define AT_SECURE 23 /* Boolean, was exec setuid-like? */
-
-+#define AT_BASE_PLATFORM 24 /* String identifying real platforms.*/
-+
-+#define AT_RANDOM 25 /* Address of 16 random bytes. */
-+
-+#define AT_HWCAP2 26 /* More machine-dependent hints about
-+ processor capabilities. */
-+
-+#define AT_EXECFN 31 /* Filename of executable. */
-+
- /* Pointer to the global system page used for system calls and other
- nice things. */
- #define AT_SYSINFO 32
-diff -urN -x .git dietlibc-0.33/include/endian.h dietlibc/include/endian.h
---- dietlibc-0.33/include/endian.h 2006-05-29 16:30:53.000000000 +0000
-+++ dietlibc/include/endian.h 2015-01-01 12:14:43.471605562 +0000
-@@ -39,10 +39,18 @@
- # define __LONG_LONG_PAIR(HI, LO) HI, LO
- #endif
-
--#if defined(__alpha__) || defined(__mips64__) || defined(__sparc_v9__) || defined(__x86_64__) || defined(__ia64__) || defined(__powerpc64__) || defined(__s390x__)
-+#if defined(__alpha__) || defined(__mips64__) || defined(__sparc_v9__) || defined(__ia64__) || defined(__powerpc64__) || defined(__s390x__)
- #define __WORDSIZE 64
- #endif
-
-+#if defined(__x86_64__)
-+#if defined(__ILP32__)
-+#define __OFF_T_MATCHES_OFF64_T
-+#else
-+#define __WORDSIZE 64
-+#endif
-+#endif
-+
- #if defined(__x86_64__) || defined(__powerpc64__) || defined(__sparc_v9__)
- #define __WORDSIZE_COMPAT32 1
- #endif
-@@ -51,7 +59,9 @@
- #define __WORDSIZE 64
- #endif
-
--#ifndef __WORDSIZE
-+#ifdef __WORDSIZE
-+#define __OFF_T_MATCHES_OFF64_T
-+#else
- #define __WORDSIZE 32
- #endif
-
-diff -urN -x .git dietlibc-0.33/include/errno.h dietlibc/include/errno.h
---- dietlibc-0.33/include/errno.h 2010-09-25 17:03:26.000000000 +0000
-+++ dietlibc/include/errno.h 2015-01-01 12:14:43.471605562 +0000
-@@ -704,11 +704,7 @@
-
- __BEGIN_DECLS
-
--#ifndef _REENTRANT
--extern int errno;
--#else
--#define errno (*__errno_location())
--#endif
-+#include <errno_definition.h>
-
- extern int *__errno_location(void);
-
-diff -urN -x .git dietlibc-0.33/include/fcntl.h dietlibc/include/fcntl.h
---- dietlibc-0.33/include/fcntl.h 2012-11-02 11:17:28.000000000 +0000
-+++ dietlibc/include/fcntl.h 2015-01-01 12:14:43.471605562 +0000
-@@ -14,8 +14,6 @@
-
- #if defined(__i386__) || defined(__s390__) || defined(__x86_64__) || defined(__ia64__)
-
--/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-- located on an ext2 file system */
- #define O_ACCMODE 0003
- #define O_RDONLY 00
- #define O_WRONLY 01
-@@ -27,13 +25,17 @@
- #define O_APPEND 02000
- #define O_NONBLOCK 04000
- #define O_NDELAY O_NONBLOCK
--#define O_SYNC 010000
-+#define O_DSYNC 010000
- #define FASYNC 020000 /* fcntl, for BSD compatibility */
- #define O_DIRECT 040000 /* direct disk access hint - currently ignored */
- #define O_LARGEFILE 0100000
- #define O_DIRECTORY 0200000 /* must be a directory */
- #define O_NOFOLLOW 0400000 /* don't follow links */
- #define O_NOATIME 01000000
-+#define O_CLOEXEC 02000000
-+#define O_SYNC (O_DSYNC|04000000)
-+#define O_PATH 010000000
-+#define O_TMPFILE 020000000
-
- #define F_DUPFD 0 /* dup */
- #define F_GETFD 1 /* get close_on_exec */
-@@ -96,8 +98,6 @@
-
- #elif defined(__alpha__)
-
--/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-- located on an ext2 file system */
- #define O_ACCMODE 0003
- #define O_RDONLY 00
- #define O_WRONLY 01
-@@ -110,13 +110,17 @@
- #define O_NONBLOCK 00004
- #define O_APPEND 00010
- #define O_NDELAY O_NONBLOCK
--#define O_SYNC 040000
-+#define O_DSYNC 040000
- #define FASYNC 020000 /* fcntl, for BSD compatibility */
- #define O_DIRECTORY 0100000 /* must be a directory */
- #define O_NOFOLLOW 0200000 /* don't follow links */
- #define O_LARGEFILE 0400000 /* will be set by the kernel on every open */
- #define O_DIRECT 02000000 /* direct disk access - should check with OSF/1 */
- #define O_NOATIME 04000000
-+#define O_CLOEXEC 010000000
-+#define O_SYNC (020000000|O_DSYNC)
-+#define O_PATH 040000000
-+#define O_TMPFILE 0100000000
-
- #define F_DUPFD 0 /* dup */
- #define F_GETFD 1 /* get close_on_exec */
-@@ -167,14 +171,12 @@
-
- #elif defined(__mips__)
-
--/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-- located on an ext2 file system */
- #define O_ACCMODE 0x0003
- #define O_RDONLY 0x0000
- #define O_WRONLY 0x0001
- #define O_RDWR 0x0002
- #define O_APPEND 0x0008
--#define O_SYNC 0x0010
-+#define O_DSYNC 0x0010
- #define O_NONBLOCK 0x0080
- #define O_CREAT 0x0100 /* not fcntl */
- #define O_TRUNC 0x0200 /* not fcntl */
-@@ -182,10 +184,14 @@
- #define O_NOCTTY 0x0800 /* not fcntl */
- #define FASYNC 0x1000 /* fcntl, for BSD compatibility */
- #define O_LARGEFILE 0x2000 /* allow large file opens - currently ignored */
-+#define O_SYNC (0x4000|O_DSYNC)
- #define O_DIRECT 0x8000 /* direct disk access hint - currently ignored */
- #define O_DIRECTORY 0x10000 /* must be a directory */
- #define O_NOFOLLOW 0x20000 /* don't follow links */
- #define O_NOATIME 0x40000
-+#define O_CLOEXEC 0x80000
-+#define O_PATH 040000000
-+#define O_TMPFILE 0100000000
-
- #define O_NDELAY O_NONBLOCK
-
-@@ -266,8 +272,6 @@
-
- #elif defined(__sparc__)
-
--/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-- located on an ext2 file system */
- #define O_RDONLY 0x0000
- #define O_WRONLY 0x0001
- #define O_RDWR 0x0002
-@@ -277,7 +281,7 @@
- #define O_CREAT 0x0200 /* not fcntl */
- #define O_TRUNC 0x0400 /* not fcntl */
- #define O_EXCL 0x0800 /* not fcntl */
--#define O_SYNC 0x2000
-+#define O_DSYNC 0x2000
- #define O_NONBLOCK 0x4000
- #define O_NDELAY (0x0004 | O_NONBLOCK)
- #define O_NOCTTY 0x8000 /* not fcntl */
-@@ -286,6 +290,10 @@
- #define O_LARGEFILE 0x40000
- #define O_DIRECT 0x100000 /* direct disk access hint */
- #define O_NOATIME 0x200000
-+#define O_CLOEXEC 0x400000
-+#define O_SYNC (0x800000|O_DSYNC)
-+#define O_PATH 0x1000000
-+#define O_TMPFILE 0x2000000
-
- #define F_DUPFD 0 /* dup */
- #define F_GETFD 1 /* get close_on_exec */
-@@ -355,8 +363,6 @@
-
- #elif defined(__powerpc__) || defined(__powerpc64__)
-
--/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-- located on an ext2 file system */
- #define O_ACCMODE 0003
- #define O_RDONLY 00
- #define O_WRONLY 01
-@@ -368,13 +374,17 @@
- #define O_APPEND 02000
- #define O_NONBLOCK 04000
- #define O_NDELAY O_NONBLOCK
--#define O_SYNC 010000
-+#define O_DSYNC 010000
- #define FASYNC 020000 /* fcntl, for BSD compatibility */
- #define O_DIRECTORY 040000 /* must be a directory */
- #define O_NOFOLLOW 0100000 /* don't follow links */
- #define O_LARGEFILE 0200000
- #define O_DIRECT 0400000 /* direct disk access hint - currently ignored */
- #define O_NOATIME 01000000
-+#define O_CLOEXEC 02000000
-+#define O_SYNC (O_DSYNC|04000000)
-+#define O_PATH 010000000
-+#define O_TMPFILE 020000000
-
- #define F_DUPFD 0 /* dup */
- #define F_GETFD 1 /* get close_on_exec */
-@@ -439,8 +449,6 @@
-
- #elif defined (__arm__)
-
--/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
-- located on an ext2 file system */
- #define O_ACCMODE 0003
- #define O_RDONLY 00
- #define O_WRONLY 01
-@@ -452,13 +460,17 @@
- #define O_APPEND 02000
- #define O_NONBLOCK 04000
- #define O_NDELAY O_NONBLOCK
--#define O_SYNC 010000
-+#define O_DSYNC 010000
- #define FASYNC 020000 /* fcntl, for BSD compatibility */
- #define O_DIRECTORY 040000 /* must be a directory */
- #define O_NOFOLLOW 0100000 /* don't follow links */
- #define O_DIRECT 0200000 /* direct disk access hint - currently ignored */
- #define O_LARGEFILE 0400000
- #define O_NOATIME 01000000
-+#define O_CLOEXEC 02000000
-+#define O_SYNC (O_DSYNC|04000000)
-+#define O_PATH 010000000
-+#define O_TMPFILE 020000000
-
- #define F_DUPFD 0 /* dup */
- #define F_GETFD 1 /* get close_on_exec */
-@@ -536,19 +548,24 @@
- #define O_EXCL 00002000 /* not fcntl */
- #define O_LARGEFILE 00004000
- #define O_ASYNC 00020000
--#define O_SYNC 00100000
-+#define __O_SYNC 00100000
- #define O_NONBLOCK 00200004 /* HPUX has separate NDELAY & NONBLOCK */
- #define O_NDELAY O_NONBLOCK
- #define O_NOCTTY 00400000 /* not fcntl */
- #define O_DSYNC 01000000 /* HPUX only */
- #define O_RSYNC 02000000 /* HPUX only */
- #define O_NOATIME 04000000
-+#define O_CLOEXEC 010000000
- #define O_DIRECTORY 00010000
-
- #define O_DIRECT 00040000 /* direct disk access hint - currently ignored */
- #define O_NOFOLLOW 00000200 /* don't follow links */
- #define O_INVISIBLE 04000000 /* invisible I/O, for DMAPI/XDSM */
-
-+#define O_PATH 020000000
-+#define O_TMPFILE 040000000
-+#define O_SYNC (__O_SYNC|O_DSYNC)
-+
- #define F_DUPFD 0 /* Duplicate file descriptor. */
- #define F_GETFD 1 /* Get file descriptor flags. */
- #define F_SETFD 2 /* Set file descriptor flags. */
-@@ -611,11 +628,55 @@
-
- #endif
-
-+#ifdef _GNU_SOURCE
-+
-+#define F_SETLEASE (F_LINUX_SPECIFIC_BASE + 0)
-+#define F_GETLEASE (F_LINUX_SPECIFIC_BASE + 1)
-+
-+/*
-+ * Cancel a blocking posix lock; internal use only until we expose an
-+ * asynchronous lock api to userspace:
-+ */
-+#define F_CANCELLK (F_LINUX_SPECIFIC_BASE + 5)
-+
-+/* Create a file descriptor with FD_CLOEXEC set. */
-+#define F_DUPFD_CLOEXEC (F_LINUX_SPECIFIC_BASE + 6)
-+
-+/*
-+ * Request nofications on a directory.
-+ * See below for events that may be notified.
-+ */
-+#define F_NOTIFY (F_LINUX_SPECIFIC_BASE+2)
-+
-+/*
-+ * Set and get of pipe page size array
-+ */
-+#define F_SETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 7)
-+#define F_GETPIPE_SZ (F_LINUX_SPECIFIC_BASE + 8)
-+
-+/*
-+ * Set/Get seals
-+ */
-+#define F_ADD_SEALS (F_LINUX_SPECIFIC_BASE + 9)
-+#define F_GET_SEALS (F_LINUX_SPECIFIC_BASE + 10)
-+
-+/*
-+ * Types of seals
-+ */
-+#define F_SEAL_SEAL 0x0001 /* prevent further seals from being set */
-+#define F_SEAL_SHRINK 0x0002 /* prevent file from shrinking */
-+#define F_SEAL_GROW 0x0004 /* prevent file from growing */
-+#define F_SEAL_WRITE 0x0008 /* prevent writes */
-+/* (1U << 31) is reserved for signed error codes */
-+#endif
-+
- extern int fcntl (int __fd, int __cmd, ...) __THROW;
- #ifndef __NO_STAT64
- extern int fcntl64 (int __fd, int __cmd, ...) __THROW;
-+extern int fstatat64(int dirfd, const char *pathname, struct stat *buf, int flags) __THROW;
- #if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
- #define fcntl fcntl64
-+#define fstatat fstatat64
- #endif
- #endif
-
-@@ -628,37 +689,73 @@
- #endif
-
- #ifdef _GNU_SOURCE
--#define SPLICE_F_MOVE (0x01) /* move pages instead of copying */
--#define SPLICE_F_NONBLOCK (0x02) /* don't block on the pipe splicing (but */
-- /* we may still block on the fd we splice */
-- /* from/to, of course */
--#define SPLICE_F_MORE (0x04) /* expect more data */
--#define SPLICE_F_GIFT (0x08) /* pages passed in are a gift */
-+enum {
-+ SPLICE_F_MOVE=1, /* move pages instead of copying */
-+#define SPLICE_F_MOVE SPLICE_F_MOVE
-+ SPLICE_F_NONBLOCK=2, /* don't block on splicing (may still block on fd we splice */
-+#define SPLICE_F_NONBLOCK SPLICE_F_NONBLOCK
-+ SPLICE_F_MORE=4, /* expect more data */
-+#define SPLICE_F_MORE SPLICE_F_MORE
-+ SPLICE_F_GIFT=8 /* pages passed in are a gift */
-+#define SPLICE_F_GIFT SPLICE_F_GIFT
-+};
-
--long tee(int fd_in, int fd_out, size_t len, unsigned int flags) __THROW;
-+ssize_t tee(int fd_in, int fd_out, size_t len, unsigned int flags) __THROW;
-
- #include <sys/uio.h>
-
--long vmsplice(int fd, const struct iovec *iov, unsigned long nr_segs, unsigned int flags) __THROW;
--long splice(int fd_in, loff_t *off_in, int fd_out, loff_t *off_out, size_t len, unsigned int flags) __THROW;
-+ssize_t splice(int fd_in, loff_t *off_in, int fd_out, loff_t *off_out, size_t len, unsigned int flags) __THROW;
-+ssize_t vmsplice(int fd, const struct iovec *iov, unsigned long nr_segs, unsigned int flags) __THROW;
-
- int sync_file_range(int fd, off64_t offset, off64_t nbytes, unsigned int flags) __THROW;
-
- #define FALLOC_FL_KEEP_SIZE 1
-
- int fallocate(int fd, int mode, loff_t offset, loff_t len) __THROW;
-+
-+/*
-+ * Types of directory notifications that may be requested.
-+ */
-+#define DN_ACCESS 0x00000001 /* File accessed */
-+#define DN_MODIFY 0x00000002 /* File modified */
-+#define DN_CREATE 0x00000004 /* File created */
-+#define DN_DELETE 0x00000008 /* File removed */
-+#define DN_RENAME 0x00000010 /* File renamed */
-+#define DN_ATTRIB 0x00000020 /* File changed attibutes */
-+#define DN_MULTISHOT 0x80000000 /* Don't remove notifier */
-+
- #endif
-
--#if defined(_ATFILE_SOURCE) || ((_XOPEN_SOURCE + 0) >= 700) || ((_POSIX_C_SOURCE + 0) >= 200809L)
-+#define F_SETOWN_EX 15
-+#define F_GETOWN_EX 16
-+#define F_GETOWNER_UIDS 17
-+
-+#define F_OFD_GETLK 36
-+#define F_OFD_SETLK 37
-+#define F_OFD_SETLKW 38
-+
-+#define F_OWNER_TID 0
-+#define F_OWNER_PID 1
-+#define F_OWNER_PGRP 2
-+
-+struct f_owner_ex {
-+ int type;
-+ int pid;
-+};
-+
- #define AT_FDCWD -100 /* Special value used to indicate openat should use the current working directory. */
- #define AT_SYMLINK_NOFOLLOW 0x100 /* Do not follow symbolic links. */
- #define AT_REMOVEDIR 0x200 /* Remove directory instead of unlinking file. */
- #define AT_SYMLINK_FOLLOW 0x400 /* Follow symbolic links. */
-+#define AT_NO_AUTOMOUNT 0x800 /* Suppress terminal automount traversal */
-+#define AT_EMPTY_PATH 0x1000 /* Allow empty relative pathname */
-+
-+/* for faccessat */
-+#define AT_EACCESS 0x200 /* using euid, not uid for accessat */
-
- int openat(int dirfd, const char *pathname, int flags, ...) __THROW;
- int futimesat(int dirfd, const char *pathname, const struct timeval times[2]) __THROW;
- int unlinkat(int dirfd, const char *pathname, int flags) __THROW;
--#endif
-
- #if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE - 0) >= 600
- #include "linux/fadvise.h"
-diff -urN -x .git dietlibc-0.33/include/inttypes.h dietlibc/include/inttypes.h
---- dietlibc-0.33/include/inttypes.h 2012-01-24 18:24:25.000000000 +0000
-+++ dietlibc/include/inttypes.h 2015-01-01 12:14:43.471605562 +0000
-@@ -258,8 +258,8 @@
- #if __WORDSIZE == 64
- typedef signed long int64_t;
- typedef unsigned long uint64_t;
--typedef signed long int intmax_t;
--typedef unsigned long int uintmax_t;
-+typedef signed long intmax_t;
-+typedef unsigned long uintmax_t;
- #else
- __extension__ typedef signed long long int64_t;
- __extension__ typedef unsigned long long uint64_t;
-diff -urN -x .git dietlibc-0.33/include/linux/audit.h dietlibc/include/linux/audit.h
---- dietlibc-0.33/include/linux/audit.h 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/include/linux/audit.h 2015-01-01 12:14:43.471605562 +0000
-@@ -0,0 +1,432 @@
-+/* audit.h -- Auditing support
-+ *
-+ * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina.
-+ * All Rights Reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ * Written by Rickard E. (Rik) Faith <faith at redhat.com>
-+ *
-+ */
-+
-+#ifndef _UAPI_LINUX_AUDIT_H_
-+#define _UAPI_LINUX_AUDIT_H_
-+
-+#include <inttypes.h>
-+
-+#include <linux/elf-em.h>
-+
-+/* The netlink messages for the audit system is divided into blocks:
-+ * 1000 - 1099 are for commanding the audit system
-+ * 1100 - 1199 user space trusted application messages
-+ * 1200 - 1299 messages internal to the audit daemon
-+ * 1300 - 1399 audit event messages
-+ * 1400 - 1499 SE Linux use
-+ * 1500 - 1599 kernel LSPP events
-+ * 1600 - 1699 kernel crypto events
-+ * 1700 - 1799 kernel anomaly records
-+ * 1800 - 1899 kernel integrity events
-+ * 1900 - 1999 future kernel use
-+ * 2000 is for otherwise unclassified kernel audit messages (legacy)
-+ * 2001 - 2099 unused (kernel)
-+ * 2100 - 2199 user space anomaly records
-+ * 2200 - 2299 user space actions taken in response to anomalies
-+ * 2300 - 2399 user space generated LSPP events
-+ * 2400 - 2499 user space crypto events
-+ * 2500 - 2999 future user space (maybe integrity labels and related events)
-+ *
-+ * Messages from 1000-1199 are bi-directional. 1200-1299 & 2100 - 2999 are
-+ * exclusively user space. 1300-2099 is kernel --> user space
-+ * communication.
-+ */
-+#define AUDIT_GET 1000 /* Get status */
-+#define AUDIT_SET 1001 /* Set status (enable/disable/auditd) */
-+#define AUDIT_LIST 1002 /* List syscall rules -- deprecated */
-+#define AUDIT_ADD 1003 /* Add syscall rule -- deprecated */
-+#define AUDIT_DEL 1004 /* Delete syscall rule -- deprecated */
-+#define AUDIT_USER 1005 /* Message from userspace -- deprecated */
-+#define AUDIT_LOGIN 1006 /* Define the login id and information */
-+#define AUDIT_WATCH_INS 1007 /* Insert file/dir watch entry */
-+#define AUDIT_WATCH_REM 1008 /* Remove file/dir watch entry */
-+#define AUDIT_WATCH_LIST 1009 /* List all file/dir watches */
-+#define AUDIT_SIGNAL_INFO 1010 /* Get info about sender of signal to auditd */
-+#define AUDIT_ADD_RULE 1011 /* Add syscall filtering rule */
-+#define AUDIT_DEL_RULE 1012 /* Delete syscall filtering rule */
-+#define AUDIT_LIST_RULES 1013 /* List syscall filtering rules */
-+#define AUDIT_TRIM 1014 /* Trim junk from watched tree */
-+#define AUDIT_MAKE_EQUIV 1015 /* Append to watched tree */
-+#define AUDIT_TTY_GET 1016 /* Get TTY auditing status */
-+#define AUDIT_TTY_SET 1017 /* Set TTY auditing status */
-+#define AUDIT_SET_FEATURE 1018 /* Turn an audit feature on or off */
-+#define AUDIT_GET_FEATURE 1019 /* Get which features are enabled */
-+#define AUDIT_FEATURE_CHANGE 1020 /* audit log listing feature changes */
-+
-+#define AUDIT_FIRST_USER_MSG 1100 /* Userspace messages mostly uninteresting to kernel */
-+#define AUDIT_USER_AVC 1107 /* We filter this differently */
-+#define AUDIT_USER_TTY 1124 /* Non-ICANON TTY input meaning */
-+#define AUDIT_LAST_USER_MSG 1199
-+#define AUDIT_FIRST_USER_MSG2 2100 /* More user space messages */
-+#define AUDIT_LAST_USER_MSG2 2999
-+
-+#define AUDIT_DAEMON_START 1200 /* Daemon startup record */
-+#define AUDIT_DAEMON_END 1201 /* Daemon normal stop record */
-+#define AUDIT_DAEMON_ABORT 1202 /* Daemon error stop record */
-+#define AUDIT_DAEMON_CONFIG 1203 /* Daemon config change */
-+
-+#define AUDIT_SYSCALL 1300 /* Syscall event */
-+/* #define AUDIT_FS_WATCH 1301 * Deprecated */
-+#define AUDIT_PATH 1302 /* Filename path information */
-+#define AUDIT_IPC 1303 /* IPC record */
-+#define AUDIT_SOCKETCALL 1304 /* sys_socketcall arguments */
-+#define AUDIT_CONFIG_CHANGE 1305 /* Audit system configuration change */
-+#define AUDIT_SOCKADDR 1306 /* sockaddr copied as syscall arg */
-+#define AUDIT_CWD 1307 /* Current working directory */
-+#define AUDIT_EXECVE 1309 /* execve arguments */
-+#define AUDIT_IPC_SET_PERM 1311 /* IPC new permissions record type */
-+#define AUDIT_MQ_OPEN 1312 /* POSIX MQ open record type */
-+#define AUDIT_MQ_SENDRECV 1313 /* POSIX MQ send/receive record type */
-+#define AUDIT_MQ_NOTIFY 1314 /* POSIX MQ notify record type */
-+#define AUDIT_MQ_GETSETATTR 1315 /* POSIX MQ get/set attribute record type */
-+#define AUDIT_KERNEL_OTHER 1316 /* For use by 3rd party modules */
-+#define AUDIT_FD_PAIR 1317 /* audit record for pipe/socketpair */
-+#define AUDIT_OBJ_PID 1318 /* ptrace target */
-+#define AUDIT_TTY 1319 /* Input on an administrative TTY */
-+#define AUDIT_EOE 1320 /* End of multi-record event */
-+#define AUDIT_BPRM_FCAPS 1321 /* Information about fcaps increasing perms */
-+#define AUDIT_CAPSET 1322 /* Record showing argument to sys_capset */
-+#define AUDIT_MMAP 1323 /* Record showing descriptor and flags in mmap */
-+#define AUDIT_NETFILTER_PKT 1324 /* Packets traversing netfilter chains */
-+#define AUDIT_NETFILTER_CFG 1325 /* Netfilter chain modifications */
-+#define AUDIT_SECCOMP 1326 /* Secure Computing event */
-+
-+#define AUDIT_AVC 1400 /* SE Linux avc denial or grant */
-+#define AUDIT_SELINUX_ERR 1401 /* Internal SE Linux Errors */
-+#define AUDIT_AVC_PATH 1402 /* dentry, vfsmount pair from avc */
-+#define AUDIT_MAC_POLICY_LOAD 1403 /* Policy file load */
-+#define AUDIT_MAC_STATUS 1404 /* Changed enforcing,permissive,off */
-+#define AUDIT_MAC_CONFIG_CHANGE 1405 /* Changes to booleans */
-+#define AUDIT_MAC_UNLBL_ALLOW 1406 /* NetLabel: allow unlabeled traffic */
-+#define AUDIT_MAC_CIPSOV4_ADD 1407 /* NetLabel: add CIPSOv4 DOI entry */
-+#define AUDIT_MAC_CIPSOV4_DEL 1408 /* NetLabel: del CIPSOv4 DOI entry */
-+#define AUDIT_MAC_MAP_ADD 1409 /* NetLabel: add LSM domain mapping */
-+#define AUDIT_MAC_MAP_DEL 1410 /* NetLabel: del LSM domain mapping */
-+#define AUDIT_MAC_IPSEC_ADDSA 1411 /* Not used */
-+#define AUDIT_MAC_IPSEC_DELSA 1412 /* Not used */
-+#define AUDIT_MAC_IPSEC_ADDSPD 1413 /* Not used */
-+#define AUDIT_MAC_IPSEC_DELSPD 1414 /* Not used */
-+#define AUDIT_MAC_IPSEC_EVENT 1415 /* Audit an IPSec event */
-+#define AUDIT_MAC_UNLBL_STCADD 1416 /* NetLabel: add a static label */
-+#define AUDIT_MAC_UNLBL_STCDEL 1417 /* NetLabel: del a static label */
-+
-+#define AUDIT_FIRST_KERN_ANOM_MSG 1700
-+#define AUDIT_LAST_KERN_ANOM_MSG 1799
-+#define AUDIT_ANOM_PROMISCUOUS 1700 /* Device changed promiscuous mode */
-+#define AUDIT_ANOM_ABEND 1701 /* Process ended abnormally */
-+#define AUDIT_ANOM_LINK 1702 /* Suspicious use of file links */
-+#define AUDIT_INTEGRITY_DATA 1800 /* Data integrity verification */
-+#define AUDIT_INTEGRITY_METADATA 1801 /* Metadata integrity verification */
-+#define AUDIT_INTEGRITY_STATUS 1802 /* Integrity enable status */
-+#define AUDIT_INTEGRITY_HASH 1803 /* Integrity HASH type */
-+#define AUDIT_INTEGRITY_PCR 1804 /* PCR invalidation msgs */
-+#define AUDIT_INTEGRITY_RULE 1805 /* policy rule */
-+
-+#define AUDIT_KERNEL 2000 /* Asynchronous audit record. NOT A REQUEST. */
-+
-+/* Rule flags */
-+#define AUDIT_FILTER_USER 0x00 /* Apply rule to user-generated messages */
-+#define AUDIT_FILTER_TASK 0x01 /* Apply rule at task creation (not syscall) */
-+#define AUDIT_FILTER_ENTRY 0x02 /* Apply rule at syscall entry */
-+#define AUDIT_FILTER_WATCH 0x03 /* Apply rule to file system watches */
-+#define AUDIT_FILTER_EXIT 0x04 /* Apply rule at syscall exit */
-+#define AUDIT_FILTER_TYPE 0x05 /* Apply rule at audit_log_start */
-+
-+#define AUDIT_NR_FILTERS 6
-+
-+#define AUDIT_FILTER_PREPEND 0x10 /* Prepend to front of list */
-+
-+/* Rule actions */
-+#define AUDIT_NEVER 0 /* Do not build context if rule matches */
-+#define AUDIT_POSSIBLE 1 /* Build context if rule matches */
-+#define AUDIT_ALWAYS 2 /* Generate audit record if rule matches */
-+
-+/* Rule structure sizes -- if these change, different AUDIT_ADD and
-+ * AUDIT_LIST commands must be implemented. */
-+#define AUDIT_MAX_FIELDS 64
-+#define AUDIT_MAX_KEY_LEN 256
-+#define AUDIT_BITMASK_SIZE 64
-+#define AUDIT_WORD(nr) ((uint32_t)((nr)/32))
-+#define AUDIT_BIT(nr) (1 << ((nr) - AUDIT_WORD(nr)*32))
-+
-+#define AUDIT_SYSCALL_CLASSES 16
-+#define AUDIT_CLASS_DIR_WRITE 0
-+#define AUDIT_CLASS_DIR_WRITE_32 1
-+#define AUDIT_CLASS_CHATTR 2
-+#define AUDIT_CLASS_CHATTR_32 3
-+#define AUDIT_CLASS_READ 4
-+#define AUDIT_CLASS_READ_32 5
-+#define AUDIT_CLASS_WRITE 6
-+#define AUDIT_CLASS_WRITE_32 7
-+#define AUDIT_CLASS_SIGNAL 8
-+#define AUDIT_CLASS_SIGNAL_32 9
-+
-+/* This bitmask is used to validate user input. It represents all bits that
-+ * are currently used in an audit field constant understood by the kernel.
-+ * If you are adding a new #define AUDIT_<whatever>, please ensure that
-+ * AUDIT_UNUSED_BITS is updated if need be. */
-+#define AUDIT_UNUSED_BITS 0x07FFFC00
-+
-+/* AUDIT_FIELD_COMPARE rule list */
-+#define AUDIT_COMPARE_UID_TO_OBJ_UID 1
-+#define AUDIT_COMPARE_GID_TO_OBJ_GID 2
-+#define AUDIT_COMPARE_EUID_TO_OBJ_UID 3
-+#define AUDIT_COMPARE_EGID_TO_OBJ_GID 4
-+#define AUDIT_COMPARE_AUID_TO_OBJ_UID 5
-+#define AUDIT_COMPARE_SUID_TO_OBJ_UID 6
-+#define AUDIT_COMPARE_SGID_TO_OBJ_GID 7
-+#define AUDIT_COMPARE_FSUID_TO_OBJ_UID 8
-+#define AUDIT_COMPARE_FSGID_TO_OBJ_GID 9
-+
-+#define AUDIT_COMPARE_UID_TO_AUID 10
-+#define AUDIT_COMPARE_UID_TO_EUID 11
-+#define AUDIT_COMPARE_UID_TO_FSUID 12
-+#define AUDIT_COMPARE_UID_TO_SUID 13
-+
-+#define AUDIT_COMPARE_AUID_TO_FSUID 14
-+#define AUDIT_COMPARE_AUID_TO_SUID 15
-+#define AUDIT_COMPARE_AUID_TO_EUID 16
-+
-+#define AUDIT_COMPARE_EUID_TO_SUID 17
-+#define AUDIT_COMPARE_EUID_TO_FSUID 18
-+
-+#define AUDIT_COMPARE_SUID_TO_FSUID 19
-+
-+#define AUDIT_COMPARE_GID_TO_EGID 20
-+#define AUDIT_COMPARE_GID_TO_FSGID 21
-+#define AUDIT_COMPARE_GID_TO_SGID 22
-+
-+#define AUDIT_COMPARE_EGID_TO_FSGID 23
-+#define AUDIT_COMPARE_EGID_TO_SGID 24
-+#define AUDIT_COMPARE_SGID_TO_FSGID 25
-+
-+#define AUDIT_MAX_FIELD_COMPARE AUDIT_COMPARE_SGID_TO_FSGID
-+
-+/* Rule fields */
-+ /* These are useful when checking the
-+ * task structure at task creation time
-+ * (AUDIT_PER_TASK). */
-+#define AUDIT_PID 0
-+#define AUDIT_UID 1
-+#define AUDIT_EUID 2
-+#define AUDIT_SUID 3
-+#define AUDIT_FSUID 4
-+#define AUDIT_GID 5
-+#define AUDIT_EGID 6
-+#define AUDIT_SGID 7
-+#define AUDIT_FSGID 8
-+#define AUDIT_LOGINUID 9
-+#define AUDIT_PERS 10
-+#define AUDIT_ARCH 11
-+#define AUDIT_MSGTYPE 12
-+#define AUDIT_SUBJ_USER 13 /* security label user */
-+#define AUDIT_SUBJ_ROLE 14 /* security label role */
-+#define AUDIT_SUBJ_TYPE 15 /* security label type */
-+#define AUDIT_SUBJ_SEN 16 /* security label sensitivity label */
-+#define AUDIT_SUBJ_CLR 17 /* security label clearance label */
-+#define AUDIT_PPID 18
-+#define AUDIT_OBJ_USER 19
-+#define AUDIT_OBJ_ROLE 20
-+#define AUDIT_OBJ_TYPE 21
-+#define AUDIT_OBJ_LEV_LOW 22
-+#define AUDIT_OBJ_LEV_HIGH 23
-+#define AUDIT_LOGINUID_SET 24
-+
-+ /* These are ONLY useful when checking
-+ * at syscall exit time (AUDIT_AT_EXIT). */
-+#define AUDIT_DEVMAJOR 100
-+#define AUDIT_DEVMINOR 101
-+#define AUDIT_INODE 102
-+#define AUDIT_EXIT 103
-+#define AUDIT_SUCCESS 104 /* exit >= 0; value ignored */
-+#define AUDIT_WATCH 105
-+#define AUDIT_PERM 106
-+#define AUDIT_DIR 107
-+#define AUDIT_FILETYPE 108
-+#define AUDIT_OBJ_UID 109
-+#define AUDIT_OBJ_GID 110
-+#define AUDIT_FIELD_COMPARE 111
-+
-+#define AUDIT_ARG0 200
-+#define AUDIT_ARG1 (AUDIT_ARG0+1)
-+#define AUDIT_ARG2 (AUDIT_ARG0+2)
-+#define AUDIT_ARG3 (AUDIT_ARG0+3)
-+
-+#define AUDIT_FILTERKEY 210
-+
-+#define AUDIT_NEGATE 0x80000000
-+
-+/* These are the supported operators.
-+ * 4 2 1 8
-+ * = > < ?
-+ * ----------
-+ * 0 0 0 0 00 nonsense
-+ * 0 0 0 1 08 & bit mask
-+ * 0 0 1 0 10 <
-+ * 0 1 0 0 20 >
-+ * 0 1 1 0 30 !=
-+ * 1 0 0 0 40 =
-+ * 1 0 0 1 48 &= bit test
-+ * 1 0 1 0 50 <=
-+ * 1 1 0 0 60 >=
-+ * 1 1 1 1 78 all operators
-+ */
-+#define AUDIT_BIT_MASK 0x08000000
-+#define AUDIT_LESS_THAN 0x10000000
-+#define AUDIT_GREATER_THAN 0x20000000
-+#define AUDIT_NOT_EQUAL 0x30000000
-+#define AUDIT_EQUAL 0x40000000
-+#define AUDIT_BIT_TEST (AUDIT_BIT_MASK|AUDIT_EQUAL)
-+#define AUDIT_LESS_THAN_OR_EQUAL (AUDIT_LESS_THAN|AUDIT_EQUAL)
-+#define AUDIT_GREATER_THAN_OR_EQUAL (AUDIT_GREATER_THAN|AUDIT_EQUAL)
-+#define AUDIT_OPERATORS (AUDIT_EQUAL|AUDIT_NOT_EQUAL|AUDIT_BIT_MASK)
-+
-+enum {
-+ Audit_equal,
-+ Audit_not_equal,
-+ Audit_bitmask,
-+ Audit_bittest,
-+ Audit_lt,
-+ Audit_gt,
-+ Audit_le,
-+ Audit_ge,
-+ Audit_bad
-+};
-+
-+/* Status symbols */
-+ /* Mask values */
-+#define AUDIT_STATUS_ENABLED 0x0001
-+#define AUDIT_STATUS_FAILURE 0x0002
-+#define AUDIT_STATUS_PID 0x0004
-+#define AUDIT_STATUS_RATE_LIMIT 0x0008
-+#define AUDIT_STATUS_BACKLOG_LIMIT 0x0010
-+ /* Failure-to-log actions */
-+#define AUDIT_FAIL_SILENT 0
-+#define AUDIT_FAIL_PRINTK 1
-+#define AUDIT_FAIL_PANIC 2
-+
-+/* distinguish syscall tables */
-+#define __AUDIT_ARCH_64BIT 0x80000000
-+#define __AUDIT_ARCH_LE 0x40000000
-+#define AUDIT_ARCH_ALPHA (EM_ALPHA|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
-+#define AUDIT_ARCH_ARM (EM_ARM|__AUDIT_ARCH_LE)
-+#define AUDIT_ARCH_ARMEB (EM_ARM)
-+#define AUDIT_ARCH_CRIS (EM_CRIS|__AUDIT_ARCH_LE)
-+#define AUDIT_ARCH_FRV (EM_FRV)
-+#define AUDIT_ARCH_I386 (EM_386|__AUDIT_ARCH_LE)
-+#define AUDIT_ARCH_IA64 (EM_IA_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
-+#define AUDIT_ARCH_M32R (EM_M32R)
-+#define AUDIT_ARCH_M68K (EM_68K)
-+#define AUDIT_ARCH_MIPS (EM_MIPS)
-+#define AUDIT_ARCH_MIPSEL (EM_MIPS|__AUDIT_ARCH_LE)
-+#define AUDIT_ARCH_MIPS64 (EM_MIPS|__AUDIT_ARCH_64BIT)
-+#define AUDIT_ARCH_MIPSEL64 (EM_MIPS|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
-+#define AUDIT_ARCH_OPENRISC (EM_OPENRISC)
-+#define AUDIT_ARCH_PARISC (EM_PARISC)
-+#define AUDIT_ARCH_PARISC64 (EM_PARISC|__AUDIT_ARCH_64BIT)
-+#define AUDIT_ARCH_PPC (EM_PPC)
-+#define AUDIT_ARCH_PPC64 (EM_PPC64|__AUDIT_ARCH_64BIT)
-+#define AUDIT_ARCH_S390 (EM_S390)
-+#define AUDIT_ARCH_S390X (EM_S390|__AUDIT_ARCH_64BIT)
-+#define AUDIT_ARCH_SH (EM_SH)
-+#define AUDIT_ARCH_SHEL (EM_SH|__AUDIT_ARCH_LE)
-+#define AUDIT_ARCH_SH64 (EM_SH|__AUDIT_ARCH_64BIT)
-+#define AUDIT_ARCH_SHEL64 (EM_SH|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
-+#define AUDIT_ARCH_SPARC (EM_SPARC)
-+#define AUDIT_ARCH_SPARC64 (EM_SPARCV9|__AUDIT_ARCH_64BIT)
-+#define AUDIT_ARCH_X86_64 (EM_X86_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
-+
-+#define AUDIT_PERM_EXEC 1
-+#define AUDIT_PERM_WRITE 2
-+#define AUDIT_PERM_READ 4
-+#define AUDIT_PERM_ATTR 8
-+
-+/* MAX_AUDIT_MESSAGE_LENGTH is set in audit:lib/libaudit.h as:
-+ * 8970 // PATH_MAX*2+CONTEXT_SIZE*2+11+256+1
-+ * max header+body+tailer: 44 + 29 + 32 + 262 + 7 + pad
-+ */
-+#define AUDIT_MESSAGE_TEXT_MAX 8560
-+
-+struct audit_status {
-+ uint32_t mask; /* Bit mask for valid entries */
-+ uint32_t enabled; /* 1 = enabled, 0 = disabled */
-+ uint32_t failure; /* Failure-to-log action */
-+ uint32_t pid; /* pid of auditd process */
-+ uint32_t rate_limit; /* messages rate limit (per second) */
-+ uint32_t backlog_limit; /* waiting messages limit */
-+ uint32_t lost; /* messages lost */
-+ uint32_t backlog; /* messages waiting in queue */
-+};
-+
-+struct audit_features {
-+#define AUDIT_FEATURE_VERSION 1
-+ uint32_t vers;
-+ uint32_t mask; /* which bits we are dealing with */
-+ uint32_t features; /* which feature to enable/disable */
-+ uint32_t lock; /* which features to lock */
-+};
-+
-+#define AUDIT_FEATURE_ONLY_UNSET_LOGINUID 0
-+#define AUDIT_FEATURE_LOGINUID_IMMUTABLE 1
-+#define AUDIT_LAST_FEATURE AUDIT_FEATURE_LOGINUID_IMMUTABLE
-+
-+#define audit_feature_valid(x) ((x) >= 0 && (x) <= AUDIT_LAST_FEATURE)
-+#define AUDIT_FEATURE_TO_MASK(x) (1 << ((x) & 31)) /* mask for uint32_t */
-+
-+struct audit_tty_status {
-+ uint32_t enabled; /* 1 = enabled, 0 = disabled */
-+ uint32_t log_passwd; /* 1 = enabled, 0 = disabled */
-+};
-+
-+#define AUDIT_UID_UNSET (unsigned int)-1
-+
-+/* audit_rule_data supports filter rules with both integer and string
-+ * fields. It corresponds with AUDIT_ADD_RULE, AUDIT_DEL_RULE and
-+ * AUDIT_LIST_RULES requests.
-+ */
-+struct audit_rule_data {
-+ uint32_t flags; /* AUDIT_PER_{TASK,CALL}, AUDIT_PREPEND */
-+ uint32_t action; /* AUDIT_NEVER, AUDIT_POSSIBLE, AUDIT_ALWAYS */
-+ uint32_t field_count;
-+ uint32_t mask[AUDIT_BITMASK_SIZE]; /* syscall(s) affected */
-+ uint32_t fields[AUDIT_MAX_FIELDS];
-+ uint32_t values[AUDIT_MAX_FIELDS];
-+ uint32_t fieldflags[AUDIT_MAX_FIELDS];
-+ uint32_t buflen; /* total length of string fields */
-+ char buf[0]; /* string fields buffer */
-+};
-+
-+/* audit_rule is supported to maintain backward compatibility with
-+ * userspace. It supports integer fields only and corresponds to
-+ * AUDIT_ADD, AUDIT_DEL and AUDIT_LIST requests.
-+ */
-+struct audit_rule { /* for AUDIT_LIST, AUDIT_ADD, and AUDIT_DEL */
-+ uint32_t flags; /* AUDIT_PER_{TASK,CALL}, AUDIT_PREPEND */
-+ uint32_t action; /* AUDIT_NEVER, AUDIT_POSSIBLE, AUDIT_ALWAYS */
-+ uint32_t field_count;
-+ uint32_t mask[AUDIT_BITMASK_SIZE];
-+ uint32_t fields[AUDIT_MAX_FIELDS];
-+ uint32_t values[AUDIT_MAX_FIELDS];
-+};
-+
-+#endif /* _UAPI_LINUX_AUDIT_H_ */
-diff -urN -x .git dietlibc-0.33/include/linux/elf-em.h dietlibc/include/linux/elf-em.h
---- dietlibc-0.33/include/linux/elf-em.h 1970-01-01 00:00:00.000000000 +0000
-+++ dietlibc/include/linux/elf-em.h 2015-01-01 12:14:43.471605562 +0000
-@@ -0,0 +1,57 @@
-+#ifndef _LINUX_ELF_EM_H
-+#define _LINUX_ELF_EM_H
-+
-+/* These constants define the various ELF target machines */
-+#define EM_NONE 0
-+#define EM_M32 1
-+#define EM_SPARC 2
-+#define EM_386 3
-+#define EM_68K 4
-+#define EM_88K 5
-+#define EM_486 6 /* Perhaps disused */
-+#define EM_860 7
-+#define EM_MIPS 8 /* MIPS R3000 (officially, big-endian only) */
-+ /* Next two are historical and binaries and
-+ modules of these types will be rejected by
-+ Linux. */
-+#define EM_MIPS_RS3_LE 10 /* MIPS R3000 little-endian */
-+#define EM_MIPS_RS4_BE 10 /* MIPS R4000 big-endian */
-+
-+#define EM_PARISC 15 /* HPPA */
-+#define EM_SPARC32PLUS 18 /* Sun's "v8plus" */
-+#define EM_PPC 20 /* PowerPC */
-+#define EM_PPC64 21 /* PowerPC64 */
-+#define EM_SPU 23 /* Cell BE SPU */
-+#define EM_ARM 40 /* ARM 32 bit */
-+#define EM_SH 42 /* SuperH */
-+#define EM_SPARCV9 43 /* SPARC v9 64-bit */
-+#define EM_IA_64 50 /* HP/Intel IA-64 */
-+#define EM_X86_64 62 /* AMD x86-64 */
-+#define EM_S390 22 /* IBM S/390 */
-+#define EM_CRIS 76 /* Axis Communications 32-bit embedded processor */
-+#define EM_V850 87 /* NEC v850 */
-+#define EM_M32R 88 /* Renesas M32R */
-+#define EM_MN10300 89 /* Panasonic/MEI MN10300, AM33 */
-+#define EM_BLACKFIN 106 /* ADI Blackfin Processor */
-+#define EM_TI_C6000 140 /* TI C6X DSPs */
-+#define EM_AARCH64 183 /* ARM 64 bit */
-+#define EM_FRV 0x5441 /* Fujitsu FR-V */
-+#define EM_AVR32 0x18ad /* Atmel AVR32 */
-+
<Skipped 10867 lines>
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/dietlibc.git/commitdiff/8f178a7a358c8d7146d5a1dcb0d1cb1a79109210
More information about the pld-cvs-commit
mailing list