Fix dwarf2_emit_insn calls when frag_var breaks things.

Put back an old entry in ChangeLog-9899, deleted when ChangeLog split.
This commit is contained in:
Alan Modra 2001-05-16 01:08:21 +00:00
parent 84fd0d38ae
commit 9fcc94b611
5 changed files with 27 additions and 32 deletions

View file

@ -1,3 +1,12 @@
2001-05-16 Alan Modra <amodra@one.net.au>
* config/tc-arc.c (md_assemble): Correct dwarf2_emit_insn param
for 8 byte insns.
* config/tc-i386.c (md_assemble): Call dwarf2_emit_insn before
opcodes are output rather than after. Delete insn_size.
* config/tc-v850.c (md_assemble): Similarly, but delete
total_insn_size.
2001-05-14 Richard Henderson <rth@redhat.com>
* ehopt.c (eh_frame_convert_frag): Fix missed subtype adjustment

View file

@ -1,3 +1,9 @@
1999-12-27 Alan Modra <alan@spri.levels.unisa.edu.au>
* config/tc-i386.c (MATCH): Relax JumpAbsolute check. Emit a
warning for absolute jump/call without `*' in non-intel mode. No
need to set i.types[0] JumpAbsolute in intel mode.
1999-12-22 Philip Blundell <pb@futuretv.com>
* config/tc-arm.c (arm_s_text): If OBJ_ELF, call the appropriate

View file

@ -806,6 +806,7 @@ md_assemble (str)
f = frag_more (8);
md_number_to_chars (f, insn, 4);
md_number_to_chars (f + 4, limm, 4);
dwarf2_emit_insn (8);
}
else if (limm_reloc_p)
{
@ -816,6 +817,7 @@ md_assemble (str)
{
f = frag_more (4);
md_number_to_chars (f, insn, 4);
dwarf2_emit_insn (4);
}
/* Create any fixups. */
@ -870,8 +872,6 @@ md_assemble (str)
(bfd_reloc_code_real_type) reloc_type);
}
dwarf2_emit_insn (4);
/* All done. */
return;
}

View file

@ -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)
{

View file

@ -1699,7 +1699,6 @@ md_assemble (str)
int relaxable = 0;
unsigned long insn;
unsigned long insn_size;
unsigned long total_insn_size = 0;
char *f;
int i;
int match;
@ -2150,6 +2149,11 @@ md_assemble (str)
input_line_pointer = str;
/* 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);
/* Write out the instruction. */
if (relaxable && fc > 0)
@ -2175,7 +2179,6 @@ md_assemble (str)
md_number_to_chars (f, insn, insn_size);
md_number_to_chars (f + 2, 0, 4);
}
total_insn_size = insn_size;
}
else
{
@ -2190,15 +2193,11 @@ md_assemble (str)
insn_size = 2;
f = frag_more (insn_size);
total_insn_size = insn_size;
md_number_to_chars (f, insn, insn_size);
if (extra_data_after_insn)
{
f = frag_more (extra_data_len);
total_insn_size += extra_data_len;
md_number_to_chars (f, extra_data, extra_data_len);
extra_data_after_insn = false;
@ -2271,8 +2270,6 @@ md_assemble (str)
}
input_line_pointer = saved_input_line_pointer;
dwarf2_emit_insn (total_insn_size);
}
/* If while processing a fixup, a reloc really needs to be created