aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2019-07-01 08:25:33 +0200
committerJan Beulich <jbeulich@suse.com>2019-07-01 08:25:33 +0200
commitd583596cc910249eff97e8f9b67c6524fb68af72 (patch)
tree38d8a479a4df2f0ece164248b5de812b13c41fb5 /gas
parent9c33702be70a7db648414775faa4850e7cf53034 (diff)
downloadgdb-d583596cc910249eff97e8f9b67c6524fb68af72.zip
gdb-d583596cc910249eff97e8f9b67c6524fb68af72.tar.gz
gdb-d583596cc910249eff97e8f9b67c6524fb68af72.tar.bz2
x86: use encoding_length() also elsewhere
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog4
-rw-r--r--gas/config/tc-i386.c36
2 files changed, 8 insertions, 32 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index b4bf405..664cd14 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,9 @@
2019-07-01 Jan Beulich <jbeulich@suse.com>
+ * tc-i386.c (output_disp, output_imm): Use encoding_length.
+
+2019-07-01 Jan Beulich <jbeulich@suse.com>
+
* tc-i386.c (encoding_length): New.
(output_insn): Use it.
* testsuite/gas/i386/oversized16.l,
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 84c4bc5..f6c14c9 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -8540,25 +8540,11 @@ output_disp (fragS *insn_start_frag, offsetT insn_start_off)
== O_subtract))))
|| reloc_type == BFD_RELOC_32_PCREL))
{
- offsetT add;
-
- if (insn_start_frag == frag_now)
- add = (p - frag_now->fr_literal) - insn_start_off;
- else
- {
- fragS *fr;
-
- add = insn_start_frag->fr_fix - insn_start_off;
- for (fr = insn_start_frag->fr_next;
- fr && fr != frag_now; fr = fr->fr_next)
- add += fr->fr_fix;
- add += p - frag_now->fr_literal;
- }
-
if (!object_64bit)
{
reloc_type = BFD_RELOC_386_GOTPC;
- i.op[n].imms->X_add_number += add;
+ i.op[n].imms->X_add_number +=
+ encoding_length (insn_start_frag, insn_start_off, p);
}
else if (reloc_type == BFD_RELOC_64)
reloc_type = BFD_RELOC_X86_64_GOTPC64;
@@ -8703,28 +8689,14 @@ output_imm (fragS *insn_start_frag, offsetT insn_start_off)
(i.op[n].imms->X_op_symbol)->X_op)
== O_subtract))))
{
- offsetT add;
-
- if (insn_start_frag == frag_now)
- add = (p - frag_now->fr_literal) - insn_start_off;
- else
- {
- fragS *fr;
-
- add = insn_start_frag->fr_fix - insn_start_off;
- for (fr = insn_start_frag->fr_next;
- fr && fr != frag_now; fr = fr->fr_next)
- add += fr->fr_fix;
- add += p - frag_now->fr_literal;
- }
-
if (!object_64bit)
reloc_type = BFD_RELOC_386_GOTPC;
else if (size == 4)
reloc_type = BFD_RELOC_X86_64_GOTPC32;
else if (size == 8)
reloc_type = BFD_RELOC_X86_64_GOTPC64;
- i.op[n].imms->X_add_number += add;
+ i.op[n].imms->X_add_number +=
+ encoding_length (insn_start_frag, insn_start_off, p);
}
fix_new_exp (frag_now, p - frag_now->fr_literal, size,
i.op[n].imms, 0, reloc_type);