/* Syscalls for ARM in ARM or Thumb modes : * - registers are 32-bit * - stack is 8-byte aligned * ( http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka4127.html) * - syscall number is passed in r7 * - arguments are in r0, r1, r2, r3, r4, r5 * - the system call is performed by calling svc #0 * - syscall return comes in r0. * - only lr is clobbered. * - the arguments are cast to long and assigned into the target registers * which are then simply passed as registers to the asm code, so that we * don't have to experience issues with register constraints. * - the syscall number is always specified last in order to allow to force * some registers before (gcc refuses a %-register at the last position). * - in thumb mode without -fomit-frame-pointer, r7 is also used to store the * frame pointer, and we cannot directly assign it as a register variable, * nor can we clobber it. Instead we assign the r6 register and swap it * with r7 before calling svc, and r6 is marked as clobbered. * We're just using any regular register which we assign to r7 after saving * it. * * Also, ARM supports the old_select syscall if newselect is not available
*/ #define __ARCH_WANT_SYS_OLD_SELECT
#if (defined(__THUMBEB__) || defined(__THUMBEL__)) && \
!defined(NOLIBC_OMIT_FRAME_POINTER) /* swap r6,r7 needed in Thumb mode since we can't use nor clobber r7 */ #define _NOLIBC_SYSCALL_REG "r6" #define _NOLIBC_THUMB_SET_R7 "eor r7, r6\neor r6, r7\neor r7, r6\n" #define _NOLIBC_THUMB_RESTORE_R7 "mov r7, r6\n"
#else/* we're in ARM mode */ /* in Arm mode we can directly use r7 */ #define _NOLIBC_SYSCALL_REG "r7" #define _NOLIBC_THUMB_SET_R7 "" #define _NOLIBC_THUMB_RESTORE_R7 ""
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.