toolchain: gcc: add gcc 5.2.0
[openwrt/svn-archive/archive.git] / toolchain / gcc / patches / 5.2.0 / 020-no-plt-backport.patch
diff --git a/toolchain/gcc/patches/5.2.0/020-no-plt-backport.patch b/toolchain/gcc/patches/5.2.0/020-no-plt-backport.patch
new file mode 100644 (file)
index 0000000..b9702c9
--- /dev/null
@@ -0,0 +1,28 @@
+--- a/gcc/calls.c
++++ b/gcc/calls.c
+@@ -225,6 +225,12 @@ prepare_call_address (tree fndecl_or_typ
+              && targetm.small_register_classes_for_mode_p (FUNCTION_MODE))
+             ? force_not_mem (memory_address (FUNCTION_MODE, funexp))
+             : memory_address (FUNCTION_MODE, funexp));
++  else if (flag_pic && !flag_plt && fndecl_or_type
++         && TREE_CODE (fndecl_or_type) == FUNCTION_DECL
++         && !targetm.binds_local_p (fndecl_or_type))
++    {
++      funexp = force_reg (Pmode, funexp);
++    }
+   else if (! sibcallp)
+     {
+ #ifndef NO_FUNCTION_CSE
+--- a/gcc/common.opt
++++ b/gcc/common.opt
+@@ -1779,6 +1779,10 @@ fpie
+ Common Report Var(flag_pie,1) Negative(fPIC)
+ Generate position-independent code for executables if possible (small mode)
++fplt
++Common Report Var(flag_plt) Init(1)
++Use PLT for PIC calls (-fno-plt: load the address from GOT at call site)
++
+ fplugin=
+ Common Joined RejectNegative Var(common_deferred_options) Defer
+ Specify a plugin to load