summaryrefslogtreecommitdiff
path: root/gcc/xcoffout.h
diff options
context:
space:
mode:
authorzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2004-10-28 21:00:59 +0000
committerzack <zack@138bc75d-0d04-0410-961f-82ee72b054a4>2004-10-28 21:00:59 +0000
commit8a2df6f8bf15595048c1b26660e2169bec58e8d8 (patch)
tree7d9c470d1f05a6fb0bdc636091edfcc634cf66a5 /gcc/xcoffout.h
parent0cb38f3ea4061d3c0045facb63df032c399a2910 (diff)
downloadgcc-8a2df6f8bf15595048c1b26660e2169bec58e8d8.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@89781 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/xcoffout.h')
-rw-r--r--gcc/xcoffout.h61
1 files changed, 33 insertions, 28 deletions
diff --git a/gcc/xcoffout.h b/gcc/xcoffout.h
index 59a0d3a0106..a3d28995669 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