With the GNU/GCC model you typically use the linker script (.LD) to stage RAM data in ROM so at startup you can copy it. Code in the startup.s source file uses the symbols to determine the location and size of this data, and then has the assembler equivalent to memcpy() to move from the ROM staging area to the RAM destination.
Perhaps look at some of ST's supplied examples, and some college level texts on linkers, compilers, and embedded programming.