Merge pull request #5091 from theotherjimmy/fix-nordic-concat

Correct booting on Nordic devices with ARMC6
pull/5151/head
Anna Bridge 2017-09-19 10:24:54 +01:00 committed by GitHub
commit f18d2d862a
9 changed files with 21 additions and 16 deletions

View File

@ -19,7 +19,7 @@ LR_IROM1 0x1B000 0x0025000 {
.ANY (+RO) .ANY (+RO)
} }
RW_IRAM0 0x20002ef8 UNINIT 0x000000c0 { ;no init section RW_IRAM0 0x20002ef8 UNINIT 0x000000c0 { ;no init section
*(noinit) *(*noinit)
} }
RW_IRAM1 0x20002FB8 0x00005048 { RW_IRAM1 0x20002FB8 0x00005048 {
.ANY (+RW +ZI) .ANY (+RW +ZI)

View File

@ -19,7 +19,7 @@ LR_IROM1 0x18000 0x0028000 {
.ANY (+RO) .ANY (+RO)
} }
RW_IRAM0 0x20002000 UNINIT 0x000000c0 { ;no init section RW_IRAM0 0x20002000 UNINIT 0x000000c0 { ;no init section
*(noinit) *(*noinit)
} }
RW_IRAM1 0x200020C0 0x00001F40 { RW_IRAM1 0x200020C0 0x00001F40 {
.ANY (+RW +ZI) .ANY (+RW +ZI)

View File

@ -19,7 +19,7 @@ LR_IROM1 0x0001B000 0x0025000 {
.ANY (+RO) .ANY (+RO)
} }
RW_IRAM0 0x20002ef8 UNINIT 0x000000c0 { ;no init section RW_IRAM0 0x20002ef8 UNINIT 0x000000c0 { ;no init section
*(noinit) *(*noinit)
} }
RW_IRAM1 0x20002FB8 0x00001048 { RW_IRAM1 0x20002FB8 0x00001048 {
.ANY (+RW +ZI) .ANY (+RW +ZI)

View File

@ -19,7 +19,7 @@ LR_IROM1 0x1C000 0x0064000 {
.ANY (+RO) .ANY (+RO)
} }
RW_IRAM0 0x20002EF8 UNINIT 0x000000D8 { ;no init section RW_IRAM0 0x20002EF8 UNINIT 0x000000D8 { ;no init section
*(noinit) *(*noinit)
} }
RW_IRAM1 0x20002FD0 0x0000D030 { RW_IRAM1 0x20002FD0 0x0000D030 {
.ANY (+RW +ZI) .ANY (+RW +ZI)

View File

@ -5,7 +5,7 @@ LR_IROM1 0x21000 0x00DF000 {
.ANY (+RO) .ANY (+RO)
} }
RW_IRAM0 0x20003288 UNINIT 0x000000F8 { ;no init section RW_IRAM0 0x20003288 UNINIT 0x000000F8 { ;no init section
*(noinit) *(*noinit)
} }
RW_IRAM1 0x20003380 0x0003cc80 { RW_IRAM1 0x20003380 0x0003cc80 {
.ANY (+RW +ZI) .ANY (+RW +ZI)

View File

@ -42,8 +42,8 @@
#include "nrf_sdm.h" #include "nrf_sdm.h"
#include "section_vars.h" #include "section_vars.h"
#if defined(__CC_ARM) #if defined(__CC_ARM) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))
__attribute__ ((section("noinit"),zero_init)) __attribute__ ((section(".bss.noinit"),zero_init))
uint32_t nrf_dispatch_vector[NVIC_NUM_VECTORS]; uint32_t nrf_dispatch_vector[NVIC_NUM_VECTORS];
#elif defined(__GNUC__) #elif defined(__GNUC__)
__attribute__ ((section(".noinit"))) __attribute__ ((section(".noinit")))

View File

@ -65,7 +65,7 @@ class Hook(object):
_HOOKS.clear() _HOOKS.clear()
self._cmdline_hooks = {} self._cmdline_hooks = {}
self.toolchain = toolchain self.toolchain = toolchain
target.init_hooks(self, toolchain.__class__.__name__) target.init_hooks(self, toolchain)
# Hook various functions directly # Hook various functions directly
@staticmethod @staticmethod

View File

@ -22,6 +22,7 @@ import shutil
import inspect import inspect
import sys import sys
from copy import copy from copy import copy
from inspect import getmro
from collections import namedtuple, Mapping from collections import namedtuple, Mapping
from tools.targets.LPC import patch from tools.targets.LPC import patch
from tools.paths import TOOLS_BOOTLOADERS 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") labels.append("UVISOR_UNSUPPORTED")
return labels 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 """Initialize the post-build hooks for a toolchain. For now, this
function only allows "post binary" hooks (hooks that are executed function only allows "post binary" hooks (hooks that are executed
after the binary image is extracted from the executable file) 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 # 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'" ("Invalid format for hook '%s' in target '%s'"
% (hook_data["function"], self.name)) + % (hook_data["function"], self.name)) +
" (must be 'class_name.function_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_name" must refer to a class in this file, so check if the
# class exists # class exists
mdata = self.get_module_data() 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"]) + ("required by '%s' " % hook_data["function"]) +
("in target '%s' " % self.name) + ("in target '%s' " % self.name) +
("not found in class '%s'" % class_name)) ("not found in class '%s'" % class_name))
# Check if the hook specification also has target restrictions # Check if the hook specification also has toolchain restrictions
toolchain_restrictions = hook_data.get("toolchains", []) toolchain_restrictions = set(hook_data.get("toolchains", []))
toolchain_labels = set(c.__name__ for c in getmro(toolchain.__class__))
if toolchain_restrictions and \ if toolchain_restrictions and \
(toolchain_name not in toolchain_restrictions): not toolchain_labels.intersection(toolchain_restrictions):
return return
# Finally, hook the requested function # Finally, hook the requested function
hook.hook_add_binary("post", getattr(cls, function_name)) hook.hook_add_binary("post", getattr(cls, function_name))

View File

@ -26,7 +26,6 @@ from os.path import join, splitext, exists, relpath, dirname, basename, split, a
from itertools import chain from itertools import chain
from inspect import getmro from inspect import getmro
from copy import deepcopy from copy import deepcopy
from tools.config import Config
from abc import ABCMeta, abstractmethod from abc import ABCMeta, abstractmethod
from distutils.spawn import find_executable from distutils.spawn import find_executable
@ -1257,7 +1256,7 @@ class mbedToolchain:
else: else:
prev_data = None prev_data = None
# Get the current configuration data # 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" indicates if a configuration change was detected
changed = False changed = False
if prev_data is not None: # a previous mbed_config.h exists 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 # Return the list of macros geenrated by the build system
def get_config_macros(self): 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 @property
def report(self): def report(self):