arm: Use push/pop mnemonics

For arm this makes no difference--the result is bit-for-bit identical;
for thumb this results in smaller encodings.  Perhaps it ought not and
this is in fact an assembler bug, but I also think it's clearer.
This commit is contained in:
Richard Henderson 2013-02-14 21:00:14 -08:00
parent 5ff5dfe748
commit 55668624cf
20 changed files with 154 additions and 134 deletions

View File

@ -1,5 +1,26 @@
2013-03-06 Richard Henderson <rth@redhat.com> 2013-03-06 Richard Henderson <rth@redhat.com>
* sysdeps/arm/arm-mcount.S (_mcount): Use push/pop mnemonics.
* sysdeps/arm/crti.S, sysdeps/arm/crtn.S: Likewise.
* sysdeps/arm/dl-tlsdesc.S: Likewise.
* sysdeps/arm/dl-trampoline.S: Likewise.
* sysdeps/arm/start.S: Likewise.
* sysdeps/arm/memcpy.S (PULL): Rename macro from pull.
(PUSH): Rename macro from push.
(memcpy): Use push/pop mnemonics.
* sysdeps/arm/memmove.S: Similarly.
* sysdeps/arm/sysdep.h (CALL_MCOUNT): Use push/pop mnemonics.
* sysdeps/unix/sysv/linux/arm/____longjmp_chk.S: Likewise.
* sysdeps/unix/sysv/linux/arm/clone.S: Likewise.
* sysdeps/unix/sysv/linux/arm/mmap.S: Likewise.
* sysdeps/unix/sysv/linux/arm/mmap64.S: Likewise.
* sysdeps/unix/sysv/linux/arm/nptl/sysdep-cancel.h: Likewise.
* sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c: Likewise.
* sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c: Likewise.
* sysdeps/unix/sysv/linux/arm/syscall.S: Likewise.
* sysdeps/unix/sysv/linux/arm/sysdep.h: Likewise.
* sysdeps/unix/sysv/linux/arm/vfork.S: Likewise.
* sysdeps/arm/sysdep.h [__ASSEMBLER__]: Enable thumb2 if __thumb2__. * sysdeps/arm/sysdep.h [__ASSEMBLER__]: Enable thumb2 if __thumb2__.
(PC_OFS): Respect __thumb__ if __ASSEMBLER__. (PC_OFS): Respect __thumb__ if __ASSEMBLER__.

View File

@ -69,7 +69,7 @@ END(__gnu_mcount_nc)
code be compiled with APCS frame pointers. */ code be compiled with APCS frame pointers. */
ENTRY(_mcount) ENTRY(_mcount)
stmdb sp!, {r0, r1, r2, r3, fp, lr} push {r0, r1, r2, r3, fp, lr}
cfi_adjust_cfa_offset (24) cfi_adjust_cfa_offset (24)
cfi_rel_offset (r0, 0) cfi_rel_offset (r0, 0)
cfi_rel_offset (r1, 4) cfi_rel_offset (r1, 4)
@ -83,9 +83,9 @@ ENTRY(_mcount)
movsne r1, lr movsne r1, lr
blne __mcount_internal blne __mcount_internal
#ifdef __thumb2__ #ifdef __thumb2__
ldmia sp!, {r0, r1, r2, r3, fp, pc} pop {r0, r1, r2, r3, fp, pc}
#else #else
ldmia sp!, {r0, r1, r2, r3, fp, lr} pop {r0, r1, r2, r3, fp, lr}
cfi_adjust_cfa_offset (-24) cfi_adjust_cfa_offset (-24)
cfi_restore (r0) cfi_restore (r0)
cfi_restore (r1) cfi_restore (r1)

View File

@ -80,7 +80,7 @@ call_weak_fn:
.globl _init .globl _init
.type _init, %function .type _init, %function
_init: _init:
stmfd sp!, {r3, lr} push {r3, lr}
#if PREINIT_FUNCTION_WEAK #if PREINIT_FUNCTION_WEAK
bl call_weak_fn bl call_weak_fn
#else #else
@ -92,4 +92,4 @@ _init:
.globl _fini .globl _fini
.type _fini, %function .type _fini, %function
_fini: _fini:
stmfd sp!, {r3, lr} push {r3, lr}

View File

@ -42,16 +42,16 @@
.section .init,"ax",%progbits .section .init,"ax",%progbits
#ifdef __ARM_ARCH_4T__ #ifdef __ARM_ARCH_4T__
ldmfd sp!, {r3, lr} pop {r3, lr}
bx lr bx lr
#else #else
ldmfd sp!, {r3, pc} pop {r3, pc}
#endif #endif
.section .fini,"ax",%progbits .section .fini,"ax",%progbits
#ifdef __ARM_ARCH_4T__ #ifdef __ARM_ARCH_4T__
ldmfd sp!, {r3, lr} pop {r3, lr}
bx lr bx lr
#else #else
ldmfd sp!, {r3, pc} pop {r3, pc}
#endif #endif

View File

