2002-06-14 H.J. Lu <hjl@gnu.org>

Daniel Jacobowitz  <drow@mvista.com>

        * dwarf2dbg.h (dwarf2_directive_file): Return char *.
        * dwarf2dbg.c (dwarf2_directive_file): Return filename.
        * config/tc-mips.c (s_mips_file): Call s_app_file_string
        and new_logical_line for the first .file directive.
        * read.c (s_app_file_string): New function.
        (s_app_file): Call it.
        * read.h (s_app_file_string): Add declaration.

2002-06-14  Daniel Jacobowitz  <drow@mvista.com>

        * configure.in: Remove MIPS_STABS_ELF.
        * configure: Regenerated.
        * config.in: Regenerated.
        * config/obj-elf.h (ECOFF_DEBUGGING): Define to mips_flag_mdebug
        for MIPS targets.
        * config/tc-mips.c (mips_pseudo_table): Remove #ifdef around
        ".extern".
        (pdr_seg): Declare unconditionally.
        (md_begin): Always generate .pdr unless ECOFF_DEBUGGING or not ELF.
        (s_mips_end): Likewise.  Generate stabs function markers.
        (s_mips_ent): Generate stabs function markers.
        (s_mips_frame): Always generate .pdr unless ECOFF_DEBUGGING or not
        ELF.
        (s_mips_mask): Likewise.
        (mips_flag_mdebug): New.
        (md_longopts): Add "mdebug" and "no-mdebug".
        (md_parse_options): Add OPTION_MDEBUG and OPTION_NO_MDEBUG.
        (mips_after_parse_args): Set mips_flag_mdebug.
        * doc/as.texinfo: Add "-mdebug" and "-no-mdebug" for MIPS.

2002-06-14  Daniel Jacobowitz  <drow@mvista.com>

        * gas/mips/lineno.d: Use --gstabs.
        * gas/mips/mips.exp (lineno.s): Remove XFAIL.
This commit is contained in:
Daniel Jacobowitz 2002-06-14 14:08:54 +00:00
parent a829521801
commit ecb4347ade
14 changed files with 473 additions and 373 deletions

View File

@ -1,3 +1,36 @@
2002-06-14 H.J. Lu <hjl@gnu.org>
Daniel Jacobowitz <drow@mvista.com>
* dwarf2dbg.h (dwarf2_directive_file): Return char *.
* dwarf2dbg.c (dwarf2_directive_file): Return filename.
* config/tc-mips.c (s_mips_file): Call s_app_file_string
and new_logical_line for the first .file directive.
* read.c (s_app_file_string): New function.
(s_app_file): Call it.
* read.h (s_app_file_string): Add declaration.
2002-06-14 Daniel Jacobowitz <drow@mvista.com>
* configure.in: Remove MIPS_STABS_ELF.
* configure: Regenerated.
* config.in: Regenerated.
* config/obj-elf.h (ECOFF_DEBUGGING): Define to mips_flag_mdebug
for MIPS targets.
* config/tc-mips.c (mips_pseudo_table): Remove #ifdef around
".extern".
(pdr_seg): Declare unconditionally.
(md_begin): Always generate .pdr unless ECOFF_DEBUGGING or not ELF.
(s_mips_end): Likewise. Generate stabs function markers.
(s_mips_ent): Generate stabs function markers.
(s_mips_frame): Always generate .pdr unless ECOFF_DEBUGGING or not
ELF.
(s_mips_mask): Likewise.
(mips_flag_mdebug): New.
(md_longopts): Add "mdebug" and "no-mdebug".
(md_parse_options): Add OPTION_MDEBUG and OPTION_NO_MDEBUG.
(mips_after_parse_args): Set mips_flag_mdebug.
* doc/as.texinfo: Add "-mdebug" and "-no-mdebug" for MIPS.
2002-06-13 Maciej W. Rozycki <macro@ds2.pg.gda.pl> 2002-06-13 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
* config/tc-mips.c (md_apply_fix3): Don't subtract the symbol's * config/tc-mips.c (md_apply_fix3): Don't subtract the symbol's

View File

