aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2023-09-29Ensure __pre_init remains in binaryIan McIntyre
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.
2023-09-29Relax asserts for .rodata and .text offsetsIan McIntyre
Haven't fully dug into this one, but GNU ld and LLVM lld have slightly different section positions when we cross from text to data. We can relax the asserts to show ordering without strictly requiring an offset.
2023-09-29Refactor LMA computation in inspect_elfIan McIntyre
Depending on the ordering and contents of program headers, the previous predicate for "is this the program header for this section?" could select the wrong header. GNU's ld and LLVM's lld produce that different header ordering and contents, causing select asserts to fail when using GNU's linker. This commit changes how we select the program header, approximating the way GNU objdump figures the value. This new approach needs more information from the section header, so I'm changing the API to make it easier to call the section_header method. The previous approach was influenced by LLVM objdump. Turns out that LLVM objdump will also compute the wrong LMA for these binaries when they're linked with GNU ld. GNU objdump always produces the correct section LMA, no matter the LLVM or GNU linker.
2023-09-29Use an absolute address for __dcdIan McIntyre
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.
2023-09-08Prepare 0.1.2 releaseIan McIntyre
2023-09-08Remove patched imxrt-ral dependencyIan McIntyre
This development leftover should have been dropped after releasing imxrt-ral 0.5.
2023-09-08Add optional DCD section in linker scriptsummivox
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.
2023-03-25Generate one linker script; add unit testsIan McIntyre
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.
2023-02-14Prepare 0.1.1 releaseIan McIntyre
2023-02-14Bump cortex-m-rt version to 0.7.3Ian McIntyre
The reset handler of 0.7.2 pushes four bytes onto the stack, resulting in a misaligned stack pointer once the next procedure (main) is called. Compilers are free to assume that the stack is eight byte aligned when optimizing code. We depend on this reset handler, so this affects imxrt-rt users. Take the approach recommended in the cortex-m-rt advisory and update to 0.7.3. I tested this by building and running the two examples in this repo on a 1010EVK. Also tested in imxrt-hal by building and running examples on a 1010EVK. cortex-m-rt 0.7.2 is yanked. Since imxrt-rt 0.1.0 fixes its cortex-m-rt version, it will no longer build. I have no plan to also yank imxrt-rt 0.1.0; the upstream yank already signals that something is broken.
2022-12-02Fix tag URLs in CHANGELOGIan McIntyre
2022-12-02Add CHANGELOG for release trackingIan McIntyre
2022-12-01Update to cmrt 0.7.2, and use new featuresIan McIntyre
No need for us to set VTOR and the stack pointer anymore.
2022-12-01Explicitly match family variants in host implIan McIntyre
Might help the next person who wants to add a new family. There's a way to defeat this lint when the enum is (Partial)Eq: use if / else to emulate a fallthrough. I can't find _another_ lint that would prevent that pattern, so I'll try to be vigilent here.
2022-12-01First commitIan McIntyre