| Age | Commit message (Collapse) | Author |
|
Applications linked through this builder can be placed in a flash
reservation. You'll need some other software to launch these programs,
since they lack the boot header required by the NXP boot ROM.
|
|
We added the `.xip` section to ensure that the reset handler and
pre-init functions would be placed in flash. This commit lets users
place other content into that section.
`.xip` is intended for instructions. The runtime builder will place
these instructions into the same load region as `.text`. However,
there's no pre-`main` relocation.
Aligning the `.xip` and the `.text` section produces more predictable
behavior between GNU's ld and LLVM's lld.
|
|
The 1180 family uses a different boot header than previous families. The
header is generated to support the default configuration where hash and
signature errors are ignored.
The XIP `__pre_init` strategy is still used, more for ease of getting
something running than because of any known problems with the boot ROM's
implementation of loading images to different memories.
The boot ROM for the 1180 does not appear to allow the entry point to
lie outside the (loaded or execute-in-place) image, so a new `.xip`
section is added after the vector table to put the address inside the
image while keeping VMA=LMA. This could cause problems for tools that
manipulate binaries based on section names.
|
|
GNU's LTO has a tendency to remove __pre_init, which is written in
inline assembly. It doesn't realize that the reset handler references
this symbol, because the reset handler is also written in inline
assembly. Not sure why LLVM's linker doesn't also optimize it away, but
this commit ensures that __pre_init remains in the output file.
|
|
LLVM's lld and GNU's ld have different ways of handling assignments in
output sections. Unless we specify ABSOLUTE, ld treats the number '0' as
a relative address from the section start, 0x6000_0000. On the other
hand, lld treats '0' as if it were written with ABSOLUTE, and it ignores
the ABSOLUTE function. So depending on your linker, __dcd would change
values.
This commit forces an absolute number for __dcd, ensuring a consistent
value no matter the linker.
|
|
Users can define their device configuration data (DCD), and place the
data in the .dcd section. If the .dcd section has content, the entry in
the IVT points at the user's DCD. This plays well with imxrt-dcd.
|
|
We can still maintain individual linker script components, then write
them into one, larger linker script. We're effectively implementing the
same behavior as INCLUDE while disallowing overrides of the linker
search path to find the INCLUDEd files.
Once we have one linker script, we can refactor for easier unit testing.
This commit adds simple unit tests for the default builder, and some of
the expected errors.
|
|
|