summaryrefslogtreecommitdiff
path: root/0057-AutoFdo-Fix-memory-leaks-in-autofdo.patch
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2025-02-28 10:03:49 +0000
committerCoprDistGit <infra@openeuler.org>2025-02-28 10:03:49 +0000
commit73127104a245052cd5cf29cdaaca3e5c32c70348 (patch)
tree8e28b63e478c43c252f18b49836dff7313affe54 /0057-AutoFdo-Fix-memory-leaks-in-autofdo.patch
parent49d3feaf4665cdb07576fc1a2382a4d82a612d35 (diff)
automatic import of gccopeneuler24.03_LTS_SP1
Diffstat (limited to '0057-AutoFdo-Fix-memory-leaks-in-autofdo.patch')
-rw-r--r--0057-AutoFdo-Fix-memory-leaks-in-autofdo.patch90
1 files changed, 90 insertions, 0 deletions
diff --git a/0057-AutoFdo-Fix-memory-leaks-in-autofdo.patch b/0057-AutoFdo-Fix-memory-leaks-in-autofdo.patch
new file mode 100644
index 0000000..4d80606
--- /dev/null
+++ b/0057-AutoFdo-Fix-memory-leaks-in-autofdo.patch
@@ -0,0 +1,90 @@
+From 13e82fccba781b29e55a6e1934986514019b728d Mon Sep 17 00:00:00 2001
+From: zhenyu--zhao <zhaozhenyu17@huawei.com>
+Date: Sun, 24 Mar 2024 20:42:27 +0800
+Subject: [PATCH 02/32] [AutoFdo] Fix memory leaks in autofdo
+
+---
+ gcc/final.cc | 22 ++++++++++++++--------
+ 1 file changed, 14 insertions(+), 8 deletions(-)
+
+diff --git a/gcc/final.cc b/gcc/final.cc
+index d4c4fa08f..af4e529bb 100644
+--- a/gcc/final.cc
++++ b/gcc/final.cc
+@@ -4402,12 +4402,15 @@ get_fdo_count_quality (profile_count count)
+ return profile_quality[count.quality ()];
+ }
+
+-static const char *
++/* If the function is not public, return the function_name/file_name for
++ disambiguation of local symbols since there could be identical function
++ names coming from identical file names. The caller needs to free memory. */
++static char *
+ alias_local_functions (const char *fnname)
+ {
+ if (TREE_PUBLIC (cfun->decl))
+ {
+- return fnname;
++ return concat (fnname, NULL);
+ }
+ return concat (fnname, "/", lbasename (dump_base_name), NULL);
+ }
+@@ -4457,12 +4460,13 @@ dump_direct_callee_info_to_asm (basic_block bb, gcov_type call_count)
+
+ if (callee)
+ {
++ char *func_name =
++ alias_local_functions (get_fnname_from_decl (callee));
+ fprintf (asm_out_file, "\t.string \"%x\"\n",
+ INSN_ADDRESSES (INSN_UID (insn)));
+
+ fprintf (asm_out_file, "\t.string \"%s%s\"\n",
+- ASM_FDO_CALLEE_FLAG,
+- alias_local_functions (get_fnname_from_decl (callee)));
++ ASM_FDO_CALLEE_FLAG, func_name);
+
+ fprintf (asm_out_file,
+ "\t.string \"" HOST_WIDE_INT_PRINT_DEC "\"\n",
+@@ -4472,9 +4476,9 @@ dump_direct_callee_info_to_asm (basic_block bb, gcov_type call_count)
+ {
+ fprintf (dump_file, "call: %x --> %s \n",
+ INSN_ADDRESSES (INSN_UID (insn)),
+- alias_local_functions
+- (get_fnname_from_decl (callee)));
++ func_name);
+ }
++ free (func_name);
+ }
+ }
+ }
+@@ -4547,8 +4551,9 @@ dump_bb_info_to_asm (basic_block bb, gcov_type bb_count)
+ static void
+ dump_function_info_to_asm (const char *fnname)
+ {
++ char *func_name = alias_local_functions (fnname);
+ fprintf (asm_out_file, "\t.string \"%s%s\"\n",
+- ASM_FDO_CALLER_FLAG, alias_local_functions (fnname));
++ ASM_FDO_CALLER_FLAG, func_name);
+ fprintf (asm_out_file, "\t.string \"%s%d\"\n",
+ ASM_FDO_CALLER_SIZE_FLAG, get_function_end_addr ());
+ fprintf (asm_out_file, "\t.string \"%s%s\"\n",
+@@ -4557,7 +4562,7 @@ dump_function_info_to_asm (const char *fnname)
+ if (dump_file)
+ {
+ fprintf (dump_file, "\n FUNC_NAME: %s\n",
+- alias_local_functions (fnname));
++ func_name);
+ fprintf (dump_file, " file: %s\n",
+ dump_base_name);
+ fprintf (dump_file, "profile_status: %s\n",
+@@ -4567,6 +4572,7 @@ dump_function_info_to_asm (const char *fnname)
+ fprintf (dump_file, " function_bind: %s\n",
+ simple_get_function_bind ());
+ }
++ free (func_name);
+ }
+
+ /* Dump function profile into form AutoFDO or PGO to asm. */
+--
+2.28.0.windows.1
+