diff options
Diffstat (limited to 'community/gcc6/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch')
-rw-r--r-- | community/gcc6/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch | 299 |
1 files changed, 0 insertions, 299 deletions
diff --git a/community/gcc6/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch b/community/gcc6/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch deleted file mode 100644 index 73a58bf86e..0000000000 --- a/community/gcc6/0008-x86-Disallow-mindirect-branch-mfunction-return-with-.patch +++ /dev/null @@ -1,299 +0,0 @@ -From 087b12213a5b4b8654c70320c671bb05c1b1b012 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" <hjl.tools@gmail.com> -Date: Sat, 13 Jan 2018 18:01:54 -0800 -Subject: [PATCH 08/13] x86: Disallow -mindirect-branch=/-mfunction-return= - with -mcmodel=large - -Since the thunk function may not be reachable in large code model, --mcmodel=large is incompatible with -mindirect-branch=thunk, --mindirect-branch=thunk-extern, -mfunction-return=thunk and --mfunction-return=thunk-extern. Issue an error when they are used with --mcmodel=large. - -gcc/ - - Backport from mainline - 2018-01-14 H.J. Lu <hongjiu.lu@intel.com> - - * config/i386/i386.c (ix86_set_indirect_branch_type): Disallow - -mcmodel=large with -mindirect-branch=thunk, - -mindirect-branch=thunk-extern, -mfunction-return=thunk and - -mfunction-return=thunk-extern. - * doc/invoke.texi: Document -mcmodel=large is incompatible with - -mindirect-branch=thunk, -mindirect-branch=thunk-extern, - -mfunction-return=thunk and -mfunction-return=thunk-extern. - -gcc/testsuite/ - - Backport from mainline - 2018-01-14 H.J. Lu <hongjiu.lu@intel.com> - - * gcc.target/i386/indirect-thunk-10.c: New test. - * gcc.target/i386/indirect-thunk-8.c: Likewise. - * gcc.target/i386/indirect-thunk-9.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-10.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-11.c: Likewise. - * gcc.target/i386/indirect-thunk-attr-9.c: Likewise. - * gcc.target/i386/ret-thunk-17.c: Likewise. - * gcc.target/i386/ret-thunk-18.c: Likewise. - * gcc.target/i386/ret-thunk-19.c: Likewise. - * gcc.target/i386/ret-thunk-20.c: Likewise. - * gcc.target/i386/ret-thunk-21.c: Likewise. ---- - gcc/config/i386/i386.c | 26 ++++++++++++++++++++++ - gcc/doc/invoke.texi | 11 +++++++++ - gcc/testsuite/gcc.target/i386/indirect-thunk-10.c | 7 ++++++ - gcc/testsuite/gcc.target/i386/indirect-thunk-8.c | 7 ++++++ - gcc/testsuite/gcc.target/i386/indirect-thunk-9.c | 7 ++++++ - .../gcc.target/i386/indirect-thunk-attr-10.c | 9 ++++++++ - .../gcc.target/i386/indirect-thunk-attr-11.c | 9 ++++++++ - .../gcc.target/i386/indirect-thunk-attr-9.c | 9 ++++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-17.c | 7 ++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-18.c | 8 +++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-19.c | 8 +++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-20.c | 9 ++++++++ - gcc/testsuite/gcc.target/i386/ret-thunk-21.c | 9 ++++++++ - 13 files changed, 126 insertions(+) - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-10.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-8.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-9.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c - create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-17.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-18.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-19.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-20.c - create mode 100644 gcc/testsuite/gcc.target/i386/ret-thunk-21.c - -diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c -index eeca7e5e490..9c038bee000 100644 ---- a/gcc/config/i386/i386.c -+++ b/gcc/config/i386/i386.c -@@ -6389,6 +6389,19 @@ ix86_set_indirect_branch_type (tree fndecl) - } - else - cfun->machine->indirect_branch_type = ix86_indirect_branch; -+ -+ /* -mcmodel=large is not compatible with -mindirect-branch=thunk -+ nor -mindirect-branch=thunk-extern. */ -+ if ((ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC) -+ && ((cfun->machine->indirect_branch_type -+ == indirect_branch_thunk_extern) -+ || (cfun->machine->indirect_branch_type -+ == indirect_branch_thunk))) -+ error ("%<-mindirect-branch=%s%> and %<-mcmodel=large%> are not " -+ "compatible", -+ ((cfun->machine->indirect_branch_type -+ == indirect_branch_thunk_extern) -+ ? "thunk-extern" : "thunk")); - } - - if (cfun->machine->function_return_type == indirect_branch_unset) -@@ -6414,6 +6427,19 @@ ix86_set_indirect_branch_type (tree fndecl) - } - else - cfun->machine->function_return_type = ix86_function_return; -+ -+ /* -mcmodel=large is not compatible with -mfunction-return=thunk -+ nor -mfunction-return=thunk-extern. */ -+ if ((ix86_cmodel == CM_LARGE || ix86_cmodel == CM_LARGE_PIC) -+ && ((cfun->machine->function_return_type -+ == indirect_branch_thunk_extern) -+ || (cfun->machine->function_return_type -+ == indirect_branch_thunk))) -+ error ("%<-mfunction-return=%s%> and %<-mcmodel=large%> are not " -+ "compatible", -+ ((cfun->machine->function_return_type -+ == indirect_branch_thunk_extern) -+ ? "thunk-extern" : "thunk")); - } - } - -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 94374661f2d..1dee495c86b 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -24242,6 +24242,11 @@ to external call and return thunk provided in a separate object file. - You can control this behavior for a specific function by using the - function attribute @code{indirect_branch}. @xref{Function Attributes}. - -+Note that @option{-mcmodel=large} is incompatible with -+@option{-mindirect-branch=thunk} nor -+@option{-mindirect-branch=thunk-extern} since the thunk function may -+not be reachable in large code model. -+ - @item -mfunction-return=@var{choice} - @opindex -mfunction-return - Convert function return with @var{choice}. The default is @samp{keep}, -@@ -24253,6 +24258,12 @@ object file. You can control this behavior for a specific function by - using the function attribute @code{function_return}. - @xref{Function Attributes}. - -+Note that @option{-mcmodel=large} is incompatible with -+@option{-mfunction-return=thunk} nor -+@option{-mfunction-return=thunk-extern} since the thunk function may -+not be reachable in large code model. -+ -+ - @item -mindirect-branch-register - @opindex -mindirect-branch-register - Force indirect call and jump via register. -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-10.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-10.c -new file mode 100644 -index 00000000000..a0674bd2363 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-10.c -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-inline -mfunction-return=keep -mcmodel=large" } */ -+ -+void -+bar (void) -+{ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-8.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-8.c -new file mode 100644 -index 00000000000..7a80a8986e8 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-8.c -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk -mfunction-return=keep -mcmodel=large" } */ -+ -+void -+bar (void) -+{ /* { dg-error "'-mindirect-branch=thunk' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-9.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-9.c -new file mode 100644 -index 00000000000..d4d45c5114d ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-9.c -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=thunk-extern -mfunction-return=keep -mcmodel=large" } */ -+ -+void -+bar (void) -+{ /* { dg-error "'-mindirect-branch=thunk-extern' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c -new file mode 100644 -index 00000000000..3a2aeaddbc5 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-10.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=keep -mfunction-return=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((indirect_branch("thunk-extern"))) -+void -+bar (void) -+{ /* { dg-error "'-mindirect-branch=thunk-extern' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c -new file mode 100644 -index 00000000000..8e52f032b6c ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-11.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=keep -mfunction-return=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((indirect_branch("thunk-inline"))) -+void -+bar (void) -+{ -+} -diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c -new file mode 100644 -index 00000000000..bdaa4f6911b ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-9.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mindirect-branch=keep -mfunction-return=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((indirect_branch("thunk"))) -+void -+bar (void) -+{ /* { dg-error "'-mindirect-branch=thunk' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-17.c b/gcc/testsuite/gcc.target/i386/ret-thunk-17.c -new file mode 100644 -index 00000000000..0605e2c6542 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-17.c -@@ -0,0 +1,7 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=thunk -mindirect-branch=keep -mcmodel=large" } */ -+ -+void -+bar (void) -+{ /* { dg-error "'-mfunction-return=thunk' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-18.c b/gcc/testsuite/gcc.target/i386/ret-thunk-18.c -new file mode 100644 -index 00000000000..307019dc242 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-18.c -@@ -0,0 +1,8 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=thunk-extern -mindirect-branch=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+void -+bar (void) -+{ /* { dg-error "'-mfunction-return=thunk-extern' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-19.c b/gcc/testsuite/gcc.target/i386/ret-thunk-19.c -new file mode 100644 -index 00000000000..772617f4010 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-19.c -@@ -0,0 +1,8 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -mcmodel=large" } */ -+ -+__attribute__ ((function_return("thunk"))) -+void -+bar (void) -+{ /* { dg-error "'-mfunction-return=thunk' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-20.c b/gcc/testsuite/gcc.target/i386/ret-thunk-20.c -new file mode 100644 -index 00000000000..1e9f9bd5a66 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-20.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((function_return("thunk-extern"))) -+void -+bar (void) -+{ /* { dg-error "'-mfunction-return=thunk-extern' and '-mcmodel=large' are not compatible" } */ -+} -diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-21.c b/gcc/testsuite/gcc.target/i386/ret-thunk-21.c -new file mode 100644 -index 00000000000..eea07f7abe1 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-21.c -@@ -0,0 +1,9 @@ -+/* { dg-do compile { target { lp64 } } } */ -+/* { dg-options "-O2 -mfunction-return=keep -mindirect-branch=keep -mcmodel=large" } */ -+/* { dg-additional-options "-fPIC" { target fpic } } */ -+ -+__attribute__ ((function_return("thunk-inline"))) -+void -+bar (void) -+{ -+} --- -2.16.3 - |