commit:     877c6d3a1bf239d117bcd3fa39dce1ae248d0e51
Author:     Aric Belsito <lluixhi <AT> gmail <DOT> com>
AuthorDate: Sat Jun 30 00:56:08 2018 +0000
Commit:     Aric Belsito <lluixhi <AT> gmail <DOT> com>
CommitDate: Sat Jun 30 00:56:08 2018 +0000
URL:        https://gitweb.gentoo.org/proj/musl.git/commit/?id=877c6d3a

sys-devel/gcc: cleanup

 sys-devel/gcc/Manifest                             |    6 -
 ...ove-struct-ix86_frame-to-machine-function.patch |  237 -----
 ...ove-struct-ix86_frame-to-machine-function.patch |   68 --
 .../gcc-4.8.3-musl-fix-libc5-assumption.patch      |   11 -
 sys-devel/gcc/files/gcc-4.8.5-posix_memalign.patch |   30 -
 .../gcc/files/gcc-4.9.3-musl-linker-path.patch     |   74 --
 sys-devel/gcc/files/gcc-4.9.3-musl-res_state.patch |   12 -
 sys-devel/gcc/files/gcc-4.9.3-pr68470.patch        |   58 --
 sys-devel/gcc/files/gcc-4.9.3-secure-plt.patch     |   39 -
 .../gcc/files/musl-gcc-patches-4.9.3/aarch64.diff  |   12 -
 .../gcc/files/musl-gcc-patches-4.9.3/arm.diff      |   46 -
 .../musl-gcc-patches-4.9.3/gcc-autoconf-musl.diff  |   62 --
 .../musl-gcc-patches-4.9.3/gcc-config-musl.diff    |  207 ----
 .../gcc/files/musl-gcc-patches-4.9.3/gcc-ssp.diff  |   12 -
 .../files/musl-gcc-patches-4.9.3/gomp-posix.diff   |   16 -
 .../gcc/files/musl-gcc-patches-4.9.3/gthread.diff  |   16 -
 .../musl-gcc-patches-4.9.3/kill-fixincludes.diff   |   17 -
 .../musl-gcc-patches-4.9.3/libstdc++-generic.diff  |   31 -
 .../musl-gcc-patches-4.9.3/microblaze-size_t.diff  |   39 -
 .../files/musl-gcc-patches-4.9.3/microblaze.diff   |   31 -
 .../gcc/files/musl-gcc-patches-4.9.3/mips.diff     |   18 -
 .../gcc/files/musl-gcc-patches-4.9.3/powerpc.diff  |  108 --
 sys-devel/gcc/files/musl-gcc-patches-4.9.3/sh.diff |   18 -
 .../musl-gcc-patches-4.9.3/unwind-dliterate.diff   |   43 -
 .../gcc/files/musl-gcc-patches-4.9.3/vis_hide.diff |   15 -
 .../gcc/files/musl-gcc-patches-4.9.3/x86.diff      |   55 -
 .../gcc/files/spectre-0001-mindirect-branch.patch  | 1084 --------------------
 .../gcc/files/spectre-0002-mfunction-return.patch  |  447 --------
 .../spectre-0003-mindirect-branch-register.patch   |  340 ------
 .../files/spectre-0004-v-register-modifier.patch   |  128 ---
 .../gcc/files/spectre-0005-mcmodel-large.patch     |  105 --
 sys-devel/gcc/gcc-4.9.4-r100.ebuild                |   66 --
 sys-devel/gcc/gcc-4.9.4-r99.ebuild                 |   65 --
 sys-devel/gcc/gcc-7.2.0-r1.ebuild                  |   31 -
 sys-devel/gcc/gcc-7.2.0-r2.ebuild                  |   41 -
 sys-devel/gcc/gcc-7.3.0-r1.ebuild                  |   31 -
 36 files changed, 3619 deletions(-)

diff --git a/sys-devel/gcc/Manifest b/sys-devel/gcc/Manifest
index 87b1ea8..a624cc8 100644
--- a/sys-devel/gcc/Manifest
+++ b/sys-devel/gcc/Manifest
@@ -1,9 +1,5 @@
 DIST ecj-4.5.jar 1470676 BLAKE2B 
793c10ba09fd8040c0e1181204141aea16780c9c9088e07126e00da2b510af2ad6f58d876357d7e98cbb02d783a3be434469d5de1df134ccb8cc508e45028d80
 SHA512 
d4e1bf7538ace56e3d69fa91da5bbd16c272923b4de0a9d8dee23ea2b75f9f38c603de72fc4061df49285c450b63f3df211cee5270e9fffc5447445d1a9c9e4e
 DIST gcc-4.4.3-specs-0.2.0.tar.bz2 2004 BLAKE2B 
96f5ba2028bc6e0ef71e009857c37118a54d13d30de24d697c85e5772f9f2b7853615648cf2e4ee81d8385f6518c64588c0b56675c00f95ef39fca2a808f075e
 SHA512 
779ecb0a064d2138b54569c8ae501975b8a6b72e5a3acbf8597619a8db77ee42ef9b0e62608d5192a15e4393e7dfc009bb50b994782236faa744b2c46b5fe517
-DIST gcc-4.9.4-patches-1.0.tar.bz2 22266 BLAKE2B 
38536e8a86a8296754311633b73da0bd7dddb3a6ac65e4b5ba1dde352789e9114a1129aad11bcb988a1baadec6fdf893290c6af83bb9fad5613f35a37ebbb12e
 SHA512 
cc2407221f858bad38b57d31f635314f91794293695e23d255685d8bec20b9db19c7dc76bbf5e8184c2ba0ccb530958b09bae4d8a402ca27cadf463f46bfb995
-DIST gcc-4.9.4-piepatches-v0.6.4.tar.bz2 14414 BLAKE2B 
2eccd4f2a164fbb32d13c7fe91627a2424c0a5570fe0cac97c2bb1c95294ba3d770832da7c445f75c91791466c5139a1e13753a3a40d87ff5e44e42749adee27
 SHA512 
243fa272ea0e49f700a76508bab3e03bbb353bcb930581b2f87f9a47df5cd3880e29f20b71612b21190adc463849e1e6ac2a38a49c0002b562d93d436f538285
-DIST gcc-4.9.4-uclibc-patches-1.0.tar.bz2 2618 BLAKE2B 
bff85a4088fb94fdb7a8b0bd552be98ace3e6d145889b6f8b4a1f2db2dad14342d155890ab159b42d5b55d88dfb7c392eb7f92590084e1958f6284c561da30f1
 SHA512 
5a1f44caa9261f4947101379628143869b31dec67fa28605e8e1f3894d4b7120c3f68ba6deb59da7a74fa906e27ab32cd3767761837dc3dfebc37865d349d6db
-DIST gcc-4.9.4.tar.bz2 90097606 BLAKE2B 
373ff939ea72d6c4a7f3ab899b852b4c919481af2cfe3291281d9354c58a270d2eba73a0f301d90840dfabf423c82b368e113df7a2cb6cc28b2a703b0b6eb585
 SHA512 
93abb78e16277454f41a8e9810f41f66c0fdffdc539a762ff6b67d3037f78db971378683fd2ebf707d1d51c059fad2161fe42d110c330027f40214b7db0f3efe
 DIST gcc-5.4.0-patches-1.8.tar.bz2 32886 BLAKE2B 
85879ba552ff21e198de568b2a1f2544d6cf542174af3ca571e41a504373bbc8912a87177a413883f194d909237eeeaf65366e6b93c2b917f803b3edd10bbff5
 SHA512 
10c1102a37d9d485665cca606318a1da6eec2188998d340b91a371c9defa6fae285619f9cadad2546de0b7f1068e9eaf653714462d3331db3197308799927a6b
 DIST gcc-5.4.0-piepatches-v0.6.5.tar.bz2 14551 BLAKE2B 
6f3de9be0990a7580785821d8c85114a1907571c06bdf3a15ad91258f7c9e8bb6a4d2ddb8615f33bedf0ad036d215507e004fc095f788e40c824ae0ab3ffbb05
 SHA512 
4890f0713d261982ab81a20f93c5f65193aa1dfa171e3f9e5867f0b80ec7c1e76c5a997b1a4e6f47f8ce36af54ac91125c5bff8bf6d971b7d77c65a57a40a3c0
 DIST gcc-5.4.0-uclibc-patches-1.0.tar.bz2 3731 BLAKE2B 
fa436d1c1d9c150714092132f816740f8218dfeb4f9a6a8c830ea54d211a020f209e6fd1fcc313b2560b82c7855120053d346af72b7c12c88a7a948379dd2356
 SHA512 
009f34197e79c5e8c6497a0db01ac45cc657e92e56a663b4f3281661d108b2a129cd977fab5f0064f225d6812ae91e82bab22a2b10ae02c486881eeed85ec7a3
@@ -11,8 +7,6 @@ DIST gcc-5.4.0.tar.bz2 95661481 BLAKE2B 
bf882acfa28cc1064cddd21e25332fff6bc65505
 DIST gcc-6.4.0-patches-1.3.tar.bz2 13617 BLAKE2B 
6bfb1d70397e6ca4359e5d190e36003c18c7a03a9be4f923461dcff11307601e6b3502a2e289585b53baeb919008d83c29ad24078f814aed9b331140e4687419
 SHA512 
91be7c8db0004cdd150fec0f8daa709374753d2f524c58087dcf45b6696dbd609972297e866f971fba1aa679464cf96a384dd111e104183c0939ab69add017b2
 DIST gcc-6.4.0-uclibc-patches-1.0.tar.bz2 1586 BLAKE2B 
21f97a9e1c349b3d52def092a03e5a90533521da9af586be7ee527594f2d65745491ff8758d88c99a7ac215bde7ebf4e47a0a36cfcd7e66f70e0bebf2dadd922
 SHA512 
266dbe2bb53d892a24cd752d5c6833ea33f8df8b11b0471700ee53865243cd41f412f9bea8a369b474c9cd1435faff2e03902c7cb5638dd3ddcaa665aa2ec522
 DIST gcc-6.4.0.tar.xz 76156220 BLAKE2B 
2018c338b28ea644cdd1b327cb0dfe7ee9aa2010357c93f7e71969f587c58d3fdfa2bb4c82a309490c48bc86924400022fa93f41dc6c4345878d1bc1d8204265
 SHA512 
02c60e54527c7adf584798d5251f8a0b80c93d5deafce82501b2c28e6692e0bd783927bbfc4bc527a863c0cccc025150a34740a9e29badb02d4b48e56a8aba90
-DIST gcc-7.2.0-patches-1.1.tar.bz2 9246 BLAKE2B 
f6eec8459e5ac1f177d9a417c59616ad53e4ba6da8744cf55922d3a401717bd5bfdf79296a1c0b856cfa03349e73b8034ab6024b83d3f5ef909534811ba470f2
 SHA512 
d08b31d1279cc4c6ba46b2dca6ebed4e5c8e4997f0859acab86c974209ce4aacd0df09632e70c3fb8ee7108ecb8208c8b8605e66a7e8d2568e45644bfeee4fbe
-DIST gcc-7.2.0.tar.xz 62312628 BLAKE2B 
35e4b732f1a4515fc1a9d4424797177112847588e600dc5531bc9bf72305619d4100e8fd9d945920245e704fc9ac5bc5e3dbd20be6c3af49e689fc5bd1eca10f
 SHA512 
f853cd6530b4055d8d8289da74687cb4c6d5f363598d386332d31852b581bac76c3adb7d61889edec3b779f63d8646f0122840f12965ce4a4389ba535dbbb6e1
 DIST gcc-7.3.0-patches-1.1.tar.bz2 7439 BLAKE2B 
b6eff6f96cf4daf7b8debc767dc5ee1924a27be95c0a9a5d5ba957978f224c0907570e1492398865c4fa27d3b8f7c2f0fea2da813bf6b4ebb0fa66f9ccca9c46
 SHA512 
864a433c8f153a216c1028c553ffc3c84c474498c637ca6978e86fbb2ce4c07291c2561aabc2caa4953c012b8e18c277383ca153d56e13006967680119f9bcfa
 DIST gcc-7.3.0-patches-1.4.tar.bz2 8238 BLAKE2B 
72a5dcb046558c8f5c3a75040fe24ce1106c43af7510d6febf667b4377cb9caea5ebe9e1287af90e4ebfffa3f3f22ca85f533acf57c2e2d896f92adc1659b9f5
 SHA512 
24ed0d82240426efb111bbf48913b96fdc824ae3aa5a653298a726ebe64a40791f484229bbab9cc58f73d658e0b4b83ccd13081cfbea6e1673ef1d076cca3b33
 DIST gcc-7.3.0.tar.xz 62462388 BLAKE2B 
dc8f132b21bd0543c3d9dd17557038aafe65675aa73c540954234a3c972b4c31c939149bd50183d072ab6c8d16919e19daeaaffd619ce2ccd62dbdf9a5bb3302
 SHA512 
ad41a7e4584e40e92cdf860bc0288500fbaf5dfb7e8c3fcabe9eba809c87bcfa85b46c19c19921b0cdf6d05483faede8287bb9ea120c0d1559449a70e602c8d4

diff --git 
a/sys-devel/gcc/files/0001-gcc-7.2.0-move-struct-ix86_frame-to-machine-function.patch
 
