libgloss:
        * arm/Makefile.in: Add newlib/libc/machine/arm to the include path if
        newlib is present.
        * arm/arm.h: Include acle-compat.h.
        (THUMB_V7_V6M): Rename to ...
        (PREFER_THUMB): This.  Use ACLE macros __ARM_ARCH_ISA_ARM instead of
        __ARM_ARCH_6M__ to decide whether to define it.
        (THUMB1_ONLY): Define for Thumb-1 only targets.
        (THUMB_V7M_V6M): Rename to ...
        (THUMB_VXM): This.  Defined based on __ARM_ARCH_ISA_ARM, excluding
        ARMv7.
        * arm/crt0.S: Use THUMB1_ONLY rather than __ARM_ARCH_6M__,
        !__ARM_ARCH_ISA_ARM rather than THUMB_V7M_V6M for fp enabling, and
        PREFER_THUMB rather than THUMB_V7_V6M.  Rename other occurences of
        THUMB_V7M_V6M to THUMB_VXM.
        * arm/linux-crt0.c: Likewise.
        * arm/redboot-crt0.S: Likewise.
        * arm/swi.h: Likewise.
        * arm/trap.S: Likewise.
newlib:
        * libc/machine/arm/memcpy-stub.c: Use ACLE macros __ARM_ARCH_ISA_THUMB
        and __ARM_ARCH_ISA_ARM to check for Thumb-2 only targets rather than
        __ARM_ARCH and __ARM_ARCH_PROFILE.
        * libc/machine/arm/memcpy.S: Likewise.
        * libc/machine/arm/setjmp.S: Likewise for Thumb-1 only target and
        include acle-compat.h.
        * libc/machine/arm/strcmp.S: Likewise for Thumb-1 and Thumb-2 only
        target and include acle-compat.h.
        * libc/sys/arm/arm.h: Include acle-compat.h.
        (THUMB_V7_V6M): Rename to ...
        (PREFER_THUMB): This.  Use ACLE macro __ARM_ARCH_ISA_ARM instead of
        __ARM_ARCH_6M__ to decide whether to define it.
        (THUMB1_ONLY): Define for Thumb-1 only targets.
        (THUMB_V7M_V6M): Rename to ...
        (THUMB_VXM): This.  Defined based on __ARM_ARCH_ISA_ARM, excluding
        ARMv7.
        * libc/sys/arm/crt0.S: Use PREFER_THUMB rather than THUMB_V7_V6M and
        rename THUMB_V7M_V6M into THUMB_VXM.
        * libc/sys/arm/swi.h: Likewise.
		
	
		
			
				
	
	
		
			92 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "arm.h"
 | |
| 
 | |
| /* SWI numbers for RDP (Demon) monitor.  */
 | |
| #define SWI_WriteC                 0x0
 | |
| #define SWI_Write0                 0x2
 | |
| #define SWI_ReadC                  0x4
 | |
| #define SWI_CLI                    0x5
 | |
| #define SWI_GetEnv                 0x10
 | |
| #define SWI_Exit                   0x11
 | |
| #define SWI_EnterOS                0x16
 | |
| 
 | |
| #define SWI_GetErrno               0x60
 | |
| #define SWI_Clock                  0x61
 | |
| #define SWI_Time                   0x63
 | |
| #define SWI_Remove                 0x64
 | |
| #define SWI_Rename                 0x65
 | |
| #define SWI_Open                   0x66
 | |
| 
 | |
| #define SWI_Close                  0x68
 | |
| #define SWI_Write                  0x69
 | |
| #define SWI_Read                   0x6a
 | |
| #define SWI_Seek                   0x6b
 | |
| #define SWI_Flen                   0x6c
 | |
| 
 | |
| #define SWI_IsTTY                  0x6e
 | |
| #define SWI_TmpNam                 0x6f
 | |
| #define SWI_InstallHandler         0x70
 | |
| #define SWI_GenerateError          0x71
 | |
| 
 | |
| 
 | |
| /* Now the SWI numbers and reason codes for RDI (Angel) monitors.  */
 | |
| #define AngelSWI_ARM 			0x123456
 | |
| #ifdef __thumb__
 | |
| #define AngelSWI 			0xAB
 | |
| #else
 | |
| #define AngelSWI 			AngelSWI_ARM
 | |
| #endif
 | |
| /* For thumb only architectures use the BKPT instruction instead of SWI.  */
 | |
| #ifdef THUMB_VXM
 | |
| #define AngelSWIInsn			"bkpt"
 | |
| #define AngelSWIAsm			bkpt
 | |
| #else
 | |
| #define AngelSWIInsn			"swi"
 | |
| #define AngelSWIAsm			swi
 | |
| #endif
 | |
| 
 | |
| /* The reason codes:  */
 | |
| #define AngelSWI_Reason_Open		0x01
 | |
| #define AngelSWI_Reason_Close		0x02
 | |
| #define AngelSWI_Reason_WriteC		0x03
 | |
| #define AngelSWI_Reason_Write0		0x04
 | |
| #define AngelSWI_Reason_Write		0x05
 | |
| #define AngelSWI_Reason_Read		0x06
 | |
| #define AngelSWI_Reason_ReadC		0x07
 | |
| #define AngelSWI_Reason_IsTTY		0x09
 | |
| #define AngelSWI_Reason_Seek		0x0A
 | |
| #define AngelSWI_Reason_FLen		0x0C
 | |
| #define AngelSWI_Reason_TmpNam		0x0D
 | |
| #define AngelSWI_Reason_Remove		0x0E
 | |
| #define AngelSWI_Reason_Rename		0x0F
 | |
| #define AngelSWI_Reason_Clock		0x10
 | |
| #define AngelSWI_Reason_Time		0x11
 | |
| #define AngelSWI_Reason_System		0x12
 | |
| #define AngelSWI_Reason_Errno		0x13
 | |
| #define AngelSWI_Reason_GetCmdLine 	0x15
 | |
| #define AngelSWI_Reason_HeapInfo 	0x16
 | |
| #define AngelSWI_Reason_EnterSVC 	0x17
 | |
| #define AngelSWI_Reason_ReportException 0x18
 | |
| #define ADP_Stopped_ApplicationExit 	((2 << 16) + 38)
 | |
| #define ADP_Stopped_RunTimeError 	((2 << 16) + 35)
 | |
| 
 | |
| #if defined(ARM_RDI_MONITOR) && !defined(__ASSEMBLER__)
 | |
| 
 | |
| static inline int
 | |
| do_AngelSWI (int reason, void * arg)
 | |
| {
 | |
|   int value;
 | |
|   asm volatile ("mov r0, %1; mov r1, %2; " AngelSWIInsn " %a3; mov %0, r0"
 | |
|        : "=r" (value) /* Outputs */
 | |
|        : "r" (reason), "r" (arg), "i" (AngelSWI) /* Inputs */
 | |
|        : "r0", "r1", "r2", "r3", "ip", "lr", "memory", "cc"
 | |
| 		/* Clobbers r0 and r1, and lr if in supervisor mode */);
 | |
|                 /* Accordingly to page 13-77 of ARM DUI 0040D other registers
 | |
|                    can also be clobbered.  Some memory positions may also be
 | |
|                    changed by a system call, so they should not be kept in
 | |
|                    registers. Note: we are assuming the manual is right and
 | |
|                    Angel is respecting the APCS.  */
 | |
|   return value;
 | |
| }
 | |
| 
 | |
| #endif
 |