All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
v0.6.8 - 2019-04-02
- Correct stack-pointer is selected on
HardFault
- Linker template now takes and discard
*(.ARM.extab.*)
- Misc. documentation fixes
- Architecture added:
armv8-m.main
- Cortex-M team added to
authors
- The nightly build is allowed to fail in CI
v0.6.7 - 2018-12-15
- entry / exception / interrupt:
#[cfg]
attributes used onstatic mut
variables are now properly handled.
v0.6.6 - 2018-12-06
-
Misuse of attributes now produce compiler errors with proper spans instead of panicking messages.
-
The
HardFault
symbol has been renamed toHardFaultTrampoline
; likewise theUserHardFault
symbol has been renamed toHardFault
. If you were using breakpoints onUserHardFault
to detect hard fault you should now put those breakpoints on theHardFault
symbol.
-
Attributes on local
static mut
variables (declared at the beginning ofentry
/interrupt
/exception
) are now respected. -
The "GDB can now unwind HardFault callstacks" fix from the previous release broke
HardFault
's'&ExceptionFrame
argument (the pointer was off by 8 bytes). This release fixes that problem without compromising GDB's ability to unwindHardFault
s.
v0.6.5 - 2018-10-23
- We now keep
.stack_sizes
by default, for use with external tooling. - (macros) New
#[interrupt]
attribute added, similar to#[exception]
for use with device-specific interrupt handlers.
- GDB can now unwind HardFault callstacks
v0.6.4 - 2018-09-25
- (macros) Improved the error message when any of the attribute is used on the wrong kind of item.
-
(macros) The expansion of the
exception
attribute now uses theextern "C"
ABI which is what the hardware expects. -
(macros)
entry
andexception
now respect the declared unsafety. That is#[entry] unsafe main() -> !
won't requireunsafe
blocks to useunsafe
API.
v0.6.3 - 2018-09-09
- Fixed the
rand
problem for real.
v0.6.2 - 2018-09-09
-
Worked around a Cargo limitation that broke builds that depend on
rand
. -
Updated the documentation link in the README to point to working docs.
v0.6.1 - 2018-09-06
- Produce a better error message if two (or more) copies of
cortex-m-rt
are going to be linked into a binary.
v0.6.0 - 2018-09-06
- [breaking-change] the
entry!
,pre_init!
andexception!
macros have been replaced with attributes:#[entry]
,#[pre_init]
and#[exception]
, respectively. This also changes the toolchain requirement to 1.30-beta or newer.
v0.5.3 - 2018-08-27
- This crate no longer depends on
arm-none-eabi-gcc
.
v0.5.2 - 2018-08-11
- A
pre_init!
macro and related functionality to run a function immediately after reset, before memory initialisation
-
The
entry!
andexception!
macros now also accept a closure instead of a path. -
DefaultHandler
andUserHardFault
now default to an infinite loop if left undefined.
- Linked script modified to correctly detect
FLASH
overflow caused by.data
v0.5.1 - 2018-05-14
- A recompilation problem where this
cortex-m-rt
would be recompiled every timecargo build
is invoked.
v0.5.0 - 2018-05-12
-
An
entry!
macro to set the entry point of the program. -
A
heap_start
function that returns a pointer into the start of the heap region. -
A
device
feature. When disabled this crate provides the interrupt vectors; when enabled the interrupt vectors are expected to be provided by another crate. Read the documentation for details.
-
This crate now compiles on the beta and stable channels.
-
[breaking-change] this crate now requires
arm-none-eabi-gcc
to be installed and available in$PATH
to compile. -
[breaking-change] the
start
lang item has been removed. The standardmain
interface won't work. Instead use#![no_main]
and theentry!
macro. See documentation for details. -
[breaking-change] the
default_handler!
macro has been merged into theexception!
macro. Useexception!(*, ..)
to set the default exception handler. -
[breaking-change] there's no weak default handler so a default handler must be defined by the application, or one of its dependencies.
-
[breaking-change] the syntax of the third argument of the
exception!
handler has changed. See the documentation of the macro for details. -
[breaking-change] the exception names that the
exception!
macro accepts has changed to match the CMSIS specification. See the documentation of the macro for the list of names it accepts. -
[breaking-change] The number of symbol interfaces has been reduced. Check the advanced section of the documentation for details.
v0.4.0 - 2018-04-09
- LLD support. The linker script provided by this crate has been tweaked to support both LLD and GNU
LD. To use LLD as a linker change
.cargo/config
to look like this:
[target.thumbv7m-none-eabi]
rustflags = [
"-C", "link-arg=-Tlink.x",
- "-C", "linker=arm-none-eabi-ld",
- "-Z", "linker-flavor=ld",
+ "-C", "linker=lld",
+ "-Z", "linker-flavor=ld.lld",
]
-
[breaking-change] Stack overflow protection has been removed. Unfortunately, supporting this feature produces totally wrong
arm-none-eabi-size
reports when LLD is used to link the program. If you need the stack overflow protection feature you can continue to use version v0.3.13+. -
[breaking-change] The "abort-on-panic" Cargo feature, which provided a
panic_fmt
implementation, has been removed. If you were using this feature you can instead use a panic implementation crate.
v0.3.15 - 2018-04-08
- Support the newest nightly
v0.3.14 - 2018-04-01
dev
channel support
v0.3.13 - 2018-02-17
-
Fictitious
.stack
and.heap
linker sections that represent the locations of the stack and the heap in RAM. You can visualize these linker sections by runningarm-none-eabi-size -Ax
over your binary. -
Zero cost stack overflow protection when you use the
cortex-m-rt-ld
linker. Check documentation for details. -
A
_heap_size
symbol that indicates how large the heap is. This symbol is only used whencortex-m-rt-ld
is used as a linker.
v0.3.12 - 2018-01-17
- Support for recent nightlies.
v0.3.11 - 2018-01-17 - YANKED
- Dynamically support recent nightlies, which have the
termination
lang item, and nightly-2017-09-22, which doesn't. That nightly version is used by the docs.rs builder. Supporting that version instead of rejecting it ensures this crate and its reverse-dependencies will get their documentation built by the docs.rs service.
v0.3.10 - 2018-01-17 - YANKED
- The nightly date check from build script that improved error messages for users of old, unsupported nightlies. Unfortunately the check was preventing this crate and reverse-dependencies from getting their documentation build on docs.rs
v0.3.9 - 2018-01-07
cargo doc
warnings
v0.3.8 - 2017-12-29
Termination
lang item
- The
start
lang item to match the new signature
v0.3.7 - 2017-12-23
- Support for overriding the DEBUG_MONITOR exception handler on ARMv7-M.
v0.3.6 - 2017-10-03
- Builds with multiple codegen units by forcing the linker to look harder for the exceptions vector table.
v0.3.5 - 2017-07-21
- Remove duplication of default exception handlers. This saves 32 bytes of Flash memory (.text).
v0.3.4 - 2017-07-19
-
Align the end of .rodata to a 4-byte boundary. With this the sections that will go into Flash memory will be 4 byte aligned at the start and at the end. Which seems to be required (?) by Cortex-M0 devices.
-
.bss and .data are now padded so their sizes are multiple of 4 bytes. This improves the output of
objdump
; before, the output showed "Address 0x20000004 is out of bounds". -
Linking now aborts if any of the input files contains a .got section. Dynamic relocations are not supported and Rust code is not relocatable by default. This error only occurs if C code that was compiled with the -fPIC flag is linked in. The error message will tell the user how to compile their C code without -fPIC.
v0.3.3 - 2017-07-14
- Updated the documentation: it's no longer necessary to use the
compiler-builtins repository since that crate landed in rust-lang/rust and
it's now available in the
rust-src
component.
v0.3.2 - 2017-07-07
- Tweaked documentation
v0.3.1 - 2017-07-07
- A warning when compiling for x86_64 and the "abort-on-panic" feature is enabled.
v0.3.0 - 2017-07-07
-
A
default_handler!
macro to override the default exception handler. -
An
exception!
macro to override the handler for a particular exception.
-
The FPU will now be enabled before
main
if the target has FPU support. -
[breaking-change] the features "panic-over-itm" and "panic-over-semihosting" has been removed. the
panic_fmt
language item is now not included by default. An opt-in feature named "abort-on-panic" can be enabled to make this crate provide apanic_fmt
implementation that simply aborts. -
[breaking-change] The sections
.rodata.{exceptions,interrupts}
have been renamed to.vector_table.{exceptions,interrupts}
. This break the old mechanism for registering exceptions (static EXCEPTIONS
); use the new ones:default_handler!
andexception!
. -
The
_stack_start
is now optional in thememory.x
file. If unspecified its value will be set toORIGIN(RAM) + LENGTH(RAM)
.
v0.2.4 - 2017-06-03
- A non-allocatable
.stlog
section to support thestlog
logging framework.
v0.2.3 - 2017-05-30
- A
_stext
symbol which can be specified in the linker script to customize the location of the.text
section. If not specified the.text
section will be placed right after the.vector_table
section.
v0.2.2 - 2017-05-27
- A
_sheap
symbol where the heap can be located.
- The linker sections have renamed / reorder to make
arm-none-eabi-size -A
more useful. You'll now see something like this:
$ arm-none-eabi-size -A hello
hello :
section size addr
.vector_table 1024 134217728
.text 288 134218752
.rodata 14 134219040
-
cortex-m-rt::reset_handler
is now the entry point of all programs that link tocortex-m-rt
. This makes GDB'sload
command work correctly. It will now set the Program Counter toreset_handler
after flashing the program so there's no need to reset the microcontroller after flashing. -
Renamed
__exceptions
and__interrupts
symbols, which are only used internally, to_eexceptions
and_einterrupts
respectively for consistency.
- Include input
.text
and.rodata
sections (note: no suffix as in.text.foo
) in the output file. (C) Code compiled without the equivalent-ffunction-sections
/-fdata-sections
may place stuff in those unsuffixed sections.
v0.2.1 - 2017-05-07
- Do not load the
.debug_gdb_script
section in flash. It's only needed for debugging.
v0.2.0 - 2017-04-27
- [breaking-change] the
_stack_start
symbol is now required and must be provided in thememory.x
file when using the "linker-script" feature. This symbol indicates where in memory the call stack will be allocated.
v0.1.3 - 2017-04-25
- A
rustdoc
warning
v0.1.2 - 2017-04-22
- Unclutter the
reset_handler
function for a better debugging experience.
v0.1.1 - 2017-04-15
- Improved linker error messages
Initial release