b/sys-devel/gcc/files/0001-gcc-7.2.0-move-struct-ix86_frame-to-machine-function.patch
deleted file mode 100644
index d85ed2c..0000000
--- 
a/sys-devel/gcc/files/0001-gcc-7.2.0-move-struct-ix86_frame-to-machine-function.patch
+++ /dev/null
@@ -1,237 +0,0 @@
-From: "H.J. Lu" <hjl.to...@gmail.com>
-To: gcc-patc...@gcc.gnu.org
-Subject: [1/3] GCC 7: i386: Move struct ix86_frame to machine_function
-Date: Sun, 14 Jan 2018 07:02:35 -0800
-
-Make ix86_frame available to i386 code generation.  This is needed to
-backport the patch set of -mindirect-branch= to mitigate variant #2 of
-the speculative execution vulnerabilities on x86 processors identified
-by CVE-2017-5715, aka Spectre.
-
-       Backport from mainline
-       * config/i386/i386.c (ix86_frame): Moved to ...
-       * config/i386/i386.h (ix86_frame): Here.
-       (machine_function): Add frame.
-       * config/i386/i386.c (ix86_compute_frame_layout): Repace the
-       frame argument with &cfun->machine->frame.
-       (ix86_can_use_return_insn_p): Don't pass &frame to
-       ix86_compute_frame_layout.  Copy frame from cfun->machine->frame.
-       (ix86_can_eliminate): Likewise.
-       (ix86_expand_prologue): Likewise.
-       (ix86_expand_epilogue): Likewise.
-       (ix86_expand_split_stack_prologue): Likewise.
----
- gcc/config/i386/i386.c | 68 ++++++++++----------------------------------------
- gcc/config/i386/i386.h | 53 ++++++++++++++++++++++++++++++++++++++-
- 2 files changed, 65 insertions(+), 56 deletions(-)
-
-diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
-index 8a3782c0298..813337242d8 100644
---- a/gcc/config/i386/i386.c
-+++ b/gcc/config/i386/i386.c
-@@ -2444,53 +2444,6 @@ struct GTY(()) stack_local_entry {
-   struct stack_local_entry *next;
- };
- 
--/* Structure describing stack frame layout.
--   Stack grows downward:
--
--   [arguments]
--                                      <- ARG_POINTER
--   saved pc
--
--   saved static chain                 if ix86_static_chain_on_stack
--
--   saved frame pointer                        if frame_pointer_needed
--                                      <- HARD_FRAME_POINTER
--   [saved regs]
--                                      <- regs_save_offset
--   [padding0]
--
--   [saved SSE regs]
--                                      <- sse_regs_save_offset
--   [padding1]          |
--                     |                <- FRAME_POINTER
--   [va_arg registers]  |
--                     |
--   [frame]           |
--                     |
--   [padding2]        | = to_allocate
--                                      <- STACK_POINTER
--  */
--struct ix86_frame
--{
--  int nsseregs;
--  int nregs;
--  int va_arg_size;
--  int red_zone_size;
--  int outgoing_arguments_size;
--
--  /* The offsets relative to ARG_POINTER.  */
--  HOST_WIDE_INT frame_pointer_offset;
--  HOST_WIDE_INT hard_frame_pointer_offset;
--  HOST_WIDE_INT stack_pointer_offset;
--  HOST_WIDE_INT hfp_save_offset;
--  HOST_WIDE_INT reg_save_offset;
--  HOST_WIDE_INT sse_reg_save_offset;
--
--  /* When save_regs_using_mov is set, emit prologue using
--     move instead of push instructions.  */
--  bool save_regs_using_mov;
--};
--
- /* Which cpu are we scheduling for.  */
- enum attr_cpu ix86_schedule;
- 
-@@ -2582,7 +2535,7 @@ static unsigned int ix86_function_arg_boundary 
(machine_mode,
-                                               const_tree);
- static rtx ix86_static_chain (const_tree, bool);
- static int ix86_function_regparm (const_tree, const_tree);
--static void ix86_compute_frame_layout (struct ix86_frame *);
-+static void ix86_compute_frame_layout (void);
- static bool ix86_expand_vector_init_one_nonzero (bool, machine_mode,
-                                                rtx, rtx, int);
- static void ix86_add_new_builtins (HOST_WIDE_INT, HOST_WIDE_INT);
-@@ -11903,7 +11856,8 @@ ix86_can_use_return_insn_p (void)
-   if (crtl->args.pops_args && crtl->args.size >= 32768)
-     return 0;
- 
--  ix86_compute_frame_layout (&frame);
-+  ix86_compute_frame_layout ();
-+  frame = cfun->machine->frame;
-   return (frame.stack_pointer_offset == UNITS_PER_WORD
-         && (frame.nregs + frame.nsseregs) == 0);
- }
-@@ -12389,8 +12343,8 @@ ix86_can_eliminate (const int from, const int to)
- HOST_WIDE_INT
- ix86_initial_elimination_offset (int from, int to)
- {
--  struct ix86_frame frame;
--  ix86_compute_frame_layout (&frame);
-+  ix86_compute_frame_layout ();
-+  struct ix86_frame frame = cfun->machine->frame;
- 
-   if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM)
-     return frame.hard_frame_pointer_offset;
-@@ -12429,8 +12383,9 @@ ix86_builtin_setjmp_frame_value (void)
- /* Fill structure ix86_frame about frame of currently computed function.  */
- 
- static void
--ix86_compute_frame_layout (struct ix86_frame *frame)
-+ix86_compute_frame_layout (void)
- {
-+  struct ix86_frame *frame = &cfun->machine->frame;
-   unsigned HOST_WIDE_INT stack_alignment_needed;
-   HOST_WIDE_INT offset;
-   unsigned HOST_WIDE_INT preferred_alignment;
-@@ -13737,7 +13692,8 @@ ix86_expand_prologue (void)
-   m->fs.sp_offset = INCOMING_FRAME_SP_OFFSET;
-   m->fs.sp_valid = true;
- 
--  ix86_compute_frame_layout (&frame);
-+  ix86_compute_frame_layout ();
-+  frame = m->frame;
- 
-   if (!TARGET_64BIT && ix86_function_ms_hook_prologue (current_function_decl))
-     {
-@@ -14405,7 +14361,8 @@ ix86_expand_epilogue (int style)
-   bool using_drap;
- 
-   ix86_finalize_stack_realign_flags ();
--  ix86_compute_frame_layout (&frame);
-+  ix86_compute_frame_layout ();
-+  frame = m->frame;
- 
-   m->fs.sp_valid = (!frame_pointer_needed
-                   || (crtl->sp_is_unchanging
-@@ -14915,7 +14872,8 @@ ix86_expand_split_stack_prologue (void)
-   gcc_assert (flag_split_stack && reload_completed);
- 
-   ix86_finalize_stack_realign_flags ();
--  ix86_compute_frame_layout (&frame);
-+  ix86_compute_frame_layout ();
-+  frame = cfun->machine->frame;
-   allocate = frame.stack_pointer_offset - INCOMING_FRAME_SP_OFFSET;
- 
-   /* This is the label we will branch to if we have enough stack
-diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
-index 9c776dc5172..f9b91286a01 100644
---- a/gcc/config/i386/i386.h
-+++ b/gcc/config/i386/i386.h
-@@ -2451,9 +2451,56 @@ enum avx_u128_state
- 
- #define FASTCALL_PREFIX '@'
- 
-+#ifndef USED_FOR_TARGET
-+/* Structure describing stack frame layout.
-+   Stack grows downward:
-+
-+   [arguments]
-+                                      <- ARG_POINTER
-+   saved pc
-+
-+   saved static chain                 if ix86_static_chain_on_stack
-+
-+   saved frame pointer                        if frame_pointer_needed
-+                                      <- HARD_FRAME_POINTER
-+   [saved regs]
-+                                      <- regs_save_offset
-+   [padding0]
-+
-+   [saved SSE regs]
-+                                      <- sse_regs_save_offset
-+   [padding1]          |
-+                     |                <- FRAME_POINTER
-+   [va_arg registers]  |
-+                     |
-+   [frame]           |
-+                     |
-+   [padding2]        | = to_allocate
-+                                      <- STACK_POINTER
-+  */
-+struct GTY(()) ix86_frame
-+{
-+  int nsseregs;
-+  int nregs;
-+  int va_arg_size;
-+  int red_zone_size;
-+  int outgoing_arguments_size;
-+
-+  /* The offsets relative to ARG_POINTER.  */
-+  HOST_WIDE_INT frame_pointer_offset;
-+  HOST_WIDE_INT hard_frame_pointer_offset;
-+  HOST_WIDE_INT stack_pointer_offset;
-+  HOST_WIDE_INT hfp_save_offset;
-+  HOST_WIDE_INT reg_save_offset;
-+  HOST_WIDE_INT sse_reg_save_offset;
-+
-+  /* When save_regs_using_mov is set, emit prologue using
-+     move instead of push instructions.  */
-+  bool save_regs_using_mov;
-+};
-+
- /* Machine specific frame tracking during prologue/epilogue generation.  */
- 
--#ifndef USED_FOR_TARGET
- struct GTY(()) machine_frame_state
- {
-   /* This pair tracks the currently active CFA as reg+offset.  When reg
-@@ -2512,6 +2559,9 @@ struct GTY(()) machine_function {
-   int varargs_fpr_size;
-   int optimize_mode_switching[MAX_386_ENTITIES];
- 
-+  /* Cached initial frame layout for the current function.  */
-+  struct ix86_frame frame;
-+
-   /* Number of saved registers USE_FAST_PROLOGUE_EPILOGUE
-      has been computed for.  */
-   int use_fast_prologue_epilogue_nregs;
-@@ -2594,6 +2644,7 @@ struct GTY(()) machine_function {
- #define ix86_current_function_calls_tls_descriptor \
-   (ix86_tls_descriptor_calls_expanded_in_cfun && df_regs_ever_live_p (SP_REG))
- #define ix86_static_chain_on_stack (cfun->machine->static_chain_on_stack)
-+#define ix86_red_zone_size (cfun->machine->frame.red_zone_size)
- 
- /* Control behavior of x86_file_start.  */
- #define X86_FILE_START_VERSION_DIRECTIVE false
-

diff --git 
a/sys-devel/gcc/files/0002-gcc-7.2.0-move-struct-ix86_frame-to-machine-function.patch
 
b/sys-devel/gcc/files/0002-gcc-7.2.0-move-struct-ix86_frame-to-machine-function.patch
deleted file mode 100644
index a086d03..0000000
--- 
a/sys-devel/gcc/files/0002-gcc-7.2.0-move-struct-ix86_frame-to-machine-function.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From: "H.J. Lu" <hjl.to...@gmail.com>
-To: gcc-patc...@gcc.gnu.org
-Subject: [2/3] GCC 7: i386: Use reference of struct ix86_frame to avoid copy
-Date: Sun, 14 Jan 2018 07:02:36 -0800
-
-When there is no need to make a copy of ix86_frame, we can use reference
-of struct ix86_frame to avoid copy.
-
-Tested on x86-64.
-
-       Backport from mainline
-       * config/i386/i386.c (ix86_can_use_return_insn_p): Use reference
-       of struct ix86_frame.
-       (ix86_initial_elimination_offset): Likewise.
-       (ix86_expand_split_stack_prologue): Likewise.
----
- gcc/config/i386/i386.c | 9 +++------
- 1 file changed, 3 insertions(+), 6 deletions(-)
-
-diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
-index 813337242d8..397ef7cac26 100644
---- a/gcc/config/i386/i386.c
-+++ b/gcc/config/i386/i386.c
-@@ -11843,8 +11843,6 @@ symbolic_reference_mentioned_p (rtx op)
- bool
- ix86_can_use_return_insn_p (void)
- {
--  struct ix86_frame frame;
--
-   /* Don't use `ret' instruction in interrupt handler.  */
-   if (! reload_completed
-       || frame_pointer_needed
-@@ -11857,7 +11855,7 @@ ix86_can_use_return_insn_p (void)
-     return 0;
- 
-   ix86_compute_frame_layout ();
--  frame = cfun->machine->frame;
-+  struct ix86_frame &frame = cfun->machine->frame;
-   return (frame.stack_pointer_offset == UNITS_PER_WORD
-         && (frame.nregs + frame.nsseregs) == 0);
- }
-@@ -12344,7 +12342,7 @@ HOST_WIDE_INT
- ix86_initial_elimination_offset (int from, int to)
- {
-   ix86_compute_frame_layout ();
--  struct ix86_frame frame = cfun->machine->frame;
-+  struct ix86_frame &frame = cfun->machine->frame;
- 
-   if (from == ARG_POINTER_REGNUM && to == HARD_FRAME_POINTER_REGNUM)
-     return frame.hard_frame_pointer_offset;
-@@ -14860,7 +14858,6 @@ static GTY(()) rtx split_stack_fn_large;
- void
- ix86_expand_split_stack_prologue (void)
- {
--  struct ix86_frame frame;
-   HOST_WIDE_INT allocate;
-   unsigned HOST_WIDE_INT args_size;
-   rtx_code_label *label;
-@@ -14873,7 +14870,7 @@ ix86_expand_split_stack_prologue (void)
- 
-   ix86_finalize_stack_realign_flags ();
-   ix86_compute_frame_layout ();
--  frame = cfun->machine->frame;
-+  struct ix86_frame &frame = cfun->machine->frame;
-   allocate = frame.stack_pointer_offset - INCOMING_FRAME_SP_OFFSET;
- 
-   /* This is the label we will branch to if we have enough stack
-

diff --git a/sys-devel/gcc/files/gcc-4.8.3-musl-fix-libc5-assumption.patch 
b/sys-devel/gcc/files/gcc-4.8.3-musl-fix-libc5-assumption.patch
deleted file mode 100644
index 65bc45e..0000000
--- a/sys-devel/gcc/files/gcc-4.8.3-musl-fix-libc5-assumption.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- /var/tmp/portage/sys-devel/gcc-4.8.3-r99/work/gcc-4.8.3/boehm-gc/os_dep.c  
2013-03-06 15:08:58.000000000 +0000
-+++ gcc-4.8.3.new/boehm-gc/os_dep.c    2014-10-24 18:25:39.963379871 +0000
-@@ -41,7 +41,7 @@
- #     else /* not 2 <= __GLIBC__ */
-         /* libc5 doesn't have <sigcontext.h>: go directly with the kernel   */
-         /* one.  Check LINUX_VERSION_CODE to see which we should reference. */
--#       include <asm/sigcontext.h>
-+//#       include <asm/sigcontext.h>
- #     endif /* 2 <= __GLIBC__ */
- #   endif
- # endif

diff --git a/sys-devel/gcc/files/gcc-4.8.5-posix_memalign.patch 
b/sys-devel/gcc/files/gcc-4.8.5-posix_memalign.patch
deleted file mode 100644
index 4a5df48..0000000
--- a/sys-devel/gcc/files/gcc-4.8.5-posix_memalign.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-diff --git a/gcc/config/i386/pmm_malloc.h b/gcc/config/i386/pmm_malloc.h
-index 901001b..321fcd3 100644
---- a/gcc/config/i386/pmm_malloc.h
-+++ b/gcc/config/i386/pmm_malloc.h
-@@ -27,12 +27,13 @@
- #include <stdlib.h>
- 
- /* We can't depend on <stdlib.h> since the prototype of posix_memalign
--   may not be visible.  */
-+   may not be visible and we can't pollute the namespace either.  */
- #ifndef __cplusplus
--extern int posix_memalign (void **, size_t, size_t);
-+extern int __gcc_posix_memalign (void **, size_t, size_t)
- #else
--extern "C" int posix_memalign (void **, size_t, size_t) throw ();
-+extern "C" int __gcc_posix_memalign (void **, size_t, size_t) throw ()
- #endif
-+__asm__("posix_memalign");
- 
- static __inline void *
- _mm_malloc (size_t size, size_t alignment)
-@@ -42,7 +43,7 @@ _mm_malloc (size_t size, size_t alignment)
-     return malloc (size);
-   if (alignment == 2 || (sizeof (void *) == 8 && alignment == 4))
-     alignment = sizeof (void *);
--  if (posix_memalign (&ptr, alignment, size) == 0)
-+  if (__gcc_posix_memalign (&ptr, alignment, size) == 0)
-     return ptr;
-   else
-     return NULL;

diff --git a/sys-devel/gcc/files/gcc-4.9.3-musl-linker-path.patch 
b/sys-devel/gcc/files/gcc-4.9.3-musl-linker-path.patch
deleted file mode 100644
index 2fc076a..0000000
--- a/sys-devel/gcc/files/gcc-4.9.3-musl-linker-path.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-diff -Naur gcc-4.9.3.orig/gcc/config/arm/linux-eabi.h 
gcc-4.9.3/gcc/config/arm/linux-eabi.h
---- gcc-4.9.3.orig/gcc/config/arm/linux-eabi.h 2014-01-02 22:23:26.000000000 
+0000
-+++ gcc-4.9.3/gcc/config/arm/linux-eabi.h      2015-10-02 19:12:32.583700214 
+0000
-@@ -68,8 +68,8 @@
-    GLIBC_DYNAMIC_LINKER_DEFAULT and TARGET_DEFAULT_FLOAT_ABI.  */
- 
- #undef  GLIBC_DYNAMIC_LINKER
--#define GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "/lib/ld-linux.so.3"
--#define GLIBC_DYNAMIC_LINKER_HARD_FLOAT "/lib/ld-linux-armhf.so.3"
-+#define GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "/lib/ld-musl-arm.so.1"
-+#define GLIBC_DYNAMIC_LINKER_HARD_FLOAT "/lib/ld-musl-armhf.so.1"
- #define GLIBC_DYNAMIC_LINKER_DEFAULT GLIBC_DYNAMIC_LINKER_SOFT_FLOAT
- 
- #define GLIBC_DYNAMIC_LINKER \
-diff -Naur gcc-4.9.3.orig/gcc/config/i386/linux64.h 
gcc-4.9.3/gcc/config/i386/linux64.h
---- gcc-4.9.3.orig/gcc/config/i386/linux64.h   2014-01-02 22:23:26.000000000 
+0000
-+++ gcc-4.9.3/gcc/config/i386/linux64.h        2015-10-02 19:12:32.583700214 
+0000
-@@ -27,6 +27,6 @@
- #define GNU_USER_LINK_EMULATION64 "elf_x86_64"
- #define GNU_USER_LINK_EMULATIONX32 "elf32_x86_64"
- 
--#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
--#define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
-+#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-musl-i386.so.1"
-+#define GLIBC_DYNAMIC_LINKER64 "/lib/ld-musl-x86_64.so.1"
- #define GLIBC_DYNAMIC_LINKERX32 "/libx32/ld-linux-x32.so.2"
-diff -Naur gcc-4.9.3.orig/gcc/config/mips/linux.h 
gcc-4.9.3/gcc/config/mips/linux.h
---- gcc-4.9.3.orig/gcc/config/mips/linux.h     2014-01-02 22:23:26.000000000 
+0000
-+++ gcc-4.9.3/gcc/config/mips/linux.h  2015-10-02 19:12:32.584700214 +0000
-@@ -17,8 +17,12 @@
- along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
- 
--#define GLIBC_DYNAMIC_LINKER \
--  "%{mnan=2008:/lib/ld-linux-mipsn8.so.1;:/lib/ld.so.1}"
-+#if TARGET_ENDIAN_DEFAULT == 0 /* LE */
-+#define GLIBC_DYNAMIC_LINKER_E "%{EB:;:el}"
-+#else
-+#define GLIBC_DYNAMIC_LINKER_E "%{EL:el}"
-+#endif
-+#define GLIBC_DYNAMIC_LINKER "/lib/ld-musl-mips" GLIBC_DYNAMIC_LINKER_E 
".so.1"
- 
- #undef UCLIBC_DYNAMIC_LINKER
- #define UCLIBC_DYNAMIC_LINKER \
-diff -Naur gcc-4.9.3.orig/gcc/config/rs6000/linux64.h 
gcc-4.9.3/gcc/config/rs6000/linux64.h
---- gcc-4.9.3.orig/gcc/config/rs6000/linux64.h 2015-03-09 23:19:19.000000000 
+0000
-+++ gcc-4.9.3/gcc/config/rs6000/linux64.h      2015-10-02 19:12:32.584700214 
+0000
-@@ -363,12 +363,8 @@
- #undef        LINK_OS_DEFAULT_SPEC
- #define LINK_OS_DEFAULT_SPEC "%(link_os_linux)"
- 
--#define GLIBC_DYNAMIC_LINKER32 "/lib/ld.so.1"
--#ifdef LINUX64_DEFAULT_ABI_ELFv2
--#define GLIBC_DYNAMIC_LINKER64 
"%{mabi=elfv1:/lib64/ld64.so.1;:/lib64/ld64.so.2}"
--#else
--#define GLIBC_DYNAMIC_LINKER64 
"%{mabi=elfv2:/lib64/ld64.so.2;:/lib64/ld64.so.1}"
--#endif
-+#define GLIBC_DYNAMIC_LINKER32 "/lib/ld-musl-powerpc.so.1"
-+#define GLIBC_DYNAMIC_LINKER64 "/lib/ld-musl-powerpc64.so.1"
- #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
- #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
- #if DEFAULT_LIBC == LIBC_UCLIBC
-diff -Naur gcc-4.9.3.orig/gcc/config/rs6000/sysv4.h 
gcc-4.9.3/gcc/config/rs6000/sysv4.h
---- gcc-4.9.3.orig/gcc/config/rs6000/sysv4.h   2014-07-24 17:25:19.000000000 
+0000
-+++ gcc-4.9.3/gcc/config/rs6000/sysv4.h        2015-10-02 19:12:32.584700214 
+0000
-@@ -761,7 +761,7 @@
- 
- #define LINK_START_LINUX_SPEC ""
- 
--#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
-+#define GLIBC_DYNAMIC_LINKER "/lib/ld-musl-powerpc.so.1"
- #define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
- #if DEFAULT_LIBC == LIBC_UCLIBC
- #define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"

diff --git a/sys-devel/gcc/files/gcc-4.9.3-musl-res_state.patch 
b/sys-devel/gcc/files/gcc-4.9.3-musl-res_state.patch
deleted file mode 100644
index 363020d..0000000
--- a/sys-devel/gcc/files/gcc-4.9.3-musl-res_state.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -Naur gcc-4.9.3.orig/libsanitizer/tsan/tsan_platform_linux.cc 
gcc-4.9.3/libsanitizer/tsan/tsan_platform_linux.cc
---- gcc-4.9.3.orig/libsanitizer/tsan/tsan_platform_linux.cc    2013-12-05 
09:18:38.000000000 +0000
-+++ gcc-4.9.3/libsanitizer/tsan/tsan_platform_linux.cc 2015-10-02 
19:19:15.765680892 +0000
-@@ -351,7 +351,7 @@
- // closes within glibc. The code is a pure hack.
- int ExtractResolvFDs(void *state, int *fds, int nfd) {
-   int cnt = 0;
--  __res_state *statp = (__res_state*)state;
-+  res_state statp = (res_state)state;
-   for (int i = 0; i < MAXNS && cnt < nfd; i++) {
-     if (statp->_u._ext.nsaddrs[i] && statp->_u._ext.nssocks[i] != -1)
-       fds[cnt++] = statp->_u._ext.nssocks[i];

diff --git a/sys-devel/gcc/files/gcc-4.9.3-pr68470.patch 
b/sys-devel/gcc/files/gcc-4.9.3-pr68470.patch
deleted file mode 100644
index f1a7464..0000000
--- a/sys-devel/gcc/files/gcc-4.9.3-pr68470.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-diff --git a/gcc-4.9.3.orig/gcc/ipa-split.c b/gcc-4.9.3/gcc/ipa-split.c
-index 0d1495d..688c954 100644
---- a/gcc-4.9.3.orig/gcc/ipa-split.c
-+++ b/gcc-4.9.3/gcc/ipa-split.c
-@@ -1122,7 +1122,6 @@ split_function (struct split_point *split_point)
-   edge e;
-   edge_iterator ei;
-   tree retval = NULL, real_retval = NULL;
--  bool split_part_return_p = false;
-   gimple last_stmt = NULL;
-   unsigned int i;
-   tree arg, ddef;
-@@ -1162,12 +1161,28 @@ split_function (struct split_point *split_point)
-       args_to_pass.safe_push (arg);
-       }
- 
--  /* See if the split function will return.  */
-+  /* See if the split function or the main part will return.  */
-+  bool main_part_return_p = false;
-+  bool split_part_return_p = false;
-   FOR_EACH_EDGE (e, ei, return_bb->preds)
--    if (bitmap_bit_p (split_point->split_bbs, e->src->index))
--      break;
--  if (e)
--    split_part_return_p = true;
-+    {
-+      if (bitmap_bit_p (split_point->split_bbs, e->src->index))
-+      split_part_return_p = true;
-+      else
-+      main_part_return_p = true;
-+    }
-+  /* The main part also returns if we we split on a fallthru edge
-+     and the split part returns.  */
-+  if (split_part_return_p)
-+    FOR_EACH_EDGE (e, ei, split_point->entry_bb->preds)
-+      {
-+      if (! bitmap_bit_p (split_point->split_bbs, e->src->index)
-+          && single_succ_p (e->src))
-+        {
-+          main_part_return_p = true;
-+          break;
-+        }
-+      }
- 
-   /* Add return block to what will become the split function.
-      We do not return; no return block is needed.  */
-@@ -1212,6 +1227,11 @@ split_function (struct split_point *split_point)
-   else
-     bitmap_set_bit (split_point->split_bbs, return_bb->index);
- 
-+  /* If the main part doesn't return pretend the return block wasn't
-+     found for all of the following.  */
-+  if (! main_part_return_p)
-+    return_bb = EXIT_BLOCK_PTR_FOR_FN (cfun);
-+
-   /* If RETURN_BB has virtual operand PHIs, they must be removed and the
-      virtual operand marked for renaming as we change the CFG in a way that
-      tree-inline is not able to compensate for.

diff --git a/sys-devel/gcc/files/gcc-4.9.3-secure-plt.patch 
b/sys-devel/gcc/files/gcc-4.9.3-secure-plt.patch
deleted file mode 100644
index bc52cec..0000000
--- a/sys-devel/gcc/files/gcc-4.9.3-secure-plt.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-diff --git a/gcc/config/rs6000/secureplt.h b/gcc/config/rs6000/secureplt.h
-index b463463..77edf2a 100644
---- a/gcc/config/rs6000/secureplt.h
-+++ b/gcc/config/rs6000/secureplt.h
-@@ -18,3 +18,4 @@ along with GCC; see the file COPYING3.  If not see
- <http://www.gnu.org/licenses/>.  */
-
- #define CC1_SECURE_PLT_DEFAULT_SPEC "-msecure-plt"
-+#define LINK_SECURE_PLT_DEFAULT_SPEC "--secure-plt"
-diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
-index 7b2f9bd..c77bf5c 100644
---- a/gcc/config/rs6000/sysv4.h
-+++ b/gcc/config/rs6000/sysv4.h
-@@ -537,6 +537,9 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
- #ifndef CC1_SECURE_PLT_DEFAULT_SPEC
- #define CC1_SECURE_PLT_DEFAULT_SPEC ""
- #endif
-+#ifndef LINK_SECURE_PLT_DEFAULT_SPEC
-+#define LINK_SECURE_PLT_DEFAULT_SPEC ""
-+#endif
-
- /* Pass -G xxx to the compiler.  */
- #undef CC1_SPEC
-@@ -574,6 +577,7 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
- %{R*} \
- %(link_shlib) \
- %{!T*: %(link_start) } \
-+%{!static: %(link_secure_plt_default)} \
- %(link_target) \
- %(link_os)"
-             
-@@ -889,6 +893,7 @@ ncrtn.o%s"
-   { "link_os_openbsd",                LINK_OS_OPENBSD_SPEC },                 
\
-   { "link_os_default",                LINK_OS_DEFAULT_SPEC },                 
\
-   { "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC },          \
-+  { "link_secure_plt_default",        LINK_SECURE_PLT_DEFAULT_SPEC },         
\
-   { "cpp_os_ads",             CPP_OS_ADS_SPEC },                      \
-   { "cpp_os_yellowknife",     CPP_OS_YELLOWKNIFE_SPEC },              \
-   { "cpp_os_mvme",            CPP_OS_MVME_SPEC },                     \

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/aarch64.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/aarch64.diff
deleted file mode 100644
index 90eb4fa..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/aarch64.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -r 7c6d89fb1832 gcc/config/aarch64/aarch64-linux.h
---- a/gcc/config/aarch64/aarch64-linux.h       Sun Jul 26 15:32:28 2015 -0400
-+++ b/gcc/config/aarch64/aarch64-linux.h       Sun Jul 26 15:32:30 2015 -0400
-@@ -23,6 +23,8 @@
- 
- #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux-aarch64%{mbig-endian:_be}.so.1"
- 
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-aarch64.so.1"
-+
- #define CPP_SPEC "%{pthread:-D_REENTRANT}"
- 
- #define LINUX_TARGET_LINK_SPEC  "%{h*}                \

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/arm.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/arm.diff
deleted file mode 100644
index 777e0f6..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/arm.diff
+++ /dev/null
@@ -1,46 +0,0 @@
-# HG changeset patch
-# Parent 92d83561106d17ca896328fcb4ec36cd4e2e9e16
-Support for arm-linux-musl.
-
-diff -r 92d83561106d gcc/config/arm/linux-eabi.h
---- a/gcc/config/arm/linux-eabi.h      Sun Jul 26 15:32:23 2015 -0400
-+++ b/gcc/config/arm/linux-eabi.h      Sun Jul 26 15:32:25 2015 -0400
-@@ -77,6 +77,23 @@
-     %{mfloat-abi=soft*:" GLIBC_DYNAMIC_LINKER_SOFT_FLOAT "} \
-     %{!mfloat-abi=*:" GLIBC_DYNAMIC_LINKER_DEFAULT "}"
- 
-+/* For ARM musl currently supports four dynamic linkers:
-+   - ld-musl-arm.so.1 - for the EABI-derived soft-float ABI
-+   - ld-musl-armhf.so.1 - for the EABI-derived hard-float ABI
-+   - ld-musl-armeb.so.1 - for the EABI-derived soft-float ABI, EB
-+   - ld-musl-armebhf.so.1 - for the EABI-derived hard-float ABI, EB
-+   musl does not support the legacy OABI mode.
-+   All the dynamic linkers live in /lib.
-+   We default to soft-float, EL. */
-+#undef  MUSL_DYNAMIC_LINKER
-+#if TARGET_BIG_ENDIAN_DEFAULT
-+#define MUSL_DYNAMIC_LINKER_E "%{mlittle-endian:;:eb}"
-+#else
-+#define MUSL_DYNAMIC_LINKER_E "%{mbig-endian:eb}"
-+#endif
-+#define MUSL_DYNAMIC_LINKER \
-+  "/lib/ld-musl-arm" MUSL_DYNAMIC_LINKER_E "%{mfloat-abi=hard:hf}.so.1"
-+
- /* At this point, bpabi.h will have clobbered LINK_SPEC.  We want to
-    use the GNU/Linux version, not the generic BPABI version.  */
- #undef  LINK_SPEC
-diff -r 92d83561106d libitm/config/arm/hwcap.cc
---- a/libitm/config/arm/hwcap.cc       Sun Jul 26 15:32:23 2015 -0400
-+++ b/libitm/config/arm/hwcap.cc       Sun Jul 26 15:32:25 2015 -0400
-@@ -40,7 +40,11 @@
- 
- #ifdef __linux__
- #include <unistd.h>
-+#ifdef __GLIBC__
- #include <sys/fcntl.h>
-+#else
-+#include <fcntl.h>
-+#endif
- #include <elf.h>
- 
- static void __attribute__((constructor))

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/gcc-autoconf-musl.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/gcc-autoconf-musl.diff
deleted file mode 100644
index dba0077..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/gcc-autoconf-musl.diff
+++ /dev/null
@@ -1,62 +0,0 @@
-diff -r 3baeaed6c155 gcc/configure
---- a/gcc/configure    Sun Jul 26 15:32:15 2015 -0400
-+++ b/gcc/configure    Sun Jul 26 15:32:17 2015 -0400
-@@ -27449,6 +27449,9 @@
- else
-   gcc_cv_libc_provides_ssp=no
-     case "$target" in
-+       *-*-musl*)
-+         # All versions of musl provide stack protector
-+       gcc_cv_libc_provides_ssp=yes;;
-        *-*-linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu)
-       # glibc 2.4 and later provides __stack_chk_fail and
-       # either __stack_chk_guard, or TLS access to stack guard canary.
-@@ -27481,6 +27484,7 @@
-        # <http://gcc.gnu.org/ml/gcc/2008-10/msg00130.html>) and for now
-        # simply assert that glibc does provide this, which is true for all
-        # realistically usable GNU/Hurd configurations.
-+       # All supported versions of musl provide it as well
-        gcc_cv_libc_provides_ssp=yes;;
-        *-*-darwin* | *-*-freebsd*)
-        ac_fn_c_check_func "$LINENO" "__stack_chk_fail" 
"ac_cv_func___stack_chk_fail"
-@@ -27570,6 +27574,9 @@
-       gcc_cv_target_dl_iterate_phdr=no
-     fi
-     ;;
-+  *-linux-musl*)
-+    gcc_cv_target_dl_iterate_phdr=yes
-+    ;;
- esac
- 
- if test x$gcc_cv_target_dl_iterate_phdr = xyes; then
-diff -r 3baeaed6c155 gcc/configure.ac
---- a/gcc/configure.ac Sun Jul 26 15:32:15 2015 -0400
-+++ b/gcc/configure.ac Sun Jul 26 15:32:17 2015 -0400
-@@ -5076,6 +5076,9 @@
-       gcc_cv_libc_provides_ssp,
-       [gcc_cv_libc_provides_ssp=no
-     case "$target" in
-+       *-*-musl*)
-+         # All versions of musl provide stack protector
-+       gcc_cv_libc_provides_ssp=yes;;
-        *-*-linux* | *-*-kfreebsd*-gnu | *-*-knetbsd*-gnu)
-       # glibc 2.4 and later provides __stack_chk_fail and
-       # either __stack_chk_guard, or TLS access to stack guard canary.
-@@ -5102,6 +5105,7 @@
-        # <http://gcc.gnu.org/ml/gcc/2008-10/msg00130.html>) and for now
-        # simply assert that glibc does provide this, which is true for all
-        # realistically usable GNU/Hurd configurations.
-+       # All supported versions of musl provide it as well
-        gcc_cv_libc_provides_ssp=yes;;
-        *-*-darwin* | *-*-freebsd*)
-        AC_CHECK_FUNC(__stack_chk_fail,[gcc_cv_libc_provides_ssp=yes],
-@@ -5168,6 +5172,9 @@
-       gcc_cv_target_dl_iterate_phdr=no
-     fi
-     ;;
-+  *-linux-musl*)
-+    gcc_cv_target_dl_iterate_phdr=yes
-+    ;;
- esac
- GCC_TARGET_TEMPLATE([TARGET_DL_ITERATE_PHDR])
- if test x$gcc_cv_target_dl_iterate_phdr = xyes; then

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/gcc-config-musl.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/gcc-config-musl.diff
deleted file mode 100644
index e635573..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/gcc-config-musl.diff
+++ /dev/null
@@ -1,207 +0,0 @@
-# HG changeset patch
-# Parent fef9a6ed009159f294d8524a0bc1dda731990754
-Adding -mmusl as a musl libc specifier, and the necessary hacks for it to know 
how to find musl's dynamic linker.
-
-diff -r fef9a6ed0091 gcc/config.gcc
---- a/gcc/config.gcc   Sun Jul 26 15:32:09 2015 -0400
-+++ b/gcc/config.gcc   Sun Jul 26 15:32:11 2015 -0400
-@@ -594,7 +594,7 @@
- esac
- 
- # Common C libraries.
--tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3"
-+tm_defines="$tm_defines LIBC_GLIBC=1 LIBC_UCLIBC=2 LIBC_BIONIC=3 LIBC_MUSL=4"
- 
- # 32-bit x86 processors supported by --with-arch=.  Each processor
- # MUST be separated by exactly one space.
-@@ -719,6 +719,9 @@
-     *-*-*uclibc*)
-       tm_defines="$tm_defines DEFAULT_LIBC=LIBC_UCLIBC"
-       ;;
-+    *-*-*musl*)
-+      tm_defines="$tm_defines DEFAULT_LIBC=LIBC_MUSL"
-+      ;;
-     *)
-       tm_defines="$tm_defines DEFAULT_LIBC=LIBC_GLIBC"
-       ;;
-diff -r fef9a6ed0091 gcc/config/linux.h
---- a/gcc/config/linux.h       Sun Jul 26 15:32:09 2015 -0400
-+++ b/gcc/config/linux.h       Sun Jul 26 15:32:11 2015 -0400
-@@ -32,10 +32,12 @@
- #define OPTION_GLIBC  (DEFAULT_LIBC == LIBC_GLIBC)
- #define OPTION_UCLIBC (DEFAULT_LIBC == LIBC_UCLIBC)
- #define OPTION_BIONIC (DEFAULT_LIBC == LIBC_BIONIC)
-+#define OPTION_MUSL   (DEFAULT_LIBC == LIBC_MUSL)
- #else
- #define OPTION_GLIBC  (linux_libc == LIBC_GLIBC)
- #define OPTION_UCLIBC (linux_libc == LIBC_UCLIBC)
- #define OPTION_BIONIC (linux_libc == LIBC_BIONIC)
-+#define OPTION_MUSL   (linux_libc == LIBC_MUSL)
- #endif
- 
- #define GNU_USER_TARGET_OS_CPP_BUILTINS()                     \
-@@ -53,18 +55,21 @@
-    uClibc or Bionic is the default C library and whether
-    -muclibc or -mglibc or -mbionic has been passed to change the default.  */
- 
--#define CHOOSE_DYNAMIC_LINKER1(LIBC1, LIBC2, LIBC3, LD1, LD2, LD3)    \
--  "%{" LIBC2 ":" LD2 ";:%{" LIBC3 ":" LD3 ";:" LD1 "}}"
-+#define CHOOSE_DYNAMIC_LINKER1(LIBC1, LIBC2, LIBC3, LIBC4, LD1, LD2, LD3, 
LD4)        \
-+  "%{" LIBC2 ":" LD2 ";:%{" LIBC3 ":" LD3 ";:%{" LIBC4 ":" LD4 ";:" LD1 "}}}"
- 
- #if DEFAULT_LIBC == LIBC_GLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U, B) \
--  CHOOSE_DYNAMIC_LINKER1 ("mglibc", "muclibc", "mbionic", G, U, B)
-+#define CHOOSE_DYNAMIC_LINKER(G, U, B, M) \
-+  CHOOSE_DYNAMIC_LINKER1 ("mglibc", "muclibc", "mbionic", "mmusl", G, U, B, M)
- #elif DEFAULT_LIBC == LIBC_UCLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U, B) \
--  CHOOSE_DYNAMIC_LINKER1 ("muclibc", "mglibc", "mbionic", U, G, B)
-+#define CHOOSE_DYNAMIC_LINKER(G, U, B, M) \
-+  CHOOSE_DYNAMIC_LINKER1 ("muclibc", "mglibc", "mbionic", "mmusl", U, G, B, M)
- #elif DEFAULT_LIBC == LIBC_BIONIC
--#define CHOOSE_DYNAMIC_LINKER(G, U, B) \
--  CHOOSE_DYNAMIC_LINKER1 ("mbionic", "mglibc", "muclibc", B, G, U)
-+#define CHOOSE_DYNAMIC_LINKER(G, U, B, M) \
-+  CHOOSE_DYNAMIC_LINKER1 ("mbionic", "mglibc", "muclibc", "mmusl", B, G, U, M)
-+#elif DEFAULT_LIBC == LIBC_MUSL
-+#define CHOOSE_DYNAMIC_LINKER(G, U, B, M) \
-+  CHOOSE_DYNAMIC_LINKER1 ("mmusl", "mglibc", "muclibc", "mbionic", M, G, U, B)
- #else
- #error "Unsupported DEFAULT_LIBC"
- #endif /* DEFAULT_LIBC */
-@@ -84,21 +89,92 @@
- 
- #define GNU_USER_DYNAMIC_LINKER                                               
\
-   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, \
--                       BIONIC_DYNAMIC_LINKER)
-+                       BIONIC_DYNAMIC_LINKER, MUSL_DYNAMIC_LINKER)
- #define GNU_USER_DYNAMIC_LINKER32                                     \
-   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32, \
--                       BIONIC_DYNAMIC_LINKER32)
-+                       BIONIC_DYNAMIC_LINKER32, MUSL_DYNAMIC_LINKER32)
- #define GNU_USER_DYNAMIC_LINKER64                                     \
-   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64, \
--                       BIONIC_DYNAMIC_LINKER64)
-+                       BIONIC_DYNAMIC_LINKER64, MUSL_DYNAMIC_LINKER64)
- #define GNU_USER_DYNAMIC_LINKERX32                                    \
-   CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKERX32, UCLIBC_DYNAMIC_LINKERX32, \
--                       BIONIC_DYNAMIC_LINKERX32)
-+                       BIONIC_DYNAMIC_LINKERX32, MUSL_DYNAMIC_LINKERX32)
- 
- /* Whether we have Bionic libc runtime */
- #undef TARGET_HAS_BIONIC
- #define TARGET_HAS_BIONIC (OPTION_BIONIC)
- 
-+/* musl avoids problematic includes by rearranging the include directories.
-+ * Unfortunately, this is mostly duplicated from cppdefault.c */
-+#if DEFAULT_LIBC == LIBC_MUSL
-+#define INCLUDE_DEFAULTS_MUSL_GPP                     \
-+    { GPLUSPLUS_INCLUDE_DIR, "G++", 1, 1,             \
-+      GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },         \
-+    { GPLUSPLUS_TOOL_INCLUDE_DIR, "G++", 1, 1,                \
-+      GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 1 },         \
-+    { GPLUSPLUS_BACKWARD_INCLUDE_DIR, "G++", 1, 1,    \
-+      GPLUSPLUS_INCLUDE_DIR_ADD_SYSROOT, 0 },
-+
-+#ifdef LOCAL_INCLUDE_DIR
-+#define INCLUDE_DEFAULTS_MUSL_LOCAL                   \
-+    { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 2 },             \
-+    { LOCAL_INCLUDE_DIR, 0, 0, 1, 1, 0 },
-+#else
-+#define INCLUDE_DEFAULTS_MUSL_LOCAL
-+#endif
-+
-+#ifdef PREFIX_INCLUDE_DIR
-+#define INCLUDE_DEFAULTS_MUSL_PREFIX                  \
-+    { PREFIX_INCLUDE_DIR, 0, 0, 1, 0, 0},
-+#else
-+#define INCLUDE_DEFAULTS_MUSL_PREFIX
-+#endif
-+
-+#ifdef CROSS_INCLUDE_DIR
-+#define INCLUDE_DEFAULTS_MUSL_CROSS                   \
-+    { CROSS_INCLUDE_DIR, "GCC", 0, 0, 0, 0},
-+#else
-+#define INCLUDE_DEFAULTS_MUSL_CROSS
-+#endif
-+
-+#ifdef TOOL_INCLUDE_DIR
-+#define INCLUDE_DEFAULTS_MUSL_TOOL                    \
-+    { TOOL_INCLUDE_DIR, "BINUTILS", 0, 1, 0, 0},
-+#else
-+#define INCLUDE_DEFAULTS_MUSL_TOOL
-+#endif
-+
-+#ifdef NATIVE_SYSTEM_HEADER_DIR
-+#define INCLUDE_DEFAULTS_MUSL_NATIVE                  \
-+    { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 2 },      \
-+    { NATIVE_SYSTEM_HEADER_DIR, 0, 0, 0, 1, 0 },
-+#else
-+#define INCLUDE_DEFAULTS_MUSL_NATIVE
-+#endif
-+
-+#if defined (CROSS_DIRECTORY_STRUCTURE) && !defined (TARGET_SYSTEM_ROOT)
-+# undef INCLUDE_DEFAULTS_MUSL_LOCAL
-+# define INCLUDE_DEFAULTS_MUSL_LOCAL
-+# undef INCLUDE_DEFAULTS_MUSL_NATIVE
-+# define INCLUDE_DEFAULTS_MUSL_NATIVE
-+#else
-+# undef INCLUDE_DEFAULTS_MUSL_CROSS
-+# define INCLUDE_DEFAULTS_MUSL_CROSS
-+#endif
-+
-+#undef INCLUDE_DEFAULTS
-+#define INCLUDE_DEFAULTS                              \
-+  {                                                   \
-+    INCLUDE_DEFAULTS_MUSL_GPP                         \
-+    INCLUDE_DEFAULTS_MUSL_PREFIX                      \
-+    INCLUDE_DEFAULTS_MUSL_CROSS                               \
-+    INCLUDE_DEFAULTS_MUSL_TOOL                                \
-+    INCLUDE_DEFAULTS_MUSL_NATIVE                      \
-+    { GCC_INCLUDE_DIR, "GCC", 0, 1, 0, 0 },           \
-+    { 0, 0, 0, 0, 0, 0 }                              \
-+  }
-+#endif
-+
- #if (DEFAULT_LIBC == LIBC_UCLIBC) && defined (SINGLE_LIBC) /* uClinux */
- /* This is a *uclinux* target.  We don't define below macros to normal linux
-    versions, because doing so would require *uclinux* targets to include
-diff -r fef9a6ed0091 gcc/config/linux.opt
---- a/gcc/config/linux.opt     Sun Jul 26 15:32:09 2015 -0400
-+++ b/gcc/config/linux.opt     Sun Jul 26 15:32:11 2015 -0400
-@@ -30,3 +30,7 @@
- muclibc
- Target Report RejectNegative Var(linux_libc,LIBC_UCLIBC) Negative(mbionic)
- Use uClibc C library
-+
-+mmusl
-+Target Report RejectNegative Var(linux_libc,LIBC_MUSL) Negative(mglibc)
-+Use musl C library
-diff -r fef9a6ed0091 gcc/ginclude/stddef.h
---- a/gcc/ginclude/stddef.h    Sun Jul 26 15:32:09 2015 -0400
-+++ b/gcc/ginclude/stddef.h    Sun Jul 26 15:32:11 2015 -0400
-@@ -181,6 +181,7 @@
- #ifndef _GCC_SIZE_T
- #ifndef _SIZET_
- #ifndef __size_t
-+#ifndef __DEFINED_size_t /* musl */
- #define __size_t__    /* BeOS */
- #define __SIZE_T__    /* Cray Unicos/Mk */
- #define _SIZE_T
-@@ -197,6 +198,7 @@
- #define ___int_size_t_h
- #define _GCC_SIZE_T
- #define _SIZET_
-+#define __DEFINED_size_t /* musl */
- #if (defined (__FreeBSD__) && (__FreeBSD__ >= 5)) \
-   || defined(__FreeBSD_kernel__)
- /* __size_t is a typedef on FreeBSD 5, must not trash it. */
-@@ -214,6 +216,7 @@
- typedef long ssize_t;
- #endif /* __BEOS__ */
- #endif /* !(defined (__GNUG__) && defined (size_t)) */
-+#endif /* __DEFINED_size_t */
- #endif /* __size_t */
- #endif /* _SIZET_ */
- #endif /* _GCC_SIZE_T */

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/gcc-ssp.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/gcc-ssp.diff
deleted file mode 100644
index 7846623..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/gcc-ssp.diff
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -r 581c4dd64733 gcc/gcc.c
---- a/gcc/gcc.c        Sun Jul 26 15:32:17 2015 -0400
-+++ b/gcc/gcc.c        Sun Jul 26 15:32:19 2015 -0400
-@@ -670,7 +670,7 @@
- 
- #ifndef LINK_SSP_SPEC
- #ifdef TARGET_LIBC_PROVIDES_SSP
--#define LINK_SSP_SPEC "%{fstack-protector:}"
-+#define LINK_SSP_SPEC 
"%{fstack-protector|fstack-protector-all:-lssp_nonshared}"
- #else
- #define LINK_SSP_SPEC 
"%{fstack-protector|fstack-protector-strong|fstack-protector-all:-lssp_nonshared
 -lssp}"
