Patchwork [4/5] tune-cortexm3.inc: Cortex-M3 doesn't support ARM instructions

login
register
mail settings
Submitter Martin Jansa
Date April 25, 2014, 4:40 p.m.
Message ID <3284a4ff6415bb88ec8aee87c5fc098a30156c51.1398443925.git.Martin.Jansa@gmail.com>
Download mbox | patch
Permalink /patch/70983/
State New
Headers show

Comments

Martin Jansa - April 25, 2014, 4:40 p.m.
From: Andrei Gherzan <andrei@gherzan.ro>

Use thumb instructions for Cortex-M3 to avoid this gcc error:
'error: target CPU does not support ARM mode'.

Extracted from "Cortex-M3 Technical Reference Manual":
"The processor implements the ARM v7-M architecture. This includes the entire
16-bit Thumb instruction set and the base Thumb-2 32-bit instruction set
architecture. The processor cannot execute ARM instructions."

Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
 meta/conf/machine/include/tune-cortexm3.inc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Phil Blundell - April 27, 2014, 3:22 p.m.
On Fri, 2014-04-25 at 18:40 +0200, Martin Jansa wrote:
> Extracted from "Cortex-M3 Technical Reference Manual":
> "The processor implements the ARM v7-M architecture. This includes the entire
> 16-bit Thumb instruction set and the base Thumb-2 32-bit instruction set
> architecture. The processor cannot execute ARM instructions."

This is true, though it's worth noting that the Thumb-only restriction
is generic to ARMv7-M and not specific to Cortex-M3.  This tune file
seems to conflate the architecture and the particular CPU slightly and
it seems like some refactoring might be desirable, though obviously that
doesn't make your patch wrong.  Also...

>  PACKAGE_EXTRA_ARCHS_tune-cortexm3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7at} armv7m-vfp"

... this seems a bit bogus.  Presumably
${PACKAGE_EXTRA_ARCHS_tune-armv7at} will include "arm" and a bunch of
other architectures, some of which (e.g. armv4) are more or less
guaranteed to be 32-bit code.  Without a wholesale rethink of the way
that PACKAGE_ARCHs are done on arm, it doesn't seem very safe for armv7m
machines to admit any earlier architecture at all in their
PACKAGE_EXTRA_ARCHS.

p.

Patch

diff --git a/meta/conf/machine/include/tune-cortexm3.inc b/meta/conf/machine/include/tune-cortexm3.inc
index cbc4c0d..780baf4 100644
--- a/meta/conf/machine/include/tune-cortexm3.inc
+++ b/meta/conf/machine/include/tune-cortexm3.inc
@@ -10,5 +10,5 @@  TUNE_CCARGS .= "${@bb.utils.contains("TUNE_FEATURES", "armv7m", " -march=armv7-m
 
 AVAILTUNES += "cortexm3"
 ARMPKGARCH_tune-cortexm3 = "armv7m"
-TUNE_FEATURES_tune-cortexm3 = "armv7m vfp cortexm3"
+TUNE_FEATURES_tune-cortexm3 = "armv7m vfp cortexm3 thumb"
 PACKAGE_EXTRA_ARCHS_tune-cortexm3 = "${PACKAGE_EXTRA_ARCHS_tune-armv7at} armv7m-vfp"