Skip to content

Commit f8c06b1

Browse files
mwhudsonrsc
authored andcommitted
cmd/ld, cmd/5l, cmd/8l: support new 386/amd64 relocations
Backport of golang.org/cl/16529 to release-branch.go1.4. I wanted to build go 1.4 packages for Xenial so I did this. It's not enough for 1.4.4 but it may as well be included if we ever find a reason to release that, so I thought I'd send it in. Change-Id: I907627586e6c7a0580ae447a349c0e3534d64e3d Reviewed-on: https://go-review.googlesource.com/21598 Reviewed-by: Russ Cox <[email protected]>
1 parent 50eb39b commit f8c06b1

File tree

4 files changed

+11
-3
lines changed

4 files changed

+11
-3
lines changed

src/cmd/6l/asm.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,8 @@ adddynrel(LSym *s, Reloc *r)
118118
return;
119119

120120
case 256 + R_X86_64_GOTPCREL:
121+
case 256 + R_X86_64_GOTPCRELX:
122+
case 256 + R_X86_64_REX_GOTPCRELX:
121123
if(targ->type != SDYNIMPORT) {
122124
// have symbol
123125
if(r->off >= 2 && s->p[r->off-2] == 0x8b) {

src/cmd/8l/asm.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ adddynrel(LSym *s, Reloc *r)
115115
return;
116116

117117
case 256 + R_386_GOT32:
118+
case 256 + R_386_GOT32X:
118119
if(targ->type != SDYNIMPORT) {
119120
// have symbol
120121
if(r->off >= 2 && s->p[r->off-2] == 0x8b) {

src/cmd/ld/elf.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -502,8 +502,9 @@ typedef struct {
502502
#define R_X86_64_DTPOFF32 21 /* Offset in TLS block */
503503
#define R_X86_64_GOTTPOFF 22 /* PC relative offset to IE GOT entry */
504504
#define R_X86_64_TPOFF32 23 /* Offset in static TLS block */
505-
506-
#define R_X86_64_COUNT 24 /* Count of defined relocation types. */
505+
#define R_X86_64_GOTPCRELX 41
506+
#define R_X86_64_REX_GOTPCRELX 42
507+
#define R_X86_64_COUNT 26 /* Count of defined relocation types. */
507508

508509

509510
#define R_ALPHA_NONE 0 /* No reloc */
@@ -612,8 +613,9 @@ typedef struct {
612613
#define R_386_TLS_DTPMOD32 35 /* GOT entry containing TLS index */
613614
#define R_386_TLS_DTPOFF32 36 /* GOT entry containing TLS offset */
614615
#define R_386_TLS_TPOFF32 37 /* GOT entry of -ve static TLS offset */
616+
#define R_386_GOT32X 43
615617

616-
#define R_386_COUNT 38 /* Count of defined relocation types. */
618+
#define R_386_COUNT 39 /* Count of defined relocation types. */
617619

618620
#define R_PPC_NONE 0 /* No relocation. */
619621
#define R_PPC_ADDR32 1

src/cmd/ld/ldelf.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -888,12 +888,15 @@ reltype(char *pn, int elftype, uchar *siz)
888888
case R('6', R_X86_64_PC32):
889889
case R('6', R_X86_64_PLT32):
890890
case R('6', R_X86_64_GOTPCREL):
891+
case R('6', R_X86_64_GOTPCRELX):
892+
case R('6', R_X86_64_REX_GOTPCRELX):
891893
case R('8', R_386_32):
892894
case R('8', R_386_PC32):
893895
case R('8', R_386_GOT32):
894896
case R('8', R_386_PLT32):
895897
case R('8', R_386_GOTOFF):
896898
case R('8', R_386_GOTPC):
899+
case R('8', R_386_GOT32X):
897900
*siz = 4;
898901
break;
899902
case R('6', R_X86_64_64):

0 commit comments

Comments
 (0)