All of this seems to be correct, however objdump and the disassembled code show address 0 being used instead of the proper 0x80000000. Is this an issue with my build/linker scripts, or something else?
I’m 99% sure @fsgr is correct, linker scripts are utilized when combining 1 or more objects into an executable or library not when producing an object file.
The object is being linked using the script, there is no other reasonable way that .rodata would end up combined into .text, as appears in the outputted object file.
Yes, but the address in object files is emitted as 0 as it is when all objects are combined into a executable/library that section load addresses are determined (or at runtime when dynamic linking).
What should happen if two objects specify completely different addresses for their text sections? they need to be combined into a single text section in the output binary, that is where the addresses are determined by the executables/libraries linker script.