I have searched far and wide for how to do this and have failed to come up with an answer.
My memory layout is as follows:
Fake Address | Section
You can force sections at specific locations.
For example in this Red Hat GNU Linker documentation page, you can define the .data section to start at address 0x8000000:
SECTIONS { . = 0x10000; .text : { *(.text) } . = 0x8000000; .data : { *(.data) } .bss : { *(.bss) } }