- #endif

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/gomp-posix.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/gomp-posix.diff
deleted file mode 100644
index 7b80fdf..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/gomp-posix.diff
+++ /dev/null
@@ -1,16 +0,0 @@
-# HG changeset patch
-# Parent 47dcb1f7b3a9c1b5d6b9d56303e7603fbe5a51f9
-A fix for libgomp to correctly request a POSIX version for time support.
-
-diff -r 47dcb1f7b3a9 libgomp/config/posix/time.c
---- a/libgomp/config/posix/time.c      Sun Jul 26 15:32:11 2015 -0400
-+++ b/libgomp/config/posix/time.c      Sun Jul 26 15:32:13 2015 -0400
-@@ -28,6 +28,8 @@
-    The following implementation uses the most simple POSIX routines.
-    If present, POSIX 4 clocks should be used instead.  */
- 
-+#define _POSIX_C_SOURCE 199309L /* for clocks */
-+
- #include "libgomp.h"
- #include <unistd.h>
- #if TIME_WITH_SYS_TIME

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/gthread.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/gthread.diff
deleted file mode 100644
index af74e50..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/gthread.diff
+++ /dev/null
@@ -1,16 +0,0 @@
-Do not use weak references on any targets for gthread. Necessary on musl, safe 
elsewhere.
-
-diff -r d2b373a6ad39 libgcc/gthr.h
---- a/libgcc/gthr.h    Thu Jan 29 18:59:33 2015 -0500
-+++ b/libgcc/gthr.h    Thu Jan 29 19:00:03 2015 -0500
-@@ -136,10 +136,8 @@
- /* The pe-coff weak support isn't fully compatible to ELF's weak.
-    For static libraries it might would work, but as we need to deal
-    with shared versions too, we disable it for mingw-targets.  */
--#ifdef __MINGW32__
- #undef GTHREAD_USE_WEAK
- #define GTHREAD_USE_WEAK 0
--#endif
- 
- #ifndef GTHREAD_USE_WEAK
- #define GTHREAD_USE_WEAK 1

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/kill-fixincludes.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/kill-fixincludes.diff
deleted file mode 100644
index b8f8d0c..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/kill-fixincludes.diff
+++ /dev/null
@@ -1,17 +0,0 @@
-# HG changeset patch
-# Parent 9f2f4e02fced4d4810910db6cced26ed0d47c23f
-Get rid of ever-broken fixincludes on musl.
-
-diff -r 9f2f4e02fced fixincludes/mkfixinc.sh
---- a/fixincludes/mkfixinc.sh  Sun Jul 26 15:32:19 2015 -0400
-+++ b/fixincludes/mkfixinc.sh  Sun Jul 26 15:32:21 2015 -0400
-@@ -19,7 +19,8 @@
-     powerpc-*-eabi*    | \
-     powerpc-*-rtems*   | \
-     powerpcle-*-eabisim* | \
--    powerpcle-*-eabi* )
-+    powerpcle-*-eabi* | \
-+    *-musl* )
-       #  IF there is no include fixing,
-       #  THEN create a no-op fixer and exit
-       (echo "#! /bin/sh" ; echo "exit 0" ) > ${target}

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/libstdc++-generic.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/libstdc++-generic.diff
deleted file mode 100644
index de7acff..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/libstdc++-generic.diff
+++ /dev/null
@@ -1,31 +0,0 @@
-# HG changeset patch
-# Parent 889b7d97216603795ba8c5f4da8e616bef8feb9d
-Use the generic implementation of libstdc++ primitives when we're on musl, not 
the glibc one.
-
-diff -r 889b7d972166 libstdc++-v3/configure.host
---- a/libstdc++-v3/configure.host      Sun Jul 26 15:30:11 2015 -0400
-+++ b/libstdc++-v3/configure.host      Sun Jul 26 15:32:09 2015 -0400
-@@ -266,6 +266,13 @@
-     os_include_dir="os/bsd/freebsd"
-     ;;
-   gnu* | linux* | kfreebsd*-gnu | knetbsd*-gnu)
-+    # check for musl by target
-+    case "${host_os}" in
-+      *-musl*)
-+        os_include_dir="os/generic"
-+        ;;
-+      *)
-+
-     if [ "$uclibc" = "yes" ]; then
-       os_include_dir="os/uclibc"
-     elif [ "$bionic" = "yes" ]; then
-@@ -274,6 +281,9 @@
-       os_include_dir="os/gnu-linux"
-     fi
-     ;;
-+
-+    esac
-+    ;;
-   hpux*)
-     os_include_dir="os/hpux"
-     ;;

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/microblaze-size_t.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/microblaze-size_t.diff
deleted file mode 100644
index 9ddc092..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/microblaze-size_t.diff
+++ /dev/null
@@ -1,39 +0,0 @@
-From 478ee0c03a08e2ef9371fd88d516738936943e78 Mon Sep 17 00:00:00 2001
-From: David Holsgrove <david.holsgr...@xilinx.com>
-Date: Fri, 28 Sep 2012 16:32:03 +1000
-Subject: [PATCH 06/11] [Patch, microblaze]: Add SIZE_TYPE and PTRDIFF_TYPE to
- microblaze.h
-
-Fixes warnings like;
-
-warning: format '%zX' expects argument of type 'size_t',
-but argument 3 has type 'unsigned int' [-Wformat]
-
-Changelog
-
-2013-03-18  David Holsgrove <david.holsgr...@xilinx.com>
-
- * gcc/config/microblaze/microblaze.h: Define SIZE_TYPE
-   and PTRDIFF_TYPE.
-
-Signed-off-by: David Holsgrove <david.holsgr...@xilinx.com>
----
- gcc/config/microblaze/microblaze.h |    6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff -r 97f8346ce240 gcc/config/microblaze/microblaze.h
---- a/gcc/config/microblaze/microblaze.h       Sun Jul 26 15:32:32 2015 -0400
-+++ b/gcc/config/microblaze/microblaze.h       Sun Jul 26 15:32:34 2015 -0400
-@@ -218,6 +218,12 @@
- #undef PTRDIFF_TYPE
- #define PTRDIFF_TYPE "int"
- 
-+#undef SIZE_TYPE
-+#define SIZE_TYPE "unsigned int"
-+
-+#undef PTRDIFF_TYPE
-+#define PTRDIFF_TYPE "int"
-+
- #define CONSTANT_ALIGNMENT(EXP, ALIGN)                                        
\
-   ((TREE_CODE (EXP) == STRING_CST  || TREE_CODE (EXP) == CONSTRUCTOR) \
-    && (ALIGN) < BITS_PER_WORD                                         \

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/microblaze.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/microblaze.diff
deleted file mode 100644
index ac5a87f..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/microblaze.diff
+++ /dev/null
@@ -1,31 +0,0 @@
-# HG changeset patch
-# Parent d548cc2d1cfea3241205efc347caec8ad78c21d4
-Microblaze support (again).
-
-diff -r d548cc2d1cfe gcc/config/microblaze/linux.h
---- a/gcc/config/microblaze/linux.h    Sun Jul 26 15:32:30 2015 -0400
-+++ b/gcc/config/microblaze/linux.h    Sun Jul 26 15:32:32 2015 -0400
-@@ -28,7 +28,22 @@
- #undef TLS_NEEDS_GOT
- #define TLS_NEEDS_GOT 1
- 
--#define DYNAMIC_LINKER "/lib/ld.so.1"
-+#if TARGET_BIG_ENDIAN_DEFAULT == 0 /* LE */
-+#define MUSL_DYNAMIC_LINKER_E "%{EB:;:el}"
-+#else
-+#define MUSL_DYNAMIC_LINKER_E "%{EL:el}"
-+#endif
-+
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-microblaze" MUSL_DYNAMIC_LINKER_E 
".so.1"
-+#define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
-+
-+#if DEFAULT_LIBC == LIBC_MUSL
-+#define DYNAMIC_LINKER MUSL_DYNAMIC_LINKER
-+#else
-+#define DYNAMIC_LINKER GLIBC_DYNAMIC_LINKER
-+#endif
-+
-+
- #undef  SUBTARGET_EXTRA_SPECS
- #define SUBTARGET_EXTRA_SPECS \
-   { "dynamic_linker", DYNAMIC_LINKER }

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/mips.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/mips.diff
deleted file mode 100644
index 9ccc516..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/mips.diff
+++ /dev/null
@@ -1,18 +0,0 @@
-# HG changeset patch
-# Parent 270d6afd029dd396b69553e1d96f35d2ebdd2f99
-Support for mips-linux-musl.
-
-diff -r 270d6afd029d gcc/config/mips/linux.h
---- a/gcc/config/mips/linux.h  Sun Jul 26 15:32:25 2015 -0400
-+++ b/gcc/config/mips/linux.h  Sun Jul 26 15:32:26 2015 -0400
-@@ -23,3 +23,10 @@
- #undef UCLIBC_DYNAMIC_LINKER
- #define UCLIBC_DYNAMIC_LINKER \
-   "%{mnan=2008:/lib/ld-uClibc-mipsn8.so.0;:/lib/ld-uClibc.so.0}"
-+
-+#if TARGET_ENDIAN_DEFAULT == 0 /* LE */
-+#define MUSL_DYNAMIC_LINKER_E "%{EB:;:el}"
-+#else
-+#define MUSL_DYNAMIC_LINKER_E "%{EL:el}"
-+#endif
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-mips" MUSL_DYNAMIC_LINKER_E 
"%{msoft-float:-sf}.so.1"

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/powerpc.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/powerpc.diff
deleted file mode 100644
index 92276e2..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/powerpc.diff
+++ /dev/null
@@ -1,108 +0,0 @@
-# HG changeset patch
-# Parent 3974ad9269f7e4c5605e0bb38db7418a69e6ee95
-Support for powerpc-linux-musl.
-
-diff -r 3974ad9269f7 gcc/config.gcc
---- a/gcc/config.gcc   Sun Jul 26 15:32:26 2015 -0400
-+++ b/gcc/config.gcc   Sun Jul 26 15:32:28 2015 -0400
-@@ -2344,6 +2344,10 @@
-           powerpc*-*-linux*paired*)
-               tm_file="${tm_file} rs6000/750cl.h" ;;
-       esac
-+        case ${target} in
-+            *-linux*-musl*)
-+                enable_secureplt=yes ;;
-+        esac
-       if test x${enable_secureplt} = xyes; then
-               tm_file="rs6000/secureplt.h ${tm_file}"
-       fi
-diff -r 3974ad9269f7 gcc/config/rs6000/linux64.h
---- a/gcc/config/rs6000/linux64.h      Sun Jul 26 15:32:26 2015 -0400
-+++ b/gcc/config/rs6000/linux64.h      Sun Jul 26 15:32:28 2015 -0400
-@@ -371,17 +371,21 @@
- #endif
- #define UCLIBC_DYNAMIC_LINKER32 "/lib/ld-uClibc.so.0"
- #define UCLIBC_DYNAMIC_LINKER64 "/lib/ld64-uClibc.so.0"
-+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-powerpc.so.1"
-+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-powerpc64.so.1"
- #if DEFAULT_LIBC == LIBC_UCLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{mmusl:" M ";:" U 
"}}"
- #elif DEFAULT_LIBC == LIBC_GLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:" U ";:" G "}"
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{muclibc:" U ";:%{mmusl:" M ";:" G 
"}}"
-+#elif DEFAULT_LIBC == LIBC_MUSL
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{muclibc:" U ";:" M 
"}}"
- #else
- #error "Unsupported DEFAULT_LIBC"
- #endif
- #define GNU_USER_DYNAMIC_LINKER32 \
--  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32)
-+  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER32, UCLIBC_DYNAMIC_LINKER32, 
MUSL_DYNAMIC_LINKER32)
- #define GNU_USER_DYNAMIC_LINKER64 \
--  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64)
-+  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER64, UCLIBC_DYNAMIC_LINKER64, 
MUSL_DYNAMIC_LINKER64)
- 
- #undef  DEFAULT_ASM_ENDIAN
- #if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN)
-diff -r 3974ad9269f7 gcc/config/rs6000/secureplt.h
---- a/gcc/config/rs6000/secureplt.h    Sun Jul 26 15:32:26 2015 -0400
-+++ b/gcc/config/rs6000/secureplt.h    Sun Jul 26 15:32:28 2015 -0400
-@@ -18,3 +18,4 @@
- <http://www.gnu.org/licenses/>.  */
- 
- #define CC1_SECURE_PLT_DEFAULT_SPEC "-msecure-plt"
-+#define LINK_SECURE_PLT_DEFAULT_SPEC "--secure-plt"
-diff -r 3974ad9269f7 gcc/config/rs6000/sysv4.h
---- a/gcc/config/rs6000/sysv4.h        Sun Jul 26 15:32:26 2015 -0400
-+++ b/gcc/config/rs6000/sysv4.h        Sun Jul 26 15:32:28 2015 -0400
-@@ -537,6 +537,9 @@
- #ifndef CC1_SECURE_PLT_DEFAULT_SPEC
- #define CC1_SECURE_PLT_DEFAULT_SPEC ""
- #endif
-+#ifndef LINK_SECURE_PLT_DEFAULT_SPEC
-+#define LINK_SECURE_PLT_DEFAULT_SPEC ""
-+#endif
- 
- /* Pass -G xxx to the compiler.  */
- #define       CC1_SPEC "%{G*} %(cc1_cpu)" \
-@@ -585,7 +588,8 @@
- 
- /* Override the default target of the linker.  */
- #define       LINK_TARGET_SPEC \
--  ENDIAN_SELECT("", " --oformat elf32-powerpcle", "")
-+  ENDIAN_SELECT("", " --oformat elf32-powerpcle", "") \
-+  "%{!mbss-plt: %{!msecure-plt: %(link_secure_plt_default)}}"
- 
- /* Any specific OS flags.  */
- #define LINK_OS_SPEC "\
-@@ -763,15 +767,18 @@
- 
- #define GLIBC_DYNAMIC_LINKER "/lib/ld.so.1"
- #define UCLIBC_DYNAMIC_LINKER "/lib/ld-uClibc.so.0"
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-powerpc.so.1"
- #if DEFAULT_LIBC == LIBC_UCLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U) "%{mglibc:" G ";:" U "}"
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{mmusl:" M ";:" U 
"}}"
-+#elif DEFAULT_LIBC == LIBC_MUSL
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{mglibc:" G ";:%{muclibc:" U ";:" M 
"}}"
- #elif !defined (DEFAULT_LIBC) || DEFAULT_LIBC == LIBC_GLIBC
--#define CHOOSE_DYNAMIC_LINKER(G, U) "%{muclibc:" U ";:" G "}"
-+#define CHOOSE_DYNAMIC_LINKER(G, U, M) "%{muclibc:" U ";:%{mmusl:" M ";:" G 
"}}"
- #else
- #error "Unsupported DEFAULT_LIBC"
- #endif
- #define GNU_USER_DYNAMIC_LINKER \
--  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER)
-+  CHOOSE_DYNAMIC_LINKER (GLIBC_DYNAMIC_LINKER, UCLIBC_DYNAMIC_LINKER, 
MUSL_DYNAMIC_LINKER)
- 
- #define LINK_OS_LINUX_SPEC "-m elf32ppclinux %{!shared: %{!static: \
-   %{rdynamic:-export-dynamic} \
-@@ -894,6 +901,7 @@
-   { "link_os_openbsd",                LINK_OS_OPENBSD_SPEC },                 
\
-   { "link_os_default",                LINK_OS_DEFAULT_SPEC },                 
\
-   { "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC },          \
-+  { "link_secure_plt_default",        LINK_SECURE_PLT_DEFAULT_SPEC },         
\
-   { "cpp_os_ads",             CPP_OS_ADS_SPEC },                      \
-   { "cpp_os_yellowknife",     CPP_OS_YELLOWKNIFE_SPEC },              \
-   { "cpp_os_mvme",            CPP_OS_MVME_SPEC },                     \

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/sh.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/sh.diff
deleted file mode 100644
index f7be443..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/sh.diff
+++ /dev/null
@@ -1,18 +0,0 @@
-diff -r c5b39ce7672b gcc/config/sh/linux.h
---- a/gcc/config/sh/linux.h    Fri Sep 28 16:32:03 2012 +1000
-+++ b/gcc/config/sh/linux.h    Sun Jul 26 15:32:36 2015 -0400
-@@ -43,7 +43,14 @@
- 
- #define TARGET_ASM_FILE_END file_end_indicate_exec_stack
- 
-+#if TARGET_BIG_ENDIAN_DEFAULT /* BE */
-+#define MUSL_DYNAMIC_LINKER_E "eb"
-+#else
-+#define MUSL_DYNAMIC_LINKER_E
-+#endif
-+
- #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-sh" MUSL_DYNAMIC_LINKER_E ".so.1"
- 
- #undef SUBTARGET_LINK_EMUL_SUFFIX
- #define SUBTARGET_LINK_EMUL_SUFFIX "_linux"

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/unwind-dliterate.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/unwind-dliterate.diff
deleted file mode 100644
index 2add290..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/unwind-dliterate.diff
+++ /dev/null
@@ -1,43 +0,0 @@
-diff -r ddc4b4034e51 libgcc/unwind-dw2-fde-dip.c
---- a/libgcc/unwind-dw2-fde-dip.c      Sun Jul 26 15:32:13 2015 -0400
-+++ b/libgcc/unwind-dw2-fde-dip.c      Sun Jul 26 15:32:15 2015 -0400
-@@ -46,33 +46,13 @@
- #include "unwind-compat.h"
- #include "gthr.h"
- 
--#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
--    && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
--      || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG)))
-+#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) && 
defined(TARGET_DL_ITERATE_PHDR)
- # define USE_PT_GNU_EH_FRAME
--#endif
--
--#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
--    && defined(__BIONIC__)
--# define USE_PT_GNU_EH_FRAME
--#endif
--
--#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
--    && defined(__FreeBSD__) && __FreeBSD__ >= 7
--# define ElfW __ElfN
--# define USE_PT_GNU_EH_FRAME
--#endif
--
--#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
--    && defined(__OpenBSD__)
--# define ElfW(type) Elf_##type
--# define USE_PT_GNU_EH_FRAME
--#endif
--
--#if !defined(inhibit_libc) && defined(HAVE_LD_EH_FRAME_HDR) \
--    && defined(TARGET_DL_ITERATE_PHDR) \
--    && defined(__sun__) && defined(__svr4__)
--# define USE_PT_GNU_EH_FRAME
-+# ifdef __OpenBSD__
-+#  define ElfW(type) Elf_##type
-+# elif defined(__FreeBSD__) && __FreeBSD__ >= 7
-+#  define ElfW __ElfN
-+# endif
- #endif
- 
- #if defined(USE_PT_GNU_EH_FRAME)

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/vis_hide.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/vis_hide.diff
deleted file mode 100644
index 16df34a..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/vis_hide.diff
+++ /dev/null
@@ -1,15 +0,0 @@
-Fix hidden visibility of libgcc.a symbols when building gcc stage 2 with
- --disable-shared, as per musl ml:
-http://www.openwall.com/lists/musl/2014/01/12/4
-
-diff -Naur gcc-4.7.3.orig/libgcc/Makefile.in gcc-4.7.3/libgcc/Makefile.in
---- gcc-4.7.3.orig/libgcc/Makefile.in  2012-12-04 14:09:59.000000000 -0500
-+++ gcc-4.7.3/libgcc/Makefile.in       2014-02-27 08:33:31.537611370 -0500
-@@ -388,7 +388,7 @@
- else
- # Not enable_shared.
- iterator = $(srcdir)/empty.mk $(patsubst 
%,$(srcdir)/static-object.mk,$(iter-items))
--vis_hide =
-+vis_hide = @vis_hide@
- gen-hide-list = echo > \$@
- endif