@ -130,9 +130,6 @@
/* Define if you have the <sys/param.h> header file. */ /* Define if you have the <sys/param.h> header file. */
#undef HAVE_SYS_PARAM_H #undef HAVE_SYS_PARAM_H
/* Define if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define if you have the <sys/types.h> header file. */ /* Define if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H #undef HAVE_SYS_TYPES_H
@ -163,9 +160,6 @@
/* Define as 1 if big endian. */ /* Define as 1 if big endian. */
#undef TARGET_BYTES_BIG_ENDIAN #undef TARGET_BYTES_BIG_ENDIAN
/* Use ELF stabs for MIPS, not ECOFF stabs */
#undef MIPS_STABS_ELF
/* Default architecture. */ /* Default architecture. */
#undef DEFAULT_ARCH #undef DEFAULT_ARCH

View File

@ -48,11 +48,8 @@ extern int alpha_flag_mdebug;
/* For now, always set ECOFF_DEBUGGING for a MIPS target. */ /* For now, always set ECOFF_DEBUGGING for a MIPS target. */
#ifdef TC_MIPS #ifdef TC_MIPS
#ifdef MIPS_STABS_ELF #define ECOFF_DEBUGGING mips_flag_mdebug
#define ECOFF_DEBUGGING 0 extern int mips_flag_mdebug;
#else
#define ECOFF_DEBUGGING (debug_type == DEBUG_ECOFF)
#endif /* MIPS_STABS_ELF */
#endif /* TC_MIPS */ #endif /* TC_MIPS */
#ifdef OBJ_MAYBE_ECOFF #ifdef OBJ_MAYBE_ECOFF

View File

