From: Rob Pike Date: Tue, 30 Apr 2013 16:49:36 +0000 (-0700) Subject: cmd/ld: another attempt at the relocation overflow fix X-Git-Tag: go1.1rc2~31 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=5c0d782ab8a5bffab7de9c91ebfb7fe3f32de1bd;p=gostls13.git cmd/ld: another attempt at the relocation overflow fix R=golang-dev, iant CC=golang-dev https://golang.org/cl/9036046 --- diff --git a/src/cmd/ld/data.c b/src/cmd/ld/data.c index 263dd25828..37ad2f8c87 100644 --- a/src/cmd/ld/data.c +++ b/src/cmd/ld/data.c @@ -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;