x86_64: Fix segfault for global data

When offsetted addresses of global non-static data are computed
multiple times in the same statement the x86_64 backend uses
gen_gotpcrel with offset, which implements an add insn on the
register given.  load() uses the R member of the to-be-loaded
value, which doesn't yet have a reg assigned in all cases.

So use the register we're supposed to load the value into as
that register.
This commit is contained in:
Michael Matz
2012-04-15 19:29:45 +02:00
parent 86ac6b9bee
commit 1d0a5c2515
2 changed files with 31 additions and 1 deletions

View File

@ -414,7 +414,7 @@ void load(int r, SValue *sv)
} else {
orex(1,0,r,0x8b);
o(0x05 + REG_VALUE(r) * 8); /* mov xx(%rip), r */
gen_gotpcrel(fr, sv->sym, fc);
gen_gotpcrel(r, sv->sym, fc);
}
#endif
} else if (is64_type(ft)) {