Hello!
Upon linking Im stuck on this error message, which I could not find in the v6.14 errors and warnings reference guide.
In my scatter file, the region definition looks like the snippet below. I am placing static variables at specific addresses (__attribute__((section(".ARM.__at_" #adr)))) to communicate between the loader and operator firmware. Loader is a much smaller project where this same region definition links without an error. Operator code produces this error upon linking.
; DTCM 128k (for stacks) ; DTCM fixed address for fw upgrade (see Upgrade.c) DTCM1 0x20000000 UNINIT 0x00000040 { * (.ARM.__AT_0x200000*) } ; Aligned to 64 byte boundary DTCM2 0x20000040 0x0001FFC0 {
Hello Ronan!
Thanks for taking the time and checking my issue.
You are right, with your solution the linker will issue a warning (L6312W) about the empty execution region, however I am also getting the L6077E linker error. This is why I had to use a named section.
Build started: Project: VMU4-Firmware*** Using Compiler 'V6.14', folder: 'C:\Keil_v5\ARM\ARMCLANG\Bin'Build target 'VMU4-Firmware'compiling Upgrade_Loader.c...linking....\VMU4-Firmware.sct(18): warning: L6312W: Empty Execution region description for region DTCM1.\VMU4-Firmware.sct: Error: L6077E: Region table entry for region DTCM1 is missing.Finished: 0 information, 1 warning and 1 error messages.".\Build\Firmware\VMU4-Firmware.axf" - 1 Error(s), 1 Warning(s).Target not created.Build Time Elapsed: 00:00:07
Hi again Zoltan,
I found the known cause of this error message - it occurs if the region contains only Linker generated objects (usually veneers to enable long branches or similar).I have yet to replicate exactly the error you have, when linking with an empty region, I still get the data placed correctly as per the _at directive (verified with "fromelf -d" on the image). I hope your workaround is sufficient.RegardsRonan
Hey Ronan!
Might be a misunderstanding with my issue, but my problem is only getting the linker error upon compiling the code using _at directives. The data is placed correctly to the requested memory addresses, or at least the map file shows it correctly.
Heres the snippet of the map file:
Execution Region DTCM1 (Exec base: 0x20000000, Load base: 0x080e2f24, Size: 0x00000010, Max: 0x00000040, ABSOLUTE, UNINIT)
Exec Addr Load Addr Size Type Attr Idx E Section Name Object
0x20000000 0x080e2f24 0x00000004 Data RW 3613 .ARM.__at_0x20000000 upgrade.o 0x20000004 0x080e2f28 0x00000004 Data RW 3614 .ARM.__at_0x20000004 upgrade.o 0x20000008 0x080e2f2c 0x00000004 Data RW 3615 .ARM.__at_0x20000008 upgrade.o 0x2000000c 0x080e2f30 0x00000004 Data RW 3616 .ARM.__at_0x2000000C upgrade.o
You may wish to verify the timestamp on that file - if an error (rather than a warning) occurs, the output file will not (or at least should not) be created (you even see "Target not created" in the log).If you can share a reproducible project, we can investigate further - you can raise a support case from the menu above to share privately with Arm (be sure to reference this thread so it can be routed back to me if needed (I work at Arm, but not in the team that receive those cases).