Index: boot/Makefile.common
===================================================================
--- boot/Makefile.common	(revision ec3e2ed0366d7ce41de472bed0b96c6e71cba2e0)
+++ boot/Makefile.common	(revision 1d465bf4b98a5bc5b790ecab106baa34aa9d68ee)
@@ -123,4 +123,5 @@
 ifeq ($(CONFIG_BUILD_SHARED_LIBS), y)
 	RD_LIBS += $(USPACE_PATH)/lib/c/libc.so.0
+	RD_LIBS += $(USPACE_PATH)/lib/softint/libsoftint.so.0
 	RD_APPS += $(USPACE_PATH)/app/dltest/dltest
 endif
@@ -132,4 +133,5 @@
 
 RD_APPS_NON_ESSENTIAL = \
+	$(USPACE_PATH)/app/dltest/dltest \
 	$(USPACE_PATH)/app/dltest2/dltest2 \
 	$(USPACE_PATH)/app/dload/dload \
Index: uspace/Makefile.common
===================================================================
--- uspace/Makefile.common	(revision ec3e2ed0366d7ce41de472bed0b96c6e71cba2e0)
+++ uspace/Makefile.common	(revision 1d465bf4b98a5bc5b790ecab106baa34aa9d68ee)
@@ -76,5 +76,7 @@
 	LARCHIVE = $(LIBRARY).la
 	LOUTPUT = $(SLIBRARY)
-	EXTRA_CLEAN += $(LOUTPUT).map $(LIBC_PREFIX)/shared/arch/$(UARCH)/_lib.ld
+	EXTRA_OUTPUT += $(LOUTPUT).disasm
+	EXTRA_CLEAN += $(LOUTPUT).map $(LOUTPUT).ldisasm \
+	    $(LIBC_PREFIX)/shared/arch/$(UARCH)/_lib.ld
 endif
 
@@ -96,7 +98,12 @@
 LIBNET_PREFIX = $(LIB_PREFIX)/net
 
+ifeq ($(DYNAMIC_LINKING),y)
+BASE_LIBS = $(LIBC_PREFIX)/libc.so.0 $(LIBSOFTINT_PREFIX)/libsoftint.a
+LFLAGS = -Bdynamic
+LINKER_SCRIPT ?= $(LIBC_PREFIX)/shared/arch/$(UARCH)/_link.ld
+else
 BASE_LIBS = $(LIBC_PREFIX)/libc.a $(LIBSOFTINT_PREFIX)/libsoftint.a
-
 LINKER_SCRIPT ?= $(LIBC_PREFIX)/arch/$(UARCH)/_link.ld
+endif
 
 ifeq ($(CONFIG_OPTIMIZE_FOR_SIZE),y)
@@ -202,8 +209,20 @@
 endif
 
+ifneq ($(SLIBRARY),)
+%.disasm: $(LOUTPUT)
+ifeq ($(CONFIG_LINE_DEBUG),y)
+	$(OBJDUMP) -d -S $< > $@
+else
+	$(OBJDUMP) -d $< > $@
+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
+endif
 
 $(LIBC_PREFIX)/shared/arch/$(UARCH)/_lib.ld: $(LIBC_PREFIX)/shared/arch/$(UARCH)/_lib.ld.in
+	$(CC) $(DEFS) $(CFLAGS) -DLIBC_PREFIX=$(LIBC_PREFIX) -E -x c $< | grep -v "^\#" > $@
+
+$(LIBC_PREFIX)/shared/arch/$(UARCH)/_link.ld: $(LIBC_PREFIX)/shared/arch/$(UARCH)/_link.ld.in
 	$(CC) $(DEFS) $(CFLAGS) -DLIBC_PREFIX=$(LIBC_PREFIX) -E -x c $< | grep -v "^\#" > $@
 
Index: uspace/app/dload/Makefile
===================================================================
--- uspace/app/dload/Makefile	(revision ec3e2ed0366d7ce41de472bed0b96c6e71cba2e0)
+++ uspace/app/dload/Makefile	(revision 1d465bf4b98a5bc5b790ecab106baa34aa9d68ee)
@@ -30,4 +30,6 @@
 LIBS =
 EXTRA_CFLAGS = -I../../srv/loader/include -I../../lib/c/rtld/include -Iinclude
+LINKER_SCRIPT = arch/$(UARCH)/_link.ld
+EXTRA_CLEAN = $(LINKER_SCRIPT)
 BINARY = dload
 
@@ -40,2 +42,5 @@
 
 include $(USPACE_PREFIX)/Makefile.common
