Index: uspace/Makefile.common
===================================================================
--- uspace/Makefile.common	(revision 888a2c6b5494acd8c90d49e4cb3d98f1ed7cb0fc)
+++ uspace/Makefile.common	(revision cbc02a7772de8fddba9f3f17fc8a9ecd3d5ac7d3)
@@ -35,5 +35,4 @@
 #   DEFS               compiler defines
 #   EXTRA_CFLAGS       additional flags to pass to C compiler
-#   LINKER_SCRIPT      linker script
 #   PRE_DEPEND         targets required for dependency check
 #
@@ -113,4 +112,6 @@
 LIBPOSIX_PREFIX = $(LIB_PREFIX)/posix
 LIBDLTEST_PREFIX = $(LIB_PREFIX)/dltest
+
+STARTUP_OBJECT = $(LIBC_PREFIX)/arch/$(UARCH)/src/entry.o
 
 AFLAGS = --fatal-warnings
@@ -140,12 +141,7 @@
 BASE_LIBS += $(LIBSOFTFLOAT_PREFIX)/libsoftfloat.a $(LIBSOFTINT_PREFIX)/libsoftint.a
 
-ifeq ($(LINK_DYNAMIC),y)
-	LINKER_SCRIPT ?= $(LIBC_PREFIX)/arch/$(UARCH)/_link-dlexe.ld
-else
+ifneq ($(LINK_DYNAMIC),y)
 	LDFLAGS += -static
