at 17.09-beta 8.1 kB view raw
1https://github.com/golang/go/issues/13114 2https://gnats.netbsd.org/50777 3 4--- a/src/cmd/6l/asm.c 2015-09-23 06:20:05.000000000 +0200 5+++ b/src/cmd/6l/asm.c 2016-03-10 21:00:29.032083210 +0100 6@@ -118,6 +118,8 @@ 7 return; 8 9 case 256 + R_X86_64_GOTPCREL: 10+ case 256 + R_X86_64_GOTPCRELX: 11+ case 256 + R_X86_64_REX_GOTPCRELX: 12 if(targ->type != SDYNIMPORT) { 13 // have symbol 14 if(r->off >= 2 && s->p[r->off-2] == 0x8b) { 15--- a/src/cmd/8l/asm.c 2015-09-23 06:20:05.000000000 +0200 16+++ b/src/cmd/8l/asm.c 2016-03-10 21:02:16.702064080 +0100 17@@ -115,6 +115,7 @@ 18 return; 19 20 case 256 + R_386_GOT32: 21+ case 256 + R_386_GOT32X: 22 if(targ->type != SDYNIMPORT) { 23 // have symbol 24 if(r->off >= 2 && s->p[r->off-2] == 0x8b) { 25--- a/src/cmd/ld/elf.h 2015-09-23 06:20:05.000000000 +0200 26+++ b/src/cmd/ld/elf.h 2016-03-10 21:00:29.033083211 +0100 27@@ -478,32 +478,47 @@ 28 * Relocation types. 29 */ 30 31-#define R_X86_64_NONE 0 /* No relocation. */ 32-#define R_X86_64_64 1 /* Add 64 bit symbol value. */ 33-#define R_X86_64_PC32 2 /* PC-relative 32 bit signed sym value. */ 34-#define R_X86_64_GOT32 3 /* PC-relative 32 bit GOT offset. */ 35-#define R_X86_64_PLT32 4 /* PC-relative 32 bit PLT offset. */ 36-#define R_X86_64_COPY 5 /* Copy data from shared object. */ 37-#define R_X86_64_GLOB_DAT 6 /* Set GOT entry to data address. */ 38-#define R_X86_64_JMP_SLOT 7 /* Set GOT entry to code address. */ 39-#define R_X86_64_RELATIVE 8 /* Add load address of shared object. */ 40-#define R_X86_64_GOTPCREL 9 /* Add 32 bit signed pcrel offset to GOT. */ 41-#define R_X86_64_32 10 /* Add 32 bit zero extended symbol value */ 42-#define R_X86_64_32S 11 /* Add 32 bit sign extended symbol value */ 43-#define R_X86_64_16 12 /* Add 16 bit zero extended symbol value */ 44-#define R_X86_64_PC16 13 /* Add 16 bit signed extended pc relative symbol value */ 45-#define R_X86_64_8 14 /* Add 8 bit zero extended symbol value */ 46-#define R_X86_64_PC8 15 /* Add 8 bit signed extended pc relative symbol value */ 47-#define R_X86_64_DTPMOD64 16 /* ID of module containing symbol */ 48-#define R_X86_64_DTPOFF64 17 /* Offset in TLS block */ 49-#define R_X86_64_TPOFF64 18 /* Offset in static TLS block */ 50-#define R_X86_64_TLSGD 19 /* PC relative offset to GD GOT entry */ 51-#define R_X86_64_TLSLD 20 /* PC relative offset to LD GOT entry */ 52-#define R_X86_64_DTPOFF32 21 /* Offset in TLS block */ 53-#define R_X86_64_GOTTPOFF 22 /* PC relative offset to IE GOT entry */ 54-#define R_X86_64_TPOFF32 23 /* Offset in static TLS block */ 55- 56-#define R_X86_64_COUNT 24 /* Count of defined relocation types. */ 57+#define R_X86_64_NONE 0 58+#define R_X86_64_64 1 59+#define R_X86_64_PC32 2 60+#define R_X86_64_GOT32 3 61+#define R_X86_64_PLT32 4 62+#define R_X86_64_COPY 5 63+#define R_X86_64_GLOB_DAT 6 64+#define R_X86_64_JMP_SLOT 7 65+#define R_X86_64_RELATIVE 8 66+#define R_X86_64_GOTPCREL 9 67+#define R_X86_64_32 10 68+#define R_X86_64_32S 11 69+#define R_X86_64_16 12 70+#define R_X86_64_PC16 13 71+#define R_X86_64_8 14 72+#define R_X86_64_PC8 15 73+#define R_X86_64_DTPMOD64 16 74+#define R_X86_64_DTPOFF64 17 75+#define R_X86_64_TPOFF64 18 76+#define R_X86_64_TLSGD 19 77+#define R_X86_64_TLSLD 20 78+#define R_X86_64_DTPOFF32 21 79+#define R_X86_64_GOTTPOFF 22 80+#define R_X86_64_TPOFF32 23 81+#define R_X86_64_PC64 24 82+#define R_X86_64_GOTOFF64 25 83+#define R_X86_64_GOTPC32 26 84+#define R_X86_64_GOT64 27 85+#define R_X86_64_GOTPCREL64 28 86+#define R_X86_64_GOTPC64 29 87+#define R_X86_64_GOTPLT64 30 88+#define R_X86_64_PLTOFF64 31 89+#define R_X86_64_SIZE32 32 90+#define R_X86_64_SIZE64 33 91+#define R_X86_64_GOTPC32_TLSDEC 34 92+#define R_X86_64_TLSDESC_CALL 35 93+#define R_X86_64_TLSDESC 36 94+#define R_X86_64_IRELATIVE 37 95+#define R_X86_64_PC32_BND 40 96+#define R_X86_64_GOTPCRELX 41 97+#define R_X86_64_REX_GOTPCRELX 42 98 99 100 #define R_ALPHA_NONE 0 /* No reloc */ 101@@ -581,39 +596,42 @@ 102 #define R_ARM_COUNT 38 /* Count of defined relocation types. */ 103 104 105-#define R_386_NONE 0 /* No relocation. */ 106-#define R_386_32 1 /* Add symbol value. */ 107-#define R_386_PC32 2 /* Add PC-relative symbol value. */ 108-#define R_386_GOT32 3 /* Add PC-relative GOT offset. */ 109-#define R_386_PLT32 4 /* Add PC-relative PLT offset. */ 110-#define R_386_COPY 5 /* Copy data from shared object. */ 111-#define R_386_GLOB_DAT 6 /* Set GOT entry to data address. */ 112-#define R_386_JMP_SLOT 7 /* Set GOT entry to code address. */ 113-#define R_386_RELATIVE 8 /* Add load address of shared object. */ 114-#define R_386_GOTOFF 9 /* Add GOT-relative symbol address. */ 115-#define R_386_GOTPC 10 /* Add PC-relative GOT table address. */ 116-#define R_386_TLS_TPOFF 14 /* Negative offset in static TLS block */ 117-#define R_386_TLS_IE 15 /* Absolute address of GOT for -ve static TLS */ 118-#define R_386_TLS_GOTIE 16 /* GOT entry for negative static TLS block */ 119-#define R_386_TLS_LE 17 /* Negative offset relative to static TLS */ 120-#define R_386_TLS_GD 18 /* 32 bit offset to GOT (index,off) pair */ 121-#define R_386_TLS_LDM 19 /* 32 bit offset to GOT (index,zero) pair */ 122-#define R_386_TLS_GD_32 24 /* 32 bit offset to GOT (index,off) pair */ 123-#define R_386_TLS_GD_PUSH 25 /* pushl instruction for Sun ABI GD sequence */ 124-#define R_386_TLS_GD_CALL 26 /* call instruction for Sun ABI GD sequence */ 125-#define R_386_TLS_GD_POP 27 /* popl instruction for Sun ABI GD sequence */ 126-#define R_386_TLS_LDM_32 28 /* 32 bit offset to GOT (index,zero) pair */ 127-#define R_386_TLS_LDM_PUSH 29 /* pushl instruction for Sun ABI LD sequence */ 128-#define R_386_TLS_LDM_CALL 30 /* call instruction for Sun ABI LD sequence */ 129-#define R_386_TLS_LDM_POP 31 /* popl instruction for Sun ABI LD sequence */ 130-#define R_386_TLS_LDO_32 32 /* 32 bit offset from start of TLS block */ 131-#define R_386_TLS_IE_32 33 /* 32 bit offset to GOT static TLS offset entry */ 132-#define R_386_TLS_LE_32 34 /* 32 bit offset within static TLS block */ 133-#define R_386_TLS_DTPMOD32 35 /* GOT entry containing TLS index */ 134-#define R_386_TLS_DTPOFF32 36 /* GOT entry containing TLS offset */ 135-#define R_386_TLS_TPOFF32 37 /* GOT entry of -ve static TLS offset */ 136- 137-#define R_386_COUNT 38 /* Count of defined relocation types. */ 138+#define R_386_NONE 0 139+#define R_386_32 1 140+#define R_386_PC32 2 141+#define R_386_GOT32 3 142+#define R_386_PLT32 4 143+#define R_386_COPY 5 144+#define R_386_GLOB_DAT 6 145+#define R_386_JMP_SLOT 7 146+#define R_386_RELATIVE 8 147+#define R_386_GOTOFF 9 148+#define R_386_GOTPC 10 149+#define R_386_TLS_TPOFF 14 150+#define R_386_TLS_IE 15 151+#define R_386_TLS_GOTIE 16 152+#define R_386_TLS_LE 17 153+#define R_386_TLS_GD 18 154+#define R_386_TLS_LDM 19 155+#define R_386_TLS_GD_32 24 156+#define R_386_TLS_GD_PUSH 25 157+#define R_386_TLS_GD_CALL 26 158+#define R_386_TLS_GD_POP 27 159+#define R_386_TLS_LDM_32 28 160+#define R_386_TLS_LDM_PUSH 29 161+#define R_386_TLS_LDM_CALL 30 162+#define R_386_TLS_LDM_POP 31 163+#define R_386_TLS_LDO_32 32 164+#define R_386_TLS_IE_32 33 165+#define R_386_TLS_LE_32 34 166+#define R_386_TLS_DTPMOD32 35 167+#define R_386_TLS_DTPOFF32 36 168+#define R_386_TLS_TPOFF32 37 169+#define R_386_TLS_GOTDESC 39 170+#define R_386_TLS_DESC_CALL 40 171+#define R_386_TLS_DESC 41 172+#define R_386_IRELATIVE 42 173+#define R_386_GOT32X 43 174 175 #define R_PPC_NONE 0 /* No relocation. */ 176 #define R_PPC_ADDR32 1 177--- a/src/cmd/ld/ldelf.c 2015-09-23 06:20:05.000000000 +0200 178+++ b/src/cmd/ld/ldelf.c 2016-03-10 21:00:29.033083211 +0100 179@@ -888,12 +888,15 @@ 180 case R('6', R_X86_64_PC32): 181 case R('6', R_X86_64_PLT32): 182 case R('6', R_X86_64_GOTPCREL): 183+ case R('6', R_X86_64_GOTPCRELX): 184+ case R('6', R_X86_64_REX_GOTPCRELX): 185 case R('8', R_386_32): 186 case R('8', R_386_PC32): 187 case R('8', R_386_GOT32): 188 case R('8', R_386_PLT32): 189 case R('8', R_386_GOTOFF): 190 case R('8', R_386_GOTPC): 191+ case R('8', R_386_GOT32X): 192 *siz = 4; 193 break; 194 case R('6', R_X86_64_64):