@ -77,6 +77,8 @@ static int mips_output_flavor () { return OUTPUT_FLAVOR; }
#define ECOFF_DEBUGGING 0 #define ECOFF_DEBUGGING 0
#endif #endif
int mips_flag_mdebug = -1;
#include "ecoff.h" #include "ecoff.h"
#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
@ -885,9 +887,7 @@ static const pseudo_typeS mips_pseudo_table[] =
{"text", s_change_sec, 't'}, {"text", s_change_sec, 't'},
{"word", s_cons, 2}, {"word", s_cons, 2},
#ifdef MIPS_STABS_ELF
{ "extern", ecoff_directive_extern, 0}, { "extern", ecoff_directive_extern, 0},
#endif
{ NULL, NULL, 0 }, { NULL, NULL, 0 },
}; };
@ -967,11 +967,10 @@ static boolean imm_unmatched_hi;
static boolean mips16_small, mips16_ext; static boolean mips16_small, mips16_ext;
#ifdef MIPS_STABS_ELF /* The pdr segment for per procedure frame/regmask info. Not used for
/* The pdr segment for per procedure frame/regmask info */ ECOFF debugging. */
static segT pdr_seg; static segT pdr_seg;
#endif
static const char * static const char *
mips_isa_to_str (isa) mips_isa_to_str (isa)
@ -1224,12 +1223,15 @@ md_begin ()
SEC_HAS_CONTENTS | SEC_READONLY); SEC_HAS_CONTENTS | SEC_READONLY);
(void) bfd_set_section_alignment (stdoutput, sec, 2); (void) bfd_set_section_alignment (stdoutput, sec, 2);
} }
#ifdef OBJ_ELF
#ifdef MIPS_STABS_ELF else if (OUTPUT_FLAVOR == bfd_target_elf_flavour)
pdr_seg = subseg_new (".pdr", (subsegT) 0); {
(void) bfd_set_section_flags (stdoutput, pdr_seg, pdr_seg = subseg_new (".pdr", (subsegT) 0);
SEC_READONLY | SEC_RELOC | SEC_DEBUGGING); (void) bfd_set_section_flags (stdoutput, pdr_seg,
(void) bfd_set_section_alignment (stdoutput, pdr_seg, 2); SEC_READONLY | SEC_RELOC
| SEC_DEBUGGING);
(void) bfd_set_section_alignment (stdoutput, pdr_seg, 2);
}
#endif #endif
subseg_set (seg, subseg); subseg_set (seg, subseg);
@ -9929,6 +9931,10 @@ struct option md_longopts[] =
{"n32", no_argument, NULL, OPTION_N32}, {"n32", no_argument, NULL, OPTION_N32},
#define OPTION_64 (OPTION_ELF_BASE + 6) #define OPTION_64 (OPTION_ELF_BASE + 6)
{"64", no_argument, NULL, OPTION_64}, {"64", no_argument, NULL, OPTION_64},
#define OPTION_MDEBUG (OPTION_ELF_BASE + 7)
{"mdebug", no_argument, NULL, OPTION_MDEBUG},
#define OPTION_NO_MDEBUG (OPTION_ELF_BASE + 8)
{"no-mdebug", no_argument, NULL, OPTION_NO_MDEBUG},
#endif /* OBJ_ELF */ #endif /* OBJ_ELF */
{NULL, no_argument, NULL, 0} {NULL, no_argument, NULL, 0}
}; };
@ -10295,6 +10301,16 @@ md_parse_option (c, arg)
mips_7000_hilo_fix = false; mips_7000_hilo_fix = false;
break; break;
#ifdef OBJ_ELF
case OPTION_MDEBUG:
mips_flag_mdebug = true;
break;
case OPTION_NO_MDEBUG:
mips_flag_mdebug = false;
break;
#endif /* OBJ_ELF */
default: default:
return 0; return 0;
} }
@ -10650,6 +10666,16 @@ mips_after_parse_args ()
if (HAVE_NEWABI) if (HAVE_NEWABI)
mips_big_got = 1; mips_big_got = 1;
if (mips_flag_mdebug < 0)
{
#ifdef OBJ_MAYBE_ECOFF
if (OUTPUT_FLAVOR == bfd_target_ecoff_flavour)
mips_flag_mdebug = 1;
else
#endif /* OBJ_MAYBE_ECOFF */
mips_flag_mdebug = 0;
}
} }
void void
@ -13365,13 +13391,30 @@ static void
s_mips_file (x) s_mips_file (x)
int x ATTRIBUTE_UNUSED; int x ATTRIBUTE_UNUSED;
{ {
static int first_file_directive = 0;
if (ECOFF_DEBUGGING) if (ECOFF_DEBUGGING)
{ {
get_number (); get_number ();
s_app_file (0); s_app_file (0);
} }
else else
dwarf2_directive_file (0); {
char *filename;
filename = dwarf2_directive_file (0);
/* Versions of GCC up to 3.1 start files with a ".file"
directive even for stabs output. Make sure that this
".file" is handled. Note that you need a version of GCC
after 3.1 in order to support DWARF-2 on MIPS. */
if (filename != NULL && ! first_file_directive)
{
(void) new_logical_line (filename, -1);
s_app_file_string (filename);
}
first_file_directive = 1;
}
} }
/* The .loc directive, implying DWARF-2. */ /* The .loc directive, implying DWARF-2. */
@ -13432,46 +13475,52 @@ s_mips_end (x)
assert (S_GET_NAME (p)); assert (S_GET_NAME (p));
if (strcmp (S_GET_NAME (p), S_GET_NAME (cur_proc_ptr->isym))) if (strcmp (S_GET_NAME (p), S_GET_NAME (cur_proc_ptr->isym)))
as_warn (_(".end symbol does not match .ent symbol.")); as_warn (_(".end symbol does not match .ent symbol."));
if (debug_type == DEBUG_STABS)
stabs_generate_asm_endfunc (S_GET_NAME (p),
S_GET_NAME (p));
} }
else else
as_warn (_(".end directive missing or unknown symbol")); as_warn (_(".end directive missing or unknown symbol"));
#ifdef MIPS_STABS_ELF #ifdef OBJ_ELF
{ /* Generate a .pdr section. */
segT saved_seg = now_seg; if (OUTPUT_FLAVOR == bfd_target_elf_flavour && ! ECOFF_DEBUGGING)
subsegT saved_subseg = now_subseg; {
valueT dot; segT saved_seg = now_seg;
expressionS exp; subsegT saved_subseg = now_subseg;
char *fragp; valueT dot;
expressionS exp;
char *fragp;
dot = frag_now_fix (); dot = frag_now_fix ();
#ifdef md_flush_pending_output #ifdef md_flush_pending_output
md_flush_pending_output (); md_flush_pending_output ();
#endif #endif
assert (pdr_seg); assert (pdr_seg);
subseg_set (pdr_seg, 0); subseg_set (pdr_seg, 0);
/* Write the symbol. */ /* Write the symbol. */
exp.X_op = O_symbol; exp.X_op = O_symbol;
exp.X_add_symbol = p; exp.X_add_symbol = p;
exp.X_add_number = 0; exp.X_add_number = 0;
emit_expr (&exp, 4); emit_expr (&exp, 4);
fragp = frag_more (7 * 4); fragp = frag_more (7 * 4);
md_number_to_chars (fragp, (valueT) cur_proc_ptr->reg_mask, 4); md_number_to_chars (fragp, (valueT) cur_proc_ptr->reg_mask, 4);
md_number_to_chars (fragp + 4, (valueT) cur_proc_ptr->reg_offset, 4); md_number_to_chars (fragp + 4, (valueT) cur_proc_ptr->reg_offset, 4);
md_number_to_chars (fragp + 8, (valueT) cur_proc_ptr->fpreg_mask, 4); md_number_to_chars (fragp + 8, (valueT) cur_proc_ptr->fpreg_mask, 4);
md_number_to_chars (fragp + 12, (valueT) cur_proc_ptr->fpreg_offset, 4); md_number_to_chars (fragp + 12, (valueT) cur_proc_ptr->fpreg_offset, 4);
md_number_to_chars (fragp + 16, (valueT) cur_proc_ptr->frame_offset, 4); md_number_to_chars (fragp + 16, (valueT) cur_proc_ptr->frame_offset, 4);
md_number_to_chars (fragp + 20, (valueT) cur_proc_ptr->frame_reg, 4); md_number_to_chars (fragp + 20, (valueT) cur_proc_ptr->frame_reg, 4);
md_number_to_chars (fragp + 24, (valueT) cur_proc_ptr->pc_reg, 4); md_number_to_chars (fragp + 24, (valueT) cur_proc_ptr->pc_reg, 4);
subseg_set (saved_seg, saved_subseg); subseg_set (saved_seg, saved_subseg);
} }
#endif /* MIPS_STABS_ELF */ #endif /* OBJ_ELF */
cur_proc_ptr = NULL; cur_proc_ptr = NULL;
} }
@ -13525,6 +13574,10 @@ s_mips_ent (aent)
symbol_get_bfdsym (symbolP)->flags |= BSF_FUNCTION; symbol_get_bfdsym (symbolP)->flags |= BSF_FUNCTION;
++numprocs; ++numprocs;
if (debug_type == DEBUG_STABS)
stabs_generate_asm_func (S_GET_NAME (symbolP),
S_GET_NAME (symbolP));
} }
demand_empty_rest_of_line (); demand_empty_rest_of_line ();
@ -13540,36 +13593,38 @@ static void
s_mips_frame (ignore) s_mips_frame (ignore)
int ignore ATTRIBUTE_UNUSED; int ignore ATTRIBUTE_UNUSED;
{ {
#ifdef MIPS_STABS_ELF #ifdef OBJ_ELF
if (OUTPUT_FLAVOR == bfd_target_elf_flavour && ! ECOFF_DEBUGGING)
long val;
if (cur_proc_ptr == (procS *) NULL)
{ {
as_warn (_(".frame outside of .ent")); long val;
if (cur_proc_ptr == (procS *) NULL)
{
as_warn (_(".frame outside of .ent"));
demand_empty_rest_of_line ();
return;
}
cur_proc_ptr->frame_reg = tc_get_register (1);
SKIP_WHITESPACE ();
if (*input_line_pointer++ != ','
|| get_absolute_expression_and_terminator (&val) != ',')
{
as_warn (_("Bad .frame directive"));
--input_line_pointer;
demand_empty_rest_of_line ();
return;
}
cur_proc_ptr->frame_offset = val;
cur_proc_ptr->pc_reg = tc_get_register (0);
demand_empty_rest_of_line (); demand_empty_rest_of_line ();
return;
} }
else
cur_proc_ptr->frame_reg = tc_get_register (1); #endif /* OBJ_ELF */
s_ignore (ignore);
SKIP_WHITESPACE ();
if (*input_line_pointer++ != ','
|| get_absolute_expression_and_terminator (&val) != ',')
{
as_warn (_("Bad .frame directive"));
--input_line_pointer;
demand_empty_rest_of_line ();
return;
}
cur_proc_ptr->frame_offset = val;
cur_proc_ptr->pc_reg = tc_get_register (0);
demand_empty_rest_of_line ();
#else
s_ignore (ignore);
#endif /* MIPS_STABS_ELF */
} }
/* The .fmask and .mask directives. If the mdebug section is present /* The .fmask and .mask directives. If the mdebug section is present
@ -13582,41 +13637,44 @@ static void
s_mips_mask (reg_type) s_mips_mask (reg_type)
char reg_type; char reg_type;
{ {
#ifdef MIPS_STABS_ELF #ifdef OBJ_ELF
long mask, off; if (OUTPUT_FLAVOR == bfd_target_elf_flavour && ! ECOFF_DEBUGGING)
if (cur_proc_ptr == (procS *) NULL)
{ {
as_warn (_(".mask/.fmask outside of .ent")); long mask, off;
if (cur_proc_ptr == (procS *) NULL)
{
as_warn (_(".mask/.fmask outside of .ent"));
demand_empty_rest_of_line ();
return;
}
if (get_absolute_expression_and_terminator (&mask) != ',')
{
as_warn (_("Bad .mask/.fmask directive"));
--input_line_pointer;
demand_empty_rest_of_line ();
return;
}
off = get_absolute_expression ();
if (reg_type == 'F')
{
cur_proc_ptr->fpreg_mask = mask;
cur_proc_ptr->fpreg_offset = off;
}
else
{
cur_proc_ptr->reg_mask = mask;
cur_proc_ptr->reg_offset = off;
}
demand_empty_rest_of_line (); demand_empty_rest_of_line ();
return;
}
if (get_absolute_expression_and_terminator (&mask) != ',')
{
as_warn (_("Bad .mask/.fmask directive"));
--input_line_pointer;
demand_empty_rest_of_line ();
return;
}
off = get_absolute_expression ();
if (reg_type == 'F')
{
cur_proc_ptr->fpreg_mask = mask;
cur_proc_ptr->fpreg_offset = off;
} }
else else
{ #endif /* OBJ_ELF */
cur_proc_ptr->reg_mask = mask; s_ignore (reg_type);
cur_proc_ptr->reg_offset = off;
}
demand_empty_rest_of_line ();
#else
s_ignore (reg_type);
#endif /* MIPS_STABS_ELF */
} }
/* The .loc directive. */ /* The .loc directive. */

