diff --git a/arch/arc/include/asm/linkage.h b/arch/arc/include/asm/linkage.h
new file mode 100644
index 0000000000000000000000000000000000000000..2d1a603062cf2ca6d8c5664f377b3a9fcb364dc8
--- /dev/null
+++ b/arch/arc/include/asm/linkage.h
@@ -0,0 +1,12 @@
+/*
+ * Copyright (C) 2004, 2007-2010, 2011-2015 Synopsys, Inc. All rights reserved.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef __ASM_ARC_LINKAGE_H
+#define __ASM_ARC_LINKAGE_H
+
+#define ASM_NL		 `	/* use '`' to mark new line in macro */
+
+#endif /* __ASM_ARC_LINKAGE_H */
diff --git a/include/linux/linkage.h b/include/linux/linkage.h
index 5797498adceceb48c5368d91c3155a59daadb094..efb04eeed4b073d7405ea737507ac95f954de021 100644
--- a/include/linux/linkage.h
+++ b/include/linux/linkage.h
@@ -11,6 +11,11 @@
 
 #include <asm/linkage.h>
 
+/* Some toolchains use other characters (e.g. '`') to mark new line in macro */
+#ifndef ASM_NL
+#define ASM_NL		 ;
+#endif
+
 #ifdef __cplusplus
 #define CPP_ASMLINKAGE		extern "C"
 #else
@@ -43,15 +48,15 @@
 #define ALIGN_STR		__ALIGN_STR
 
 #define LENTRY(name) \
-	ALIGN; \
+	ALIGN ASM_NL \
 	SYMBOL_NAME_LABEL(name)
 
 #define ENTRY(name) \
-	.globl SYMBOL_NAME(name); \
+	.globl SYMBOL_NAME(name) ASM_NL \
 	LENTRY(name)
 
 #define WEAK(name) \
-	.weak SYMBOL_NAME(name); \
+	.weak SYMBOL_NAME(name) ASM_NL \
 	LENTRY(name)
 
 #ifndef END
@@ -61,7 +66,7 @@
 
 #ifndef ENDPROC
 #define ENDPROC(name) \
-	.type name STT_FUNC; \
+	.type name STT_FUNC ASM_NL \
 	END(name)
 #endif