Re: [PATCH][AArch32] Add support for HLT to Mixed Mode models

Tamar Christina <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
Hi Corinna,

So sorry, I had been busy sending patches all day and forgot about the different
format for newlib.

I have updated my scripts to generate git format patches for newlib so it
shouldn't happen again!

Ok for master?

Thanks,
Tamar

The 02/07/2019 19:26, Corinna Vinschen wrote:
> On Feb  7 16:05, Tamar Christina wrote:
> > Hi All,
> > 
> > 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.
> > 
> > [1] https://github.com/qemu/qemu/commit/19a6e31c9d2701ef648b70ddcfc3bf64cec8c37e
> > [2] https://developer.arm.com/docs/100863/latest/the-semihosting-interface
> > 
> > Regtested on arm-none-eabi and no issues.
> > 
> > Ok for trunk?
> 
> Sorry, no.
> 
> > Thanks,
> > Tamar
> > 
> > libgloss/ChangeLog:
> > 
> > 2019-02-07  Tamar Christina  <[email protected]>
> > 
> > 	PR libgloss/24070
> > 	* arm/crt0.S: Convert macros to function Macros.
> > 	* arm/swi.h (AngelSWI_ARM, AngelSWI): Use raw insn encoding for
> > 	SEMIHOST_V2_MIXED_MODE case.
> > 	(AngelSWIAsm): Make function.
> > 	(AngelSWIInsn, AngelSWIAsm): Use .inst directive as instruction.
> 
> Did you have a look into libgloss/ChangeLog lately?  We're using git for
> three years now.  Please provide patches in git format-patch format and
> provide a normal git log entry explaining what the patch does and why.
> We don't do CVS ChangeLogs anymore.
> 
> 
> Thanks,
> Corinna
> 
> -- 
> Corinna Vinschen
> Cygwin Maintainer
> Red Hat



--
0001-AArch32-Add-support-for-HLT-to-Mixed-Mode-models.patch (text/x-diff, 3.3 KB)
From 2f69cf1de05cdd124195574df5b7bef4a43481e3 Mon Sep 17 00:00:00 2001
From: Tamar Christina <[email protected]>
Date: Wed, 6 Feb 2019 11:27:12 +0000
Subject: [PATCH] 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.

[1] https://github.com/qemu/qemu/commit/19a6e31c9d2701ef648b70ddcfc3bf64cec8c37e
[2] https://developer.arm.com/docs/100863/latest/the-semihosting-interface
---
 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 48f3d6b1db..c708f63d83 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)
 #else
 	/*  We are always in ARM mode for startup on pre armv7 archs. */
-	AngelSWIAsm	AngelSWI_ARM
+	AngelSWIAsm (AngelSWI_ARM)
 #endif
 	ldr	r0, .LC0	/*  point at values read */
 
@@ -297,7 +297,7 @@ __change_mode:
 #else
 	movs	r0, #AngelSWI_Reason_GetCmdLine
 	ldr	r1, .LC30	/*  Space for command line */
-	AngelSWIAsm	AngelSWI
+	AngelSWIAsm (AngelSWI)
 	ldr	r1, .LC30
 	ldr	r1, [r1]
 #endif
diff --git a/libgloss/arm/swi.h b/libgloss/arm/swi.h
index 67eb36b3fa..8f50ee7d9b 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
 #else
   #define AngelSWIInsn			"swi"
-  #define AngelSWIAsm			swi
+  #define AngelSWIAsm(IMM)		swi IMM
 #endif
 
 /* The reason codes:  */
-- 
2.20.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.