Commit 196cedd0 by Richard Stallman

*** empty log message ***

From-SVN: r1438
parent a53d0bcc
...@@ -396,7 +396,7 @@ dbxout_init (asm_file, input_file_name, syms) ...@@ -396,7 +396,7 @@ dbxout_init (asm_file, input_file_name, syms)
/* Put the current working directory in an N_SO symbol. */ /* Put the current working directory in an N_SO symbol. */
#ifndef DBX_WORKING_DIRECTORY /* Only some versions of DBX want this, #ifndef DBX_WORKING_DIRECTORY /* Only some versions of DBX want this,
but GDB always does. */ but GDB always does. */
if (use_gdb_dbx_extensions) if (use_gnu_debug_info_extensions)
#endif #endif
{ {
if (cwd || (cwd = getpwd ())) if (cwd || (cwd = getpwd ()))
...@@ -552,7 +552,7 @@ dbxout_type_fields (type) ...@@ -552,7 +552,7 @@ dbxout_type_fields (type)
if (tem != TYPE_FIELDS (type)) if (tem != TYPE_FIELDS (type))
CONTIN; CONTIN;
if (use_gdb_dbx_extensions if (use_gnu_debug_info_extensions
&& flag_minimal_debug && flag_minimal_debug
&& TREE_CODE (tem) == FIELD_DECL && TREE_CODE (tem) == FIELD_DECL
&& DECL_VIRTUAL_P (tem) && DECL_VIRTUAL_P (tem)
...@@ -572,7 +572,7 @@ dbxout_type_fields (type) ...@@ -572,7 +572,7 @@ dbxout_type_fields (type)
fprintf (asmfile, "%s:", IDENTIFIER_POINTER (DECL_NAME (tem))); fprintf (asmfile, "%s:", IDENTIFIER_POINTER (DECL_NAME (tem)));
CHARS (2 + IDENTIFIER_LENGTH (DECL_NAME (tem))); CHARS (2 + IDENTIFIER_LENGTH (DECL_NAME (tem)));
if (use_gdb_dbx_extensions if (use_gnu_debug_info_extensions
&& (TREE_PRIVATE (tem) || TREE_PROTECTED (tem) && (TREE_PRIVATE (tem) || TREE_PROTECTED (tem)
|| TREE_CODE (tem) != FIELD_DECL)) || TREE_CODE (tem) != FIELD_DECL))
{ {
...@@ -591,7 +591,7 @@ dbxout_type_fields (type) ...@@ -591,7 +591,7 @@ dbxout_type_fields (type)
if (TREE_CODE (tem) == VAR_DECL) if (TREE_CODE (tem) == VAR_DECL)
{ {
if (TREE_STATIC (tem) && use_gdb_dbx_extensions) if (TREE_STATIC (tem) && use_gnu_debug_info_extensions)
{ {
char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (tem)); char *name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (tem));
have_used_extensions = 1; have_used_extensions = 1;
...@@ -704,11 +704,10 @@ dbxout_type_methods (type) ...@@ -704,11 +704,10 @@ dbxout_type_methods (type)
type_identifier_length = IDENTIFIER_LENGTH (type_encoding); type_identifier_length = IDENTIFIER_LENGTH (type_encoding);
if (TREE_CODE (methods) == FUNCTION_DECL) if (TREE_VEC_ELT (methods, 0) != NULL_TREE)
fndecl = methods;
else if (TREE_VEC_ELT (methods, 0) != NULL_TREE)
fndecl = TREE_VEC_ELT (methods, 0); fndecl = TREE_VEC_ELT (methods, 0);
else fndecl = TREE_VEC_ELT (methods, 1); else
fndecl = TREE_VEC_ELT (methods, 1);
while (fndecl) while (fndecl)
{ {
...@@ -1013,7 +1012,7 @@ dbxout_type (type, full, show_arg_types) ...@@ -1013,7 +1012,7 @@ dbxout_type (type, full, show_arg_types)
fprintf (asmfile, (TREE_CODE (type) == RECORD_TYPE) ? "s%d" : "u%d", fprintf (asmfile, (TREE_CODE (type) == RECORD_TYPE) ? "s%d" : "u%d",
TREE_INT_CST_LOW (tem)); TREE_INT_CST_LOW (tem));
if (use_gdb_dbx_extensions) if (use_gnu_debug_info_extensions)
{ {
if (n_baseclasses) if (n_baseclasses)
{ {
...@@ -1025,7 +1024,7 @@ dbxout_type (type, full, show_arg_types) ...@@ -1025,7 +1024,7 @@ dbxout_type (type, full, show_arg_types)
for (i = 0; i < n_baseclasses; i++) for (i = 0; i < n_baseclasses; i++)
{ {
tree child = TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO (type)), i); tree child = TREE_VEC_ELT (BINFO_BASETYPES (TYPE_BINFO (type)), i);
if (use_gdb_dbx_extensions) if (use_gnu_debug_info_extensions)
{ {
have_used_extensions = 1; have_used_extensions = 1;
putc (TREE_VIA_VIRTUAL (child) ? '1' putc (TREE_VIA_VIRTUAL (child) ? '1'
...@@ -1059,14 +1058,14 @@ dbxout_type (type, full, show_arg_types) ...@@ -1059,14 +1058,14 @@ dbxout_type (type, full, show_arg_types)
/* Write out the field declarations. */ /* Write out the field declarations. */
dbxout_type_fields (type); dbxout_type_fields (type);
if (use_gdb_dbx_extensions && TYPE_METHODS (type) != NULL_TREE) if (use_gnu_debug_info_extensions && TYPE_METHODS (type) != NULL_TREE)
{ {
have_used_extensions = 1; have_used_extensions = 1;
dbxout_type_methods (type); dbxout_type_methods (type);
} }
putc (';', asmfile); putc (';', asmfile);
if (use_gdb_dbx_extensions && TREE_CODE (type) == RECORD_TYPE if (use_gnu_debug_info_extensions && TREE_CODE (type) == RECORD_TYPE
/* Avoid the ~ if we don't really need it--it confuses dbx. */ /* Avoid the ~ if we don't really need it--it confuses dbx. */
&& TYPE_VFIELD (type)) && TYPE_VFIELD (type))
{ {
...@@ -1127,7 +1126,7 @@ dbxout_type (type, full, show_arg_types) ...@@ -1127,7 +1126,7 @@ dbxout_type (type, full, show_arg_types)
break; break;
case METHOD_TYPE: case METHOD_TYPE:
if (use_gdb_dbx_extensions) if (use_gnu_debug_info_extensions)
{ {
have_used_extensions = 1; have_used_extensions = 1;
putc ('#', asmfile); putc ('#', asmfile);
...@@ -1162,7 +1161,7 @@ dbxout_type (type, full, show_arg_types) ...@@ -1162,7 +1161,7 @@ dbxout_type (type, full, show_arg_types)
break; break;
case OFFSET_TYPE: case OFFSET_TYPE:
if (use_gdb_dbx_extensions) if (use_gnu_debug_info_extensions)
{ {
have_used_extensions = 1; have_used_extensions = 1;
putc ('@', asmfile); putc ('@', asmfile);
...@@ -1181,9 +1180,9 @@ dbxout_type (type, full, show_arg_types) ...@@ -1181,9 +1180,9 @@ dbxout_type (type, full, show_arg_types)
break; break;
case REFERENCE_TYPE: case REFERENCE_TYPE:
if (use_gdb_dbx_extensions) if (use_gnu_debug_info_extensions)
have_used_extensions = 1; have_used_extensions = 1;
putc (use_gdb_dbx_extensions ? '&' : '*', asmfile); putc (use_gnu_debug_info_extensions ? '&' : '*', asmfile);
CHARS (1); CHARS (1);
dbxout_type (TREE_TYPE (type), 0, 0); dbxout_type (TREE_TYPE (type), 0, 0);
break; break;
...@@ -1380,7 +1379,7 @@ dbxout_symbol (decl, local) ...@@ -1380,7 +1379,7 @@ dbxout_symbol (decl, local)
if ((TREE_CODE (type) == RECORD_TYPE if ((TREE_CODE (type) == RECORD_TYPE
|| TREE_CODE (type) == UNION_TYPE) || TREE_CODE (type) == UNION_TYPE)
&& TYPE_NAME (type) == decl && TYPE_NAME (type) == decl
&& !(use_gdb_dbx_extensions && have_used_extensions) && !(use_gnu_debug_info_extensions && have_used_extensions)
&& !TREE_ASM_WRITTEN (TYPE_NAME (type))) && !TREE_ASM_WRITTEN (TYPE_NAME (type)))
{ {
tree name = TYPE_NAME (type); tree name = TYPE_NAME (type);
...@@ -1407,7 +1406,7 @@ dbxout_symbol (decl, local) ...@@ -1407,7 +1406,7 @@ dbxout_symbol (decl, local)
|| TREE_CODE (type) == UNION_TYPE) || TREE_CODE (type) == UNION_TYPE)
&& TYPE_NAME (type) == decl) && TYPE_NAME (type) == decl)
{ {
if (use_gdb_dbx_extensions && have_used_extensions) if (use_gnu_debug_info_extensions && have_used_extensions)
{ {
putc ('T', asmfile); putc ('T', asmfile);
TREE_ASM_WRITTEN (TYPE_NAME (type)) = 1; TREE_ASM_WRITTEN (TYPE_NAME (type)) = 1;
......
...@@ -1040,6 +1040,15 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes) ...@@ -1040,6 +1040,15 @@ final_scan_insn (insn, file, optimize, prescan, nopeepholes)
dwarfout_end_block (pending_blocks[block_depth]); dwarfout_end_block (pending_blocks[block_depth]);
#endif #endif
} }
else if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL
&& (debug_info_level == DINFO_LEVEL_NORMAL
|| debug_info_level == DINFO_LEVEL_VERBOSE))
{
#ifdef DWARF_DEBUGGING_INFO
if (write_symbols == DWARF_DEBUG)
dwarfout_label (insn);
#endif
}
else if (NOTE_LINE_NUMBER (insn) > 0) else if (NOTE_LINE_NUMBER (insn) > 0)
/* This note is a line-number. */ /* This note is a line-number. */
{ {
......
...@@ -2890,6 +2890,8 @@ delete_insn (insn) ...@@ -2890,6 +2890,8 @@ delete_insn (insn)
{ {
register rtx next = NEXT_INSN (insn); register rtx next = NEXT_INSN (insn);
register rtx prev = PREV_INSN (insn); register rtx prev = PREV_INSN (insn);
register int was_code_label = (GET_CODE (insn) == CODE_LABEL);
register int dont_really_delete = 0;
while (next && INSN_DELETED_P (next)) while (next && INSN_DELETED_P (next))
next = NEXT_INSN (next); next = NEXT_INSN (next);
...@@ -2898,8 +2900,17 @@ delete_insn (insn) ...@@ -2898,8 +2900,17 @@ delete_insn (insn)
if (INSN_DELETED_P (insn)) if (INSN_DELETED_P (insn))
return next; return next;
/* Don't delete user-declared labels. Convert them to special NOTEs
instead. */
if (was_code_label && LABEL_NAME (insn) != 0)
{
PUT_CODE (insn, NOTE);
NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED_LABEL;
NOTE_SOURCE_FILE (insn) = 0;
dont_really_delete = 1;
}
else
/* Mark this insn as deleted. */ /* Mark this insn as deleted. */
INSN_DELETED_P (insn) = 1; INSN_DELETED_P (insn) = 1;
/* If this is an unconditional jump, delete it from the jump chain. */ /* If this is an unconditional jump, delete it from the jump chain. */
...@@ -2917,7 +2928,7 @@ delete_insn (insn) ...@@ -2917,7 +2928,7 @@ delete_insn (insn)
/* Patch out INSN (and the barrier if any) */ /* Patch out INSN (and the barrier if any) */
if (optimize) if (optimize && ! dont_really_delete)
{ {
if (prev) if (prev)
{ {
...@@ -2964,7 +2975,7 @@ delete_insn (insn) ...@@ -2964,7 +2975,7 @@ delete_insn (insn)
delete the dispatch table. The tablejump must have gone already. delete the dispatch table. The tablejump must have gone already.
It isn't useful to fall through into a table. */ It isn't useful to fall through into a table. */
if (GET_CODE (insn) == CODE_LABEL if (was_code_label
&& NEXT_INSN (insn) != 0 && NEXT_INSN (insn) != 0
&& GET_CODE (NEXT_INSN (insn)) == JUMP_INSN && GET_CODE (NEXT_INSN (insn)) == JUMP_INSN
&& (GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_VEC && (GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_VEC
...@@ -2973,8 +2984,7 @@ delete_insn (insn) ...@@ -2973,8 +2984,7 @@ delete_insn (insn)
/* If INSN was a label, delete insns following it if now unreachable. */ /* If INSN was a label, delete insns following it if now unreachable. */
if (GET_CODE (insn) == CODE_LABEL && prev if (was_code_label && prev && GET_CODE (prev) == BARRIER)
&& GET_CODE (prev) == BARRIER)
{ {
register RTX_CODE code; register RTX_CODE code;
while (next != 0 while (next != 0
......
...@@ -170,7 +170,8 @@ char *note_insn_name[] = { "NOTE_INSN_FUNCTION_BEG", "NOTE_INSN_DELETED", ...@@ -170,7 +170,8 @@ char *note_insn_name[] = { "NOTE_INSN_FUNCTION_BEG", "NOTE_INSN_DELETED",
"NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END", "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END",
"NOTE_INSN_FUNCTION_END", "NOTE_INSN_SETJMP", "NOTE_INSN_FUNCTION_END", "NOTE_INSN_SETJMP",
"NOTE_INSN_LOOP_CONT", "NOTE_INSN_LOOP_VTOP", "NOTE_INSN_LOOP_CONT", "NOTE_INSN_LOOP_VTOP",
"NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG" }; "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG",
"NOT_INSN_DELETED_LABEL"};
char *reg_note_name[] = { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0", char *reg_note_name[] = { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0",
"REG_EQUAL", "REG_RETVAL", "REG_LIBCALL", "REG_EQUAL", "REG_RETVAL", "REG_LIBCALL",
......
...@@ -340,6 +340,8 @@ extern char *reg_note_name[]; ...@@ -340,6 +340,8 @@ extern char *reg_note_name[];
#define NOTE_INSN_PROLOGUE_END -10 #define NOTE_INSN_PROLOGUE_END -10
/* This marks the point immediately prior to the first epilogue insn. */ /* This marks the point immediately prior to the first epilogue insn. */
#define NOTE_INSN_EPILOGUE_BEG -11 #define NOTE_INSN_EPILOGUE_BEG -11
/* Generated in place of user-declared labels when they are deleted. */
#define NOTE_INSN_DELETED_LABEL -12
/* Don't forget to change note_insn_name in rtl.c. */ /* Don't forget to change note_insn_name in rtl.c. */
#define NOTE_DECL_NAME(INSN) ((INSN)->fld[3].rtstr) #define NOTE_DECL_NAME(INSN) ((INSN)->fld[3].rtstr)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment