From 5c0d782ab8a5bffab7de9c91ebfb7fe3f32de1bd Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Tue, 30 Apr 2013 09:49:36 -0700 Subject: [PATCH] cmd/ld: another attempt at the relocation overflow fix R=golang-dev, iant CC=golang-dev https://golang.org/cl/9036046 --- src/cmd/ld/data.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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; -- 2.50.0