diff --git a/arch/arc/Makefile b/arch/arc/Makefile
index f6024b9..12c6907 100755
--- a/arch/arc/Makefile
+++ b/arch/arc/Makefile
@@ -61,7 +61,8 @@
 KBUILD_CFLAGS	+= $(shell if [ $(call cc-version, $(CC)) -gt 0400 ] ; then echo $(call cc-option,-mno-sdata); fi ;)
 
 ifdef CONFIG_ARC_STACK_UNWIND
-KBUILD_CFLAGS		+= -fasynchronous-unwind-tables
+# KBUILD_CFLAGS		+= -fasynchronous-unwind-tables
+KBUILD_CFLAGS		+= -gdwarf-2
 endif
 
 LINUXINCLUDE +=  -include ${src}/arch/arc/include/asm/defines.h \
diff --git a/arch/arc/boot/Makefile b/arch/arc/boot/Makefile
index 4c4e272..58dfc7c 100755
--- a/arch/arc/boot/Makefile
+++ b/arch/arc/boot/Makefile
@@ -14,7 +14,7 @@
 
 MKIMAGE =mkimage
 MKIMAGEFLAGS =-A arc -O linux -C none  -T kernel -a 0x80000000 -e 0x80002000 -n "ARC700 Linux kernel" -d Image
-OBJCOPYFLAGS =-O binary -R .note -R .comment -S vmlinux
+OBJCOPYFLAGS =-O binary -R .note -R .note.gnu.build-id -R .comment -S vmlinux
 
 # From Beta's doc:
 # ZTEXTADDR - Address where zImage is located by the bootloader
diff --git a/arch/arc/include/asm/bitops.h b/arch/arc/include/asm/bitops.h
index aa2757f..f6b1c0c 100755
--- a/arch/arc/include/asm/bitops.h
+++ b/arch/arc/include/asm/bitops.h
@@ -178,14 +178,13 @@
     unsigned long temp, flags;
     m += nr >> 5;
 
+    if (__builtin_constant_p(nr))
+        nr &= 0x1f;
+
     bitops_lock(flags);
 
-    __asm__ __volatile__(
-    "   ld%U3 %0,%3\n\t"
-    "   bset %0,%0,%2\n\t"
-    "   st%U1 %0,%1\n\t"
-    :"=&r" (temp), "=o" (*m)
-    :"ir" (nr), "m" (*m));
+    temp = *m;
+    *m = temp | (1UL << nr);
 
     bitops_unlock(flags);
 }
@@ -195,14 +194,13 @@
     unsigned long temp, flags;
     m += nr >> 5;
 
+    if (__builtin_constant_p(nr))
+        nr &= 0x1f;
+
     bitops_lock(flags);
 
-    __asm__ __volatile__(
-       "    ld%U3 %0,%3\n\t"
-       "    bclr %0,%0,%2\n\t"
-       "    st%U1 %0,%1\n\t"
-       :"=&r" (temp), "=o" (*m)
-       :"ir" (nr), "m" (*m));
+    temp = *m;
+    *m = temp & ~(1UL << nr);
 
     bitops_unlock(flags);
 }
@@ -212,14 +210,13 @@
     unsigned long temp, flags;
     m += nr >> 5;
 
+    if (__builtin_constant_p(nr))
+        nr &= 0x1f;
+
     bitops_lock(flags);
 
-    __asm__ __volatile__(
-       "    ld%U3 %0,%3\n\t"
-       "    bxor %0,%0,%2\n\t"
-       "    st%U1 %0,%1\n\t"
-       :"=&r" (temp), "=o" (*m)
-       :"ir" (nr), "m" (*m));
+    temp = *m;
+    *m = temp ^ (1UL << nr);
 
     bitops_unlock(flags);
 }
@@ -228,24 +225,19 @@
 static inline int
 test_and_set_bit(unsigned long nr, volatile unsigned long *m)
 {
-    unsigned long old, temp, flags;
+    unsigned long old, flags;
     m += nr >> 5;
-    // int old = *m; This is wrong, we are reading data before getting lock
+
+    if (__builtin_constant_p(nr))
+        nr &= 0x1f;
 
     bitops_lock(flags);
 
     old = *m;
-
-    __asm__ __volatile__(
-       "    bset  %0,%3,%2\n\t"
-       "    st%U1 %0,%1\n\t"
-       :"=r" (temp), "=o" (*m)
-       :"ir" (nr), "r"(old));
+    *m = old | (1 << nr);
 
     bitops_unlock(flags);
 
-    if (__builtin_constant_p(nr)) nr &= 0x1f;
-
     return (old & (1 << nr)) != 0;
 }
 
@@ -253,23 +245,19 @@
 static inline int
 test_and_clear_bit(unsigned long nr, volatile unsigned long *m)
 {
-    unsigned long temp, old, flags;
+    unsigned long old, flags;
     m += nr >> 5;
 
+    if (__builtin_constant_p(nr))
+        nr &= 0x1f;
+
     bitops_lock(flags);
 
     old = *m;
-
-    __asm__ __volatile__(
-       "    bclr  %0,%3,%2\n\t"
-       "    st%U1 %0,%1\n\t"
-       :"=r" (temp), "=o" (*m)
-       :"ir" (nr), "r"(old));
+    *m = old & ~(1 << nr);
 
     bitops_unlock(flags);
 
-    if (__builtin_constant_p(nr)) nr &= 0x1f;
-
     return (old & (1 << nr)) != 0;
 }
 
