forsyth20121205-174063a80cc13 years agoHistory
132 lines · 3.3 KB · Assembly
RawDownload
	.file	"asm-Linux-arm.S"#include "syscall.h"	.text /* * void executeonnewstack(void *tos, void (*tramp)(void *arg), void *arg) */         .align  2        .global executeonnewstack        .type   executeonnewstack, %functionexecuteonnewstack:        @ args = 0, pretend = 0, frame = 12        @ frame_needed = 1, uses_anonymous_args = 0        mov     ip, sp        stmfd   sp!, {fp, ip, lr, pc}        sub     fp, ip, #4        sub     sp, sp, #12        str     r0, [fp, #-16] /* store tos */        str     r1, [fp, #-20] /* store tramp */        str     r2, [fp, #-24] /* store arg */        ldr     r0, [fp, #-24] /* get arg */        ldr     r2, [fp, #-16] /* get tos */        mov     sp, r2         /* set new stack */        mov     lr, pc        blx     r1             /* call tramp*/         /* if we return here, tramp didn't do it's job */	mov	r0, #0	mov	r7, #SYS_exit	swi	0x0        ldmea   fp, {fp, sp, pc}        .size   executeonnewstack, .-executeonnewstack /* * void unlockandexit(int *key) */         .align  2        .global unlockandexit        .type   unlockandexit, %functionunlockandexit:        @ args = 0, pretend = 0, frame = 4        @ frame_needed = 1, uses_anonymous_args = 0        mov     ip, sp        stmfd   sp!, {fp, ip, lr, pc}        sub     fp, ip, #4        sub     sp, sp, #4        mov     r1, #0        str     r1, [r0]	mov	r0, #0	mov	r7, #SYS_exit	swi	0x0        ldmea   fp, {fp, sp, pc}        .size   unlockandexit, .-unlockandexit /* * ulong umult(ulong m1, ulong m2, ulong *hi) */         .align  2        .global umult        .type   umult, %functionumult:        @ args = 0, pretend = 0, frame = 12        @ frame_needed = 1, uses_anonymous_args = 0        mov     ip, sp        stmfd   sp!, {fp, ip, lr, pc}        sub     fp, ip, #4        sub     sp, sp, #12        str     r0, [fp, #-16]        str     r1, [fp, #-20]        str     r2, [fp, #-24]        ldr     r1, [fp, #-16]        ldr     r2, [fp, #-20]        umull   r0, r3, r1, r2        ldr     r1, [fp, #-24]        str     r3, [r1]        ldmea   fp, {fp, sp, pc}        .size   umult, .-umult /* *  void		FPsave(void*); */         .align  2        .global FPsave        .type   FPsave, %functionFPsave:        @ args = 0, pretend = 0, frame = 4        @ frame_needed = 1, uses_anonymous_args = 0        mov     ip, sp        stmfd   sp!, {fp, ip, lr, pc}        sub     fp, ip, #4        sub     sp, sp, #4        str     r0, [fp, #-16]        ldmea   fp, {fp, sp, pc}        .size   FPsave, .-FPsave /* * void		FPrestore(void*); */        .align  2        .global FPrestore        .type   FPrestore, %functionFPrestore:        @ args = 0, pretend = 0, frame = 4        @ frame_needed = 1, uses_anonymous_args = 0        mov     ip, sp        stmfd   sp!, {fp, ip, lr, pc}        sub     fp, ip, #4        sub     sp, sp, #4        str     r0, [fp, #-16]        ldmea   fp, {fp, sp, pc}        .size   FPrestore, .-FPrestore /* * ulong _tas(ulong*); */	.align	2	.global	_tas	.type	_tas, %function_tas:	@ args = 0, pretend = 0, frame = 0	@ frame_needed = 0, uses_anonymous_args = 0	@ link register save eliminated.	@ lr needed for prologue	mov	r3, #1	mov	r1, r0	swp	r0, r3, [r1]	mov	pc, lr	.size	_tas, .-_tas