I didn't go back to test the objdump stuff (I didn't know you could list it like that until I saw your post) but I think the issue is with using memcpy or similar to set up initialised data in one move, when you have more than one DATA section defined.
I would expect them to concatenate correctly if there are no align directives between the sections but that was exactly what I did have.
There is a lot of really weird stuff in the way these linkfiles work. For example, ST's Cube IDE examples have this at the very end
.code_constants_etc :
{
. = ALIGN(4);
*(.text) /* .text sections (code) */
*(.text*) /* .text* sections (code) */
*(.rodata) /* .rodata sections (constants, strings, etc.) */
*(.rodata*) /* .rodata* sections (constants, strings, etc.) */
*(.glue_7) /* glue arm to thumb code */
*(.glue_7t) /* glue thumb to arm code */
*(.eh_frame)
KEEP (*(.init))
KEEP (*(.fini))
. = ALIGN(4);
_e_code_constants_etc = .; /* define a global symbol at end of code */
} >FLASH
It is after collecting DATA, BSS, etc. But there is no reason why one should be collecting the above (into FLASH) after DATA or BSS. But if you put the above before, strange stuff happens. I spent days narrowing this down, and clearly somebody at ST went down the same path, without documenting why. Text and Rodata are clear enough but the rest is quite subtle. Putting *(.eh_frame) into google produces enough reading for days.