-	LINKER_SCRIPT ?= $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld
-endif
-
-LIB_LINKER_SCRIPT = $(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld
+endif
 
 INCLUDES_FLAGS = $(LIBC_INCLUDES_FLAGS)
@@ -301,11 +297,11 @@
 
 ifneq ($(BINARY),)
-$(BINARY): $(LINKER_SCRIPT) $(OBJECTS) $(LIBTAGS) $(BASE_LIBS)
-	$(CC) $(CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) -T $(LINKER_SCRIPT) -Wl,-Map,$@.map -o $@ $(OBJECTS) $(LIBARGS) $(BASE_LIBS)
+$(BINARY): $(OBJECTS) $(LIBTAGS) $(BASE_LIBS)
+	$(CC) $(CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) -Wl,-Map,$@.map -o $@ $(STARTUP_OBJECT) $(OBJECTS) $(LIBARGS) $(BASE_LIBS)
 endif
 
 ifneq ($(TEST_BINARY),)
-$(TEST_BINARY): $(LINKER_SCRIPT) $(TEST_OBJECTS) $(TEST_BINARY_LIBS) $(LIBTAGS) $(BASE_LIBS)
-	$(CC) $(CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) -T $(LINKER_SCRIPT) -Wl,-Map,$@.map -o $@ $(TEST_OBJECTS) $(TEST_BINARY_LIBS) $(LIBARGS) $(BASE_LIBS)
+$(TEST_BINARY): $(TEST_OBJECTS) $(TEST_BINARY_LIBS) $(LIBTAGS) $(BASE_LIBS)
+	$(CC) $(CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) -Wl,-Map,$@.map -o $@ $(STARTUP_OBJECT) $(TEST_OBJECTS) $(TEST_BINARY_LIBS) $(LIBARGS) $(BASE_LIBS)
 endif
 
@@ -323,6 +319,6 @@
 	$(AR) rc $@ $(LOBJECTS)
 
-$(SLIBRARY): $(LIB_LINKER_SCRIPT) $(LIBRARY).la
-	$(CC) $(CFLAGS) $(LIB_LDFLAGS) $(EXTRA_LDFLAGS) -T $(LIB_LINKER_SCRIPT) -Wl,-Map,$@.map -o $@ -Wl,--whole-archive $(LIBRARY).la -Wl,--no-whole-archive
+$(SLIBRARY): $(LIBRARY).la
+	$(CC) $(CFLAGS) $(LIB_LDFLAGS) $(EXTRA_LDFLAGS) -Wl,-Map,$@.map -o $@ -Wl,--whole-archive $(LIBRARY).la -Wl,--no-whole-archive
 
 $(LSONAME):
Index: uspace/lib/c/Makefile
===================================================================
--- uspace/lib/c/Makefile	(revision 888a2c6b5494acd8c90d49e4cb3d98f1ed7cb0fc)
+++ uspace/lib/c/Makefile	(revision cbc02a7772de8fddba9f3f17fc8a9ecd3d5ac7d3)
@@ -33,12 +33,4 @@
 CONFIG_MAKEFILE = $(ROOT_PATH)/Makefile.config
 
-LINKER_SCRIPTS = \
-	$(LIBC_PREFIX)/arch/$(UARCH)/_link.ld \
-	$(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld \
-	$(LIBC_PREFIX)/arch/$(UARCH)/_link-dlexe.ld
-
-PRE_DEPEND =
-EXTRA_OUTPUT = $(LINKER_SCRIPTS)
-EXTRA_CLEAN = $(LINKER_SCRIPTS)
 LIBRARY = libc
 SOVERSION = 0.0
@@ -190,13 +182,4 @@
 include $(USPACE_PREFIX)/Makefile.common
 
-$(LIBC_PREFIX)/arch/$(UARCH)/_link.ld: $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld.in
-	$(CC) $(DEFS) $(CFLAGS) -DLIBC_PATH=$(CURDIR) -E -x c $< | grep -v "^\#" > $@
-
-$(LIBC_PREFIX)/arch/$(UARCH)/_link-shlib.ld: $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld.in
-	$(CC) $(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
-	$(CC) $(DEFS) $(CFLAGS) -DLIBC_PATH=$(CURDIR) -DDLEXE -E -x c $< | grep -v "^\#" > $@
-
 AUTOCHECK = $(realpath $(ROOT_PATH)/tools/autocheck.awk)
 
Index: uspace/lib/c/arch/abs32le/_link.ld.in
===================================================================
--- uspace/lib/c/arch/abs32le/_link.ld.in	(revision 888a2c6b5494acd8c90d49e4cb3d98f1ed7cb0fc)
+++ 	(revision )
@@ -1,62 +1,0 @@
-STARTUP(LIBC_PATH/arch/UARCH/src/entry.o)
-ENTRY(_start)
-
-PHDRS {
-	text PT_LOAD FILEHDR PHDRS FLAGS(5);
-	data PT_LOAD FLAGS(6);
-	tls PT_TLS;
-}
-
-SECTIONS {
-#ifdef SHLIB
-	. = SEGMENT_START("text-segment", 0);
-#else
-	. = SEGMENT_START("text-segment", 0x400000);
-	PROVIDE (__executable_start = .);
-#endif
-	. = . + SIZEOF_HEADERS;
-
-	.text : {
-		*(.text .text.*);
-		*(.rodata .rodata.*);
-	} :text
-
-	. = . + 0x1000;
-
-	.data : {
-		*(.data);
-		*(.data.rel*);
-	} :data
-
-	.got.plt : {
-		*(.got.plt);
-	} :data
-
-	.tdata : {
-		*(.tdata);
-		*(.tdata.*);
-		*(.gnu.linkonce.td.*);
-	} :data :tls
-
-	.tbss : {
-		*(.tbss);
-		*(.tbss.*);
-		*(.gnu.linkonce.tb.*);
-	} :data :tls
-
-	.sbss : {
-		*(.scommon);
-		*(.sbss);
-	}
-
-	.bss : {
-		*(COMMON);
-		*(.bss);
-	} :data
-
-	_end = .;
-
-	/DISCARD/ : {
-		*(*);
-	}
-}
Index: uspace/lib/c/arch/amd64/_link.ld.in
===================================================================
--- uspace/lib/c/arch/amd64/_link.ld.in	(revision 888a2c6b5494acd8c90d49e4cb3d98f1ed7cb0fc)
+++ 	(revision )
@@ -1,75 +1,0 @@
-STARTUP(LIBC_PATH/arch/UARCH/src/entry.o)
-ENTRY(_start)
-
-PHDRS {
-	text PT_LOAD FILEHDR PHDRS FLAGS(5);
-	data PT_LOAD FLAGS(6);
-	tls PT_TLS;
-	debug PT_NOTE;
-}
-
-SECTIONS {
-#ifdef SHLIB
-	. = SEGMENT_START("text-segment", 0);
-#else
-	. = SEGMENT_START("text-segment", 0x400000);
-	PROVIDE (__executable_start = .);
-#endif
-	. = . + SIZEOF_HEADERS;
-
-	.init : {
-		*(.init);
-	} :text
-
-	.text : {
-		*(.text .text.*);
-		*(.rodata .rodata.*);
-	} :text
-
-	. = . + 0x1000;
-
-	.data : {
-		*(.data);
-		*(.data.rel*);
-	} :data
-
-	.got.plt : {
-		*(.got.plt);
-	} :data
-
-	.tdata : {
-		*(.tdata);
-		*(.tdata.*);
-		*(.gnu.linkonce.td.*);
-	} :data :tls
-
-	.tbss : {
-		*(.tbss);
-		*(.tbss.*);
-		*(.gnu.linkonce.tb.*);
-	} :data :tls
-
-	.bss : {
-		*(COMMON);
-		*(.bss);
-	} :data
-
-	_end = .;
-
-#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/ : {
-		*(*);
-	}
-}
Index: uspace/lib/c/arch/arm32/_link.ld.in
===================================================================
--- uspace/lib/c/arch/arm32/_link.ld.in	(revision 888a2c6b5494acd8c90d49e4cb3d98f1ed7cb0fc)
+++ 	(revision )
@@ -1,60 +1,0 @@
-STARTUP(LIBC_PATH/arch/UARCH/src/entry.o)
-ENTRY(_start)
-
-PHDRS {
-	text PT_LOAD FILEHDR PHDRS FLAGS(5);
-	data PT_LOAD FLAGS(6);
-	tls PT_TLS;
-}
-
-SECTIONS {
-#ifdef SHLIB
-	. = SEGMENT_START("text-segment", 0);
-#else
-	. = SEGMENT_START("text-segment", 0x400000);
-	PROVIDE (__executable_start = .);
-#endif
-	. = . + SIZEOF_HEADERS;
-
-	.init : {
-		*(.init);
-	} :text
-
-	.text : {
-		*(.text .text.*);
-		*(.rodata .rodata.*);
-	} :text
-
-	. = . + 0x1000;
-
-	.data : {
-		*(.opd);
-		*(.data .data.*);
-		*(.sdata);
-	} :data
-
-	.tdata : {
-		*(.tdata);
-		*(.tdata.*);
-		*(.gnu.linkonce.td.*);
-	} :data :tls
-
-	.tbss : {
-		*(.tbss);
-		*(.tbss.*);
-		*(.gnu.linkonce.tb.*);
-	} :data :tls
-
-	.bss : {
-		*(.sbss);
-		*(.scommon);
-		*(COMMON);
-		*(.bss);
-	} :data
-
-	_end = .;
-
-	/DISCARD/ : {
-		*(*);
-	}
-}
Index: uspace/lib/c/arch/ia32/_link.ld.in
===================================================================
--- uspace/lib/c/arch/ia32/_link.ld.in	(revision 888a2c6b5494acd8c90d49e4cb3d98f1ed7cb0fc)
+++ 	(revision )
@@ -1,134 +1,0 @@
-#ifndef SHLIB
-STARTUP(LIBC_PATH/arch/UARCH/src/entry.o)
-ENTRY(_start)
-#endif
-
-PHDRS {
-#if defined(DLEXE)
-	interp PT_INTERP;
-#endif
-	text PT_LOAD FILEHDR PHDRS FLAGS(5);
-	data PT_LOAD FLAGS(6);
-	tls PT_TLS;
-#if defined(SHLIB) || defined(DLEXE)
-	dynamic PT_DYNAMIC;
-#endif
-	debug PT_NOTE;
-}
-
-SECTIONS {
-#ifdef SHLIB
-	. = SEGMENT_START("text-segment", 0);
-#else
-	. = SEGMENT_START("text-segment", 0x400000);
-	PROVIDE (__executable_start = .);
-#endif
-	. = . + SIZEOF_HEADERS;
-
-	.init : {
-		*(.init);
-	} :text
-
-	.text : {
-		*(.text .text.*);
-		*(.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
-
-	.hash : {
-		*(.hash .gnu.hash);
-	} :text
-#endif
-
-#if defined(DLEXE)
-	.interp : {
-		*(.interp);
-	} :interp :text
-#endif
-
-	. = . + 0x1000;
-
-#if defined(SHLIB) || defined(DLEXE)
-	.dynamic : {
-		*(.dynamic);
-	} :data :dynamic
-#endif
-
-	.data : {
-		*(.data);
-	} :data
-
-#if defined(SHLIB) || defined(DLEXE)
-	.data.rel : {
-		*(.data.rel .data.rel.*);
-	} :data
-
-	.got : {
-		*(.got);
-	} :data
-#endif
-
-	.got.plt : {
-		*(.got.plt);
-	} :data
-
-	.tdata : {
-		*(.tdata);
-		*(.tdata.*);
-		*(.gnu.linkonce.td.*);
-	} :data :tls
-
-	.tbss : {
-		*(.tbss);
-		*(.tbss.*);
-		*(.gnu.linkonce.tb.*);
-	} :data :tls
-
-	.bss : {
-		*(.dynbss);
-		*(COMMON);
-		*(.bss);
-	} :data
-
-	_end = .;
-
-#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/ : {
-		*(*);
-	}
-}
Index: uspace/lib/c/arch/ia64/_link.ld.in
===================================================================
--- uspace/lib/c/arch/ia64/_link.ld.in	(revision 888a2c6b5494acd8c90d49e4cb3d98f1ed7cb0fc)
+++ 	(revision )
@@ -1,69 +1,0 @@
-STARTUP(LIBC_PATH/arch/UARCH/src/entry.o)
-ENTRY(_start)
-
-PHDRS {
-	text PT_LOAD FILEHDR PHDRS FLAGS(5);
-	data PT_LOAD FLAGS(6);
-	tls PT_TLS;
-}
-
-SECTIONS {
-#ifdef SHLIB
-	. = SEGMENT_START("text-segment", 0);
-#else
-	. = SEGMENT_START("text-segment", 0x400000);
-	PROVIDE (__executable_start = .);
-#endif
-	. = . + SIZEOF_HEADERS;
-
-	/* Workaround proper alignment of the .init section */
-	. = ALIGN(., 16);
-
-	.init : {
-		*(.init);
-	} :text
-
-	.text : {
-		*(.text .text.*);
-		*(.rodata .rodata.*);
-	} :text
-
-	. = . + 0x4000;
-
-	.got : {
-		/* Tell the linker where we expect GP to point. */
-		__gp = .;
-		*(.got .got.*);
-	} :data
-
-	.data : {
-		*(.opd);
-		*(.data .data.*);
-		*(.sdata);
-	} :data
-
-	.tdata : {
-		*(.tdata);
-		*(.tdata.*);
-		*(.gnu.linkonce.td.*);
-	} :data :tls
-
-	.tbss : {
-		*(.tbss);
-		*(.tbss.*);
-		*(.gnu.linkonce.tb.*);
-	} :data :tls
-
-	.bss : {
-		*(.sbss);
-		*(.scommon);
-		*(COMMON);
-		*(.bss);
-	} :data
-
-	_end = .;
-
-	/DISCARD/ : {
-		*(*);
-	}
-}
Index: uspace/lib/c/arch/mips32/_link.ld.in
===================================================================
--- uspace/lib/c/arch/mips32/_link.ld.in	(revision 888a2c6b5494acd8c90d49e4cb3d98f1ed7cb0fc)
+++ 	(revision )
@@ -1,67 +1,0 @@
-STARTUP(LIBC_PATH/arch/UARCH/src/entry.o)
-ENTRY(__start)
-
-PHDRS {
-	text PT_LOAD FILEHDR PHDRS FLAGS(5);
-	data PT_LOAD FLAGS(6);
-	tls PT_TLS;
-}
-
-SECTIONS {
-#ifdef SHLIB
-	. = SEGMENT_START("text-segment", 0);
-#else
-	. = SEGMENT_START("text-segment", 0x400000);
-	PROVIDE (__executable_start = .);
-#endif
-	. = . + SIZEOF_HEADERS;
-
-	.init : {
-		*(.init);
-	} :text
-
-	.text : {
-		*(.text .text.*);
-		*(.rodata .rodata.*);
-	} :text
-
-	. = . + 0x4000;
-
-	.data : {
-		*(.data);
-		*(.data.rel*);
-	} :data
-
-	.got : {
-		_gp = .;
-		*(.got);
-	} :data
-
-	.tdata : {
-		*(.tdata);
-		*(.tdata.*);
-		*(.gnu.linkonce.td.*);
-	} :data :tls
-
-	.tbss : {
-		*(.tbss);
-		*(.tbss.*);
-		*(.gnu.linkonce.tb.*);
-	} :data :tls
-
-	.sbss : {
-		*(.scommon);
-		*(.sbss);
-	}
-
-	.bss : {
-		*(.bss);
-		*(COMMON);
-	} :data
-
-	_end = .;
-
-	/DISCARD/ : {
-		*(*);
-	}
-}
Index: uspace/lib/c/arch/mips32eb/_link.ld.in
===================================================================
--- uspace/lib/c/arch/mips32eb/_link.ld.in	(revision 888a2c6b5494acd8c90d49e4cb3d98f1ed7cb0fc)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../mips32/_link.ld.in
Index: uspace/lib/c/arch/ppc32/_link.ld.in
===================================================================
--- uspace/lib/c/arch/ppc32/_link.ld.in	(revision 888a2c6b5494acd8c90d49e4cb3d98f1ed7cb0fc)
+++ 	(revision )
@@ -1,72 +1,0 @@
-STARTUP(LIBC_PATH/arch/UARCH/src/entry.o)
-ENTRY(_start)
-
-PHDRS {
-	text PT_LOAD FILEHDR PHDRS FLAGS(5);
-	data PT_LOAD FLAGS(6);
-	tls PT_TLS;
-	debug PT_NOTE;
-}
-
-SECTIONS {
-#ifdef SHLIB
-	. = SEGMENT_START("text-segment", 0);
-#else
-	. = SEGMENT_START("text-segment", 0x400000);
-	PROVIDE (__executable_start = .);
-#endif
-	. = . + SIZEOF_HEADERS;
-
-	.init : {
-		*(.init);
-	} :text
-
-	.text : {
-		*(.text .text.*);
-		*(.rodata .rodata.*);
-	} :text
-
-	. = . + 0x1000;
-
-	.data : {
-		*(.data);
-		*(.sdata);
-	} :data
-
-	.tdata : {
-		*(.tdata);
-		*(.tdata.*);
-		*(.gnu.linkonce.td.*);
-	} :data :tls
-
-	.tbss : {
-		*(.tbss);
-		*(.tbss.*);
-		*(.gnu.linkonce.tb.*);
-	} :data :tls
-
-	.bss : {
-		*(.sbss);
-		*(COMMON);
-		*(.bss);
-	} :data
-
-	_end = .;
-
-#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/ : {
-		*(*);
-	}
-}
Index: uspace/lib/c/arch/riscv64/_link.ld.in
===================================================================
--- uspace/lib/c/arch/riscv64/_link.ld.in	(revision 888a2c6b5494acd8c90d49e4cb3d98f1ed7cb0fc)
+++ 	(revision )
@@ -1,71 +1,0 @@
-STARTUP(LIBC_PATH/arch/UARCH/src/entry.o)
-ENTRY(_start)
-
-PHDRS {
-	text PT_LOAD FILEHDR PHDRS FLAGS(5);
-	data PT_LOAD FLAGS(6);
-	tls PT_TLS;
-	debug PT_NOTE;
-}
-
-SECTIONS {
-#ifdef SHLIB
-	. = SEGMENT_START("text-segment", 0);
-#else
-	. = SEGMENT_START("text-segment", 0x400000);
-	PROVIDE (__executable_start = .);
-#endif
-	. = . + SIZEOF_HEADERS;
-
-	.text : {
-		*(.text .text.*);
-		*(.rodata .rodata.*);
-		*(.srodata .srodata.*);
-	} :text
-
-	. = . + 0x1000;
-
-	.data : {
-		*(.data);
-		*(.sdata);
-		*(.data.rel*);
-	} :data
-
-	.tdata : {
-		*(.tdata);
-		*(.tdata.*);
-		*(.gnu.linkonce.td.*);
-	} :data :tls
-
-	.tbss : {
-		*(.tbss);
-		*(.tbss.*);
-		*(.gnu.linkonce.tb.*);
-	} :data :tls
-
-	.bss : {
-		*(.scommon);
-		*(.sbss);
-		*(COMMON);
-		*(.bss);
-	} :data
-
-	_end = .;
-
-#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/ : {
-		*(*);
-	}
-}
Index: uspace/lib/c/arch/sparc64/_link.ld.in
===================================================================
--- uspace/lib/c/arch/sparc64/_link.ld.in	(revision 888a2c6b5494acd8c90d49e4cb3d98f1ed7cb0fc)
+++ 	(revision )
@@ -1,76 +1,0 @@
-STARTUP(LIBC_PATH/arch/UARCH/src/entry.o)
-ENTRY(_start)
-
-PHDRS {
-	text PT_LOAD FILEHDR PHDRS FLAGS(5);
-	data PT_LOAD FLAGS(6);
-	tls PT_TLS;
-	debug PT_NOTE;
-}
-
-SECTIONS {
-#ifdef SHLIB
-	. = SEGMENT_START("text-segment", 0);
-#else
-	. = SEGMENT_START("text-segment", 0x400000);
-	PROVIDE (__executable_start = .);
-#endif
-	. = . + SIZEOF_HEADERS;
-
-	.init : {
-		*(.init);
-	} :text
-
-	.text : {
-		*(.text .text.*);
-		*(.rodata .rodata.*);
-	} :text
-
-	. = . + 0x4000;
-
-	.got : {
-		 *(.got*);
-	} :data
-
-	.data : {
-		*(.data);
-		*(.sdata);
-	} :data
-
-	.tdata : {
-		*(.tdata);
-		*(.tdata.*);
-		*(.gnu.linkonce.td.*);
-	} :data :tls
-
-	.tbss : {
-		*(.tbss);
-		*(.tbss.*);
-		*(.gnu.linkonce.tb.*);
-	} :data :tls
-
-	.bss : {
-		*(.sbss);
-		*(COMMON);
-		*(.bss);
-	} :data
-
-	_end = .;
-
-#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/ : {
-		*(*);
-	}
-}
Index: uspace/lib/pcut/Makefile
===================================================================
--- uspace/lib/pcut/Makefile	(revision 888a2c6b5494acd8c90d49e4cb3d98f1ed7cb0fc)
+++ uspace/lib/pcut/Makefile	(revision cbc02a7772de8fddba9f3f17fc8a9ecd3d5ac7d3)
@@ -36,4 +36,4 @@
 
 test-libpcut-%: $(LIBRARY).a
