public inbox for
help / color / mirror / Atom feed
* [newlib-cygwin] AArch32: Add support for HLT to Mixed Mode models
@ 2019-02-08 11:38 Corinna Vinschen
  0 siblings, 0 replies; only message in thread
From: Corinna Vinschen @ 2019-02-08 11:38 UTC (permalink / raw)
  To: newlib-cvs;h=6d6a623e7d8eb9e521bdbd73a7eafdd482678cea

commit 6d6a623e7d8eb9e521bdbd73a7eafdd482678cea
Author: Tamar Christina <>
Date:   Wed Feb 6 11:27:12 2019 +0000

    AArch32: Add support for HLT to Mixed Mode models
    The Semihosting v2 protocol requires us to output the Armv8-a HLT instruction
    when in mixed mode (SEMIHOST_V2_MIXED_MODE), however it also requires this to
    be done for Armv7-a and earlier architectures.
    The HLT instruction is defined in the undefined encoding space for older
    architectures but simulators such as QEMU already trap on it [1] for all
    architectures and is a requirement for semihosting v2 [2].
    Unfortunately the GAS restricts the use of HLT to Armv8-a which requires us to
    use the instruction encodings we want directly in crt0.
    This patch does this, I have not updated newlib/libc/* as that is quite out of
    date already.  A proper sync is needed in order to get things back in sync.
    A different patch for this would be best.

 libgloss/arm/crt0.S |  6 +++---
 libgloss/arm/swi.h  | 14 ++++++++++----
 2 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/libgloss/arm/crt0.S b/libgloss/arm/crt0.S
index 48f3d6b..c708f63 100644
--- a/libgloss/arm/crt0.S
+++ b/libgloss/arm/crt0.S
@@ -116,10 +116,10 @@
 	bkpt	AngelSWI
 #elif defined(__thumb2__)
 	/*  We are in thumb mode for startup on armv7 architectures. */
-	AngelSWIAsm	AngelSWI
+	AngelSWIAsm (AngelSWI)
 	/*  We are always in ARM mode for startup on pre armv7 archs. */
-	AngelSWIAsm	AngelSWI_ARM
+	AngelSWIAsm (AngelSWI_ARM)
 	ldr	r0, .LC0	/*  point at values read */
@@ -297,7 +297,7 @@ __change_mode:
 	movs	r0, #AngelSWI_Reason_GetCmdLine
 	ldr	r1, .LC30	/*  Space for command line */
-	AngelSWIAsm	AngelSWI
+	AngelSWIAsm (AngelSWI)
 	ldr	r1, .LC30
 	ldr	r1, [r1]
diff --git a/libgloss/arm/swi.h b/libgloss/arm/swi.h
index 67eb36b..8f50ee7 100644
--- a/libgloss/arm/swi.h
+++ b/libgloss/arm/swi.h
@@ -31,9 +31,9 @@
 /* Now the SWI numbers and reason codes for RDI (Angel) monitors.  */
 #if defined (SEMIHOST_V2) && defined (SEMIHOST_V2_MIXED_MODE)
-  #define AngelSWI_ARM			0xF000 /* HLT A32.  */
+  #define AngelSWI_ARM			0xE10F0070 /* HLT #0xF000 A32.  */
   #ifdef __thumb__
-    #define AngelSWI			0x3C /* HLT T32.  */
+    #define AngelSWI			0xBABC /* HLT #0x3c T32.  */
   #else /* __thumb__.  */
     #define AngelSWI			AngelSWI_ARM
   #endif /* __thumb__.  */
@@ -49,10 +49,16 @@
 /* For thumb only architectures use the BKPT instruction instead of SWI.  */
 #ifdef THUMB_VXM
   #define AngelSWIInsn			"bkpt"
-  #define AngelSWIAsm			bkpt
+  #define AngelSWIAsm(IMM)		bkpt IMM
+#elif defined (SEMIHOST_V2) && defined (SEMIHOST_V2_MIXED_MODE)
+  /* This is actually encoding the HLT instruction, however we don't have
+     support for this in older assemblers.  So we have to encode the
+     instruction manually.  */
+  #define AngelSWIInsn			".inst"
+  #define AngelSWIAsm(IMM)		.inst IMM
   #define AngelSWIInsn			"swi"
-  #define AngelSWIAsm			swi
+  #define AngelSWIAsm(IMM)		swi IMM
 /* The reason codes:  */

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-02-08 11:38 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-08 11:38 [newlib-cygwin] AArch32: Add support for HLT to Mixed Mode models Corinna Vinschen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).