Index: boot/arch/arm32/loader/asm.S
===================================================================
--- boot/arch/arm32/loader/asm.S	(revision d2e9c47bcb3bf989ac5e9dc8f69fca7d2e0ae50f)
+++ boot/arch/arm32/loader/asm.S	(revision da349da00e6a694ae8529efd7efc34b7534e322f)
@@ -36,5 +36,6 @@
 	bic     r3, r3, #3
 	cmp     r1, r3
-	stmdb   sp!, {r4, lr}
+	stmdb   sp!, {r4, r5, lr}
+	mov	r5, r0
 	beq     4f
 1:
@@ -49,6 +50,6 @@
 	bne     2b
 3:
-	mov     r0, r1
-	ldmia   sp!, {r4, pc}
+	mov     r0, r5
+	ldmia   sp!, {r4, r5, pc}
 4:
 	add     r3, r0, #3
Index: boot/arch/mips32/loader/asm.S
===================================================================
--- boot/arch/mips32/loader/asm.S	(revision d2e9c47bcb3bf989ac5e9dc8f69fca7d2e0ae50f)
+++ boot/arch/mips32/loader/asm.S	(revision da349da00e6a694ae8529efd7efc34b7534e322f)
@@ -49,4 +49,5 @@
 	beq	$a1,$v0,3f
 	move	$t0,$a0
+	move	$t2,$a0			# save dst
 
 0:
@@ -64,5 +65,5 @@
 2:
 	jr	$ra
-	move	$v0,$a1
+	move	$v0,$t2
 
 3:
@@ -104,5 +105,5 @@
 
 	jr	$ra
-	move	$v0,$a1
+	move	$v0,$t2
 
 jump_to_kernel:
Index: boot/arch/sparc64/loader/asm.S
===================================================================
--- boot/arch/sparc64/loader/asm.S	(revision d2e9c47bcb3bf989ac5e9dc8f69fca7d2e0ae50f)
+++ boot/arch/sparc64/loader/asm.S	(revision da349da00e6a694ae8529efd7efc34b7534e322f)
@@ -31,4 +31,7 @@
 #include <register.h>
 
+.register       %g2, #scratch
+.register       %g3, #scratch
+
 .text
 
@@ -42,6 +45,5 @@
 	
 memcpy:
-	.register       %g2, #scratch
-        .register       %g3, #scratch
+	mov	%o0, %o3		! save dst
 	add	%o1, 7, %g1
 	and	%g1, -8, %g1
@@ -62,5 +64,5 @@
 2:
 	jmp	%o7 + 8			! exit point
-	mov	%o1, %o0
+	mov	%o3, %o0
 3:
 	and	%g1, -8, %g1
@@ -96,5 +98,5 @@
 
 	jmp	%o7 + 8			! exit point
-	mov	%o1, %o0
+	mov	%o3, %o0
 
 jump_to_kernel:
Index: kernel/arch/amd64/src/asm_utils.S
===================================================================
--- kernel/arch/amd64/src/asm_utils.S	(revision d2e9c47bcb3bf989ac5e9dc8f69fca7d2e0ae50f)
+++ kernel/arch/amd64/src/asm_utils.S	(revision da349da00e6a694ae8529efd7efc34b7534e322f)
@@ -99,10 +99,10 @@
  * @param MEMCPY_SIZE	Number of bytes to copy.
  *
- * @retrun MEMCPY_SRC on success, 0 on failure.
+ * @retrun MEMCPY_DST on success, 0 on failure.
  */
 memcpy:
 memcpy_from_uspace:
 memcpy_to_uspace:
-	movq MEMCPY_SRC, %rax
+	movq MEMCPY_DST, %rax
 
 	movq MEMCPY_SIZE, %rcx
Index: kernel/arch/arm32/src/asm.S
===================================================================
--- kernel/arch/arm32/src/asm.S	(revision d2e9c47bcb3bf989ac5e9dc8f69fca7d2e0ae50f)
+++ kernel/arch/arm32/src/asm.S	(revision da349da00e6a694ae8529efd7efc34b7534e322f)
@@ -46,5 +46,6 @@
 	bic     r3, r3, #3
 	cmp     r1, r3
