Index: Makefile
===================================================================
--- Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,13 +27,22 @@
 #
 
-## Include configuration
-#
-
 CSCOPE = cscope
 CONFIG = tools/config.py
+AUTOTOOL = tools/autotool.py
+SANDBOX = autotool
 
-.PHONY: all config config_default distclean clean cscope precheck
+CONFIG_RULES = HelenOS.config
 
-all: Makefile.config config.h config.defs
+COMMON_MAKEFILE = Makefile.common
+COMMON_HEADER = common.h
+COMMON_HEADER_PREV = $(COMMON_HEADER).prev
+
+CONFIG_MAKEFILE = Makefile.config
+CONFIG_HEADER = config.h
+
+.PHONY: all precheck cscope autotool config_default config distclean clean
+
+all: $(COMMON_MAKEFILE) $(COMMON_HEADER) $(CONFIG_MAKEFILE) $(CONFIG_HEADER)
+	cp -a $(COMMON_HEADER) $(COMMON_HEADER_PREV)
 	$(MAKE) -C kernel PRECHECK=$(PRECHECK)
 	$(MAKE) -C uspace PRECHECK=$(PRECHECK)
@@ -46,20 +55,25 @@
 	find kernel boot uspace -regex '^.*\.[chsS]$$' | xargs $(CSCOPE) -b -k -u -f$(CSCOPE).out
 
-Makefile.config: config_default
+$(COMMON_MAKEFILE): autotool
+$(COMMON_HEADER): autotool
 
-config.h: config_default
+autotool: $(CONFIG_MAKEFILE)
+	$(AUTOTOOL)
+	-[ -f $(COMMON_HEADER_PREV) ] && diff -q $(COMMON_HEADER_PREV) $(COMMON_HEADER) && mv -f $(COMMON_HEADER_PREV) $(COMMON_HEADER)
 
-config.defs: config_default
+$(CONFIG_MAKEFILE): config_default
+$(CONFIG_HEADER): config_default
 
-config_default: HelenOS.config
-	$(CONFIG) HelenOS.config default
+config_default: $(CONFIG_RULES)
+	$(CONFIG) $< default
 
-config: HelenOS.config
-	$(CONFIG) HelenOS.config
+config: $(CONFIG_RULES)
+	$(CONFIG) $<
 
 distclean: clean
