Index: libc/arch/amd64/Makefile.inc
===================================================================
--- libc/arch/amd64/Makefile.inc	(revision 8f9239ebad9a642cbc47a08b8f7cd3702bffb85c)
+++ libc/arch/amd64/Makefile.inc	(revision a3aa1e1b1d5edb3949569526f9b009e35e1014b7)
@@ -34,2 +34,4 @@
 
 ARCH_SOURCES += arch/$(ARCH)/src/syscall.S
+
+LFLAGS += -N
Index: libc/arch/amd64/_link.ld.in
===================================================================
--- libc/arch/amd64/_link.ld.in	(revision 8f9239ebad9a642cbc47a08b8f7cd3702bffb85c)
+++ libc/arch/amd64/_link.ld.in	(revision a3aa1e1b1d5edb3949569526f9b009e35e1014b7)
@@ -3,22 +3,29 @@
 
 PHDRS {
-	image PT_LOAD AT (0x1000);
+	text PT_LOAD FLAGS(5);
+	data PT_LOAD FLAGS(6);
 }
 
 SECTIONS {
 	. = 0x1000;
-	.image ALIGN(0x1000) : {
+	
+	.init ALIGN(0x1000) : SUBALIGN(0x1000) {
+		*(.init);
+	} :text
+	.text : {
 		*(.text);
-		*(.data);               /* initialized data */
-		*(.rodata*);            /* string literals */
-		*(COMMON);              /* global variables */
-		*(.eh_frame);
-		*(.bss);                /* uninitialized static variables */
-	} :image
-
+		*(.rodata*);
+	} :text
+	
+	.data ALIGN(0x1000) : SUBALIGN(0x1000) {
+		*(.data);
+	} :data
+	.bss : {
+		*(COMMON);
+		*(.bss);
+	} :data
 
 	/DISCARD/ : {
-		*(.note.GNU-stack);
-		*(.comment);
+		*(*);
 	}
 
Index: libc/arch/amd64/src/entry.s
===================================================================
--- libc/arch/amd64/src/entry.s	(revision 8f9239ebad9a642cbc47a08b8f7cd3702bffb85c)
+++ libc/arch/amd64/src/entry.s	(revision a3aa1e1b1d5edb3949569526f9b009e35e1014b7)
@@ -27,5 +27,5 @@
 #
 
-.text
+.section .init, "ax"
 
 .org 0
Index: libc/arch/ia32/Makefile.inc
===================================================================
--- libc/arch/ia32/Makefile.inc	(revision 8f9239ebad9a642cbc47a08b8f7cd3702bffb85c)
+++ libc/arch/ia32/Makefile.inc	(revision a3aa1e1b1d5edb3949569526f9b009e35e1014b7)
@@ -34,2 +34,4 @@
 
 ARCH_SOURCES += arch/$(ARCH)/src/syscall.c
+
+LFLAGS += -N
Index: libc/arch/ia32/_link.ld.in
===================================================================
--- libc/arch/ia32/_link.ld.in	(revision 8f9239ebad9a642cbc47a08b8f7cd3702bffb85c)
+++ libc/arch/ia32/_link.ld.in	(revision a3aa1e1b1d5edb3949569526f9b009e35e1014b7)
@@ -3,21 +3,29 @@
 
 PHDRS {
-        image PT_LOAD AT (0x1000);
+        text PT_LOAD FLAGS(5);
+	data PT_LOAD FLAGS(6);
 }
 
 SECTIONS {
+	. = 0x1000;
+
+	.init ALIGN(0x1000) : SUBALIGN(0x1000) {
+		*(.init);
+	} :text
+	.text : {
+		*(.text);
+                *(.rodata*);
+	} :text
 	
-	. = 0x1000;
-	.image 0x00001000 : {
-		*(.text);
-                *(.data);                       /* initialized data */
-                *(.rodata*);                    /* string literals */
-                *(COMMON);                      /* global variables */
-                *(.bss);                        /* uninitialized static variables */
-	} :image
+	.data ALIGN(0x1000) : SUBALIGN(0x1000) {
+		*(.data);
+	} :data
+	.bss : {
+                *(COMMON);
+                *(.bss);
+	} :data
 	
 	/DISCARD/ : {
-		*(.note.GNU-stack);
-		*(.comment);
+		*(*);
 	}
 
Index: libc/arch/ia32/src/entry.s
===================================================================
--- libc/arch/ia32/src/entry.s	(revision 8f9239ebad9a642cbc47a08b8f7cd3702bffb85c)
+++ libc/arch/ia32/src/entry.s	(revision a3aa1e1b1d5edb3949569526f9b009e35e1014b7)
@@ -27,5 +27,5 @@
 #
 
-.text
+.section .init, "ax"
 
 .org 0
Index: libc/arch/ia64/_link.ld.in
===================================================================
--- libc/arch/ia64/_link.ld.in	(revision 8f9239ebad9a642cbc47a08b8f7cd3702bffb85c)
+++ libc/arch/ia64/_link.ld.in	(revision a3aa1e1b1d5edb3949569526f9b009e35e1014b7)
@@ -1,23 +1,39 @@
-OUTPUT_FORMAT(elf64-ia64-little)
 STARTUP(../libc/arch/ARCH/src/entry.o)
 ENTRY(__entry)
 
+PHDRS {
+	text PT_LOAD FLAGS(5);
+	data PT_LOAD FLAGS(6);
+}
+
 SECTIONS {
-	.text 0x00010000 : {
-		*(.text)
-		*(.rodata .rodata.*)
-		*(.opd)
-		*(.data)
-		*(.got .got.*)
-		*(.sdata)
-		*(.sbss)
-		*(.scommon)
-		*(.bss)
+	. = 0x4000;
+
+	.init ALIGN(0x4000): SUBALIGN(0x4000) {
+		*(.init);
+	} : text
+	.text : {
+		*(.text);
+		*(.rodata*);
+	} :text
+
+	.got ALIGN(0x4000) : SUBALIGN(0x4000) {
+		*(.got*);
+	} :data	
+	.data : {
+		_gp = .;
+		*(.opd);
+		*(.data);
+		*(.sdata);
+	} :data
+	.bss : {
+		*(.sbss);
+		*(.scommon);
 		*(COMMON);
-	}
+		*(.bss);
+	} :data
  
 	/DISCARD/ : {
-		*(.note.GNU-stack);
-		*(.comment);
+		*(*);
         }
 }
Index: libc/arch/ia64/src/entry.s
===================================================================
--- libc/arch/ia64/src/entry.s	(revision 8f9239ebad9a642cbc47a08b8f7cd3702bffb85c)
+++ libc/arch/ia64/src/entry.s	(revision a3aa1e1b1d5edb3949569526f9b009e35e1014b7)
@@ -27,5 +27,5 @@
 #
 
-.text
+.section .init, "ax"
 
 .org 0
@@ -37,5 +37,5 @@
 #
 __entry:
-	mov r1 = __entry
+	mov r1 = _gp 
 	{ br.call.sptk.many b0 = main }
 	{ br.call.sptk.many b0 = __exit }
Index: libc/arch/mips32/_link.ld.in
===================================================================
--- libc/arch/mips32/_link.ld.in	(revision 8f9239ebad9a642cbc47a08b8f7cd3702bffb85c)
+++ libc/arch/mips32/_link.ld.in	(revision a3aa1e1b1d5edb3949569526f9b009e35e1014b7)
@@ -2,21 +2,29 @@
 ENTRY(__entry)
 
+PHDRS {
+	text PT_LOAD FLAGS(5);
+	data PT_LOAD FLAGS(6);
+}
+
 SECTIONS {
 	. = 0x4000;
-	.init : SUBALIGN(0x4000) {
+	
+	.init ALIGN(0x4000) : SUBALIGN(0x4000) {
 		*(.init);
-	}
+	} :text
 	.text : {
 	        *(.text);
 		*(.rodata*);
-	}
-	.data ALIGN(0x4000) :  {
+	} :text
+	
+	.data ALIGN(0x4000) : SUBALIGN(0x4000) {
 		*(.data);
-	}
+	} :data
 	.bss : {
 		*(.bss);
 		*(.sbss);
 		*(COMMON);
-	}
+	} :data
+	
 	/DISCARD/ : {
 		*(*);
