1.1 --- a/patches/binutils/2.13.90.0.2/rh62-binutils-2.13.90.0.2-gotpc.patch Tue Aug 14 19:32:22 2007 +0000
1.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
1.3 @@ -1,372 +0,0 @@
1.4 -2002-08-03 Jakub Jelinek <jakub@redhat.com>
1.5 -
1.6 - * config/tc-i386.c (output_insn): Save frag_now and frag_now_fix ()
1.7 - at start of insn, pass it to output_disp and output_imm.
1.8 - (output_disp): Added arguments. If _GLOBAL_OFFSET_TABLE_ is seen
1.9 - in displacement for R_386_32 reloc, use R_386_GOTPC and compute
1.10 - properly addend.
1.11 - (output_imm): Added arguments. Compute properly addend for
1.12 - R_386_GOTPC.
1.13 - (md_apply_fix3): Remove R_386_GOTPC handling.
1.14 - * testsuite/gas/i386/gotpc.s: New.
1.15 - * testsuite/gas/i386/gotpc.d: New.
1.16 - * testsuite/gas/i386/i386.exp: Add gotpc test.
1.17 -
1.18 ---- binutils/gas/config/tc-i386.c.jj 2002-07-18 11:35:39.000000000 +0200
1.19 -+++ binutils/gas/config/tc-i386.c 2002-08-02 21:13:18.000000000 +0200
1.20 -@@ -104,8 +104,10 @@ static void output_insn PARAMS ((void));
1.21 - static void output_branch PARAMS ((void));
1.22 - static void output_jump PARAMS ((void));
1.23 - static void output_interseg_jump PARAMS ((void));
1.24 --static void output_imm PARAMS ((void));
1.25 --static void output_disp PARAMS ((void));
1.26 -+static void output_imm PARAMS ((fragS *insn_start_frag,
1.27 -+ offsetT insn_start_off));
1.28 -+static void output_disp PARAMS ((fragS *insn_start_frag,
1.29 -+ offsetT insn_start_off));
1.30 - #ifndef I386COFF
1.31 - static void s_bss PARAMS ((int));
1.32 - #endif
1.33 -@@ -3101,14 +3103,21 @@ output_interseg_jump ()
1.34 - md_number_to_chars (p + size, (valueT) i.op[0].imms->X_add_number, 2);
1.35 - }
1.36 -
1.37 -+
1.38 - static void
1.39 - output_insn ()
1.40 - {
1.41 -+ fragS *insn_start_frag;
1.42 -+ offsetT insn_start_off;
1.43 -+
1.44 - /* Tie dwarf2 debug info to the address at the start of the insn.
1.45 - We can't do this after the insn has been output as the current
1.46 - frag may have been closed off. eg. by frag_var. */
1.47 - dwarf2_emit_insn (0);
1.48 -
1.49 -+ insn_start_frag = frag_now;
1.50 -+ insn_start_off = frag_now_fix ();
1.51 -+
1.52 - /* Output jumps. */
1.53 - if (i.tm.opcode_modifier & Jump)
1.54 - output_branch ();
1.55 -@@ -3179,10 +3188,10 @@ output_insn ()
1.56 - }
1.57 -
1.58 - if (i.disp_operands)
1.59 -- output_disp ();
1.60 -+ output_disp (insn_start_frag, insn_start_off);
1.61 -
1.62 - if (i.imm_operands)
1.63 -- output_imm ();
1.64 -+ output_imm (insn_start_frag, insn_start_off);
1.65 - }
1.66 -
1.67 - #ifdef DEBUG386
1.68 -@@ -3194,7 +3203,9 @@ output_insn ()
1.69 - }
1.70 -
1.71 - static void
1.72 --output_disp ()
1.73 -+output_disp (insn_start_frag, insn_start_off)
1.74 -+ fragS *insn_start_frag;
1.75 -+ offsetT insn_start_off;
1.76 - {
1.77 - char *p;
1.78 - unsigned int n;
1.79 -@@ -3224,6 +3235,7 @@ output_disp ()
1.80 - }
1.81 - else
1.82 - {
1.83 -+ RELOC_ENUM reloc_type;
1.84 - int size = 4;
1.85 - int sign = 0;
1.86 - int pcrel = (i.flags[n] & Operand_PCrel) != 0;
1.87 -@@ -3266,16 +3278,50 @@ output_disp ()
1.88 - }
1.89 -
1.90 - p = frag_more (size);
1.91 -+ reloc_type = reloc (size, pcrel, sign, i.reloc[n]);
1.92 -+#ifdef BFD_ASSEMBLER
1.93 -+ if (reloc_type == BFD_RELOC_32
1.94 -+ && GOT_symbol
1.95 -+ && GOT_symbol == i.op[n].disps->X_add_symbol
1.96 -+ && (i.op[n].disps->X_op == O_symbol
1.97 -+ || (i.op[n].disps->X_op == O_add
1.98 -+ && ((symbol_get_value_expression
1.99 -+ (i.op[n].disps->X_op_symbol)->X_op)
1.100 -+ == O_subtract))))
1.101 -+ {
1.102 -+ offsetT add;
1.103 -+
1.104 -+ if (insn_start_frag == frag_now)
1.105 -+ add = (p - frag_now->fr_literal) - insn_start_off;
1.106 -+ else
1.107 -+ {
1.108 -+ fragS *fr;
1.109 -+
1.110 -+ add = insn_start_frag->fr_fix - insn_start_off;
1.111 -+ for (fr = insn_start_frag->fr_next;
1.112 -+ fr && fr != frag_now; fr = fr->fr_next)
1.113 -+ add += fr->fr_fix;
1.114 -+ add += p - frag_now->fr_literal;
1.115 -+ }
1.116 -+
1.117 -+ /* We don't support dynamic linking on x86-64 yet. */
1.118 -+ if (flag_code == CODE_64BIT)
1.119 -+ abort ();
1.120 -+ reloc_type = BFD_RELOC_386_GOTPC;
1.121 -+ i.op[n].disps->X_add_number += add;
1.122 -+ }
1.123 -+#endif
1.124 - fix_new_exp (frag_now, p - frag_now->fr_literal, size,
1.125 -- i.op[n].disps, pcrel,
1.126 -- reloc (size, pcrel, sign, i.reloc[n]));
1.127 -+ i.op[n].disps, pcrel, reloc_type);
1.128 - }
1.129 - }
1.130 - }
1.131 - }
1.132 -
1.133 - static void
1.134 --output_imm ()
1.135 -+output_imm (insn_start_frag, insn_start_off)
1.136 -+ fragS *insn_start_frag;
1.137 -+ offsetT insn_start_off;
1.138 - {
1.139 - char *p;
1.140 - unsigned int n;
1.141 -@@ -3328,6 +3374,48 @@ output_imm ()
1.142 - p = frag_more (size);
1.143 - reloc_type = reloc (size, 0, sign, i.reloc[n]);
1.144 - #ifdef BFD_ASSEMBLER
1.145 -+ /* This is tough to explain. We end up with this one if we
1.146 -+ * have operands that look like
1.147 -+ * "_GLOBAL_OFFSET_TABLE_+[.-.L284]". The goal here is to
1.148 -+ * obtain the absolute address of the GOT, and it is strongly
1.149 -+ * preferable from a performance point of view to avoid using
1.150 -+ * a runtime relocation for this. The actual sequence of
1.151 -+ * instructions often look something like:
1.152 -+ *
1.153 -+ * call .L66
1.154 -+ * .L66:
1.155 -+ * popl %ebx
1.156 -+ * addl $_GLOBAL_OFFSET_TABLE_+[.-.L66],%ebx
1.157 -+ *
1.158 -+ * The call and pop essentially return the absolute address
1.159 -+ * of the label .L66 and store it in %ebx. The linker itself
1.160 -+ * will ultimately change the first operand of the addl so
1.161 -+ * that %ebx points to the GOT, but to keep things simple, the
1.162 -+ * .o file must have this operand set so that it generates not
1.163 -+ * the absolute address of .L66, but the absolute address of
1.164 -+ * itself. This allows the linker itself simply treat a GOTPC
1.165 -+ * relocation as asking for a pcrel offset to the GOT to be
1.166 -+ * added in, and the addend of the relocation is stored in the
1.167 -+ * operand field for the instruction itself.
1.168 -+ *
1.169 -+ * Our job here is to fix the operand so that it would add
1.170 -+ * the correct offset so that %ebx would point to itself. The
1.171 -+ * thing that is tricky is that .-.L66 will point to the
1.172 -+ * beginning of the instruction, so we need to further modify
1.173 -+ * the operand so that it will point to itself. There are
1.174 -+ * other cases where you have something like:
1.175 -+ *
1.176 -+ * .long $_GLOBAL_OFFSET_TABLE_+[.-.L66]
1.177 -+ *
1.178 -+ * and here no correction would be required. Internally in
1.179 -+ * the assembler we treat operands of this form as not being
1.180 -+ * pcrel since the '.' is explicitly mentioned, and I wonder
1.181 -+ * whether it would simplify matters to do it this way. Who
1.182 -+ * knows. In earlier versions of the PIC patches, the
1.183 -+ * pcrel_adjust field was used to store the correction, but
1.184 -+ * since the expression is not pcrel, I felt it would be
1.185 -+ * confusing to do it this way. */
1.186 -+
1.187 - if (reloc_type == BFD_RELOC_32
1.188 - && GOT_symbol
1.189 - && GOT_symbol == i.op[n].imms->X_add_symbol
1.190 -@@ -3337,11 +3425,26 @@ output_imm ()
1.191 - (i.op[n].imms->X_op_symbol)->X_op)
1.192 - == O_subtract))))
1.193 - {
1.194 -+ offsetT add;
1.195 -+
1.196 -+ if (insn_start_frag == frag_now)
1.197 -+ add = (p - frag_now->fr_literal) - insn_start_off;
1.198 -+ else
1.199 -+ {
1.200 -+ fragS *fr;
1.201 -+
1.202 -+ add = insn_start_frag->fr_fix - insn_start_off;
1.203 -+ for (fr = insn_start_frag->fr_next;
1.204 -+ fr && fr != frag_now; fr = fr->fr_next)
1.205 -+ add += fr->fr_fix;
1.206 -+ add += p - frag_now->fr_literal;
1.207 -+ }
1.208 -+
1.209 - /* We don't support dynamic linking on x86-64 yet. */
1.210 - if (flag_code == CODE_64BIT)
1.211 - abort ();
1.212 - reloc_type = BFD_RELOC_386_GOTPC;
1.213 -- i.op[n].imms->X_add_number += 3;
1.214 -+ i.op[n].imms->X_add_number += add;
1.215 - }
1.216 - #endif
1.217 - fix_new_exp (frag_now, p - frag_now->fr_literal, size,
1.218 -@@ -4542,48 +4645,6 @@ md_apply_fix3 (fixP, valP, seg)
1.219 - runtime we merely add the offset to the actual PLT entry. */
1.220 - value = -4;
1.221 - break;
1.222 -- case BFD_RELOC_386_GOTPC:
1.223 --
1.224 --/* This is tough to explain. We end up with this one if we have
1.225 -- * operands that look like "_GLOBAL_OFFSET_TABLE_+[.-.L284]". The goal
1.226 -- * here is to obtain the absolute address of the GOT, and it is strongly
1.227 -- * preferable from a performance point of view to avoid using a runtime
1.228 -- * relocation for this. The actual sequence of instructions often look
1.229 -- * something like:
1.230 -- *
1.231 -- * call .L66
1.232 -- * .L66:
1.233 -- * popl %ebx
1.234 -- * addl $_GLOBAL_OFFSET_TABLE_+[.-.L66],%ebx
1.235 -- *
1.236 -- * The call and pop essentially return the absolute address of
1.237 -- * the label .L66 and store it in %ebx. The linker itself will
1.238 -- * ultimately change the first operand of the addl so that %ebx points to
1.239 -- * the GOT, but to keep things simple, the .o file must have this operand
1.240 -- * set so that it generates not the absolute address of .L66, but the
1.241 -- * absolute address of itself. This allows the linker itself simply
1.242 -- * treat a GOTPC relocation as asking for a pcrel offset to the GOT to be
1.243 -- * added in, and the addend of the relocation is stored in the operand
1.244 -- * field for the instruction itself.
1.245 -- *
1.246 -- * Our job here is to fix the operand so that it would add the correct
1.247 -- * offset so that %ebx would point to itself. The thing that is tricky is
1.248 -- * that .-.L66 will point to the beginning of the instruction, so we need
1.249 -- * to further modify the operand so that it will point to itself.
1.250 -- * There are other cases where you have something like:
1.251 -- *
1.252 -- * .long $_GLOBAL_OFFSET_TABLE_+[.-.L66]
1.253 -- *
1.254 -- * and here no correction would be required. Internally in the assembler
1.255 -- * we treat operands of this form as not being pcrel since the '.' is
1.256 -- * explicitly mentioned, and I wonder whether it would simplify matters
1.257 -- * to do it this way. Who knows. In earlier versions of the PIC patches,
1.258 -- * the pcrel_adjust field was used to store the correction, but since the
1.259 -- * expression is not pcrel, I felt it would be confusing to do it this
1.260 -- * way. */
1.261 --
1.262 -- value -= 1;
1.263 -- break;
1.264 - case BFD_RELOC_386_GOT32:
1.265 - case BFD_RELOC_386_TLS_GD:
1.266 - case BFD_RELOC_386_TLS_LDM:
1.267 ---- binutils/gas/testsuite/gas/i386/gotpc.s.jj 2002-08-02 21:17:57.000000000 +0200
1.268 -+++ binutils/gas/testsuite/gas/i386/gotpc.s 2002-08-03 22:55:47.000000000 +0200
1.269 -@@ -0,0 +1,40 @@
1.270 -+ .text
1.271 -+test:
1.272 -+ addl $_GLOBAL_OFFSET_TABLE_+[.-test], %eax
1.273 -+ addl $_GLOBAL_OFFSET_TABLE_+[.-test], %ebx
1.274 -+ addl $_GLOBAL_OFFSET_TABLE_, %eax
1.275 -+ addl $_GLOBAL_OFFSET_TABLE_, %ebx
1.276 -+ leal _GLOBAL_OFFSET_TABLE+[.-test](%eax), %ebx
1.277 -+ leal _GLOBAL_OFFSET_TABLE+[.-test](%ebx), %eax
1.278 -+ leal _GLOBAL_OFFSET_TABLE+[.-test](%eax), %eax
1.279 -+ leal _GLOBAL_OFFSET_TABLE+[.-test](%ebx), %ebx
1.280 -+ subl $_GLOBAL_OFFSET_TABLE_+[.-test], %eax
1.281 -+ subl $_GLOBAL_OFFSET_TABLE_+[.-test], %ebx
1.282 -+ subl $_GLOBAL_OFFSET_TABLE_, %eax
1.283 -+ subl $_GLOBAL_OFFSET_TABLE_, %ebx
1.284 -+ orl $_GLOBAL_OFFSET_TABLE_+[.-test], %eax
1.285 -+ orl $_GLOBAL_OFFSET_TABLE_+[.-test], %ebx
1.286 -+ orl $_GLOBAL_OFFSET_TABLE_, %eax
1.287 -+ orl $_GLOBAL_OFFSET_TABLE_, %ebx
1.288 -+ movl $_GLOBAL_OFFSET_TABLE_+[.-test], %eax
1.289 -+ movl $_GLOBAL_OFFSET_TABLE_+[.-test], %ebx
1.290 -+ movl $_GLOBAL_OFFSET_TABLE_, %eax
1.291 -+ movl $_GLOBAL_OFFSET_TABLE_, %ebx
1.292 -+ movl $_GLOBAL_OFFSET_TABLE_+[.-test], foo
1.293 -+ movl $_GLOBAL_OFFSET_TABLE_+[.-test], %gs:foo
1.294 -+ gs; movl $_GLOBAL_OFFSET_TABLE_+[.-test], foo
1.295 -+ movl $_GLOBAL_OFFSET_TABLE_+[.-test], _GLOBAL_OFFSET_TABLE_
1.296 -+ movl _GLOBAL_OFFSET_TABLE_+[.-test], %eax
1.297 -+ movl _GLOBAL_OFFSET_TABLE_+[.-test], %ebx
1.298 -+ movl %eax, _GLOBAL_OFFSET_TABLE_+[.-test]
1.299 -+ movl %ebx, _GLOBAL_OFFSET_TABLE_+[.-test]
1.300 -+ movl %eax, %gs:_GLOBAL_OFFSET_TABLE_+[.-test]
1.301 -+ movl %ebx, %gs:_GLOBAL_OFFSET_TABLE_+[.-test]
1.302 -+ gs; movl %eax, _GLOBAL_OFFSET_TABLE_+[.-test]
1.303 -+ gs; movl %ebx, _GLOBAL_OFFSET_TABLE_+[.-test]
1.304 -+ leal _GLOBAL_OFFSET_TABLE_@GOTOFF(%ebx), %eax
1.305 -+ leal _GLOBAL_OFFSET_TABLE_@GOTOFF(%ebx), %ebx
1.306 -+ movl _GLOBAL_OFFSET_TABLE_@GOTOFF(%ebx), %eax
1.307 -+ movl _GLOBAL_OFFSET_TABLE_@GOTOFF(%ebx), %ebx
1.308 -+ .long _GLOBAL_OFFSET_TABLE_+[.-test]
1.309 -+ .long _GLOBAL_OFFSET_TABLE_@GOTOFF
1.310 ---- binutils/gas/testsuite/gas/i386/gotpc.d.jj 2002-08-02 21:18:43.000000000 +0200
1.311 -+++ binutils/gas/testsuite/gas/i386/gotpc.d 2002-08-03 23:05:43.000000000 +0200
1.312 -@@ -0,0 +1,52 @@
1.313 -+#objdump: -drw
1.314 -+#name: i386 gotpc
1.315 -+
1.316 -+.*: +file format .*
1.317 -+
1.318 -+Disassembly of section .text:
1.319 -+
1.320 -+0+000 <test>:
1.321 -+ 0: 05 01 00 00 00 [ ]*add \$0x1,%eax 1: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.322 -+ 5: 81 c3 07 00 00 00 [ ]*add \$0x7,%ebx 7: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.323 -+ b: 05 01 00 00 00 [ ]*add \$0x1,%eax c: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.324 -+ 10: 81 c3 02 00 00 00 [ ]*add \$0x2,%ebx 12: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.325 -+ 16: 8d 98 16 00 00 00 [ ]*lea 0x16\(%eax\),%ebx 18: (R_386_)?(dir)?32 _GLOBAL_OFFSET_TABLE
1.326 -+ 1c: 8d 83 1c 00 00 00 [ ]*lea 0x1c\(%ebx\),%eax 1e: (R_386_)?(dir)?32 _GLOBAL_OFFSET_TABLE
1.327 -+ 22: 8d 80 22 00 00 00 [ ]*lea 0x22\(%eax\),%eax 24: (R_386_)?(dir)?32 _GLOBAL_OFFSET_TABLE
1.328 -+ 28: 8d 9b 28 00 00 00 [ ]*lea 0x28\(%ebx\),%ebx 2a: (R_386_)?(dir)?32 _GLOBAL_OFFSET_TABLE
1.329 -+ 2e: 2d 2f 00 00 00 [ ]*sub \$0x2f,%eax 2f: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.330 -+ 33: 81 eb 35 00 00 00 [ ]*sub \$0x35,%ebx 35: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.331 -+ 39: 2d 01 00 00 00 [ ]*sub \$0x1,%eax 3a: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.332 -+ 3e: 81 eb 02 00 00 00 [ ]*sub \$0x2,%ebx 40: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.333 -+ 44: 0d 45 00 00 00 [ ]*or \$0x45,%eax 45: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.334 -+ 49: 81 cb 4b 00 00 00 [ ]*or \$0x4b,%ebx 4b: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.335 -+ 4f: 0d 01 00 00 00 [ ]*or \$0x1,%eax 50: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.336 -+ 54: 81 cb 02 00 00 00 [ ]*or \$0x2,%ebx 56: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.337 -+ 5a: b8 5b 00 00 00 [ ]*mov \$0x5b,%eax 5b: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.338 -+ 5f: bb 60 00 00 00 [ ]*mov \$0x60,%ebx 60: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.339 -+ 64: b8 01 00 00 00 [ ]*mov \$0x1,%eax 65: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.340 -+ 69: bb 01 00 00 00 [ ]*mov \$0x1,%ebx 6a: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.341 -+ 6e: c7 05 00 00 00 00 74 00 00 00 [ ]*movl \$0x74,0x0 70: (R_386_)?(dir)?32 foo
1.342 -+[ ]*74: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.343 -+ 78: 65 c7 05 00 00 00 00 7f 00 00 00 [ ]*movl \$0x7f,%gs:0x0 7b: (R_386_)?(dir)?32 foo
1.344 -+[ ]*7f: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.345 -+ 83: 65 c7 05 00 00 00 00 8a 00 00 00 [ ]*movl \$0x8a,%gs:0x0 86: (R_386_)?(dir)?32 foo
1.346 -+[ ]*8a: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.347 -+ 8e: c7 05 02 00 00 00 94 00 00 00 [ ]*movl \$0x94,0x2 90: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.348 -+[ ]*94: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.349 -+ 98: a1 99 00 00 00 [ ]*mov 0x99,%eax 99: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.350 -+ 9d: 8b 1d 9f 00 00 00 [ ]*mov 0x9f,%ebx 9f: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.351 -+ a3: a3 a4 00 00 00 [ ]*mov %eax,0xa4 a4: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.352 -+ a8: 89 1d aa 00 00 00 [ ]*mov %ebx,0xaa aa: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.353 -+ ae: 65 a3 b0 00 00 00 [ ]*mov %eax,%gs:0xb0 b0: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.354 -+ b4: 65 89 1d b7 00 00 00 [ ]*mov %ebx,%gs:0xb7 b7: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.355 -+ bb: 65 a3 bd 00 00 00 [ ]*mov %eax,%gs:0xbd bd: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.356 -+ c1: 65 89 1d c4 00 00 00 [ ]*mov %ebx,%gs:0xc4 c4: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.357 -+ c8: 8d 83 00 00 00 00 [ ]*lea 0x0\(%ebx\),%eax ca: (R_386_)?GOTOFF _GLOBAL_OFFSET_TABLE_
1.358 -+ ce: 8d 9b 00 00 00 00 [ ]*lea 0x0\(%ebx\),%ebx d0: (R_386_)?GOTOFF _GLOBAL_OFFSET_TABLE_
1.359 -+ d4: 8b 83 00 00 00 00 [ ]*mov 0x0\(%ebx\),%eax d6: (R_386_)?GOTOFF _GLOBAL_OFFSET_TABLE_
1.360 -+ da: 8b 9b 00 00 00 00 [ ]*mov 0x0\(%ebx\),%ebx dc: (R_386_)?GOTOFF _GLOBAL_OFFSET_TABLE_
1.361 -+ e0: e0 00 [ ]*loopne e2 <test\+0xe2> e0: (R_386_)?GOTPC _GLOBAL_OFFSET_TABLE_
1.362 -+ e2: 00 00 [ ]*add %al,\(%eax\)
1.363 -+ e4: 00 00 [ ]*add %al,\(%eax\) e4: (R_386_)?GOTOFF _GLOBAL_OFFSET_TABLE_
1.364 -+ ...
1.365 ---- binutils/gas/testsuite/gas/i386/i386.exp.jj 2002-07-18 11:35:39.000000000 +0200
1.366 -+++ binutils/gas/testsuite/gas/i386/i386.exp 2002-08-02 21:57:46.000000000 +0200
1.367 -@@ -53,6 +53,7 @@ if [expr ([istarget "i*86-*-*"] || [ist
1.368 - run_dump_test "jump"
1.369 - run_dump_test "ssemmx2"
1.370 - run_dump_test "sse2"
1.371 -+ run_dump_test "gotpc"
1.372 -
1.373 - # PIC is only supported on ELF targets.
1.374 - if { ([istarget "*-*-elf*"] || [istarget "*-*-linux*"] )
1.375 -