aboutsummaryrefslogtreecommitdiff
path: root/deps/gcc-4.9.4-naked.patch
diff options
context:
space:
mode:
authorToni Uhlig <matzeton@googlemail.com>2020-05-24 16:48:22 +0200
committerToni Uhlig <matzeton@googlemail.com>2020-05-25 21:57:14 +0200
commit31c69b6ca1b91e7fd9fd8e14082fd2584c5f538c (patch)
tree16e789c7d68608831b498f41f54d9482b82a711a /deps/gcc-4.9.4-naked.patch
first public release
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'deps/gcc-4.9.4-naked.patch')
-rw-r--r--deps/gcc-4.9.4-naked.patch66
1 files changed, 66 insertions, 0 deletions
diff --git a/deps/gcc-4.9.4-naked.patch b/deps/gcc-4.9.4-naked.patch
new file mode 100644
index 0000000..c3c7e74
--- /dev/null
+++ b/deps/gcc-4.9.4-naked.patch
@@ -0,0 +1,66 @@
+diff -Naur gcc-4.9.4-orig/gcc/config/i386/i386.c gcc-4.9.4/gcc/config/i386/i386.c
+--- gcc-4.9.4-orig/gcc/config/i386/i386.c
++++ gcc-4.9.4/gcc/config/i386/i386.c
+@@ -6041,6 +6041,14 @@
+ return false;
+ }
+
++static bool
++ix86_function_naked (const_tree fn)
++{
++ if (fn && lookup_attribute ("naked", DECL_ATTRIBUTES (fn)))
++ return true;
++ return false;
++}
++
+ static enum calling_abi
+ ix86_function_abi (const_tree fndecl)
+ {
+@@ -9078,6 +9086,9 @@
+ {
+ struct ix86_frame frame;
+
++ if (ix86_function_naked (current_function_decl))
++ return false;
++
+ if (! reload_completed || frame_pointer_needed)
+ return 0;
+
+@@ -9090,7 +9101,7 @@
+ return (frame.stack_pointer_offset == UNITS_PER_WORD
+ && (frame.nregs + frame.nsseregs) == 0);
+ }
+-
++
+ /* Value should be nonzero if functions must have frame pointers.
+ Zero means the frame pointer need not be set up (and parms may
+ be accessed via the stack pointer) in functions that seem suitable. */
+@@ -10753,6 +10764,9 @@
+ bool int_registers_saved;
+ bool sse_registers_saved;
+
++ if (ix86_function_naked (current_function_decl))
++ return;
++
+ ix86_finalize_stack_realign_flags ();
+
+ /* DRAP should not coexist with stack_realign_fp */
+@@ -11459,6 +11473,9 @@
+ bool restore_regs_via_mov;
+ bool using_drap;
+
++ if (ix86_function_naked (current_function_decl))
++ return;
++
+ ix86_finalize_stack_realign_flags ();
+ ix86_compute_frame_layout (&frame);
+
+@@ -42414,6 +42431,8 @@
+ false },
+ { "callee_pop_aggregate_return", 1, 1, false, true, true,
+ ix86_handle_callee_pop_aggregate_return, true },
++ { "naked", 0, 0, true, false, false,
++ ix86_handle_fndecl_attribute, false },
+ /* End element. */
+ { NULL, 0, 0, false, false, false, NULL, false }
+ };