Index: uspace/Makefile.common
===================================================================
--- uspace/Makefile.common	(revision 4ddbea735b086f2aee46396b84af11409e883218)
+++ uspace/Makefile.common	(revision 729f774f860bfd8dc1a857e7bc279ff2a55a959a)
@@ -101,5 +101,5 @@
 BASE_LIBS = $(LIBC_PREFIX)/libc.so.0 $(LIBSOFTINT_PREFIX)/libsoftint.a
 LFLAGS = -Bdynamic
-LINKER_SCRIPT ?= $(LIBC_PREFIX)/shared/arch/$(UARCH)/_link.ld
+LINKER_SCRIPT ?= $(LIBC_PREFIX)/arch/$(UARCH)/_link-dlexe.ld
 else
 BASE_LIBS = $(LIBC_PREFIX)/libc.a $(LIBSOFTINT_PREFIX)/libsoftint.a
@@ -217,6 +217,6 @@
 endif
 
-$(LOUTPUT): $(LARCHIVE) $(LIBC_PREFIX)/shared/arch/$(UARCH)/_lib.ld
-	$(LD) -T $(LIBC_PREFIX)/shared/arch/$(UARCH)/_lib.ld $(LIB_LFLAGS) $(LARCHIVE) -o $@ -Map $(LOUTPUT).map
+$(LOUTPUT): $(LARCHIVE) $(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld
+	$(LD) -T $(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld $(LIB_LFLAGS) $(LARCHIVE) -o $@ -Map $(LOUTPUT).map
 endif
 
Index: uspace/lib/c/Makefile
===================================================================
--- uspace/lib/c/Makefile	(revision 4ddbea735b086f2aee46396b84af11409e883218)
+++ uspace/lib/c/Makefile	(revision 729f774f860bfd8dc1a857e7bc279ff2a55a959a)
@@ -44,5 +44,7 @@
 LINKER_SCRIPTS = \
 	$(LIBC_PREFIX)/arch/$(UARCH)/_link.ld \
-	$(LIBC_PREFIX)/arch/$(UARCH)/_link-loader.ld
+	$(LIBC_PREFIX)/arch/$(UARCH)/_link-loader.ld \
+	$(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld \
+	$(LIBC_PREFIX)/arch/$(UARCH)/_link-dlexe.ld
 
 PRE_DEPEND = $(INCLUDE_KERNEL) $(INCLUDE_ARCH) $(INCLUDE_LIBARCH) $(INCLUDE_RTLDARCH) $(COMMON_HEADER_ARCH)
@@ -159,4 +161,10 @@
 	$(GCC) $(DEFS) $(CFLAGS) -DLIBC_PATH=$(CURDIR) -DLOADER -E -x c $< | grep -v "^\#" > $@
 
+$(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld: $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld.in
+	$(GCC) $(DEFS) $(CFLAGS) -DLIBC_PATH=$(CURDIR) -DSHLIB -E -x c $< | grep -v "^\#" > $@
+
+$(LIBC_PREFIX)/arch/$(UARCH)/_link-dlexe.ld: $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld.in
+	$(GCC) $(DEFS) $(CFLAGS) -DLIBC_PATH=$(CURDIR) -DDLEXE -E -x c $< | grep -v "^\#" > $@
+
 $(COMMON_HEADER_ARCH): $(COMMON_HEADER)
 	ln -sfn ../../../$< $@
Index: uspace/lib/c/arch/ia32/_link.ld.in
===================================================================
--- uspace/lib/c/arch/ia32/_link.ld.in	(revision 4ddbea735b086f2aee46396b84af11409e883218)
+++ uspace/lib/c/arch/ia32/_link.ld.in	(revision 729f774f860bfd8dc1a857e7bc279ff2a55a959a)
@@ -1,22 +1,31 @@
+#ifndef SHLIB
 STARTUP(LIBC_PATH/arch/UARCH/src/entry.o)
 ENTRY(__entry)
+#endif
 
 PHDRS {
-#ifdef LOADER
+#if defined(LOADER)
 	interp PT_INTERP;
 	text PT_LOAD FILEHDR PHDRS FLAGS(5);
+#elif defined(DLEXE)
+	interp PT_INTERP;
+	text PT_LOAD FLAGS(5);
 #else
 	text PT_LOAD FLAGS(5);
 #endif
 	data PT_LOAD FLAGS(6);
+#if defined(SHLIB) || defined(DLEXE)
+	dynamic PT_DYNAMIC;
+#endif
 	debug PT_NOTE;
 }
 
 SECTIONS {
-#ifdef LOADER
+#if defined(LOADER) || defined(DLEXE)
 	.interp : {
 		*(.interp);
 	} :interp
-
+#endif
+#ifdef LOADER
 	. = 0x70001000 + SIZEOF_HEADERS;
 #else
@@ -31,6 +40,36 @@
 		*(.rodata .rodata.*);
 	} :text
+
+#if defined(SHLIB) || defined(DLEXE)
+	.rel.plt : {
+		*(.rel.plt);
+	}
+	/* 
+	 *.rel.dyn MUST FOLLOW IMMEDIATELY after .rel.plt 
+	 * without alignment gap or DT_REL will be broken
+	 */
+	.rel.dyn : {
+		*(.rel.*);
+	} :text
 	
+	.plt : {
+		*(.plt);
+	} :text
+	
+	.dynsym : {
+		*(.dynsym);
+	} :text
+	
+	.dynstr : {
+		*(.dynstr);
+	} :text
+#endif
 	. = . + 0x1000;
+	
+#if defined(SHLIB) || defined(DLEXE)
+	.dynamic : {
+		*(.dynamic);
+	} :data :dynamic
+#endif
 	
 	.data : {
@@ -38,4 +77,18 @@
 	} :data
 	
+#if defined(SHLIB) || defined(DLEXE)
+	.data.rel : {
+                *(.data.rel);
+	} :data
+
+	.got : {
+                *(.got);
+	} :data
+	.got.plt : {
+                *(.got.plt);
+	} :data
+#endif
+	
+#ifndef DLEXE
 	.tdata : {
 		_tdata_start = .;
@@ -49,4 +102,5 @@
 	
 	_tls_alignment = ALIGNOF(.tdata);
+#endif
 	
 	.bss : {
@@ -68,6 +122,13 @@
 #endif
 	
+#if defined(SHLIB)
+#elif defined(DLEXE)
+	/DISCARD/ : {
+		*(.comment);
+	}
+#else
 	/DISCARD/ : {
 		*(*);
 	}
+#endif
 }
Index: uspace/lib/c/arch/mips32/_link.ld.in
===================================================================
--- uspace/lib/c/arch/mips32/_link.ld.in	(revision 4ddbea735b086f2aee46396b84af11409e883218)
+++ uspace/lib/c/arch/mips32/_link.ld.in	(revision 729f774f860bfd8dc1a857e7bc279ff2a55a959a)
@@ -1,21 +1,30 @@
+#ifndef SHLIB
 STARTUP(LIBC_PATH/arch/UARCH/src/entry.o)
 ENTRY(__entry)
+#endif
 
 PHDRS {
-#ifdef LOADER
+#if defined(LOADER)
 	interp PT_INTERP;
 	text PT_LOAD FILEHDR PHDRS FLAGS(5);
+#elif defined(DLEXE)
+	interp PT_INTERP;
+	text PT_LOAD FLAGS(5);
 #else
 	text PT_LOAD FLAGS(5);
 #endif
 	data PT_LOAD FLAGS(6);
+#if defined(SHLIB) || defined(DLEXE)
+	dynamic PT_DYNAMIC;
+#endif
 }
 
 SECTIONS {
-#ifdef LOADER
+#if defined(LOADER) || defined(DLEXE)
 	.interp : {
 		*(.interp);
 	} :interp
-	
+#endif
+#ifdef LOADER
 	. = 0x70004000 + SIZEOF_HEADERS;
 #else
@@ -31,5 +40,35 @@
 	} :text
 	
+#if defined(SHLIB) || defined(DLEXE)
+	.rel.plt : {
+		*(.rel.plt);
+	}
+	/* 
+	 *.rel.dyn MUST FOLLOW IMMEDIATELY after .rel.plt 
+	 * without alignment gap or DT_REL will be broken
+	 */
+	.rel.dyn : {
+		*(.rel.*);
+	} :text
+	
+	.plt : {
+		*(.plt);
+	} :text
+	
+	.dynsym : {
+		*(.dynsym);
+	} :text
+	
+	.dynstr : {
+		*(.dynstr);
+	} :text
+#endif
 	. = . + 0x4000;
+	
+#if defined(SHLIB) || defined(DLEXE)
+	.dynamic : {
+		*(.dynamic);
+	} :data :dynamic
+#endif
 	
 	.data : {
@@ -43,4 +82,5 @@
 	} :data
 	
+#ifndef DLEXE
 	.tdata : {
 		_tdata_start = .;
@@ -56,5 +96,5 @@
 	
 	_tls_alignment = MAX(ALIGNOF(.tdata), ALIGNOF(.tbss));
-	
+#endif
 	.sbss : {
 		*(.scommon);
@@ -67,6 +107,13 @@
 	} :data
 	
+#if defined(SHLIB)
+#elif defined(DLEXE)
+	/DISCARD/ : {
+		*(.comment);
+	}
+#else
 	/DISCARD/ : {
 		*(*);
 	}
+#endif
 }
Index: uspace/lib/c/arch/ppc32/_link.ld.in
===================================================================
--- uspace/lib/c/arch/ppc32/_link.ld.in	(revision 4ddbea735b086f2aee46396b84af11409e883218)
+++ uspace/lib/c/arch/ppc32/_link.ld.in	(revision 729f774f860bfd8dc1a857e7bc279ff2a55a959a)
@@ -1,21 +1,30 @@
+#ifndef SHLIB
 STARTUP(LIBC_PATH/arch/UARCH/src/entry.o)
 ENTRY(__entry)
+#endif
 
 PHDRS {
-#ifdef LOADER
+#if defined(LOADER)
 	interp PT_INTERP;
 	text PT_LOAD FILEHDR PHDRS FLAGS(5);
+#elif defined(DLEXE)
+	interp PT_INTERP;
+	text PT_LOAD FLAGS(5);
 #else
 	text PT_LOAD FLAGS(5);
 #endif
 	data PT_LOAD FLAGS(6);
+#if defined(SHLIB) || defined(DLEXE)
+	dynamic PT_DYNAMIC;
+#endif
 }
 
 SECTIONS {
-#ifdef LOADER
+#if defined(LOADER) || defined(DLEXE)
 	.interp : {
 		*(.interp);
 	} :interp
-	
+#endif
+#ifdef LOADER
 	. = 0x70001000 + SIZEOF_HEADERS;
 #else
@@ -31,5 +40,35 @@
 	} :text
 	
+#if defined(SHLIB) || defined(DLEXE)
+	.rel.plt : {
+		*(.rel.plt);
+	}
+	/* 
+	 *.rel.dyn MUST FOLLOW IMMEDIATELY after .rel.plt 
+	 * without alignment gap or DT_REL will be broken
+	 */
+	.rel.dyn : {
+		*(.rel.*);
+	} :text
+	
+	.plt : {
+		*(.plt);
+	} :text
+	
+	.dynsym : {
+		*(.dynsym);
+	} :text
+	
+	.dynstr : {
+		*(.dynstr);
+	} :text
+#endif
 	. = . + 0x1000;
+	
+#if defined(SHLIB) || defined(DLEXE)
+	.dynamic : {
+		*(.dynamic);
+	} :data :dynamic
+#endif
 	
 	.data : {
@@ -38,4 +77,18 @@
 	} :data
 	
+#if defined(SHLIB) || defined(DLEXE)
+	.data.rel : {
+                *(.data.rel);
+	} :data
+	
+	.got : {
+                *(.got);
+	} :data
+	.got.plt : {
+                *(.got.plt);
+	} :data
+#endif
+	
+#ifndef DLEXE
 	.tdata : {
 		_tdata_start = .;
@@ -48,4 +101,5 @@
 	
 	_tls_alignment = ALIGNOF(.tdata);
+#endif
 	
 	.bss : {
@@ -55,6 +109,13 @@
 	} :data
 	
+#if defined(SHLIB)
+#elif defined(DLEXE)
+	/DISCARD/ : {
+		*(.comment);
+	}
+#else
 	/DISCARD/ : {
 		*(*);
 	}
+#endif
 }
Index: pace/lib/c/shared/arch/ia32/_lib.ld.in
===================================================================
--- uspace/lib/c/shared/arch/ia32/_lib.ld.in	(revision 4ddbea735b086f2aee46396b84af11409e883218)
+++ 	(revision )
@@ -1,95 +1,0 @@
-ENTRY(__entry)
-
-PHDRS {
-        text PT_LOAD FLAGS(5);
-	data PT_LOAD FLAGS(6);
-	dynamic PT_DYNAMIC;
-}
-
-SECTIONS {
-	. = 0x1000 + SIZEOF_HEADERS;
-
-	.init : {
-		*(.init);
-	} :text
-	.text : {
-		*(.text);
-		*(.text.*);
-		*(.rodata*);
-	} :text
-
-	.rel.plt : {
-		*(.rel.plt);
-	}
-	/* 
-	 *.rel.dyn MUST FOLLOW IMMEDIATELY after .rel.plt 
-	 * without alignment gap or DT_REL will be broken
-	 */
-	.rel.dyn : {
-		*(.rel.*);
-	} :text
-
-	.plt : {
-		*(.plt);
-	} :text
-
-	.dynsym : {
-		*(.dynsym);
-	} :text
-
-	.dynstr : {
-		*(.dynstr);
-	} :text
-
-	. = . + 0x1000;
-
-	.dynamic : {
-		*(.dynamic);
-	} :data :dynamic
-
-	.data : {
-		*(.data);
-	} :data
-
-	.data.rel : {
-                *(.data.rel);
-	} :data
-
-	.got : {
-                *(.got);
-	} :data
-	.got.plt : {
-                *(.got.plt);
-	} :data
-
-	.bss : {
-                *(COMMON);
-                *(.bss);
-	} :data
-
-	.tdata : {
-		_tdata_start = .;
-		*(.tdata);
-		*(.gnu.linkonce.tb.*);
-		_tdata_end = .;
-		_tbss_start = .;
-		*(.tbss);
-		_tbss_end = .;
-	} :data
-	_tls_alignment = ALIGNOF(.tdata);
-
-#ifdef CONFIG_LINE_DEBUG
-	.comment 0 : { *(.comment); } :debug
-	.debug_abbrev 0 : { *(.debug_abbrev); } :debug
-	.debug_aranges 0 : { *(.debug_aranges); } :debug
-	.debug_info 0 : { *(.debug_info); } :debug
-	.debug_line 0 : { *(.debug_line); } :debug
-	.debug_loc 0 : { *(.debug_loc); } :debug
-	.debug_pubnames 0 : { *(.debug_pubnames); } :debug
-	.debug_pubtypes 0 : { *(.debug_pubtypes); } :debug
-	.debug_ranges 0 : { *(.debug_ranges); } :debug
-	.debug_str 0 : { *(.debug_str); } :debug
-#endif
-	. = ALIGN(0x1000);
-	_heap = .;
-}
Index: pace/lib/c/shared/arch/ia32/_link.ld.in
===================================================================
--- uspace/lib/c/shared/arch/ia32/_link.ld.in	(revision 4ddbea735b086f2aee46396b84af11409e883218)
+++ 	(revision )
@@ -1,106 +1,0 @@
-STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o)
-ENTRY(__entry)
-
-PHDRS {
-        text PT_LOAD FLAGS(5);
-	interp PT_INTERP;
-	data PT_LOAD FLAGS(6);
-	dynamic PT_DYNAMIC;
-}
-
-SECTIONS {
-	. = 0x1000 + SIZEOF_HEADERS;
-
-	.interp : {
-		*(.interp);
-	} :interp
-
-	.init : {
-		*(.init);
-	} :text
-	.text : {
-		*(.text);
-		*(.text.*);
-		*(.rodata*);
-	} :text
-
-	.rel.plt : {
-		*(.rel.plt);
-	}
-	/* 
-	 *.rel.dyn MUST FOLLOW IMMEDIATELY after .rel.plt 
-	 * without alignment gap or DT_REL will be broken
-	 */
-	.rel.dyn : {
-		*(.rel.*);
-	} :text
-
-	.plt : {
-		*(.plt);
-	} :text
-
-	.dynsym : {
-		*(.dynsym);
-	} :text
-
-	.dynstr : {
-		*(.dynstr);
-	} :text
-
-	. = . + 0x1000;
-
-	.dynamic : {
-		*(.dynamic);
-	} :data :dynamic
-
-	.data : {
-		*(.data);
-	} :data
-
-	.data.rel : {
-                *(.data.rel);
-	} :data
-
-	.got : {
-                *(.got);
-	} :data
-	.got.plt : {
-                *(.got.plt);
-	} :data
-
-	.bss : {
-                *(COMMON);
-                *(.bss);
-	} :data
-
-/*	.tdata : {
-		_tdata_start = .;
-		*(.tdata);
-		*(.gnu.linkonce.tb.*);
-		_tdata_end = .;
-		_tbss_start = .;
-		*(.tbss);
-		_tbss_end = .;
-	} :data
-	_tls_alignment = ALIGNOF(.tdata);
-*/
-
-#ifdef CONFIG_LINE_DEBUG
-	.comment 0 : { *(.comment); } :debug
-	.debug_abbrev 0 : { *(.debug_abbrev); } :debug
-	.debug_aranges 0 : { *(.debug_aranges); } :debug
-	.debug_info 0 : { *(.debug_info); } :debug
-	.debug_line 0 : { *(.debug_line); } :debug
-	.debug_loc 0 : { *(.debug_loc); } :debug
-	.debug_pubnames 0 : { *(.debug_pubnames); } :debug
-	.debug_pubtypes 0 : { *(.debug_pubtypes); } :debug
-	.debug_ranges 0 : { *(.debug_ranges); } :debug
-	.debug_str 0 : { *(.debug_str); } :debug
-#endif
-	/DISCARD/ : {
-		*(.comment);
-	}
-
-	. = ALIGN(0x1000);
-	_heap = .;
-}
Index: pace/lib/c/shared/arch/mips32/_lib.ld.in
===================================================================
--- uspace/lib/c/shared/arch/mips32/_lib.ld.in	(revision 4ddbea735b086f2aee46396b84af11409e883218)
+++ 	(revision )
@@ -1,98 +1,0 @@
-ENTRY(__entry)
-
-PHDRS {
-	text PT_LOAD FLAGS(5);
-	data PT_LOAD FLAGS(6);
-	dynamic PT_DYNAMIC;
-}
-
-SECTIONS {
-	. = 0x4000 + SIZEOF_HEADERS;
-	
-	.init : {
-		*(.init);
-	} :text
-	.text : {
-	        *(.text);
-		*(.rodata*);
-		*(.MIPS.stubs);
-	} :text
-	
-	.hash : {
-		*(.hash);
-	} : text
-	
-	.reginfo : {
-		*(.reginfo);
-	} : text
-	
-	.rel.plt : {
-		*(.rel.plt);
-	} : text
-	/* 
-	 *.rel.dyn MUST FOLLOW IMMEDIATELY after .rel.plt 
-	 * without alignment gap or DT_REL will be broken
-	 */
-	.rel.dyn : {
-		*(.rel.*);
-	} :text
-	
-	.plt : {
-		*(.plt);
-	} : text
-	
-	.dynsym : {
-		*(.dynsym);
-	} : text
-	
-	.dynstr : {
-		*(.dynstr);
-	} : text
-	
-	. = . + 0x4000;
-	
-	.dynamic : {
-		*(.dynamic);
-	} :data :dynamic
-	
-	.data : {
-		*(.data);
-		*(.data.rel*);
-	} :data
-	
-	.got : {
-		_gp = .;
-		*(.got);
-	} :data
-	
-	.tdata : {
-		_tdata_start = .;
-		*(.tdata);
-		_tdata_end = .;
-	} :data
-	
-	.tbss : {
-		_tbss_start = .;
-		*(.tbss);
-		_tbss_end = .;
-	} :data
-	
-	_tls_alignment = MAX(ALIGNOF(.tdata), ALIGNOF(.tbss));
-	
-	.sbss : {
-		*(.scommon);
-		*(.sbss);
-	}
-	
-	.bss : {
-		*(.bss);
-		*(COMMON);
-	} :data
-	
-	. = ALIGN(0x4000);
-	_heap = .;
-
-/*	/DISCARD/ : {
-		*(*);
-	}*/
-}
Index: pace/lib/c/shared/arch/mips32/_link.ld.in
===================================================================
--- uspace/lib/c/shared/arch/mips32/_link.ld.in	(revision 4ddbea735b086f2aee46396b84af11409e883218)
+++ 	(revision )
@@ -1,109 +1,0 @@
-STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o)
-ENTRY(__entry)
-
-PHDRS {
-	interp PT_INTERP;
-	text PT_LOAD FLAGS(5);
-	data PT_LOAD FLAGS(6);
-	dynamic PT_DYNAMIC;
-}
-
-SECTIONS {
-	. = 0x4000 + SIZEOF_HEADERS;
-	
-	.interp : {
-		*(.interp);
-	} :text :interp
-
-	/* Align on word boundary -- instructions will follow. */
-	. = ALIGN(4);
-	
-	.init : {
-		*(.init);
-	} :text
-	.text : {
-	        *(.text);
-		*(.rodata*);
-		*(.MIPS.stubs);
-	} :text
-	
-	.hash : {
-		*(.hash);
-	} : text
-	
-	.reginfo : {
-		*(.reginfo);
-	} : text
-	
-	.rel.plt : {
-		*(.rel.plt);
-	} : text
-	/* 
-	 *.rel.dyn MUST FOLLOW IMMEDIATELY after .rel.plt 
-	 * without alignment gap or DT_REL will be broken
-	 */
-	.rel.dyn : {
-		*(.rel.*);
-	} :text
-
-	.plt : {
-		*(.plt);
-	} : text
-
-	.dynsym : {
-		*(.dynsym);
-	} : text
-
-	.dynstr : {
-		*(.dynstr);
-	} : text
-	
-	. = . + 0x4000;
-	
-	.dynamic : {
-		*(.dynamic);
-	} :data :dynamic
-	
-	.data : {
-		*(.data);
-		*(.data.rel*);
-	} :data
-	
-	.got : {
-		_gp = .;
-		*(.got);
-	} :data
-	
-/*
-	.tdata : {
-		_tdata_start = .;
-		*(.tdata);
-		_tdata_end = .;
-	} :data
-	
-	.tbss : {
-		_tbss_start = .;
-		*(.tbss);
-		_tbss_end = .;
-	} :data
-	
-	_tls_alignment = MAX(ALIGNOF(.tdata), ALIGNOF(.tbss));
-*/
-	
-	.sbss : {
-		*(.scommon);
-		*(.sbss);
-	}
-	
-	.bss : {
-		*(.bss);
-		*(COMMON);
-	} :data
-	
-	. = ALIGN(0x4000);
-	_heap = .;
-
-/*	/DISCARD/ : {
-		*(*);
-	}*/
-}
Index: pace/lib/c/shared/arch/ppc32/_lib.ld.in
===================================================================
--- uspace/lib/c/shared/arch/ppc32/_lib.ld.in	(revision 4ddbea735b086f2aee46396b84af11409e883218)
+++ 	(revision )
@@ -1,85 +1,0 @@
-ENTRY(__entry)
-
-PHDRS {
-	text PT_LOAD FLAGS(5);
-	data PT_LOAD FLAGS(6);
-	dynamic PT_DYNAMIC;
-}
-
-SECTIONS {
-	. = 0x1000 + SIZEOF_HEADERS;
-	
-	.init : {
-		*(.init);
-	} :text
-	.text : {
-		*(.text);
-		*(.text.*);
-		*(.rodata*);
-	} :text
-	
-	.rel.plt : {
-		*(.rel.plt);
-	}
-	/* 
-	 *.rel.dyn MUST FOLLOW IMMEDIATELY after .rel.plt 
-	 * without alignment gap or DT_REL will be broken
-	 */
-	.rel.dyn : {
-		*(.rel.*);
-	} :text
-	
-	.dynsym : {
-		*(.dynsym);
-	} :text
-	
-	.dynstr : {
-		*(.dynstr);
-	} :text
-	
-	. = . + 0x1000;
-	
-	.dynamic : {
-		*(.dynamic);
-	} :data :dynamic
-	
-	.data : {
-		*(.data);
-		*(.sdata);
-	} :data
-	
-	.data.rel : {
-                *(.data.rel);
-	} :data
-	
-	.got : {
-                *(.got);
-	} :data
-	.got.plt : {
-                *(.got.plt);
-	} :data
-	
-	.tdata : {
-		_tdata_start = .;
-		*(.tdata);
-		_tdata_end = .;
-		_tbss_start = .;
-		*(.tbss);
-		_tbss_end = .;
-	} :data
-	
-	_tls_alignment = ALIGNOF(.tdata);
-	
-	.bss : {
-		*(.sbss);
-		*(COMMON);
-		*(.bss);
-	} :data
-	
-	.plt : {
-		*(.plt);
-	} :data
-	
-	. = ALIGN(0x1000);
-	_heap = .;
-}
Index: pace/lib/c/shared/arch/ppc32/_link.ld.in
===================================================================
--- uspace/lib/c/shared/arch/ppc32/_link.ld.in	(revision 4ddbea735b086f2aee46396b84af11409e883218)
+++ 	(revision )
@@ -1,100 +1,0 @@
-STARTUP(LIBC_PREFIX/arch/UARCH/src/entry.o)
-ENTRY(__entry)
-
-PHDRS {
-	interp PT_INTERP;
-	text PT_LOAD FLAGS(5);
-	data PT_LOAD FLAGS(6);
-	dynamic PT_DYNAMIC;
-}
-
-SECTIONS {
-	. = 0x1000 + SIZEOF_HEADERS;
-	
-	.interp : {
-		*(.interp);
-	} :text :interp
-	
-	/* Align on word boundary -- instructions will follow. */
-	. = ALIGN(4);
-	
-	.init : {
-		*(.init);
-	} :text
-	.text : {
-		*(.text);
-		*(.text.*);
-		*(.rodata*);
-	} :text
-	
-	.rel.plt : {
-		*(.rel.plt);
-	} :text
-	/* 
-	 *.rel.dyn MUST FOLLOW IMMEDIATELY after .rel.plt 
-	 * without alignment gap or DT_REL will be broken
-	 */
-	.rel.dyn : {
-		*(.rel.*);
-	} :text
-	
-	.dynsym : {
-		*(.dynsym);
-	} :text
-	
-	.dynstr : {
-		*(.dynstr);
-	} :text
-	
-	. = . + 0x1000;
-	
-	.dynamic : {
-		*(.dynamic);
-	} :data :dynamic
-	
-	.data : {
-		*(.data);
-		*(.sdata);
-	} :data
-	
-	.data.rel : {
-                *(.data.rel);
-	} :data
-	
-	.got : {
-                *(.got);
-	} :data
-	.got.plt : {
-                *(.got.plt);
-	} :data
-	
-/*	.tdata : {
-		_tdata_start = .;
-		*(.tdata);
-		_tdata_end = .;
-		_tbss_start = .;
-		*(.tbss);
-		_tbss_end = .;
-	} :data
-	
-	_tls_alignment = ALIGNOF(.tdata);
-	
-*/
-	.bss : {
-		*(.sbss);
-		*(COMMON);
-		*(.bss);
-	} :data
-	
-	.plt : {
-		*(.plt);
-	} :data
-	
-	/DISCARD/ : {
-		*(.comment);
-		*(.gnu.attributes);
-	}
-	
-	. = ALIGN(0x1000);
-	_heap = .;
-}
