cmd/ld: another attempt at the relocation overflow fix

R=golang-dev, iant
CC=golang-dev
https://golang.org/cl/9036046
This commit is contained in:
Rob Pike 2013-04-30 09:49:36 -07:00
parent 700a126c64
commit 5c0d782ab8
1 changed files with 6 additions and 3 deletions

View File

@ -259,9 +259,12 @@ relocsym(Sym *s)
cursym = s;
diag("bad reloc size %#ux for %s", siz, r->sym->name);
case 4:
if((r->type == D_PCREL && o != (int32)o) || (r->type != D_PCREL && o != (uint32)o)) {
cursym = S;
diag("relocation address is too big: %#llx", o);
if(r->type == D_PCREL) {
if(o != (int32)o)
diag("pc-relative relocation address is too big: %#llx", o);
} else {
if(o != (int32)o && o != (uint32)o)
diag("non-pc-relative relocation address is too big: %#llux", o);
}
fl = o;
cast = (uchar*)&fl;