+
+$(LINKER_SCRIPT): $(LINKER_SCRIPT).in
+	$(GCC) $(DEFS) $(CFLAGS) -DLIBC_PREFIX=$(LIBC_PREFIX) -E -x c $< | grep -v "^\#" > $@
Index: uspace/app/dload/arch/ia32/start.c
===================================================================
--- uspace/app/dload/arch/ia32/start.c	(revision ec3e2ed0366d7ce41de472bed0b96c6e71cba2e0)
+++ uspace/app/dload/arch/ia32/start.c	(revision 1d465bf4b98a5bc5b790ecab106baa34aa9d68ee)
@@ -41,5 +41,5 @@
 {
 	asm (
-		"mov %%eax, %%ebx\n"
+		"mov %%eax, %%edi\n"
 		"jmp *%0\n"
 		:: "m" (entry), "a" (pcb)
Index: uspace/app/dltest/Makefile
===================================================================
--- uspace/app/dltest/Makefile	(revision ec3e2ed0366d7ce41de472bed0b96c6e71cba2e0)
+++ uspace/app/dltest/Makefile	(revision 1d465bf4b98a5bc5b790ecab106baa34aa9d68ee)
@@ -29,4 +29,5 @@
 USPACE_PREFIX = ../..
 BINARY = dltest
+DYNAMIC_LINKING = y
 
 SOURCES = \
Index: uspace/lib/c/Makefile
===================================================================
--- uspace/lib/c/Makefile	(revision ec3e2ed0366d7ce41de472bed0b96c6e71cba2e0)
+++ uspace/lib/c/Makefile	(revision 1d465bf4b98a5bc5b790ecab106baa34aa9d68ee)
@@ -152,2 +152,7 @@
 $(COMMON_HEADER_ARCH): $(COMMON_HEADER)
 	ln -sfn ../../../$< $@
+
+test:
+	echo uspace_prefix=$(USPACE_PREFIX)
+	echo libc_prefix=$(LIBC_PREFIX)
+	echo linker_script=$(LINKER_SCRIPT)
Index: uspace/lib/c/arch/ia32/src/syscall.S
===================================================================
--- uspace/lib/c/arch/ia32/src/syscall.S	(revision ec3e2ed0366d7ce41de472bed0b96c6e71cba2e0)
+++ uspace/lib/c/arch/ia32/src/syscall.S	(revision 1d465bf4b98a5bc5b790ecab106baa34aa9d68ee)
@@ -32,4 +32,5 @@
 __syscall_fast_func:
 	.long __syscall_slow
+	.size __syscall_fast_func, . - __syscall_fast_func
 
 .text
Index: uspace/lib/softint/Makefile
===================================================================
--- uspace/lib/softint/Makefile	(revision ec3e2ed0366d7ce41de472bed0b96c6e71cba2e0)
+++ uspace/lib/softint/Makefile	(revision 1d465bf4b98a5bc5b790ecab106baa34aa9d68ee)
@@ -31,4 +31,6 @@
 EXTRA_CFLAGS = -Iinclude
 LIBRARY = libsoftint
+SLIBRARY = libsoftint.so.0.0
+LSONAME = libsoftint.so.0
 
 SOURCES = \
Index: uspace/lib/softint/libsoftint.so.0
===================================================================
--- uspace/lib/softint/libsoftint.so.0	(revision 1d465bf4b98a5bc5b790ecab106baa34aa9d68ee)
+++ uspace/lib/softint/libsoftint.so.0	(revision 1d465bf4b98a5bc5b790ecab106baa34aa9d68ee)
@@ -0,0 +1,1 @@
+libsoftint.so.0.0
Index: uspace/lib/test/libtest.c
===================================================================
--- uspace/lib/test/libtest.c	(revision ec3e2ed0366d7ce41de472bed0b96c6e71cba2e0)
+++ uspace/lib/test/libtest.c	(revision 1d465bf4b98a5bc5b790ecab106baa34aa9d68ee)
@@ -35,5 +35,5 @@
  */
 
-//#include <stdio.h>
+#include <stdio.h>
 #include "libtest.h"
 
@@ -56,5 +56,6 @@
 int test_fun2(void)
 {
-	return number;
+	return 42;
+//	return number;
 }
 
@@ -65,5 +66,7 @@
 //	return 42;
 //	while(1);
-	return test_fun2();
+//	return test_fun2();
+	printf("Hello from libtest/test_func()!\n");
+	return 42;
 }
 
