mirror of https://github.com/ARMmbed/mbed-os.git
Merge pull request #5091 from theotherjimmy/fix-nordic-concat
Correct booting on Nordic devices with ARMC6pull/5151/head
commit
f18d2d862a
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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")))
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Loading…
Reference in New Issue