-	rm -f $(CSCOPE).out Makefile.config config.h config.defs tools/*.pyc tools/checkers/*.pyc
+	rm -f $(CSCOPE).out $(COMMON_MAKEFILE) $(COMMON_HEADER) $(COMMON_HEADER_PREV) $(CONFIG_MAKEFILE) $(CONFIG_HEADER) tools/*.pyc tools/checkers/*.pyc
 
 clean:
+	rm -fr $(SANDBOX)
 	$(MAKE) -C kernel clean
 	$(MAKE) -C uspace clean
Index: boot/Makefile
===================================================================
--- boot/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -30,6 +30,6 @@
 #
 
+-include ../Makefile.common
 -include ../Makefile.config
--include ../config.defs
 
 ## Paths
@@ -42,5 +42,5 @@
 .PHONY: all build clean generic_clean
 
-all: ../Makefile.config ../config.h ../config.defs build
+all: ../Makefile.common ../Makefile.config ../config.h build
 
 -include arch/$(BARCH)/Makefile.inc
Index: boot/Makefile.common
===================================================================
--- boot/Makefile.common	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/Makefile.common	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,4 +27,5 @@
 #
 
+-include ../Makefile.common
 -include ../Makefile.config
 
Index: boot/arch/arm32/loader/Makefile
===================================================================
--- boot/arch/arm32/loader/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/arm32/loader/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,5 +32,5 @@
 .PHONY: all clean
 
-all: ../../../../version ../../../../Makefile.config ../../../../config.h ../../../../config.defs
+all: ../../../../version ../../../../Makefile.common ../../../../Makefile.config ../../../../config.h
 	-[ -f $(DEPEND) ] && mv -f $(DEPEND) $(DEPEND_PREV)
 	$(MAKE) -f Makefile.build PRECHECK=$(PRECHECK)
Index: boot/arch/arm32/loader/Makefile.build
===================================================================
--- boot/arch/arm32/loader/Makefile.build	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/arm32/loader/Makefile.build	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,6 +32,6 @@
 
 include ../../../../version
+include ../../../../Makefile.common
 include ../../../../Makefile.config
-include ../../../../config.defs
 include Makefile.common
 include Makefile.toolchain
Index: boot/arch/arm32/loader/Makefile.toolchain
===================================================================
--- boot/arch/arm32/loader/Makefile.toolchain	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/arm32/loader/Makefile.toolchain	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,33 +27,8 @@
 #
 
-## Toolchain configuration
-#
-
-ifndef CROSS_PREFIX
-	CROSS_PREFIX = /usr/local
-endif
-
 BFD_NAME = elf32-littlearm
 BFD_ARCH = arm
-TARGET = arm-linux-gnu
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/arm32/bin
 
 JOBFILE = ../../../../tools/jobfile.py
-
-ifeq ($(COMPILER),gcc_native)
-	CC = gcc
-	AS = as
-	LD = ld
-	OBJCOPY = objcopy
-	OBJDUMP = objdump
-endif
-
-ifeq ($(COMPILER),gcc_cross)
-	CC = $(TOOLCHAIN_DIR)/$(TARGET)-gcc
-	AS = $(TOOLCHAIN_DIR)/$(TARGET)-as
-	LD = $(TOOLCHAIN_DIR)/$(TARGET)-ld
-	OBJCOPY = $(TOOLCHAIN_DIR)/$(TARGET)-objcopy
-	OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump
-endif
 
 CFLAGS = \
Index: boot/arch/ia64/loader/Makefile
===================================================================
--- boot/arch/ia64/loader/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/ia64/loader/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -29,9 +29,10 @@
 
 include Makefile.common
+include ../../../../Makefile.common
 include ../../../../Makefile.config
 
 .PHONY: all clean
 
-all: ../../../../version ../../../../Makefile.config ../../../../config.h ../../../../config.defs
+all: ../../../../version ../../../../Makefile.common ../../../../Makefile.config ../../../../config.h
 	-[ -f $(DEPEND) ] && mv -f $(DEPEND) $(DEPEND_PREV)
 	$(MAKE) -f Makefile.build PRECHECK=$(PRECHECK)
Index: boot/arch/ia64/loader/Makefile.build
===================================================================
--- boot/arch/ia64/loader/Makefile.build	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/ia64/loader/Makefile.build	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,6 +32,6 @@
 
 include ../../../../version
+include ../../../../Makefile.common
 include ../../../../Makefile.config
-include ../../../../config.defs
 include Makefile.common
 include Makefile.toolchain
@@ -60,5 +60,5 @@
 $(OUTPUT): $(OBJECTS) $(COMPONENT_OBJECTS) $(LINK)
 	$(LD) -no-check-sections -N -T $(LINK) $(COMPONENT_OBJECTS) $(OBJECTS) -o $@
-	$(MAKE) -C gefi/HelenOS PREFIX=$(GEFI_PREFIX)
+	$(MAKE) -C gefi/HelenOS
 	cp gefi/HelenOS/hello.efi ../../../../
 	cp gefi/HelenOS/image.bin ../../../../
Index: boot/arch/ia64/loader/Makefile.common
===================================================================
--- boot/arch/ia64/loader/Makefile.common	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/ia64/loader/Makefile.common	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -31,4 +31,5 @@
 #
 
+include ../../../../Makefile.common
 include ../../../../Makefile.config
 include ../../../Makefile.common
Index: boot/arch/ia64/loader/Makefile.toolchain
===================================================================
--- boot/arch/ia64/loader/Makefile.toolchain	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/ia64/loader/Makefile.toolchain	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,44 +27,8 @@
 #
 
-## Toolchain configuration
-#
-
-ifndef CROSS_PREFIX
-	CROSS_PREFIX = /usr/local
-endif
-
 BFD_NAME = elf64-ia64-little
 BFD_ARCH = ia64
-TARGET = ia64-pc-linux-gnu
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/ia64/bin
 
 JOBFILE = ../../../../tools/jobfile.py
-
-ifeq ($(COMPILER),gcc_native)
-	CC = gcc
-	AS = as
-	LD = ld
-	OBJCOPY = objcopy
-	OBJDUMP = objdump
-	GEFI_PREFIX =
-endif
-
-ifeq ($(COMPILER),icc)
-	CC = icc
-	AS = as
-	LD = ld
-	OBJCOPY = objcopy
-	OBJDUMP = objdump
-	GEFI_PREFIX =
-endif
-
-ifeq ($(COMPILER),gcc_cross)
-	CC = $(TOOLCHAIN_DIR)/$(TARGET)-gcc
-	AS = $(TOOLCHAIN_DIR)/$(TARGET)-as
-	LD = $(TOOLCHAIN_DIR)/$(TARGET)-ld
-	OBJCOPY = $(TOOLCHAIN_DIR)/$(TARGET)-objcopy
-	OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump
-	GEFI_PREFIX = $(TOOLCHAIN_DIR)/$(TARGET)-
-endif
 
 CFLAGS = \
Index: boot/arch/ia64/loader/gefi/HelenOS/Makefile
===================================================================
--- boot/arch/ia64/loader/gefi/HelenOS/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/ia64/loader/gefi/HelenOS/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -22,5 +22,4 @@
 #
 
-prefix=$(PREFIX)
 include ../Make.defaults
 CDIR=$(TOPDIR)/..
@@ -69,3 +68,3 @@
 
 gefi:
-	$(MAKE) -C .. prefix=$(PREFIX)
+	$(MAKE) -C ..
Index: boot/arch/ia64/loader/gefi/Make.defaults
===================================================================
--- boot/arch/ia64/loader/gefi/Make.defaults	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/ia64/loader/gefi/Make.defaults	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -26,4 +26,7 @@
 # lib and include under the root
 #
+
+include ../../../../../Makefile.common
+
 INSTALLROOT=/usr/local
 
@@ -31,15 +34,7 @@
 
 ARCH       = ia64
-INCDIR     = -I. -I$(CDIR)/inc -I$(CDIR)/inc/$(ARCH) -I$(CDIR)/inc/protocol 
+INCDIR     = -I. -I$(CDIR)/inc -I$(CDIR)/inc/$(ARCH) -I$(CDIR)/inc/protocol
 CPPFLAGS   = -DCONFIG_$(ARCH)
 CFLAGS     = -O2 -fpic -Wall -fshort-wchar -fno-strict-aliasing -fno-merge-constants -frename-registers -mfixed-range=f32-f127
 LDFLAGS    = -nostdlib
 INSTALL    = install
-
-CC         = $(prefix)gcc
-AS         = $(prefix)as
-LD         = $(prefix)ld
-AR         = $(prefix)ar
-RANLIB     = $(prefix)ranlib
-OBJCOPY    = $(prefix)objcopy
-OBJDUMP    = $(prefix)objdump
Index: boot/arch/mips32/loader/Makefile
===================================================================
--- boot/arch/mips32/loader/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/mips32/loader/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,5 +32,5 @@
 .PHONY: all clean
 
-all: ../../../../version ../../../../Makefile.config ../../../../config.h ../../../../config.defs
+all: ../../../../version ../../../../Makefile.common ../../../../Makefile.config ../../../../config.h
 	-[ -f $(DEPEND) ] && mv -f $(DEPEND) $(DEPEND_PREV)
 	$(MAKE) -f Makefile.build PRECHECK=$(PRECHECK)
Index: boot/arch/mips32/loader/Makefile.build
===================================================================
--- boot/arch/mips32/loader/Makefile.build	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/mips32/loader/Makefile.build	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,6 +32,6 @@
 
 include ../../../../version
+include ../../../../Makefile.common
 include ../../../../Makefile.config
-include ../../../../config.defs
 include Makefile.common
 include Makefile.toolchain
Index: boot/arch/mips32/loader/Makefile.toolchain
===================================================================
--- boot/arch/mips32/loader/Makefile.toolchain	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/mips32/loader/Makefile.toolchain	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,14 +27,5 @@
 #
 
-## Toolchain configuration
-#
-
-ifndef CROSS_PREFIX
-	CROSS_PREFIX = /usr/local
-endif
-
 BFD_ARCH = mips
-TARGET = mipsel-linux-gnu
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/mips32/bin
 
 JOBFILE = ../../../../tools/jobfile.py
@@ -48,6 +39,4 @@
 	BFD_NAME = elf32-tradbigmips
 	BFD = ecoff-bigmips
-	TOOLCHAIN_DIR = $(CROSS_PREFIX)/mips32eb/bin
-	TARGET = mips-linux-gnu
 endif
 
@@ -55,20 +44,4 @@
 	BFD_NAME = elf32-tradlittlemips
 	BFD = binary
-endif
-
-ifeq ($(COMPILER),gcc_native)
-	CC = gcc
-	AS = as
-	LD = ld
-	OBJCOPY = objcopy
-	OBJDUMP = objdump
-endif
-
-ifeq ($(COMPILER),gcc_cross)
-	CC = $(TOOLCHAIN_DIR)/$(TARGET)-gcc
-	AS = $(TOOLCHAIN_DIR)/$(TARGET)-as
-	LD = $(TOOLCHAIN_DIR)/$(TARGET)-ld
-	OBJCOPY = $(TOOLCHAIN_DIR)/$(TARGET)-objcopy
-	OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump
 endif
 
Index: boot/arch/ppc32/loader/Makefile
===================================================================
--- boot/arch/ppc32/loader/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/ppc32/loader/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,5 +32,5 @@
 .PHONY: all clean
 
-all: ../../../../version ../../../../Makefile.config ../../../../config.h ../../../../config.defs
+all: ../../../../version ../../../../Makefile.common ../../../../Makefile.config ../../../../config.h
 	-[ -f $(DEPEND) ] && mv -f $(DEPEND) $(DEPEND_PREV)
 	$(MAKE) -f Makefile.build PRECHECK=$(PRECHECK)
Index: boot/arch/ppc32/loader/Makefile.build
===================================================================
--- boot/arch/ppc32/loader/Makefile.build	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/ppc32/loader/Makefile.build	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,6 +32,6 @@
 
 include ../../../../version
+include ../../../../Makefile.common
 include ../../../../Makefile.config
-include ../../../../config.defs
 include Makefile.common
 include Makefile.toolchain
Index: boot/arch/ppc32/loader/Makefile.toolchain
===================================================================
--- boot/arch/ppc32/loader/Makefile.toolchain	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/ppc32/loader/Makefile.toolchain	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,33 +27,8 @@
 #
 
-## Toolchain configuration
-#
-
-ifndef CROSS_PREFIX
-	CROSS_PREFIX = /usr/local
-endif
-
 BFD_NAME = elf32-powerpc
 BFD_ARCH = powerpc:common
-TARGET = ppc-linux-gnu
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/ppc32/bin
 
 JOBFILE = ../../../../tools/jobfile.py
-
-ifeq ($(COMPILER),gcc_native)
-	CC = gcc
-	AS = as
-	LD = ld
-	OBJCOPY = objcopy
-	OBJDUMP = objdump
-endif
-
-ifeq ($(COMPILER),gcc_cross)
-	CC = $(TOOLCHAIN_DIR)/$(TARGET)-gcc
-	AS = $(TOOLCHAIN_DIR)/$(TARGET)-as
-	LD = $(TOOLCHAIN_DIR)/$(TARGET)-ld
-	OBJCOPY = $(TOOLCHAIN_DIR)/$(TARGET)-objcopy
-	OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump
-endif
 
 CFLAGS = \
Index: boot/arch/sparc64/loader/Makefile
===================================================================
--- boot/arch/sparc64/loader/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/sparc64/loader/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,5 +32,5 @@
 .PHONY: all clean
 
-all: ../../../../version ../../../../Makefile.config ../../../../config.h ../../../../config.defs
+all: ../../../../version ../../../../Makefile.common ../../../../Makefile.config ../../../../config.h
 	-[ -f $(DEPEND) ] && mv -f $(DEPEND) $(DEPEND_PREV)
 	$(MAKE) -f Makefile.build PRECHECK=$(PRECHECK)
Index: boot/arch/sparc64/loader/Makefile.build
===================================================================
--- boot/arch/sparc64/loader/Makefile.build	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/sparc64/loader/Makefile.build	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,6 +32,6 @@
 
 include ../../../../version
+include ../../../../Makefile.common
 include ../../../../Makefile.config
-include ../../../../config.defs
 include Makefile.common
 include Makefile.toolchain
Index: boot/arch/sparc64/loader/Makefile.toolchain
===================================================================
--- boot/arch/sparc64/loader/Makefile.toolchain	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ boot/arch/sparc64/loader/Makefile.toolchain	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,33 +27,8 @@
 #
 
-## Toolchain configuration
-#
-
-ifndef CROSS_PREFIX
-	CROSS_PREFIX = /usr/local
-endif
-
 BFD_NAME = elf64-sparc
 BFD_ARCH = sparc
-TARGET = sparc64-linux-gnu
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/sparc64/bin
 
 JOBFILE = ../../../../tools/jobfile.py
-
-ifeq ($(COMPILER),gcc_native)
-	CC = gcc
-	AS = as
-	LD = ld
-	OBJCOPY = objcopy
-	OBJDUMP = objdump
-endif
-
-ifeq ($(COMPILER),gcc_cross)
-	CC = $(TOOLCHAIN_DIR)/$(TARGET)-gcc
-	AS = $(TOOLCHAIN_DIR)/$(TARGET)-as
-	LD = $(TOOLCHAIN_DIR)/$(TARGET)-ld
-	OBJCOPY = $(TOOLCHAIN_DIR)/$(TARGET)-objcopy
-	OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump
-endif
 
 CFLAGS = \
Index: kernel/Makefile
===================================================================
--- kernel/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ kernel/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,13 +27,398 @@
 #
 
-include Makefile.common
+## Configuration
+#
+
+ROOT_PATH = ..
+
+VERSION_DEF = $(ROOT_PATH)/version
+
+COMMON_MAKEFILE = $(ROOT_PATH)/Makefile.common
+COMMON_HEADER = $(ROOT_PATH)/common.h
+COMMON_HEADER_ARCH = arch/$(KARCH)/include/common.h
+
+CONFIG_MAKEFILE = $(ROOT_PATH)/Makefile.config
+CONFIG_HEADER = $(ROOT_PATH)/config.h
+
+-include $(VERSION_DEF)
+-include $(COMMON_MAKEFILE)
+-include $(CONFIG_MAKEFILE)
+
+## Common names
+#
+
+DEPEND = Makefile.depend
+DEPEND_PREV = $(DEPEND).prev
+RAW = kernel.raw
+BIN = kernel.bin
+MAP = kernel.map
+JOB = kernel.job
+MAP_PREV = $(MAP).prev
+DISASM = kernel.disasm
+DUMP = kernel.dump
+REAL_MAP = generic/src/debug/real_map
+
+ARCH_INCLUDE = generic/include/arch
+GENARCH_INCLUDE = generic/include/genarch
+
+GENMAP = tools/genmap.py
+JOBFILE = $(ROOT_PATH)/tools/jobfile.py
+
+LINK = arch/$(KARCH)/_link.ld
+EMPTY_MAP = generic/src/debug/empty_map.o
+SIZEOK_MAP = generic/src/debug/sizeok_map.o
+
+INCLUDES = generic/include
+OPTIMIZATION = 3
 
 .PHONY: all clean
 
-all: ../version ../Makefile.config ../config.h ../config.defs
-	-[ -f $(DEPEND) ] && mv -f $(DEPEND) $(DEPEND_PREV)
-	$(MAKE) -f Makefile.build PRECHECK=$(PRECHECK)
+all: $(VERSION_DEF) $(COMMON_MAKEFILE) $(COMMON_HEADER) $(CONFIG_MAKEFILE) $(CONFIG_HEADER) $(BIN) $(DISASM)
+	-[ -f $(DEPEND) ] && cp -a $(DEPEND) $(DEPEND_PREV)
 
 clean:
-	rm -f $(DEPEND) $(DEPEND_PREV) $(RAW) $(BIN) $(MAP) $(JOB) $(MAP_PREV) $(DISASM) $(DUMP) $(REAL_MAP).* $(ARCH_INCLUDE) $(GENARCH_INCLUDE) arch/*/_link.ld
+	rm -f $(DEPEND) $(DEPEND_PREV) $(RAW) $(BIN) $(MAP) $(JOB) $(MAP_PREV) $(DISASM) $(DUMP) $(REAL_MAP).* $(ARCH_INCLUDE) $(GENARCH_INCLUDE) arch/*/_link.ld arch/*/include/common.h
 	find generic/src/ arch/*/src/ genarch/src/ test/ -name '*.o' -follow -exec rm \{\} \;
+
+## Common compiler flags
+#
+
+DEFS = -DKERNEL -DRELEASE=$(RELEASE) "-DNAME=$(NAME)" -D__$(BITS)_BITS__ -D__$(ENDIANESS)__
+
+GCC_CFLAGS = -I$(INCLUDES) -O$(OPTIMIZATION) -imacros ../config.h \
+	-fexec-charset=UTF-8 -fwide-exec-charset=UTF-32$(ENDIANESS) \
+	-finput-charset=UTF-8 -ffreestanding -fno-builtin -nostdlib -nostdinc \
+	-Wall -Wextra -Wno-unused-parameter -Wmissing-prototypes \
+	-Werror-implicit-function-declaration -Wwrite-strings \
+	-Werror -pipe
+
+ICC_CFLAGS = -I$(INCLUDES) -O$(OPTIMIZATION) -imacros ../config.h \
+	-ffreestanding -fno-builtin -nostdlib -nostdinc -Wall -Wmissing-prototypes \
+	-Werror-implicit-function-declaration -Werror -wd170
+
+SUNCC_CFLAGS = -I$(INCLUDES) -xO$(OPTIMIZATION) \
+	-xnolib -xc99=all -features=extensions \
+	-erroff=E_ZERO_SIZED_STRUCT_UNION
+
+CLANG_CFLAGS = -I$(INCLUDES) -O$(OPTIMIZATION) -imacros ../config.h \
+	-fexec-charset=UTF-8 -fwide-exec-charset=UTF-32$(ENDIANESS) \
+	-finput-charset=UTF-8 -ffreestanding -fno-builtin -nostdlib -nostdinc \
+	-Wall -Wextra -Wno-unused-parameter -Wmissing-prototypes \
+	-Werror-implicit-function-declaration -Wwrite-strings \
+	-pipe -arch $(CLANG_ARCH)
+
+LFLAGS = -M
+AFLAGS =
+
+-include arch/$(KARCH)/Makefile.inc
+-include genarch/Makefile.inc
+-include $(DEPEND)
+
+## The at-sign
+#
+# The $(ATSIGN) variable holds the ASCII character representing the at-sign
+# ('@') used in various $(AS) constructs (e.g. @progbits). On architectures that
+# don't use '@' for starting a comment, $(ATSIGN) is merely '@'. However, on
+# those that do use it for starting a comment (e.g. arm32), $(ATSIGN) must be
+# defined as the percentile-sign ('%') in the architecture-dependent
+# Makefile.inc.
+#
+
+ATSIGN ?= @
+
+## Cross-platform assembly to start a symtab.data section
+#
+
+SYMTAB_SECTION = ".section symtab.data, \"a\", $(ATSIGN)progbits;"
+
+## Compilation options
+#
+
+ifeq ($(COMPILER),gcc_native)
+	CFLAGS = $(GCC_CFLAGS)
+	DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
+endif
+
+ifeq ($(COMPILER),gcc_cross)
+	CFLAGS = $(GCC_CFLAGS)
+	DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
+endif
+
+ifeq ($(COMPILER),icc)
+	CFLAGS = $(ICC_CFLAGS)
+	DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
+endif
+
+ifeq ($(COMPILER),suncc)
+	CFLAGS = $(SUNCC_CFLAGS)
+	DEFS += $(CONFIG_DEFS)
+	DEPEND_DEFS = $(DEFS)
+endif
+
+ifeq ($(COMPILER),clang)
+	CFLAGS = $(CLANG_CFLAGS)
+	DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
+endif
+
+## Generic kernel sources
+#
+
+GENERIC_SOURCES = \
+	generic/src/adt/avl.c \
+	generic/src/adt/bitmap.c \
+	generic/src/adt/btree.c \
+	generic/src/adt/hash_table.c \
+	generic/src/adt/list.c \
+	generic/src/console/chardev.c \
+	generic/src/console/console.c \
+	generic/src/cpu/cpu.c \
+	generic/src/ddi/ddi.c \
+	generic/src/ddi/irq.c \
+	generic/src/ddi/device.c \
+	generic/src/debug/symtab.c \
+	generic/src/debug/stacktrace.c \
+	generic/src/interrupt/interrupt.c \
+	generic/src/main/main.c \
+	generic/src/main/kinit.c \
+	generic/src/main/uinit.c \
+	generic/src/main/version.c \
+	generic/src/main/shutdown.c \
+	generic/src/proc/program.c \
+	generic/src/proc/scheduler.c \
+	generic/src/proc/thread.c \
+	generic/src/proc/task.c \
+	generic/src/proc/the.c \
+	generic/src/proc/tasklet.c \
+	generic/src/syscall/syscall.c \
+	generic/src/syscall/copy.c \
+	generic/src/mm/buddy.c \
+	generic/src/mm/frame.c \
+	generic/src/mm/page.c \
+	generic/src/mm/tlb.c \
+	generic/src/mm/as.c \
+	generic/src/mm/backend_anon.c \
+	generic/src/mm/backend_elf.c \
+	generic/src/mm/backend_phys.c \
+	generic/src/mm/slab.c \
+	generic/src/lib/func.c \
+	generic/src/lib/memstr.c \
+	generic/src/lib/sort.c \
+	generic/src/lib/string.c \
+	generic/src/lib/elf.c \
+	generic/src/lib/rd.c \
+	generic/src/printf/printf_core.c \
+	generic/src/printf/printf.c \
+	generic/src/printf/snprintf.c \
+	generic/src/printf/vprintf.c \
+	generic/src/printf/vsnprintf.c \
+	generic/src/time/clock.c \
+	generic/src/time/timeout.c \
+	generic/src/time/delay.c \
+	generic/src/preempt/preemption.c \
+	generic/src/synch/spinlock.c \
+	generic/src/synch/condvar.c \
+	generic/src/synch/rwlock.c \
+	generic/src/synch/mutex.c \
+	generic/src/synch/semaphore.c \
+	generic/src/synch/smc.c \
+	generic/src/synch/waitq.c \
+	generic/src/synch/futex.c \
+	generic/src/smp/ipi.c \
+	generic/src/smp/smp.c \
+	generic/src/ipc/ipc.c \
+	generic/src/ipc/sysipc.c \
+	generic/src/ipc/ipcrsc.c \
+	generic/src/ipc/irq.c \
+	generic/src/ipc/event.c \
+	generic/src/security/cap.c \
+	generic/src/sysinfo/sysinfo.c
+
+## Kernel console support
+#
+
+ifeq ($(CONFIG_KCONSOLE),y)
+GENERIC_SOURCES += \
+	generic/src/console/kconsole.c \
+	generic/src/console/cmd.c
+endif
+
+## Udebug interface sources
+#
+
+ifeq ($(CONFIG_UDEBUG),y)
+GENERIC_SOURCES += \
+	generic/src/ipc/kbox.c \
+	generic/src/udebug/udebug.c \
+	generic/src/udebug/udebug_ops.c \
+	generic/src/udebug/udebug_ipc.c
+endif
+
+## Test sources
+#
+
+ifeq ($(CONFIG_TEST),y)
+	CFLAGS += -Itest/
+	GENERIC_SOURCES += \
+		test/test.c \
+		test/atomic/atomic1.c \
+		test/btree/btree1.c \
+		test/avltree/avltree1.c \
+		test/fault/fault1.c \
+		test/mm/falloc1.c \
+		test/mm/falloc2.c \
+		test/mm/mapping1.c \
+		test/mm/slab1.c \
+		test/mm/slab2.c \
+		test/synch/rwlock1.c \
+		test/synch/rwlock2.c \
+		test/synch/rwlock3.c \
+		test/synch/rwlock4.c \
+		test/synch/rwlock5.c \
+		test/synch/semaphore1.c \
+		test/synch/semaphore2.c \
+		test/print/print1.c \
+		test/print/print2.c \
+		test/print/print3.c \
+		test/print/print4.c \
+		test/thread/thread1.c \
+		test/sysinfo/sysinfo1.c
+	
+	ifeq ($(KARCH),mips32)
+		GENERIC_SOURCES += test/debug/mips1.c
+	else
+		GENERIC_SOURCES += test/debug/mips1_skip.c
+	endif
+	
+	ifeq ($(KARCH),ia64)
+		GENERIC_SOURCES += test/mm/purge1.c
+	else
+		GENERIC_SOURCES += test/mm/purge1_skip.c
+	endif
+	
+	ifeq ($(CONFIG_FPU),y)
+		ifeq ($(KARCH),ia32)
+			TEST_FPU1 = y
+			TEST_SSE1 = y
+			GENERIC_SOURCES += test/fpu/fpu1_x86.c
+		endif
+		
+		ifeq ($(KARCH),amd64)
+			TEST_FPU1 = y
+			TEST_SSE1 = y
+			GENERIC_SOURCES += test/fpu/fpu1_x86.c
+		endif
+		
+		ifeq ($(KARCH),ia64)
+			TEST_FPU1 = y
+			GENERIC_SOURCES += test/fpu/fpu1_ia64.c
+		endif
+		
+		ifeq ($(KARCH),mips32)
+			TEST_MIPS2 = y
+		endif
+	endif
+	
+	ifneq ($(TEST_FPU1),y)
+		GENERIC_SOURCES += test/fpu/fpu1_skip.c
+	endif
+	
+	ifeq ($(TEST_SSE1),y)
+		GENERIC_SOURCES += test/fpu/sse1.c
+	else
+		GENERIC_SOURCES += test/fpu/sse1_skip.c
+	endif
+	
+	ifeq ($(TEST_MIPS2),y)
+		GENERIC_SOURCES += test/fpu/mips2.c
+	else
+		GENERIC_SOURCES += test/fpu/mips2_skip.c
+	endif
+	
+endif
+
+GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES)))
+ARCH_OBJECTS := $(addsuffix .o,$(basename $(ARCH_SOURCES)))
+GENARCH_OBJECTS := $(addsuffix .o,$(basename $(GENARCH_SOURCES)))
+
+ifeq ($(CONFIG_SYMTAB),y)
+	SYMTAB_OBJECTS := generic/src/debug/real_map.o
+else
+	SYMTAB_OBJECTS :=
+endif
+
+
+
+$(BIN): $(RAW)
+	$(OBJCOPY) -O $(BFD) $< $@
+
+$(DISASM): $(RAW)
+	$(OBJDUMP) -d $< > $@
+
+$(RAW): $(LINK) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(SYMTAB_OBJECTS)
+	$(LD) -T $(LINK) $(LFLAGS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) $(SYMTAB_OBJECTS) -o $@ -Map $(MAP)
+
+$(LINK): $(LINK).in $(DEPEND)
+	$(GCC) $(DEFS) $(GCC_CFLAGS) -D__ASM__ -D__LINKER__ -E -x c $< | grep -v "^\#" > $@
+
+%.o: %.S $(DEPEND)
+	$(GCC) $(DEFS) $(GCC_CFLAGS) -D__ASM__ -c $< -o $@
+ifeq ($(PRECHECK),y)
+	$(JOBFILE) $(JOB) $< $@ as asm/preproc $(DEFS) $(GCC_CFLAGS) -D__ASM__
+endif
+
+%.o: %.s $(DEPEND)
+	$(AS) $(AFLAGS) $< -o $@
+ifeq ($(PRECHECK),y)
+	$(JOBFILE) $(JOB) $< $@ as asm $(DEFS) $(CFLAGS) $(EXTRA_FLAGS)
+endif
+
+#
+# The FPU tests are the only objects for which we allow the compiler to generate
+# FPU instructions.
+#
+
+test/fpu/%.o: test/fpu/%.c $(DEPEND)
+	$(CC) $(DEFS) $(CFLAGS) $(EXTRA_FLAGS) -c $< -o $@
+ifeq ($(PRECHECK),y)
+	$(JOBFILE) $(JOB) $< $@ cc test $(DEFS) $(CFLAGS) $(EXTRA_FLAGS)
+endif
+
+#
+# Ordinary objects.
+#
+
+%.o: %.c $(DEPEND)
+	$(CC) $(DEFS) $(CFLAGS) $(EXTRA_FLAGS) $(FPU_NO_CFLAGS) -c $< -o $@
+ifeq ($(PRECHECK),y)
+	$(JOBFILE) $(JOB) $< $@ cc core $(DEFS) $(CFLAGS) $(EXTRA_FLAGS) $(FPU_NO_CFLAGS)
+endif
+
+$(REAL_MAP).o: $(REAL_MAP).bin
+	echo $(SYMTAB_SECTION)" .incbin \"$<\"" | $(AS) $(AFLAGS) -o $@
+
+$(REAL_MAP).bin: $(LINK) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS)
+	echo $(SYMTAB_SECTION) | $(AS) $(AFLAGS) -o $(EMPTY_MAP)
+	$(LD) -T $(LINK) $(LFLAGS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) $(EMPTY_MAP) -o $@ -Map $(MAP_PREV)
+	$(OBJDUMP) -t $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) > $(DUMP)
+	$(GENMAP) $(MAP_PREV) $(DUMP) $@
+	
+	# Do it once again, this time to get correct even the symbols
+	# on architectures that have bss after symtab
+	
+	echo $(SYMTAB_SECTION)" .incbin \"$@\"" | $(AS) $(AFLAGS) -o $(SIZEOK_MAP)
+	$(LD) -T $(LINK) $(LFLAGS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) $(SIZEOK_MAP) -o $@ -Map $(MAP_PREV)
+	$(OBJDUMP) -t $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) > $(DUMP)
+	$(GENMAP) $(MAP_PREV) $(DUMP) $@
+
+$(DEPEND): $(ARCH_INCLUDE) $(GENARCH_INCLUDE) $(COMMON_HEADER_ARCH)
+	makedepend -f - -- $(DEPEND_DEFS) $(CFLAGS) -- $(ARCH_SOURCES) $(GENARCH_SOURCES) $(GENERIC_SOURCES) > $@ 2> /dev/null
+	-[ -f $(DEPEND_PREV) ] && diff -q $(DEPEND_PREV) $@ && mv -f $(DEPEND_PREV) $@
+
+$(ARCH_INCLUDE): arch/$(KARCH)/include/
+	ln -sfn ../../$< $@
+
+$(GENARCH_INCLUDE): genarch/include/
+	ln -sfn ../../$< $@
+
+$(COMMON_HEADER_ARCH): $(COMMON_HEADER)
+	ln -sfn ../../../$< $@
Index: rnel/Makefile.build
===================================================================
--- kernel/Makefile.build	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ 	(revision )
@@ -1,429 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-
-## Include configuration
-#
-
-include Makefile.common
-include ../version
-include ../Makefile.config
-include ../config.defs
-
-LINK = arch/$(KARCH)/_link.ld
-EMPTY_MAP = generic/src/debug/empty_map.o
-SIZEOK_MAP = generic/src/debug/sizeok_map.o
-
-INCLUDES = generic/include
-OPTIMIZATION = 3
-
-ifndef CROSS_PREFIX
-	CROSS_PREFIX = /usr/local
-endif
-
-## Common compiler flags
-#
-
-DEFS = -DKERNEL -DRELEASE=$(RELEASE) "-DNAME=$(NAME)" -D__$(BITS)_BITS__ -D__$(ENDIANESS)__
-
-GCC_CFLAGS = -I$(INCLUDES) -O$(OPTIMIZATION) -imacros ../config.h \
-	-fexec-charset=UTF-8 -fwide-exec-charset=UTF-32$(ENDIANESS) \
-	-finput-charset=UTF-8 -ffreestanding -fno-builtin -nostdlib -nostdinc \
-	-Wall -Wextra -Wno-unused-parameter -Wmissing-prototypes \
-	-Werror-implicit-function-declaration -Wwrite-strings \
-	-Werror -pipe
-
-ICC_CFLAGS = -I$(INCLUDES) -O$(OPTIMIZATION) -imacros ../config.h \
-	-ffreestanding -fno-builtin -nostdlib -nostdinc -Wall -Wmissing-prototypes \
-	-Werror-implicit-function-declaration -Werror -wd170
-
-SUNCC_CFLAGS = -I$(INCLUDES) -xO$(OPTIMIZATION) \
-	-xnolib -xc99=all -features=extensions \
-	-erroff=E_ZERO_SIZED_STRUCT_UNION
-
-CLANG_CFLAGS = -I$(INCLUDES) -O$(OPTIMIZATION) -imacros ../config.h \
-	-fexec-charset=UTF-8 -fwide-exec-charset=UTF-32$(ENDIANESS) \
-	-finput-charset=UTF-8 -ffreestanding -fno-builtin -nostdlib -nostdinc \
-	-Wall -Wextra -Wno-unused-parameter -Wmissing-prototypes \
-	-Werror-implicit-function-declaration -Wwrite-strings \
-	-pipe -arch $(CLANG_ARCH)
-
-LFLAGS = -M
-AFLAGS =
-
--include arch/$(KARCH)/Makefile.inc
--include genarch/Makefile.inc
-
-## The at-sign
-#
-# The $(ATSIGN) variable holds the ASCII character representing the at-sign
-# ('@') used in various $(AS) constructs (e.g. @progbits). On architectures that
-# don't use '@' for starting a comment, $(ATSIGN) is merely '@'. However, on
-# those that do use it for starting a comment (e.g. arm32), $(ATSIGN) must be
-# defined as the percentile-sign ('%') in the architecture-dependent
-# Makefile.inc.
-#
-ATSIGN ?= @
-
-## Cross-platform assembly to start a symtab.data section
-#
-SYMTAB_SECTION = ".section symtab.data, \"a\", $(ATSIGN)progbits;"
-
-## Simple detection for the type of the host system
-#
-HOST = $(shell uname)
-
-## On Solaris, some utilities have slightly different names
-#
-ifeq ($(HOST),SunOS)
-	BINUTILS_PREFIX = "g"
-else
-	BINUTILS_PREFIX = ""
-endif
-
-## Toolchain configuration
-#
-
-ifeq ($(COMPILER),gcc_native)
-	CC = gcc
-	GCC = gcc
-	AS = $(BINUTILS_PREFIX)as
-	LD = $(BINUTILS_PREFIX)ld
-	OBJCOPY = $(BINUTILS_PREFIX)objcopy
-	OBJDUMP = $(BINUTILS_PREFIX)objdump
-	CFLAGS = $(GCC_CFLAGS)
-	DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
-endif
-
-ifeq ($(COMPILER),gcc_cross)
-	CC = $(TOOLCHAIN_DIR)/bin/$(TARGET)-gcc
-	GCC = $(CC)
-	AS = $(TOOLCHAIN_DIR)/bin/$(TARGET)-as
-	LD = $(TOOLCHAIN_DIR)/bin/$(TARGET)-ld
-	OBJCOPY = $(TOOLCHAIN_DIR)/bin/$(TARGET)-objcopy
-	OBJDUMP = $(TOOLCHAIN_DIR)/bin/$(TARGET)-objdump
-	CFLAGS = $(GCC_CFLAGS)
-	DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
-endif
-
-ifeq ($(COMPILER),icc)
-	CC = icc
-	GCC = gcc
-	AS = as
-	LD = ld
-	OBJCOPY = objcopy
-	OBJDUMP = objdump
-	CFLAGS = $(ICC_CFLAGS)
-	DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
-endif
-
-ifeq ($(COMPILER),suncc)
-	CC = suncc
-	GCC = gcc
-	AS = $(BINUTILS_PREFIX)as
-	LD = $(BINUTILS_PREFIX)ld
-	OBJCOPY = $(BINUTILS_PREFIX)objcopy
-	OBJDUMP = $(BINUTILS_PREFIX)objdump
-	CFLAGS = $(SUNCC_CFLAGS)
-	DEFS += $(CONFIG_DEFS)
-	DEPEND_DEFS = $(DEFS)
-endif
-
-ifeq ($(COMPILER),clang)
-	CC = clang
-	GCC = gcc
-	AS = $(BINUTILS_PREFIX)as
-	LD = $(BINUTILS_PREFIX)ld
-	OBJCOPY = $(BINUTILS_PREFIX)objcopy
-	OBJDUMP = $(BINUTILS_PREFIX)objdump
-	CFLAGS = $(CLANG_CFLAGS)
-	DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
-endif
-
-
-## Generic kernel sources
-#
-
-GENERIC_SOURCES = \
-	generic/src/adt/avl.c \
-	generic/src/adt/bitmap.c \
-	generic/src/adt/btree.c \
-	generic/src/adt/hash_table.c \
-	generic/src/adt/list.c \
-	generic/src/console/chardev.c \
-	generic/src/console/console.c \
-	generic/src/cpu/cpu.c \
-	generic/src/ddi/ddi.c \
-	generic/src/ddi/irq.c \
-	generic/src/ddi/device.c \
-	generic/src/debug/symtab.c \
-	generic/src/debug/stacktrace.c \
-	generic/src/interrupt/interrupt.c \
-	generic/src/main/main.c \
-	generic/src/main/kinit.c \
-	generic/src/main/uinit.c \
-	generic/src/main/version.c \
-	generic/src/main/shutdown.c \
-	generic/src/proc/program.c \
-	generic/src/proc/scheduler.c \
-	generic/src/proc/thread.c \
-	generic/src/proc/task.c \
-	generic/src/proc/the.c \
-	generic/src/proc/tasklet.c \
-	generic/src/syscall/syscall.c \
-	generic/src/syscall/copy.c \
-	generic/src/mm/buddy.c \
-	generic/src/mm/frame.c \
-	generic/src/mm/page.c \
-	generic/src/mm/tlb.c \
-	generic/src/mm/as.c \
-	generic/src/mm/backend_anon.c \
-	generic/src/mm/backend_elf.c \
-	generic/src/mm/backend_phys.c \
-	generic/src/mm/slab.c \
-	generic/src/lib/func.c \
-	generic/src/lib/memstr.c \
-	generic/src/lib/sort.c \
-	generic/src/lib/string.c \
-	generic/src/lib/elf.c \
-	generic/src/lib/rd.c \
-	generic/src/printf/printf_core.c \
-	generic/src/printf/printf.c \
-	generic/src/printf/snprintf.c \
-	generic/src/printf/vprintf.c \
-	generic/src/printf/vsnprintf.c \
-	generic/src/time/clock.c \
-	generic/src/time/timeout.c \
-	generic/src/time/delay.c \
-	generic/src/preempt/preemption.c \
-	generic/src/synch/spinlock.c \
-	generic/src/synch/condvar.c \
-	generic/src/synch/rwlock.c \
-	generic/src/synch/mutex.c \
-	generic/src/synch/semaphore.c \
-	generic/src/synch/smc.c \
-	generic/src/synch/waitq.c \
-	generic/src/synch/futex.c \
-	generic/src/smp/ipi.c \
-	generic/src/smp/smp.c \
-	generic/src/ipc/ipc.c \
-	generic/src/ipc/sysipc.c \
-	generic/src/ipc/ipcrsc.c \
-	generic/src/ipc/irq.c \
-	generic/src/ipc/event.c \
-	generic/src/security/cap.c \
-	generic/src/sysinfo/sysinfo.c
-
-## Kernel console support
-#
-
-ifeq ($(CONFIG_KCONSOLE),y)
-GENERIC_SOURCES += \
-	generic/src/console/kconsole.c \
-	generic/src/console/cmd.c
-endif
-
-## Udebug interface sources
-#
-
-ifeq ($(CONFIG_UDEBUG),y)
-GENERIC_SOURCES += \
-	generic/src/ipc/kbox.c \
-	generic/src/udebug/udebug.c \
-	generic/src/udebug/udebug_ops.c \
-	generic/src/udebug/udebug_ipc.c
-endif
-
-## Test sources
-#
-
-ifeq ($(CONFIG_TEST),y)
-	CFLAGS += -Itest/
-	GENERIC_SOURCES += \
-		test/test.c \
-		test/atomic/atomic1.c \
-		test/btree/btree1.c \
-		test/avltree/avltree1.c \
-		test/fault/fault1.c \
-		test/mm/falloc1.c \
-		test/mm/falloc2.c \
-		test/mm/mapping1.c \
-		test/mm/slab1.c \
-		test/mm/slab2.c \
-		test/synch/rwlock1.c \
-		test/synch/rwlock2.c \
-		test/synch/rwlock3.c \
-		test/synch/rwlock4.c \
-		test/synch/rwlock5.c \
-		test/synch/semaphore1.c \
-		test/synch/semaphore2.c \
-		test/print/print1.c \
-		test/print/print2.c \
-		test/print/print3.c \
-		test/print/print4.c \
-		test/thread/thread1.c \
-		test/sysinfo/sysinfo1.c
-	
-	ifeq ($(KARCH),mips32)
-		GENERIC_SOURCES += test/debug/mips1.c
-	else
-		GENERIC_SOURCES += test/debug/mips1_skip.c
-	endif
-	
-	ifeq ($(KARCH),ia64)
-		GENERIC_SOURCES += test/mm/purge1.c
-	else
-		GENERIC_SOURCES += test/mm/purge1_skip.c
-	endif
-	
-	ifeq ($(CONFIG_FPU),y)
-		ifeq ($(KARCH),ia32)
-			TEST_FPU1 = y
-			TEST_SSE1 = y
-			GENERIC_SOURCES += test/fpu/fpu1_x86.c
-		endif
-		
-		ifeq ($(KARCH),amd64)
-			TEST_FPU1 = y
-			TEST_SSE1 = y
-			GENERIC_SOURCES += test/fpu/fpu1_x86.c
-		endif
-		
-		ifeq ($(KARCH),ia64)
-			TEST_FPU1 = y
-			GENERIC_SOURCES += test/fpu/fpu1_ia64.c
-		endif
-		
-		ifeq ($(KARCH),mips32)
-			TEST_MIPS2 = y
-		endif
-	endif
-	
-	ifneq ($(TEST_FPU1),y)
-		GENERIC_SOURCES += test/fpu/fpu1_skip.c
-	endif
-	
-	ifeq ($(TEST_SSE1),y)
-		GENERIC_SOURCES += test/fpu/sse1.c
-	else
-		GENERIC_SOURCES += test/fpu/sse1_skip.c
-	endif
-	
-	ifeq ($(TEST_MIPS2),y)
-		GENERIC_SOURCES += test/fpu/mips2.c
-	else
-		GENERIC_SOURCES += test/fpu/mips2_skip.c
-	endif
-	
-endif
-
-GENERIC_OBJECTS := $(addsuffix .o,$(basename $(GENERIC_SOURCES)))
-ARCH_OBJECTS := $(addsuffix .o,$(basename $(ARCH_SOURCES)))
-GENARCH_OBJECTS := $(addsuffix .o,$(basename $(GENARCH_SOURCES)))
-
-ifeq ($(CONFIG_SYMTAB),y)
-	SYMTAB_OBJECTS := generic/src/debug/real_map.o
-else
-	SYMTAB_OBJECTS :=
-endif
-
-.PHONY: all
-
-all: $(BIN) $(DISASM)
-
--include $(DEPEND)
-
-$(BIN): $(RAW)
-	$(OBJCOPY) -O $(BFD) $< $@
-
-$(DISASM): $(RAW)
-	$(OBJDUMP) -d $< > $@
-
-$(RAW): $(LINK) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(SYMTAB_OBJECTS)
-	$(LD) -T $(LINK) $(LFLAGS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) $(SYMTAB_OBJECTS) -o $@ -Map $(MAP)
-
-$(LINK): $(LINK).in $(DEPEND)
-	$(GCC) $(DEFS) $(GCC_CFLAGS) -D__ASM__ -D__LINKER__ -E -x c $< | grep -v "^\#" > $@
-
-%.o: %.S $(DEPEND)
-	$(GCC) $(DEFS) $(GCC_CFLAGS) -D__ASM__ -c $< -o $@
-ifeq ($(PRECHECK),y)
-	$(JOBFILE) $(JOB) $< $@ as asm/preproc $(DEFS) $(GCC_CFLAGS) -D__ASM__
-endif
-
-%.o: %.s $(DEPEND)
-	$(AS) $(AFLAGS) $< -o $@
-ifeq ($(PRECHECK),y)
-	$(JOBFILE) $(JOB) $< $@ as asm $(DEFS) $(CFLAGS) $(EXTRA_FLAGS)
-endif
-
-#
-# The FPU tests are the only objects for which we allow the compiler to generate
-# FPU instructions.
-#
-test/fpu/%.o: test/fpu/%.c $(DEPEND)
-	$(CC) $(DEFS) $(CFLAGS) $(EXTRA_FLAGS) -c $< -o $@
-ifeq ($(PRECHECK),y)
-	$(JOBFILE) $(JOB) $< $@ cc test $(DEFS) $(CFLAGS) $(EXTRA_FLAGS)
-endif
-
-#
-# Ordinary objects.
-#
-%.o: %.c $(DEPEND)
-	$(CC) $(DEFS) $(CFLAGS) $(EXTRA_FLAGS) $(FPU_NO_CFLAGS) -c $< -o $@
-ifeq ($(PRECHECK),y)
-	$(JOBFILE) $(JOB) $< $@ cc core $(DEFS) $(CFLAGS) $(EXTRA_FLAGS) $(FPU_NO_CFLAGS)
-endif
-
-$(REAL_MAP).o: $(REAL_MAP).bin
-	echo $(SYMTAB_SECTION)" .incbin \"$<\"" | $(AS) $(AFLAGS) -o $@
-
-$(REAL_MAP).bin: $(LINK) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS)
-	echo $(SYMTAB_SECTION) | $(AS) $(AFLAGS) -o $(EMPTY_MAP)
-	$(LD) -T $(LINK) $(LFLAGS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) $(EMPTY_MAP) -o $@ -Map $(MAP_PREV)
-	$(OBJDUMP) -t $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) > $(DUMP)
-	$(GENMAP) $(MAP_PREV) $(DUMP) $@
-	
-	# Do it once again, this time to get correct even the symbols
-	# on architectures that have bss after symtab
-	
-	echo $(SYMTAB_SECTION)" .incbin \"$@\"" | $(AS) $(AFLAGS) -o $(SIZEOK_MAP)
-	$(LD) -T $(LINK) $(LFLAGS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) $(EXTRA_OBJECTS) $(SIZEOK_MAP) -o $@ -Map $(MAP_PREV)
-	$(OBJDUMP) -t $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) > $(DUMP)
-	$(GENMAP) $(MAP_PREV) $(DUMP) $@
-
-$(DEPEND): $(ARCH_INCLUDE) $(GENARCH_INCLUDE)
-	makedepend -f - -- $(DEPEND_DEFS) $(CFLAGS) -- $(ARCH_SOURCES) $(GENARCH_SOURCES) $(GENERIC_SOURCES) > $@ 2> /dev/null
-	-[ -f $(DEPEND_PREV) ] && diff -q $(DEPEND_PREV) $@ && mv -f $(DEPEND_PREV) $@
-
-$(ARCH_INCLUDE): arch/$(KARCH)/include/
-	ln -sfn ../../$< $@
-
-$(GENARCH_INCLUDE): genarch/include/
-	ln -sfn ../../$< $@
Index: rnel/Makefile.common
===================================================================
--- kernel/Makefile.common	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ 	(revision )
@@ -1,48 +1,0 @@
-#
-# Copyright (c) 2005 Martin Decky
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-
-## Common names
-#
-
-DEPEND = Makefile.depend
-DEPEND_PREV = $(DEPEND).prev
-RAW = kernel.raw
-BIN = kernel.bin
-MAP = kernel.map
-JOB = kernel.job
-MAP_PREV = $(MAP).prev
-DISASM = kernel.disasm
-DUMP = kernel.dump
-REAL_MAP = generic/src/debug/real_map
-
-ARCH_INCLUDE = generic/include/arch
-GENARCH_INCLUDE = generic/include/genarch
-
-GENMAP = tools/genmap.py
-JOBFILE = ../tools/jobfile.py
Index: kernel/arch/abs32le/Makefile.inc
===================================================================
--- kernel/arch/abs32le/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ kernel/arch/abs32le/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,23 +27,12 @@
 #
 
-## Toolchain configuration
-#
-
 BFD = binary
 
 ifeq ($(COMPILER),gcc_cross)
-	TOOLCHAIN_DIR = $(CROSS_PREFIX)/$(CROSS_TARGET)
-	
 	ifeq ($(CROSS_TARGET),arm32)
-		TARGET = arm-linux-gnu
 		ATSIGN = %
 	endif
 	
-	ifeq ($(CROSS_TARGET),ia32)
-		TARGET = i686-pc-linux-gnu
-	endif
-	
 	ifeq ($(CROSS_TARGET),mips32)
-		TARGET = mipsel-linux-gnu
 		GCC_CFLAGS += -mno-abicalls
 	endif
Index: kernel/arch/amd64/Makefile.inc
===================================================================
--- kernel/arch/amd64/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ kernel/arch/amd64/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,13 +27,8 @@
 #
 
-## Toolchain configuration
-#
-
 BFD_NAME = elf64-x86-64
 BFD_ARCH = i386:x86-64
 BFD = binary
-TARGET = amd64-linux-gnu
 CLANG_ARCH = x86_64
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/amd64
 
 FPU_NO_CFLAGS = -mno-sse -mno-sse2
Index: kernel/arch/arm32/Makefile.inc
===================================================================
--- kernel/arch/arm32/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ kernel/arch/arm32/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,12 +27,7 @@
 #
 
-## Toolchain configuration
-#
-
 BFD_NAME = elf32-littlearm
 BFD_ARCH = arm
 BFD = binary
-TARGET = arm-linux-gnu
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/arm32
 
 ATSIGN = %
Index: kernel/arch/arm32/src/dummy.S
===================================================================
--- kernel/arch/arm32/src/dummy.S	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ kernel/arch/arm32/src/dummy.S	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -1,4 +1,4 @@
 #
-# Copyright (c) 2007 Michal Kebry, Pavel Jancik, Petr Stepan
+# Copyright (c) 2007 Michal Kebrt, Pavel Jancik, Petr Stepan
 # All rights reserved.
 #
Index: kernel/arch/ia32/Makefile.inc
===================================================================
--- kernel/arch/ia32/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ kernel/arch/ia32/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,13 +27,8 @@
 #
 
-## Toolchain configuration
-#
-
 BFD_NAME = elf32-i386
 BFD_ARCH = i386
 BFD = binary
-TARGET = i686-pc-linux-gnu
 CLANG_ARCH = i386
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/ia32
 
 BITS = 32
@@ -53,16 +48,20 @@
 	SUNCC_CFLAGS += -xarch=ssea
 endif
+
 ifeq ($(PROCESSOR),athlon_mp)
 	CMN2 = -march=athlon-mp
 	SUNCC_CFLAGS += xarch=ssea
 endif
+
 ifeq ($(PROCESSOR),pentium3)
 	CMN2 = -march=pentium3
 	SUNCC_CFLAGS += -xarch=sse
 endif
+
 ifeq ($(PROCESSOR),pentium4)
 	CMN2 = -march=pentium4
 	SUNCC_CFLAGS += -xarch=sse2
 endif
+
 ifeq ($(PROCESSOR),core)
 	CMN2 = -march=prescott
Index: kernel/arch/ia32/include/types.h
===================================================================
--- kernel/arch/ia32/include/types.h	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ kernel/arch/ia32/include/types.h	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup ia32	
+/** @addtogroup ia32
  * @{
  */