diff --git a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/x86.diff 
b/sys-devel/gcc/files/musl-gcc-patches-4.9.3/x86.diff
deleted file mode 100644
index f62f27e..0000000
--- a/sys-devel/gcc/files/musl-gcc-patches-4.9.3/x86.diff
+++ /dev/null
@@ -1,55 +0,0 @@
-# HG changeset patch
-# Parent ab9383ed51ae0c261e0c860fc6b953eb57976eef
-Support for i386-linux-musl and x86_64-linux-musl.
-
-diff -r ab9383ed51ae gcc/config/i386/linux.h
---- a/gcc/config/i386/linux.h  Sun Jul 26 15:32:21 2015 -0400
-+++ b/gcc/config/i386/linux.h  Sun Jul 26 15:32:23 2015 -0400
-@@ -21,3 +21,4 @@
- 
- #define GNU_USER_LINK_EMULATION "elf_i386"
- #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"
-+#define MUSL_DYNAMIC_LINKER "/lib/ld-musl-i386.so.1"
-diff -r ab9383ed51ae gcc/config/i386/linux64.h
---- a/gcc/config/i386/linux64.h        Sun Jul 26 15:32:21 2015 -0400
-+++ b/gcc/config/i386/linux64.h        Sun Jul 26 15:32:23 2015 -0400
-@@ -30,3 +30,7 @@
- #define GLIBC_DYNAMIC_LINKER32 "/lib/ld-linux.so.2"
- #define GLIBC_DYNAMIC_LINKER64 "/lib64/ld-linux-x86-64.so.2"
- #define GLIBC_DYNAMIC_LINKERX32 "/libx32/ld-linux-x32.so.2"
-+
-+#define MUSL_DYNAMIC_LINKER32 "/lib/ld-musl-i386.so.1"
-+#define MUSL_DYNAMIC_LINKER64 "/lib/ld-musl-x86_64.so.1"
-+#define MUSL_DYNAMIC_LINKERX32 "/lib/ld-musl-x32.so.1"
-diff -r ab9383ed51ae libitm/config/linux/x86/tls.h
---- a/libitm/config/linux/x86/tls.h    Sun Jul 26 15:32:21 2015 -0400
-+++ b/libitm/config/linux/x86/tls.h    Sun Jul 26 15:32:23 2015 -0400
-@@ -25,16 +25,19 @@
- #ifndef LIBITM_X86_TLS_H
- #define LIBITM_X86_TLS_H 1
- 
--#if defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 10)
-+#if defined(__GLIBC_PREREQ)
-+#if __GLIBC_PREREQ(2, 10)
- /* Use slots in the TCB head rather than __thread lookups.
-    GLIBC has reserved words 10 through 13 for TM.  */
- #define HAVE_ARCH_GTM_THREAD 1
- #define HAVE_ARCH_GTM_THREAD_DISP 1
- #endif
-+#endif
- 
- #include "config/generic/tls.h"
- 
--#if defined(__GLIBC_PREREQ) && __GLIBC_PREREQ(2, 10)
-+#if defined(__GLIBC_PREREQ)
-+#if __GLIBC_PREREQ(2, 10)
- namespace GTM HIDDEN {
- 
- #ifdef __x86_64__
-@@ -101,5 +104,6 @@
- 
- } // namespace GTM
- #endif /* >= GLIBC 2.10 */
-+#endif
- 
- #endif // LIBITM_X86_TLS_H