479
gas/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -170,7 +170,6 @@ changequote([,])dnl
dev=no dev=no
bfd_gas=no bfd_gas=no
em=generic em=generic
mips_stabs_elf=
# assign object format # assign object format
case ${generic_target} in case ${generic_target} in
@ -373,13 +372,13 @@ changequote([,])dnl
mips-*-irix*) fmt=ecoff ;; mips-*-irix*) fmt=ecoff ;;
mips-*-lnews*) fmt=ecoff em=lnews ;; mips-*-lnews*) fmt=ecoff em=lnews ;;
mips-*-riscos*) fmt=ecoff ;; mips-*-riscos*) fmt=ecoff ;;
mips*-*-linux*) fmt=elf em=tmips mips_stabs_elf=y ;; mips*-*-linux*) fmt=elf em=tmips ;;
mips-*-sysv4*MP* | mips-*-gnu*) mips-*-sysv4*MP* | mips-*-gnu*)
fmt=elf em=tmips ;; fmt=elf em=tmips ;;
mips-*-sysv*) fmt=ecoff ;; mips-*-sysv*) fmt=ecoff ;;
mips-*-elf* | mips-*-rtems* | mips-*-netbsd* | mips-*-openbsd*) mips-*-elf* | mips-*-rtems* | mips-*-netbsd* | mips-*-openbsd*)
fmt=elf ;; fmt=elf ;;
mips-*-vxworks*) fmt=elf mips_stabs_elf=y ;; mips-*-vxworks*) fmt=elf ;;
mmix-*-*) fmt=elf bfd_gas=yes ;; mmix-*-*) fmt=elf bfd_gas=yes ;;
mn10200-*-*) fmt=elf bfd_gas=yes ;; mn10200-*-*) fmt=elf bfd_gas=yes ;;
mn10300-*-*) fmt=elf bfd_gas=yes ;; mn10300-*-*) fmt=elf bfd_gas=yes ;;
@ -524,11 +523,6 @@ changequote([,])dnl
fi fi
fi fi
if test x${mips_stabs_elf} != x; then
AC_DEFINE(MIPS_STABS_ELF, 1,
[Use ELF stabs for MIPS, not ECOFF stabs])
fi
case ${cpu_type}-${fmt} in case ${cpu_type}-${fmt} in
alpha*-*) bfd_gas=yes ;; alpha*-*) bfd_gas=yes ;;
arm-*) bfd_gas=yes ;; arm-*) bfd_gas=yes ;;

