gcc7/gcc7-pfe-0012-Backport-PR-c-89946-ICE-in-assemble_start_function-a.patch

154 lines
5.5 KiB
Diff
Raw Normal View History

From dd42709efc288ce501b52d95b8ef0d05713a07f6 Mon Sep 17 00:00:00 2001
Accepting request 926586 from home:gbelinassi - - Add gcc7-pfe-0001-Backport-Add-entry-for-patchable_function_entry.patch gcc7-pfe-0002-Backport-Skip-fpatchable-function-entry-tests-for-nv.patch gcc7-pfe-0003-Backport-Error-out-on-nvptx-for-fpatchable-function-.patch gcc7-pfe-0004-Backport-Adapt-scan-assembler-times-for-alpha.patch gcc7-pfe-0005-Backport-patchable_function_entry-decl.c-Use-3-NOPs-.patch gcc7-pfe-0006-Backport-IBM-Z-Use-the-dedicated-NOP-instructions-fo.patch gcc7-pfe-0007-Backport-Add-regex-to-search-for-uppercase-NOP-instr.patch gcc7-pfe-0008-Backport-ICE-segmentation-fault-with-patchable_funct.patch gcc7-pfe-0009-Backport-patchable_function_entry-decl.c-Pass-mcpu-g.patch gcc7-pfe-0010-Backport-patchable_function_entry-decl.c-Do-not-run-.patch gcc7-pfe-0011-Backport-patchable_function_entry-decl.c-Add-fno-pie.patch gcc7-pfe-0012-Backport-PR-c-89946-ICE-in-assemble_start_function-a.patch gcc7-pfe-0013-Backport-targhooks.c-default_print_patchable_functio.patch gcc7-pfe-0014-Backport-Align-__patchable_function_entries-to-POINT.patch gcc7-pfe-0015-Backport-Fix-PR-93242-patchable-function-entry-broke.patch gcc7-pfe-0016-Backport-AArch64-PR92424-Fix-fpatchable-function-ent.patch gcc7-pfe-0017-Backport-Fix-patchable-function-entry-on-arc.patch gcc7-pfe-0018-Backport-Add-patch_area_size-and-patch_area_entry-to.patch gcc7-pfe-0019-Backport-testsuite-Adjust-patchable_function-tests-f.patch gcc7-pfe-0020-Backport-Use-the-section-flag-o-for-__patchable_func.patch gcc7-pfe-0021-Backport-varasm-Fix-up-__patchable_function_entries-.patch gcc7-pfe-0022-Backport-rs6000-Avoid-fpatchable-function-entry-regr.patch gcc7-pfe-0023-Fix-unwinding-issues-when-pfe-is-enabled.patch to add -fpatchable-function-entry feature to gcc-7. OBS-URL: https://build.opensuse.org/request/show/926586 OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gcc7?expand=0&rev=213
2021-10-21 06:15:55 +00:00
From: Jakub Jelinek <jakub@redhat.com>
Date: Fri, 12 Apr 2019 09:28:35 +0200
Subject: [PATCH 12/22] Backport PR c/89946 (ICE in assemble_start_function, at
Accepting request 926586 from home:gbelinassi - - Add gcc7-pfe-0001-Backport-Add-entry-for-patchable_function_entry.patch gcc7-pfe-0002-Backport-Skip-fpatchable-function-entry-tests-for-nv.patch gcc7-pfe-0003-Backport-Error-out-on-nvptx-for-fpatchable-function-.patch gcc7-pfe-0004-Backport-Adapt-scan-assembler-times-for-alpha.patch gcc7-pfe-0005-Backport-patchable_function_entry-decl.c-Use-3-NOPs-.patch gcc7-pfe-0006-Backport-IBM-Z-Use-the-dedicated-NOP-instructions-fo.patch gcc7-pfe-0007-Backport-Add-regex-to-search-for-uppercase-NOP-instr.patch gcc7-pfe-0008-Backport-ICE-segmentation-fault-with-patchable_funct.patch gcc7-pfe-0009-Backport-patchable_function_entry-decl.c-Pass-mcpu-g.patch gcc7-pfe-0010-Backport-patchable_function_entry-decl.c-Do-not-run-.patch gcc7-pfe-0011-Backport-patchable_function_entry-decl.c-Add-fno-pie.patch gcc7-pfe-0012-Backport-PR-c-89946-ICE-in-assemble_start_function-a.patch gcc7-pfe-0013-Backport-targhooks.c-default_print_patchable_functio.patch gcc7-pfe-0014-Backport-Align-__patchable_function_entries-to-POINT.patch gcc7-pfe-0015-Backport-Fix-PR-93242-patchable-function-entry-broke.patch gcc7-pfe-0016-Backport-AArch64-PR92424-Fix-fpatchable-function-ent.patch gcc7-pfe-0017-Backport-Fix-patchable-function-entry-on-arc.patch gcc7-pfe-0018-Backport-Add-patch_area_size-and-patch_area_entry-to.patch gcc7-pfe-0019-Backport-testsuite-Adjust-patchable_function-tests-f.patch gcc7-pfe-0020-Backport-Use-the-section-flag-o-for-__patchable_func.patch gcc7-pfe-0021-Backport-varasm-Fix-up-__patchable_function_entries-.patch gcc7-pfe-0022-Backport-rs6000-Avoid-fpatchable-function-entry-regr.patch gcc7-pfe-0023-Fix-unwinding-issues-when-pfe-is-enabled.patch to add -fpatchable-function-entry feature to gcc-7. OBS-URL: https://build.opensuse.org/request/show/926586 OBS-URL: https://build.opensuse.org/package/show/devel:gcc/gcc7?expand=0&rev=213
2021-10-21 06:15:55 +00:00
varasm.c:1871)
gcc/ChangeLog
2021-10-07 Giuliano Belinassi <gbelinassi@suse.de>
Backport from mainline
2019-04-12 Jakub Jelinek <jakub@redhat.com>
PR c/89946
* varasm.c (assemble_start_function): Don't use tree_fits_uhwi_p
and gcc_unreachable if it fails, just call tree_to_uhwi which
verifies that too. Test TREE_CHAIN instead of list_length > 1.
Start warning message with a lower-case letter. Formatting fixes.
PR rtl-optimization/90026
* cfgcleanup.c (try_optimize_cfg): When removing empty bb with no
successors, look for BARRIERs inside of the whole BB_FOOTER chain
rather than just at the start of it. If e->src BB_FOOTER is not NULL
in cfglayout mode, use emit_barrier_after_bb.
gcc/c-family/ChangeLog
2021-10-07 Giuliano Belinassi <gbelinassi@suse.de>
Backport of mainline
2019-04-12 Jakub Jelinek <jakub@redhat.com>
PR c/89946
* c-attribs.c (handle_patchable_function_entry_attribute): Add
function comment. Warn if arguments of the attribute are not positive
integer constants.
gcc/testsuite/ChangeLog
2021-10-07 Giuliano Belinassi <gbelinassi@suse.de>
Backport from mainline
2019-04-12 Jakub Jelinek <jakub@redhat.com>
PR c/89946
* c-c++-common/pr89946.c: New test.
PR rtl-optimization/90026
* g++.dg/opt/pr90026.C: New test.
---
gcc/c-family/c-attribs.c | 23 +++++++++++++++++++++--
gcc/testsuite/c-c++-common/pr89946.c | 7 +++++++
gcc/varasm.c | 23 ++++++++---------------
3 files changed, 36 insertions(+), 17 deletions(-)
create mode 100644 gcc/testsuite/c-c++-common/pr89946.c
diff --git a/gcc/c-family/c-attribs.c b/gcc/c-family/c-attribs.c
index b2820dd1586..f0d2b1ed500 100644
--- a/gcc/c-family/c-attribs.c
+++ b/gcc/c-family/c-attribs.c
@@ -3184,9 +3184,28 @@ handle_fallthrough_attribute (tree *, tree name, tree, int,
return NULL_TREE;
}
+/* Handle a "patchable_function_entry" attributes; arguments as in
+ struct attribute_spec.handler. */
+
static tree
-handle_patchable_function_entry_attribute (tree *, tree, tree, int, bool *)
+handle_patchable_function_entry_attribute (tree *, tree name, tree args,
+ int, bool *no_add_attrs)
{
- /* Nothing to be done here. */
+ for (; args; args = TREE_CHAIN (args))
+ {
+ tree val = TREE_VALUE (args);
+ if (val && TREE_CODE (val) != IDENTIFIER_NODE
+ && TREE_CODE (val) != FUNCTION_DECL)
+ val = default_conversion (val);
+
+ if (!tree_fits_uhwi_p (val))
+ {
+ warning (OPT_Wattributes,
+ "%qE attribute argument %qE is not an integer constant",
+ name, val);
+ *no_add_attrs = true;
+ return NULL_TREE;
+ }
+ }
return NULL_TREE;
}
diff --git a/gcc/testsuite/c-c++-common/pr89946.c b/gcc/testsuite/c-c++-common/pr89946.c
new file mode 100644
index 00000000000..23acd63fc6a
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr89946.c
@@ -0,0 +1,7 @@
+/* PR c/89946 */
+
+__attribute__((patchable_function_entry (-1))) void foo (void) {} /* { dg-warning "'patchable_function_entry' attribute argument '-1' is not an integer constant" } */
+__attribute__((patchable_function_entry (5, -5))) void bar (void) {} /* { dg-warning "'patchable_function_entry' attribute argument '-5' is not an integer constant" } */
+int i, j;
+__attribute__((patchable_function_entry (i))) void baz (void) {} /* { dg-warning "'patchable_function_entry' attribute argument 'i' is not an integer constant" } */
+__attribute__((patchable_function_entry (2, j))) void qux (void) {} /* { dg-warning "'patchable_function_entry' attribute argument 'j' is not an integer constant" } */
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 5711ba69555..0e6f20db361 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -1839,28 +1839,20 @@ assemble_start_function (tree decl, const char *fnname)
tree pp_val = TREE_VALUE (patchable_function_entry_attr);
tree patchable_function_entry_value1 = TREE_VALUE (pp_val);
- if (tree_fits_uhwi_p (patchable_function_entry_value1))
- patch_area_size = tree_to_uhwi (patchable_function_entry_value1);
- else
- gcc_unreachable ();
-
+ patch_area_size = tree_to_uhwi (patchable_function_entry_value1);
patch_area_entry = 0;
- if (list_length (pp_val) > 1)
+ if (TREE_CHAIN (pp_val) != NULL_TREE)
{
- tree patchable_function_entry_value2 =
- TREE_VALUE (TREE_CHAIN (pp_val));
-
- if (tree_fits_uhwi_p (patchable_function_entry_value2))
- patch_area_entry = tree_to_uhwi (patchable_function_entry_value2);
- else
- gcc_unreachable ();
+ tree patchable_function_entry_value2
+ = TREE_VALUE (TREE_CHAIN (pp_val));
+ patch_area_entry = tree_to_uhwi (patchable_function_entry_value2);
}
}
if (patch_area_entry > patch_area_size)
{
if (patch_area_size > 0)
- warning (OPT_Wattributes, "Patchable function entry > size");
+ warning (OPT_Wattributes, "patchable function entry > size");
patch_area_entry = 0;
}
@@ -1880,7 +1872,8 @@ assemble_start_function (tree decl, const char *fnname)
/* And the area after the label. Record it if we haven't done so yet. */
if (patch_area_size > patch_area_entry)
targetm.asm_out.print_patchable_function_entry (asm_out_file,
- patch_area_size-patch_area_entry,
+ patch_area_size
+ - patch_area_entry,
patch_area_entry == 0);
if (lookup_attribute ("no_split_stack", DECL_ATTRIBUTES (decl)))
--
2.33.1