@@ -36,13 +36,5 @@
 #define KERN_ia32_TYPES_H_
 
-typedef signed char int8_t;
-typedef signed short int16_t;
-typedef signed long int32_t;
-typedef signed long long int64_t;
-
-typedef unsigned char uint8_t;
-typedef unsigned short uint16_t;
-typedef unsigned long uint32_t;
-typedef unsigned long long uint64_t;
+#include <arch/common.h>
 
 typedef uint32_t size_t;
Index: kernel/arch/ia64/Makefile.inc
===================================================================
--- kernel/arch/ia64/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ kernel/arch/ia64/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,11 +27,6 @@
 #
 
-## Toolchain configuration
-#
-
 BFD_NAME = elf64-little
 BFD_ARCH = ia64-elf64
-TARGET = ia64-pc-linux-gnu
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/ia64
 
 CMN1 = -mconstant-gp -fno-unwind-tables -mfixed-range=f32-f127
Index: kernel/arch/mips32/Makefile.inc
===================================================================
--- kernel/arch/mips32/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ kernel/arch/mips32/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,12 +27,6 @@
 #
 
-## Toolchain configuration
-#
-
 BFD_ARCH = mips
 BFD = binary
-TARGET = mipsel-linux-gnu
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/mips32
-
 GCC_CFLAGS += -mno-abicalls -G 0 -fno-zero-initialized-in-bss -mips3
 
