The changes from r356513 were reverted in r356552 due to being untested. The same is true for r356515 and r35655. When re-applied to -CURRENT, it's possible to cross-build world using GCC9. There's a test failure regarding ZFS during buildworld, but I ignored that for now by defining WITHOUT_GOOGLETEST.
While the cross-built kernel works just fine, all binaries resulting from buildworld that I tested simply crash. I assume that this is why the patch was declared as "almost certainly insufficient".
Taking a look at replacing the native toolchain, I found that base/binutils works well and can built working 12-STABLE kernel and userland. However base/gcc6 results in a partly broken compiler. It does compile a simple "hello world" example, but trying to build e.g. ports shows that the compiler doesn't completely work. And since no unwinder is present there seems to not be too much interesting information in config.log.
I don't really know how to go on from here. If an experienced developer could give me a clue on what to do in such a situation, I'd happily continue poking at this. And should somebody be interested, I can also provide SSH access to a SPARC64 machine (either running 12-STABLE or a 13-CURRENT kernel but 12-STABLE userland).