/* Syscalls for ARM in ARM or Thumb modes : *-registersare32-bit *-stackis8-bytealigned *(http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka4127.html) *-syscallnumberispassedinr7 *-argumentsareinr0,r1,r2,r3,r4,r5 *-thesystemcallisperformedbycallingsvc#0 *-syscallreturncomesinr0. *-onlylrisclobbered. *-theargumentsarecasttolongandassignedintothetargetregisters *whicharethensimplypassedasregisterstotheasmcode,sothatwe *don'thavetoexperienceissueswithregisterconstraints. *-thesyscallnumberisalwaysspecifiedlastinordertoallowtoforce *someregistersbefore(gccrefusesa%-registeratthelastposition). *-inthumbmodewithout-fomit-frame-pointer,r7isalsousedtostorethe *framepointer,andwecannotdirectlyassignitasaregistervariable, *norcanweclobberit.Insteadweassignther6registerandswapit *withr7beforecallingsvc,andr6ismarkedasclobbered. *We'rejustusinganyregularregisterwhichweassigntor7aftersaving *it. * *Also,ARMsupportstheold_selectsyscallifnewselectisnotavailable
*/ #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.