217f935160
Package-Manager: portage-2.2.7 RepoMan-Options: --force
979 lines
22 KiB
Diff
979 lines
22 KiB
Diff
Description: Upstream changes introduced in version 0.33~cvs20110710-1
|
|
This patch has been created by dpkg-source during the package build.
|
|
Here's the last changelog entry, hopefully it gives details on why
|
|
those changes were made:
|
|
.
|
|
dietlibc (0.33~cvs20110710-1) experimental; urgency=low
|
|
.
|
|
* New upstream pre-release
|
|
* Bump Standards-Version
|
|
* Use DEP5 as copyright format
|
|
* Don't build arm* with DEBUG flag
|
|
* Use debian source format 3.0 (quilt)
|
|
* Move tc523086.c into debian/test directory
|
|
* Add local-options file
|
|
* Refresh debian patchset
|
|
* parisc/strstr.S: remove local removal
|
|
* strip elftrunc and dnsd resulting binaries
|
|
.
|
|
The person named in the Author field signed this changelog entry.
|
|
Author: Hector Oron <zumbi@debian.org>
|
|
|
|
---
|
|
|
|
Index: pkg-dietlibc/syscalls.s/fadvise64.S
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/syscalls.s/fadvise64.S 2012-03-25 15:11:10.000000000 +0000
|
|
+++ pkg-dietlibc/syscalls.s/fadvise64.S 2012-03-25 15:12:55.000000000 +0000
|
|
@@ -3,15 +3,14 @@
|
|
|
|
#include "syscalls.h"
|
|
|
|
+#ifdef __NR_fadvise64
|
|
+syscall(fadvise64,fadvise64)
|
|
+
|
|
#ifndef __NR_fadvise64_64
|
|
+.set posix_fadvise, fadvise64
|
|
.globl posix_fadvise
|
|
-.type posix_fadvise,@function
|
|
-posix_fadvise:
|
|
#endif
|
|
|
|
-#ifdef __NR_fadvise64
|
|
-syscall(fadvise64,fadvise64)
|
|
-
|
|
#endif
|
|
|
|
#endif
|
|
Index: pkg-dietlibc/arm/__aeabi_unwind_cpp.S
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/arm/__aeabi_unwind_cpp.S 2012-03-25 15:07:28.000000000 +0000
|
|
+++ pkg-dietlibc/arm/__aeabi_unwind_cpp.S 2012-03-25 15:12:55.000000000 +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
|
|
Index: pkg-dietlibc/arm/__fadvise.c
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/arm/__fadvise.c 2012-03-25 15:07:28.000000000 +0000
|
|
+++ pkg-dietlibc/arm/__fadvise.c 2012-03-25 15:12:55.000000000 +0000
|
|
@@ -1,7 +1,10 @@
|
|
-#include <fcntl.h>
|
|
#include "syscalls.h"
|
|
|
|
#ifndef __NR_fadvise64
|
|
+#define _LINUX_SOURCE
|
|
+#include <fcntl.h>
|
|
+#include <unistd.h>
|
|
+
|
|
long fadvise64_64(int fd, off64_t offset, off64_t len, int advice)
|
|
{
|
|
extern long __arm_fadvise64_64(int fd, int advice, off64_t offset, off64_t len);
|
|
Index: pkg-dietlibc/arm/__guard.S
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/arm/__guard.S 2012-03-25 15:07:28.000000000 +0000
|
|
+++ pkg-dietlibc/arm/__guard.S 2012-03-25 15:12:55.000000000 +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
|
|
Index: pkg-dietlibc/arm/__longjmp.S
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/arm/__longjmp.S 2012-03-25 15:07:28.000000000 +0000
|
|
+++ pkg-dietlibc/arm/__longjmp.S 2012-03-25 15:12:55.000000000 +0000
|
|
@@ -1,11 +1,24 @@
|
|
-.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
|
|
+
|
|
+#if !defined(__SOFTFP_) || !defined(__ARM_EABI__)
|
|
+# if __ARM_ARCH__ >= 6
|
|
+ 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
|
|
Index: pkg-dietlibc/arm/__testandset.S
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/arm/__testandset.S 2012-03-25 15:07:28.000000000 +0000
|
|
+++ pkg-dietlibc/arm/__testandset.S 2012-03-25 15:12:55.000000000 +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
|
|
Index: pkg-dietlibc/arm/arm-features.h
|
|
===================================================================
|
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
+++ pkg-dietlibc/arm/arm-features.h 2012-03-25 15:12:55.000000000 +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__) || !defined(__ARM_EABI__)
|
|
+# 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 */
|
|
Index: pkg-dietlibc/arm/clone.S
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/arm/clone.S 2012-03-25 15:07:28.000000000 +0000
|
|
+++ pkg-dietlibc/arm/clone.S 2012-03-25 15:12:55.000000000 +0000
|
|
@@ -1,11 +1,8 @@
|
|
|
|
#include <errno.h>
|
|
#include "syscalls.h"
|
|
+#include "arm-features.h"
|
|
|
|
- .text
|
|
- .weak clone
|
|
- .global __clone
|
|
-
|
|
@
|
|
@ Some slightly tricky stuff here... edit with care :-)
|
|
@
|
|
@@ -19,9 +16,8 @@
|
|
@ ; 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
|
|
@@ -51,7 +47,8 @@
|
|
beq 1f
|
|
ldmfd sp!, {r4, r7}
|
|
blt __unified_syscall @ (return code < 0): handle as an error
|
|
- bx lr
|
|
+ RET
|
|
+
|
|
1:
|
|
#ifdef RESET_PID
|
|
tst ip, #CLONE_THREAD
|
|
@@ -76,12 +73,13 @@
|
|
|
|
@ ; 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 +99,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
|
|
Index: pkg-dietlibc/arm/dyn_syscalls.S
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/arm/dyn_syscalls.S 2012-03-25 15:07:28.000000000 +0000
|
|
+++ pkg-dietlibc/arm/dyn_syscalls.S 2012-03-25 15:12:55.000000000 +0000
|
|
@@ -8,11 +8,15 @@
|
|
|
|
#include <dietfeatures.h>
|
|
#include "syscalls.h"
|
|
+#include "arm-features.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 +29,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 +110,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 +285,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
|
|
Index: pkg-dietlibc/arm/mcount.S
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/arm/mcount.S 2012-03-25 15:07:28.000000000 +0000
|
|
+++ pkg-dietlibc/arm/mcount.S 2012-03-25 15:12:55.000000000 +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
|
|
Index: pkg-dietlibc/arm/md5asm.S
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/arm/md5asm.S 2012-03-25 15:07:28.000000000 +0000
|
|
+++ pkg-dietlibc/arm/md5asm.S 2012-03-25 15:12:55.000000000 +0000
|
|
@@ -50,45 +50,35 @@
|
|
*****************************************************************************/
|
|
|
|
#include <endian.h>
|
|
+#include "arm-features.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:
|
|
-
|
|
+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
|
|
- mov pc, lr @ return
|
|
+ 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);
|
|
@ --
|
|
|
|
-MD5Update:
|
|
-
|
|
+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]
|
|
@@ -122,12 +112,13 @@
|
|
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
|
|
@@ -148,6 +139,7 @@
|
|
.word 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391, (17f-19f-4)
|
|
.word 0x6e4120A9, 0x20657264, 0x7543634d, 0x00796472, (19f-19f-4)
|
|
|
|
+ .align 2
|
|
__MD5Transform:
|
|
|
|
cmp r2, #0
|
|
Index: pkg-dietlibc/arm/setjmp.S
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/arm/setjmp.S 2012-03-25 15:07:28.000000000 +0000
|
|
+++ pkg-dietlibc/arm/setjmp.S 2012-03-25 15:12:55.000000000 +0000
|
|
@@ -1,17 +1,40 @@
|
|
-.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
|
|
+
|
|
+#if !defined(__SOFTFP_) || !defined(__ARM_EABI__)
|
|
+# if __ARM_ARCH__ >= 6
|
|
+ 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
|
|
Index: pkg-dietlibc/arm/start.S
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/arm/start.S 2012-03-25 15:07:28.000000000 +0000
|
|
+++ pkg-dietlibc/arm/start.S 2012-03-25 15:12:55.000000000 +0000
|
|
@@ -1,23 +1,11 @@
|
|
|
|
#include "dietfeatures.h"
|
|
#include "syscalls.h"
|
|
+#include "arm-features.h"
|
|
|
|
- .text
|
|
#ifdef __ARM_EABI__
|
|
- .align 4
|
|
-#else
|
|
- .align 2
|
|
-#endif
|
|
-
|
|
- .global _start
|
|
- .weak exit
|
|
- .global _exit
|
|
-
|
|
-
|
|
-#ifdef __ARM_EABI__
|
|
-
|
|
-_start:
|
|
|
|
+FUNC_START _start
|
|
mov fp, #0 @ clear the frame pointer
|
|
ldr a1, [sp] @ argc
|
|
add a2, sp, #4 @ argv
|
|
@@ -25,6 +13,17 @@
|
|
add a3, a2, a1, lsl #2 @ &argv[argc]
|
|
add a3, a3, #4 @ envp
|
|
str a3, [ip, #0] @ environ = envp
|
|
+
|
|
+#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 main
|
|
|
|
@
|
|
@@ -32,21 +31,22 @@
|
|
@ 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
|
|
-
|
|
+FUNC_END exit
|
|
+FUNC_END _exit
|
|
|
|
#else
|
|
|
|
|
|
-_start:
|
|
-
|
|
+FUNC_START _start
|
|
#ifdef WANT_DYNAMIC
|
|
mov a4, a1 @ save dynamic ld.so _fini
|
|
#endif
|
|
@@ -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,21 @@
|
|
@ 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)
|
|
Index: pkg-dietlibc/arm/strcpy.S
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/arm/strcpy.S 2012-03-25 15:07:28.000000000 +0000
|
|
+++ pkg-dietlibc/arm/strcpy.S 2012-03-25 15:12:55.000000000 +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
|
|
Index: pkg-dietlibc/arm/strlen.S
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/arm/strlen.S 2012-03-25 15:07:28.000000000 +0000
|
|
+++ pkg-dietlibc/arm/strlen.S 2012-03-25 15:12:55.000000000 +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
|
|
Index: pkg-dietlibc/arm/syscalls.h
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/arm/syscalls.h 2012-03-25 15:07:28.000000000 +0000
|
|
+++ pkg-dietlibc/arm/syscalls.h 2012-03-25 15:12:55.000000000 +0000
|
|
@@ -700,9 +700,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
|
|
@@ -771,70 +771,30 @@
|
|
|
|
#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 +806,7 @@
|
|
.else
|
|
b __unified_syscall
|
|
.endif
|
|
+FUNC_END \sym
|
|
.endm
|
|
|
|
#endif
|
|
Index: pkg-dietlibc/arm/unified.S
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/arm/unified.S 2012-03-25 15:07:28.000000000 +0000
|
|
+++ pkg-dietlibc/arm/unified.S 2012-03-25 15:12:55.000000000 +0000
|
|
@@ -1,21 +1,28 @@
|
|
|
|
#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
|
|
rsbcs r2, r0, #0
|
|
ldrcs r3, 1f
|
|
@@ -25,17 +32,18 @@
|
|
.balign 4
|
|
1:
|
|
.word errno
|
|
+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:
|
|
+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 +61,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
|
|
Index: pkg-dietlibc/arm/waitpid.S
|
|
===================================================================
|
|
--- pkg-dietlibc.orig/arm/waitpid.S 2012-03-25 15:07:28.000000000 +0000
|
|
+++ pkg-dietlibc/arm/waitpid.S 2012-03-25 15:12:55.000000000 +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:
|
|
+#include "arm-features.h"
|
|
+
|
|
+FUNC_START_WEAK waitpid
|
|
+FUNC_START __libc_waitpid
|
|
mov r3, #0
|
|
b wait4
|
|
- .size waitpid, .-waitpid
|
|
+FUNC_END __libc_waitpid
|
|
+FUNC_END waitpid
|