mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
arm: Add IT insns for thumb mode
These are ignored by the assembler in ARM mode, so by default this has no effect on generated code.
This commit is contained in:
parent
783a65c253
commit
6ccd0107f3
@ -26,6 +26,17 @@
|
||||
* sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c
|
||||
(_Unwind_Resume): Likewise.
|
||||
|
||||
* ports/sysdeps/arm/arm-mcount.S: Always use unified syntax and
|
||||
always add IT markup.
|
||||
* sysdeps/unix/sysv/linux/arm/mmap64.S (__mmap64): Likewise.
|
||||
* sysdeps/arm/dl-tlsdesc.S (_dl_tlsdesc_dynamic): Add IT markup.
|
||||
* sysdeps/unix/arm/sysdep.S (__syscall_error): Likewise.
|
||||
* sysdeps/unix/sysv/linux/arm/clone.S (__clone): Likewise.
|
||||
* sysdeps/unix/sysv/linux/arm/mmap.S (__mmap): Likewise.
|
||||
* sysdeps/unix/sysv/linux/arm/syscall.S (syscall): Likewise.
|
||||
* sysdeps/unix/sysv/linux/arm/sysdep.h (PSEUDO_RET): Likewise.
|
||||
* sysdeps/unix/sysv/linux/arm/vfork.S (__vfork): Likewise.
|
||||
|
||||
2013-02-27 Roland McGrath <roland@hack.frob.com>
|
||||
|
||||
* sysdeps/arm/sysdep.h (CFI_SECTIONS): New macro.
|
||||
|
@ -24,8 +24,8 @@
|
||||
|
||||
#ifdef __thumb2__
|
||||
.thumb
|
||||
.syntax unified
|
||||
#endif
|
||||
.syntax unified
|
||||
|
||||
|
||||
/* Use an assembly stub with a special ABI. The calling lr has been
|
||||
@ -77,15 +77,10 @@ ENTRY(_mcount)
|
||||
cfi_rel_offset (r3, 12)
|
||||
cfi_rel_offset (fp, 16)
|
||||
cfi_rel_offset (lr, 20)
|
||||
#ifdef __thumb2__
|
||||
movs r0, fp
|
||||
ittt ne
|
||||
ldrne r0, [r0, #-4]
|
||||
#else
|
||||
movs fp, fp
|
||||
ldrne r0, [fp, #-4]
|
||||
#endif
|
||||
movnes r1, lr
|
||||
movsne r1, lr
|
||||
blne __mcount_internal
|
||||
#ifdef __thumb2__
|
||||
ldmia sp!, {r0, r1, r2, r3, fp, pc}
|
||||
|
@ -116,6 +116,7 @@ _dl_tlsdesc_dynamic:
|
||||
ldr r3, [r1]
|
||||
ldr r2, [r0, r3, lsl #3]
|
||||
cmn r2, #1
|
||||
ittt ne
|
||||
ldrne r3, [r1, #4]
|
||||
addne r3, r2, r3
|
||||
rsbne r0, r4, r3
|
||||
|
@ -31,8 +31,9 @@ __syscall_error:
|
||||
/* We translate the system's EWOULDBLOCK error into EAGAIN.
|
||||
The GNU C library always defines EWOULDBLOCK==EAGAIN.
|
||||
EWOULDBLOCK_sys is the original number. */
|
||||
cmp r0, $EWOULDBLOCK_sys /* Is it the old EWOULDBLOCK? */
|
||||
moveq r0, $EAGAIN /* Yes; translate it to EAGAIN. */
|
||||
cmp r0, $EWOULDBLOCK_sys /* Is it the old EWOULDBLOCK? */
|
||||
it eq
|
||||
moveq r0, $EAGAIN /* Yes; translate it to EAGAIN. */
|
||||
#endif
|
||||
|
||||
#ifndef IS_IN_rtld
|
||||
|
@ -33,6 +33,7 @@
|
||||
ENTRY(__clone)
|
||||
@ sanity check args
|
||||
cmp r0, #0
|
||||
ite ne
|
||||
cmpne r1, #0
|
||||
moveq r0, #-EINVAL
|
||||
beq PLTJMP(syscall_error)
|
||||
@ -78,8 +79,9 @@ PSEUDO_END (__clone)
|
||||
sub pc, r0, #31
|
||||
mov r1, r0
|
||||
tst ip, #CLONE_VM
|
||||
movne r0, #-1
|
||||
ldr r7, =SYS_ify(getpid)
|
||||
ite ne
|
||||
movne r0, #-1
|
||||
swieq 0x0
|
||||
str r0, [r1, #PID_OFFSET]
|
||||
str r0, [r1, #TID_OFFSET]
|
||||
|
@ -51,6 +51,7 @@ ENTRY (__mmap)
|
||||
cfi_restore (r5)
|
||||
|
||||
cmn r0, $4096
|
||||
it cc
|
||||
RETINSTR(cc, lr)
|
||||
b PLTJMP(syscall_error)
|
||||
|
||||
|
@ -17,6 +17,8 @@
|
||||
|
||||
#include <sysdep.h>
|
||||
|
||||
.syntax unified
|
||||
|
||||
#define EINVAL 22
|
||||
|
||||
#ifdef __ARMEB__
|
||||
@ -42,7 +44,8 @@ ENTRY (__mmap64)
|
||||
cfi_remember_state
|
||||
movs r4, ip, lsl $20 @ check that offset is page-aligned
|
||||
mov ip, ip, lsr $12
|
||||
moveqs r4, r5, lsr $12 @ check for overflow
|
||||
it eq
|
||||
movseq r4, r5, lsr $12 @ check for overflow
|
||||
bne .Linval
|
||||
ldr r4, [sp, $8] @ load fd
|
||||
orr r5, ip, r5, lsl $20 @ compose page offset
|
||||
@ -52,6 +55,7 @@ ENTRY (__mmap64)
|
||||
cfi_adjust_cfa_offset (-8)
|
||||
cfi_restore (r4)
|
||||
cfi_restore (r5)
|
||||
it cc
|
||||
RETINSTR(cc, lr)
|
||||
b PLTJMP(syscall_error)
|
||||
|
||||
|
@ -42,6 +42,7 @@ ENTRY (syscall)
|
||||
cfi_restore (r6)
|
||||
cfi_restore (r7)
|
||||
cmn r0, #4096
|
||||
it cc
|
||||
RETINSTR(cc, lr)
|
||||
b PLTJMP(syscall_error)
|
||||
PSEUDO_END (syscall)
|
||||
|
@ -64,6 +64,7 @@
|
||||
cmn r0, $4096;
|
||||
|
||||
#define PSEUDO_RET \
|
||||
it cc; \
|
||||
RETINSTR(cc, lr); \
|
||||
b PLTJMP(SYSCALL_ERROR)
|
||||
#undef ret
|
||||
|
@ -51,6 +51,7 @@ ENTRY (__vfork)
|
||||
RESTORE_PID
|
||||
#endif
|
||||
cmn a1, #4096
|
||||
it cc
|
||||
RETINSTR(cc, lr)
|
||||
|
||||
b PLTJMP(SYSCALL_ERROR)
|
||||
|
Loading…
Reference in New Issue
Block a user