passes.c: implement pre-ICE emergency dumping
* passes.c (emergency_dump_function): New. * tree-pass.h (emergency_dump_function): Declare. * plugin.c (plugins_internal_error_function): Remove. * plugin.h (plugins_internal_error_function): Remove declaration. * toplev.c (internal_error_function): New static function. Use it... (general_init): ...here. From-SVN: r248736
This commit is contained in:
parent
1e466f0496
commit
a02d1ad2b2
6 changed files with 40 additions and 13 deletions
|
@ -1,3 +1,12 @@
|
|||
2017-05-31 Alexander Monakov <amonakov@ispras.ru>
|
||||
|
||||
* passes.c (emergency_dump_function): New.
|
||||
* tree-pass.h (emergency_dump_function): Declare.
|
||||
* plugin.c (plugins_internal_error_function): Remove.
|
||||
* plugin.h (plugins_internal_error_function): Remove declaration.
|
||||
* toplev.c (internal_error_function): New static function. Use it...
|
||||
(general_init): ...here.
|
||||
|
||||
2017-05-31 Graham Markall <graham.markall@embecosm.com>
|
||||
|
||||
* config/arc/arc.c (arc_print_operand): Handle constant operands.
|
||||
|
|
19
gcc/passes.c
19
gcc/passes.c
|
@ -60,6 +60,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "tree-ssa-live.h" /* For remove_unused_locals. */
|
||||
#include "tree-cfgcleanup.h"
|
||||
#include "insn-addr.h" /* for INSN_ADDRESSES_ALLOC. */
|
||||
#include "diagnostic-core.h" /* for fnotice */
|
||||
|
||||
using namespace gcc;
|
||||
|
||||
|
@ -1779,6 +1780,24 @@ execute_function_dump (function *fn, void *data)
|
|||
}
|
||||
}
|
||||
|
||||
/* This function is called when an internal compiler error is encountered.
|
||||
Ensure that function dump is made available before compiler is aborted. */
|
||||
|
||||
void
|
||||
emergency_dump_function ()
|
||||
{
|
||||
if (!current_pass)
|
||||
return;
|
||||
enum opt_pass_type pt = current_pass->type;
|
||||
fnotice (stderr, "during %s pass: %s\n",
|
||||
pt == GIMPLE_PASS ? "GIMPLE" : pt == RTL_PASS ? "RTL" : "IPA",
|
||||
current_pass->name);
|
||||
if (!dump_file || !cfun)
|
||||
return;
|
||||
fnotice (stderr, "dump file: %s\n", dump_file_name);
|
||||
execute_function_dump (cfun, current_pass);
|
||||
}
|
||||
|
||||
static struct profile_record *profile_record;
|
||||
|
||||
/* Do profile consistency book-keeping for the pass with static number INDEX.
|
||||
|
|
10
gcc/plugin.c
10
gcc/plugin.c
|
@ -858,16 +858,6 @@ warn_if_plugins (void)
|
|||
|
||||
}
|
||||
|
||||
/* Likewise, as a callback from the diagnostics code. */
|
||||
|
||||
void
|
||||
plugins_internal_error_function (diagnostic_context *context ATTRIBUTE_UNUSED,
|
||||
const char *msgid ATTRIBUTE_UNUSED,
|
||||
va_list *ap ATTRIBUTE_UNUSED)
|
||||
{
|
||||
warn_if_plugins ();
|
||||
}
|
||||
|
||||
/* The default version check. Compares every field in VERSION. */
|
||||
|
||||
bool
|
||||
|
|
|
@ -167,8 +167,6 @@ extern bool plugins_active_p (void);
|
|||
extern void dump_active_plugins (FILE *);
|
||||
extern void debug_active_plugins (void);
|
||||
extern void warn_if_plugins (void);
|
||||
extern void plugins_internal_error_function (diagnostic_context *,
|
||||
const char *, va_list *);
|
||||
extern void print_plugins_versions (FILE *file, const char *indent);
|
||||
extern void print_plugins_help (FILE *file, const char *indent);
|
||||
extern void finalize_plugins (void);
|
||||
|
|
12
gcc/toplev.c
12
gcc/toplev.c
|
@ -79,6 +79,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "omp-offload.h"
|
||||
#include "hsa-common.h"
|
||||
#include "edit-context.h"
|
||||
#include "tree-pass.h"
|
||||
|
||||
#if defined(DBX_DEBUGGING_INFO) || defined(XCOFF_DEBUGGING_INFO)
|
||||
#include "dbxout.h"
|
||||
|
@ -1063,6 +1064,15 @@ open_auxiliary_file (const char *ext)
|
|||
return file;
|
||||
}
|
||||
|
||||
/* Auxiliary callback for the diagnostics code. */
|
||||
|
||||
static void
|
||||
internal_error_function (diagnostic_context *, const char *, va_list *)
|
||||
{
|
||||
warn_if_plugins ();
|
||||
emergency_dump_function ();
|
||||
}
|
||||
|
||||
/* Initialization of the front end environment, before command line
|
||||
options are parsed. Signal handlers, internationalization etc.
|
||||
ARGV0 is main's argv[0]. */
|
||||
|
@ -1101,7 +1111,7 @@ general_init (const char *argv0, bool init_signals)
|
|||
= global_options_init.x_flag_diagnostics_show_option;
|
||||
global_dc->show_column
|
||||
= global_options_init.x_flag_show_column;
|
||||
global_dc->internal_error = plugins_internal_error_function;
|
||||
global_dc->internal_error = internal_error_function;
|
||||
global_dc->option_enabled = option_enabled;
|
||||
global_dc->option_state = &global_options;
|
||||
global_dc->option_name = option_name;
|
||||
|
|
|
@ -634,6 +634,7 @@ extern void execute_all_ipa_transforms (void);
|
|||
extern void execute_all_ipa_stmt_fixups (struct cgraph_node *, gimple **);
|
||||
extern bool pass_init_dump_file (opt_pass *);
|
||||
extern void pass_fini_dump_file (opt_pass *);
|
||||
extern void emergency_dump_function (void);
|
||||
|
||||
extern void print_current_pass (FILE *);
|
||||
extern void debug_pass (void);
|
||||
|
|
Loading…
Add table
Reference in a new issue