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:
parent
84fd0d38ae
commit
9fcc94b611
5 changed files with 27 additions and 32 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue