I'm not sure I understand precisely what's going on, but it seems there should be a distinction between @GOT (for global symbols) and @GOTOFF (for local symbols) that gcc is not making, and that this is the problem that is killing gas here...