aboutsummaryrefslogtreecommitdiff
path: root/gas/config/tc-i386.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2001-05-16 01:08:21 +0000
committerAlan Modra <amodra@gmail.com>2001-05-16 01:08:21 +0000
commit9fcc94b61152a17eb617087ed0d689d5f426883d (patch)
tree8f72671cdfc8c6dbb493b646523e73b5d545aa88 /gas/config/tc-i386.c
parent84fd0d38aef23f365fe9e1ef3dac9ed4f4ae3b4b (diff)
downloadgdb-9fcc94b61152a17eb617087ed0d689d5f426883d.zip
gdb-9fcc94b61152a17eb617087ed0d689d5f426883d.tar.gz
gdb-9fcc94b61152a17eb617087ed0d689d5f426883d.tar.bz2
Fix dwarf2_emit_insn calls when frag_var breaks things.
Put back an old entry in ChangeLog-9899, deleted when ChangeLog split.
Diffstat (limited to 'gas/config/tc-i386.c')
-rw-r--r--gas/config/tc-i386.c27
1 files changed, 5 insertions, 22 deletions
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 57b9b0f..a710532 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -1231,10 +1231,6 @@ md_assemble (line)
/* Points to template once we've found it. */
const template *t;
- /* Count the size of the instruction generated. Does not include
- variable part of jump insns before relax. */
- int insn_size = 0;
-
int j;
char mnemonic[MAX_MNEM_SIZE];
@@ -2702,6 +2698,11 @@ md_assemble (line)
{
register char *p;
+ /* Tie dwarf2 debug info to the address at the start of the insn.
+ We can't do this after the insn has been output as the current
+ frag may have been closed off. eg. by frag_var. */
+ dwarf2_emit_insn (0);
+
/* Output jumps. */
if (i.tm.opcode_modifier & Jump)
{
@@ -2734,7 +2735,6 @@ md_assemble (line)
bytes for the opcode and room for the prefix and largest
displacement. */
frag_grow (prefix + 2 + 4);
- insn_size += prefix + 1;
/* Prefix and 1 opcode byte go in fr_fix. */
p = frag_more (prefix + 1);
if (i.prefix[DATA_PREFIX])
@@ -2766,7 +2766,6 @@ md_assemble (line)
size = 1;
if (i.prefix[ADDR_PREFIX])
{
- insn_size += 1;
FRAG_APPEND_1_CHAR (ADDR_PREFIX_OPCODE);
i.prefixes -= 1;
}
@@ -2781,7 +2780,6 @@ md_assemble (line)
if (i.prefix[DATA_PREFIX])
{
- insn_size += 1;
FRAG_APPEND_1_CHAR (DATA_PREFIX_OPCODE);
i.prefixes -= 1;
code16 ^= CODE16;
@@ -2795,7 +2793,6 @@ md_assemble (line)
if (i.prefix[REX_PREFIX])
{
FRAG_APPEND_1_CHAR (i.prefix[REX_PREFIX]);
- insn_size++;
i.prefixes -= 1;
}
@@ -2804,13 +2801,11 @@ md_assemble (line)
if (fits_in_unsigned_byte (i.tm.base_opcode))
{
- insn_size += 1 + size;
p = frag_more (1 + size);
}
else
{
/* Opcode can be at most two bytes. */
- insn_size += 2 + size;
p = frag_more (2 + size);
*p++ = (i.tm.base_opcode >> 8) & 0xff;
}
@@ -2850,7 +2845,6 @@ md_assemble (line)
as_warn (_("skipping prefixes on this instruction"));
/* 1 opcode; 2 segment; offset */
- insn_size += prefix + 1 + 2 + size;
p = frag_more (prefix + 1 + 2 + size);
if (i.prefix[DATA_PREFIX])
@@ -2898,7 +2892,6 @@ md_assemble (line)
{
if (*q)
{
- insn_size += 1;
p = frag_more (1);
md_number_to_chars (p, (valueT) *q, 1);
}
@@ -2907,12 +2900,10 @@ md_assemble (line)
/* Now the opcode; be careful about word order here! */
if (fits_in_unsigned_byte (i.tm.base_opcode))
{
- insn_size += 1;
FRAG_APPEND_1_CHAR (i.tm.base_opcode);
}
else
{
- insn_size += 2;
p = frag_more (2);
/* Put out high byte first: can't use md_number_to_chars! */
*p++ = (i.tm.base_opcode >> 8) & 0xff;
@@ -2922,7 +2913,6 @@ md_assemble (line)
/* Now the modrm byte and sib byte (if present). */
if (i.tm.opcode_modifier & Modrm)
{
- insn_size += 1;
p = frag_more (1);
md_number_to_chars (p,
(valueT) (i.rm.regmem << 0
@@ -2937,7 +2927,6 @@ md_assemble (line)
&& i.rm.mode != 3
&& !(i.base_reg && (i.base_reg->reg_type & Reg16) != 0))
{
- insn_size += 1;
p = frag_more (1);
md_number_to_chars (p,
(valueT) (i.sib.base << 0
@@ -2971,7 +2960,6 @@ md_assemble (line)
}
val = offset_in_range (i.op[n].disps->X_add_number,
size);
- insn_size += size;
p = frag_more (size);
md_number_to_chars (p, val, size);
}
@@ -3018,7 +3006,6 @@ md_assemble (line)
size = 8;
}
- insn_size += size;
p = frag_more (size);
fix_new_exp (frag_now, p - frag_now->fr_literal, size,
i.op[n].disps, pcrel,
@@ -3053,7 +3040,6 @@ md_assemble (line)
}
val = offset_in_range (i.op[n].imms->X_add_number,
size);
- insn_size += size;
p = frag_more (size);
md_number_to_chars (p, val, size);
}
@@ -3079,7 +3065,6 @@ md_assemble (line)
size = 8;
}
- insn_size += size;
p = frag_more (size);
reloc_type = reloc (size, 0, sign, i.reloc[n]);
#ifdef BFD_ASSEMBLER
@@ -3107,8 +3092,6 @@ md_assemble (line)
}
}
- dwarf2_emit_insn (insn_size);
-
#ifdef DEBUG386
if (flag_debug)
{