@@ -277,23 +265,19 @@
 static inline int
 test_and_change_bit(unsigned long nr, volatile unsigned long *m)
 {
-    unsigned long temp, old, flags;
+    unsigned long old, flags;
     m += nr >> 5;
 
+    if (__builtin_constant_p(nr))
+        nr &= 0x1f;
+
     bitops_lock(flags);
 
     old = *m;
-
-    __asm__ __volatile__(
-       "    bxor %0,%3,%2\n\t"
-       "    st%U1 %0,%1\n\t"
-       :"=r" (temp), "=o" (*m)
-       :"ir" (nr), "r"(old));
+    *m = old ^ (1 << nr);
 
     bitops_unlock(flags);
 
-    if (__builtin_constant_p(nr)) nr &= 0x1f;
-
     return (old & (1 << nr)) != 0;
 }
 
diff --git a/arch/arc/include/asm/irqflags.h b/arch/arc/include/asm/irqflags.h
index 507c800..636528c 100644
--- a/arch/arc/include/asm/irqflags.h
+++ b/arch/arc/include/asm/irqflags.h
@@ -117,17 +117,17 @@
  */
 
 #define mask_interrupt(x)  __asm__ __volatile__ (   \
-    "lr r20, [auxienable] \n\t"                     \
+    "lr r20, [0x40c] \n\t"                     \
     "and    r20, r20, %0 \n\t"                      \
-    "sr     r20,[auxienable] \n\t"                  \
+    "sr     r20,[0x40c] \n\t"                  \
     :                                               \
     :"r" (~(x))                                     \
     :"r20", "memory")
 
 #define unmask_interrupt(x)  __asm__ __volatile__ ( \
-    "lr r20, [auxienable] \n\t"                     \
+    "lr r20, [0x40c] \n\t"                     \
     "or     r20, r20, %0 \n\t"                      \
-    "sr     r20, [auxienable] \n\t"                 \
+    "sr     r20, [0x40c] \n\t"                 \
     :                                               \
     :"r" (x)                                        \
     :"r20", "memory")
diff --git a/arch/arc/proc/arc700/entry.S b/arch/arc/proc/arc700/entry.S
index fb8af28..76cfecc 100755
--- a/arch/arc/proc/arc700/entry.S
+++ b/arch/arc/proc/arc700/entry.S
@@ -929,8 +929,8 @@
 ; The syscall table starts here...
 .data
 ARC_ENTRY sys_call_table
-__syscall_start:
   /* 0 */   .long   SYMBOL_NAME(sys_ni_syscall)
+__syscall_start:
         .long   SYMBOL_NAME(sys_exit)
         .long   SYMBOL_NAME(sys_fork_wrapper)
         .long   SYMBOL_NAME(sys_read)
diff --git a/arch/arc/proc/arc700/head.S b/arch/arc/proc/arc700/head.S
index 2315c3c..2e2973d 100755
--- a/arch/arc/proc/arc700/head.S
+++ b/arch/arc/proc/arc700/head.S
@@ -68,7 +68,7 @@
 ; u-boot passes the command line variable at the beginning of BSS
 ; copy the first few bytes out of the BSS into the command_line variable.
 
-    mov r5, [SYMBOL_NAME(command_line)]
+    mov r5, SYMBOL_NAME(command_line)
     mov r6, __bss_start
 
 __copy_commandline:
@@ -105,7 +105,7 @@
 
 #ifdef CONFIG_ARCH_ARC_CURR_IN_REG
     ; setup init_task as "current"
-    mov r25, [SYMBOL_NAME(init_task)]
+    mov r25, SYMBOL_NAME(init_task)
     st r25, [SYMBOL_NAME(_current_task)]
 #endif
 
diff --git a/drivers/ruby/iputil.c b/drivers/ruby/iputil.c
index 1c43200..d7ba4da 100644
--- a/drivers/ruby/iputil.c
+++ b/drivers/ruby/iputil.c
@@ -86,7 +86,6 @@
 	int bestzend = 0;
 	int bestzlen = 0;
 	int inz = 0;
-	int donez = 0;
 	const int addr16len = (int)(sizeof(struct in6_addr) / sizeof(uint16_t));
 
 	/* parse address, looking for longest substring of 0s */
@@ -135,7 +134,6 @@
 		} else if (bestzlen && (i == bestzend)) {
 			p += sprintf(p, "::");
 			inz = 0;
-			donez = 1;
 		} else if (inz) {
 		} else {
 			WARN_ONCE(1, "%s: implementation error", __FUNCTION__);
diff --git a/drivers/topaz/hbm.c b/drivers/topaz/hbm.c
index 25c9260..627bf0f 100644
--- a/drivers/topaz/hbm.c
+++ b/drivers/topaz/hbm.c
@@ -1044,14 +1044,15 @@
 
 	local_bh_enable();
 
-	out:
+	rc = count;
+out:
 	if (cmd) {
 		kfree(cmd);
 	}
 	if (words) {
 		kfree(words);
 	}
-	return count;
+	return rc;
 }
 
 static inline uint32_t hbm_get_rel_cnt(int pool)
