Index: Makefile
===================================================================
--- Makefile	(revision 0c8e69204d1c8675761780e4b928c137593c09fc)
+++ Makefile	(revision 3550c393e4bb2a208392526efafab9cd54dcf5ac)
@@ -189,4 +189,11 @@
 	$(OBJDUMP) -t $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) > kernel.objdump
 	tools/genmap.py kernel.map.pre kernel.objdump generic/src/debug/real_map.bin 
+	# Do it once again, this time to get correct even the symbols
+	# on architectures, that have bss after symtab
+	$(OBJCOPY) -I binary -O $(BFD_NAME) -B $(BFD_ARCH) --prefix-sections=symtab generic/src/debug/real_map.bin generic/src/debug/sizeok_map.o
+	$(LD) -T arch/$(ARCH)/_link.ld $(LFLAGS) $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) generic/src/debug/sizeok_map.o -o $@ -Map kernel.map.pre
+	$(OBJDUMP) -t $(ARCH_OBJECTS) $(GENARCH_OBJECTS) $(GENERIC_OBJECTS) > kernel.objdump
+	tools/genmap.py kernel.map.pre kernel.objdump generic/src/debug/real_map.bin 
+	
 
 generic/src/debug/real_map.o: generic/src/debug/real_map.bin
Index: arch/amd64/_link.ld.in
===================================================================
--- arch/amd64/_link.ld.in	(revision 0c8e69204d1c8675761780e4b928c137593c09fc)
+++ arch/amd64/_link.ld.in	(revision 3550c393e4bb2a208392526efafab9cd54dcf5ac)
@@ -49,8 +49,9 @@
 
 		*(.eh_frame);
-		*(.bss);		/* uninitialized static variables */
 
 		symbol_table = .;
 		*(symtab.*);            /* Symbol table, must be LAST symbol!*/
+
+		*(.bss);		/* uninitialized static variables */
 
 		kdata_end = .;
Index: arch/ia32/_link.ld.in
===================================================================
--- arch/ia32/_link.ld.in	(revision 0c8e69204d1c8675761780e4b928c137593c09fc)
+++ arch/ia32/_link.ld.in	(revision 3550c393e4bb2a208392526efafab9cd54dcf5ac)
@@ -47,8 +47,7 @@
 		hardcoded_unmapped_kdata_size = .;
 		LONG(unmapped_kdata_end - unmapped_kdata_start);
-		*(.bss);			/* uninitialized static variables */
 		symbol_table = .;
 		*(symtab.*);            	/* Symbol table, must be LAST symbol! */
-
+		*(.bss);			/* uninitialized static variables */
 		kdata_end = .;
 	}
Index: generic/src/console/cmd.c
===================================================================
--- generic/src/console/cmd.c	(revision 0c8e69204d1c8675761780e4b928c137593c09fc)
+++ generic/src/console/cmd.c	(revision 3550c393e4bb2a208392526efafab9cd54dcf5ac)
@@ -359,5 +359,5 @@
 		printf("Calling f(): 0x%p: %s\n", symaddr, symbol);
 		f =  (__native (*)(void)) symaddr;
-		printf("Result: 0x%X\n", f());
+		printf("Result: 0x%p\n", f());
 	}
 	
@@ -383,5 +383,5 @@
 		printf("Calling f(0x%x): 0x%p: %s\n", arg1, symaddr, symbol);
 		f =  (__native (*)(__native)) symaddr;
-		printf("Result: 0x%x\n", f(arg1));
+		printf("Result: 0x%p\n", f(arg1));
 	}
 	
@@ -409,5 +409,5 @@
 		       arg1, arg2, symaddr, symbol);
 		f =  (__native (*)(__native,__native)) symaddr;
-		printf("Result: 0x%x\n", f(arg1, arg2));
+		printf("Result: 0x%p\n", f(arg1, arg2));
 	}
 	
@@ -436,5 +436,5 @@
 		       arg1, arg2, arg3, symaddr, symbol);
 		f =  (__native (*)(__native,__native,__native)) symaddr;
-		printf("Result: 0x%x\n", f(arg1, arg2, arg3));
+		printf("Result: 0x%p\n", f(arg1, arg2, arg3));
 	}
 	
Index: generic/src/console/kconsole.c
===================================================================
--- generic/src/console/kconsole.c	(revision 0c8e69204d1c8675761780e4b928c137593c09fc)
+++ generic/src/console/kconsole.c	(revision 3550c393e4bb2a208392526efafab9cd54dcf5ac)
@@ -216,5 +216,5 @@
 		return 0;
 
-	if (found > 1) {
+	if (found > 1 && !strlen(output)) {
 		printf("\n");
 		startpos = NULL;
@@ -287,10 +287,12 @@
 			for (i=0;tmp[i] && curlen < MAX_CMDLINE;i++,curlen++)
 				insert_char(current, tmp[i], i+position);
-			if (found == 1) { /* One match */
-				for (i=position;i<curlen;i++)
+
+			if (strlen(tmp) || found==1) { /* If we have a hint */
+				for (i=position;i<curlen;i++) 
 					putchar(current[i]);
 				position += strlen(tmp);
 				/* Add space to end */
-				if (position == curlen && curlen < MAX_CMDLINE) {
+				if (found == 1 && position == curlen && \
+				    curlen < MAX_CMDLINE) {
 					current[position] = ' ';
 					curlen++;
@@ -298,5 +300,5 @@
 					putchar(' ');
 				}
-			} else {
+			} else { /* No hint, table was printed */
 				printf("%s> ", prompt);
 				for (i=0; i<curlen;i++)
Index: generic/src/debug/symtab.c
===================================================================
--- generic/src/debug/symtab.c	(revision 0c8e69204d1c8675761780e4b928c137593c09fc)
+++ generic/src/debug/symtab.c	(revision 3550c393e4bb2a208392526efafab9cd54dcf5ac)
@@ -173,5 +173,5 @@
 		return 0;
 
-	if (found > 1) {
+	if (found > 1 && !strlen(output)) {
 		printf("\n");
 		startpos = 0;
