RFA: MIPS/dwarf2 gas patches, take 2
Daniel Jacobowitz
drow@mvista.com
Tue Jun 11 09:15:00 GMT 2002
More information about the Binutils mailing list
Tue Jun 11 09:15:00 GMT 2002
- Previous message (by thread): [nickc@redhat.com: *****SPAM***** Update etc/texi2pod.pl]
- Next message (by thread): Fix NOCROSSREFS fail on hppa64-hp-hpux11
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
How about this patch instead of the last one I submitted? The only real difference is that I clarified ECOFF_DEBUGGING as Richard pointed out. Now it is only 1 if DEBUG_ECOFF or if generating ECOFF. This means that we won't build .mdebug sections in ELF files any more, but it doesn't affect our ECOFF debug output at all. As a side benefit this means that we could now generate COFF from a mipsel-linux assembler with correct debug info if we wanted to. -- Daniel Jacobowitz Carnegie Mellon University MontaVista Software Debian GNU/Linux Developer 2002-06-11 Daniel Jacobowitz <drow@mvista.com> * configure.in: Remove MIPS_STABS_ELF. * configure: Regenerated. * config.in: Regenerated. * config/obj-elf.h (ECOFF_DEBUGGING): Conditionalize on generating ECOFF output. * 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. 2002-06-11 Daniel Jacobowitz <drow@mvista.com> * gas/mips/lineno.d: Use --gstabs. * gas/mips/mips.exp (lineno.s): Remove XFAIL. Index: configure.in =================================================================== RCS file: /cvs/src/src/gas/configure.in,v retrieving revision 1.107 diff -u -p -r1.107 configure.in --- configure.in 9 Jun 2002 00:45:41 -0000 1.107 +++ configure.in 11 Jun 2002 16:06:32 -0000 @@ -170,7 +170,6 @@ changequote([,])dnl dev=no bfd_gas=no em=generic - mips_stabs_elf= # assign object format case ${generic_target} in @@ -373,13 +372,13 @@ changequote([,])dnl mips-*-irix*) fmt=ecoff ;; mips-*-lnews*) fmt=ecoff em=lnews ;; 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*) fmt=elf em=tmips ;; mips-*-sysv*) fmt=ecoff ;; mips-*-elf* | mips-*-rtems* | mips-*-netbsd* | mips-*-openbsd*) fmt=elf ;; - mips-*-vxworks*) fmt=elf mips_stabs_elf=y ;; + mips-*-vxworks*) fmt=elf ;; mmix-*-*) fmt=elf bfd_gas=yes ;; mn10200-*-*) fmt=elf bfd_gas=yes ;; mn10300-*-*) fmt=elf bfd_gas=yes ;; @@ -522,11 +521,6 @@ changequote([,])dnl AC_DEFINE_UNQUOTED(TARGET_BYTES_BIG_ENDIAN, $endian_def, [Define as 1 if big endian.]) 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 Index: config/obj-elf.h =================================================================== RCS file: /cvs/src/src/gas/config/obj-elf.h,v retrieving revision 1.16 diff -u -p -r1.16 obj-elf.h --- config/obj-elf.h 8 Jun 2002 16:04:35 -0000 1.16 +++ config/obj-elf.h 11 Jun 2002 16:06:32 -0000 @@ -48,11 +48,12 @@ extern int alpha_flag_mdebug; /* For now, always set ECOFF_DEBUGGING for a MIPS target. */ #ifdef TC_MIPS -#ifdef MIPS_STABS_ELF -#define ECOFF_DEBUGGING 0 +#ifdef OBJ_MAYBE_ECOFF +#define ECOFF_DEBUGGING \ + (debug_type == DEBUG_ECOFF || OUTPUT_FLAVOR == bfd_target_ecoff_flavour) #else #define ECOFF_DEBUGGING (debug_type == DEBUG_ECOFF) -#endif /* MIPS_STABS_ELF */ +#endif /* OBJ_MAYBE_ECOFF */ #endif /* TC_MIPS */ #ifdef OBJ_MAYBE_ECOFF Index: config/tc-mips.c =================================================================== RCS file: /cvs/src/src/gas/config/tc-mips.c,v retrieving revision 1.142 diff -u -p -r1.142 tc-mips.c --- config/tc-mips.c 8 Jun 2002 07:37:15 -0000 1.142 +++ config/tc-mips.c 11 Jun 2002 16:07:03 -0000 @@ -885,9 +885,7 @@ static const pseudo_typeS mips_pseudo_ta {"text", s_change_sec, 't'}, {"word", s_cons, 2}, -#ifdef MIPS_STABS_ELF { "extern", ecoff_directive_extern, 0}, -#endif { NULL, NULL, 0 }, }; @@ -967,11 +965,10 @@ static boolean imm_unmatched_hi; static boolean mips16_small, mips16_ext; -#ifdef MIPS_STABS_ELF -/* The pdr segment for per procedure frame/regmask info */ +/* The pdr segment for per procedure frame/regmask info. Not used for + ECOFF debugging. */ static segT pdr_seg; -#endif static const char * mips_isa_to_str (isa) @@ -1224,12 +1221,15 @@ md_begin () SEC_HAS_CONTENTS | SEC_READONLY); (void) bfd_set_section_alignment (stdoutput, sec, 2); } - -#ifdef MIPS_STABS_ELF - pdr_seg = subseg_new (".pdr", (subsegT) 0); - (void) bfd_set_section_flags (stdoutput, pdr_seg, - SEC_READONLY | SEC_RELOC | SEC_DEBUGGING); - (void) bfd_set_section_alignment (stdoutput, pdr_seg, 2); +#ifdef OBJ_ELF + else if (OUTPUT_FLAVOR == bfd_target_elf_flavour) + { + pdr_seg = subseg_new (".pdr", (subsegT) 0); + (void) bfd_set_section_flags (stdoutput, pdr_seg, + SEC_READONLY | SEC_RELOC + | SEC_DEBUGGING); + (void) bfd_set_section_alignment (stdoutput, pdr_seg, 2); + } #endif subseg_set (seg, subseg); @@ -13433,46 +13433,52 @@ s_mips_end (x) assert (S_GET_NAME (p)); if (strcmp (S_GET_NAME (p), S_GET_NAME (cur_proc_ptr->isym))) 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 as_warn (_(".end directive missing or unknown symbol")); -#ifdef MIPS_STABS_ELF - { - segT saved_seg = now_seg; - subsegT saved_subseg = now_subseg; - valueT dot; - expressionS exp; - char *fragp; +#ifdef OBJ_ELF + /* Generate a .pdr section. */ + if (OUTPUT_FLAVOR == bfd_target_elf_flavour && ! ECOFF_DEBUGGING) + { + segT saved_seg = now_seg; + subsegT saved_subseg = now_subseg; + valueT dot; + expressionS exp; + char *fragp; - dot = frag_now_fix (); + dot = frag_now_fix (); #ifdef md_flush_pending_output - md_flush_pending_output (); + md_flush_pending_output (); #endif - assert (pdr_seg); - subseg_set (pdr_seg, 0); + assert (pdr_seg); + subseg_set (pdr_seg, 0); - /* Write the symbol. */ - exp.X_op = O_symbol; - exp.X_add_symbol = p; - exp.X_add_number = 0; - emit_expr (&exp, 4); - - fragp = frag_more (7 * 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 + 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 + 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 + 24, (valueT) cur_proc_ptr->pc_reg, 4); - - subseg_set (saved_seg, saved_subseg); - } -#endif /* MIPS_STABS_ELF */ + /* Write the symbol. */ + exp.X_op = O_symbol; + exp.X_add_symbol = p; + exp.X_add_number = 0; + emit_expr (&exp, 4); + + fragp = frag_more (7 * 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 + 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 + 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 + 24, (valueT) cur_proc_ptr->pc_reg, 4); + + subseg_set (saved_seg, saved_subseg); + } +#endif /* OBJ_ELF */ cur_proc_ptr = NULL; } @@ -13526,6 +13532,10 @@ s_mips_ent (aent) symbol_get_bfdsym (symbolP)->flags |= BSF_FUNCTION; ++numprocs; + + if (debug_type == DEBUG_STABS) + stabs_generate_asm_func (S_GET_NAME (symbolP), + S_GET_NAME (symbolP)); } demand_empty_rest_of_line (); @@ -13541,36 +13551,38 @@ static void s_mips_frame (ignore) int ignore ATTRIBUTE_UNUSED; { -#ifdef MIPS_STABS_ELF +#ifdef OBJ_ELF + if (OUTPUT_FLAVOR == bfd_target_elf_flavour && ! ECOFF_DEBUGGING) + { + long val; - long val; + if (cur_proc_ptr == (procS *) NULL) + { + as_warn (_(".frame outside of .ent")); + demand_empty_rest_of_line (); + return; + } - 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); - 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); - 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 */ + else +#endif /* OBJ_ELF */ + s_ignore (ignore); } /* The .fmask and .mask directives. If the mdebug section is present @@ -13583,41 +13595,44 @@ static void s_mips_mask (reg_type) char reg_type; { -#ifdef MIPS_STABS_ELF - long mask, off; - - if (cur_proc_ptr == (procS *) NULL) +#ifdef OBJ_ELF + if (OUTPUT_FLAVOR == bfd_target_elf_flavour && ! ECOFF_DEBUGGING) { - as_warn (_(".mask/.fmask outside of .ent")); - demand_empty_rest_of_line (); - return; - } + long mask, off; - if (get_absolute_expression_and_terminator (&mask) != ',') - { - as_warn (_("Bad .mask/.fmask directive")); - --input_line_pointer; - demand_empty_rest_of_line (); - return; - } + 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 (); + off = get_absolute_expression (); - if (reg_type == 'F') - { - cur_proc_ptr->fpreg_mask = mask; - cur_proc_ptr->fpreg_offset = off; + 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 (); } else - { - cur_proc_ptr->reg_mask = mask; - cur_proc_ptr->reg_offset = off; - } - - demand_empty_rest_of_line (); -#else - s_ignore (reg_type); -#endif /* MIPS_STABS_ELF */ +#endif /* OBJ_ELF */ + s_ignore (reg_type); } /* The .loc directive. */ Index: testsuite/gas/mips/lineno.d =================================================================== RCS file: /cvs/src/src/gas/testsuite/gas/mips/lineno.d,v retrieving revision 1.3 diff -u -p -r1.3 lineno.d --- testsuite/gas/mips/lineno.d 29 Jun 2001 21:27:43 -0000 1.3 +++ testsuite/gas/mips/lineno.d 11 Jun 2002 16:07:06 -0000 @@ -1,6 +1,6 @@ #objdump: -d -l -mmips:4000 #name: assembly line numbers -#as: -g -march=r4000 +#as: --gstabs -march=r4000 .*: +file format .*mips.* Index: testsuite/gas/mips/mips.exp =================================================================== RCS file: /cvs/src/src/gas/testsuite/gas/mips/mips.exp,v retrieving revision 1.36 diff -u -p -r1.36 mips.exp --- testsuite/gas/mips/mips.exp 31 May 2002 18:27:02 -0000 1.36 +++ testsuite/gas/mips/mips.exp 11 Jun 2002 16:07:08 -0000 @@ -145,8 +145,6 @@ if { [istarget mips*-*-*] } then { run_dump_test "mips4650" run_dump_test "mips4100" 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 "sync" run_dump_test "mips32"
- Previous message (by thread): [nickc@redhat.com: *****SPAM***** Update etc/texi2pod.pl]
- Next message (by thread): Fix NOCROSSREFS fail on hppa64-hp-hpux11
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list