Skip to contentSkip to conversation

arm: add support for semihosting for ARMv7M targets

PATCH Superseded Vadzim Dambrouski 2 participants 5 messages Oct 18, 2015 – Oct 19, 2015 Arm (32-bit)

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/2 arm: add support for semihosting for ARMv7M targets

It is possible to enable CONFIG_SEMIHOSTING for STM32F429 target, but it would result in compile error. This patch adds support for semihosting for STM32F429 or any other ARMv7M target. Tested on STM32F429-DISCOVERY board.

---

 arch/arm/lib/semihosting.c | 2 ++
 1 file changed, 2 insertions(+)
arch/arm/lib/semihosting.c +2 -0
index c3e964e..ed5e8e4 100644
@@ -31,6 +31,8 @@ static noinline long smh_trap(unsigned int sysnum, void *addr)
 	register long result asm("r0");
 #if defined(CONFIG_ARM64)
 	asm volatile ("hlt #0xf000" : "=r" (result) : "0"(sysnum), "r"(addr));
+#elif defined(CONFIG_CPU_V7M)
+	asm volatile ("bkpt #0xAB" : "=r" (result) : "0"(sysnum), "r"(addr));
 #else
 	/* Note - untested placeholder */
 	asm volatile ("svc #0x123456" : "=r" (result) : "0"(sysnum), "r"(addr));
Signature · 1 line
2.6.1
#1 lore raw

PATCH v2 2/2 arm: fix compile warnings when semihosting is enabled on ARMv7M target.

---

 arch/arm/lib/semihosting.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/lib/semihosting.c +2 -2
index ed5e8e4..6541cb4 100644
@@ -92,7 +92,7 @@ static long smh_read(long fd, void *memp, size_t len)
 		size_t len;
 	} read;
 
-	debug("%s: fd %ld, memp %p, len %lu\n", __func__, fd, memp, len);
+	debug("%s: fd %ld, memp %p, len %lu\n", __func__, fd, memp, (ulong)len);
 
 	read.fd = fd;
 	read.memp = memp;
@@ -107,7 +107,7 @@ static long smh_read(long fd, void *memp, size_t len)
 		 * with an error message.
 		 */
 		printf("%s: ERROR ret %ld, fd %ld, len %lu memp %p\n",
-		       __func__, ret, fd, len, memp);
+		       __func__, ret, fd, (ulong)len, memp);
 		return -1;
 	}
 
Signature · 1 line
2.6.1
#2 lore raw

PATCH v2 2/2 arm: fix compile warnings when semihosting is enabled on ARMv7M target.

Hello Vadzim,

Quoted 20 lines · Vadzim Dambrouski

---

 arch/arm/lib/semihosting.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/lib/semihosting.c +1 -1
index ed5e8e4..6541cb4 100644
@@ -92,7 +92,7 @@ static long smh_read(long fd, void *memp, size_t len)
 		size_t len;
 	} read;
 
-	debug("%s: fd %ld, memp %p, len %lu\n", __func__, fd, memp, len);
+	debug("%s: fd %ld, memp %p, len %lu\n", __func__, fd, memp, (ulong)len);
 
 	read.fd = fd;
 	read.memp = memp;

arch/arm/lib/semihosting.c static long smh_read(long fd, void *memp, size_t len) · line 112

Quoted 7 lines
arch/arm/lib/semihosting.c +1 -1
@@ -107,7 +107,7 @@ static long smh_read(long fd, void *memp, size_t len)
 		 * with an error message.
 		 */
 		printf("%s: ERROR ret %ld, fd %ld, len %lu memp %p\n",
-		       __func__, ret, fd, len, memp);
+		       __func__, ret, fd, (ulong)len, memp);
 		return -1;
 	}

len is a size_t; it should not be force-converted into a long, it should be printed using a 'z' qualifier.

Amicalement,

Signature · 1 line
Albert.
#3 lore raw

PATCH v2 2/2 arm: fix compile warnings when semihosting is enabled on ARMv7M target.

Quoted 35 lines · Albert ARIBAUD

Hello Vadzim,

Quoted 20 lines · Vadzim Dambrouski

---

  arch/arm/lib/semihosting.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/lib/semihosting.c +1 -1
index ed5e8e4..6541cb4 100644
@@ -92,7 +92,7 @@ static long smh_read(long fd, void *memp, size_t len)
  		size_t len;
  	} read;
 
-	debug("%s: fd %ld, memp %p, len %lu\n", __func__, fd, memp, len);
+	debug("%s: fd %ld, memp %p, len %lu\n", __func__, fd, memp, (ulong)len);
 
  	read.fd = fd;
  	read.memp = memp;

arch/arm/lib/semihosting.c static long smh_read(long fd, void *memp, size_t len) · line 112

Quoted 7 lines
arch/arm/lib/semihosting.c +1 -1
@@ -107,7 +107,7 @@ static long smh_read(long fd, void *memp, size_t len)
  		 * with an error message.
  		 */
  		printf("%s: ERROR ret %ld, fd %ld, len %lu memp %p\n",
-		       __func__, ret, fd, len, memp);
+		       __func__, ret, fd, (ulong)len, memp);
  		return -1;
  	}

len is a size_t; it should not be force-converted into a long, it should be printed using a 'z' qualifier.

Quoted 2 lines

Amicalement,

Well, you are right, I'll send another revision of this patch set. Thank you for all your assistance.

Regards,
Vadzim Dambrouski

#4 lore raw

PATCH v2 1/2 arm: add support for semihosting for ARMv7M targets

In reply to Vadzim Dambrouski

Hello Vadzim,

Quoted 3 lines · Vadzim Dambrouski

It is possible to enable CONFIG_SEMIHOSTING for STM32F429 target, but it would result in compile error. This patch adds support for semihosting for STM32F429 or any other ARMv7M target. Tested on STM32F429-DISCOVERY board.

You should give some more indication of the reason for the compile error and the nature of the fix. For instance, you could quote the essential part of the error message (so that people googling for the error message may find this commit and mail thread) and a very short analysis (so that they can test if 'their' error is the same and can be solved the same way).

Quoted 22 lines

---

 arch/arm/lib/semihosting.c | 2 ++
 1 file changed, 2 insertions(+)
arch/arm/lib/semihosting.c +2 -0
index c3e964e..ed5e8e4 100644
@@ -31,6 +31,8 @@ static noinline long smh_trap(unsigned int sysnum, void *addr)
 	register long result asm("r0");
 #if defined(CONFIG_ARM64)
 	asm volatile ("hlt #0xf000" : "=r" (result) : "0"(sysnum), "r"(addr));
+#elif defined(CONFIG_CPU_V7M)
+	asm volatile ("bkpt #0xAB" : "=r" (result) : "0"(sysnum), "r"(addr));
 #else
 	/* Note - untested placeholder */
 	asm volatile ("svc #0x123456" : "=r" (result) : "0"(sysnum), "r"(addr));
Signature · 1 line
2.6.1

Amicalement,

Signature · 1 line
Albert.