From: "Martin Liška" <mliska@suse.cz>
To: GCC Patches <gcc-patches@gcc.gnu.org>
Subject: Re: GCC 8 backports
Date: Mon, 11 Mar 2019 09:39:00 -0000 [thread overview]
Message-ID: <59f9c249-8a2b-23d6-a66d-3d7c6ea0c250@suse.cz> (raw)
In-Reply-To: <1c3a5eef-56fb-bd88-c82d-8e0cb2d0f9cb@suse.cz>
[-- Attachment #1: Type: text/plain, Size: 64 bytes --]
Hi.
I'm sending another patches that I've just tested.
Martin
[-- Attachment #2: 0004-Backport-r269558.patch --]
[-- Type: text/x-patch, Size: 1157 bytes --]
From 915af267eb22e5059737f4dbb6e9d48601bb0779 Mon Sep 17 00:00:00 2001
From: "ro@138bc75d-0d04-0410-961f-82ee72b054a4"
<ro@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sun, 10 Mar 2019 16:43:48 +0000
Subject: [PATCH 4/4] Backport r269558
gcc/testsuite/ChangeLog:
2019-03-10 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* gcc.target/i386/indirect-thunk-extern-7.c: Add -fjump-tables to
dg-options.
---
gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
index b7339745116..95c5cc176ae 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic" } */
+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-extern -fno-pic -fjump-tables" } */
void func0 (void);
void func1 (void);
--
2.21.0
[-- Attachment #3: 0003-Backport-r269492.patch --]
[-- Type: text/x-patch, Size: 2649 bytes --]
From 5a433aca1d83cfc8a270b02d89be5b3ed75a503c Mon Sep 17 00:00:00 2001
From: marxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Fri, 8 Mar 2019 12:55:40 +0000
Subject: [PATCH 3/4] Backport r269492
gcc/ChangeLog:
2019-03-08 Martin Liska <mliska@suse.cz>
PR target/86952
* config/i386/i386.c (ix86_option_override_internal): Disable
jump tables when retpolines are used.
gcc/testsuite/ChangeLog:
2019-03-08 Martin Liska <mliska@suse.cz>
PR target/86952
* gcc.target/i386/indirect-thunk-7.c: Use jump tables to match
scanned pattern.
* gcc.target/i386/indirect-thunk-inline-7.c: Likewise.
---
gcc/config/i386/i386.c | 6 ++++++
gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 2 +-
gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c | 2 +-
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index a88a29b51e6..f1de97f73df 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -4958,6 +4958,12 @@ ix86_option_override_internal (bool main_args_p,
opts->x_param_values,
opts_set->x_param_values);
+ /* PR86952: jump table usage with retpolines is slow.
+ The PR provides some numbers about the slowness. */
+ if (ix86_indirect_branch != indirect_branch_keep
+ && !opts_set->x_flag_jump_tables)
+ opts->x_flag_jump_tables = 0;
+
return true;
}
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
index 3c72036dbaf..53868f46558 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic" } */
+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk -fno-pic -fjump-tables" } */
void func0 (void);
void func1 (void);
diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
index ea009245a58..e6f064959a1 100644
--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic" } */
+/* { dg-options "-O2 -mno-indirect-branch-register -mfunction-return=keep -mindirect-branch=thunk-inline -fno-pic -fjump-tables" } */
void func0 (void);
void func1 (void);
--
2.21.0
[-- Attachment #4: 0002-Backport-r268981.patch --]
[-- Type: text/x-patch, Size: 1126 bytes --]
From 4a20f76e3887229751ebd8352cc3c77a4e7c2b10 Mon Sep 17 00:00:00 2001
From: marxin <marxin@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 18 Feb 2019 09:46:19 +0000
Subject: [PATCH 2/4] Backport r268981
libcpp/ChangeLog:
2019-02-18 Martin Liska <mliska@suse.cz>
PR c++/89383
* line-map.c (linemap_line_start): Use 1UL in order
to not overflow.
---
libcpp/line-map.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libcpp/line-map.c b/libcpp/line-map.c
index 42aecd6993f..72fe2c0dcec 100644
--- a/libcpp/line-map.c
+++ b/libcpp/line-map.c
@@ -758,7 +758,8 @@ linemap_line_start (struct line_maps *set, linenum_type to_line,
|| ( /* We can't reuse the map if the line offset is sufficiently
large to cause overflow when computing location_t values. */
(to_line - ORDINARY_MAP_STARTING_LINE_NUMBER (map))
- >= (1U << (CHAR_BIT * sizeof (linenum_type) - column_bits)))
+ >= (((uint64_t) 1)
+ << (CHAR_BIT * sizeof (linenum_type) - column_bits)))
|| range_bits < map->m_range_bits)
map = linemap_check_ordinary
(const_cast <line_map *>
--
2.21.0
[-- Attachment #5: 0001-Backport-r268789.patch --]
[-- Type: text/x-patch, Size: 3133 bytes --]
From fe9fa030d7ae1a4b4da4751b39bddc68395b1728 Mon Sep 17 00:00:00 2001
From: dmalcolm <dmalcolm@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 12 Feb 2019 01:09:31 +0000
Subject: [PATCH 1/4] Backport r268789
gcc/ChangeLog:
2019-02-11 David Malcolm <dmalcolm@redhat.com>
PR lto/88147
* input.c (selftest::test_line_offset_overflow): New selftest.
(selftest::input_c_tests): Call it.
libcpp/ChangeLog:
2019-02-11 Martin Liska <mliska@suse.cz>
PR lto/88147
* line-map.c (linemap_line_start): Don't reuse the existing line
map if the line offset is sufficiently large to cause overflow
when computing location_t values.
---
gcc/input.c | 30 ++++++++++++++++++++++++++++++
libcpp/line-map.c | 4 ++++
2 files changed, 34 insertions(+)
diff --git a/gcc/input.c b/gcc/input.c
index b6675768722..26c2bf21d52 100644
--- a/gcc/input.c
+++ b/gcc/input.c
@@ -3538,6 +3538,34 @@ for_each_line_table_case (void (*testcase) (const line_table_case &))
ASSERT_EQ (num_cases_tested, 2 * 12);
}
+/* Verify that when presented with a consecutive pair of locations with
+ a very large line offset, we don't attempt to consolidate them into
+ a single ordinary linemap where the line offsets within the line map
+ would lead to overflow (PR lto/88147). */
+
+static void
+test_line_offset_overflow ()
+{
+ line_table_test ltt (line_table_case (5, 0));
+
+ linemap_add (line_table, LC_ENTER, false, "foo.c", 0);
+ linemap_line_start (line_table, 1, 100);
+ location_t loc_a = linemap_line_start (line_table, 2578, 255);
+ assert_loceq ("foo.c", 2578, 0, loc_a);
+
+ const line_map_ordinary *ordmap_a = LINEMAPS_LAST_ORDINARY_MAP (line_table);
+ ASSERT_EQ (ordmap_a->m_column_and_range_bits, 13);
+ ASSERT_EQ (ordmap_a->m_range_bits, 5);
+
+ location_t loc_b = linemap_line_start (line_table, 404198, 512);
+ assert_loceq ("foo.c", 404198, 0, loc_b);
+
+ /* We should have started a new linemap, rather than attempting to store
+ a very large line offset. */
+ const line_map_ordinary *ordmap_b = LINEMAPS_LAST_ORDINARY_MAP (line_table);
+ ASSERT_NE (ordmap_a, ordmap_b);
+}
+
/* Run all of the selftests within this file. */
void
@@ -3577,6 +3605,8 @@ input_c_tests ()
for_each_line_table_case (test_lexer_char_constants);
test_reading_source_line ();
+
+ test_line_offset_overflow ();
}
} // namespace selftest
diff --git a/libcpp/line-map.c b/libcpp/line-map.c
index a84084c99f0..42aecd6993f 100644
--- a/libcpp/line-map.c
+++ b/libcpp/line-map.c
@@ -755,6 +755,10 @@ linemap_line_start (struct line_maps *set, linenum_type to_line,
if (line_delta < 0
|| last_line != ORDINARY_MAP_STARTING_LINE_NUMBER (map)
|| SOURCE_COLUMN (map, highest) >= (1U << (column_bits - range_bits))
+ || ( /* We can't reuse the map if the line offset is sufficiently
+ large to cause overflow when computing location_t values. */
+ (to_line - ORDINARY_MAP_STARTING_LINE_NUMBER (map))
+ >= (1U << (CHAR_BIT * sizeof (linenum_type) - column_bits)))
|| range_bits < map->m_range_bits)
map = linemap_check_ordinary
(const_cast <line_map *>
--
2.21.0
next prev parent reply other threads:[~2019-03-11 9:37 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-23 8:43 Martin Liška
2018-08-16 10:14 ` Martin Liška
2018-09-18 9:37 ` Martin Liška
2018-09-25 6:52 ` Martin Liška
2018-10-03 10:09 ` Martin Liška
2018-11-20 10:58 ` Martin Liška
2018-12-27 14:59 ` Martin Liška
2018-12-28 11:46 ` Sudakshina Das
2019-01-02 11:46 ` Martin Liška
2019-01-02 11:50 ` Jan Hubicka
2019-01-03 8:46 ` Martin Liška
2019-02-14 11:23 ` Martin Liška
2019-02-14 13:57 ` Martin Liška
2019-03-11 9:39 ` Martin Liška [this message]
2019-03-15 8:39 ` Martin Liška
2019-03-28 8:53 ` Martin Liška
2019-05-24 7:42 ` Martin Liška
2019-07-04 10:17 ` Martin Liška
2020-01-15 10:15 ` Martin Liška
2020-03-02 9:33 ` Martin Liška
2020-03-29 17:17 ` Martin Liška
2020-04-03 10:32 ` Martin Liška
2019-05-06 14:00 Martin Liška
2019-05-14 9:11 ` Martin Liška
2019-07-22 9:36 ` Martin Liška
2019-05-07 16:17 Marek Polacek
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=59f9c249-8a2b-23d6-a66d-3d7c6ea0c250@suse.cz \
--to=mliska@suse.cz \
--cc=gcc-patches@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).