-	$(CC) $(CFLAGS) $(LDFLAGS) -T $(LINKER_SCRIPT) -o $@ $(STARTUP) $^ $(LIBRARY).a $(BASE_LIBS)
+	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(STARTUP_OBJECT) $^ $(LIBRARY).a $(BASE_LIBS)
 
Index: uspace/lib/pcut/update-from-master.sh
===================================================================
--- uspace/lib/pcut/update-from-master.sh	(revision 888a2c6b5494acd8c90d49e4cb3d98f1ed7cb0fc)
+++ uspace/lib/pcut/update-from-master.sh	(revision cbc02a7772de8fddba9f3f17fc8a9ecd3d5ac7d3)
@@ -80,5 +80,5 @@
 
 test-libpcut-%: $(LIBRARY).a
-	$(CC) $(CFLAGS) $(LDFLAGS) -T $(LINKER_SCRIPT) -o $@ $(STARTUP) $^ $(LIBRARY).a $(BASE_LIBS)
+	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(STARTUP_OBJECT) $^ $(LIBRARY).a $(BASE_LIBS)
 
 EOF_MAKEFILE_TAIL
Index: uspace/lib/posix/Makefile
===================================================================
--- uspace/lib/posix/Makefile	(revision 888a2c6b5494acd8c90d49e4cb3d98f1ed7cb0fc)
+++ uspace/lib/posix/Makefile	(revision cbc02a7772de8fddba9f3f17fc8a9ecd3d5ac7d3)
@@ -36,7 +36,5 @@
 
 SPECS = gcc.specs
