* sysdeps/arm/sysdep.h: Define __USE_BX__ if bx is available.
Use it instead of __THUMB_INTERWORK__. Make RETINSTR take only a condition and a register. * sysdeps/arm/dl-machine.h: Use __USE_BX__ instead of __THUMB_INTERWORK__. (_dl_start_user): Use BX. * sysdeps/arm/strlen.S: Use DO_RET. * sysdeps/unix/arm/brk.S, sysdeps/unix/arm/fork.S, sysdeps/unix/arm/sysdep.S, sysdeps/unix/arm/sysdep.h: Likewise. * sysdeps/unix/sysv/linux/arm/clone.S, sysdeps/unix/sysv/linux/arm/mmap.S, sysdeps/unix/sysv/linux/arm/mmap64.S, sysdeps/unix/sysv/linux/arm/socket.S, sysdeps/unix/sysv/linux/arm/sysdep.h, sysdeps/unix/sysv/linux/arm/vfork.S: Update uses of RETINSTR.
This commit is contained in:
parent
3f488b9cdd
commit
577e4aa1ec
18
ChangeLog
18
ChangeLog
@ -1,3 +1,21 @@
|
|||||||
|
2004-11-18 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
|
* sysdeps/arm/sysdep.h: Define __USE_BX__ if bx is available.
|
||||||
|
Use it instead of __THUMB_INTERWORK__. Make RETINSTR take
|
||||||
|
only a condition and a register.
|
||||||
|
* sysdeps/arm/dl-machine.h: Use __USE_BX__ instead of
|
||||||
|
__THUMB_INTERWORK__.
|
||||||
|
(_dl_start_user): Use BX.
|
||||||
|
* sysdeps/arm/strlen.S: Use DO_RET.
|
||||||
|
* sysdeps/unix/arm/brk.S, sysdeps/unix/arm/fork.S,
|
||||||
|
sysdeps/unix/arm/sysdep.S, sysdeps/unix/arm/sysdep.h: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/arm/clone.S,
|
||||||
|
sysdeps/unix/sysv/linux/arm/mmap.S,
|
||||||
|
sysdeps/unix/sysv/linux/arm/mmap64.S,
|
||||||
|
sysdeps/unix/sysv/linux/arm/socket.S,
|
||||||
|
sysdeps/unix/sysv/linux/arm/sysdep.h,
|
||||||
|
sysdeps/unix/sysv/linux/arm/vfork.S: Update uses of RETINSTR.
|
||||||
|
|
||||||
2004-12-02 Roland McGrath <roland@redhat.com>
|
2004-12-02 Roland McGrath <roland@redhat.com>
|
||||||
|
|
||||||
* extra-lib.mk (object-suffixes-$(lib)): Add .oS when
|
* extra-lib.mk (object-suffixes-$(lib)): Add .oS when
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2004-11-18 Daniel Jacobowitz <dan@codesourcery.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/arm/sysdep-cancel.h: Update RETINSTR use.
|
||||||
|
* sysdeps/unix/sysv/linux/arm/vfork.S: Likewise.
|
||||||
|
|
||||||
2004-12-02 Roland McGrath <roland@redhat.com>
|
2004-12-02 Roland McGrath <roland@redhat.com>
|
||||||
|
|
||||||
* Makefile (libpthread-nonshared): Variable removed.
|
* Makefile (libpthread-nonshared): Variable removed.
|
||||||
|
@ -112,7 +112,7 @@ extern int __local_multiple_threads attribute_hidden;
|
|||||||
# define MAYBE_SAVE_LR \
|
# define MAYBE_SAVE_LR \
|
||||||
str lr, [sp, $-4]!;
|
str lr, [sp, $-4]!;
|
||||||
# define PSEUDO_RET_MOV \
|
# define PSEUDO_RET_MOV \
|
||||||
RETINSTR(movcc, pc, lr); \
|
RETINSTR(cc, lr); \
|
||||||
b PLTJMP(SYSCALL_ERROR)
|
b PLTJMP(SYSCALL_ERROR)
|
||||||
# define PSEUDO_PROLOGUE
|
# define PSEUDO_PROLOGUE
|
||||||
# else
|
# else
|
||||||
|
@ -46,7 +46,7 @@ ENTRY (__vfork)
|
|||||||
|
|
||||||
swi __NR_vfork
|
swi __NR_vfork
|
||||||
cmn a1, #4096
|
cmn a1, #4096
|
||||||
RETINSTR(movcc, pc, lr)
|
RETINSTR(cc, lr)
|
||||||
|
|
||||||
#ifndef __ASSUME_VFORK_SYSCALL
|
#ifndef __ASSUME_VFORK_SYSCALL
|
||||||
/* Check if vfork syscall is known at all. */
|
/* Check if vfork syscall is known at all. */
|
||||||
@ -60,7 +60,7 @@ ENTRY (__vfork)
|
|||||||
/* If we don't have vfork, fork is close enough. */
|
/* If we don't have vfork, fork is close enough. */
|
||||||
swi __NR_fork
|
swi __NR_fork
|
||||||
cmn a1, #4096
|
cmn a1, #4096
|
||||||
RETINSTR(movcc, pc, lr)
|
RETINSTR(cc, lr)
|
||||||
#elif !defined __NR_vfork
|
#elif !defined __NR_vfork
|
||||||
# error "__NR_vfork not available and __ASSUME_VFORK_SYSCALL defined"
|
# error "__NR_vfork not available and __ASSUME_VFORK_SYSCALL defined"
|
||||||
#endif
|
#endif
|
||||||
|
@ -123,7 +123,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
|
|||||||
return lazy;
|
return lazy;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(__THUMB_INTERWORK__)
|
#if defined(__USE_BX__)
|
||||||
#define BX(x) "bx\t" #x
|
#define BX(x) "bx\t" #x
|
||||||
#else
|
#else
|
||||||
#define BX(x) "mov\tpc, " #x
|
#define BX(x) "mov\tpc, " #x
|
||||||
@ -293,7 +293,7 @@ _dl_start_user:\n\
|
|||||||
ldr r0, .L_FINI_PROC\n\
|
ldr r0, .L_FINI_PROC\n\
|
||||||
add r0, sl, r0\n\
|
add r0, sl, r0\n\
|
||||||
@ jump to the user_s entry point\n\
|
@ jump to the user_s entry point\n\
|
||||||
mov pc, r6\n\
|
" BX(r6) "\n\
|
||||||
.L_GET_GOT:\n\
|
.L_GET_GOT:\n\
|
||||||
.word _GLOBAL_OFFSET_TABLE_ - .L_GOT_GOT - 4\n\
|
.word _GLOBAL_OFFSET_TABLE_ - .L_GOT_GOT - 4\n\
|
||||||
.L_SKIP_ARGS:\n\
|
.L_SKIP_ARGS:\n\
|
||||||
|
@ -68,6 +68,6 @@ Llastword: @ drop through to here once we find a
|
|||||||
tstne r2, $0x00ff0000 @ (if first three all non-zero, 4th
|
tstne r2, $0x00ff0000 @ (if first three all non-zero, 4th
|
||||||
addne r0, r0, $1 @ must be zero)
|
addne r0, r0, $1 @ must be zero)
|
||||||
#endif
|
#endif
|
||||||
RETINSTR(mov,pc,lr)
|
DO_RET(lr)
|
||||||
END(strlen)
|
END(strlen)
|
||||||
libc_hidden_builtin_def (strlen)
|
libc_hidden_builtin_def (strlen)
|
||||||
|
@ -19,6 +19,11 @@
|
|||||||
|
|
||||||
#include <sysdeps/generic/sysdep.h>
|
#include <sysdeps/generic/sysdep.h>
|
||||||
|
|
||||||
|
#if (!defined (__ARM_ARCH_2__) && !defined (__ARM_ARCH_3__) \
|
||||||
|
&& !defined (__ARM_ARCH_3M__) && !defined (__ARM_ARCH_4__))
|
||||||
|
# define __USE_BX__
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __ASSEMBLER__
|
#ifdef __ASSEMBLER__
|
||||||
|
|
||||||
/* Syntactic details of assembler. */
|
/* Syntactic details of assembler. */
|
||||||
@ -50,20 +55,22 @@
|
|||||||
#ifdef __APCS_32__
|
#ifdef __APCS_32__
|
||||||
#define LOADREGS(cond, base, reglist...)\
|
#define LOADREGS(cond, base, reglist...)\
|
||||||
ldm##cond base,reglist
|
ldm##cond base,reglist
|
||||||
#define RETINSTR(instr, regs...)\
|
#ifdef __USE_BX__
|
||||||
instr regs
|
#define RETINSTR(cond, reg) \
|
||||||
#ifdef __THUMB_INTERWORK__
|
bx##cond reg
|
||||||
#define DO_RET(_reg) \
|
#define DO_RET(_reg) \
|
||||||
bx _reg
|
bx _reg
|
||||||
#else
|
#else
|
||||||
|
#define RETINSTR(cond, reg) \
|
||||||
|
mov##cond pc, reg
|
||||||
#define DO_RET(_reg) \
|
#define DO_RET(_reg) \
|
||||||
mov pc, _reg
|
mov pc, _reg
|
||||||
#endif
|
#endif
|
||||||
#else /* APCS-26 */
|
#else /* APCS-26 */
|
||||||
#define LOADREGS(cond, base, reglist...)\
|
#define LOADREGS(cond, base, reglist...)\
|
||||||
ldm##cond base,reglist^
|
ldm##cond base,reglist^
|
||||||
#define RETINSTR(instr, regs...)\
|
#define RETINSTR(cond, reg) \
|
||||||
instr##s regs
|
mov##cond##s pc, reg
|
||||||
#define DO_RET(_reg) \
|
#define DO_RET(_reg) \
|
||||||
movs pc, _reg
|
movs pc, _reg
|
||||||
#endif
|
#endif
|
||||||
|
@ -43,7 +43,7 @@ SYSCALL__ (brk, 1)
|
|||||||
#endif
|
#endif
|
||||||
str r0, [r1]
|
str r0, [r1]
|
||||||
mov r0, $0
|
mov r0, $0
|
||||||
RETINSTR(mov, pc, r14)
|
DO_RET (r14)
|
||||||
#ifdef PIC
|
#ifdef PIC
|
||||||
1: .long _GLOBAL_OFFSET_TABLE_ - 2b - 8
|
1: .long _GLOBAL_OFFSET_TABLE_ - 2b - 8
|
||||||
_cb_addr:
|
_cb_addr:
|
||||||
|
@ -27,7 +27,7 @@ SYSCALL__ (fork, 0)
|
|||||||
R0&-1==R0, and the child gets R0&0==0. */
|
R0&-1==R0, and the child gets R0&0==0. */
|
||||||
sub r1, r1, $1
|
sub r1, r1, $1
|
||||||
and r0, r0, r1
|
and r0, r0, r1
|
||||||
RETINSTR(mov, pc, r14)
|
DO_RET (r14)
|
||||||
PSEUDO_END (__fork)
|
PSEUDO_END (__fork)
|
||||||
libc_hidden_def (__fork)
|
libc_hidden_def (__fork)
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ syscall_error:
|
|||||||
ldr r1, 1f
|
ldr r1, 1f
|
||||||
str r0, [r1]
|
str r0, [r1]
|
||||||
mvn r0, $0
|
mvn r0, $0
|
||||||
RETINSTR(mov, pc, r14)
|
DO_RET (r14)
|
||||||
|
|
||||||
1: .long C_SYMBOL_NAME(errno)
|
1: .long C_SYMBOL_NAME(errno)
|
||||||
#else
|
#else
|
||||||
@ -60,7 +60,7 @@ syscall_error:
|
|||||||
0: add r2, pc, r2
|
0: add r2, pc, r2
|
||||||
str r0, [r1, r2]
|
str r0, [r1, r2]
|
||||||
mvn r0, $0
|
mvn r0, $0
|
||||||
RETINSTR(mov, pc, r14)
|
DO_RET (r14)
|
||||||
|
|
||||||
1: .word _GLOBAL_OFFSET_TABLE_ - 0b - 8
|
1: .word _GLOBAL_OFFSET_TABLE_ - 0b - 8
|
||||||
2: .word C_SYMBOL_NAME(errno)(GOTOFF)
|
2: .word C_SYMBOL_NAME(errno)(GOTOFF)
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
#ifdef __ASSEMBLER__
|
#ifdef __ASSEMBLER__
|
||||||
|
|
||||||
#define ret RETINSTR(mov, pc, r14)
|
#define ret DO_RET (r14)
|
||||||
#define MOVE(a,b) mov b,a
|
#define MOVE(a,b) mov b,a
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -45,7 +45,7 @@ ENTRY(__clone)
|
|||||||
swi SYS_ify(clone)
|
swi SYS_ify(clone)
|
||||||
movs a1, a1
|
movs a1, a1
|
||||||
blt PLTJMP(C_SYMBOL_NAME(__syscall_error))
|
blt PLTJMP(C_SYMBOL_NAME(__syscall_error))
|
||||||
RETINSTR(movne, pc, lr)
|
RETINSTR(ne, lr)
|
||||||
|
|
||||||
@ pick the function arg and call address off the stack and execute
|
@ pick the function arg and call address off the stack and execute
|
||||||
ldr r0, [sp, #4]
|
ldr r0, [sp, #4]
|
||||||
|
@ -51,7 +51,7 @@ ENTRY (__mmap)
|
|||||||
ldr r5, [sp], #4
|
ldr r5, [sp], #4
|
||||||
|
|
||||||
cmn r0, $4096
|
cmn r0, $4096
|
||||||
RETINSTR(movcc, pc, lr)
|
RETINSTR(cc, lr)
|
||||||
b PLTJMP(syscall_error)
|
b PLTJMP(syscall_error)
|
||||||
|
|
||||||
.Linval:
|
.Linval:
|
||||||
@ -83,7 +83,7 @@ ENTRY (__mmap)
|
|||||||
add sp, sp, #16
|
add sp, sp, #16
|
||||||
|
|
||||||
cmn r0, $4096
|
cmn r0, $4096
|
||||||
RETINSTR(movcc, pc, lr)
|
RETINSTR(cc, lr)
|
||||||
b PLTJMP(syscall_error);
|
b PLTJMP(syscall_error);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -43,12 +43,12 @@ ENTRY (__mmap64)
|
|||||||
# ifdef __ASSUME_MMAP2_SYSCALL
|
# ifdef __ASSUME_MMAP2_SYSCALL
|
||||||
ldr r4, [sp], #4
|
ldr r4, [sp], #4
|
||||||
ldr r5, [sp], #4
|
ldr r5, [sp], #4
|
||||||
RETINSTR(movcc, pc, lr)
|
RETINSTR(cc, lr)
|
||||||
b PLTJMP(syscall_error)
|
b PLTJMP(syscall_error)
|
||||||
# else
|
# else
|
||||||
ldrcc r4, [sp], #4
|
ldrcc r4, [sp], #4
|
||||||
ldrcc r5, [sp], #4
|
ldrcc r5, [sp], #4
|
||||||
RETINSTR(movcc, pc, lr)
|
RETINSTR(cc, lr)
|
||||||
cmn r0, $ENOSYS
|
cmn r0, $ENOSYS
|
||||||
bne .Lerror
|
bne .Lerror
|
||||||
/* The current kernel does not support mmap2. Fall back to plain
|
/* The current kernel does not support mmap2. Fall back to plain
|
||||||
|
@ -91,7 +91,7 @@ ENTRY (__socket)
|
|||||||
|
|
||||||
/* r0 is < 0 if there was an error. */
|
/* r0 is < 0 if there was an error. */
|
||||||
cmn r0, $124
|
cmn r0, $124
|
||||||
RETINSTR(movcc, pc, r14)
|
RETINSTR(cc, r14)
|
||||||
b PLTJMP(SYSCALL_ERROR)
|
b PLTJMP(SYSCALL_ERROR)
|
||||||
|
|
||||||
#if defined NEED_CANCELLATION && defined CENABLE
|
#if defined NEED_CANCELLATION && defined CENABLE
|
||||||
@ -114,7 +114,7 @@ ENTRY (__socket)
|
|||||||
|
|
||||||
/* r0 is < 0 if there was an error. */
|
/* r0 is < 0 if there was an error. */
|
||||||
cmn r0, $124
|
cmn r0, $124
|
||||||
RETINSTR(movcc, pc, r14)
|
RETINSTR(cc, r14)
|
||||||
b PLTJMP(SYSCALL_ERROR)
|
b PLTJMP(SYSCALL_ERROR)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@
|
|||||||
cmn r0, $4096;
|
cmn r0, $4096;
|
||||||
|
|
||||||
#define PSEUDO_RET \
|
#define PSEUDO_RET \
|
||||||
RETINSTR(movcc, pc, lr); \
|
RETINSTR(cc, lr); \
|
||||||
b PLTJMP(SYSCALL_ERROR)
|
b PLTJMP(SYSCALL_ERROR)
|
||||||
#undef ret
|
#undef ret
|
||||||
#define ret PSEUDO_RET
|
#define ret PSEUDO_RET
|
||||||
@ -71,7 +71,7 @@
|
|||||||
DO_CALL (syscall_name, args);
|
DO_CALL (syscall_name, args);
|
||||||
|
|
||||||
#define PSEUDO_RET_NOERRNO \
|
#define PSEUDO_RET_NOERRNO \
|
||||||
RETINSTR(mov, pc, lr);
|
DO_RET (lr);
|
||||||
|
|
||||||
#undef ret_NOERRNO
|
#undef ret_NOERRNO
|
||||||
#define ret_NOERRNO PSEUDO_RET_NOERRNO
|
#define ret_NOERRNO PSEUDO_RET_NOERRNO
|
||||||
|
@ -32,7 +32,7 @@ ENTRY (__vfork)
|
|||||||
#ifdef __NR_vfork
|
#ifdef __NR_vfork
|
||||||
swi __NR_vfork
|
swi __NR_vfork
|
||||||
cmn a1, #4096
|
cmn a1, #4096
|
||||||
RETINSTR(movcc, pc, lr)
|
RETINSTR(cc, lr)
|
||||||
|
|
||||||
# ifdef __ASSUME_VFORK_SYSCALL
|
# ifdef __ASSUME_VFORK_SYSCALL
|
||||||
b PLTJMP(C_SYMBOL_NAME(__syscall_error))
|
b PLTJMP(C_SYMBOL_NAME(__syscall_error))
|
||||||
@ -47,7 +47,7 @@ ENTRY (__vfork)
|
|||||||
/* If we don't have vfork, fork is close enough. */
|
/* If we don't have vfork, fork is close enough. */
|
||||||
swi __NR_fork
|
swi __NR_fork
|
||||||
cmn a1, #4096
|
cmn a1, #4096
|
||||||
RETINSTR(movcc, pc, lr)
|
RETINSTR(cc, lr)
|
||||||
b PLTJMP(C_SYMBOL_NAME(__syscall_error))
|
b PLTJMP(C_SYMBOL_NAME(__syscall_error))
|
||||||
#elif !defined __NR_vfork
|
#elif !defined __NR_vfork
|
||||||
# error "__NR_vfork not available and __ASSUME_VFORK_SYSCALL defined"
|
# error "__NR_vfork not available and __ASSUME_VFORK_SYSCALL defined"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user