View File

@ -382,6 +382,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
[@b{-mips16}] [@b{-no-mips16}] [@b{-mips16}] [@b{-no-mips16}]
[@b{-mips3d}] [@b{-no-mips3d}] [@b{-mips3d}] [@b{-no-mips3d}]
[@b{-mdmx}] [@b{-no-mdmx}] [@b{-mdmx}] [@b{-no-mdmx}]
[@b{-mdebug}] [@b{-no-mdebug}]
@end ifset @end ifset
@ifset MMIX @ifset MMIX
@ -892,6 +893,11 @@ Schedule and tune for a particular @sc{mips} cpu.
Cause nops to be inserted if the read of the destination register Cause nops to be inserted if the read of the destination register
of an mfhi or mflo instruction occurs in the following two instructions. of an mfhi or mflo instruction occurs in the following two instructions.
@item -mdebug
@itemx -no-mdebug
Cause stabs-style debugging output to go into an ECOFF-style .mdebug
section instead of the standard ELF .stabs sections.
@item -mgp32 @item -mgp32
@itemx -mfp32 @itemx -mfp32
The register sizes are normally inferred from the ISA and ABI, but these The register sizes are normally inferred from the ISA and ABI, but these

View File

@ -344,9 +344,13 @@ get_filenum (filename)
return i; return i;
} }
/* Handle the .file directive. */ /* Handle two forms of .file directive:
- Pass .file "source.c" to s_app_file
- Handle .file 1 "source.c" by adding an entry to the DWARF-2 file table
void If an entry is added to the file table, return a pointer to the filename. */
char *
dwarf2_directive_file (dummy) dwarf2_directive_file (dummy)
int dummy ATTRIBUTE_UNUSED; int dummy ATTRIBUTE_UNUSED;
{ {
@ -359,7 +363,7 @@ dwarf2_directive_file (dummy)
if (*input_line_pointer == '"') if (*input_line_pointer == '"')
{ {
s_app_file (0); s_app_file (0);
return; return NULL;
} }
num = get_absolute_expression (); num = get_absolute_expression ();
@ -369,13 +373,13 @@ dwarf2_directive_file (dummy)
if (num < 1) if (num < 1)
{ {
as_bad (_("file number less than one")); as_bad (_("file number less than one"));
return; return NULL;
} }
if (num < (int) files_in_use && files[num].filename != 0) if (num < (int) files_in_use && files[num].filename != 0)
{ {
as_bad (_("file number %ld already allocated"), (long) num); as_bad (_("file number %ld already allocated"), (long) num);
return; return NULL;
} }
if (num >= (int) files_allocated) if (num >= (int) files_allocated)
@ -393,6 +397,8 @@ dwarf2_directive_file (dummy)
files[num].filename = filename; files[num].filename = filename;
files[num].dir = 0; files[num].dir = 0;
files_in_use = num + 1; files_in_use = num + 1;
return filename;
} }
void void

