From 58372d3fdfacc1b03cbb9d5c6f4da78815ff62f4 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Wed, 13 Sep 2017 11:08:03 -0500 Subject: [PATCH 1/2] Allow ARMC6 to run post-binary-hooks marked for ARM --- tools/hooks.py | 2 +- tools/targets/__init__.py | 16 +++++++++++----- tools/toolchains/__init__.py | 5 ++--- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/tools/hooks.py b/tools/hooks.py index 2693c6e6b6..ad1a32d90b 100644 --- a/tools/hooks.py +++ b/tools/hooks.py @@ -65,7 +65,7 @@ class Hook(object): _HOOKS.clear() self._cmdline_hooks = {} self.toolchain = toolchain - target.init_hooks(self, toolchain.__class__.__name__) + target.init_hooks(self, toolchain) # Hook various functions directly @staticmethod diff --git a/tools/targets/__init__.py b/tools/targets/__init__.py index ee4e9bad4a..fc4b221a28 100644 --- a/tools/targets/__init__.py +++ b/tools/targets/__init__.py @@ -22,6 +22,7 @@ import shutil import inspect import sys from copy import copy +from inspect import getmro from collections import namedtuple, Mapping from tools.targets.LPC import patch from tools.paths import TOOLS_BOOTLOADERS @@ -310,10 +311,14 @@ class Target(namedtuple("Target", "name json_data resolution_order resolution_or labels.append("UVISOR_UNSUPPORTED") return labels - def init_hooks(self, hook, toolchain_name): + def init_hooks(self, hook, toolchain): """Initialize the post-build hooks for a toolchain. For now, this function only allows "post binary" hooks (hooks that are executed after the binary image is extracted from the executable file) + + Positional Arguments: + hook - the hook object to add post-binary-hooks to + toolchain - the toolchain object for inspection """ # If there's no hook, simply return @@ -329,7 +334,7 @@ class Target(namedtuple("Target", "name json_data resolution_order resolution_or ("Invalid format for hook '%s' in target '%s'" % (hook_data["function"], self.name)) + " (must be 'class_name.function_name')") - class_name, function_name = temp[0], temp[1] + class_name, function_name = temp # "class_name" must refer to a class in this file, so check if the # class exists mdata = self.get_module_data() @@ -349,10 +354,11 @@ class Target(namedtuple("Target", "name json_data resolution_order resolution_or ("required by '%s' " % hook_data["function"]) + ("in target '%s' " % self.name) + ("not found in class '%s'" % class_name)) - # Check if the hook specification also has target restrictions - toolchain_restrictions = hook_data.get("toolchains", []) + # Check if the hook specification also has toolchain restrictions + toolchain_restrictions = set(hook_data.get("toolchains", [])) + toolchain_labels = set(c.__name__ for c in getmro(toolchain.__class__)) if toolchain_restrictions and \ - (toolchain_name not in toolchain_restrictions): + not toolchain_labels.intersection(toolchain_restrictions): return # Finally, hook the requested function hook.hook_add_binary("post", getattr(cls, function_name)) diff --git a/tools/toolchains/__init__.py b/tools/toolchains/__init__.py index 0034d28dca..e7423b09a6 100644 --- a/tools/toolchains/__init__.py +++ b/tools/toolchains/__init__.py @@ -26,7 +26,6 @@ from os.path import join, splitext, exists, relpath, dirname, basename, split, a from itertools import chain from inspect import getmro from copy import deepcopy -from tools.config import Config from abc import ABCMeta, abstractmethod from distutils.spawn import find_executable @@ -1257,7 +1256,7 @@ class mbedToolchain: else: prev_data = None # Get the current configuration data - crt_data = Config.config_to_header(self.config_data) if self.config_data else None + crt_data = self.config.config_to_header(self.config_data) if self.config_data else None # "changed" indicates if a configuration change was detected changed = False if prev_data is not None: # a previous mbed_config.h exists @@ -1553,7 +1552,7 @@ class mbedToolchain: # Return the list of macros geenrated by the build system def get_config_macros(self): - return Config.config_to_macros(self.config_data) if self.config_data else [] + return self.config.config_to_macros(self.config_data) if self.config_data else [] @property def report(self): From ca41a0f59d7c94e901d94c138c6923ce6c6d2ec4 Mon Sep 17 00:00:00 2001 From: Jimmy Brisson Date: Wed, 13 Sep 2017 11:08:29 -0500 Subject: [PATCH 2/2] Correct uninit region for nordic targets --- .../TOOLCHAIN_ARM_STD/TARGET_MCU_NORDIC_32K/nRF51822.sct | 2 +- .../TOOLCHAIN_ARM_STD/TARGET_MCU_NRF51_16K_S110/nRF51822.sct | 2 +- .../TOOLCHAIN_ARM_STD/TARGET_MCU_NRF51_16K_S130/nRF51822.sct | 2 +- .../TARGET_MCU_NRF52832/device/TOOLCHAIN_ARM_STD/nRF52832.sct | 2 +- .../TARGET_MCU_NRF52840/device/TOOLCHAIN_ARM_STD/nRF52832.sct | 2 +- targets/TARGET_NORDIC/TARGET_NRF5/reloc_vector_table.c | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NORDIC_32K/nRF51822.sct b/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NORDIC_32K/nRF51822.sct index 3a268542b0..0d10720cf1 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NORDIC_32K/nRF51822.sct +++ b/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NORDIC_32K/nRF51822.sct @@ -19,7 +19,7 @@ LR_IROM1 0x1B000 0x0025000 { .ANY (+RO) } RW_IRAM0 0x20002ef8 UNINIT 0x000000c0 { ;no init section - *(noinit) + *(*noinit) } RW_IRAM1 0x20002FB8 0x00005048 { .ANY (+RW +ZI) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NRF51_16K_S110/nRF51822.sct b/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NRF51_16K_S110/nRF51822.sct index ef516aa805..7baf111cbe 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NRF51_16K_S110/nRF51822.sct +++ b/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NRF51_16K_S110/nRF51822.sct @@ -19,7 +19,7 @@ LR_IROM1 0x18000 0x0028000 { .ANY (+RO) } RW_IRAM0 0x20002000 UNINIT 0x000000c0 { ;no init section - *(noinit) + *(*noinit) } RW_IRAM1 0x200020C0 0x00001F40 { .ANY (+RW +ZI) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NRF51_16K_S130/nRF51822.sct b/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NRF51_16K_S130/nRF51822.sct index 585ae2080d..96fbdd496b 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NRF51_16K_S130/nRF51822.sct +++ b/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/device/TOOLCHAIN_ARM_STD/TARGET_MCU_NRF51_16K_S130/nRF51822.sct @@ -19,7 +19,7 @@ LR_IROM1 0x0001B000 0x0025000 { .ANY (+RO) } RW_IRAM0 0x20002ef8 UNINIT 0x000000c0 { ;no init section - *(noinit) + *(*noinit) } RW_IRAM1 0x20002FB8 0x00001048 { .ANY (+RW +ZI) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF52832/device/TOOLCHAIN_ARM_STD/nRF52832.sct b/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF52832/device/TOOLCHAIN_ARM_STD/nRF52832.sct index 3bb13ec74a..33da60733c 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF52832/device/TOOLCHAIN_ARM_STD/nRF52832.sct +++ b/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF52832/device/TOOLCHAIN_ARM_STD/nRF52832.sct @@ -19,7 +19,7 @@ LR_IROM1 0x1C000 0x0064000 { .ANY (+RO) } RW_IRAM0 0x20002EF8 UNINIT 0x000000D8 { ;no init section - *(noinit) + *(*noinit) } RW_IRAM1 0x20002FD0 0x0000D030 { .ANY (+RW +ZI) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF52840/device/TOOLCHAIN_ARM_STD/nRF52832.sct b/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF52840/device/TOOLCHAIN_ARM_STD/nRF52832.sct index 37b77b1dd2..496f79dfea 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF52840/device/TOOLCHAIN_ARM_STD/nRF52832.sct +++ b/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF52840/device/TOOLCHAIN_ARM_STD/nRF52832.sct @@ -5,7 +5,7 @@ LR_IROM1 0x21000 0x00DF000 { .ANY (+RO) } RW_IRAM0 0x20003288 UNINIT 0x000000F8 { ;no init section - *(noinit) + *(*noinit) } RW_IRAM1 0x20003380 0x0003cc80 { .ANY (+RW +ZI) diff --git a/targets/TARGET_NORDIC/TARGET_NRF5/reloc_vector_table.c b/targets/TARGET_NORDIC/TARGET_NRF5/reloc_vector_table.c index 2862e6c417..8bf23254de 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5/reloc_vector_table.c +++ b/targets/TARGET_NORDIC/TARGET_NRF5/reloc_vector_table.c @@ -42,8 +42,8 @@ #include "nrf_sdm.h" #include "section_vars.h" -#if defined(__CC_ARM) - __attribute__ ((section("noinit"),zero_init)) +#if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) + __attribute__ ((section(".bss.noinit"),zero_init)) uint32_t nrf_dispatch_vector[NVIC_NUM_VECTORS]; #elif defined(__GNUC__) __attribute__ ((section(".noinit")))