@ -90,7 +90,7 @@ _dl_tlsdesc_dynamic:
/* Our calling convention is to clobber r0, r1 and the processor /* Our calling convention is to clobber r0, r1 and the processor
flags. All others that are modified must be saved */ flags. All others that are modified must be saved */
.save {r2,r3,r4,lr} .save {r2,r3,r4,lr}
stmdb sp!, {r2,r3,r4,lr} push {r2,r3,r4,lr}
cfi_adjust_cfa_offset (16) cfi_adjust_cfa_offset (16)
cfi_rel_offset (r2,0) cfi_rel_offset (r2,0)
cfi_rel_offset (r3,4) cfi_rel_offset (r3,4)
@ -115,7 +115,7 @@ _dl_tlsdesc_dynamic:
1: mov r0, r1 1: mov r0, r1
bl __tls_get_addr bl __tls_get_addr
rsb r0, r4, r0 rsb r0, r4, r0
2: ldmia sp!, {r2,r3,r4, lr} 2: pop {r2,r3,r4, lr}
cfi_adjust_cfa_offset (-16) cfi_adjust_cfa_offset (-16)
cfi_restore (lr) cfi_restore (lr)
cfi_restore (r4) cfi_restore (r4)
@ -146,7 +146,7 @@ _dl_tlsdesc_lazy_resolver:
cfi_adjust_cfa_offset (4) cfi_adjust_cfa_offset (4)
cfi_rel_offset (r2, 0) cfi_rel_offset (r2, 0)
.save {r0,r1,r3,ip,lr} .save {r0,r1,r3,ip,lr}
stmdb sp!, {r0, r1, r3, ip, lr} push {r0, r1, r3, ip, lr}
cfi_adjust_cfa_offset (20) cfi_adjust_cfa_offset (20)
cfi_rel_offset (r0, 0) cfi_rel_offset (r0, 0)
cfi_rel_offset (r1, 4) cfi_rel_offset (r1, 4)
@ -154,14 +154,14 @@ _dl_tlsdesc_lazy_resolver:
cfi_rel_offset (ip, 12) cfi_rel_offset (ip, 12)
cfi_rel_offset (lr, 16) cfi_rel_offset (lr, 16)
bl _dl_tlsdesc_lazy_resolver_fixup bl _dl_tlsdesc_lazy_resolver_fixup
ldmia sp!, {r0, r1, r3, ip, lr} pop {r0, r1, r3, ip, lr}
cfi_adjust_cfa_offset (-20) cfi_adjust_cfa_offset (-20)
cfi_restore (lr) cfi_restore (lr)
cfi_restore (ip) cfi_restore (ip)
cfi_restore (r3) cfi_restore (r3)
cfi_restore (r1) cfi_restore (r1)
cfi_restore (r0) cfi_restore (r0)
ldmia sp!, {r2} pop {r2}
cfi_adjust_cfa_offset (-4) cfi_adjust_cfa_offset (-4)
cfi_restore (r2) cfi_restore (r2)
ldr r1, [r0, #4] ldr r1, [r0, #4]
@ -184,7 +184,7 @@ _dl_tlsdesc_resolve_hold:
cfi_adjust_cfa_offset (4) cfi_adjust_cfa_offset (4)
cfi_rel_offset (r2, 0) cfi_rel_offset (r2, 0)
.save {r0,r1,r3,ip,lr} .save {r0,r1,r3,ip,lr}
stmdb sp!, {r0, r1, r3, ip, lr} push {r0, r1, r3, ip, lr}
cfi_adjust_cfa_offset (20) cfi_adjust_cfa_offset (20)
cfi_rel_offset (r0, 0) cfi_rel_offset (r0, 0)
cfi_rel_offset (r1, 4) cfi_rel_offset (r1, 4)
@ -193,14 +193,14 @@ _dl_tlsdesc_resolve_hold:
cfi_rel_offset (lr, 16) cfi_rel_offset (lr, 16)
adr r2, _dl_tlsdesc_resolve_hold adr r2, _dl_tlsdesc_resolve_hold
bl _dl_tlsdesc_resolve_hold_fixup bl _dl_tlsdesc_resolve_hold_fixup
ldmia sp!, {r0, r1, r3, ip, lr} pop {r0, r1, r3, ip, lr}
cfi_adjust_cfa_offset (-20) cfi_adjust_cfa_offset (-20)
cfi_restore (lr) cfi_restore (lr)
cfi_restore (ip) cfi_restore (ip)
cfi_restore (r3) cfi_restore (r3)
cfi_restore (r1) cfi_restore (r1)
cfi_restore (r0) cfi_restore (r0)
ldmia sp!, {r2} pop {r2}
cfi_adjust_cfa_offset (-4) cfi_adjust_cfa_offset (-4)
cfi_restore (r2) cfi_restore (r2)
ldr r1, [r0, #4] ldr r1, [r0, #4]

View File

@ -43,7 +43,7 @@ _dl_runtime_resolve:
@ lr points to &GOT[2] @ lr points to &GOT[2]
@ Save arguments. We save r4 to realign the stack. @ Save arguments. We save r4 to realign the stack.
stmdb sp!,{r0-r4} push {r0-r4}
cfi_adjust_cfa_offset (20) cfi_adjust_cfa_offset (20)
cfi_rel_offset (r0, 0) cfi_rel_offset (r0, 0)
cfi_rel_offset (r1, 4) cfi_rel_offset (r1, 4)
@ -67,7 +67,7 @@ _dl_runtime_resolve:
@ get arguments and return address back. We restore r4 @ get arguments and return address back. We restore r4
@ only to realign the stack. @ only to realign the stack.
ldmia sp!, {r0-r4,lr} pop {r0-r4,lr}
cfi_adjust_cfa_offset (-24) cfi_adjust_cfa_offset (-24)
@ jump to the newly found address @ jump to the newly found address

View File

@ -45,11 +45,11 @@
* Endian independent macros for shifting bytes within registers. * Endian independent macros for shifting bytes within registers.
*/ */
#ifndef __ARMEB__ #ifndef __ARMEB__
#define pull lsr #define PULL lsr
#define push lsl #define PUSH lsl
#else #else
#define pull lsl #define PULL lsl
#define push lsr #define PUSH lsr
#endif #endif
.text .text
@ -58,7 +58,7 @@
ENTRY(memcpy) ENTRY(memcpy)
stmfd sp!, {r0, r4, lr} push {r0, r4, lr}
cfi_adjust_cfa_offset (12) cfi_adjust_cfa_offset (12)
cfi_rel_offset (r4, 4) cfi_rel_offset (r4, 4)
cfi_rel_offset (lr, 8) cfi_rel_offset (lr, 8)
@ -74,7 +74,7 @@ ENTRY(memcpy)
bne 10f bne 10f
1: subs r2, r2, #(28) 1: subs r2, r2, #(28)
stmfd sp!, {r5 - r8} push {r5 - r8}
cfi_adjust_cfa_offset (16) cfi_adjust_cfa_offset (16)
cfi_rel_offset (r5, 0) cfi_rel_offset (r5, 0)
cfi_rel_offset (r6, 4) cfi_rel_offset (r6, 4)
@ -131,7 +131,7 @@ ENTRY(memcpy)
CALGN( bcs 2b ) CALGN( bcs 2b )
7: ldmfd sp!, {r5 - r8} 7: pop {r5 - r8}
cfi_adjust_cfa_offset (-16) cfi_adjust_cfa_offset (-16)
cfi_restore (r5) cfi_restore (r5)
cfi_restore (r6) cfi_restore (r6)
@ -147,13 +147,13 @@ ENTRY(memcpy)
strcsb ip, [r0] strcsb ip, [r0]
#if defined (__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__) #if defined (__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__)
ldmfd sp!, {r0, r4, lr} pop {r0, r4, lr}
cfi_adjust_cfa_offset (-12) cfi_adjust_cfa_offset (-12)
cfi_restore (r4) cfi_restore (r4)
cfi_restore (lr) cfi_restore (lr)
bx lr bx lr
#else #else
ldmfd sp!, {r0, r4, pc} pop {r0, r4, pc}
#endif #endif
cfi_restore_state cfi_restore_state
@ -189,7 +189,7 @@ ENTRY(memcpy)
CALGN( subcc r2, r2, ip ) CALGN( subcc r2, r2, ip )
CALGN( bcc 15f ) CALGN( bcc 15f )
11: stmfd sp!, {r5 - r9} 11: push {r5 - r9}
cfi_adjust_cfa_offset (20) cfi_adjust_cfa_offset (20)
cfi_rel_offset (r5, 0) cfi_rel_offset (r5, 0)
cfi_rel_offset (r6, 4) cfi_rel_offset (r6, 4)
@ -206,30 +206,30 @@ ENTRY(memcpy)
12: PLD( pld [r1, #124] ) 12: PLD( pld [r1, #124] )
13: ldmia r1!, {r4, r5, r6, r7} 13: ldmia r1!, {r4, r5, r6, r7}
mov r3, lr, pull #\pull mov r3, lr, PULL #\pull
subs r2, r2, #32 subs r2, r2, #32
ldmia r1!, {r8, r9, ip, lr} ldmia r1!, {r8, r9, ip, lr}
orr r3, r3, r4, push #\push orr r3, r3, r4, PUSH #\push
mov r4, r4, pull #\pull mov r4, r4, PULL #\pull
orr r4, r4, r5, push #\push orr r4, r4, r5, PUSH #\push
mov r5, r5, pull #\pull mov r5, r5, PULL #\pull
orr r5, r5, r6, push #\push orr r5, r5, r6, PUSH #\push
mov r6, r6, pull #\pull mov r6, r6, PULL #\pull
orr r6, r6, r7, push #\push orr r6, r6, r7, PUSH #\push
mov r7, r7, pull #\pull mov r7, r7, PULL #\pull
orr r7, r7, r8, push #\push orr r7, r7, r8, PUSH #\push
mov r8, r8, pull #\pull mov r8, r8, PULL #\pull
orr r8, r8, r9, push #\push orr r8, r8, r9, PUSH #\push
mov r9, r9, pull #\pull mov r9, r9, PULL #\pull
orr r9, r9, ip, push #\push orr r9, r9, ip, PUSH #\push
mov ip, ip, pull #\pull mov ip, ip, PULL #\pull
orr ip, ip, lr, push #\push orr ip, ip, lr, PUSH #\push
stmia r0!, {r3, r4, r5, r6, r7, r8, r9, ip} stmia r0!, {r3, r4, r5, r6, r7, r8, r9, ip}
bge 12b bge 12b
PLD( cmn r2, #96 ) PLD( cmn r2, #96 )
PLD( bge 13b ) PLD( bge 13b )
ldmfd sp!, {r5 - r9} pop {r5 - r9}
cfi_adjust_cfa_offset (-20) cfi_adjust_cfa_offset (-20)
cfi_restore (r5) cfi_restore (r5)
cfi_restore (r6) cfi_restore (r6)
@ -240,10 +240,10 @@ ENTRY(memcpy)
14: ands ip, r2, #28 14: ands ip, r2, #28
beq 16f beq 16f
15: mov r3, lr, pull #\pull 15: mov r3, lr, PULL #\pull
ldr lr, [r1], #4 ldr lr, [r1], #4
subs ip, ip, #4 subs ip, ip, #4
orr r3, r3, lr, push #\push orr r3, r3, lr, PUSH #\push
str r3, [r0], #4 str r3, [r0], #4
bgt 15b bgt 15b
CALGN( cmp r2, #0 ) CALGN( cmp r2, #0 )

View File

@ -45,11 +45,11 @@
* Endian independent macros for shifting bytes within registers. * Endian independent macros for shifting bytes within registers.
*/ */
#ifndef __ARMEB__ #ifndef __ARMEB__
#define pull lsr #define PULL lsr
#define push lsl #define PUSH lsl
#else #else
#define pull lsl #define PULL lsl
#define push lsr #define PUSH lsr
#endif #endif
.text .text
@ -73,7 +73,7 @@ ENTRY(memmove)
bls HIDDEN_JUMPTARGET(memcpy) bls HIDDEN_JUMPTARGET(memcpy)
#endif #endif
stmfd sp!, {r0, r4, lr} push {r0, r4, lr}
cfi_adjust_cfa_offset (12) cfi_adjust_cfa_offset (12)
cfi_rel_offset (r4, 4) cfi_rel_offset (r4, 4)
cfi_rel_offset (lr, 8) cfi_rel_offset (lr, 8)
@ -91,7 +91,7 @@ ENTRY(memmove)
bne 10f bne 10f
1: subs r2, r2, #(28) 1: subs r2, r2, #(28)
stmfd sp!, {r5 - r8} push {r5 - r8}
cfi_adjust_cfa_offset (16) cfi_adjust_cfa_offset (16)
cfi_rel_offset (r5, 0) cfi_rel_offset (r5, 0)
cfi_rel_offset (r6, 4) cfi_rel_offset (r6, 4)
@ -147,7 +147,7 @@ ENTRY(memmove)
CALGN( bcs 2b ) CALGN( bcs 2b )
7: ldmfd sp!, {r5 - r8} 7: pop {r5 - r8}
cfi_adjust_cfa_offset (-16) cfi_adjust_cfa_offset (-16)
cfi_restore (r5) cfi_restore (r5)
cfi_restore (r6) cfi_restore (r6)
@ -163,13 +163,13 @@ ENTRY(memmove)
strcsb ip, [r0, #-1] strcsb ip, [r0, #-1]
#if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__) #if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__)
ldmfd sp!, {r0, r4, lr} pop {r0, r4, lr}
cfi_adjust_cfa_offset (-12) cfi_adjust_cfa_offset (-12)
cfi_restore (r4) cfi_restore (r4)
cfi_restore (lr) cfi_restore (lr)
bx lr bx lr
#else #else
ldmfd sp!, {r0, r4, pc} pop {r0, r4, pc}
#endif #endif
cfi_restore_state cfi_restore_state
@ -204,7 +204,7 @@ ENTRY(memmove)
CALGN( subcc r2, r2, ip ) CALGN( subcc r2, r2, ip )
CALGN( bcc 15f ) CALGN( bcc 15f )
11: stmfd sp!, {r5 - r9} 11: push {r5 - r9}
cfi_adjust_cfa_offset (20) cfi_adjust_cfa_offset (20)
cfi_rel_offset (r5, 0) cfi_rel_offset (r5, 0)
cfi_rel_offset (r6, 4) cfi_rel_offset (r6, 4)
@ -221,30 +221,30 @@ ENTRY(memmove)
12: PLD( pld [r1, #-128] ) 12: PLD( pld [r1, #-128] )
13: ldmdb r1!, {r7, r8, r9, ip} 13: ldmdb r1!, {r7, r8, r9, ip}
mov lr, r3, push #\push mov lr, r3, PUSH #\push
subs r2, r2, #32 subs r2, r2, #32
ldmdb r1!, {r3, r4, r5, r6} ldmdb r1!, {r3, r4, r5, r6}
orr lr, lr, ip, pull #\pull orr lr, lr, ip, PULL #\pull
mov ip, ip, push #\push mov ip, ip, PUSH #\push
orr ip, ip, r9, pull #\pull orr ip, ip, r9, PULL #\pull
mov r9, r9, push #\push mov r9, r9, PUSH #\push
orr r9, r9, r8, pull #\pull orr r9, r9, r8, PULL #\pull
mov r8, r8, push #\push mov r8, r8, PUSH #\push
orr r8, r8, r7, pull #\pull orr r8, r8, r7, PULL #\pull
mov r7, r7, push #\push mov r7, r7, PUSH #\push
orr r7, r7, r6, pull #\pull orr r7, r7, r6, PULL #\pull
mov r6, r6, push #\push mov r6, r6, PUSH #\push
orr r6, r6, r5, pull #\pull orr r6, r6, r5, PULL #\pull
mov r5, r5, push #\push mov r5, r5, PUSH #\push
orr r5, r5, r4, pull #\pull orr r5, r5, r4, PULL #\pull
mov r4, r4, push #\push mov r4, r4, PUSH #\push
orr r4, r4, r3, pull #\pull orr r4, r4, r3, PULL #\pull
stmdb r0!, {r4 - r9, ip, lr} stmdb r0!, {r4 - r9, ip, lr}
bge 12b bge 12b
PLD( cmn r2, #96 ) PLD( cmn r2, #96 )
PLD( bge 13b ) PLD( bge 13b )
ldmfd sp!, {r5 - r9} pop {r5 - r9}
cfi_adjust_cfa_offset (-20) cfi_adjust_cfa_offset (-20)
cfi_restore (r5) cfi_restore (r5)
cfi_restore (r6) cfi_restore (r6)
@ -255,10 +255,10 @@ ENTRY(memmove)
14: ands ip, r2, #28 14: ands ip, r2, #28
beq 16f beq 16f
15: mov lr, r3, push #\push 15: mov lr, r3, PUSH #\push
ldr r3, [r1, #-4]! ldr r3, [r1, #-4]!
subs ip, ip, #4 subs ip, ip, #4
orr lr, lr, r3, pull #\pull orr lr, lr, r3, PULL #\pull
str lr, [r0, #-4]! str lr, [r0, #-4]!
bgt 15b bgt 15b
CALGN( cmp r2, #0 ) CALGN( cmp r2, #0 )

View File

@ -80,14 +80,14 @@ _start:
mov lr, #0 mov lr, #0
/* Pop argc off the stack and save a pointer to argv */ /* Pop argc off the stack and save a pointer to argv */
ldr a2, [sp], #4 pop { a2 }
mov a3, sp mov a3, sp
/* Push stack limit */ /* Push stack limit */
str a3, [sp, #-4]! push { a3 }
/* Push rtld_fini */ /* Push rtld_fini */
str a1, [sp, #-4]! push { a1 }
#ifdef SHARED #ifdef SHARED
ldr sl, .L_GOT ldr sl, .L_GOT
@ -97,7 +97,7 @@ _start:
ldr ip, .L_GOT+4 /* __libc_csu_fini */ ldr ip, .L_GOT+4 /* __libc_csu_fini */
ldr ip, [sl, ip] ldr ip, [sl, ip]
str ip, [sp, #-4]! /* Push __libc_csu_fini */ push { ip } /* Push __libc_csu_fini */
ldr a4, .L_GOT+8 /* __libc_csu_init */ ldr a4, .L_GOT+8 /* __libc_csu_init */
ldr a4, [sl, a4] ldr a4, [sl, a4]
@ -113,7 +113,7 @@ _start:
ldr ip, =__libc_csu_fini ldr ip, =__libc_csu_fini
/* Push __libc_csu_fini */ /* Push __libc_csu_fini */
str ip, [sp, #-4]! push { ip }
/* Set up the other arguments in registers */ /* Set up the other arguments in registers */
ldr a1, =main ldr a1, =main

View File

@ -80,7 +80,7 @@
/* Call __gnu_mcount_nc if GCC >= 4.4. */ /* Call __gnu_mcount_nc if GCC >= 4.4. */
#if __GNUC_PREREQ(4,4) #if __GNUC_PREREQ(4,4)
#define CALL_MCOUNT \ #define CALL_MCOUNT \
str lr,[sp, #-4]!; \ push {lr}; \
cfi_adjust_cfa_offset (4); \ cfi_adjust_cfa_offset (4); \
cfi_rel_offset (lr, 0); \ cfi_rel_offset (lr, 0); \
bl PLTJMP(mcount); \ bl PLTJMP(mcount); \
@ -88,11 +88,11 @@
cfi_restore (lr) cfi_restore (lr)
#else /* else call _mcount */ #else /* else call _mcount */
#define CALL_MCOUNT \ #define CALL_MCOUNT \
str lr,[sp, #-4]!; \ push {lr}; \
cfi_adjust_cfa_offset (4); \ cfi_adjust_cfa_offset (4); \
cfi_rel_offset (lr, 0); \ cfi_rel_offset (lr, 0); \
bl PLTJMP(mcount); \ bl PLTJMP(mcount); \
ldr lr, [sp], #4; \ pops {lr}; \
cfi_adjust_cfa_offset (-4); \ cfi_adjust_cfa_offset (-4); \
cfi_restore (lr) cfi_restore (lr)
#endif #endif

View File

@ -53,7 +53,7 @@ longjmp_msg:
cfi_remember_state; \ cfi_remember_state; \
cmp sp, reg; \ cmp sp, reg; \
bls .Lok; \ bls .Lok; \
str r7, [sp, #-4]!; \ push { r7 }; \
cfi_adjust_cfa_offset (4); \ cfi_adjust_cfa_offset (4); \
cfi_rel_offset (r7, 0); \ cfi_rel_offset (r7, 0); \
mov r5, r0; \ mov r5, r0; \
@ -79,7 +79,7 @@ longjmp_msg:
.Lfail: \ .Lfail: \
add sp, sp, #12; \ add sp, sp, #12; \
cfi_adjust_cfa_offset (-12); \ cfi_adjust_cfa_offset (-12); \
ldr r7, [sp], #4; \ pop { r7 }; \
cfi_adjust_cfa_offset (-4); \ cfi_adjust_cfa_offset (-4); \
cfi_restore (r7); \ cfi_restore (r7); \
CALL_FAIL \ CALL_FAIL \

View File

@ -49,7 +49,7 @@ ENTRY(__clone)
mov ip, r2 mov ip, r2
#endif #endif
@ new sp is already in r1 @ new sp is already in r1
stmfd sp!, {r4, r7} push {r4, r7}
cfi_adjust_cfa_offset (8) cfi_adjust_cfa_offset (8)
cfi_rel_offset (r4, 0) cfi_rel_offset (r4, 0)
cfi_rel_offset (r7, 4) cfi_rel_offset (r7, 4)
@ -61,7 +61,7 @@ ENTRY(__clone)
cfi_endproc cfi_endproc
cmp r0, #0 cmp r0, #0
beq 1f beq 1f
ldmfd sp!, {r4, r7} pop {r4, r7}
blt PLTJMP(C_SYMBOL_NAME(__syscall_error)) blt PLTJMP(C_SYMBOL_NAME(__syscall_error))
RETINSTR(, lr) RETINSTR(, lr)

View File

@ -23,11 +23,11 @@
ENTRY (__mmap) ENTRY (__mmap)
/* shuffle args */ /* shuffle args */
str r5, [sp, #-4]! push { r5 }
cfi_adjust_cfa_offset (4) cfi_adjust_cfa_offset (4)
cfi_rel_offset (r5, 0) cfi_rel_offset (r5, 0)
ldr r5, [sp, #8] ldr r5, [sp, #8]
str r4, [sp, #-4]! push { r4 }
cfi_adjust_cfa_offset (4) cfi_adjust_cfa_offset (4)
cfi_rel_offset (r4, 0) cfi_rel_offset (r4, 0)
cfi_remember_state cfi_remember_state
@ -43,10 +43,10 @@ ENTRY (__mmap)
/* restore registers */ /* restore registers */
2: 2:
ldr r4, [sp], #4 pop { r4 }
cfi_adjust_cfa_offset (-4) cfi_adjust_cfa_offset (-4)
cfi_restore (r4) cfi_restore (r4)
ldr r5, [sp], #4 pop { r5 }
cfi_adjust_cfa_offset (-4) cfi_adjust_cfa_offset (-4)
cfi_restore (r5) cfi_restore (r5)

View File

@ -34,11 +34,11 @@
.text .text
ENTRY (__mmap64) ENTRY (__mmap64)
ldr ip, [sp, $LOW_OFFSET] ldr ip, [sp, $LOW_OFFSET]
str r5, [sp, #-4]! push { r5 }
cfi_adjust_cfa_offset (4) cfi_adjust_cfa_offset (4)
cfi_rel_offset (r5, 0) cfi_rel_offset (r5, 0)
ldr r5, [sp, $HIGH_OFFSET] ldr r5, [sp, $HIGH_OFFSET]
str r4, [sp, #-4]! push { r4 }
cfi_adjust_cfa_offset (4) cfi_adjust_cfa_offset (4)
cfi_rel_offset (r4, 0) cfi_rel_offset (r4, 0)
cfi_remember_state cfi_remember_state
@ -51,7 +51,7 @@ ENTRY (__mmap64)
orr r5, ip, r5, lsl $20 @ compose page offset orr r5, ip, r5, lsl $20 @ compose page offset
DO_CALL (mmap2, 0) DO_CALL (mmap2, 0)
cmn r0, $4096 cmn r0, $4096
ldmfd sp!, {r4, r5} pop {r4, r5}
cfi_adjust_cfa_offset (-8) cfi_adjust_cfa_offset (-8)
cfi_restore (r4) cfi_restore (r4)
cfi_restore (r5) cfi_restore (r5)
@ -62,7 +62,7 @@ ENTRY (__mmap64)
cfi_restore_state cfi_restore_state
.Linval: .Linval:
mov r0, $-EINVAL mov r0, $-EINVAL
ldmfd sp!, {r4, r5} pop {r4, r5}
cfi_adjust_cfa_offset (-8) cfi_adjust_cfa_offset (-8)
cfi_restore (r4) cfi_restore (r4)
cfi_restore (r5) cfi_restore (r5)

View File

@ -76,19 +76,19 @@
# define DOCARGS_0 \ # define DOCARGS_0 \
.save {r7}; \ .save {r7}; \
str lr, [sp, #-4]!; \ push {lr}; \
cfi_adjust_cfa_offset (4); \ cfi_adjust_cfa_offset (4); \
cfi_rel_offset (lr, 0); \ cfi_rel_offset (lr, 0); \
.save {lr} .save {lr}
# define UNDOCARGS_0 # define UNDOCARGS_0
# define RESTORE_LR_0 \ # define RESTORE_LR_0 \
ldr lr, [sp], #4; \ pop {lr}; \
cfi_adjust_cfa_offset (-4); \ cfi_adjust_cfa_offset (-4); \
cfi_restore (lr) cfi_restore (lr)
# define DOCARGS_1 \ # define DOCARGS_1 \
.save {r7}; \ .save {r7}; \
stmfd sp!, {r0, r1, lr}; \ push {r0, r1, lr}; \
cfi_adjust_cfa_offset (12); \ cfi_adjust_cfa_offset (12); \
cfi_rel_offset (lr, 8); \ cfi_rel_offset (lr, 8); \
.save {lr}; \ .save {lr}; \
@ -102,13 +102,13 @@
# define DOCARGS_2 \ # define DOCARGS_2 \
.save {r7}; \ .save {r7}; \
stmfd sp!, {r0, r1, lr}; \ push {r0, r1, lr}; \
cfi_adjust_cfa_offset (12); \ cfi_adjust_cfa_offset (12); \
cfi_rel_offset (lr, 8); \ cfi_rel_offset (lr, 8); \
.save {lr}; \ .save {lr}; \
.pad #8 .pad #8
# define UNDOCARGS_2 \ # define UNDOCARGS_2 \
ldmfd sp!, {r0, r1}; \ pop {r0, r1}; \
cfi_adjust_cfa_offset (-8); \ cfi_adjust_cfa_offset (-8); \
RESTART_UNWIND RESTART_UNWIND
# define RESTORE_LR_2 \ # define RESTORE_LR_2 \
@ -116,13 +116,13 @@
# define DOCARGS_3 \ # define DOCARGS_3 \
.save {r7}; \ .save {r7}; \
stmfd sp!, {r0, r1, r2, r3, lr}; \ push {r0, r1, r2, r3, lr}; \
cfi_adjust_cfa_offset (20); \ cfi_adjust_cfa_offset (20); \
cfi_rel_offset (lr, 16); \ cfi_rel_offset (lr, 16); \
.save {lr}; \ .save {lr}; \
.pad #16 .pad #16
# define UNDOCARGS_3 \ # define UNDOCARGS_3 \
ldmfd sp!, {r0, r1, r2, r3}; \ pop {r0, r1, r2, r3}; \
cfi_adjust_cfa_offset (-16); \ cfi_adjust_cfa_offset (-16); \
RESTART_UNWIND RESTART_UNWIND
# define RESTORE_LR_3 \ # define RESTORE_LR_3 \
@ -130,13 +130,13 @@
# define DOCARGS_4 \ # define DOCARGS_4 \
.save {r7}; \ .save {r7}; \
stmfd sp!, {r0, r1, r2, r3, lr}; \ push {r0, r1, r2, r3, lr}; \
cfi_adjust_cfa_offset (20); \ cfi_adjust_cfa_offset (20); \
cfi_rel_offset (lr, 16); \ cfi_rel_offset (lr, 16); \
.save {lr}; \ .save {lr}; \
.pad #16 .pad #16
# define UNDOCARGS_4 \ # define UNDOCARGS_4 \
ldmfd sp!, {r0, r1, r2, r3}; \ pop {r0, r1, r2, r3}; \
cfi_adjust_cfa_offset (-16); \ cfi_adjust_cfa_offset (-16); \
RESTART_UNWIND RESTART_UNWIND
# define RESTORE_LR_4 \ # define RESTORE_LR_4 \
@ -145,13 +145,13 @@
/* r4 is only stmfd'ed for correct stack alignment. */ /* r4 is only stmfd'ed for correct stack alignment. */
# define DOCARGS_5 \ # define DOCARGS_5 \
.save {r4, r7}; \ .save {r4, r7}; \
stmfd sp!, {r0, r1, r2, r3, r4, lr}; \ push {r0, r1, r2, r3, r4, lr}; \
cfi_adjust_cfa_offset (24); \ cfi_adjust_cfa_offset (24); \
cfi_rel_offset (lr, 20); \ cfi_rel_offset (lr, 20); \
.save {lr}; \ .save {lr}; \
.pad #20 .pad #20
# define UNDOCARGS_5 \ # define UNDOCARGS_5 \
ldmfd sp!, {r0, r1, r2, r3}; \ pop {r0, r1, r2, r3}; \
cfi_adjust_cfa_offset (-16); \ cfi_adjust_cfa_offset (-16); \
.fnend; \ .fnend; \
.fnstart; \ .fnstart; \
@ -159,20 +159,20 @@
.save {lr}; \ .save {lr}; \
.pad #4 .pad #4
# define RESTORE_LR_5 \ # define RESTORE_LR_5 \
ldmfd sp!, {r4, lr}; \ pop {r4, lr}; \
cfi_adjust_cfa_offset (-8); \ cfi_adjust_cfa_offset (-8); \
/* r4 will be marked as restored later. */ \ /* r4 will be marked as restored later. */ \
cfi_restore (lr) cfi_restore (lr)
# define DOCARGS_6 \ # define DOCARGS_6 \
.save {r4, r5, r7}; \ .save {r4, r5, r7}; \
stmfd sp!, {r0, r1, r2, r3, lr}; \ push {r0, r1, r2, r3, lr}; \
cfi_adjust_cfa_offset (20); \ cfi_adjust_cfa_offset (20); \
cfi_rel_offset (lr, 16); \ cfi_rel_offset (lr, 16); \
.save {lr}; \ .save {lr}; \
.pad #16 .pad #16
# define UNDOCARGS_6 \ # define UNDOCARGS_6 \
ldmfd sp!, {r0, r1, r2, r3}; \ pop {r0, r1, r2, r3}; \
cfi_adjust_cfa_offset (-16); \ cfi_adjust_cfa_offset (-16); \
.fnend; \ .fnend; \
.fnstart; \ .fnstart; \
@ -213,13 +213,13 @@ extern int __local_multiple_threads attribute_hidden;
header.multiple_threads) == 0, 1) header.multiple_threads) == 0, 1)
# else # else
# define SINGLE_THREAD_P \ # define SINGLE_THREAD_P \
stmfd sp!, {r0, lr}; \ push {r0, lr}; \
cfi_adjust_cfa_offset (8); \ cfi_adjust_cfa_offset (8); \
cfi_rel_offset (lr, 4); \ cfi_rel_offset (lr, 4); \
GET_TLS (lr); \ GET_TLS (lr); \
NEGOFF_ADJ_BASE (r0, MULTIPLE_THREADS_OFFSET); \ NEGOFF_ADJ_BASE (r0, MULTIPLE_THREADS_OFFSET); \
ldr ip, NEGOFF_OFF1 (r0, MULTIPLE_THREADS_OFFSET); \ ldr ip, NEGOFF_OFF1 (r0, MULTIPLE_THREADS_OFFSET); \
ldmfd sp!, {r0, lr}; \ pop {r0, lr}; \
cfi_adjust_cfa_offset (-8); \ cfi_adjust_cfa_offset (-8); \
cfi_restore (lr); \ cfi_restore (lr); \
teq ip, #0 teq ip, #0

View File

@ -93,7 +93,7 @@ asm (
"_Unwind_Resume:\n" "_Unwind_Resume:\n"
" .cfi_sections .debug_frame\n" " .cfi_sections .debug_frame\n"
" " CFI_STARTPROC "\n" " " CFI_STARTPROC "\n"
" stmfd sp!, {r4, r5, r6, lr}\n" " push {r4, r5, r6, lr}\n"
" " CFI_ADJUST_CFA_OFFSET (16)" \n" " " CFI_ADJUST_CFA_OFFSET (16)" \n"
" " CFI_REL_OFFSET (r4, 0) "\n" " " CFI_REL_OFFSET (r4, 0) "\n"
" " CFI_REL_OFFSET (r5, 4) "\n" " " CFI_REL_OFFSET (r5, 4) "\n"
@ -108,7 +108,7 @@ asm (
" cmp r3, #0\n" " cmp r3, #0\n"
" beq 4f\n" " beq 4f\n"
"5: mov r0, r6\n" "5: mov r0, r6\n"
" ldmfd sp!, {r4, r5, r6, lr}\n" " pop {r4, r5, r6, lr}\n"
" " CFI_ADJUST_CFA_OFFSET (-16) "\n" " " CFI_ADJUST_CFA_OFFSET (-16) "\n"
" " CFI_RESTORE (r4) "\n" " " CFI_RESTORE (r4) "\n"
" " CFI_RESTORE (r5) "\n" " " CFI_RESTORE (r5) "\n"

View File

@ -56,7 +56,7 @@ asm (
"_Unwind_Resume:\n" "_Unwind_Resume:\n"
" .cfi_sections .debug_frame\n" " .cfi_sections .debug_frame\n"
" " CFI_STARTPROC "\n" " " CFI_STARTPROC "\n"
" stmfd sp!, {r4, r5, r6, lr}\n" " push {r4, r5, r6, lr}\n"
" " CFI_ADJUST_CFA_OFFSET (16)" \n" " " CFI_ADJUST_CFA_OFFSET (16)" \n"
" " CFI_REL_OFFSET (r4, 0) "\n" " " CFI_REL_OFFSET (r4, 0) "\n"
" " CFI_REL_OFFSET (r5, 4) "\n" " " CFI_REL_OFFSET (r5, 4) "\n"
@ -71,7 +71,7 @@ asm (
" cmp r3, #0\n" " cmp r3, #0\n"
" beq 4f\n" " beq 4f\n"
"5: mov r0, r6\n" "5: mov r0, r6\n"
" ldmfd sp!, {r4, r5, r6, lr}\n" " pop {r4, r5, r6, lr}\n"
" " CFI_ADJUST_CFA_OFFSET (-16) "\n" " " CFI_ADJUST_CFA_OFFSET (-16) "\n"
" " CFI_RESTORE (r4) "\n" " " CFI_RESTORE (r4) "\n"
" " CFI_RESTORE (r5) "\n" " " CFI_RESTORE (r5) "\n"

View File

@ -23,7 +23,7 @@
ENTRY (syscall) ENTRY (syscall)
mov ip, sp mov ip, sp
stmfd sp!, {r4, r5, r6, r7} push {r4, r5, r6, r7}
cfi_adjust_cfa_offset (16) cfi_adjust_cfa_offset (16)
cfi_rel_offset (r4, 0) cfi_rel_offset (r4, 0)
cfi_rel_offset (r5, 4) cfi_rel_offset (r5, 4)
@ -35,7 +35,7 @@ ENTRY (syscall)
mov r2, r3 mov r2, r3
ldmfd ip, {r3, r4, r5, r6} ldmfd ip, {r3, r4, r5, r6}
swi 0x0 swi 0x0
ldmfd sp!, {r4, r5, r6, r7} pop {r4, r5, r6, r7}
cfi_adjust_cfa_offset (-16) cfi_adjust_cfa_offset (-16)
cfi_restore (r4) cfi_restore (r4)
cfi_restore (r5) cfi_restore (r5)

View File

@ -147,23 +147,22 @@ __local_syscall_error: \
# else # else
# if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__) # if defined(__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__)
# define POP_PC \ # define POP_PC \
ldr lr, [sp], #4; \ pop { lr }; \
cfi_adjust_cfa_offset (-4); \ cfi_adjust_cfa_offset (-4); \
cfi_restore (lr); \ cfi_restore (lr); \
bx lr bx lr
# else # else
# define POP_PC \ # define POP_PC pop { pc }
ldr pc, [sp], #4
# endif # endif
# define SYSCALL_ERROR_HANDLER \ # define SYSCALL_ERROR_HANDLER \
__local_syscall_error: \ __local_syscall_error: \
str lr, [sp, #-4]!; \ push { lr }; \
cfi_adjust_cfa_offset (4); \ cfi_adjust_cfa_offset (4); \
cfi_rel_offset (lr, 0); \ cfi_rel_offset (lr, 0); \
str r0, [sp, #-4]!; \ push { r0 }; \
cfi_adjust_cfa_offset (4); \ cfi_adjust_cfa_offset (4); \
bl PLTJMP(C_SYMBOL_NAME(__errno_location)); \ bl PLTJMP(C_SYMBOL_NAME(__errno_location)); \
ldr r1, [sp], #4; \ pop { r1 }; \
cfi_adjust_cfa_offset (-4); \ cfi_adjust_cfa_offset (-4); \
rsb r1, r1, #0; \ rsb r1, r1, #0; \
str r1, [r0]; \ str r1, [r0]; \
@ -230,7 +229,7 @@ __local_syscall_error: \
#undef DOARGS_0 #undef DOARGS_0
#define DOARGS_0 \ #define DOARGS_0 \
.fnstart; \ .fnstart; \
str r7, [sp, #-4]!; \ push { r7 }; \
cfi_adjust_cfa_offset (4); \ cfi_adjust_cfa_offset (4); \
cfi_rel_offset (r7, 0); \ cfi_rel_offset (r7, 0); \
.save { r7 } .save { r7 }
@ -245,7 +244,7 @@ __local_syscall_error: \
#undef DOARGS_5 #undef DOARGS_5
#define DOARGS_5 \ #define DOARGS_5 \
.fnstart; \ .fnstart; \
stmfd sp!, {r4, r7}; \ push {r4, r7}; \
cfi_adjust_cfa_offset (8); \ cfi_adjust_cfa_offset (8); \
cfi_rel_offset (r4, 0); \ cfi_rel_offset (r4, 0); \
cfi_rel_offset (r7, 4); \ cfi_rel_offset (r7, 4); \
@ -255,7 +254,7 @@ __local_syscall_error: \
#define DOARGS_6 \ #define DOARGS_6 \
.fnstart; \ .fnstart; \
mov ip, sp; \ mov ip, sp; \
stmfd sp!, {r4, r5, r7}; \ push {r4, r5, r7}; \
cfi_adjust_cfa_offset (12); \ cfi_adjust_cfa_offset (12); \
cfi_rel_offset (r4, 0); \ cfi_rel_offset (r4, 0); \
cfi_rel_offset (r5, 4); \ cfi_rel_offset (r5, 4); \
@ -266,7 +265,7 @@ __local_syscall_error: \
#define DOARGS_7 \ #define DOARGS_7 \
.fnstart; \ .fnstart; \
mov ip, sp; \ mov ip, sp; \
stmfd sp!, {r4, r5, r6, r7}; \ push {r4, r5, r6, r7}; \
cfi_adjust_cfa_offset (16); \ cfi_adjust_cfa_offset (16); \
cfi_rel_offset (r4, 0); \ cfi_rel_offset (r4, 0); \
cfi_rel_offset (r5, 4); \ cfi_rel_offset (r5, 4); \
@ -277,7 +276,7 @@ __local_syscall_error: \
#undef UNDOARGS_0 #undef UNDOARGS_0
#define UNDOARGS_0 \ #define UNDOARGS_0 \
ldr r7, [sp], #4; \ pop {r7}; \
cfi_adjust_cfa_offset (-4); \ cfi_adjust_cfa_offset (-4); \
cfi_restore (r7); \ cfi_restore (r7); \
.fnend .fnend
@ -291,14 +290,14 @@ __local_syscall_error: \
#define UNDOARGS_4 UNDOARGS_0 #define UNDOARGS_4 UNDOARGS_0
#undef UNDOARGS_5 #undef UNDOARGS_5
#define UNDOARGS_5 \ #define UNDOARGS_5 \
ldmfd sp!, {r4, r7}; \ pop {r4, r7}; \
cfi_adjust_cfa_offset (-8); \ cfi_adjust_cfa_offset (-8); \
cfi_restore (r4); \ cfi_restore (r4); \
cfi_restore (r7); \ cfi_restore (r7); \
.fnend .fnend
#undef UNDOARGS_6 #undef UNDOARGS_6
#define UNDOARGS_6 \ #define UNDOARGS_6 \
ldmfd sp!, {r4, r5, r7}; \ pop {r4, r5, r7}; \
cfi_adjust_cfa_offset (-12); \ cfi_adjust_cfa_offset (-12); \
cfi_restore (r4); \ cfi_restore (r4); \
cfi_restore (r5); \ cfi_restore (r5); \
@ -306,7 +305,7 @@ __local_syscall_error: \
.fnend .fnend
#undef UNDOARGS_7 #undef UNDOARGS_7
#define UNDOARGS_7 \ #define UNDOARGS_7 \
ldmfd sp!, {r4, r5, r6, r7}; \ pop {r4, r5, r6, r7}; \
cfi_adjust_cfa_offset (-16); \ cfi_adjust_cfa_offset (-16); \
cfi_restore (r4); \ cfi_restore (r4); \
cfi_restore (r5); \ cfi_restore (r5); \

View File

@ -37,7 +37,7 @@ ENTRY (__vfork)
mov ip, r7 mov ip, r7
cfi_register (r7, ip) cfi_register (r7, ip)
.fnstart .fnstart
str r7, [sp, #-4]! push { r7 }
cfi_adjust_cfa_offset (4) cfi_adjust_cfa_offset (4)
.save { r7 } .save { r7 }
ldr r7, =SYS_ify (vfork) ldr r7, =SYS_ify (vfork)