Put back an old entry in ChangeLog-9899, deleted when ChangeLog split.
+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
2001-05-14 Richard Henderson <rth@redhat.com>
* ehopt.c (eh_frame_convert_frag): Fix missed subtype adjustment
+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
1999-12-22 Philip Blundell <pb@futuretv.com>
* config/tc-arm.c (arm_s_text): If OBJ_ELF, call the appropriate
f = frag_more (8);
md_number_to_chars (f, insn, 4);
md_number_to_chars (f + 4, limm, 4);
f = frag_more (8);
md_number_to_chars (f, insn, 4);
md_number_to_chars (f + 4, limm, 4);
}
else if (limm_reloc_p)
{
}
else if (limm_reloc_p)
{
{
f = frag_more (4);
md_number_to_chars (f, insn, 4);
{
f = frag_more (4);
md_number_to_chars (f, insn, 4);
}
/* Create any fixups. */
}
/* Create any fixups. */
(bfd_reloc_code_real_type) reloc_type);
}
(bfd_reloc_code_real_type) reloc_type);
}
- dwarf2_emit_insn (4);
-
/* All done. */
return;
}
/* All done. */
return;
}
/* Points to template once we've found it. */
const template *t;
/* 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];
int j;
char mnemonic[MAX_MNEM_SIZE];
+ /* 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)
{
/* Output jumps. */
if (i.tm.opcode_modifier & Jump)
{
bytes for the opcode and room for the prefix and largest
displacement. */
frag_grow (prefix + 2 + 4);
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])
/* Prefix and 1 opcode byte go in fr_fix. */
p = frag_more (prefix + 1);
if (i.prefix[DATA_PREFIX])
size = 1;
if (i.prefix[ADDR_PREFIX])
{
size = 1;
if (i.prefix[ADDR_PREFIX])
{
FRAG_APPEND_1_CHAR (ADDR_PREFIX_OPCODE);
i.prefixes -= 1;
}
FRAG_APPEND_1_CHAR (ADDR_PREFIX_OPCODE);
i.prefixes -= 1;
}
if (i.prefix[DATA_PREFIX])
{
if (i.prefix[DATA_PREFIX])
{
FRAG_APPEND_1_CHAR (DATA_PREFIX_OPCODE);
i.prefixes -= 1;
code16 ^= CODE16;
FRAG_APPEND_1_CHAR (DATA_PREFIX_OPCODE);
i.prefixes -= 1;
code16 ^= CODE16;
if (i.prefix[REX_PREFIX])
{
FRAG_APPEND_1_CHAR (i.prefix[REX_PREFIX]);
if (i.prefix[REX_PREFIX])
{
FRAG_APPEND_1_CHAR (i.prefix[REX_PREFIX]);
if (fits_in_unsigned_byte (i.tm.base_opcode))
{
if (fits_in_unsigned_byte (i.tm.base_opcode))
{
p = frag_more (1 + size);
}
else
{
/* Opcode can be at most two bytes. */
p = frag_more (1 + size);
}
else
{
/* Opcode can be at most two bytes. */
p = frag_more (2 + size);
*p++ = (i.tm.base_opcode >> 8) & 0xff;
}
p = frag_more (2 + size);
*p++ = (i.tm.base_opcode >> 8) & 0xff;
}
as_warn (_("skipping prefixes on this instruction"));
/* 1 opcode; 2 segment; offset */
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])
p = frag_more (prefix + 1 + 2 + size);
if (i.prefix[DATA_PREFIX])
p = frag_more (1);
md_number_to_chars (p, (valueT) *q, 1);
}
p = frag_more (1);
md_number_to_chars (p, (valueT) *q, 1);
}
/* Now the opcode; be careful about word order here! */
if (fits_in_unsigned_byte (i.tm.base_opcode))
{
/* Now the opcode; be careful about word order here! */
if (fits_in_unsigned_byte (i.tm.base_opcode))
{
FRAG_APPEND_1_CHAR (i.tm.base_opcode);
}
else
{
FRAG_APPEND_1_CHAR (i.tm.base_opcode);
}
else
{
p = frag_more (2);
/* Put out high byte first: can't use md_number_to_chars! */
*p++ = (i.tm.base_opcode >> 8) & 0xff;
p = frag_more (2);
/* Put out high byte first: can't use md_number_to_chars! */
*p++ = (i.tm.base_opcode >> 8) & 0xff;
/* Now the modrm byte and sib byte (if present). */
if (i.tm.opcode_modifier & Modrm)
{
/* Now the modrm byte and sib byte (if present). */
if (i.tm.opcode_modifier & Modrm)
{
p = frag_more (1);
md_number_to_chars (p,
(valueT) (i.rm.regmem << 0
p = frag_more (1);
md_number_to_chars (p,
(valueT) (i.rm.regmem << 0
&& i.rm.mode != 3
&& !(i.base_reg && (i.base_reg->reg_type & Reg16) != 0))
{
&& i.rm.mode != 3
&& !(i.base_reg && (i.base_reg->reg_type & Reg16) != 0))
{
p = frag_more (1);
md_number_to_chars (p,
(valueT) (i.sib.base << 0
p = frag_more (1);
md_number_to_chars (p,
(valueT) (i.sib.base << 0
}
val = offset_in_range (i.op[n].disps->X_add_number,
size);
}
val = offset_in_range (i.op[n].disps->X_add_number,
size);
p = frag_more (size);
md_number_to_chars (p, val, size);
}
p = frag_more (size);
md_number_to_chars (p, val, size);
}
p = frag_more (size);
fix_new_exp (frag_now, p - frag_now->fr_literal, size,
i.op[n].disps, pcrel,
p = frag_more (size);
fix_new_exp (frag_now, p - frag_now->fr_literal, size,
i.op[n].disps, pcrel,
}
val = offset_in_range (i.op[n].imms->X_add_number,
size);
}
val = offset_in_range (i.op[n].imms->X_add_number,
size);
p = frag_more (size);
md_number_to_chars (p, val, size);
}
p = frag_more (size);
md_number_to_chars (p, val, size);
}
p = frag_more (size);
reloc_type = reloc (size, 0, sign, i.reloc[n]);
#ifdef BFD_ASSEMBLER
p = frag_more (size);
reloc_type = reloc (size, 0, sign, i.reloc[n]);
#ifdef BFD_ASSEMBLER
- dwarf2_emit_insn (insn_size);
-
#ifdef DEBUG386
if (flag_debug)
{
#ifdef DEBUG386
if (flag_debug)
{
int relaxable = 0;
unsigned long insn;
unsigned long insn_size;
int relaxable = 0;
unsigned long insn;
unsigned long insn_size;
- unsigned long total_insn_size = 0;
char *f;
int i;
int match;
char *f;
int i;
int match;
input_line_pointer = 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)
/* Write out the instruction. */
if (relaxable && fc > 0)
md_number_to_chars (f, insn, insn_size);
md_number_to_chars (f + 2, 0, 4);
}
md_number_to_chars (f, insn, insn_size);
md_number_to_chars (f + 2, 0, 4);
}
- total_insn_size = insn_size;
insn_size = 2;
f = frag_more (insn_size);
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);
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;
md_number_to_chars (f, extra_data, extra_data_len);
extra_data_after_insn = false;
}
input_line_pointer = saved_input_line_pointer;
}
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
}
/* If while processing a fixup, a reloc really needs to be created