diff --git a/sys-devel/gcc/files/spectre-0001-mindirect-branch.patch 
b/sys-devel/gcc/files/spectre-0001-mindirect-branch.patch
deleted file mode 100644
index c0267fa..0000000
--- a/sys-devel/gcc/files/spectre-0001-mindirect-branch.patch
+++ /dev/null
@@ -1,1084 +0,0 @@
-From c6b72be421ded17e0c156070ba6e90aa6c335ed6 Mon Sep 17 00:00:00 2001
-From: hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
-Date: Tue, 16 Jan 2018 10:59:42 +0000
-Subject: [PATCH] x86: Add -mindirect-branch=
-
-Add -mindirect-branch= option to convert indirect call and jump to call
-and return thunks.  The default is 'keep', which keeps indirect call and
-jump unmodified.  'thunk' converts indirect call and jump to call and
-return thunk.  'thunk-inline' converts indirect call and jump to inlined
-call and return thunk.  'thunk-extern' converts indirect call and jump 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 indirect_branch.
-
-2 kinds of thunks are geneated.  Memory thunk where the function address
-is at the top of the stack:
-
-__x86_indirect_thunk:
-       call L2
-L1:
-       pause
-       lfence
-       jmp L1
-L2:
-       lea 8(%rsp), %rsp|lea 4(%esp), %esp
-       ret
-
-Indirect jmp via memory, "jmp mem", is converted to
-
-       push memory
-       jmp __x86_indirect_thunk
-
-Indirect call via memory, "call mem", is converted to
-
-       jmp L2
-L1:
-       push [mem]
-       jmp __x86_indirect_thunk
-L2:
-       call L1
-
-Register thunk where the function address is in a register, reg:
-
-__x86_indirect_thunk_reg:
-       call    L2
-L1:
-       pause
-       lfence
-       jmp     L1
-L2:
-       movq    %reg, (%rsp)|movl    %reg, (%esp)
-       ret
-
-where reg is one of (r|e)ax, (r|e)dx, (r|e)cx, (r|e)bx, (r|e)si, (r|e)di,
-(r|e)bp, r8, r9, r10, r11, r12, r13, r14 and r15.
-
-Indirect jmp via register, "jmp reg", is converted to
-
-       jmp __x86_indirect_thunk_reg
-
-Indirect call via register, "call reg", is converted to
-
-       call __x86_indirect_thunk_reg
-
-gcc/
-
-       Backport from mainline
-       * config/i386/i386-opts.h (indirect_branch): New.
-       * config/i386/i386-protos.h (ix86_output_indirect_jmp): Likewise.
-       * config/i386/i386.c (ix86_using_red_zone): Disallow red-zone
-       with local indirect jump when converting indirect call and jump.
-       (ix86_set_indirect_branch_type): New.
-       (ix86_set_current_function): Call ix86_set_indirect_branch_type.
-       (indirectlabelno): New.
-       (indirect_thunk_needed): Likewise.
-       (indirect_thunk_bnd_needed): Likewise.
-       (indirect_thunks_used): Likewise.
-       (indirect_thunks_bnd_used): Likewise.
-       (INDIRECT_LABEL): Likewise.
-       (indirect_thunk_name): Likewise.
-       (output_indirect_thunk): Likewise.
-       (output_indirect_thunk_function): Likewise.
-       (ix86_output_indirect_branch_via_reg): Likewise.
-       (ix86_output_indirect_branch_via_push): Likewise.
-       (ix86_output_indirect_branch): Likewise.
-       (ix86_output_indirect_jmp): Likewise.
-       (ix86_code_end): Call output_indirect_thunk_function if needed.
-       (ix86_output_call_insn): Call ix86_output_indirect_branch if
-       needed.
-       (ix86_handle_fndecl_attribute): Handle indirect_branch.
-       (ix86_attribute_table): Add indirect_branch.
-       * config/i386/i386.h (machine_function): Add indirect_branch_type
-       and has_local_indirect_jump.
-       * config/i386/i386.md (indirect_jump): Set has_local_indirect_jump
-       to true.
-       (tablejump): Likewise.
-       (*indirect_jump): Use ix86_output_indirect_jmp.
-       (*tablejump_1): Likewise.
-       (simple_return_indirect_internal): Likewise.
-       * config/i386/i386.opt (mindirect-branch=): New option.
-       (indirect_branch): New.
-       (keep): Likewise.
-       (thunk): Likewise.
-       (thunk-inline): Likewise.
-       (thunk-extern): Likewise.
-       * doc/extend.texi: Document indirect_branch function attribute.
-       * doc/invoke.texi: Document -mindirect-branch= option.
-
-git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256732 
138bc75d-0d04-0410-961f-82ee72b054a4
----
- gcc/config/i386/i386-opts.h                        |  13 +
- gcc/config/i386/i386-protos.h                      |   1 +
- gcc/config/i386/i386.c                             | 648 ++++++++++++++++++++-
- gcc/config/i386/i386.h                             |   7 +
- gcc/config/i386/i386.md                            |  26 +-
- gcc/config/i386/i386.opt                           |  20 +
- gcc/doc/extend.texi                                |  10 +
- gcc/doc/invoke.texi                                |  14 +-
- 43 files changed, 1575 insertions(+), 19 deletions(-)
-
-diff --git a/gcc/config/i386/i386-opts.h b/gcc/config/i386/i386-opts.h
-index 542cd0f..efcdc3b 100644
---- a/gcc/config/i386/i386-opts.h
-+++ b/gcc/config/i386/i386-opts.h
-@@ -99,4 +99,17 @@ enum stack_protector_guard {
-   SSP_GLOBAL    /* global canary */
- };
- 
-+/* This is used to mitigate variant #2 of the speculative execution
-+   vulnerabilities on x86 processors identified by CVE-2017-5715, aka
-+   Spectre.  They convert indirect branches and function returns to
-+   call and return thunks to avoid speculative execution via indirect
-+   call, jmp and ret.  */
-+enum indirect_branch {
-+  indirect_branch_unset = 0,
-+  indirect_branch_keep,
-+  indirect_branch_thunk,
-+  indirect_branch_thunk_inline,
-+  indirect_branch_thunk_extern
-+};
-+
- #endif
-diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h
-index d2cccf1..bcdd987 100644
---- a/gcc/config/i386/i386-protos.h
-+++ b/gcc/config/i386/i386-protos.h
-@@ -313,6 +313,7 @@ extern enum attr_cpu ix86_schedule;
- #endif
- 
- extern const char * ix86_output_call_insn (rtx_insn *insn, rtx call_op);
-+extern const char * ix86_output_indirect_jmp (rtx call_op, bool ret_p);
- extern bool ix86_operands_ok_for_move_multiple (rtx *operands, bool load,
-                                               enum machine_mode mode);
- 
-diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
-index 1786640..7e779c1 100644
---- a/gcc/config/i386/i386.c
-+++ b/gcc/config/i386/i386.c
-@@ -4212,12 +4212,23 @@ make_pass_stv (gcc::context *ctxt)
-   return new pass_stv (ctxt);
- }
- 
--/* Return true if a red-zone is in use.  */
-+/* Return true if a red-zone is in use.  We can't use red-zone when
-+   there are local indirect jumps, like "indirect_jump" or "tablejump",
-+   which jumps to another place in the function, since "call" in the
-+   indirect thunk pushes the return address onto stack, destroying
-+   red-zone.
-+
-+   TODO: If we can reserve the first 2 WORDs, for PUSH and, another
-+   for CALL, in red-zone, we can allow local indirect jumps with
-+   indirect thunk.  */
- 
- bool
- ix86_using_red_zone (void)
- {
--  return TARGET_RED_ZONE && !TARGET_64BIT_MS_ABI;
-+  return (TARGET_RED_ZONE
-+        && !TARGET_64BIT_MS_ABI
-+        && (!cfun->machine->has_local_indirect_jump
-+            || cfun->machine->indirect_branch_type == indirect_branch_keep));
- }
- 
- /* Return a string that documents the current -m options.  The caller is
-@@ -7148,6 +7159,37 @@ ix86_set_func_type (tree fndecl)
-     }
- }
- 
-+/* Set the indirect_branch_type field from the function FNDECL.  */
-+
-+static void
-+ix86_set_indirect_branch_type (tree fndecl)
-+{
-+  if (cfun->machine->indirect_branch_type == indirect_branch_unset)
-+    {
-+      tree attr = lookup_attribute ("indirect_branch",
-+                                  DECL_ATTRIBUTES (fndecl));
-+      if (attr != NULL)
-+      {
-+        tree args = TREE_VALUE (attr);
-+        if (args == NULL)
-+          gcc_unreachable ();
-+        tree cst = TREE_VALUE (args);
-+        if (strcmp (TREE_STRING_POINTER (cst), "keep") == 0)
-+          cfun->machine->indirect_branch_type = indirect_branch_keep;
-+        else if (strcmp (TREE_STRING_POINTER (cst), "thunk") == 0)
-+          cfun->machine->indirect_branch_type = indirect_branch_thunk;
-+        else if (strcmp (TREE_STRING_POINTER (cst), "thunk-inline") == 0)
-+          cfun->machine->indirect_branch_type = indirect_branch_thunk_inline;
-+        else if (strcmp (TREE_STRING_POINTER (cst), "thunk-extern") == 0)
-+          cfun->machine->indirect_branch_type = indirect_branch_thunk_extern;
-+        else
-+          gcc_unreachable ();
-+      }
-+      else
-+      cfun->machine->indirect_branch_type = ix86_indirect_branch;
-+    }
-+}
-+
- /* Establish appropriate back-end context for processing the function
-    FNDECL.  The argument might be NULL to indicate processing at top
-    level, outside of any function scope.  */
-@@ -7163,7 +7205,10 @@ ix86_set_current_function (tree fndecl)
-        one is extern inline and one isn't.  Call ix86_set_func_type
-        to set the func_type field.  */
-       if (fndecl != NULL_TREE)
--      ix86_set_func_type (fndecl);
-+      {
-+        ix86_set_func_type (fndecl);
-+        ix86_set_indirect_branch_type (fndecl);
-+      }
-       return;
-     }
- 
-@@ -7183,6 +7228,7 @@ ix86_set_current_function (tree fndecl)
-     }
- 
-   ix86_set_func_type (fndecl);
-+  ix86_set_indirect_branch_type (fndecl);
- 
-   tree new_tree = DECL_FUNCTION_SPECIFIC_TARGET (fndecl);
-   if (new_tree == NULL_TREE)
-@@ -11930,6 +11976,220 @@ ix86_setup_frame_addresses (void)
- # endif
- #endif
- 
-+/* Label count for call and return thunks.  It is used to make unique
-+   labels in call and return thunks.  */
-+static int indirectlabelno;
-+
-+/* True if call and return thunk functions are needed.  */
-+static bool indirect_thunk_needed = false;
-+/* True if call and return thunk functions with the BND prefix are
-+   needed.  */
-+static bool indirect_thunk_bnd_needed = false;
-+
-+/* Bit masks of integer registers, which contain branch target, used
-+   by call and return thunks functions.  */
-+static int indirect_thunks_used;
-+/* Bit masks of integer registers, which contain branch target, used
-+   by call and return thunks functions with the BND prefix.  */
-+static int indirect_thunks_bnd_used;
-+
-+#ifndef INDIRECT_LABEL
-+# define INDIRECT_LABEL "LIND"
-+#endif
-+
-+/* Fills in the label name that should be used for the indirect thunk.  */
-+
-+static void
-+indirect_thunk_name (char name[32], int regno, bool need_bnd_p)
-+{
-+  if (USE_HIDDEN_LINKONCE)
-+    {
-+      const char *bnd = need_bnd_p ? "_bnd" : "";
-+      if (regno >= 0)
-+      {
-+        const char *reg_prefix;
-+        if (LEGACY_INT_REGNO_P (regno))
-+          reg_prefix = TARGET_64BIT ? "r" : "e";
-+        else
-+          reg_prefix = "";
-+        sprintf (name, "__x86_indirect_thunk%s_%s%s",
-+                 bnd, reg_prefix, reg_names[regno]);
-+      }
-+      else
-+      sprintf (name, "__x86_indirect_thunk%s", bnd);
-+    }
-+  else
-+    {
-+      if (regno >= 0)
-+      {
-+        if (need_bnd_p)
-+          ASM_GENERATE_INTERNAL_LABEL (name, "LITBR", regno);
-+        else
-+          ASM_GENERATE_INTERNAL_LABEL (name, "LITR", regno);
-+      }
-+      else
-+      {
-+        if (need_bnd_p)
-+          ASM_GENERATE_INTERNAL_LABEL (name, "LITB", 0);
-+        else
-+          ASM_GENERATE_INTERNAL_LABEL (name, "LIT", 0);
-+      }
-+    }
-+}
-+
-+/* Output a call and return thunk for indirect branch.  If BND_P is
-+   true, the BND prefix is needed.   If REGNO != -1,  the function
-+   address is in REGNO and the call and return thunk looks like:
-+
-+      call    L2
-+   L1:
-+      pause
-+      jmp     L1
-+   L2:
-+      mov     %REG, (%sp)
-+      ret
-+
-+   Otherwise, the function address is on the top of stack and the
-+   call and return thunk looks like:
-+
-+      call L2
-+  L1:
-+      pause
-+      jmp L1
-+  L2:
-+      lea WORD_SIZE(%sp), %sp
-+      ret
-+ */
-+
-+static void
-+output_indirect_thunk (bool need_bnd_p, int regno)
-+{
-+  char indirectlabel1[32];
-+  char indirectlabel2[32];
-+
-+  ASM_GENERATE_INTERNAL_LABEL (indirectlabel1, INDIRECT_LABEL,
-+                             indirectlabelno++);
-+  ASM_GENERATE_INTERNAL_LABEL (indirectlabel2, INDIRECT_LABEL,
-+                             indirectlabelno++);
-+
-+  /* Call */
-+  if (need_bnd_p)
-+    fputs ("\tbnd call\t", asm_out_file);
-+  else
-+    fputs ("\tcall\t", asm_out_file);
-+  assemble_name_raw (asm_out_file, indirectlabel2);
-+  fputc ('\n', asm_out_file);
-+
-+  ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1);
-+
-+  /* Pause + lfence.  */
-+  fprintf (asm_out_file, "\tpause\n\tlfence\n");
-+
-+  /* Jump.  */
-+  fputs ("\tjmp\t", asm_out_file);
-+  assemble_name_raw (asm_out_file, indirectlabel1);
-+  fputc ('\n', asm_out_file);
-+
-+  ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2);
-+
-+  if (regno >= 0)
-+    {
-+      /* MOV.  */
-+      rtx xops[2];
-+      xops[0] = gen_rtx_MEM (word_mode, stack_pointer_rtx);
-+      xops[1] = gen_rtx_REG (word_mode, regno);
-+      output_asm_insn ("mov\t{%1, %0|%0, %1}", xops);
-+    }
-+  else
-+    {
-+      /* LEA.  */
-+      rtx xops[2];
-+      xops[0] = stack_pointer_rtx;
-+      xops[1] = plus_constant (Pmode, stack_pointer_rtx, UNITS_PER_WORD);
-+      output_asm_insn ("lea\t{%E1, %0|%0, %E1}", xops);
-+    }
-+
-+  if (need_bnd_p)
-+    fputs ("\tbnd ret\n", asm_out_file);
-+  else
-+    fputs ("\tret\n", asm_out_file);
-+}
-+
-+/* Output a funtion with a call and return thunk for indirect branch.
-+   If BND_P is true, the BND prefix is needed.   If REGNO != -1,  the
-+   function address is in REGNO.  Otherwise, the function address is
-+   on the top of stack.  */
-+
-+static void
-+output_indirect_thunk_function (bool need_bnd_p, int regno)
-+{
-+  char name[32];
-+  tree decl;
-+
-+  /* Create __x86_indirect_thunk/__x86_indirect_thunk_bnd.  */
-+  indirect_thunk_name (name, regno, need_bnd_p);
-+  decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL,
-+                   get_identifier (name),
-+                   build_function_type_list (void_type_node, NULL_TREE));
-+  DECL_RESULT (decl) = build_decl (BUILTINS_LOCATION, RESULT_DECL,
-+                                 NULL_TREE, void_type_node);
-+  TREE_PUBLIC (decl) = 1;
-+  TREE_STATIC (decl) = 1;
-+  DECL_IGNORED_P (decl) = 1;
-+
-+#if TARGET_MACHO
-+  if (TARGET_MACHO)
-+    {
-+      switch_to_section (darwin_sections[picbase_thunk_section]);
-+      fputs ("\t.weak_definition\t", asm_out_file);
-+      assemble_name (asm_out_file, name);
-+      fputs ("\n\t.private_extern\t", asm_out_file);
-+      assemble_name (asm_out_file, name);
-+      putc ('\n', asm_out_file);
-+      ASM_OUTPUT_LABEL (asm_out_file, name);
-+      DECL_WEAK (decl) = 1;
-+    }
-+  else
-+#endif
-+    if (USE_HIDDEN_LINKONCE)
-+      {
-+      cgraph_node::create (decl)->set_comdat_group (DECL_ASSEMBLER_NAME 
(decl));
-+
-+      targetm.asm_out.unique_section (decl, 0);
-+      switch_to_section (get_named_section (decl, NULL, 0));
-+
-+      targetm.asm_out.globalize_label (asm_out_file, name);
-+      fputs ("\t.hidden\t", asm_out_file);
-+      assemble_name (asm_out_file, name);
-+      putc ('\n', asm_out_file);
-+      ASM_DECLARE_FUNCTION_NAME (asm_out_file, name, decl);
-+      }
-+    else
-+      {
-+      switch_to_section (text_section);
-+      ASM_OUTPUT_LABEL (asm_out_file, name);
-+      }
-+
-+  DECL_INITIAL (decl) = make_node (BLOCK);
-+  current_function_decl = decl;
-+  allocate_struct_function (decl, false);
-+  init_function_start (decl);
-+  /* We're about to hide the function body from callees of final_* by
-+     emitting it directly; tell them we're a thunk, if they care.  */
-+  cfun->is_thunk = true;
-+  first_function_block_is_cold = false;
-+  /* Make sure unwind info is emitted for the thunk if needed.  */
-+  final_start_function (emit_barrier (), asm_out_file, 1);
-+
-+  output_indirect_thunk (need_bnd_p, regno);
-+
-+  final_end_function ();
-+  init_insn_lengths ();
-+  free_after_compilation (cfun);
-+  set_cfun (NULL);
-+  current_function_decl = NULL;
-+}
-+
- static int pic_labels_used;
- 
- /* Fills in the label name that should be used for a pc thunk for
-@@ -11956,11 +12216,32 @@ ix86_code_end (void)
-   rtx xops[2];
-   int regno;
- 
-+  if (indirect_thunk_needed)
-+    output_indirect_thunk_function (false, -1);
-+  if (indirect_thunk_bnd_needed)
-+    output_indirect_thunk_function (true, -1);
-+
-+  for (regno = FIRST_REX_INT_REG; regno <= LAST_REX_INT_REG; regno++)
-+    {
-+      int i = regno - FIRST_REX_INT_REG + LAST_INT_REG + 1;
-+      if ((indirect_thunks_used & (1 << i)))
-+      output_indirect_thunk_function (false, regno);
-+
-+      if ((indirect_thunks_bnd_used & (1 << i)))
-+      output_indirect_thunk_function (true, regno);
-+    }
-+
-   for (regno = AX_REG; regno <= SP_REG; regno++)
-     {
-       char name[32];
-       tree decl;
- 
-+      if ((indirect_thunks_used & (1 << regno)))
-+      output_indirect_thunk_function (false, regno);
-+
-+      if ((indirect_thunks_bnd_used & (1 << regno)))
-+      output_indirect_thunk_function (true, regno);
-+
-       if (!(pic_labels_used & (1 << regno)))
-       continue;
- 
-@@ -28461,12 +28742,292 @@ ix86_nopic_noplt_attribute_p (rtx call_op)
-   return false;
- }
- 
-+/* Output indirect branch via a call and return thunk.  CALL_OP is a
-+   register which contains the branch target.  XASM is the assembly
-+   template for CALL_OP.  Branch is a tail call if SIBCALL_P is true.
-+   A normal call is converted to:
-+
-+      call __x86_indirect_thunk_reg
-+
-+   and a tail call is converted to:
-+
-+      jmp __x86_indirect_thunk_reg
-+ */
-+
-+static void
-+ix86_output_indirect_branch_via_reg (rtx call_op, bool sibcall_p)
-+{
-+  char thunk_name_buf[32];
-+  char *thunk_name;
-+  bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn);
-+  int regno = REGNO (call_op);
-+
-+  if (cfun->machine->indirect_branch_type
-+      != indirect_branch_thunk_inline)
-+    {
-+      if (cfun->machine->indirect_branch_type == indirect_branch_thunk)
-+      {
-+        int i = regno;
-+        if (i >= FIRST_REX_INT_REG)
-+          i -= (FIRST_REX_INT_REG - LAST_INT_REG - 1);
-+        if (need_bnd_p)
-+          indirect_thunks_bnd_used |= 1 << i;
-+        else
-+          indirect_thunks_used |= 1 << i;
-+      }
-+      indirect_thunk_name (thunk_name_buf, regno, need_bnd_p);
-+      thunk_name = thunk_name_buf;
-+    }
-+  else
-+    thunk_name = NULL;
-+
-+  if (sibcall_p)
-+    {
-+      if (thunk_name != NULL)
-+      {
-+        if (need_bnd_p)
-+          fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name);
-+        else
-+          fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name);
-+      }
-+      else
-+      output_indirect_thunk (need_bnd_p, regno);
-+    }
-+  else
-+    {
-+      if (thunk_name != NULL)
-+      {
-+        if (need_bnd_p)
-+          fprintf (asm_out_file, "\tbnd call\t%s\n", thunk_name);
-+        else
-+          fprintf (asm_out_file, "\tcall\t%s\n", thunk_name);
-+        return;
-+      }
-+
-+      char indirectlabel1[32];
-+      char indirectlabel2[32];
-+
-+      ASM_GENERATE_INTERNAL_LABEL (indirectlabel1,
-+                                 INDIRECT_LABEL,
-+                                 indirectlabelno++);
-+      ASM_GENERATE_INTERNAL_LABEL (indirectlabel2,
-+                                 INDIRECT_LABEL,
-+                                 indirectlabelno++);
-+
-+      /* Jump.  */
-+      if (need_bnd_p)
-+      fputs ("\tbnd jmp\t", asm_out_file);
-+      else
-+      fputs ("\tjmp\t", asm_out_file);
-+      assemble_name_raw (asm_out_file, indirectlabel2);
-+      fputc ('\n', asm_out_file);
-+
-+      ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1);
-+
-+      if (thunk_name != NULL)
-+      {
-+        if (need_bnd_p)
-+          fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name);
-+        else
-+          fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name);
-+      }
-+      else
-+      output_indirect_thunk (need_bnd_p, regno);
-+
-+      ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2);
-+
-+      /* Call.  */
-+      if (need_bnd_p)
-+      fputs ("\tbnd call\t", asm_out_file);
-+      else
-+      fputs ("\tcall\t", asm_out_file);
-+      assemble_name_raw (asm_out_file, indirectlabel1);
-+      fputc ('\n', asm_out_file);
-+    }
-+}
-+
-+/* Output indirect branch via a call and return thunk.  CALL_OP is
-+   the branch target.  XASM is the assembly template for CALL_OP.
-+   Branch is a tail call if SIBCALL_P is true.  A normal call is
-+   converted to:
-+
-+      jmp L2
-+   L1:
-+      push CALL_OP
-+      jmp __x86_indirect_thunk
-+   L2:
-+      call L1
-+
-+   and a tail call is converted to:
-+
-+      push CALL_OP
-+      jmp __x86_indirect_thunk
-+ */
-+
-+static void
-+ix86_output_indirect_branch_via_push (rtx call_op, const char *xasm,
-+                                    bool sibcall_p)
-+{
-+  char thunk_name_buf[32];
-+  char *thunk_name;
-+  char push_buf[64];
-+  bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn);
-+  int regno = -1;
-+
-+  if (cfun->machine->indirect_branch_type
-+      != indirect_branch_thunk_inline)
-+    {
-+      if (cfun->machine->indirect_branch_type == indirect_branch_thunk)
-+      {
-+        if (need_bnd_p)
-+          indirect_thunk_bnd_needed = true;
-+        else
-+          indirect_thunk_needed = true;
-+      }
-+      indirect_thunk_name (thunk_name_buf, regno, need_bnd_p);
-+      thunk_name = thunk_name_buf;
-+    }
-+  else
-+    thunk_name = NULL;
-+
-+  snprintf (push_buf, sizeof (push_buf), "push{%c}\t%s",
-+          TARGET_64BIT ? 'q' : 'l', xasm);
-+
-+  if (sibcall_p)
-+    {
-+      output_asm_insn (push_buf, &call_op);
-+      if (thunk_name != NULL)
-+      {
-+        if (need_bnd_p)
-+          fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name);
-+        else
-+          fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name);
-+      }
-+      else
-+      output_indirect_thunk (need_bnd_p, regno);
-+    }
-+  else
-+    {
-+      char indirectlabel1[32];
-+      char indirectlabel2[32];
-+
-+      ASM_GENERATE_INTERNAL_LABEL (indirectlabel1,
-+                                 INDIRECT_LABEL,
-+                                 indirectlabelno++);
-+      ASM_GENERATE_INTERNAL_LABEL (indirectlabel2,
-+                                 INDIRECT_LABEL,
-+                                 indirectlabelno++);
-+
-+      /* Jump.  */
-+      if (need_bnd_p)
-+      fputs ("\tbnd jmp\t", asm_out_file);
-+      else
-+      fputs ("\tjmp\t", asm_out_file);
-+      assemble_name_raw (asm_out_file, indirectlabel2);
-+      fputc ('\n', asm_out_file);
-+
-+      ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel1);
-+
-+      /* An external function may be called via GOT, instead of PLT.  */
-+      if (MEM_P (call_op))
-+      {
-+        struct ix86_address parts;
-+        rtx addr = XEXP (call_op, 0);
-+        if (ix86_decompose_address (addr, &parts)
-+            && parts.base == stack_pointer_rtx)
-+          {
-+            /* Since call will adjust stack by -UNITS_PER_WORD,
-+               we must convert "disp(stack, index, scale)" to
-+               "disp+UNITS_PER_WORD(stack, index, scale)".  */
-+            if (parts.index)
-+              {
-+                addr = gen_rtx_MULT (Pmode, parts.index,
-+                                     GEN_INT (parts.scale));
-+                addr = gen_rtx_PLUS (Pmode, stack_pointer_rtx,
-+                                     addr);
-+              }
-+            else
-+              addr = stack_pointer_rtx;
-+
-+            rtx disp;
-+            if (parts.disp != NULL_RTX)
-+              disp = plus_constant (Pmode, parts.disp,
-+                                    UNITS_PER_WORD);
-+            else
-+              disp = GEN_INT (UNITS_PER_WORD);
-+
-+            addr = gen_rtx_PLUS (Pmode, addr, disp);
-+            call_op = gen_rtx_MEM (GET_MODE (call_op), addr);
-+          }
-+      }
-+
-+      output_asm_insn (push_buf, &call_op);
-+
-+      if (thunk_name != NULL)
-+      {
-+        if (need_bnd_p)
-+          fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name);
-+        else
-+          fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name);
-+      }
-+      else
-+      output_indirect_thunk (need_bnd_p, regno);
-+
-+      ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, indirectlabel2);
-+
-+      /* Call.  */
-+      if (need_bnd_p)
-+      fputs ("\tbnd call\t", asm_out_file);
-+      else
-+      fputs ("\tcall\t", asm_out_file);
-+      assemble_name_raw (asm_out_file, indirectlabel1);
-+      fputc ('\n', asm_out_file);
-+    }
-+}
-+
-+/* Output indirect branch via a call and return thunk.  CALL_OP is
-+   the branch target.  XASM is the assembly template for CALL_OP.
-+   Branch is a tail call if SIBCALL_P is true.   */
-+
-+static void
-+ix86_output_indirect_branch (rtx call_op, const char *xasm,
-+                           bool sibcall_p)
-+{
-+  if (REG_P (call_op))
-+    ix86_output_indirect_branch_via_reg (call_op, sibcall_p);
-+  else
-+    ix86_output_indirect_branch_via_push (call_op, xasm, sibcall_p);
-+}
-+/* Output indirect jump.  CALL_OP is the jump target.  Jump is a
-+   function return if RET_P is true.  */
-+
-+const char *
-+ix86_output_indirect_jmp (rtx call_op, bool ret_p)
-+{
-+  if (cfun->machine->indirect_branch_type != indirect_branch_keep)
-+    {
-+      /* We can't have red-zone if this isn't a function return since
-+       "call" in the indirect thunk pushes the return address onto
-+       stack, destroying red-zone.  */
-+      if (!ret_p && ix86_red_zone_size != 0)
-+      gcc_unreachable ();
-+
-+      ix86_output_indirect_branch (call_op, "%0", true);
-+      return "";
-+    }
-+  else
-+    return "%!jmp\t%A0";
-+}
-+
- /* Output the assembly for a call instruction.  */
- 
- const char *
- ix86_output_call_insn (rtx_insn *insn, rtx call_op)
- {
-   bool direct_p = constant_call_address_operand (call_op, VOIDmode);
-+  bool output_indirect_p
-+    = (!TARGET_SEH
-+       && cfun->machine->indirect_branch_type != indirect_branch_keep);
-   bool seh_nop_p = false;
-   const char *xasm;
- 
-@@ -28476,10 +29037,21 @@ ix86_output_call_insn (rtx_insn *insn, rtx call_op)
-       {
-         if (ix86_nopic_noplt_attribute_p (call_op))
-           {
-+            direct_p = false;
-             if (TARGET_64BIT)
--              xasm = "%!jmp\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR 
%p0@GOTPCREL[rip]]}";
-+              {
-+                if (output_indirect_p)
-+                  xasm = "{%p0@GOTPCREL(%%rip)|[QWORD PTR 
%p0@GOTPCREL[rip]]}";
-+                else
-+                  xasm = "%!jmp\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR 
%p0@GOTPCREL[rip]]}";
-+              }
-             else
--              xasm = "%!jmp\t{*%p0@GOT|[DWORD PTR %p0@GOT]}";
-+              {
-+                if (output_indirect_p)
-+                  xasm = "{%p0@GOT|[DWORD PTR %p0@GOT]}";
-+                else
-+                  xasm = "%!jmp\t{*%p0@GOT|[DWORD PTR %p0@GOT]}";
-+              }
-           }
-         else
-           xasm = "%!jmp\t%P0";
-@@ -28489,9 +29061,17 @@ ix86_output_call_insn (rtx_insn *insn, rtx call_op)
-       else if (TARGET_SEH)
-       xasm = "%!rex.W jmp\t%A0";
-       else
--      xasm = "%!jmp\t%A0";
-+      {
-+        if (output_indirect_p)
-+          xasm = "%0";
-+        else
-+          xasm = "%!jmp\t%A0";
-+      }
- 
--      output_asm_insn (xasm, &call_op);
-+      if (output_indirect_p && !direct_p)
-+      ix86_output_indirect_branch (call_op, xasm, true);
-+      else
-+      output_asm_insn (xasm, &call_op);
-       return "";
-     }
- 
-@@ -28529,18 +29109,37 @@ ix86_output_call_insn (rtx_insn *insn, rtx call_op)
-     {
-       if (ix86_nopic_noplt_attribute_p (call_op))
-       {
-+        direct_p = false;
-         if (TARGET_64BIT)
--          xasm = "%!call\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR 
%p0@GOTPCREL[rip]]}";
-+          {
-+            if (output_indirect_p)
-+              xasm = "{%p0@GOTPCREL(%%rip)|[QWORD PTR %p0@GOTPCREL[rip]]}";
-+            else
-+              xasm = "%!call\t{*%p0@GOTPCREL(%%rip)|[QWORD PTR 
%p0@GOTPCREL[rip]]}";
-+          }
-         else
--          xasm = "%!call\t{*%p0@GOT|[DWORD PTR %p0@GOT]}";
-+          {
-+            if (output_indirect_p)
-+              xasm = "{%p0@GOT|[DWORD PTR %p0@GOT]}";
-+            else
-+              xasm = "%!call\t{*%p0@GOT|[DWORD PTR %p0@GOT]}";
-+          }
-       }
-       else
-       xasm = "%!call\t%P0";
-     }
-   else
--    xasm = "%!call\t%A0";
-+    {
-+      if (output_indirect_p)
-+      xasm = "%0";
-+      else
-+      xasm = "%!call\t%A0";
-+    }
- 
--  output_asm_insn (xasm, &call_op);
-+  if (output_indirect_p && !direct_p)
-+    ix86_output_indirect_branch (call_op, xasm, false);
-+  else
-+    output_asm_insn (xasm, &call_op);
- 
-   if (seh_nop_p)
-     return "nop";
-@@ -41459,7 +42058,7 @@ ix86_handle_struct_attribute (tree *node, tree name, 
tree, int,
- }
- 
- static tree
--ix86_handle_fndecl_attribute (tree *node, tree name, tree, int,
-+ix86_handle_fndecl_attribute (tree *node, tree name, tree args, int,
-                             bool *no_add_attrs)
- {
-   if (TREE_CODE (*node) != FUNCTION_DECL)
-@@ -41468,6 +42067,29 @@ ix86_handle_fndecl_attribute (tree *node, tree name, 
tree, int,
-                name);
-       *no_add_attrs = true;
-     }
-+
-+  if (is_attribute_p ("indirect_branch", name))
-+    {
-+      tree cst = TREE_VALUE (args);
-+      if (TREE_CODE (cst) != STRING_CST)
-+      {
-+        warning (OPT_Wattributes,
-+                 "%qE attribute requires a string constant argument",
-+                 name);
-+        *no_add_attrs = true;
-+      }
-+      else if (strcmp (TREE_STRING_POINTER (cst), "keep") != 0
-+             && strcmp (TREE_STRING_POINTER (cst), "thunk") != 0
-+             && strcmp (TREE_STRING_POINTER (cst), "thunk-inline") != 0
-+             && strcmp (TREE_STRING_POINTER (cst), "thunk-extern") != 0)
-+      {
-+        warning (OPT_Wattributes,
-+                 "argument to %qE attribute is not "
-+                 "(keep|thunk|thunk-inline|thunk-extern)", name);
-+        *no_add_attrs = true;
-+      }
-+    }
-+
-   return NULL_TREE;
- }
- 
-@@ -45776,6 +46398,8 @@ static const struct attribute_spec 
ix86_attribute_table[] =
-     ix86_handle_interrupt_attribute, false },
-   { "no_caller_saved_registers", 0, 0, false, true, true,
-     ix86_handle_no_caller_saved_registers_attribute, false },
-+  { "indirect_branch", 1, 1, true, false, false,
-+    ix86_handle_fndecl_attribute, false },
- 
-   /* End element.  */
-   { NULL,        0, 0, false, false, false, NULL, false }
-diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
-index 11727e5..d8370ae 100644
---- a/gcc/config/i386/i386.h
-+++ b/gcc/config/i386/i386.h
-@@ -2609,6 +2609,13 @@ struct GTY(()) machine_function {
-   /* Function type.  */
-   ENUM_BITFIELD(function_type) func_type : 2;
- 
-+  /* How to generate indirec branch.  */
-+  ENUM_BITFIELD(indirect_branch) indirect_branch_type : 3;
-+
-+  /* If true, the current function has local indirect jumps, like
-+     "indirect_jump" or "tablejump".  */
-+  BOOL_BITFIELD has_local_indirect_jump : 1;
-+
-   /* If true, the current function is a function specified with
-      the "interrupt" or "no_caller_saved_registers" attribute.  */
-   BOOL_BITFIELD no_caller_saved_registers : 1;
-diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
-index dbe88f4..cd2e73c 100644
---- a/gcc/config/i386/i386.md
-+++ b/gcc/config/i386/i386.md
-@@ -11627,13 +11627,18 @@
- {
-   if (TARGET_X32)
-     operands[0] = convert_memory_address (word_mode, operands[0]);
-+  cfun->machine->has_local_indirect_jump = true;
- })
- 
- (define_insn "*indirect_jump"
-   [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rBw"))]
-   ""
--  "%!jmp\t%A0"
--  [(set_attr "type" "ibr")
-+  "* return ix86_output_indirect_jmp (operands[0], false);"
-+  [(set (attr "type")
-+     (if_then_else (match_test "(cfun->machine->indirect_branch_type
-+                               != indirect_branch_keep)")
-+      (const_string "multi")
-+      (const_string "ibr")))
-    (set_attr "length_immediate" "0")
-    (set_attr "maybe_prefix_bnd" "1")])
- 
-@@ -11676,14 +11681,19 @@
- 
-   if (TARGET_X32)
-     operands[0] = convert_memory_address (word_mode, operands[0]);
-+  cfun->machine->has_local_indirect_jump = true;
- })
- 
- (define_insn "*tablejump_1"
-   [(set (pc) (match_operand:W 0 "indirect_branch_operand" "rBw"))
-    (use (label_ref (match_operand 1)))]
-   ""
--  "%!jmp\t%A0"
--  [(set_attr "type" "ibr")
-+  "* return ix86_output_indirect_jmp (operands[0], false);"
-+  [(set (attr "type")
-+     (if_then_else (match_test "(cfun->machine->indirect_branch_type
-+                               != indirect_branch_keep)")
-+      (const_string "multi")
-+      (const_string "ibr")))
-    (set_attr "length_immediate" "0")
-    (set_attr "maybe_prefix_bnd" "1")])
- 
-@@ -12354,8 +12364,12 @@
-   [(simple_return)
-    (use (match_operand:SI 0 "register_operand" "r"))]
-   "reload_completed"
--  "%!jmp\t%A0"
--  [(set_attr "type" "ibr")
-+  "* return ix86_output_indirect_jmp (operands[0], true);"
-+  [(set (attr "type")
-+     (if_then_else (match_test "(cfun->machine->indirect_branch_type
-+                               != indirect_branch_keep)")
-+      (const_string "multi")
-+      (const_string "ibr")))
-    (set_attr "length_immediate" "0")
-    (set_attr "maybe_prefix_bnd" "1")])
- 
-diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt
-index 9384e29..c076d9c 100644
---- a/gcc/config/i386/i386.opt
-+++ b/gcc/config/i386/i386.opt
-@@ -927,3 +927,23 @@ Attempt to avoid generating instruction sequences 
containing ret bytes.
- mgeneral-regs-only
- Target Report RejectNegative Mask(GENERAL_REGS_ONLY) Var(ix86_target_flags) 
Save
- Generate code which uses only the general registers.
-+
-+mindirect-branch=
-+Target Report RejectNegative Joined Enum(indirect_branch) 
Var(ix86_indirect_branch) Init(indirect_branch_keep)
-+Convert indirect call and jump to call and return thunks.
-+
-+Enum
-+Name(indirect_branch) Type(enum indirect_branch)
-+Known indirect branch choices (for use with the -mindirect-branch= option):
-+
-+EnumValue
-+Enum(indirect_branch) String(keep) Value(indirect_branch_keep)
-+
-+EnumValue
-+Enum(indirect_branch) String(thunk) Value(indirect_branch_thunk)
-+
-+EnumValue
-+Enum(indirect_branch) String(thunk-inline) Value(indirect_branch_thunk_inline)
-+
-+EnumValue
-+Enum(indirect_branch) String(thunk-extern) Value(indirect_branch_thunk_extern)
-diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
-index ba309d0..935381d 100644
---- a/gcc/doc/extend.texi
-+++ b/gcc/doc/extend.texi
-@@ -5540,6 +5540,16 @@ Specify which floating-point unit to use.  You must 
specify the
- @code{target("fpmath=sse,387")} option as
- @code{target("fpmath=sse+387")} because the comma would separate
- different options.
-+
-+@item indirect_branch("@var{choice}")
-+@cindex @code{indirect_branch} function attribute, x86
-+On x86 targets, the @code{indirect_branch} attribute causes the compiler
-+to convert indirect call and jump with @var{choice}.  @samp{keep}
-+keeps indirect call and jump unmodified.  @samp{thunk} converts indirect
-+call and jump to call and return thunk.  @samp{thunk-inline} converts
-+indirect call and jump to inlined call and return thunk.
-+@samp{thunk-extern} converts indirect call and jump to external call
-+and return thunk provided in a separate object file.
- @end table
- 
- On the x86, the inliner does not inline a
-diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
-index 7311c10..4979c8c 100644
---- a/gcc/doc/invoke.texi
-+++ b/gcc/doc/invoke.texi
-@@ -1210,7 +1210,8 @@ See RS/6000 and PowerPC Options.
- -msse2avx  -mfentry  -mrecord-mcount  -mnop-mcount  -m8bit-idiv @gol
- -mavx256-split-unaligned-load  -mavx256-split-unaligned-store @gol
- -malign-data=@var{type}  -mstack-protector-guard=@var{guard} @gol
---mmitigate-rop  -mgeneral-regs-only}
-+-mmitigate-rop  -mgeneral-regs-only @gol
-+-mindirect-branch=@var{choice}}
- 
- @emph{x86 Windows Options}
- @gccoptlist{-mconsole  -mcygwin  -mno-cygwin  -mdll @gol
-@@ -25686,6 +25687,17 @@ Generate code that uses only the general-purpose 
registers.  This
- prevents the compiler from using floating-point, vector, mask and bound
- registers.
- 
-+@item -mindirect-branch=@var{choice}
-+@opindex -mindirect-branch
-+Convert indirect call and jump with @var{choice}.  The default is
-+@samp{keep}, which keeps indirect call and jump unmodified.
-+@samp{thunk} converts indirect call and jump to call and return thunk.
-+@samp{thunk-inline} converts indirect call and jump to inlined call
-+and return thunk.  @samp{thunk-extern} converts indirect call and jump
-+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}.
-+
- @end table
- 
- These @samp{-m} switches are supported in addition to the above

