diff --git a/toolchain/binutils/patches/2.20.1/310-backport_fPIE_mips_fix.patch b/toolchain/binutils/patches/2.20.1/310-backport_fPIE_mips_fix.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3a5dc6699c4d7bdced327869770c2e866a7fcb4b
--- /dev/null
+++ b/toolchain/binutils/patches/2.20.1/310-backport_fPIE_mips_fix.patch
@@ -0,0 +1,15 @@
+--- a/bfd/elfxx-mips.c
++++ b/bfd/elfxx-mips.c
+@@ -5696,9 +5696,9 @@ mips_elf_create_dynamic_relocation (bfd 
+ 
+   /* We must now calculate the dynamic symbol table index to use
+      in the relocation.  */
+-  if (h != NULL
+-      && (!h->root.def_regular
+-	  || (info->shared && !info->symbolic && !h->root.forced_local)))
++  if (!(h == NULL
++	|| (h->root.def_regular
++	    && (info->executable || info->symbolic || h->root.forced_local))))
+     {
+       indx = h->root.dynindx;
+       if (SGI_COMPAT (output_bfd))