If the file that contains _start is in xyz.o, you can specify, in the linker script, that .text from xyz.o goes to address 0x976000 and all other .text goes to 0x8000, no matter where xyz.o is on the command line it has a very specific place in the output.
If you look at the baremetal directory in my github repo, which you have pointed out in your first post. About 2/3rds the way down you see this statement:
"Changing the order of the items on the linker command line has changed
where they are placed in the final binary. And in this case we
are in trouble, this is not working code we dont execute the bootstrap
In there I show, both that changing the order of things on the command line changes where they land in the binary. Also, I show a linker script that specifies a file name, the position of that item in the linker script, and that it has called out a specific file, takes precedence over the command line order.