-LIBC_LINKER_SCRIPT = $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld
-LIBC_STARTUP_FILE = $(shell sed -n -e 's/^.*STARTUP(\(.*\)).*$$/\1/p' $(LIBC_LINKER_SCRIPT))
-EXPORT_LINKER_SCRIPT = link.ld
+LIBC_STARTUP_FILE = $(STARTUP_OBJECT)
 EXPORT_STARTUP_FILE = crt0.o
 
@@ -49,5 +47,4 @@
 	$(LIBRARY).a \
 	$(EXPORT_STARTUP_FILE) \
-	$(EXPORT_LINKER_SCRIPT) \
 	$(SPECS)
 
@@ -55,5 +52,5 @@
 EXTRA_CLEAN = $(INCLUDE_LIBC)
 
-EXTRA_OUTPUT = $(SPECS) $(EXPORT_LINKER_SCRIPT) $(EXPORT_STARTUP_FILE)
+EXTRA_OUTPUT = $(SPECS) $(EXPORT_STARTUP_FILE)
 
 SOURCES = \
@@ -90,6 +87,5 @@
 
 EXPORT_LDFLAGS = \
-	-L$$(HELENOS_EXPORT_ROOT)/lib \
-	-T link.ld
+	-L$$(HELENOS_EXPORT_ROOT)/lib
 
 EXPORT_LDLIBS = \
@@ -111,7 +107,4 @@
 	echo '$(EXPORT_LDLIBS)' >> $@.new
 	mv $@.new $@
-
-$(EXPORT_LINKER_SCRIPT): $(LIBC_LINKER_SCRIPT)
-	sed 's/STARTUP(.*)/STARTUP(crt0.o)/' $< > $@
 
 $(EXPORT_STARTUP_FILE): $(LIBC_STARTUP_FILE)
