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 "^\#" > $@
 