@@ -48,6 +42,4 @@
 ifeq ($(MACHINE),bgxemul)
 	BFD_NAME = elf32-tradbigmips
-	TOOLCHAIN_DIR = $(CROSS_PREFIX)/mips32eb
-	TARGET = mips-linux-gnu
 	ENDIANESS = BE
 	GCC_CFLAGS += -D__BE__
Index: kernel/arch/ppc32/Makefile.inc
===================================================================
--- kernel/arch/ppc32/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ kernel/arch/ppc32/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,12 +27,7 @@
 #
 
-## Toolchain configuration
-#
-
 BFD_NAME = elf32-powerpc
 BFD_ARCH = powerpc:common
 BFD = binary
-TARGET = ppc-linux-gnu
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/ppc32
 
 GCC_CFLAGS += -mcpu=powerpc -msoft-float -m32
Index: kernel/arch/sparc64/Makefile.inc
===================================================================
--- kernel/arch/sparc64/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ kernel/arch/sparc64/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,12 +27,7 @@
 #
 
-## Toolchain configuration
-#
-
 BFD_NAME = elf64-sparc
 BFD_ARCH = sparc
 BFD = binary
-TARGET = sparc64-linux-gnu
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/sparc64
 
 GCC_CFLAGS += -m64 -mcpu=ultrasparc 
