Add support for Semihosting v2 support for ARM in libgloss.
Semihosting v2 changes are documented here: https://developer.arm.com/docs/100863/latest/ The biggest change is the addition of an extensions mechanism to add more extensions in the future. Signed-off-by: Tamar Christina <tamar.christina@arm.com>
This commit is contained in:
committed by
Corinna Vinschen
parent
cc142edbe7
commit
d7d6ad7b6b
@ -1,4 +1,5 @@
|
||||
#include "arm.h"
|
||||
#include <_ansi.h>
|
||||
|
||||
/* SWI numbers for RDP (Demon) monitor. */
|
||||
#define SWI_WriteC 0x0
|
||||
@ -29,45 +30,76 @@
|
||||
|
||||
|
||||
/* 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
|
||||
#if defined (SEMIHOST_V2) && defined (SEMIHOST_V2_MIXED_MODE)
|
||||
#define AngelSWI_ARM 0xF000 /* HLT A32. */
|
||||
#ifdef __thumb__
|
||||
#define AngelSWI 0x3C /* HLT T32. */
|
||||
#else /* __thumb__. */
|
||||
#define AngelSWI AngelSWI_ARM
|
||||
#endif /* __thumb__. */
|
||||
#else /* SEMIHOST_V2. */
|
||||
#define AngelSWI_ARM 0x123456 /* SVC A32. */
|
||||
#ifdef __thumb__
|
||||
#define AngelSWI 0xAB /* SVC T32. */
|
||||
#else /* __thumb__. */
|
||||
#define AngelSWI AngelSWI_ARM
|
||||
#endif /* __thumb__. */
|
||||
#endif /* SEMIHOST_V2. */
|
||||
|
||||
/* For thumb only architectures use the BKPT instruction instead of SWI. */
|
||||
#ifdef THUMB_VXM
|
||||
#define AngelSWIInsn "bkpt"
|
||||
#define AngelSWIAsm bkpt
|
||||
#define AngelSWIInsn "bkpt"
|
||||
#define AngelSWIAsm bkpt
|
||||
#else
|
||||
#define AngelSWIInsn "swi"
|
||||
#define AngelSWIAsm swi
|
||||
#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)
|
||||
#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_IsError 0x08
|
||||
#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 AngelSWI_Reason_ReportExceptionExtended 0x20
|
||||
#define AngelSWI_Reason_Elapsed 0x30
|
||||
#define AngelSWI_Reason_TickFreq 0x31
|
||||
#define ADP_Stopped_ApplicationExit ((2 << 16) + 38)
|
||||
#define ADP_Stopped_RunTimeError ((2 << 16) + 35)
|
||||
|
||||
/* Semihosting feature magic numbers. */
|
||||
#define NUM_SHFB_MAGIC 4
|
||||
#define SHFB_MAGIC_0 0x53
|
||||
#define SHFB_MAGIC_1 0x48
|
||||
#define SHFB_MAGIC_2 0x46
|
||||
#define SHFB_MAGIC_3 0x42
|
||||
|
||||
/* Semihosting extensions. */
|
||||
#define SH_EXT_EXIT_EXTENDED_BITNUM 0x0
|
||||
#define SH_EXT_STDOUT_STDERR_BITNUM 0x1
|
||||
|
||||
#if !defined (__ASSEMBLER__)
|
||||
extern int _get_semihosting_exts _PARAMS ((char*, int, int));
|
||||
extern int _has_ext_exit_extended _PARAMS ((void));
|
||||
extern int _has_ext_stdout_stderr _PARAMS ((void));
|
||||
#endif
|
||||
|
||||
#if defined(ARM_RDI_MONITOR) && !defined(__ASSEMBLER__)
|
||||
|
||||
|
Reference in New Issue
Block a user