-	stmdb   sp!, {r4, lr}
+	stmdb   sp!, {r4, r5, lr}
+	mov	r5, r0			/* save dst */
 	beq     4f
 1:
@@ -59,6 +60,6 @@
 	bne     2b
 3:
-	mov     r0, r1
-	ldmia   sp!, {r4, pc}
+	mov     r0, r5
+	ldmia   sp!, {r4, r5, pc}
 4:
 	add     r3, r0, #3
@@ -95,4 +96,4 @@
 memcpy_from_uspace_failover_address:
 memcpy_to_uspace_failover_address:
-	mov		r0, #0
-	ldmia   sp!, {r4, pc}
+	mov	r0, #0
+	ldmia   sp!, {r4, r5, pc}
Index: kernel/arch/ia32/src/asm.S
===================================================================
--- kernel/arch/ia32/src/asm.S	(revision d2e9c47bcb3bf989ac5e9dc8f69fca7d2e0ae50f)
+++ kernel/arch/ia32/src/asm.S	(revision da349da00e6a694ae8529efd7efc34b7534e322f)
@@ -72,5 +72,5 @@
  * @param MEMCPY_SIZE(%esp)	Size.
  *
- * @return MEMCPY_SRC(%esp) on success and 0 on failure.
+ * @return MEMCPY_DST(%esp) on success and 0 on failure.
  */
 memcpy:
@@ -97,5 +97,5 @@
 	movl %edx, %edi
 	movl %eax, %esi
-	movl MEMCPY_SRC(%esp), %eax	/* MEMCPY_SRC(%esp), success */
+	movl MEMCPY_DST(%esp), %eax	/* MEMCPY_DST(%esp), success */
 	ret
 	
Index: kernel/arch/ia32xen/src/asm.S
===================================================================
--- kernel/arch/ia32xen/src/asm.S	(revision d2e9c47bcb3bf989ac5e9dc8f69fca7d2e0ae50f)
+++ kernel/arch/ia32xen/src/asm.S	(revision da349da00e6a694ae8529efd7efc34b7534e322f)
@@ -68,5 +68,5 @@
  * @param MEMCPY_SIZE(%esp)	Size.
  *
- * @return MEMCPY_SRC(%esp) on success and 0 on failure.
+ * @return MEMCPY_DST(%esp) on success and 0 on failure.
  */
 memcpy:
@@ -93,5 +93,5 @@
 	movl %edx, %edi
 	movl %eax, %esi
-	movl MEMCPY_SRC(%esp), %eax		/* MEMCPY_SRC(%esp), success */
+	movl MEMCPY_DST(%esp), %eax		/* MEMCPY_DST(%esp), success */
 	ret
 	
Index: kernel/arch/ia64/src/asm.S
===================================================================
--- kernel/arch/ia64/src/asm.S	(revision d2e9c47bcb3bf989ac5e9dc8f69fca7d2e0ae50f)
+++ kernel/arch/ia64/src/asm.S	(revision da349da00e6a694ae8529efd7efc34b7534e322f)
@@ -52,5 +52,5 @@
 	adds r14 = 7, in1
 	mov r2 = ar.lc
-	mov r8 = in1 ;;
+	mov r8 = in0 ;;
 	and r14 = -8, r14 ;;
 	cmp.ne p6, p7 = r14, in1
Index: kernel/arch/mips32/src/asm.S
===================================================================
--- kernel/arch/mips32/src/asm.S	(revision d2e9c47bcb3bf989ac5e9dc8f69fca7d2e0ae50f)
+++ kernel/arch/mips32/src/asm.S	(revision da349da00e6a694ae8529efd7efc34b7534e322f)
@@ -72,4 +72,5 @@
 	beq	$a1,$v0,3f
 	move	$t0,$a0
