From: David Malcolm <dmalcolm@redhat.com>
To: gcc-patches@gcc.gnu.org, jit@gcc.gnu.org
Cc: David Malcolm <dmalcolm@redhat.com>
Subject: [PATCH 19/21] PR jit/63854: Fix leak of ipa hooks
Date: Wed, 01 Jan 2014 00:00:00 -0000 [thread overview]
Message-ID: <1416393981-39626-20-git-send-email-dmalcolm@redhat.com> (raw)
In-Reply-To: <1416393981-39626-1-git-send-email-dmalcolm@redhat.com>
This fixes three leaks in IPA seen in jit testcases with valgrind:
This one:
96 bytes in 4 blocks are definitely lost in loss record 102 of 205
at 0x4A0645D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
by 0x5D76447: xmalloc (xmalloc.c:147)
by 0x4E35C23: symbol_table::add_cgraph_insertion_hook(void (*)(cgraph_node*, void*), void*) (cgraph.c:383)
by 0x51070C6: ipa_register_cgraph_hooks() (ipa-prop.c:3864)
by 0x5C753D8: ipcp_generate_summary() (ipa-cp.c:3786)
by 0x5223540: execute_ipa_summary_passes(ipa_opt_pass_d*) (passes.c:2102)
by 0x4E49A60: ipa_passes() (cgraphunit.c:2074)
by 0x4E49E2C: symbol_table::compile() (cgraphunit.c:2172)
by 0x4E4A1C2: symbol_table::finalize_compilation_unit() (cgraphunit.c:2325)
by 0x4DC999C: jit_langhook_write_globals() (dummy-frontend.c:216)
by 0x532B3A6: compile_file() (toplev.c:583)
by 0x532E15F: do_compile() (toplev.c:2020)
appears to be caused by
ipa-prop.c (ipa_register_cgraph_hooks)
unconditionally inserting ipa_add_new_function as
"function_insertion_hook_holder", rather than if the latter is
non-NULL, like the other hooks.
These two in ipa-reference.c:
96 bytes in 4 blocks are definitely lost in loss record 103 of 205
at 0x4A0645D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
by 0x5D76447: xmalloc (xmalloc.c:147)
by 0x4E35AA9: symbol_table::add_cgraph_removal_hook(void (*)(cgraph_node*, void*), void*) (cgraph.c:329)
by 0x5CA446E: ipa_init() (ipa-reference.c:435)
by 0x5CA47D1: generate_summary() (ipa-reference.c:551)
by 0x5CA4E70: propagate() (ipa-reference.c:684)
by 0x5CA640E: (anonymous namespace)::pass_ipa_reference::execute(function*) (ipa-reference.c:1178)
by 0x5223CC1: execute_one_pass(opt_pass*) (passes.c:2306)
by 0x5224B9B: execute_ipa_pass_list(opt_pass*) (passes.c:2700)
by 0x4E49B0D: ipa_passes() (cgraphunit.c:2088)
by 0x4E49E2C: symbol_table::compile() (cgraphunit.c:2172)
by 0x4E4A1C2: symbol_table::finalize_compilation_unit() (cgraphunit.c:2325)
96 bytes in 4 blocks are definitely lost in loss record 104 of 205
at 0x4A0645D: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
by 0x5D76447: xmalloc (xmalloc.c:147)
by 0x4E35E29: symbol_table::add_cgraph_duplication_hook(void (*)(cgraph_node*, cgraph_node*, void*), void*) (cgraph.c:453)
by 0x5CA4493: ipa_init() (ipa-reference.c:437)
by 0x5CA47D1: generate_summary() (ipa-reference.c:551)
by 0x5CA4E70: propagate() (ipa-reference.c:684)
by 0x5CA640E: (anonymous namespace)::pass_ipa_reference::execute(function*) (ipa-reference.c:1178)
by 0x5223CC1: execute_one_pass(opt_pass*) (passes.c:2306)
by 0x5224B9B: execute_ipa_pass_list(opt_pass*) (passes.c:2700)
by 0x4E49B0D: ipa_passes() (cgraphunit.c:2088)
by 0x4E49E2C: symbol_table::compile() (cgraphunit.c:2172)
by 0x4E4A1C2: symbol_table::finalize_compilation_unit() (cgraphunit.c:2325)
appear to be due to th hooks never being removed.
My patch hacks in a removal of them into ipa_reference_c_finalize, but
I suspect there's a cleaner place to put this.
gcc/ChangeLog:
PR jit/63854
* ipa-prop.c (ipa_register_cgraph_hooks): Guard insertion of
ipa_add_new_function on function_insertion_hook_holder being
non-NULL.
* ipa-reference.c (ipa_reference_c_finalize): Remove
node_removal_hook_holder and node_duplication_hook_holder if
they've been added to symtab.
* toplev.c (toplev::finalize): Call ipa_reference_c_finalize
before cgraph_c_finalize so that the former can access "symtab".
---
gcc/ipa-prop.c | 3 ++-
gcc/ipa-reference.c | 11 +++++++++++
gcc/toplev.c | 4 +++-
3 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
index f87243c..a8238ac 100644
--- a/gcc/ipa-prop.c
+++ b/gcc/ipa-prop.c
@@ -3552,7 +3552,8 @@ ipa_register_cgraph_hooks (void)
if (!node_duplication_hook_holder)
node_duplication_hook_holder =
symtab->add_cgraph_duplication_hook (&ipa_node_duplication_hook, NULL);
- function_insertion_hook_holder =
+ if (!function_insertion_hook_holder)
+ function_insertion_hook_holder =
symtab->add_cgraph_insertion_hook (&ipa_add_new_function, NULL);
}
diff --git a/gcc/ipa-reference.c b/gcc/ipa-reference.c
index 1ce06d1..b046f9e 100644
--- a/gcc/ipa-reference.c
+++ b/gcc/ipa-reference.c
@@ -1198,4 +1198,15 @@ ipa_reference_c_finalize (void)
bitmap_obstack_release (&optimization_summary_obstack);
ipa_init_p = false;
}
+
+ if (node_removal_hook_holder)
+ {
+ symtab->remove_cgraph_removal_hook (node_removal_hook_holder);
+ node_removal_hook_holder = NULL;
+ }
+ if (node_duplication_hook_holder)
+ {
+ symtab->remove_cgraph_duplication_hook (node_duplication_hook_holder);
+ node_duplication_hook_holder = NULL;
+ }
}
diff --git a/gcc/toplev.c b/gcc/toplev.c
index c0c418c..96e7af9 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -2162,12 +2162,14 @@ toplev::finalize (void)
rtl_initialized = false;
this_target_rtl->target_specific_initialized = false;
+ /* Needs to be called before cgraph_c_finalize since it uses symtab. */
+ ipa_reference_c_finalize ();
+
cgraph_c_finalize ();
cgraphunit_c_finalize ();
dwarf2out_c_finalize ();
gcse_c_finalize ();
ipa_cp_c_finalize ();
- ipa_reference_c_finalize ();
ira_costs_c_finalize ();
params_c_finalize ();
--
1.8.5.3
next prev parent reply other threads:[~2014-11-19 10:39 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-01 0:00 [PATCH 00/21] PR 63854: Fix various memory leaks David Malcolm
2014-01-01 0:00 ` David Malcolm [this message]
2014-01-01 0:00 ` [PATCH 19/21] PR jit/63854: Fix leak of ipa hooks Jeff Law
2014-01-01 0:00 ` PING " David Malcolm
2014-01-01 0:00 ` Jan Hubicka
2014-01-01 0:00 ` [PATCH 05/21] PR jit/63854: Fix memory leak of save_decoded_options David Malcolm
2014-01-01 0:00 ` Richard Biener
2014-01-01 0:00 ` [PATCH 14/21] PR jit/63854: Fix leak of paths within jump threading David Malcolm
2014-01-01 0:00 ` Richard Biener
2014-01-01 0:00 ` [PATCH 04/21] PR jit/63854: Fix memory leak within bb-reorder.c David Malcolm
2014-01-01 0:00 ` Richard Biener
2014-01-01 0:00 ` [PATCH 09/21] PR jit/63854: Don't leak producer_string in dwarf2out.c David Malcolm
2014-01-01 0:00 ` Richard Biener
2014-01-01 0:00 ` [PATCH 08/21] PR jit/63854: Add ira_costs_c_finalize David Malcolm
2014-01-01 0:00 ` Richard Biener
2014-01-01 0:00 ` [PATCH 07/21] PR jit/63854: Fix leak of optimization_summary_obstack David Malcolm
2014-01-01 0:00 ` Richard Biener
2014-01-01 0:00 ` [PATCH 02/21] PR jit/63854: Fix memory leak of reginfo.c: valid_mode_changes_obstack David Malcolm
2014-01-01 0:00 ` Richard Biener
2014-01-01 0:00 ` [PATCH 10/21] PR jit/63854: Fix leak of worklist within jit-recording.c David Malcolm
2014-01-01 0:00 ` Jeff Law
2014-01-01 0:00 ` David Malcolm
2014-01-01 0:00 ` Richard Biener
2014-01-01 0:00 ` Jeff Law
2014-01-01 0:00 ` [PATCH 18/21] PR jit/63854: Add "long-term" allocator to gcc::context David Malcolm
2014-01-01 0:00 ` Joseph Myers
2015-01-01 0:00 ` PING: " David Malcolm
2015-01-01 0:00 ` Joseph Myers
2014-01-01 0:00 ` [PATCH 01/21] PR jit/63854: Fix memory leak within gcc_options David Malcolm
2014-01-01 0:00 ` Richard Biener
2014-01-01 0:00 ` [PATCH 12/21] PR jit/63854: Add a valgrind suppresion file David Malcolm
2014-01-01 0:00 ` Richard Biener
2014-01-01 0:00 ` Jeff Law
2014-01-01 0:00 ` David Malcolm
2015-01-01 0:00 ` Hans-Peter Nilsson
2014-01-01 0:00 ` [PATCH 21/21] PR jit/63854: Fix leaks in test-fuzzer.c David Malcolm
2014-01-01 0:00 ` Jeff Law
2014-01-01 0:00 ` [PATCH 20/21] PR jit/63854: Fix leak in ipa-icf.c David Malcolm
2014-01-01 0:00 ` Richard Biener
2014-01-01 0:00 ` [PATCH 13/21] PR jit/63854: Add support for running "make check-jit" under valgrind David Malcolm
2014-01-01 0:00 ` Jeff Law
2014-01-01 0:00 ` [PATCH 00/05] Fixes to jit.exp David Malcolm
2014-01-01 0:00 ` [PATCH 13/21] PR jit/63854: Add support for running "make check-jit" under valgrind David Malcolm
2014-01-01 0:00 ` Jeff Law
2014-01-01 0:00 ` [PATCH 00/05] Fixes to jit.exp David Malcolm
2014-01-01 0:00 ` [PATCH 01/05] jit.exp: Avoid embedding full paths into test results David Malcolm
2014-01-01 0:00 ` Mike Stump
2014-01-01 0:00 ` [PATCH 03/05] jit.exp: fix timeout bug inherited from dejagnu.exp David Malcolm
2014-01-01 0:00 ` [PATCH 02/05] PR jit/63854: Add support for running "make check-jit" under valgrind David Malcolm
2014-01-01 0:00 ` [PATCH 04/05] jit.exp: Verify the exit status of the spawnee David Malcolm
2014-01-01 0:00 ` [PATCH 05/05] Add command-line option-parsing to jit testcases David Malcolm
2014-01-01 0:00 ` PING: " David Malcolm
2014-01-01 0:00 ` Mike Stump
2014-01-01 0:00 ` David Malcolm
2014-01-01 0:00 ` Mike Stump
2014-01-01 0:00 ` Running cc1 etc under valgrind (was Re: [PATCH 13/21] PR jit/63854: Add support for running "make check-jit" under valgrind) David Malcolm
2014-01-01 0:00 ` David Malcolm
2014-01-01 0:00 ` [PATCH 06/21] PR jit/63854: Fix leak of opts_obstack David Malcolm
2014-01-01 0:00 ` Richard Biener
2014-01-01 0:00 ` [PATCH 11/21] PR jit/63854: Fix leak of "avail" within tree-ssa-pre.c David Malcolm
2014-01-01 0:00 ` Richard Biener
2014-01-01 0:00 ` [PATCH 15/21] PR jit/63854: lra.c: Fix leak of point_freq_vec's buffer when calling lra_inheritance David Malcolm
2014-01-01 0:00 ` Jeff Law
2014-01-01 0:00 ` [PATCH 17/21] PR jit/63854: Fix leaking vec in jit David Malcolm
2014-01-01 0:00 ` Jeff Law
2014-01-01 0:00 ` [PATCH 03/21] PR jit/63854: Fix memory leaks within context/pass_manager/dump_manager David Malcolm
2014-01-01 0:00 ` Jeff Law
2014-01-01 0:00 ` [PATCH 16/21] PR jit/63854: Add all_late_ipa_passes to GCC_PASS_LISTS David Malcolm
2014-01-01 0:00 ` Richard Biener
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1416393981-39626-20-git-send-email-dmalcolm@redhat.com \
--to=dmalcolm@redhat.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=jit@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).