View File

@ -36,7 +36,7 @@ struct dwarf2_line_info {
/* Implements the .file FILENO "FILENAME" directive. FILENO can be 0 /* Implements the .file FILENO "FILENAME" directive. FILENO can be 0
to indicate that no file number has been assigned. All real file to indicate that no file number has been assigned. All real file
number must be >0. */ number must be >0. */
extern void dwarf2_directive_file PARAMS ((int dummy)); extern char *dwarf2_directive_file PARAMS ((int dummy));
/* Implements the .loc FILENO LINENO [COLUMN] directive. FILENO is /* Implements the .loc FILENO LINENO [COLUMN] directive. FILENO is
the file number, LINENO the line number and the (optional) COLUMN the file number, LINENO the line number and the (optional) COLUMN

View File

@ -1571,6 +1571,20 @@ s_data (ignore)
definition for .file; the APPFILE argument is 1 for .appfile, 0 for definition for .file; the APPFILE argument is 1 for .appfile, 0 for
.file. */ .file. */
void
s_app_file_string (file)
char *file;
{
#ifdef LISTING
if (listing)
listing_source_file (file);
#endif
register_dependency (file);
#ifdef obj_app_file
obj_app_file (file);
#endif
}
void void
s_app_file (appfile) s_app_file (appfile)
int appfile; int appfile;
@ -1596,16 +1610,7 @@ s_app_file (appfile)
demand_empty_rest_of_line (); demand_empty_rest_of_line ();
if (!may_omit) if (!may_omit)
{ s_app_file_string (s);
#ifdef LISTING
if (listing)
listing_source_file (s);
#endif
register_dependency (s);
#ifdef obj_app_file
obj_app_file (s);
#endif
}
} }
} }

