Index: libc/arch/mips32/_link.ld.in
===================================================================
--- libc/arch/mips32/_link.ld.in	(revision 07824fda7b0f391520ba09d63f6597347ecb1bb2)
+++ libc/arch/mips32/_link.ld.in	(revision 6122db1337183ff2105be372f08a9c5c884dc40c)
@@ -17,16 +17,23 @@
 		*(.rodata*);
 	} :text
-	
-	.data ALIGN(0x4000) : SUBALIGN(0x4000) {
+
+	.got ALIGN(0x4000) : SUBALIGN(0x4000) {
+		_gp = .;
+		*(.got);
+	} :data
+	.data : {
 		*(.data);
 	} :data
+	.sbss : {
+		*(.scommon);
+		*(.sbss);
+	}	
 	.bss : {
 		*(.bss);
-		*(.sbss);
 		*(COMMON);
 		_heap = .;
 		LONG(0xdeadbeef);
 	} :data
-	
+
 	/DISCARD/ : {
 		*(*);
Index: libc/arch/mips32/src/entry.s
===================================================================
--- libc/arch/mips32/src/entry.s	(revision 07824fda7b0f391520ba09d63f6597347ecb1bb2)
+++ libc/arch/mips32/src/entry.s	(revision 6122db1337183ff2105be372f08a9c5c884dc40c)
@@ -38,4 +38,5 @@
 #
 __entry:
+	lui $28, _gp
 
 	jal main
Index: libc/arch/mips32/src/thread_entry.s
===================================================================
--- libc/arch/mips32/src/thread_entry.s	(revision 07824fda7b0f391520ba09d63f6597347ecb1bb2)
+++ libc/arch/mips32/src/thread_entry.s	(revision 6122db1337183ff2105be372f08a9c5c884dc40c)
@@ -39,4 +39,6 @@
 #
 __thread_entry:
+	lui $28, _gp
+
 	#
 	# v0 contains address of uarg.