+	move	$t2,$a0			# save dst
 
 0:
@@ -87,5 +88,5 @@
 2:
 	jr	$ra
-	move	$v0,$a1
+	move	$v0,$t2
 
 3:
@@ -127,5 +128,5 @@
 
 	jr	$ra
-	move	$v0,$a1
+	move	$v0,$t2
 
 memcpy_from_uspace_failover_address:
Index: kernel/arch/sparc64/src/asm.S
===================================================================
--- kernel/arch/sparc64/src/asm.S	(revision d2e9c47bcb3bf989ac5e9dc8f69fca7d2e0ae50f)
+++ kernel/arch/sparc64/src/asm.S	(revision da349da00e6a694ae8529efd7efc34b7534e322f)
@@ -42,4 +42,5 @@
 .global memcpy
 memcpy:
+	mov	%o0, %o3		! save dst
 	add	%o1, 7, %g1
 	and	%g1, -8, %g1
@@ -60,5 +61,5 @@
 2:
 	jmp	%o7 + 8			! exit point
-	mov	%o1, %o0
+	mov	%o3, %o0
 3:
 	and	%g1, -8, %g1
@@ -94,5 +95,5 @@
 
 	jmp	%o7 + 8			! exit point
-	mov	%o1, %o0
+	mov	%o3, %o0
 
 /*
@@ -101,4 +102,5 @@
 .global memcpy_from_uspace
 memcpy_from_uspace:
+	mov	%o0, %o3		! save dst
 	add	%o1, 7, %g1
 	and	%g1, -8, %g1
@@ -119,5 +121,5 @@
 2:
 	jmp	%o7 + 8			! exit point
-	mov	%o1, %o0
+	mov	%o3, %o0
 3:
 	and	%g1, -8, %g1
@@ -153,5 +155,5 @@
 
 	jmp	%o7 + 8			! exit point
-	mov	%o1, %o0
+	mov	%o3, %o0
 
 /*
@@ -160,4 +162,5 @@
 .global memcpy_to_uspace
 memcpy_to_uspace:
+	mov	%o0, %o3		! save dst
 	add	%o1, 7, %g1
 	and	%g1, -8, %g1
@@ -178,5 +181,5 @@
 2:
 	jmp	%o7 + 8			! exit point
-	mov	%o1, %o0
+	mov	%o3, %o0
 3:
 	and	%g1, -8, %g1
@@ -212,5 +215,5 @@
 
 	jmp	%o7 + 8			! exit point
-	mov	%o1, %o0
+	mov	%o3, %o0
 
 .global memcpy_from_uspace_failover_address
Index: kernel/generic/src/lib/memstr.c
===================================================================
--- kernel/generic/src/lib/memstr.c	(revision d2e9c47bcb3bf989ac5e9dc8f69fca7d2e0ae50f)
+++ kernel/generic/src/lib/memstr.c	(revision da349da00e6a694ae8529efd7efc34b7534e322f)
@@ -75,5 +75,5 @@
 	}
 		
-	return (char *) src;
+	return (char *) dst;
 }
 
Index: uspace/lib/libc/generic/string.c
===================================================================
--- uspace/lib/libc/generic/string.c	(revision d2e9c47bcb3bf989ac5e9dc8f69fca7d2e0ae50f)
+++ uspace/lib/libc/generic/string.c	(revision da349da00e6a694ae8529efd7efc34b7534e322f)
@@ -70,5 +70,5 @@
 		    ((unsigned char *) (((unsigned long *) src) + i))[j];
 		
-	return (char *) src;
+	return (char *) dst;
 }
 
@@ -88,5 +88,5 @@
 		    ((unsigned char *) (((unsigned long *) src) + i))[j];
 		
-	return (char *) src;
+	return (char *) dst;
 }
 
@@ -105,5 +105,5 @@
 		((unsigned long *) dst)[i] = ((unsigned long *) src)[i];
 		
-	return (char *) src;
+	return (char *) dst;
 }
 