diff --git a/sys-devel/gcc/files/spectre-0002-mfunction-return.patch 
b/sys-devel/gcc/files/spectre-0002-mfunction-return.patch
deleted file mode 100644
index 391e89d..0000000
--- a/sys-devel/gcc/files/spectre-0002-mfunction-return.patch
+++ /dev/null
@@ -1,447 +0,0 @@
-From 357311dd400f7f72d2132f2f94161ece39bf08c6 Mon Sep 17 00:00:00 2001
-From: hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
-Date: Tue, 16 Jan 2018 11:10:44 +0000
-Subject: [PATCH] x86: Add -mfunction-return=
-
-Add -mfunction-return= option to convert function return to call and
-return thunks.  The default is 'keep', which keeps function return
-unmodified.  'thunk' converts function return to call and return thunk.
-'thunk-inline' converts function return to inlined call and return thunk.
-'thunk-extern' converts function return 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 function_return.
-
-Function return thunk is the same as memory thunk for -mindirect-branch=
-where the return address is at the top of the stack:
-
-__x86_return_thunk:
-       call L2
-L1:
-       pause
-       lfence
-       jmp L1
-L2:
-       lea 8(%rsp), %rsp|lea 4(%esp), %esp
-       ret
-
-and function return becomes
-
-       jmp __x86_return_thunk
-
-gcc/
-
-       Backport from mainline
-       2018-01-14  H.J. Lu  <hongjiu...@intel.com>
-
-       * config/i386/i386-protos.h (ix86_output_function_return): New.
-       * config/i386/i386.c (ix86_set_indirect_branch_type): Also
-       set function_return_type.
-       (indirect_thunk_name): Add ret_p to indicate thunk for function
-       return.
-       (output_indirect_thunk_function): Pass false to
-       indirect_thunk_name.
-       (ix86_output_indirect_branch_via_reg): Likewise.
-       (ix86_output_indirect_branch_via_push): Likewise.
-       (output_indirect_thunk_function): Create alias for function
-       return thunk if regno < 0.
-       (ix86_output_function_return): New function.
-       (ix86_handle_fndecl_attribute): Handle function_return.
-       (ix86_attribute_table): Add function_return.
-       * config/i386/i386.h (machine_function): Add
-       function_return_type.
-       * config/i386/i386.md (simple_return_internal): Use
-       ix86_output_function_return.
-       (simple_return_internal_long): Likewise.
-       * config/i386/i386.opt (mfunction-return=): New option.
-       (indirect_branch): Mention -mfunction-return=.
-       * doc/extend.texi: Document function_return function attribute.
-       * doc/invoke.texi: Document -mfunction-return= option.
-
-i386: Don't use ASM_OUTPUT_DEF for TARGET_MACHO
-
-ASM_OUTPUT_DEF isn't defined for TARGET_MACHO.  Use ASM_OUTPUT_LABEL to
-generate the __x86_return_thunk label, instead of the set directive.
-Update testcase to remove the __x86_return_thunk label check.  Since
--fno-pic is ignored on Darwin, update testcases to sscan or "push"
-only on Linux.
-
-gcc/
-
-       Backport from mainline
-       2018-01-15  H.J. Lu  <hongjiu...@intel.com>
-
-       PR target/83839
-       * config/i386/i386.c (output_indirect_thunk_function): Use
-       ASM_OUTPUT_LABEL, instead of ASM_OUTPUT_DEF, for TARGET_MACHO
-       for  __x86.return_thunk.
-
-
-git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256734 
138bc75d-0d04-0410-961f-82ee72b054a4
----
- gcc/config/i386/i386-protos.h                      |   1 +
- gcc/config/i386/i386.c                             | 152 +++++++++++++++++++--
- gcc/config/i386/i386.h                             |   3 +
- gcc/config/i386/i386.md                            |   9 +-
- gcc/config/i386/i386.opt                           |   6 +-
- gcc/doc/extend.texi                                |   9 ++
- gcc/doc/invoke.texi                                |  13 +-
- 58 files changed, 641 insertions(+), 74 deletions(-)
-
-diff --git a/gcc/config/i386/i386-protos.h b/gcc/config/i386/i386-protos.h
-index bcdd987..42eece3 100644
---- a/gcc/config/i386/i386-protos.h
-+++ b/gcc/config/i386/i386-protos.h
-@@ -314,6 +314,7 @@ extern enum attr_cpu ix86_schedule;
- 
- extern const char * ix86_output_call_insn (rtx_insn *insn, rtx call_op);
- extern const char * ix86_output_indirect_jmp (rtx call_op, bool ret_p);
-+extern const char * ix86_output_function_return (bool long_p);
- extern bool ix86_operands_ok_for_move_multiple (rtx *operands, bool load,
-                                               enum machine_mode mode);
- 
-diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
-index 7e779c1..8fb8902 100644
---- a/gcc/config/i386/i386.c
-+++ b/gcc/config/i386/i386.c
-@@ -7188,6 +7188,31 @@ ix86_set_indirect_branch_type (tree fndecl)
-       else
-       cfun->machine->indirect_branch_type = ix86_indirect_branch;
-     }
-+
-+  if (cfun->machine->function_return_type == indirect_branch_unset)
-+    {
-+      tree attr = lookup_attribute ("function_return",
-+                                  DECL_ATTRIBUTES (fndecl));
-+      if (attr != NULL)
-+      {
-+        tree args = TREE_VALUE (attr);
-+        if (args == NULL)
-+          gcc_unreachable ();
-+        tree cst = TREE_VALUE (args);
-+        if (strcmp (TREE_STRING_POINTER (cst), "keep") == 0)
-+          cfun->machine->function_return_type = indirect_branch_keep;
-+        else if (strcmp (TREE_STRING_POINTER (cst), "thunk") == 0)
-+          cfun->machine->function_return_type = indirect_branch_thunk;
-+        else if (strcmp (TREE_STRING_POINTER (cst), "thunk-inline") == 0)
-+          cfun->machine->function_return_type = indirect_branch_thunk_inline;
-+        else if (strcmp (TREE_STRING_POINTER (cst), "thunk-extern") == 0)
-+          cfun->machine->function_return_type = indirect_branch_thunk_extern;
-+        else
-+          gcc_unreachable ();
-+      }
-+      else
-+      cfun->machine->function_return_type = ix86_function_return;
-+    }
- }
- 
- /* Establish appropriate back-end context for processing the function
-@@ -12000,8 +12025,12 @@ static int indirect_thunks_bnd_used;
- /* Fills in the label name that should be used for the indirect thunk.  */
- 
- static void
--indirect_thunk_name (char name[32], int regno, bool need_bnd_p)
-+indirect_thunk_name (char name[32], int regno, bool need_bnd_p,
-+                   bool ret_p)
- {
-+  if (regno >= 0 && ret_p)
-+    gcc_unreachable ();
-+
-   if (USE_HIDDEN_LINKONCE)
-     {
-       const char *bnd = need_bnd_p ? "_bnd" : "";
-@@ -12016,7 +12045,10 @@ indirect_thunk_name (char name[32], int regno, bool 
need_bnd_p)
-                  bnd, reg_prefix, reg_names[regno]);
-       }
-       else
--      sprintf (name, "__x86_indirect_thunk%s", bnd);
-+      {
-+        const char *ret = ret_p ? "return" : "indirect";
-+        sprintf (name, "__x86_%s_thunk%s", ret, bnd);
-+      }
-     }
-   else
-     {
-@@ -12029,10 +12061,20 @@ indirect_thunk_name (char name[32], int regno, bool 
need_bnd_p)
-       }
-       else
-       {
--        if (need_bnd_p)
--          ASM_GENERATE_INTERNAL_LABEL (name, "LITB", 0);
-+        if (ret_p)
-+          {
-+            if (need_bnd_p)
-+              ASM_GENERATE_INTERNAL_LABEL (name, "LRTB", 0);
-+            else
-+              ASM_GENERATE_INTERNAL_LABEL (name, "LRT", 0);
-+          }
-         else
--          ASM_GENERATE_INTERNAL_LABEL (name, "LIT", 0);
-+          {
-+            if (need_bnd_p)
-+              ASM_GENERATE_INTERNAL_LABEL (name, "LITB", 0);
-+            else
-+              ASM_GENERATE_INTERNAL_LABEL (name, "LIT", 0);
-+          }
-       }
-     }
- }
-@@ -12127,7 +12169,7 @@ output_indirect_thunk_function (bool need_bnd_p, int 
regno)
-   tree decl;
- 
-   /* Create __x86_indirect_thunk/__x86_indirect_thunk_bnd.  */
--  indirect_thunk_name (name, regno, need_bnd_p);
-+  indirect_thunk_name (name, regno, need_bnd_p, false);
-   decl = build_decl (BUILTINS_LOCATION, FUNCTION_DECL,
-                    get_identifier (name),
-                    build_function_type_list (void_type_node, NULL_TREE));
-@@ -12170,6 +12212,36 @@ output_indirect_thunk_function (bool need_bnd_p, int 
regno)
-       ASM_OUTPUT_LABEL (asm_out_file, name);
-       }
- 
-+  if (regno < 0)
-+    {
-+      /* Create alias for __x86.return_thunk/__x86.return_thunk_bnd.  */
-+      char alias[32];
-+
-+      indirect_thunk_name (alias, regno, need_bnd_p, true);
-+#if TARGET_MACHO
-+      if (TARGET_MACHO)
-+      {
-+        fputs ("\t.weak_definition\t", asm_out_file);
-+        assemble_name (asm_out_file, alias);
-+        fputs ("\n\t.private_extern\t", asm_out_file);
-+        assemble_name (asm_out_file, alias);
-+        putc ('\n', asm_out_file);
-+        ASM_OUTPUT_LABEL (asm_out_file, alias);
-+      }
-+#else
-+      ASM_OUTPUT_DEF (asm_out_file, alias, name);
-+      if (USE_HIDDEN_LINKONCE)
-+      {
-+        fputs ("\t.globl\t", asm_out_file);
-+        assemble_name (asm_out_file, alias);
-+        putc ('\n', asm_out_file);
-+        fputs ("\t.hidden\t", asm_out_file);
-+        assemble_name (asm_out_file, alias);
-+        putc ('\n', asm_out_file);
-+      }
-+#endif
-+    }
-+
-   DECL_INITIAL (decl) = make_node (BLOCK);
-   current_function_decl = decl;
-   allocate_struct_function (decl, false);
-@@ -28775,7 +28847,7 @@ ix86_output_indirect_branch_via_reg (rtx call_op, bool 
sibcall_p)
-         else
-           indirect_thunks_used |= 1 << i;
-       }
--      indirect_thunk_name (thunk_name_buf, regno, need_bnd_p);
-+      indirect_thunk_name (thunk_name_buf, regno, need_bnd_p, false);
-       thunk_name = thunk_name_buf;
-     }
-   else
-@@ -28884,7 +28956,7 @@ ix86_output_indirect_branch_via_push (rtx call_op, 
const char *xasm,
-         else
-           indirect_thunk_needed = true;
-       }
--      indirect_thunk_name (thunk_name_buf, regno, need_bnd_p);
-+      indirect_thunk_name (thunk_name_buf, regno, need_bnd_p, false);
-       thunk_name = thunk_name_buf;
-     }
-   else
-@@ -29019,6 +29091,46 @@ ix86_output_indirect_jmp (rtx call_op, bool ret_p)
-     return "%!jmp\t%A0";
- }
- 
-+/* Output function return.  CALL_OP is the jump target.  Add a REP
-+   prefix to RET if LONG_P is true and function return is kept.  */
-+
-+const char *
-+ix86_output_function_return (bool long_p)
-+{
-+  if (cfun->machine->function_return_type != indirect_branch_keep)
-+    {
-+      char thunk_name[32];
-+      bool need_bnd_p = ix86_bnd_prefixed_insn_p (current_output_insn);
-+
-+      if (cfun->machine->function_return_type
-+        != indirect_branch_thunk_inline)
-+      {
-+        bool need_thunk = (cfun->machine->function_return_type
-+                           == indirect_branch_thunk);
-+        indirect_thunk_name (thunk_name, -1, need_bnd_p, true);
-+        if (need_bnd_p)
-+          {
-+            indirect_thunk_bnd_needed |= need_thunk;
-+            fprintf (asm_out_file, "\tbnd jmp\t%s\n", thunk_name);
-+          }
-+        else
-+          {
-+            indirect_thunk_needed |= need_thunk;
-+            fprintf (asm_out_file, "\tjmp\t%s\n", thunk_name);
-+          }
-+      }
-+      else
-+      output_indirect_thunk (need_bnd_p, -1);
-+
-+      return "";
-+    }
-+
-+  if (!long_p || ix86_bnd_prefixed_insn_p (current_output_insn))
-+    return "%!ret";
-+
-+  return "rep%; ret";
-+}
-+
- /* Output the assembly for a call instruction.  */
- 
- const char *
-@@ -42090,6 +42202,28 @@ ix86_handle_fndecl_attribute (tree *node, tree name, 
tree args, int,
-       }
-     }
- 
-+  if (is_attribute_p ("function_return", name))
-+    {
-+      tree cst = TREE_VALUE (args);
-+      if (TREE_CODE (cst) != STRING_CST)
-+      {
-+        warning (OPT_Wattributes,
-+                 "%qE attribute requires a string constant argument",
-+                 name);
-+        *no_add_attrs = true;
-+      }
-+      else if (strcmp (TREE_STRING_POINTER (cst), "keep") != 0
-+             && strcmp (TREE_STRING_POINTER (cst), "thunk") != 0
-+             && strcmp (TREE_STRING_POINTER (cst), "thunk-inline") != 0
-+             && strcmp (TREE_STRING_POINTER (cst), "thunk-extern") != 0)
-+      {
-+        warning (OPT_Wattributes,
-+                 "argument to %qE attribute is not "
-+                 "(keep|thunk|thunk-inline|thunk-extern)", name);
-+        *no_add_attrs = true;
-+      }
-+    }
-+
-   return NULL_TREE;
- }
- 
-@@ -46400,6 +46534,8 @@ static const struct attribute_spec 
ix86_attribute_table[] =
-     ix86_handle_no_caller_saved_registers_attribute, false },
-   { "indirect_branch", 1, 1, true, false, false,
-     ix86_handle_fndecl_attribute, false },
-+  { "function_return", 1, 1, true, false, false,
-+    ix86_handle_fndecl_attribute, false },
- 
-   /* End element.  */
-   { NULL,        0, 0, false, false, false, NULL, false }
-diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
-index d8370ae..e7da790 100644
---- a/gcc/config/i386/i386.h
-+++ b/gcc/config/i386/i386.h
-@@ -2616,6 +2616,9 @@ struct GTY(()) machine_function {
-      "indirect_jump" or "tablejump".  */
-   BOOL_BITFIELD has_local_indirect_jump : 1;
- 
-+  /* How to generate function return.  */
-+  ENUM_BITFIELD(indirect_branch) function_return_type : 3;
-+
-   /* If true, the current function is a function specified with
-      the "interrupt" or "no_caller_saved_registers" attribute.  */
-   BOOL_BITFIELD no_caller_saved_registers : 1;
-diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
-index cd2e73c..d112bdb 100644
---- a/gcc/config/i386/i386.md
-+++ b/gcc/config/i386/i386.md
-@@ -12315,7 +12315,7 @@
- (define_insn "simple_return_internal"
-   [(simple_return)]
-   "reload_completed"
--  "%!ret"
-+  "* return ix86_output_function_return (false);"
-   [(set_attr "length" "1")
-    (set_attr "atom_unit" "jeu")
-    (set_attr "length_immediate" "0")
-@@ -12337,12 +12337,7 @@
-   [(simple_return)
-    (unspec [(const_int 0)] UNSPEC_REP)]
-   "reload_completed"
--{
--  if (ix86_bnd_prefixed_insn_p (insn))
--    return "%!ret";
--
--  return "rep%; ret";
--}
-+  "* return ix86_output_function_return (true);"
-   [(set_attr "length" "2")
-    (set_attr "atom_unit" "jeu")
-    (set_attr "length_immediate" "0")
-diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt
-index c076d9c..b07388d 100644
---- a/gcc/config/i386/i386.opt
-+++ b/gcc/config/i386/i386.opt
-@@ -932,9 +932,13 @@ mindirect-branch=
- Target Report RejectNegative Joined Enum(indirect_branch) 
Var(ix86_indirect_branch) Init(indirect_branch_keep)
- Convert indirect call and jump to call and return thunks.
- 
-+mfunction-return=
-+Target Report RejectNegative Joined Enum(indirect_branch) 
Var(ix86_function_return) Init(indirect_branch_keep)
-+Convert function return to call and return thunk.
-+
- Enum
- Name(indirect_branch) Type(enum indirect_branch)
--Known indirect branch choices (for use with the -mindirect-branch= option):
-+Known indirect branch choices (for use with the 
-mindirect-branch=/-mfunction-return= options):
- 
- EnumValue
- Enum(indirect_branch) String(keep) Value(indirect_branch_keep)
-diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
-index 935381d..46e0a36 100644
---- a/gcc/doc/extend.texi
-+++ b/gcc/doc/extend.texi
-@@ -5550,6 +5550,15 @@ call and jump to call and return thunk.  
@samp{thunk-inline} converts
- indirect call and jump to inlined call and return thunk.
- @samp{thunk-extern} converts indirect call and jump to external call
- and return thunk provided in a separate object file.
-+
-+@item function_return("@var{choice}")
-+@cindex @code{function_return} function attribute, x86
-+On x86 targets, the @code{function_return} attribute causes the compiler
-+to convert function return with @var{choice}.  @samp{keep} keeps function
-+return unmodified.  @samp{thunk} converts function return to call and
-+return thunk.  @samp{thunk-inline} converts function return to inlined
-+call and return thunk.  @samp{thunk-extern} converts function return to
-+external call and return thunk provided in a separate object file.
- @end table
- 
- On the x86, the inliner does not inline a
-diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
-index 4979c8c..f3eb54b 100644
---- a/gcc/doc/invoke.texi
-+++ b/gcc/doc/invoke.texi
-@@ -1211,7 +1211,7 @@ See RS/6000 and PowerPC Options.
- -mavx256-split-unaligned-load  -mavx256-split-unaligned-store @gol
- -malign-data=@var{type}  -mstack-protector-guard=@var{guard} @gol
- -mmitigate-rop  -mgeneral-regs-only @gol
---mindirect-branch=@var{choice}}
-+-mindirect-branch=@var{choice} -mfunction-return==@var{choice}}
- 
- @emph{x86 Windows Options}
- @gccoptlist{-mconsole  -mcygwin  -mno-cygwin  -mdll @gol
-@@ -25698,6 +25698,17 @@ 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}.
- 
-+@item -mfunction-return=@var{choice}
-+@opindex -mfunction-return
-+Convert function return with @var{choice}.  The default is @samp{keep},
-+which keeps function return unmodified.  @samp{thunk} converts function
-+return to call and return thunk.  @samp{thunk-inline} converts function
-+return to inlined call and return thunk.  @samp{thunk-extern} converts
-+function return 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{function_return}.
-+@xref{Function Attributes}.
-+
- @end table
- 
- These @samp{-m} switches are supported in addition to the above

diff --git a/sys-devel/gcc/files/spectre-0003-mindirect-branch-register.patch 
b/sys-devel/gcc/files/spectre-0003-mindirect-branch-register.patch
deleted file mode 100644
index 2e5e779..0000000
--- a/sys-devel/gcc/files/spectre-0003-mindirect-branch-register.patch
+++ /dev/null
@@ -1,340 +0,0 @@
-From 86118fbdbafe6af54b2da467e1073c49e1742116 Mon Sep 17 00:00:00 2001
-From: hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
-Date: Tue, 16 Jan 2018 11:17:49 +0000
-Subject: [PATCH] x86: Add -mindirect-branch-register
-
-Add -mindirect-branch-register to force indirect branch via register.
-This is implemented by disabling patterns of indirect branch via memory,
-similar to TARGET_X32.
-
--mindirect-branch= and -mfunction-return= tests are updated with
--mno-indirect-branch-register to avoid false test failures when
--mindirect-branch-register is added to RUNTESTFLAGS for "make check".
-
-gcc/
-
-       Backport from mainline
-       2018-01-14  H.J. Lu  <hongjiu...@intel.com>
-
-       * config/i386/constraints.md (Bs): Disallow memory operand for
-       -mindirect-branch-register.
-       (Bw): Likewise.
-       * config/i386/predicates.md (indirect_branch_operand): Likewise.
-       (GOT_memory_operand): Likewise.
-       (call_insn_operand): Likewise.
-       (sibcall_insn_operand): Likewise.
-       (GOT32_symbol_operand): Likewise.
-       * config/i386/i386.md (indirect_jump): Call convert_memory_address
-       for -mindirect-branch-register.
-       (tablejump): Likewise.
-       (*sibcall_memory): Likewise.
-       (*sibcall_value_memory): Likewise.
-       Disallow peepholes of indirect call and jump via memory for
-       -mindirect-branch-register.
-       (*call_pop): Replace m with Bw.
-       (*call_value_pop): Likewise.
-       (*sibcall_pop_memory): Replace m with Bs.
-       * config/i386/i386.opt (mindirect-branch-register): New option.
-       * doc/invoke.texi: Document -mindirect-branch-register option.
-
-i386: Rename to ix86_indirect_branch_register
-
-Rename the variable for -mindirect-branch-register to
-ix86_indirect_branch_register to match the command-line option name.
-
-       Backport from mainline
-       2018-01-15  H.J. Lu  <hongjiu...@intel.com>
-
-       * config/i386/constraints.md (Bs): Replace
-       ix86_indirect_branch_thunk_register with
-       ix86_indirect_branch_register.
-       (Bw): Likewise.
-       * config/i386/i386.md (indirect_jump): Likewise.
-       (tablejump): Likewise.
-       (*sibcall_memory): Likewise.
-       (*sibcall_value_memory): Likewise.
-       Peepholes of indirect call and jump via memory: Likewise.
-       * config/i386/i386.opt: Likewise.
-       * config/i386/predicates.md (indirect_branch_operand): Likewise.
-       (GOT_memory_operand): Likewise.
-       (call_insn_operand): Likewise.
-       (sibcall_insn_operand): Likewise.
-       (GOT32_symbol_operand): Likewise.
-
-x86: Rewrite ix86_indirect_branch_register logic
-
-Rewrite ix86_indirect_branch_register logic with
-
-(and (not (match_test "ix86_indirect_branch_register"))
-     (original condition before r256662))
-
-       Backport from mainline
-       2018-01-15  H.J. Lu  <hongjiu...@intel.com>
-
-       * config/i386/predicates.md (constant_call_address_operand):
-       Rewrite ix86_indirect_branch_register logic.
-       (sibcall_insn_operand): Likewise.
-
-Don't check ix86_indirect_branch_register for GOT operand
-
-Since GOT_memory_operand and GOT32_symbol_operand are simple pattern
-matches, don't check ix86_indirect_branch_register here.  If needed,
--mindirect-branch= will convert indirect branch via GOT slot to a call
-and return thunk.
-
-       Backport from mainline
-       2018-01-15  H.J. Lu  <hongjiu...@intel.com>
-
-       * config/i386/constraints.md (Bs): Update
-       ix86_indirect_branch_register check.  Don't check
-       ix86_indirect_branch_register with GOT_memory_operand.
-       (Bw): Likewise.
-       * config/i386/predicates.md (GOT_memory_operand): Don't check
-       ix86_indirect_branch_register here.
-       (GOT32_symbol_operand): Likewise.
-
-i386: Rewrite indirect_branch_operand logic
-
-       Backport from mainline
-       2018-01-15  H.J. Lu  <hongjiu...@intel.com>
-
-       * config/i386/predicates.md (indirect_branch_operand): Rewrite
-       ix86_indirect_branch_register logic.
-
-
-git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256735 
138bc75d-0d04-0410-961f-82ee72b054a4
----
- gcc/config/i386/constraints.md                     |  6 +-
- gcc/config/i386/i386.md                            | 34 +++++++----
- gcc/config/i386/i386.opt                           |  4 ++
- gcc/config/i386/predicates.md                      | 21 ++++---
- gcc/doc/invoke.texi                                |  7 ++-
- 49 files changed, 266 insertions(+), 63 deletions(-)
-
-diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md
-index 38d604f..a0a632a 100644
---- a/gcc/config/i386/constraints.md
-+++ b/gcc/config/i386/constraints.md
-@@ -198,14 +198,16 @@
- 
- (define_constraint "Bs"
-   "@internal Sibcall memory operand."
--  (ior (and (not (match_test "TARGET_X32"))
-+  (ior (and (not (match_test "ix86_indirect_branch_register"))
-+          (not (match_test "TARGET_X32"))
-           (match_operand 0 "sibcall_memory_operand"))
-        (and (match_test "TARGET_X32 && Pmode == DImode")
-           (match_operand 0 "GOT_memory_operand"))))
- 
- (define_constraint "Bw"
-   "@internal Call memory operand."
--  (ior (and (not (match_test "TARGET_X32"))
-+  (ior (and (not (match_test "ix86_indirect_branch_register"))
-+          (not (match_test "TARGET_X32"))
-           (match_operand 0 "memory_operand"))
-        (and (match_test "TARGET_X32 && Pmode == DImode")
-           (match_operand 0 "GOT_memory_operand"))))
-diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
-index d112bdb..d074c2f 100644
---- a/gcc/config/i386/i386.md
-+++ b/gcc/config/i386/i386.md
-@@ -11625,7 +11625,7 @@
-   [(set (pc) (match_operand 0 "indirect_branch_operand"))]
-   ""
- {
--  if (TARGET_X32)
-+  if (TARGET_X32 || ix86_indirect_branch_register)
-     operands[0] = convert_memory_address (word_mode, operands[0]);
-   cfun->machine->has_local_indirect_jump = true;
- })
-@@ -11679,7 +11679,7 @@
-                                        OPTAB_DIRECT);
-     }
- 
--  if (TARGET_X32)
-+  if (TARGET_X32 || ix86_indirect_branch_register)
-     operands[0] = convert_memory_address (word_mode, operands[0]);
-   cfun->machine->has_local_indirect_jump = true;
- })
-@@ -11871,7 +11871,7 @@
-   [(call (mem:QI (match_operand:W 0 "memory_operand" "m"))
-        (match_operand 1))
-    (unspec [(const_int 0)] UNSPEC_PEEPSIB)]
--  "!TARGET_X32"
-+  "!TARGET_X32 && !ix86_indirect_branch_register"
-   "* return ix86_output_call_insn (insn, operands[0]);"
-   [(set_attr "type" "call")])
- 
-@@ -11880,7 +11880,9 @@
-       (match_operand:W 1 "memory_operand"))
-    (call (mem:QI (match_dup 0))
-        (match_operand 3))]
--  "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (1))
-+  "!TARGET_X32
-+   && !ix86_indirect_branch_register
-+   && SIBLING_CALL_P (peep2_next_insn (1))
-    && !reg_mentioned_p (operands[0],
-                       CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))"
-   [(parallel [(call (mem:QI (match_dup 1))
-@@ -11893,7 +11895,9 @@
-    (unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE)
-    (call (mem:QI (match_dup 0))
-        (match_operand 3))]
--  "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (2))
-+  "!TARGET_X32
-+   && !ix86_indirect_branch_register
-+   && SIBLING_CALL_P (peep2_next_insn (2))
-    && !reg_mentioned_p (operands[0],
-                       CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))"
-   [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE)
-@@ -11915,7 +11919,7 @@
- })
- 
- (define_insn "*call_pop"
--  [(call (mem:QI (match_operand:SI 0 "call_insn_operand" "lmBz"))
-+  [(call (mem:QI (match_operand:SI 0 "call_insn_operand" "lBwBz"))
-        (match_operand 1))
-    (set (reg:SI SP_REG)
-       (plus:SI (reg:SI SP_REG)
-@@ -11935,7 +11939,7 @@
-   [(set_attr "type" "call")])
- 
- (define_insn "*sibcall_pop_memory"
--  [(call (mem:QI (match_operand:SI 0 "memory_operand" "m"))
-+  [(call (mem:QI (match_operand:SI 0 "memory_operand" "Bs"))
-        (match_operand 1))
-    (set (reg:SI SP_REG)
-       (plus:SI (reg:SI SP_REG)
-@@ -11989,7 +11993,9 @@
-   [(set (match_operand:W 0 "register_operand")
-         (match_operand:W 1 "memory_operand"))
-    (set (pc) (match_dup 0))]
--  "!TARGET_X32 && peep2_reg_dead_p (2, operands[0])"
-+  "!TARGET_X32
-+   && !ix86_indirect_branch_register
-+   && peep2_reg_dead_p (2, operands[0])"
-   [(set (pc) (match_dup 1))])
- 
- ;; Call subroutine, returning value in operand 0
-@@ -12070,7 +12076,7 @@
-       (call (mem:QI (match_operand:W 1 "memory_operand" "m"))
-             (match_operand 2)))
-    (unspec [(const_int 0)] UNSPEC_PEEPSIB)]
--  "!TARGET_X32"
-+  "!TARGET_X32 && !ix86_indirect_branch_register"
-   "* return ix86_output_call_insn (insn, operands[1]);"
-   [(set_attr "type" "callv")])
- 
-@@ -12080,7 +12086,9 @@
-    (set (match_operand 2)
-    (call (mem:QI (match_dup 0))
-                (match_operand 3)))]
--  "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (1))
-+  "!TARGET_X32
-+   && !ix86_indirect_branch_register
-+   && SIBLING_CALL_P (peep2_next_insn (1))
-    && !reg_mentioned_p (operands[0],
-                       CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))"
-   [(parallel [(set (match_dup 2)
-@@ -12095,7 +12103,9 @@
-    (set (match_operand 2)
-       (call (mem:QI (match_dup 0))
-             (match_operand 3)))]
--  "!TARGET_X32 && SIBLING_CALL_P (peep2_next_insn (2))
-+  "!TARGET_X32
-+   && !ix86_indirect_branch_register
-+   && SIBLING_CALL_P (peep2_next_insn (2))
-    && !reg_mentioned_p (operands[0],
-                       CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))"
-   [(unspec_volatile [(const_int 0)] UNSPECV_BLOCKAGE)
-@@ -12120,7 +12130,7 @@
- 
- (define_insn "*call_value_pop"
-   [(set (match_operand 0)
--      (call (mem:QI (match_operand:SI 1 "call_insn_operand" "lmBz"))
-+      (call (mem:QI (match_operand:SI 1 "call_insn_operand" "lBwBz"))
-             (match_operand 2)))
-    (set (reg:SI SP_REG)
-       (plus:SI (reg:SI SP_REG)
-diff --git a/gcc/config/i386/i386.opt b/gcc/config/i386/i386.opt
-index b07388d..b90da9f 100644
---- a/gcc/config/i386/i386.opt
-+++ b/gcc/config/i386/i386.opt
-@@ -951,3 +951,7 @@ Enum(indirect_branch) String(thunk-inline) 
Value(indirect_branch_thunk_inline)
- 
- EnumValue
- Enum(indirect_branch) String(thunk-extern) Value(indirect_branch_thunk_extern)
-+
-+mindirect-branch-register
-+Target Report Var(ix86_indirect_branch_register) Init(0)
-+Force indirect call and jump via register.
-diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md
-index 2fc2c60..e4da309 100644
---- a/gcc/config/i386/predicates.md
-+++ b/gcc/config/i386/predicates.md
-@@ -635,7 +635,8 @@
- ;; Test for a valid operand for indirect branch.
- (define_predicate "indirect_branch_operand"
-   (ior (match_operand 0 "register_operand")
--       (and (not (match_test "TARGET_X32"))
-+       (and (not (match_test "ix86_indirect_branch_register"))
-+          (not (match_test "TARGET_X32"))
-           (match_operand 0 "memory_operand"))))
- 
- ;; Return true if OP is a memory operands that can be used in sibcalls.
-@@ -678,20 +679,22 @@
-   (ior (match_test "constant_call_address_operand
-                    (op, mode == VOIDmode ? mode : Pmode)")
-        (match_operand 0 "call_register_no_elim_operand")
--       (ior (and (not (match_test "TARGET_X32"))
--               (match_operand 0 "memory_operand"))
--          (and (match_test "TARGET_X32 && Pmode == DImode")
--               (match_operand 0 "GOT_memory_operand")))))
-+       (and (not (match_test "ix86_indirect_branch_register"))
-+          (ior (and (not (match_test "TARGET_X32"))
-+                    (match_operand 0 "memory_operand"))
-+               (and (match_test "TARGET_X32 && Pmode == DImode")
-+                    (match_operand 0 "GOT_memory_operand"))))))
- 
- ;; Similarly, but for tail calls, in which we cannot allow memory references.
- (define_special_predicate "sibcall_insn_operand"
-   (ior (match_test "constant_call_address_operand
-                    (op, mode == VOIDmode ? mode : Pmode)")
-        (match_operand 0 "register_no_elim_operand")
--       (ior (and (not (match_test "TARGET_X32"))
--               (match_operand 0 "sibcall_memory_operand"))
--          (and (match_test "TARGET_X32 && Pmode == DImode")
--               (match_operand 0 "GOT_memory_operand")))))
-+       (and (not (match_test "ix86_indirect_branch_register"))
-+          (ior (and (not (match_test "TARGET_X32"))
-+                    (match_operand 0 "sibcall_memory_operand"))
-+               (and (match_test "TARGET_X32 && Pmode == DImode")
-+                    (match_operand 0 "GOT_memory_operand"))))))
- 
- ;; Return true if OP is a 32-bit GOT symbol operand.
- (define_predicate "GOT32_symbol_operand"
-diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
-index f3eb54b..1e572b1 100644
---- a/gcc/doc/invoke.texi
-+++ b/gcc/doc/invoke.texi
-@@ -1211,7 +1211,8 @@ See RS/6000 and PowerPC Options.
- -mavx256-split-unaligned-load  -mavx256-split-unaligned-store @gol
- -malign-data=@var{type}  -mstack-protector-guard=@var{guard} @gol
- -mmitigate-rop  -mgeneral-regs-only @gol
---mindirect-branch=@var{choice} -mfunction-return==@var{choice}}
-+-mindirect-branch=@var{choice} -mfunction-return==@var{choice} @gol
-+-mindirect-branch-register}
- 
- @emph{x86 Windows Options}
- @gccoptlist{-mconsole  -mcygwin  -mno-cygwin  -mdll @gol
-@@ -25709,6 +25710,10 @@ object file.  You can control this behavior for a 
specific function by
- using the function attribute @code{function_return}.
- @xref{Function Attributes}.
- 
-+@item -mindirect-branch-register
-+@opindex -mindirect-branch-register
-+Force indirect call and jump via register.
-+
- @end table
- 
- These @samp{-m} switches are supported in addition to the above

diff --git a/sys-devel/gcc/files/spectre-0004-v-register-modifier.patch 
b/sys-devel/gcc/files/spectre-0004-v-register-modifier.patch
deleted file mode 100644
index afbccca..0000000
--- a/sys-devel/gcc/files/spectre-0004-v-register-modifier.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-From: "H dot J dot  Lu" <hjl dot tools at gmail dot com>
-To: gcc-patches at gcc dot gnu dot org
-Subject: [PATCH 4/4] x86: Add 'V' register operand modifier
-Date: Fri, 12 Jan 2018 05:15:49 -0800
-
-Add 'V', a special modifier which prints the name of the full integer
-register without '%'.  For
-
-extern void (*func_p) (void);
-
-void
-foo (void)
-{
-  asm ("call __x86_indirect_thunk_%V0" : : "a" (func_p));
-}
-
-it generates:
-
-foo:
-       movq    func_p(%rip), %rax
-       call    __x86_indirect_thunk_rax
-       ret
-
-gcc/
-
-       * config/i386/i386.c (print_reg): Print the name of the full
-       integer register without '%'.
-       (ix86_print_operand): Handle 'V'.
-        * doc/extend.texi: Document 'V' modifier.
-
-gcc/testsuite/
-
-       * gcc.target/i386/indirect-thunk-register-4.c: New test.
----
- gcc/config/i386/i386.c                                    | 13 ++++++++++++-
- gcc/doc/extend.texi                                       |  3 +++
- gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c | 13 +++++++++++++
- 3 files changed, 28 insertions(+), 1 deletion(-)
- create mode 100644 gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c
-
-diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
-index 9ffcb69d6d7..e69135d7191 100644
---- a/gcc/config/i386/i386.c
-+++ b/gcc/config/i386/i386.c
-@@ -17617,6 +17617,7 @@ put_condition_code (enum rtx_code code, machine_mode 
mode, bool reverse,
-    If CODE is 'h', pretend the reg is the 'high' byte register.
-    If CODE is 'y', print "st(0)" instead of "st", if the reg is stack op.
-    If CODE is 'd', duplicate the operand for AVX instruction.
-+   If CODE is 'V', print naked full integer register name without %.
-  */
- 
- void
-@@ -17627,7 +17628,7 @@ print_reg (rtx x, int code, FILE *file)
-   unsigned int regno;
-   bool duplicated;
- 
--  if (ASSEMBLER_DIALECT == ASM_ATT)
-+  if (ASSEMBLER_DIALECT == ASM_ATT && code != 'V')
-     putc ('%', file);
- 
-   if (x == pc_rtx)
-@@ -17679,6 +17680,14 @@ print_reg (rtx x, int code, FILE *file)
-       return;
-     }
- 
-+  if (code == 'V')
-+    {
-+      if (GENERAL_REGNO_P (regno))
-+      msize = GET_MODE_SIZE (word_mode);
-+      else
-+      error ("'V' modifier on non-integer register");
-+    }
-+
-   duplicated = code == 'd' && TARGET_AVX;
- 
-   switch (msize)
-@@ -17798,6 +17807,7 @@ print_reg (rtx x, int code, FILE *file)
-    & -- print some in-use local-dynamic symbol name.
-    H -- print a memory address offset by 8; used for sse high-parts
-    Y -- print condition for XOP pcom* instruction.
-+   V -- print naked full integer register name without %.
-    + -- print a branch hint as 'cs' or 'ds' prefix
-    ; -- print a semicolon (after prefixes due to bug in older gas).
-    ~ -- print "i" if TARGET_AVX2, "f" otherwise.
-@@ -18021,6 +18031,7 @@ ix86_print_operand (FILE *file, rtx x, int code)
-       case 'X':
-       case 'P':
-       case 'p':
-+      case 'V':
-         break;
- 
-       case 's':
-diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi
-index f120b2a1429..dce808f1eab 100644
---- a/gcc/doc/extend.texi
-+++ b/gcc/doc/extend.texi
-@@ -9292,6 +9292,9 @@ The table below shows the list of supported modifiers 
and their effects.
- @tab @code{2}
- @end multitable
- 
-+@code{V} is a special modifier which prints the name of the full integer
-+register without @code{%}.
-+
- @anchor{x86floatingpointasmoperands}
- @subsubsection x86 Floating-Point @code{asm} Operands
- 
-diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c 
b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c
-new file mode 100644
-index 00000000000..f0cd9b75be8
---- /dev/null
-+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-register-4.c
-@@ -0,0 +1,13 @@
-+/* { dg-do compile } */
-+/* { dg-options "-O2 -mindirect-branch=keep -fno-pic" } */
-+
-+extern void (*func_p) (void);
-+
-+void
-+foo (void)
-+{
-+  asm("call __x86_indirect_thunk_%V0" : : "a" (func_p));
-+}
-+
-+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_eax" { 
target ia32 } } } */
-+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_rax" { 
target { ! ia32 } } } } */
--- 
-2.14.3
-

diff --git a/sys-devel/gcc/files/spectre-0005-mcmodel-large.patch 
b/sys-devel/gcc/files/spectre-0005-mcmodel-large.patch
deleted file mode 100644
index 25574d4..0000000
--- a/sys-devel/gcc/files/spectre-0005-mcmodel-large.patch
+++ /dev/null
@@ -1,105 +0,0 @@
-From 5d1c53c6fd593de2360c1a2ae44ebf5fa3c5263b Mon Sep 17 00:00:00 2001
-From: hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
-Date: Tue, 16 Jan 2018 11:22:01 +0000
-Subject: [PATCH] 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...@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.
-
-
-git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@256737 
138bc75d-0d04-0410-961f-82ee72b054a4
----
- gcc/config/i386/i386.c                             | 26 ++++++++++++++++++++++
- gcc/doc/invoke.texi                                | 11 +++++++++
- 15 files changed, 156 insertions(+)
-
-diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
-index 1bbdd0c..e758387 100644
---- a/gcc/config/i386/i386.c
-+++ b/gcc/config/i386/i386.c
-@@ -7187,6 +7187,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)
-@@ -7212,6 +7225,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 1e572b1..6f3c344 100644
---- a/gcc/doc/invoke.texi
-+++ b/gcc/doc/invoke.texi
-@@ -25699,6 +25699,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},
-@@ -25710,6 +25715,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/sys-devel/gcc/gcc-4.9.4-r100.ebuild 
b/sys-devel/gcc/gcc-4.9.4-r100.ebuild
deleted file mode 100644
index 8ebef29..0000000
--- a/sys-devel/gcc/gcc-4.9.4-r100.ebuild
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright 1999-2016 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI="5"
-
-PATCH_VER="1.0"
-UCLIBC_VER="1.0"
-
-# Hardened gcc 4 stuff
-PIE_VER="0.6.4"
-SPECS_VER="0.2.0"
-SPECS_GCC_VER="4.4.3"
-# arch/libc configurations known to be stable with {PIE,SSP}-by-default
-PIE_GLIBC_STABLE="x86 amd64 mips ppc ppc64 arm ia64"
-PIE_UCLIBC_STABLE="x86 arm amd64 mips ppc ppc64"
-SSP_STABLE="amd64 x86 mips ppc ppc64 arm"
-# uclibc need tls and nptl support for SSP support
-# uclibc need to be >= 0.9.33
-SSP_UCLIBC_STABLE="x86 amd64 mips ppc ppc64 arm"
-PIE_MUSL_STABLE="amd64 arm ppc mips x86"
-SSP_MUSL_STABLE="amd64 arm ppc mips"
-#end Hardened stuff
-
-inherit eutils toolchain
-
-KEYWORDS="~amd64 ~arm ~mips ~x86"
-
-RDEPEND=""
-DEPEND="${RDEPEND}
-       elibc_glibc? ( >=sys-libs/glibc-2.8 )
-       >=${CATEGORY}/binutils-2.20"
-
-if [[ ${CATEGORY} != cross-* ]] ; then
-       PDEPEND="${PDEPEND} elibc_glibc? ( >=sys-libs/glibc-2.8 )"
-fi
-
-src_prepare() {
-       if has_version '<sys-libs/glibc-2.12' ; then
-               ewarn "Your host glibc is too old; disabling automatic fortify."
-               ewarn "Please rebuild gcc after upgrading to >=glibc-2.12 
#362315"
-               EPATCH_EXCLUDE+=" 10_all_default-fortify-source.patch"
-       fi
-
-       toolchain_src_prepare
-
-       if use elibc_musl || [[ ${CATEGORY} = cross-*-musl* ]]; then
-               cd "${S}"
-               sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
-               mv libstdc\+\+-v3/config/os/gnu-linux 
libstdc\+\+-v3/config/os/gnu-linux.org
-               cp -r libstdc\+\+-v3/config/os/generic 
libstdc\+\+-v3/config/os/gnu-linux
-               cp libstdc++-v3/config/os/gnu-linux.org/arm-eabi-extra.ver 
libstdc++-v3/config/os/gnu-linux/
-               mv libitm/config/linux/x86 libitm/config/linux/x86_glibc
-               cp -r libitm/config/generic libitm/config/linux/x86
-               epatch "${FILESDIR}"/${PN}-4.9.3-musl-linker-path.patch
-               epatch "${FILESDIR}"/${PN}-4.9.3-secure-plt.patch
-               epatch "${FILESDIR}"/${PN}-4.9.3-musl-res_state.patch
-               epatch "${FILESDIR}"/${PN}-4.8.3-musl-fix-libc5-assumption.patch
-               epatch "${FILESDIR}"/${PN}-4.8.5-posix_memalign.patch
-               epatch 
"${FILESDIR}"/${PN}-4.9.3-tree-vect-data-refs-correctness.patch
-               epatch "${FILESDIR}"/${PN}-4.9.3-pr68470.patch
-       fi
-
-       use vanilla && return 0
-       #Use -r1 for newer piepatchet that use DRIVER_SELF_SPECS for the 
hardened specs.
-       [[ ${CHOST} == ${CTARGET} ]] && epatch 
"${FILESDIR}"/gcc-spec-env-r1.patch
-}

diff --git a/sys-devel/gcc/gcc-4.9.4-r99.ebuild 
b/sys-devel/gcc/gcc-4.9.4-r99.ebuild
deleted file mode 100644
index a65bc67..0000000
--- a/sys-devel/gcc/gcc-4.9.4-r99.ebuild
+++ /dev/null
@@ -1,65 +0,0 @@
-# Copyright 1999-2016 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI="5"
-
-PATCH_VER="1.0"
-UCLIBC_VER="1.0"
-
-# Hardened gcc 4 stuff
-PIE_VER="0.6.4"
-SPECS_VER="0.2.0"
-SPECS_GCC_VER="4.4.3"
-# arch/libc configurations known to be stable with {PIE,SSP}-by-default
-PIE_GLIBC_STABLE="x86 amd64 mips ppc ppc64 arm ia64"
-PIE_UCLIBC_STABLE="x86 arm amd64 mips ppc ppc64"
-SSP_STABLE="amd64 x86 mips ppc ppc64 arm"
-# uclibc need tls and nptl support for SSP support
-# uclibc need to be >= 0.9.33
-SSP_UCLIBC_STABLE="x86 amd64 mips ppc ppc64 arm"
-PIE_MUSL_STABLE="amd64 arm ppc mips x86"
-SSP_MUSL_STABLE="amd64 arm ppc mips"
-#end Hardened stuff
-
-inherit eutils toolchain
-
-KEYWORDS="amd64 arm ~mips x86"
-
-RDEPEND=""
-DEPEND="${RDEPEND}
-       elibc_glibc? ( >=sys-libs/glibc-2.8 )
-       >=${CATEGORY}/binutils-2.20"
-
-if [[ ${CATEGORY} != cross-* ]] ; then
-       PDEPEND="${PDEPEND} elibc_glibc? ( >=sys-libs/glibc-2.8 )"
-fi
-
-src_prepare() {
-       if has_version '<sys-libs/glibc-2.12' ; then
-               ewarn "Your host glibc is too old; disabling automatic fortify."
-               ewarn "Please rebuild gcc after upgrading to >=glibc-2.12 
#362315"
-               EPATCH_EXCLUDE+=" 10_all_default-fortify-source.patch"
-       fi
-
-       toolchain_src_prepare
-
-       if use elibc_musl || [[ ${CATEGORY} = cross-*-musl* ]]; then
-               cd "${S}"
-               sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
-               mv libstdc\+\+-v3/config/os/gnu-linux 
libstdc\+\+-v3/config/os/gnu-linux.org
-               cp -r libstdc\+\+-v3/config/os/generic 
libstdc\+\+-v3/config/os/gnu-linux
-               cp libstdc++-v3/config/os/gnu-linux.org/arm-eabi-extra.ver 
libstdc++-v3/config/os/gnu-linux/
-               mv libitm/config/linux/x86 libitm/config/linux/x86_glibc
-               cp -r libitm/config/generic libitm/config/linux/x86
-               epatch "${FILESDIR}"/${PN}-4.9.3-musl-linker-path.patch
-               epatch "${FILESDIR}"/${PN}-4.9.3-secure-plt.patch
-               epatch "${FILESDIR}"/${PN}-4.9.3-musl-res_state.patch
-               epatch "${FILESDIR}"/${PN}-4.8.3-musl-fix-libc5-assumption.patch
-               epatch "${FILESDIR}"/${PN}-4.8.5-posix_memalign.patch
-               epatch 
"${FILESDIR}"/${PN}-4.9.3-tree-vect-data-refs-correctness.patch
-       fi
-
-       use vanilla && return 0
-       #Use -r1 for newer piepatchet that use DRIVER_SELF_SPECS for the 
hardened specs.
-       [[ ${CHOST} == ${CTARGET} ]] && epatch 
"${FILESDIR}"/gcc-spec-env-r1.patch
-}

diff --git a/sys-devel/gcc/gcc-7.2.0-r1.ebuild 
b/sys-devel/gcc/gcc-7.2.0-r1.ebuild
deleted file mode 100644
index 7dd6ca3..0000000
--- a/sys-devel/gcc/gcc-7.2.0-r1.ebuild
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 1999-2018 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI="5"
-
-PATCH_VER="1.1"
-#UCLIBC_VER="1.0"
-
-inherit epatch toolchain
-
-KEYWORDS="~amd64 ~arm ~mips ~ppc ~x86"
-
-RDEPEND=""
-DEPEND="${RDEPEND}
-       elibc_glibc? ( >=sys-libs/glibc-2.13 )
-       >=${CATEGORY}/binutils-2.20"
-
-if [[ ${CATEGORY} != cross-* ]] ; then
-       PDEPEND="${PDEPEND} elibc_glibc? ( >=sys-libs/glibc-2.13 )"
-fi
-
-src_prepare() {
-       toolchain_src_prepare
-
-       epatch "${FILESDIR}"/gcc-7.2.0-pr69728.patch
-
-       if use elibc_musl || [[ ${CATEGORY} = cross-*-musl* ]]; then
-               epatch "${FILESDIR}"/6.3.0/cpu_indicator.patch
-               epatch "${FILESDIR}"/7.1.0/posix_memalign.patch
-       fi
-}

diff --git a/sys-devel/gcc/gcc-7.2.0-r2.ebuild 
b/sys-devel/gcc/gcc-7.2.0-r2.ebuild
deleted file mode 100644
index 40df421..0000000
--- a/sys-devel/gcc/gcc-7.2.0-r2.ebuild
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright 1999-2018 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI="5"
-
-PATCH_VER="1.1"
-#UCLIBC_VER="1.0"
-
-inherit epatch toolchain
-
-# KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc 
~x86"
-
-RDEPEND=""
-DEPEND="${RDEPEND}
-       elibc_glibc? ( >=sys-libs/glibc-2.13 )
-       >=${CATEGORY}/binutils-2.20"
-
-if [[ ${CATEGORY} != cross-* ]] ; then
-       PDEPEND="${PDEPEND} elibc_glibc? ( >=sys-libs/glibc-2.13 )"
-fi
-
-src_prepare() {
-       toolchain_src_prepare
-
-       epatch "${FILESDIR}"/gcc-7.2.0-pr69728.patch
-
-       # Meltdown/Spectre
-       epatch 
"${FILESDIR}"/0001-gcc-7.2.0-move-struct-ix86_frame-to-machine-function.patch
-       epatch 
"${FILESDIR}"/0002-gcc-7.2.0-move-struct-ix86_frame-to-machine-function.patch
-
-       epatch "${FILESDIR}"/spectre-0001-mindirect-branch.patch
-       epatch "${FILESDIR}"/spectre-0002-mfunction-return.patch
-       epatch "${FILESDIR}"/spectre-0003-mindirect-branch-register.patch
-       epatch "${FILESDIR}"/spectre-0004-v-register-modifier.patch
-       epatch "${FILESDIR}"/spectre-0005-mcmodel-large.patch
-
-       if use elibc_musl || [[ ${CATEGORY} = cross-*-musl* ]]; then
-               epatch "${FILESDIR}"/6.3.0/cpu_indicator.patch
-               epatch "${FILESDIR}"/7.1.0/posix_memalign.patch
-       fi
-}

diff --git a/sys-devel/gcc/gcc-7.3.0-r1.ebuild 
b/sys-devel/gcc/gcc-7.3.0-r1.ebuild
deleted file mode 100644
index 7dd6ca3..0000000
--- a/sys-devel/gcc/gcc-7.3.0-r1.ebuild
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright 1999-2018 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI="5"
-
-PATCH_VER="1.1"
-#UCLIBC_VER="1.0"
-
-inherit epatch toolchain
-
-KEYWORDS="~amd64 ~arm ~mips ~ppc ~x86"
-
-RDEPEND=""
-DEPEND="${RDEPEND}
-       elibc_glibc? ( >=sys-libs/glibc-2.13 )
-       >=${CATEGORY}/binutils-2.20"
-
-if [[ ${CATEGORY} != cross-* ]] ; then
-       PDEPEND="${PDEPEND} elibc_glibc? ( >=sys-libs/glibc-2.13 )"
-fi
-
-src_prepare() {
-       toolchain_src_prepare
-
-       epatch "${FILESDIR}"/gcc-7.2.0-pr69728.patch
-
-       if use elibc_musl || [[ ${CATEGORY} = cross-*-musl* ]]; then
-               epatch "${FILESDIR}"/6.3.0/cpu_indicator.patch
-               epatch "${FILESDIR}"/7.1.0/posix_memalign.patch
-       fi
-}

Reply via email to