diff options
author | Zack Weinberg <zack@codesourcery.com> | 2004-10-28 21:00:59 +0000 |
---|---|---|
committer | Zack Weinberg <zack@gcc.gnu.org> | 2004-10-28 21:00:59 +0000 |
commit | 859ee18fb4c2e7a26567f7ea00d02b717c807b5b (patch) | |
tree | 7d9c470d1f05a6fb0bdc636091edfcc634cf66a5 /gcc/xcoffout.h | |
parent | 883a2bff66fbcba913f3c21427a0551d8624dc6b (diff) | |
download | gcc-859ee18fb4c2e7a26567f7ea00d02b717c807b5b.zip gcc-859ee18fb4c2e7a26567f7ea00d02b717c807b5b.tar.gz gcc-859ee18fb4c2e7a26567f7ea00d02b717c807b5b.tar.bz2 |
re PR debug/18199 (AIX XCOFF debugging broken)
PR 18199
* dbxout.c (dbxout_begin_complex_stabs_noforcetext): New function.
(DBX_FINISH_STABS): Add (unused by default) SYM parameter.
(dbxout_finish_complex_stabs): Update to match.
(dbxout_symbol_location): Call emit_pending_bincls_if_required
and FORCE_TEXT before DBX_STATIC_BLOCK_START. Use
dbxout_begin_complex_stabs_noforcetext.
* xcoffout.h (DBX_FINISH_STABS): Restore special case for
N_GSYM, using new SYM parameter. Correct logic for special
cases for N_FUN.
From-SVN: r89781
Diffstat (limited to 'gcc/xcoffout.h')
-rw-r--r-- | gcc/xcoffout.h | 61 |
1 files changed, 33 insertions, 28 deletions
diff --git a/gcc/xcoffout.h b/gcc/xcoffout.h index 59a0d3a..a3d2899 100644 --- a/gcc/xcoffout.h +++ b/gcc/xcoffout.h @@ -68,34 +68,39 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA /* Define our own finish symbol function, since xcoff stabs have their own different format. */ -#define DBX_FINISH_STABS(CODE, LINE, ADDR, LABEL, NUMBER) do { \ - if (ADDR) \ - { \ - /* If we are writing a function name, we must ensure that \ - there is no storage-class suffix on the name. */ \ - if (CODE == N_FUN && GET_CODE (ADDR) == SYMBOL_REF) \ - { \ - const char *_p = XSTR (ADDR, 0); \ - if (*_p == '*') \ - fputs (_p+1, asm_out_file); \ - else \ - for (; *_p != '[' && *_p; _p++) \ - putc (*_p, asm_out_file); \ - } \ - else \ - { \ - if (CODE == N_FUN) \ - putc ('.', asm_out_file); \ - output_addr_const (asm_out_file, ADDR); \ - } \ - } \ - else if (LABEL) \ - assemble_name (asm_out_file, LABEL); \ - else \ - dbxout_int (NUMBER); \ - putc (',', asm_out_file); \ - dbxout_int (stab_to_sclass (CODE)); \ - fputs (",0\n", asm_out_file); \ +#define DBX_FINISH_STABS(SYM, CODE, LINE, ADDR, LABEL, NUMBER) do { \ + if (ADDR) \ + { \ + /* If we are writing a function name, we must emit a dot in \ + order to refer to the function code, not its descriptor. */ \ + if (CODE == N_FUN) \ + putc ('.', asm_out_file); \ + \ + /* If we are writing a function name, we must ensure that \ + there is no storage-class suffix on the name. */ \ + if (CODE == N_FUN && GET_CODE (ADDR) == SYMBOL_REF) \ + { \ + const char *_p = XSTR (ADDR, 0); \ + if (*_p == '*') \ + fputs (_p+1, asm_out_file); \ + else \ + for (; *_p != '[' && *_p; _p++) \ + putc (*_p, asm_out_file); \ + } \ + else \ + output_addr_const (asm_out_file, ADDR); \ + } \ + /* Another special case: N_GSYM always gets the symbol name, \ + whether or not LABEL or NUMBER are set. */ \ + else if (CODE == N_GSYM) \ + assemble_name (asm_out_file, XSTR (XEXP (DECL_RTL (SYM), 0), 0)); \ + else if (LABEL) \ + assemble_name (asm_out_file, LABEL); \ + else \ + dbxout_int (NUMBER); \ + putc (',', asm_out_file); \ + dbxout_int (stab_to_sclass (CODE)); \ + fputs (",0\n", asm_out_file); \ } while (0) /* These are IBM XCOFF extensions we need to reference in dbxout.c |