* config/tc-v850.c: Support dwarf2.

* config/tc-v850.h: Ditto.

* config/tc-v850.c (cons_fix_new_v850): Don't rely on
parse_cons_expression_v850 to initialize hold_cons_reloc.
This commit is contained in:
DJ Delorie 2000-11-15 19:22:22 +00:00
parent 296731c177
commit a8761a19f4
3 changed files with 34 additions and 2 deletions

View File

@ -1,3 +1,11 @@
2000-11-14 DJ Delorie <dj@redhat.com>
* config/tc-v850.c: Support dwarf2.
* config/tc-v850.h: Ditto.
* config/tc-v850.c (cons_fix_new_v850): Don't rely on
parse_cons_expression_v850 to initialize hold_cons_reloc.
2000-11-15 Bernd Schmidt <bernds@redhat.com> 2000-11-15 Bernd Schmidt <bernds@redhat.com>
* tc-ia64.c (struct md): New entries LAST_GROUPS, GROUP_IDX. * tc-ia64.c (struct md): New entries LAST_GROUPS, GROUP_IDX.

View File

@ -1,5 +1,5 @@
/* tc-v850.c -- Assembler code for the NEC V850 /* tc-v850.c -- Assembler code for the NEC V850
Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation. Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation.
This file is part of GAS, the GNU Assembler. This file is part of GAS, the GNU Assembler.
@ -23,6 +23,7 @@
#include "as.h" #include "as.h"
#include "subsegs.h" #include "subsegs.h"
#include "opcode/v850.h" #include "opcode/v850.h"
#include "dwarf2dbg.h"
#define AREA_ZDA 0 #define AREA_ZDA 0
#define AREA_SDA 1 #define AREA_SDA 1
@ -32,7 +33,7 @@
#define SEXT16(x) ((((x) & 0xffff) ^ (~0x7fff)) + 0x8000) #define SEXT16(x) ((((x) & 0xffff) ^ (~0x7fff)) + 0x8000)
/* Temporarily holds the reloc in a cons expression. */ /* Temporarily holds the reloc in a cons expression. */
static bfd_reloc_code_real_type hold_cons_reloc; static bfd_reloc_code_real_type hold_cons_reloc = BFD_RELOC_UNUSED;
/* Set to TRUE if we want to be pedantic about signed overflows. */ /* Set to TRUE if we want to be pedantic about signed overflows. */
static boolean warn_signed_overflows = FALSE; static boolean warn_signed_overflows = FALSE;
@ -607,6 +608,8 @@ const pseudo_typeS md_pseudo_table[] =
{"call_table_text", v850_call_table_text, 0}, {"call_table_text", v850_call_table_text, 0},
{"v850e", set_machine, bfd_mach_v850e}, {"v850e", set_machine, bfd_mach_v850e},
{"v850ea", set_machine, bfd_mach_v850ea}, {"v850ea", set_machine, bfd_mach_v850ea},
{"file", dwarf2_directive_file },
{"loc", dwarf2_directive_loc },
{ NULL, NULL, 0} { NULL, NULL, 0}
}; };
@ -1708,6 +1711,7 @@ md_assemble (str)
int relaxable = 0; int relaxable = 0;
unsigned long insn; unsigned long insn;
unsigned long insn_size; unsigned long insn_size;
unsigned long total_insn_size = 0;
char *f; char *f;
int i; int i;
int match; int match;
@ -2183,6 +2187,7 @@ md_assemble (str)
md_number_to_chars (f, insn, insn_size); md_number_to_chars (f, insn, insn_size);
md_number_to_chars (f + 2, 0, 4); md_number_to_chars (f + 2, 0, 4);
} }
total_insn_size = insn_size;
} }
else else
{ {
@ -2197,12 +2202,14 @@ md_assemble (str)
insn_size = 2; insn_size = 2;
f = frag_more (insn_size); f = frag_more (insn_size);
total_insn_size = insn_size;
md_number_to_chars (f, insn, insn_size); md_number_to_chars (f, insn, insn_size);
if (extra_data_after_insn) if (extra_data_after_insn)
{ {
f = frag_more (extra_data_len); f = frag_more (extra_data_len);
total_insn_size += extra_data_len;
md_number_to_chars (f, extra_data, extra_data_len); md_number_to_chars (f, extra_data, extra_data_len);
@ -2276,6 +2283,9 @@ md_assemble (str)
} }
input_line_pointer = saved_input_line_pointer; input_line_pointer = saved_input_line_pointer;
if (debug_type == DEBUG_DWARF2)
dwarf2_generate_asm_lineno (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
@ -2489,6 +2499,8 @@ cons_fix_new_v850 (frag, where, size, exp)
fix_new_exp (frag, where, size, exp, 0, hold_cons_reloc); fix_new_exp (frag, where, size, exp, 0, hold_cons_reloc);
else else
fix_new (frag, where, size, NULL, 0, 0, hold_cons_reloc); fix_new (frag, where, size, NULL, 0, 0, hold_cons_reloc);
hold_cons_reloc = BFD_RELOC_UNUSED;
} }
boolean boolean
@ -2531,3 +2543,10 @@ v850_force_relocation (fixP)
return 0; return 0;
} }
void
v850_finalize ()
{
if (debug_type == DEBUG_DWARF2)
dwarf2_finish ();
}

View File

@ -89,3 +89,8 @@ extern const struct relax_type md_relax_table[];
#define MD_PCREL_FROM_SECTION(fixP,section) v850_pcrel_from_section (fixP, section) #define MD_PCREL_FROM_SECTION(fixP,section) v850_pcrel_from_section (fixP, section)
extern long v850_pcrel_from_section (); extern long v850_pcrel_from_section ();
#define md_end() v850_finalize ()
extern void v850_finalize PARAMS ((void));
#define DWARF2_LINE_MIN_INSN_LENGTH 2