View File

@ -137,6 +137,7 @@ extern void generate_lineno_debug PARAMS ((void));
extern void s_abort PARAMS ((int)) ATTRIBUTE_NORETURN; extern void s_abort PARAMS ((int)) ATTRIBUTE_NORETURN;
extern void s_align_bytes PARAMS ((int arg)); extern void s_align_bytes PARAMS ((int arg));
extern void s_align_ptwo PARAMS ((int)); extern void s_align_ptwo PARAMS ((int));
extern void s_app_file_string PARAMS ((char *));
extern void s_app_file PARAMS ((int)); extern void s_app_file PARAMS ((int));
extern void s_app_line PARAMS ((int)); extern void s_app_line PARAMS ((int));
extern void s_bad_endr PARAMS ((int)); extern void s_bad_endr PARAMS ((int));

View File

@ -1,3 +1,8 @@
2002-06-14 Daniel Jacobowitz <drow@mvista.com>
* gas/mips/lineno.d: Use --gstabs.
* gas/mips/mips.exp (lineno.s): Remove XFAIL.
2002-06-12 Tom Rix <trix@redhat.com> 2002-06-12 Tom Rix <trix@redhat.com>
* gas/ppc/aix.exp: Run tests for all versions of powerpc AIX. Add * gas/ppc/aix.exp: Run tests for all versions of powerpc AIX. Add

View File

@ -1,6 +1,6 @@
#objdump: -d -l -mmips:4000 #objdump: -d -l -mmips:4000
#name: assembly line numbers #name: assembly line numbers
#as: -g -march=r4000 #as: --gstabs -march=r4000
.*: +file format .*mips.* .*: +file format .*mips.*

View File

@ -145,8 +145,6 @@ if { [istarget mips*-*-*] } then {
run_dump_test "mips4650" run_dump_test "mips4650"
run_dump_test "mips4100" run_dump_test "mips4100"
run_dump_test "perfcount" run_dump_test "perfcount"
# Linux uses ELF stabs, which doesn't support line number.
setup_xfail "mips*-*-*linux*"
run_dump_test "lineno" run_dump_test "lineno"
run_dump_test "sync" run_dump_test "sync"
run_dump_test "mips32" run_dump_test "mips32"