Index: kernel/tools/genmap.py
===================================================================
--- kernel/tools/genmap.py	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ kernel/tools/genmap.py	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -1,3 +1,34 @@
 #!/usr/bin/env python
+#
+# Copyright (c) 2006 Ondrej Palkovsky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+"""
+Create binary symbol map out of linker map file
+"""
 
 import sys
@@ -5,7 +36,6 @@
 import re
 
-MAXSTRING=63
-symtabfmt = "<Q%ds" % (MAXSTRING+1)
-
+MAXSTRING = 63
+symtabfmt = "<Q%ds" % (MAXSTRING + 1)
 
 funcline = re.compile(r'([0-9a-f]+)\s+[lg]\s+.\s+\.text\s+([0-9a-f]+)\s+(.*)$')
@@ -13,75 +43,81 @@
 dataline = re.compile(r'([0-9a-f]+)\s+[lg]\s+[a-zA-Z]\s+\.data\s+([0-9a-f]+)\s+(.*)$')
 fileexp = re.compile(r'([^\s]+):\s+file format')
+startfile = re.compile(r'\.(text|bss|data)\s+(0x[0-9a-f]+)\s+0x[0-9a-f]+\s+(.*)$')
+
 def read_obdump(inp):
-    funcs = {}
-    data = {}
-    bss ={}
-    fname = ''
-    for line in inp:
-        line = line.strip()
-        res = funcline.match(line)
-        if res:
-            funcs.setdefault(fname,[]).append((int(res.group(1),16),
-                                               res.group(3)))
-            continue
-        res = bssline.match(line)
-        if res:
-            start = int(res.group(1),16)
-            end = int(res.group(2),16)
-            if end:
-                bss.setdefault(fname,[]).append((start,res.group(3)))
-        res = dataline.match(line)
-        if res:
-            start = int(res.group(1),16)
-            end = int(res.group(2),16)
-            if end:
-                data.setdefault(fname,[]).append((start,res.group(3)))
-        res = fileexp.match(line)
-        if res:
-            fname = res.group(1)
-            continue
+	"Parse input"
+	
+	funcs = {}
+	data = {}
+	bss = {}
+	fname = ''
+	
+	for line in inp:
+		line = line.strip()
+		res = funcline.match(line)
+		if (res):
+			funcs.setdefault(fname, []).append((int(res.group(1), 16), res.group(3)))
+			continue
+		
+		res = bssline.match(line)
+		if (res):
+			start = int(res.group(1), 16)
+			end = int(res.group(2), 16)
+			if (end):
+				bss.setdefault(fname, []).append((start, res.group(3)))
+		
+		res = dataline.match(line)
+		if (res):
+			start = int(res.group(1), 16)
+			end = int(res.group(2), 16)
+			if (end):
+				data.setdefault(fname, []).append((start, res.group(3)))
+		
+		res = fileexp.match(line)
+		if (res):
+			fname = res.group(1)
+			continue
+	
+	return {'text' : funcs, 'bss' : bss, 'data' : data}
 
-    return {
-        'text' : funcs,
-        'bss' : bss,
-        'data' : data
-        }
-
-startfile = re.compile(r'\.(text|bss|data)\s+(0x[0-9a-f]+)\s+0x[0-9a-f]+\s+(.*)$')
 def generate(kmapf, obmapf, out):
-    obdump = read_obdump(obmapf)    
-
-    def sorter(x,y):
-        return cmp(x[0],y[0])
-
-    for line in kmapf:
-        line = line.strip()
-        res = startfile.match(line)
-
-        if res and obdump[res.group(1)].has_key(res.group(3)):
-            offset = int(res.group(2),16)
-            fname = res.group(3)
-            symbols = obdump[res.group(1)][fname]
-            symbols.sort(sorter)
-            for addr,symbol in symbols:                
-                value = fname + ':' + symbol
-                data = struct.pack(symtabfmt,addr+offset,value[:MAXSTRING])
-                out.write(data)
-                
-    out.write(struct.pack(symtabfmt,0,''))
+	"Generate output file"
+	
+	obdump = read_obdump(obmapf)
+	
+	def sorter(x,y):
+		return cmp(x[0],y[0])
+	
+	for line in kmapf:
+		line = line.strip()
+		res = startfile.match(line)
+		
+		if ((res) and (obdump[res.group(1)].has_key(res.group(3)))):
+			offset = int(res.group(2), 16)
+			fname = res.group(3)
+			symbols = obdump[res.group(1)][fname]
+			symbols.sort(sorter)
+			for addr, symbol in symbols:
+				value = fname + ':' + symbol
+				data = struct.pack(symtabfmt, addr + offset, value[:MAXSTRING])
+				out.write(data)
+			
+	out.write(struct.pack(symtabfmt, 0, ''))
 
 def main():
-    if len(sys.argv) != 4:
-        print "Usage: %s <kernel.map> <nm dump> <output.bin>" % sys.argv[0]
-        sys.exit(1)
-
-    kmapf = open(sys.argv[1],'r')
-    obmapf = open(sys.argv[2],'r')
-    out = open(sys.argv[3],'w')
-    generate(kmapf,obmapf,out)
-    kmapf.close()
-    obmapf.close()
-    out.close()
+	if (len(sys.argv) != 4):
+		print "Usage: %s <kernel.map> <nm dump> <output.bin>" % sys.argv[0]
+		return 1
+	
+	kmapf = open(sys.argv[1], 'r')
+	obmapf = open(sys.argv[2], 'r')
+	out = open(sys.argv[3], 'w')
+	
+	generate(kmapf, obmapf, out)
+	
+	kmapf.close()
+	obmapf.close()
+	out.close()
 
 if __name__ == '__main__':
-    main()
+	sys.exit(main())
Index: tools/autotool.py
===================================================================
--- tools/autotool.py	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
+++ tools/autotool.py	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -0,0 +1,484 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2010 Martin Decky
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# - Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# - The name of the author may not be used to endorse or promote products
+#   derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+"""
+Detect important prerequisites and parameters for building HelenOS
+"""
+
+import sys
+import os
+import shutil
+import re
+import time
+import subprocess
+
+SANDBOX = 'autotool'
+CONFIG = 'Makefile.config'
+MAKEFILE = 'Makefile.common'
+HEADER = 'common.h'
+GUARD = 'AUTOTOOL_COMMON_H_'
+
+PROBE_SOURCE = 'probe.c'
+PROBE_OUTPUT = 'probe.s'
+
+PACKAGE_BINUTILS = "usually part of binutils"
+PACKAGE_GCC = "preferably version 4.4.3 or newer"
+PACKAGE_CROSS = "use tools/toolchain.sh to build the cross-compiler toolchain"
+
+COMPILER_FAIL = "The compiler is probably not capable to compile HelenOS."
+
+PROBE_HEAD = """#define AUTOTOOL_DECLARE(category, subcategory, name, value) \\
+	asm volatile ( \\
+		"AUTOTOOL_DECLARE\\t" category "\\t" subcategory "\\t" name "\\t%[val]\\n" \\
+		: \\
+		: [val] "n" (value) \\
+	)
+
+#define DECLARE_INTSIZE(type) \\
+	AUTOTOOL_DECLARE("intsize", "unsigned", #type, sizeof(unsigned type)); \\
+	AUTOTOOL_DECLARE("intsize", "signed", #type, sizeof(signed type))
+
+int main(int argc, char *argv[])
+{
+"""
+
+PROBE_TAIL = """}
+"""
+
+def read_config(fname, config):
+	"Read HelenOS build configuration"
+	
+	inf = file(fname, 'r')
+	
+	for line in inf:
+		res = re.match(r'^(?:#!# )?([^#]\w*)\s*=\s*(.*?)\s*$', line)
+		if (res):
+			config[res.group(1)] = res.group(2)
+	
+	inf.close()
+
+def print_error(msg):
+	"Print a bold error message"
+	
+	sys.stderr.write("\n")
+	sys.stderr.write("######################################################################\n")
+	sys.stderr.write("HelenOS build sanity check error:\n")
+	sys.stderr.write("\n")
+	sys.stderr.write("%s\n" % "\n".join(msg))
+	sys.stderr.write("######################################################################\n")
+	sys.stderr.write("\n")
+	
+	sys.exit(1)
+
+def sandbox_enter():
+	"Create a temporal sandbox directory for running tests"
+	
+	if (os.path.exists(SANDBOX)):
+		if (os.path.isdir(SANDBOX)):
+			try:
+				shutil.rmtree(SANDBOX)
+			except:
+				print_error(["Unable to cleanup the directory \"%s\"." % SANDBOX])
+		else:
+			print_error(["Please inspect and remove unexpected directory,",
+			             "entry \"%s\"." % SANDBOX])
+	
+	try:
+		os.mkdir(SANDBOX)
+	except:
+		print_error(["Unable to create sandbox directory \"%s\"." % SANDBOX])
+	
+	owd = os.getcwd()
+	os.chdir(SANDBOX)
+	
+	return owd
+
+def sandbox_leave(owd):
+	"Leave the temporal sandbox directory"
+	
+	os.chdir(owd)
+
+def check_config(config, key):
+	"Check whether the configuration key exists"
+	
+	if (not key in config):
+		print_error(["Build configuration of HelenOS does not contain %s." % key,
+		             "Try running \"make config\" again.",
+		             "If the problem persists, please contact the developers of HelenOS."])
+
+def check_common(common, key):
+	"Check whether the common key exists"
+	
+	if (not key in common):
+		print_error(["Failed to determine the value %s." % key,
+		             "Please contact the developers of HelenOS."])
+
+def check_app(args, name, details):
+	"Check whether an application can be executed"
+	
+	try:
+		sys.stderr.write("Checking for %s ... " % args[0])
+		subprocess.Popen(args, stdout = subprocess.PIPE, stderr = subprocess.PIPE).wait()
+	except:
+		sys.stderr.write("failed\n")
+		print_error(["%s is missing." % name,
+		             "",
+		             "Execution of \"%s\" has failed. Please make sure that it" % " ".join(args),
+		             "is installed in your system (%s)." % details])
+	
+	sys.stderr.write("ok\n")
+
+def check_gcc(path, prefix, common, details):
+	"Check for GCC"
+	
+	common['GCC'] = "%sgcc" % prefix
+	
+	if (not path is None):
+		common['GCC'] = "%s/%s" % (path, common['GCC'])
+	
+	check_app([common['GCC'], "--version"], "GNU GCC", details)
+
+def check_binutils(path, prefix, common, details):
+	"Check for binutils toolchain"
+	
+	common['AS'] = "%sas" % prefix
+	common['LD'] = "%sld" % prefix
+	common['AR'] = "%sar" % prefix
+	common['OBJCOPY'] = "%sobjcopy" % prefix
+	common['OBJDUMP'] = "%sobjdump" % prefix
+	
+	if (not path is None):
+		for key in ["AS", "LD", "AR", "OBJCOPY", "OBJDUMP"]:
+			common[key] = "%s/%s" % (path, common[key])
+	
+	check_app([common['AS'], "--version"], "GNU Assembler", details)
+	check_app([common['LD'], "--version"], "GNU Linker", details)
+	check_app([common['AR'], "--version"], "GNU Archiver", details)
+	check_app([common['OBJCOPY'], "--version"], "GNU Objcopy utility", details)
+	check_app([common['OBJDUMP'], "--version"], "GNU Objdump utility", details)
+
+def probe_compiler(common, sizes):
+	"Generate, compile and parse probing source"
+	
+	check_common(common, "CC")
+	
+	outf = file(PROBE_SOURCE, 'w')
+	outf.write(PROBE_HEAD)
+	
+	for typedef in sizes:
+		outf.write("\tDECLARE_INTSIZE(%s);\n" % typedef)
+	
+	outf.write(PROBE_TAIL)
+	outf.close()
+	
+	args = [common['CC'], "-S", "-o", PROBE_OUTPUT, PROBE_SOURCE]
+	
+	try:
+		sys.stderr.write("Checking compiler properties ... ")
+		output = subprocess.Popen(args, stdout = subprocess.PIPE, stderr = subprocess.PIPE).communicate()
+	except:
+		sys.stderr.write("failed\n")
+		print_error(["Error executing \"%s\"." % " ".join(args),
+		             "Make sure that the compiler works properly."])
+	
+	if (not os.path.isfile(PROBE_OUTPUT)):
+		sys.stderr.write("failed\n")
+		print output[1]
+		print_error(["Error executing \"%s\"." % " ".join(args),
+		             "The compiler did not produce the output file \"%s\"." % PROBE_OUTPUT,
+		             "",
+		             output[0],
+		             output[1]])
+	
+	sys.stderr.write("ok\n")
+	
+	inf = file(PROBE_OUTPUT, 'r')
+	lines = inf.readlines()
+	inf.close()
+	
+	unsigned_sizes = {}
+	signed_sizes = {}
+	
+	for j in range(len(lines)):
+		tokens = lines[j].strip().split("\t")
+		
+		if (len(tokens) > 0):
+			if (tokens[0] == "AUTOTOOL_DECLARE"):
+				if (len(tokens) < 5):
+					print_error(["Malformed declaration in \"%s\" on line %s." % (PROBE_OUTPUT, j), COMPILER_FAIL])
+				
+				category = tokens[1]
+				subcategory = tokens[2]
+				name = tokens[3]
+				value = tokens[4]
+				
+				if (category == "intsize"):
+					base = 10
+					
+					if ((value.startswith('$')) or (value.startswith('#'))):
+						value = value[1:]
+					
+					if (value.startswith('0x')):
+						value = value[2:]
+						base = 16
+					
+					try:
+						value_int = int(value, base)
+					except:
+						print_error(["Integer value expected in \"%s\" on line %s." % (PROBE_OUTPUT, j), COMPILER_FAIL])
+					
+					if (subcategory == "unsigned"):
+						unsigned_sizes[name] = value_int
+					elif (subcategory == "signed"):
+						signed_sizes[name] = value_int
+					else:
+						print_error(["Unexpected keyword \"%s\" in \"%s\" on line %s." % (subcategory, PROBE_OUTPUT, j), COMPILER_FAIL])
+	
+	return {'unsigned_sizes' : unsigned_sizes, 'signed_sizes' : signed_sizes}
+
+def detect_uints(unsigned_sizes, signed_sizes, bytes):
+	"Detect correct types for fixed-size integer types"
+	
+	typedefs = []
+	
+	for b in bytes:
+		fnd = False
+		newtype = "uint%s_t" % (b * 8)
+		
+		for name, value in unsigned_sizes.items():
+			if (value == b):
+				oldtype = "unsigned %s" % name
+				typedefs.append({'oldtype' : oldtype, 'newtype' : newtype})
+				fnd = True
+				break
+		
+		if (not fnd):
+			print_error(['Unable to find appropriate integer type for %s' % newtype,
+			             COMPILER_FAIL])
+		
+		
+		fnd = False
+		newtype = "int%s_t" % (b * 8)
+		
+		for name, value in signed_sizes.items():
+			if (value == b):
+				oldtype = "signed %s" % name
+				typedefs.append({'oldtype' : oldtype, 'newtype' : newtype})
+				fnd = True
+				break
+		
+		if (not fnd):
+			print_error(['Unable to find appropriate integer type for %s' % newtype,
+			             COMPILER_FAIL])
+	
+	return typedefs
+
+def create_makefile(mkname, common):
+	"Create makefile output"
+	
+	outmk = file(mkname, 'w')
+	
+	outmk.write('#########################################\n')
+	outmk.write('## AUTO-GENERATED FILE, DO NOT EDIT!!! ##\n')
+	outmk.write('#########################################\n\n')
+	
+	for key, value in common.items():
+		outmk.write('%s = %s\n' % (key, value))
+	
+	outmk.close()
+
+def create_header(hdname, typedefs):
+	"Create header output"
+	
+	outhd = file(hdname, 'w')
+	
+	outhd.write('/***************************************\n')
+	outhd.write(' * AUTO-GENERATED FILE, DO NOT EDIT!!! *\n')
+	outhd.write(' ***************************************/\n\n')
+	
+	outhd.write('#ifndef %s\n' % GUARD)
+	outhd.write('#define %s\n\n' % GUARD)
+	
+	for typedef in typedefs:
+		outhd.write('typedef %s %s;\n' % (typedef['oldtype'], typedef['newtype']))
+	
+	outhd.write('\n#endif\n')
+	outhd.close()
+
+def main():
+	config = {}
+	common = {}
+	
+	# Read and check configuration
+	if os.path.exists(CONFIG):
+		read_config(CONFIG, config)
+	else:
+		print_error(["Configuration file %s not found! Make sure that the" % CONFIG,
+		             "configuration phase of HelenOS build went OK. Try running",
+		             "\"make config\" again."])
+	
+	check_config(config, "PLATFORM")
+	check_config(config, "COMPILER")
+	check_config(config, "BARCH")
+	
+	# Cross-compiler prefix
+	if ('CROSS_PREFIX' in os.environ):
+		cross_prefix = os.environ['CROSS_PREFIX']
+	else:
+		cross_prefix = "/usr/local"
+	
+	# Prefix binutils tools on Solaris
+	if (os.uname()[0] == "SunOS"):
+		binutils_prefix = "g"
+	else:
+		binutils_prefix = ""
+	
+	owd = sandbox_enter()
+	
+	try:
+		# Common utilities
+		check_app(["ln", "--version"], "Symlink utility", "usually part of coreutils")
+		check_app(["rm", "--version"], "File remove utility", "usually part of coreutils")
+		check_app(["mkdir", "--version"], "Directory creation utility", "usually part of coreutils")
+		check_app(["cp", "--version"], "Copy utility", "usually part of coreutils")
+		check_app(["find", "--version"], "Find utility", "usually part of findutils")
+		check_app(["diff", "--version"], "Diff utility", "usually part of diffutils")
+		check_app(["make", "--version"], "Make utility", "preferably GNU Make")
+		check_app(["makedepend", "-f", "-"], "Makedepend utility", "usually part of imake or xutils")
+		
+		# Compiler
+		if (config['COMPILER'] == "gcc_cross"):
+			if (config['PLATFORM'] == "abs32le"):
+				check_config(config, "CROSS_TARGET")
+				target = config['CROSS_TARGET']
+				
+				if (config['CROSS_TARGET'] == "arm32"):
+					gnu_target = "arm-linux-gnu"
+				
+				if (config['CROSS_TARGET'] == "ia32"):
+					gnu_target = "i686-pc-linux-gnu"
+				
+				if (config['CROSS_TARGET'] == "mips32"):
+					gnu_target = "mipsel-linux-gnu"
+			
+			if (config['PLATFORM'] == "amd64"):
+				target = config['PLATFORM']
+				gnu_target = "amd64-linux-gnu"
+			
+			if (config['PLATFORM'] == "arm32"):
+				target = config['PLATFORM']
+				gnu_target = "arm-linux-gnu"
+			
+			if (config['PLATFORM'] == "ia32"):
+				target = config['PLATFORM']
+				gnu_target = "i686-pc-linux-gnu"
+			
+			if (config['PLATFORM'] == "ia64"):
+				target = config['PLATFORM']
+				gnu_target = "ia64-pc-linux-gnu"
+			
+			if (config['PLATFORM'] == "mips32"):
+				check_config(config, "MACHINE")
+				
+				if ((config['MACHINE'] == "lgxemul") or (config['MACHINE'] == "msim")):
+					target = config['PLATFORM']
+					gnu_target = "mipsel-linux-gnu"
+				
+				if (config['MACHINE'] == "bgxemul"):
+					target = "mips32eb"
+					gnu_target = "mips-linux-gnu"
+			
+			if (config['PLATFORM'] == "ppc32"):
+				target = config['PLATFORM']
+				gnu_target = "ppc-linux-gnu"
+			
+			if (config['PLATFORM'] == "sparc64"):
+				target = config['PLATFORM']
+				gnu_target = "sparc64-linux-gnu"
+			
+			path = "%s/%s/bin" % (cross_prefix, target)
+			prefix = "%s-" % gnu_target
+			
+			check_gcc(path, prefix, common, PACKAGE_CROSS)
+			check_binutils(path, prefix, common, PACKAGE_CROSS)
+			
+			check_common(common, "GCC")
+			common['CC'] = common['GCC']
+		
+		if (config['COMPILER'] == "gcc_native"):
+			check_gcc(None, "", common, PACKAGE_GCC)
+			check_binutils(None, binutils_prefix, common, PACKAGE_BINUTILS)
+			
+			check_common(common, "GCC")
+			common['CC'] = common['GCC']
+		
+		if (config['COMPILER'] == "icc"):
+			common['CC'] = "icc"
+			check_app([common['CC'], "-V"], "Intel C++ Compiler", "support is experimental")
+			check_gcc(None, "", common, PACKAGE_GCC)
+			check_binutils(None, binutils_prefix, common, PACKAGE_BINUTILS)
+		
+		if (config['COMPILER'] == "suncc"):
+			common['CC'] = "suncc"
+			check_app([common['CC'], "-V"], "Sun Studio Compiler", "support is experimental")
+			check_gcc(None, "", common, PACKAGE_GCC)
+			check_binutils(None, binutils_prefix, common, PACKAGE_BINUTILS)
+		
+		if (config['COMPILER'] == "clang"):
+			common['CC'] = "clang"
+			check_app([common['CC'], "--version"], "Clang compiler", "preferably version 1.0 or newer")
+			check_gcc(None, "", common, PACKAGE_GCC)
+			check_binutils(None, binutils_prefix, common, PACKAGE_BINUTILS)
+		
+		# Platform-specific utilities
+		if ((config['BARCH'] == "amd64") or (config['BARCH'] == "ia32") or (config['BARCH'] == "ppc32") or (config['BARCH'] == "sparc64")):
+			check_app(["mkisofs", "--version"], "ISO 9660 creation utility", "usually part of genisoimage")
+		
+		probe = probe_compiler(common,
+			[
+				"char",
+				"short int",
+				"int",
+				"long int",
+				"long long int",
+			]
+		)
+		
+		typedefs = detect_uints(probe['unsigned_sizes'], probe['signed_sizes'], [1, 2, 4, 8])
+		
+	finally:
+		sandbox_leave(owd)
+	
+	create_makefile(MAKEFILE, common)
+	create_header(HEADER, typedefs)
+	
+	return 0
+
+if __name__ == '__main__':
+	sys.exit(main())
Index: tools/config.py
===================================================================
--- tools/config.py	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ tools/config.py	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -28,7 +28,9 @@
 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
+
 """
 HelenOS configuration system
 """
+
 import sys
 import os
@@ -41,5 +43,4 @@
 MAKEFILE = 'Makefile.config'
 MACROS = 'config.h'
-DEFS = 'config.defs'
 PRECONF = 'defaults'
 
@@ -223,5 +224,5 @@
 	return True
 
-def create_output(mkname, mcname, dfname, defaults, ask_names):
+def create_output(mkname, mcname, defaults, ask_names):
 	"Create output configuration"
 	
@@ -229,6 +230,11 @@
 	
 	sys.stderr.write("Fetching current revision identifier ... ")
-	version = subprocess.Popen(['bzr', 'version-info', '--custom', '--template={clean}:{revno}:{revision_id}'], stdout = subprocess.PIPE).communicate()[0].split(':')
-	sys.stderr.write("OK\n")
+	
+	try:
+		version = subprocess.Popen(['bzr', 'version-info', '--custom', '--template={clean}:{revno}:{revision_id}'], stdout = subprocess.PIPE).communicate()[0].split(':')
+		sys.stderr.write("ok\n")
+	except:
+		version = [1, "unknown", "unknown"]
+		sys.stderr.write("failed\n")
 	
 	if (len(version) == 3):
@@ -242,5 +248,4 @@
 	outmk = file(mkname, 'w')
 	outmc = file(mcname, 'w')
-	outdf = file(dfname, 'w')
 	
 	outmk.write('#########################################\n')
@@ -252,8 +257,5 @@
 	outmc.write(' ***************************************/\n\n')
 	
-	outdf.write('#########################################\n')
-	outdf.write('## AUTO-GENERATED FILE, DO NOT EDIT!!! ##\n')
-	outdf.write('#########################################\n\n')
-	outdf.write('CONFIG_DEFS =')
+	defs = 'CONFIG_DEFS ='
 	
 	for varname, vartype, name, choices, cond in ask_names:
@@ -273,21 +275,22 @@
 			if (default == "y"):
 				outmc.write('/* %s */\n#define %s\n\n' % (name, varname))
-				outdf.write(' -D%s' % varname)
+				defs += ' -D%s' % varname
 		else:
 			outmc.write('/* %s */\n#define %s %s\n#define %s_%s\n\n' % (name, varname, default, varname, default))
-			outdf.write(' -D%s=%s -D%s_%s' % (varname, default, varname, default))
+			defs += ' -D%s=%s -D%s_%s' % (varname, default, varname, default)
 	
 	if (revision is not None):
 		outmk.write('REVISION = %s\n' % revision)
 		outmc.write('#define REVISION %s\n' % revision)
-		outdf.write(' "-DREVISION=%s"' % revision)
+		defs += ' "-DREVISION=%s"' % revision
 	
 	outmk.write('TIMESTAMP = %s\n' % timestamp)
 	outmc.write('#define TIMESTAMP %s\n' % timestamp)
-	outdf.write(' "-DTIMESTAMP=%s"\n' % timestamp)
+	defs += ' "-DTIMESTAMP=%s"\n' % timestamp
+	
+	outmk.write(defs)
 	
 	outmk.close()
 	outmc.close()
-	outdf.close()
 
 def sorted_dir(root):
@@ -348,5 +351,5 @@
 	if ((len(sys.argv) >= 3) and (sys.argv[2] == 'default')):
 		if (check_choices(defaults, ask_names)):
-			create_output(MAKEFILE, MACROS, DEFS, defaults, ask_names)
+			create_output(MAKEFILE, MACROS, defaults, ask_names)
 			return 0
 	
@@ -466,5 +469,5 @@
 		xtui.screen_done(screen)
 	
-	create_output(MAKEFILE, MACROS, DEFS, defaults, ask_names)
+	create_output(MAKEFILE, MACROS, defaults, ask_names)
 	return 0
 
Index: tools/jobfile.py
===================================================================
--- tools/jobfile.py	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ tools/jobfile.py	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,4 +27,5 @@
 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
+
 """
 Add a source/object file pair to a checker jobfile
Index: tools/mkfat.py
===================================================================
--- tools/mkfat.py	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ tools/mkfat.py	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,4 +27,5 @@
 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
+
 """
 FAT creator
Index: tools/mkhord.py
===================================================================
--- tools/mkhord.py	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ tools/mkhord.py	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,4 +27,5 @@
 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
+
 """
 HORD encapsulator
Index: tools/mktmpfs.py
===================================================================
--- tools/mktmpfs.py	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ tools/mktmpfs.py	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,4 +27,5 @@
 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
+
 """
 TMPFS creator
Index: uspace/Makefile
===================================================================
--- uspace/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -30,4 +30,5 @@
 #
 
+-include ../Makefile.common
 -include ../Makefile.config
 
Index: uspace/app/Makefile.common
===================================================================
--- uspace/app/Makefile.common	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/app/Makefile.common	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -60,7 +60,7 @@
 all: \
     $(LIBC_PREFIX)/../../../version \
+    $(LIBC_PREFIX)/../../../Makefile.common \
     $(LIBC_PREFIX)/../../../Makefile.config \
     $(LIBC_PREFIX)/../../../config.h \
-    $(LIBC_PREFIX)/../../../config.defs \
     $(LIBS) \
     \
Index: uspace/lib/Makefile.common
===================================================================
--- uspace/lib/Makefile.common	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/lib/Makefile.common	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -50,4 +50,5 @@
 OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))
 
+-include $(USPACE_PREFIX)/../Makefile.common
 -include $(USPACE_PREFIX)/../Makefile.config
 include $(LIBC_PREFIX)/Makefile.toolchain
@@ -59,7 +60,7 @@
 all: \
     $(LIBC_PREFIX)/../../../version \
+    $(LIBC_PREFIX)/../../../Makefile.common \
     $(LIBC_PREFIX)/../../../Makefile.config \
     $(LIBC_PREFIX)/../../../config.h \
-    $(LIBC_PREFIX)/../../../config.defs \
     $(LIBS) \
     \
Index: uspace/lib/libc/Makefile
===================================================================
--- uspace/lib/libc/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/lib/libc/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -28,4 +28,5 @@
 #
 
+-include ../../../Makefile.common
 -include ../../../Makefile.config
 
Index: uspace/lib/libc/Makefile.toolchain
===================================================================
--- uspace/lib/libc/Makefile.toolchain	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/lib/libc/Makefile.toolchain	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -53,31 +53,12 @@
 AFLAGS =
 
-## Cross-toolchain prefix
-#
-
-ifndef CROSS_PREFIX
-	CROSS_PREFIX = /usr/local
-endif
-
 ## Setup platform configuration
 #
 
+-include $(LIBC_PREFIX)/../../../Makefile.common
 -include $(LIBC_PREFIX)/../../../Makefile.config
--include $(LIBC_PREFIX)/../../../config.defs
 -include $(LIBC_PREFIX)/arch/$(UARCH)/Makefile.inc
 
-## Simple detection of the host system
-#
-HOST = $(shell uname)
-
-## On Solaris, some utilities have different names
-#
-ifeq ($(HOST),SunOS)
-	BINUTILS_PREFIX = "g"
-else
-	BINUTILS_PREFIX = ""
-endif
-
-## Toolchain configuration
+## Compilation options
 #
 
@@ -85,11 +66,4 @@
 
 ifeq ($(COMPILER),gcc_cross)
-	CC = $(TOOLCHAIN_DIR)/$(TARGET)-gcc
-	GCC = $(CC)
-	AS = $(TOOLCHAIN_DIR)/$(TARGET)-as
-	LD = $(TOOLCHAIN_DIR)/$(TARGET)-ld
-	AR = $(TOOLCHAIN_DIR)/$(TARGET)-ar
-	OBJCOPY = $(TOOLCHAIN_DIR)/$(TARGET)-objcopy
-	OBJDUMP = $(TOOLCHAIN_DIR)/$(TARGET)-objdump
 	CFLAGS = $(GCC_CFLAGS)
 	DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
@@ -97,11 +71,4 @@
 
 ifeq ($(COMPILER),gcc_native)
-	CC = gcc
-	GCC = $(CC)
-	AS = $(BINUTILS_PREFIX)as
-	LD = $(BINUTILS_PREFIX)ld
-	AR = $(BINUTILS_PREFIX)ar
-	OBJCOPY = $(BINUTILS_PREFIX)objcopy
-	OBJDUMP = $(BINUTILS_PREFIX)objdump
 	CFLAGS = $(GCC_CFLAGS)
 	DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
@@ -109,11 +76,4 @@
 
 ifeq ($(COMPILER),icc)
-	CC = icc
-	GCC = gcc
-	AS = as
-	LD = ld
-	AR = ar
-	OBJCOPY = objcopy
-	OBJDUMP = objdump
 	CFLAGS = $(ICC_CFLAGS)
 	DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
@@ -121,11 +81,4 @@
 
 ifeq ($(COMPILER),clang)
-	CC = clang
-	GCC = gcc
-	AS = $(BINUTILS_PREFIX)as
-	LD = $(BINUTILS_PREFIX)ld
-	AR = $(BINUTILS_PREFIX)ar
-	OBJCOPY = $(BINUTILS_PREFIX)objcopy
-	OBJDUMP = $(BINUTILS_PREFIX)objdump
 	CFLAGS = $(CLANG_CFLAGS)
 	DEPEND_DEFS = $(DEFS) $(CONFIG_DEFS)
Index: uspace/lib/libc/arch/abs32le/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/abs32le/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/lib/libc/arch/abs32le/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,23 +27,4 @@
 #
 
-## Toolchain configuration
-#
-
-ifeq ($(COMPILER),gcc_cross)
-	TOOLCHAIN_DIR = $(CROSS_PREFIX)/$(CROSS_TARGET)/bin
-	
-	ifeq ($(CROSS_TARGET),arm32)
-		TARGET = arm-linux-gnu
-	endif
-	
-	ifeq ($(CROSS_TARGET),ia32)
-		TARGET = i686-pc-linux-gnu
-	endif
-	
-	ifeq ($(CROSS_TARGET),mips32)
-		TARGET = mipsel-linux-gnu
-	endif
-endif
-
 ifeq ($(COMPILER),clang)
 	CLANG_ARCH = i386
Index: uspace/lib/libc/arch/amd64/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/amd64/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/lib/libc/arch/amd64/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,10 +27,5 @@
 #
 
-## Toolchain configuration
-#
-
-TARGET = amd64-linux-gnu
 CLANG_ARCH = x86_64
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/amd64/bin
 
 ARCH_SOURCES = \
Index: uspace/lib/libc/arch/arm32/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/arm32/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/lib/libc/arch/arm32/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -28,10 +28,4 @@
 #
 
-## Toolchain configuration
-#
-
-TARGET = arm-linux-gnu
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/arm32/bin
-
 ARCH_SOURCES = \
 	arch/$(UARCH)/src/entry.s \
Index: uspace/lib/libc/arch/ia32/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/ia32/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/lib/libc/arch/ia32/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,10 +27,5 @@
 #
 
-## Toolchain configuration
-#
-
-TARGET = i686-pc-linux-gnu
 CLANG_ARCH = i386
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/ia32/bin
 
 ARCH_SOURCES = \
Index: uspace/lib/libc/arch/ia64/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/ia64/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/lib/libc/arch/ia64/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,10 +27,4 @@
 #
 
-## Toolchain configuration
-#
-
-TARGET = ia64-pc-linux-gnu
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/ia64/bin
-
 ARCH_SOURCES = \
 	arch/$(UARCH)/src/entry.s \
Index: uspace/lib/libc/arch/mips32/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/mips32/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/lib/libc/arch/mips32/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,10 +27,4 @@
 #
 
-## Toolchain configuration
-#
-
-TARGET = mipsel-linux-gnu
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/mips32/bin
-
 ARCH_SOURCES = \
 	arch/$(UARCH)/src/entry.s \
Index: uspace/lib/libc/arch/mips32eb/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/mips32eb/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/lib/libc/arch/mips32eb/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,10 +27,4 @@
 #
 
-## Toolchain configuration
-#
-
-TARGET = mips-linux-gnu
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/mips32eb/bin
-
 ARCH_SOURCES = \
 	arch/$(UARCH)/src/entry.s \
Index: uspace/lib/libc/arch/ppc32/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/ppc32/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/lib/libc/arch/ppc32/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,10 +27,4 @@
 #
 
-## Toolchain configuration
-#
-
-TARGET = ppc-linux-gnu
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/ppc32/bin
-
 ARCH_SOURCES = \
 	arch/$(UARCH)/src/entry.s \
Index: uspace/lib/libc/arch/sparc64/Makefile.inc
===================================================================
--- uspace/lib/libc/arch/sparc64/Makefile.inc	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/lib/libc/arch/sparc64/Makefile.inc	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,10 +27,4 @@
 #
 
-## Toolchain configuration
-#
-
-TARGET = sparc64-linux-gnu
-TOOLCHAIN_DIR = $(CROSS_PREFIX)/sparc64/bin
-
 ARCH_SOURCES = \
 	arch/$(UARCH)/src/entry.s \
Index: uspace/srv/Makefile.common
===================================================================
--- uspace/srv/Makefile.common	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/Makefile.common	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -64,7 +64,7 @@
 all: \
     $(LIBC_PREFIX)/../../../version \
+    $(LIBC_PREFIX)/../../../Makefile.common \
     $(LIBC_PREFIX)/../../../Makefile.config \
     $(LIBC_PREFIX)/../../../config.h \
-    $(LIBC_PREFIX)/../../../config.defs \
     $(LIBS) \
     \
@@ -77,5 +77,5 @@
 	find . -name '*.o' -follow -exec rm \{\} \;
 
-build: 
+build:
 
 -include $(DEPEND)
Index: uspace/srv/hid/char_mouse/chardev.c
===================================================================
--- uspace/srv/hid/char_mouse/chardev.c	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/hid/char_mouse/chardev.c	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -48,5 +48,5 @@
 static int dev_phone;
 
-#define NAME "kbd"
+#define NAME "char_mouse"
 
 int mouse_port_init(void)
Index: uspace/srv/hid/char_mouse/proto/ps2.c
===================================================================
--- uspace/srv/hid/char_mouse/proto/ps2.c	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/hid/char_mouse/proto/ps2.c	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -36,8 +36,12 @@
 
 #include <stdio.h>
+#include <mouse_port.h>
+#include <char_mouse.h>
 #include <mouse_proto.h>
-#include <char_mouse.h>
 
 #define BUFSIZE 3
+
+#define PS2_MOUSE_OUT_INIT  0xf4
+#define PS2_MOUSE_ACK       0xfa
 
 typedef struct {
@@ -67,4 +71,5 @@
 int mouse_proto_init(void)
 {
+	mouse_port_write(PS2_MOUSE_OUT_INIT);
 	return 0;
 }
Index: uspace/srv/hid/console/Makefile
===================================================================
--- uspace/srv/hid/console/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/hid/console/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,5 +32,5 @@
 .PHONY: all clean
 
-all: $(LIBC_PREFIX)/../../../Makefile.config $(LIBC_PREFIX)/../../../config.h $(LIBC_PREFIX)/../../../config.defs $(LIBS)
+all: $(LIBC_PREFIX)/../../../Makefile.common $(LIBC_PREFIX)/../../../Makefile.config $(LIBC_PREFIX)/../../../config.h $(LIBS)
 	-[ -f $(DEPEND) ] && mv -f $(DEPEND) $(DEPEND_PREV)
 	$(MAKE) -f Makefile.build PRECHECK=$(PRECHECK)
Index: uspace/srv/hid/fb/Makefile
===================================================================
--- uspace/srv/hid/fb/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/hid/fb/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,5 +32,5 @@
 .PHONY: all clean
 
-all: $(LIBC_PREFIX)/../../../Makefile.config $(LIBC_PREFIX)/../../../config.h $(LIBC_PREFIX)/../../../config.defs $(LIBS)
+all: $(LIBC_PREFIX)/../../../Makefile.common $(LIBC_PREFIX)/../../../Makefile.config $(LIBC_PREFIX)/../../../config.h $(LIBS)
 	-[ -f $(DEPEND) ] && mv -f $(DEPEND) $(DEPEND_PREV)
 	$(MAKE) -f Makefile.build PRECHECK=$(PRECHECK)
Index: uspace/srv/hid/kbd/Makefile
===================================================================
--- uspace/srv/hid/kbd/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/hid/kbd/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,5 +32,5 @@
 .PHONY: all clean
 
-all: $(LIBC_PREFIX)/../../../Makefile.config $(LIBC_PREFIX)/../../../config.h $(LIBC_PREFIX)/../../../config.defs $(LIBS)
+all: $(LIBC_PREFIX)/../../../Makefile.common $(LIBC_PREFIX)/../../../Makefile.config $(LIBC_PREFIX)/../../../config.h $(LIBS)
 	-[ -f $(DEPEND) ] && mv -f $(DEPEND) $(DEPEND_PREV)
 	$(MAKE) -f Makefile.build PRECHECK=$(PRECHECK)
Index: uspace/srv/hw/char/i8042/i8042.c
===================================================================
--- uspace/srv/hw/char/i8042/i8042.c	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/hw/char/i8042/i8042.c	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -68,7 +68,4 @@
 #define i8042_KBD_TRANSLATE	0x40
 
-/* Mouse constants */
-#define MOUSE_OUT_INIT  0xf4
-#define MOUSE_ACK       0xfa
 
 enum {
@@ -177,17 +174,13 @@
 	async_set_interrupt_received(i8042_irq_handler);
 
-	/* Disable kbd, enable mouse */
+	/* Disable kbd and aux */
+	wait_ready();
 	pio_write_8(&i8042->status, i8042_CMD_WRITE_CMDB);
 	wait_ready();
-	pio_write_8(&i8042->status, i8042_CMD_WRITE_CMDB);
-	wait_ready();
-	pio_write_8(&i8042->data, i8042_KBD_DISABLE);
-	wait_ready();
+	pio_write_8(&i8042->data, i8042_KBD_DISABLE | i8042_AUX_DISABLE);
 
 	/* Flush all current IO */
 	while (pio_read_8(&i8042->status) & i8042_OUTPUT_FULL)
 		(void) pio_read_8(&i8042->data);
-
-	i8042_port_write(DEVID_AUX, MOUSE_OUT_INIT);
 
 	i8042_kbd.cmds[0].addr = (void *) &((i8042_t *) i8042_kernel)->status;
@@ -195,10 +188,12 @@
 	ipc_register_irq(sysinfo_value("i8042.inr_a"), device_assign_devno(), 0, &i8042_kbd);
 	ipc_register_irq(sysinfo_value("i8042.inr_b"), device_assign_devno(), 0, &i8042_kbd);
-
+	printf("i8042: registered for interrupts %d and %d\n",
+	    sysinfo_value("i8042.inr_a"), sysinfo_value("i8042.inr_b"));
+
+	wait_ready();
 	pio_write_8(&i8042->status, i8042_CMD_WRITE_CMDB);
 	wait_ready();
 	pio_write_8(&i8042->data, i8042_KBD_IE | i8042_KBD_TRANSLATE |
 	    i8042_AUX_IE);
-	wait_ready();
 
 	return 0;
@@ -271,9 +266,9 @@
 {
 	if (devid == DEVID_AUX) {
+		wait_ready();
 		pio_write_8(&i8042->status, i8042_CMD_WRITE_AUX);
-		wait_ready();
-	}
+	}
+	wait_ready();
 	pio_write_8(&i8042->data, data);
-	wait_ready();
 }
 
Index: uspace/srv/loader/Makefile
===================================================================
--- uspace/srv/loader/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/loader/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -28,4 +28,5 @@
 #
 
+-include ../../../Makefile.common
 -include ../../../Makefile.config
 -include arch/$(UARCH)/Makefile.inc
Index: uspace/srv/net/Makefile
===================================================================
--- uspace/srv/net/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/net/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -27,4 +27,5 @@
 #
 
+include ../../../Makefile.common
 include ../../../Makefile.config
 
Index: uspace/srv/net/app/echo/Makefile
===================================================================
--- uspace/srv/net/app/echo/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/net/app/echo/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,4 +32,5 @@
 STRUCTURES = $(NET_BASE)structures/
 
+include ../../../../../Makefile.common
 include ../../../../../Makefile.config
 
Index: uspace/srv/net/app/nettest1/Makefile
===================================================================
--- uspace/srv/net/app/nettest1/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/net/app/nettest1/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,4 +32,5 @@
 STRUCTURES = $(NET_BASE)structures/
 
+include ../../../../../Makefile.common
 include ../../../../../Makefile.config
 
Index: uspace/srv/net/app/nettest2/Makefile
===================================================================
--- uspace/srv/net/app/nettest2/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/net/app/nettest2/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,4 +32,5 @@
 STRUCTURES = $(NET_BASE)structures/
 
+include ../../../../../Makefile.common
 include ../../../../../Makefile.config
 
Index: uspace/srv/net/app/ping/Makefile
===================================================================
--- uspace/srv/net/app/ping/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/net/app/ping/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,4 +32,5 @@
 STRUCTURES = $(NET_BASE)structures/
 
+include ../../../../../Makefile.common
 include ../../../../../Makefile.config
 
Index: uspace/srv/net/il/ip/ip.c
===================================================================
--- uspace/srv/net/il/ip/ip.c	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/net/il/ip/ip.c	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -895,4 +895,5 @@
 	ip_pseudo_header_ref header;
 	size_t headerlen;
+	device_id_t device_id;
 
 	*answer_count = 0;
@@ -921,5 +922,7 @@
 		case NET_IP_GET_ROUTE:
 			ERROR_PROPAGATE(data_receive((void **) &addr, &addrlen));
-			ERROR_PROPAGATE(ip_get_route_req(0, IP_GET_PROTOCOL(call), addr, (socklen_t) addrlen, IPC_SET_DEVICE(answer), &header, &headerlen));
+			ERROR_PROPAGATE(ip_get_route_req(0, IP_GET_PROTOCOL(call), addr, (socklen_t) addrlen,
+			    &device_id, &header, &headerlen));
+			*IPC_SET_DEVICE(answer) = device_id;
 			*IP_SET_HEADERLEN(answer) = headerlen;
 			*answer_count = 2;
Index: uspace/srv/net/il/ip/ip_messages.h
===================================================================
--- uspace/srv/net/il/ip/ip_messages.h	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/net/il/ip/ip_messages.h	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -82,5 +82,5 @@
  *  @param[out] answer The message answer structure.
  */
-#define IP_SET_HEADERLEN(answer)	((size_t *) &IPC_GET_ARG2(*answer))
+#define IP_SET_HEADERLEN(answer)	(&IPC_GET_ARG2(*answer))
 
 /** Returns the network mask message parameter.
Index: uspace/srv/net/messages.h
===================================================================
--- uspace/srv/net/messages.h	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/net/messages.h	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -391,10 +391,10 @@
  *  @param[out] answer The message answer structure.
  */
-#define IPC_SET_DEVICE(answer)	((device_id_t *) &IPC_GET_ARG1(*answer))
+#define IPC_SET_DEVICE(answer)	(&IPC_GET_ARG1(*answer))
 
 /** Sets the minimum address length in the message answer.
  *  @param[out] answer The message answer structure.
  */
-#define IPC_SET_ADDR(answer)		((size_t *) &IPC_GET_ARG1(*answer))
+#define IPC_SET_ADDR(answer)		(&IPC_GET_ARG1(*answer))
 
 /*@}*/
@@ -407,5 +407,5 @@
  *  @param[out] answer The message answer structure.
  */
-#define IPC_SET_PREFIX(answer)	((size_t *) &IPC_GET_ARG2(*answer))
+#define IPC_SET_PREFIX(answer)	(&IPC_GET_ARG2(*answer))
 
 /*@}*/
@@ -418,5 +418,5 @@
  *  @param[out] answer The message answer structure.
  */
-#define IPC_SET_CONTENT(answer)	((size_t *) &IPC_GET_ARG3(*answer))
+#define IPC_SET_CONTENT(answer)	(&IPC_GET_ARG3(*answer))
 
 /*@}*/
@@ -429,5 +429,5 @@
  *  @param[out] answer The message answer structure.
  */
-#define IPC_SET_SUFFIX(answer)	((size_t *) &IPC_GET_ARG4(*answer))
+#define IPC_SET_SUFFIX(answer)	(&IPC_GET_ARG4(*answer))
 
 /*@}*/
Index: uspace/srv/net/net/Makefile
===================================================================
--- uspace/srv/net/net/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/net/net/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,4 +32,5 @@
 STRUCTURES = $(NET_BASE)structures/
 
+include $(NET_BASE)../../../Makefile.common
 include $(NET_BASE)../../../Makefile.config
 
Index: uspace/srv/net/net/start/Makefile
===================================================================
--- uspace/srv/net/net/start/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/net/net/start/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,4 +32,5 @@
 STRUCTURES = $(NET_BASE)structures/
 
+include ../../../../../Makefile.common
 include ../../../../../Makefile.config
 
Index: uspace/srv/net/netif/dp8390/Makefile
===================================================================
--- uspace/srv/net/netif/dp8390/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/net/netif/dp8390/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,4 +32,5 @@
 STRUCTURES = $(NET_BASE)structures/
 
+include $(NET_BASE)../../../Makefile.common
 include $(NET_BASE)../../../Makefile.config
 
Index: uspace/srv/net/netif/lo/Makefile
===================================================================
--- uspace/srv/net/netif/lo/Makefile	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/net/netif/lo/Makefile	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -32,4 +32,5 @@
 STRUCTURES = $(NET_BASE)structures/
 
+include $(NET_BASE)../../../Makefile.common
 include $(NET_BASE)../../../Makefile.config
 
Index: uspace/srv/net/socket/socket_messages.h
===================================================================
--- uspace/srv/net/socket/socket_messages.h	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/net/socket/socket_messages.h	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -115,30 +115,30 @@
  *  @param[out] answer The message answer structure.
  */
-#define SOCKET_SET_SOCKET_ID(answer)			(int *) &IPC_GET_ARG1(answer)
+#define SOCKET_SET_SOCKET_ID(answer)		&IPC_GET_ARG1(answer)
 
 /** Returns the socket identifier message parameter.
  *  @param[in] call The message call structure.
  */
-#define SOCKET_GET_SOCKET_ID(call)			(int) IPC_GET_ARG1(call)
+#define SOCKET_GET_SOCKET_ID(call)		(int) IPC_GET_ARG1(call)
 
 /** Sets the read data length in the message answer.
  *  @param[out] answer The message answer structure.
  */
-#define SOCKET_SET_READ_DATA_LENGTH(answer)	(int *) &IPC_GET_ARG1(answer)
+#define SOCKET_SET_READ_DATA_LENGTH(answer)	&IPC_GET_ARG1(answer)
 
 /** Returns the read data length message parameter.
  *  @param[in] call The message call structure.
  */
-#define SOCKET_GET_READ_DATA_LENGTH(call)		(int) IPC_GET_ARG1(call)
+#define SOCKET_GET_READ_DATA_LENGTH(call)	(int) IPC_GET_ARG1(call)
 
 /** Returns the backlog message parameter.
  *  @param[in] call The message call structure.
  */
-#define SOCKET_GET_BACKLOG(call)				(int) IPC_GET_ARG2(call)
+#define SOCKET_GET_BACKLOG(call)		(int) IPC_GET_ARG2(call)
 
 /** Returns the option level message parameter.
  *  @param[in] call The message call structure.
  */
-#define SOCKET_GET_OPT_LEVEL(call)			(int) IPC_GET_ARG2(call)
+#define SOCKET_GET_OPT_LEVEL(call)		(int) IPC_GET_ARG2(call)
 
 /** Returns the data fragment size message parameter.
@@ -150,10 +150,10 @@
  *  @param[out] answer The message answer structure.
  */
-#define SOCKET_SET_DATA_FRAGMENT_SIZE(answer)	(size_t *) &IPC_GET_ARG2(answer)
+#define SOCKET_SET_DATA_FRAGMENT_SIZE(answer)	&IPC_GET_ARG2(answer)
 
 /** Sets the address length in the message answer.
  *  @param[out] answer The message answer structure.
  */
-#define SOCKET_SET_ADDRESS_LENGTH(answer)		(socklen_t *) &IPC_GET_ARG3(answer)
+#define SOCKET_SET_ADDRESS_LENGTH(answer)	&IPC_GET_ARG3(answer)
 
 /** Returns the address length message parameter.
@@ -165,20 +165,20 @@
  *  @param[out] answer The message answer structure.
  */
-#define SOCKET_SET_HEADER_SIZE(answer)		(int *) &IPC_GET_ARG3(answer)
+#define SOCKET_SET_HEADER_SIZE(answer)		&IPC_GET_ARG3(answer)
 
 /** Returns the header size message parameter.
  *  @param[in] call The message call structure.
  */
-#define SOCKET_GET_HEADER_SIZE(call)			(int) IPC_GET_ARG3(call)
+#define SOCKET_GET_HEADER_SIZE(call)		(size_t) IPC_GET_ARG3(call)
 
 /** Returns the flags message parameter.
  *  @param[in] call The message call structure.
  */
-#define SOCKET_GET_FLAGS(call)				(int) IPC_GET_ARG4(call)
+#define SOCKET_GET_FLAGS(call)			(int) IPC_GET_ARG4(call)
 
 /** Returns the option name message parameter.
  *  @param[in] call The message call structure.
  */
-#define SOCKET_GET_OPT_NAME(call)				(int) IPC_GET_ARG4(call)
+#define SOCKET_GET_OPT_NAME(call)		(int) IPC_GET_ARG4(call)
 
 /** Returns the data fragments message parameter.
Index: uspace/srv/net/tl/tcp/tcp.c
===================================================================
--- uspace/srv/net/tl/tcp/tcp.c	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/net/tl/tcp/tcp.c	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -1060,4 +1060,5 @@
 	int app_phone = IPC_GET_PHONE(&call);
 	struct sockaddr * addr;
+	int socket_id;
 	size_t addrlen;
 	fibril_rwlock_t lock;
@@ -1104,6 +1105,7 @@
 					socket_data->local_sockets = &local_sockets;
 					fibril_rwlock_write_lock(&lock);
-					*SOCKET_SET_SOCKET_ID(answer) = SOCKET_GET_SOCKET_ID(call);
-					res = socket_create(&local_sockets, app_phone, socket_data, SOCKET_SET_SOCKET_ID(answer));
+					socket_id = SOCKET_GET_SOCKET_ID(call);
+					res = socket_create(&local_sockets, app_phone, socket_data, &socket_id);
+					*SOCKET_SET_SOCKET_ID(answer) = socket_id;
 					fibril_rwlock_write_unlock(&lock);
 					if(res == EOK){
Index: uspace/srv/net/tl/udp/udp.c
===================================================================
--- uspace/srv/net/tl/udp/udp.c	(revision 39e8406404efea86e341847c0720d5d65bed7959)
+++ uspace/srv/net/tl/udp/udp.c	(revision b535aebfcb7a8ea104bc8714a16879753bb853d0)
@@ -417,4 +417,5 @@
 	int app_phone = IPC_GET_PHONE(&call);
 	struct sockaddr * addr;
+	int socket_id;
 	size_t addrlen;
 	ipc_call_t answer;
@@ -451,6 +452,8 @@
 				break;
 			case NET_SOCKET:
-				*SOCKET_SET_SOCKET_ID(answer) = SOCKET_GET_SOCKET_ID(call);
-				res = socket_create(&local_sockets, app_phone, NULL, SOCKET_SET_SOCKET_ID(answer));
+				socket_id = SOCKET_GET_SOCKET_ID(call);
+				res = socket_create(&local_sockets, app_phone, NULL, &socket_id);
+				*SOCKET_SET_SOCKET_ID(answer) = socket_id;
+				
 				if(res == EOK){
 					if(tl_get_ip_packet_dimension(udp_globals.ip_phone, &udp_globals.dimensions, DEVICE_INVALID_ID, &packet_dimension) == EOK){
