aboutsummaryrefslogtreecommitdiff
path: root/libgloss/arc
diff options
context:
space:
mode:
authorYuriy Kolerov <kolerov93@gmail.com>2024-05-21 10:56:57 +0100
committerJeff Johnston <jjohnstn@redhat.com>2024-05-22 14:26:40 -0400
commit2935b9e718723b31b084ec86a00c836e32c515b5 (patch)
tree951895879d5760078900e200e2abfd2659e2a87d /libgloss/arc
parent6f8ee57d0993c9606c950d311c2abd93e233491b (diff)
downloadnewlib-2935b9e718723b31b084ec86a00c836e32c515b5.zip
newlib-2935b9e718723b31b084ec86a00c836e32c515b5.tar.gz
newlib-2935b9e718723b31b084ec86a00c836e32c515b5.tar.bz2
arc: libgloss: Add support of EM Starter Kit board
These specs files are introduced for EMSK board: * emsk1_em4.specs - EMSKv1 with EM4 core, everything in ICCM/DCCM memory * emsk1_em6.specs - EMSKv1 with EM6 core, everything in ICCM/DCCM memory * emsk1_em6_ram.specs - EMSKv1 with EM6 core, startup code in ICCM and everything else in RAM * emsk2.1_em5d.specs - EMSKv2.1 with EM5D core, everything in ICCM/DCCM memory * emsk2.1_em7d.specs - EMSKv2.1 with EM7D core, everything in ICCM/DCCM memory * emsk2.1_em7d_ram.specs - EMSKv2.1 with EM7D core, startup code in ICCM and everything else in RAM * emsk2.2_em7d.specs - EMSKv2.2+ with EM7D core, everything in ICCM/DCCM memory * emsk2.2_em7d_ram.specs - EMSKv2.2+ with EM7D core, startup code in ICCM and everything else in RAM * emsk2.2_em9d.specs - EMSKv2.2+ with EM9D core, everything in ICCM/DCCM memory * emsk2.2_em9d_ram.specs - EMSKv2.2+ with EM9D core, startup code in ICCM and everything else in RAM * emsk2.2_em11d.specs - EMSKv2.2+ with EM11D core, everything in ICCM/DCCM memory * emsk2.2_em11d_ram.specs - EMSKv2.2+ with EM11D core, startup code in ICCM and everything else in RAM An example of building an application: $ arc-elf32-gcc -mcpu=em -specs=emsk2.2_em11d_ram.specs main.c -o main Signed-off-by: Vladimir Isaev <vvisaev@gmail.com> Signed-off-by: Yuriy Kolerov <kolerov93@gmail.com>
Diffstat (limited to 'libgloss/arc')
-rw-r--r--libgloss/arc/emsk-uart-setup.c33
-rw-r--r--libgloss/arc/emsk1_em4.ld14
-rw-r--r--libgloss/arc/emsk1_em4.specs18
-rw-r--r--libgloss/arc/emsk1_em6.ld14
-rw-r--r--libgloss/arc/emsk1_em6.specs18
-rw-r--r--libgloss/arc/emsk1_em6_ram.ld14
-rw-r--r--libgloss/arc/emsk1_em6_ram.specs18
-rw-r--r--libgloss/arc/emsk2.1_em5d.ld14
-rw-r--r--libgloss/arc/emsk2.1_em5d.specs18
-rw-r--r--libgloss/arc/emsk2.1_em7d.ld15
-rw-r--r--libgloss/arc/emsk2.1_em7d.specs18
-rw-r--r--libgloss/arc/emsk2.1_em7d_ram.ld15
-rw-r--r--libgloss/arc/emsk2.1_em7d_ram.specs18
-rw-r--r--libgloss/arc/emsk2.2_em11d.ld15
-rw-r--r--libgloss/arc/emsk2.2_em11d.specs18
-rw-r--r--libgloss/arc/emsk2.2_em11d_ram.ld15
-rw-r--r--libgloss/arc/emsk2.2_em11d_ram.specs18
-rw-r--r--libgloss/arc/emsk2.2_em7d.ld15
-rw-r--r--libgloss/arc/emsk2.2_em7d.specs18
-rw-r--r--libgloss/arc/emsk2.2_em7d_ram.ld15
-rw-r--r--libgloss/arc/emsk2.2_em7d_ram.specs18
-rw-r--r--libgloss/arc/emsk2.2_em9d.ld15
-rw-r--r--libgloss/arc/emsk2.2_em9d.specs18
-rw-r--r--libgloss/arc/emsk2.2_em9d_ram.ld15
-rw-r--r--libgloss/arc/emsk2.2_em9d_ram.specs18
25 files changed, 425 insertions, 0 deletions
diff --git a/libgloss/arc/emsk-uart-setup.c b/libgloss/arc/emsk-uart-setup.c
new file mode 100644
index 0000000..b8e1ea8
--- /dev/null
+++ b/libgloss/arc/emsk-uart-setup.c
@@ -0,0 +1,33 @@
+/*
+ * emsk-uart-setup.c -- provide _setup_low_level() to initialize UART.
+ *
+ * Copyright (c) 2024 Synopsys Inc.
+ *
+ * The authors hereby grant permission to use, copy, modify, distribute,
+ * and license this software and its documentation for any purpose, provided
+ * that existing copyright notices are retained in all copies and that this
+ * notice is included verbatim in any distributions. No written agreement,
+ * license, or royalty fee is required for any of the authorized uses.
+ * Modifications to this software may be copyrighted by their authors
+ * and need not follow the licensing terms described here, provided that
+ * the new terms are clearly indicated on the first page of each file where
+ * they apply.
+ *
+ */
+
+#include "uart-8250.h"
+
+/* Setup UART parameters. */
+int
+_setup_low_level (void)
+{
+ const uint32_t aux_dmp_per = 0x20a;
+ void * const uart_base = (char *)__builtin_arc_lr(aux_dmp_per) + 0x00009000;
+ const int uart_aux_mapped = 0;
+ const uint32_t uart_clock = 50000000;
+ const uint32_t uart_baud = 115200;
+
+ _uart_8250_setup (uart_base, uart_aux_mapped, uart_clock, uart_baud);
+
+ return 0;
+}
diff --git a/libgloss/arc/emsk1_em4.ld b/libgloss/arc/emsk1_em4.ld
new file mode 100644
index 0000000..4164805
--- /dev/null
+++ b/libgloss/arc/emsk1_em4.ld
@@ -0,0 +1,14 @@
+/* Memory map fo ARC EM Starter Kit v1 - EM4 */
+
+MEMORY
+{
+ ICCM : ORIGIN = 0x00000000, LENGTH = 128K
+ DCCM : ORIGIN = 0x80000000, LENGTH = 64K
+}
+
+REGION_ALIAS("startup", ICCM)
+REGION_ALIAS("text", ICCM)
+REGION_ALIAS("data", DCCM)
+REGION_ALIAS("sdata", DCCM)
+
+INCLUDE arcv2elf-common.ld
diff --git a/libgloss/arc/emsk1_em4.specs b/libgloss/arc/emsk1_em4.specs
new file mode 100644
index 0000000..06b991e
--- /dev/null
+++ b/libgloss/arc/emsk1_em4.specs
@@ -0,0 +1,18 @@
+%rename link emsk_link
+%rename link_gcc_c_sequence emsk_link_gcc_c_sequence
+%rename startfile emsk_startfile
+
+*link:
+%(emsk_link) -T emsk1_em4.ld%s
+
+*emsk_libgloss:
+-luart_8250 -lemsk_uart
+
+*emsk_libc:
+%{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano}
+
+*link_gcc_c_sequence:
+%(emsk_link_gcc_c_sequence) --start-group %G %(emsk_libc) %(emsk_libgloss) --end-group
+
+*startfile:
+%(emsk_startfile) arc-main-helper%O%s
diff --git a/libgloss/arc/emsk1_em6.ld b/libgloss/arc/emsk1_em6.ld
new file mode 100644
index 0000000..ab620c0
--- /dev/null
+++ b/libgloss/arc/emsk1_em6.ld
@@ -0,0 +1,14 @@
+/* Memory map for ARC EM Starter Kit v1 - EM6GP */
+
+MEMORY
+{
+ ICCM : ORIGIN = 0x00000000, LENGTH = 32K
+ DRAM : ORIGIN = 0x10000000, LENGTH = 128M
+}
+
+REGION_ALIAS("startup", ICCM)
+REGION_ALIAS("text", ICCM)
+REGION_ALIAS("data", DRAM)
+REGION_ALIAS("sdata", DRAM)
+
+INCLUDE arcv2elf-common.ld
diff --git a/libgloss/arc/emsk1_em6.specs b/libgloss/arc/emsk1_em6.specs
new file mode 100644
index 0000000..51ce25e
--- /dev/null
+++ b/libgloss/arc/emsk1_em6.specs
@@ -0,0 +1,18 @@
+%rename link emsk_link
+%rename link_gcc_c_sequence emsk_link_gcc_c_sequence
+%rename startfile emsk_startfile
+
+*link:
+%(emsk_link) -T emsk1_em6.ld%s
+
+*emsk_libgloss:
+-luart_8250 -lemsk_uart
+
+*emsk_libc:
+%{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano}
+
+*link_gcc_c_sequence:
+%(emsk_link_gcc_c_sequence) --start-group %G %(emsk_libc) %(emsk_libgloss) --end-group
+
+*startfile:
+%(emsk_startfile) arc-main-helper%O%s
diff --git a/libgloss/arc/emsk1_em6_ram.ld b/libgloss/arc/emsk1_em6_ram.ld
new file mode 100644
index 0000000..5bc702b
--- /dev/null
+++ b/libgloss/arc/emsk1_em6_ram.ld
@@ -0,0 +1,14 @@
+/* Memory map for ARC EM Starter Kit v1 - EM6GP */
+
+MEMORY
+{
+ ICCM : ORIGIN = 0x00000000, LENGTH = 32K
+ DRAM : ORIGIN = 0x10000000, LENGTH = 128M
+}
+
+REGION_ALIAS("startup", ICCM)
+REGION_ALIAS("text", DRAM)
+REGION_ALIAS("data", DRAM)
+REGION_ALIAS("sdata", DRAM)
+
+INCLUDE arcv2elf-common.ld
diff --git a/libgloss/arc/emsk1_em6_ram.specs b/libgloss/arc/emsk1_em6_ram.specs
new file mode 100644
index 0000000..b3543ce
--- /dev/null
+++ b/libgloss/arc/emsk1_em6_ram.specs
@@ -0,0 +1,18 @@
+%rename link emsk_link
+%rename link_gcc_c_sequence emsk_link_gcc_c_sequence
+%rename startfile emsk_startfile
+
+*link:
+%(emsk_link) -T emsk1_em6_ram.ld%s
+
+*emsk_libgloss:
+-luart_8250 -lemsk_uart
+
+*emsk_libc:
+%{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano}
+
+*link_gcc_c_sequence:
+%(emsk_link_gcc_c_sequence) --start-group %G %(emsk_libc) %(emsk_libgloss) --end-group
+
+*startfile:
+%(emsk_startfile) arc-main-helper%O%s
diff --git a/libgloss/arc/emsk2.1_em5d.ld b/libgloss/arc/emsk2.1_em5d.ld
new file mode 100644
index 0000000..57a4c40
--- /dev/null
+++ b/libgloss/arc/emsk2.1_em5d.ld
@@ -0,0 +1,14 @@
+/* ARC EM Starter Kit v2.1 - EM5D */
+
+MEMORY
+{
+ ICCM : ORIGIN = 0x00000000, LENGTH = 128K
+ DCCM : ORIGIN = 0x80000000, LENGTH = 256K
+}
+
+REGION_ALIAS("startup", ICCM)
+REGION_ALIAS("text", ICCM)
+REGION_ALIAS("data", DCCM)
+REGION_ALIAS("sdata", DCCM)
+
+INCLUDE arcv2elf-common.ld
diff --git a/libgloss/arc/emsk2.1_em5d.specs b/libgloss/arc/emsk2.1_em5d.specs
new file mode 100644
index 0000000..e6f0f08
--- /dev/null
+++ b/libgloss/arc/emsk2.1_em5d.specs
@@ -0,0 +1,18 @@
+%rename link emsk_link
+%rename link_gcc_c_sequence emsk_link_gcc_c_sequence
+%rename startfile emsk_startfile
+
+*link:
+%(emsk_link) -T emsk2.1_em5d.ld%s
+
+*emsk_libgloss:
+-luart_8250 -lemsk_uart
+
+*emsk_libc:
+%{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano}
+
+*link_gcc_c_sequence:
+%(emsk_link_gcc_c_sequence) --start-group %G %(emsk_libc) %(emsk_libgloss) --end-group
+
+*startfile:
+%(emsk_startfile) arc-main-helper%O%s
diff --git a/libgloss/arc/emsk2.1_em7d.ld b/libgloss/arc/emsk2.1_em7d.ld
new file mode 100644
index 0000000..0f4f330
--- /dev/null
+++ b/libgloss/arc/emsk2.1_em7d.ld
@@ -0,0 +1,15 @@
+/* Memory map for ARC EM Starter Kit v2.1 - EM7D */
+
+MEMORY
+{
+ ICCM : ORIGIN = 0x00000000, LENGTH = 32K
+ DRAM : ORIGIN = 0x10000000, LENGTH = 128M
+ DCCM : ORIGIN = 0x80000000, LENGTH = 32K
+}
+
+REGION_ALIAS("startup", ICCM)
+REGION_ALIAS("text", ICCM)
+REGION_ALIAS("data", DRAM)
+REGION_ALIAS("sdata", DRAM)
+
+INCLUDE arcv2elf-common.ld
diff --git a/libgloss/arc/emsk2.1_em7d.specs b/libgloss/arc/emsk2.1_em7d.specs
new file mode 100644
index 0000000..1eeb871
--- /dev/null
+++ b/libgloss/arc/emsk2.1_em7d.specs
@@ -0,0 +1,18 @@
+%rename link emsk_link
+%rename link_gcc_c_sequence emsk_link_gcc_c_sequence
+%rename startfile emsk_startfile
+
+*link:
+%(emsk_link) -T emsk2.1_em7d.ld%s
+
+*emsk_libgloss:
+-luart_8250 -lemsk_uart
+
+*emsk_libc:
+%{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano}
+
+*link_gcc_c_sequence:
+%(emsk_link_gcc_c_sequence) --start-group %G %(emsk_libc) %(emsk_libgloss) --end-group
+
+*startfile:
+%(emsk_startfile) arc-main-helper%O%s
diff --git a/libgloss/arc/emsk2.1_em7d_ram.ld b/libgloss/arc/emsk2.1_em7d_ram.ld
new file mode 100644
index 0000000..931269c
--- /dev/null
+++ b/libgloss/arc/emsk2.1_em7d_ram.ld
@@ -0,0 +1,15 @@
+/* Memory map for ARC EM Starter Kit v2.1 - EM7D */
+
+MEMORY
+{
+ ICCM : ORIGIN = 0x00000000, LENGTH = 32K
+ DRAM : ORIGIN = 0x10000000, LENGTH = 128M
+ DCCM : ORIGIN = 0x80000000, LENGTH = 32K
+}
+
+REGION_ALIAS("startup", ICCM)
+REGION_ALIAS("text", DRAM)
+REGION_ALIAS("data", DRAM)
+REGION_ALIAS("sdata", DRAM)
+
+INCLUDE arcv2elf-common.ld
diff --git a/libgloss/arc/emsk2.1_em7d_ram.specs b/libgloss/arc/emsk2.1_em7d_ram.specs
new file mode 100644
index 0000000..d4f1fd8
--- /dev/null
+++ b/libgloss/arc/emsk2.1_em7d_ram.specs
@@ -0,0 +1,18 @@
+%rename link emsk_link
+%rename link_gcc_c_sequence emsk_link_gcc_c_sequence
+%rename startfile emsk_startfile
+
+*link:
+%(emsk_link) -T emsk2.1_em7d_ram.ld%s
+
+*emsk_libgloss:
+-luart_8250 -lemsk_uart
+
+*emsk_libc:
+%{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano}
+
+*link_gcc_c_sequence:
+%(emsk_link_gcc_c_sequence) --start-group %G %(emsk_libc) %(emsk_libgloss) --end-group
+
+*startfile:
+%(emsk_startfile) arc-main-helper%O%s
diff --git a/libgloss/arc/emsk2.2_em11d.ld b/libgloss/arc/emsk2.2_em11d.ld
new file mode 100644
index 0000000..551b0f4
--- /dev/null
+++ b/libgloss/arc/emsk2.2_em11d.ld
@@ -0,0 +1,15 @@
+/* Memory map for ARC EM Starter Kit v2.2 and 2.3 - EM11D */
+
+MEMORY
+{
+ ICCM : ORIGIN = 0x00000000, LENGTH = 64K
+ DRAM : ORIGIN = 0x10000000, LENGTH = 128M
+ DCCM : ORIGIN = 0x80000000, LENGTH = 64K
+}
+
+REGION_ALIAS("startup", ICCM)
+REGION_ALIAS("text", ICCM)
+REGION_ALIAS("data", DCCM)
+REGION_ALIAS("sdata", DCCM)
+
+INCLUDE arcv2elf-common.ld
diff --git a/libgloss/arc/emsk2.2_em11d.specs b/libgloss/arc/emsk2.2_em11d.specs
new file mode 100644
index 0000000..455e674
--- /dev/null
+++ b/libgloss/arc/emsk2.2_em11d.specs
@@ -0,0 +1,18 @@
+%rename link emsk_link
+%rename link_gcc_c_sequence emsk_link_gcc_c_sequence
+%rename startfile emsk_startfile
+
+*link:
+%(emsk_link) -T emsk2.2_em11d.ld%s
+
+*emsk_libgloss:
+-luart_8250 -lemsk_uart
+
+*emsk_libc:
+%{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano}
+
+*link_gcc_c_sequence:
+%(emsk_link_gcc_c_sequence) --start-group %G %(emsk_libc) %(emsk_libgloss) --end-group
+
+*startfile:
+%(emsk_startfile) arc-main-helper%O%s
diff --git a/libgloss/arc/emsk2.2_em11d_ram.ld b/libgloss/arc/emsk2.2_em11d_ram.ld
new file mode 100644
index 0000000..3e58e91
--- /dev/null
+++ b/libgloss/arc/emsk2.2_em11d_ram.ld
@@ -0,0 +1,15 @@
+/* Memory map for ARC EM Starter Kit v2.2 and 2.3 - EM11D */
+
+MEMORY
+{
+ ICCM : ORIGIN = 0x00000000, LENGTH = 64K
+ DRAM : ORIGIN = 0x10000000, LENGTH = 128M
+ DCCM : ORIGIN = 0x80000000, LENGTH = 64K
+}
+
+REGION_ALIAS("startup", ICCM)
+REGION_ALIAS("text", DRAM)
+REGION_ALIAS("data", DRAM)
+REGION_ALIAS("sdata", DRAM)
+
+INCLUDE arcv2elf-common.ld
diff --git a/libgloss/arc/emsk2.2_em11d_ram.specs b/libgloss/arc/emsk2.2_em11d_ram.specs
new file mode 100644
index 0000000..5a7c4af
--- /dev/null
+++ b/libgloss/arc/emsk2.2_em11d_ram.specs
@@ -0,0 +1,18 @@
+%rename link emsk_link
+%rename link_gcc_c_sequence emsk_link_gcc_c_sequence
+%rename startfile emsk_startfile
+
+*link:
+%(emsk_link) -T emsk2.2_em11d_ram.ld%s
+
+*emsk_libgloss:
+-luart_8250 -lemsk_uart
+
+*emsk_libc:
+%{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano}
+
+*link_gcc_c_sequence:
+%(emsk_link_gcc_c_sequence) --start-group %G %(emsk_libc) %(emsk_libgloss) --end-group
+
+*startfile:
+%(emsk_startfile) arc-main-helper%O%s
diff --git a/libgloss/arc/emsk2.2_em7d.ld b/libgloss/arc/emsk2.2_em7d.ld
new file mode 100644
index 0000000..f7e0cf6
--- /dev/null
+++ b/libgloss/arc/emsk2.2_em7d.ld
@@ -0,0 +1,15 @@
+/* Memory map for ARC EM Starter Kit v2.2 and 2.3 - EM7D and EM9D */
+
+MEMORY
+{
+ ICCM : ORIGIN = 0x00000000, LENGTH = 256K
+ DRAM : ORIGIN = 0x10000000, LENGTH = 128M
+ DCCM : ORIGIN = 0x80000000, LENGTH = 128K
+}
+
+REGION_ALIAS("startup", ICCM)
+REGION_ALIAS("text", ICCM)
+REGION_ALIAS("data", DCCM)
+REGION_ALIAS("sdata", DCCM)
+
+INCLUDE arcv2elf-common.ld
diff --git a/libgloss/arc/emsk2.2_em7d.specs b/libgloss/arc/emsk2.2_em7d.specs
new file mode 100644
index 0000000..6b12174
--- /dev/null
+++ b/libgloss/arc/emsk2.2_em7d.specs
@@ -0,0 +1,18 @@
+%rename link emsk_link
+%rename link_gcc_c_sequence emsk_link_gcc_c_sequence
+%rename startfile emsk_startfile
+
+*link:
+%(emsk_link) -T emsk2.2_em7d.ld%s
+
+*emsk_libgloss:
+-luart_8250 -lemsk_uart
+
+*emsk_libc:
+%{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano}
+
+*link_gcc_c_sequence:
+%(emsk_link_gcc_c_sequence) --start-group %G %(emsk_libc) %(emsk_libgloss) --end-group
+
+*startfile:
+%(emsk_startfile) arc-main-helper%O%s
diff --git a/libgloss/arc/emsk2.2_em7d_ram.ld b/libgloss/arc/emsk2.2_em7d_ram.ld
new file mode 100644
index 0000000..3f6ec31
--- /dev/null
+++ b/libgloss/arc/emsk2.2_em7d_ram.ld
@@ -0,0 +1,15 @@
+/* Memory map for ARC EM Starter Kit v2.2 and 2.3 - EM7D and EM9D */
+
+MEMORY
+{
+ ICCM : ORIGIN = 0x00000000, LENGTH = 256K
+ DRAM : ORIGIN = 0x10000000, LENGTH = 128M
+ DCCM : ORIGIN = 0x80000000, LENGTH = 128K
+}
+
+REGION_ALIAS("startup", ICCM)
+REGION_ALIAS("text", DRAM)
+REGION_ALIAS("data", DRAM)
+REGION_ALIAS("sdata", DRAM)
+
+INCLUDE arcv2elf-common.ld
diff --git a/libgloss/arc/emsk2.2_em7d_ram.specs b/libgloss/arc/emsk2.2_em7d_ram.specs
new file mode 100644
index 0000000..66917d2
--- /dev/null
+++ b/libgloss/arc/emsk2.2_em7d_ram.specs
@@ -0,0 +1,18 @@
+%rename link emsk_link
+%rename link_gcc_c_sequence emsk_link_gcc_c_sequence
+%rename startfile emsk_startfile
+
+*link:
+%(emsk_link) -T emsk2.2_em7d_ram.ld%s
+
+*emsk_libgloss:
+-luart_8250 -lemsk_uart
+
+*emsk_libc:
+%{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano}
+
+*link_gcc_c_sequence:
+%(emsk_link_gcc_c_sequence) --start-group %G %(emsk_libc) %(emsk_libgloss) --end-group
+
+*startfile:
+%(emsk_startfile) arc-main-helper%O%s
diff --git a/libgloss/arc/emsk2.2_em9d.ld b/libgloss/arc/emsk2.2_em9d.ld
new file mode 100644
index 0000000..f7e0cf6
--- /dev/null
+++ b/libgloss/arc/emsk2.2_em9d.ld
@@ -0,0 +1,15 @@
+/* Memory map for ARC EM Starter Kit v2.2 and 2.3 - EM7D and EM9D */
+
+MEMORY
+{
+ ICCM : ORIGIN = 0x00000000, LENGTH = 256K
+ DRAM : ORIGIN = 0x10000000, LENGTH = 128M
+ DCCM : ORIGIN = 0x80000000, LENGTH = 128K
+}
+
+REGION_ALIAS("startup", ICCM)
+REGION_ALIAS("text", ICCM)
+REGION_ALIAS("data", DCCM)
+REGION_ALIAS("sdata", DCCM)
+
+INCLUDE arcv2elf-common.ld
diff --git a/libgloss/arc/emsk2.2_em9d.specs b/libgloss/arc/emsk2.2_em9d.specs
new file mode 100644
index 0000000..db8a4bc
--- /dev/null
+++ b/libgloss/arc/emsk2.2_em9d.specs
@@ -0,0 +1,18 @@
+%rename link emsk_link
+%rename link_gcc_c_sequence emsk_link_gcc_c_sequence
+%rename startfile emsk_startfile
+
+*link:
+%(emsk_link) -T emsk2.2_em9d.ld%s
+
+*emsk_libgloss:
+-luart_8250 -lemsk_uart
+
+*emsk_libc:
+%{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano}
+
+*link_gcc_c_sequence:
+%(emsk_link_gcc_c_sequence) --start-group %G %(emsk_libc) %(emsk_libgloss) --end-group
+
+*startfile:
+%(emsk_startfile) arc-main-helper%O%s
diff --git a/libgloss/arc/emsk2.2_em9d_ram.ld b/libgloss/arc/emsk2.2_em9d_ram.ld
new file mode 100644
index 0000000..3f6ec31
--- /dev/null
+++ b/libgloss/arc/emsk2.2_em9d_ram.ld
@@ -0,0 +1,15 @@
+/* Memory map for ARC EM Starter Kit v2.2 and 2.3 - EM7D and EM9D */
+
+MEMORY
+{
+ ICCM : ORIGIN = 0x00000000, LENGTH = 256K
+ DRAM : ORIGIN = 0x10000000, LENGTH = 128M
+ DCCM : ORIGIN = 0x80000000, LENGTH = 128K
+}
+
+REGION_ALIAS("startup", ICCM)
+REGION_ALIAS("text", DRAM)
+REGION_ALIAS("data", DRAM)
+REGION_ALIAS("sdata", DRAM)
+
+INCLUDE arcv2elf-common.ld
diff --git a/libgloss/arc/emsk2.2_em9d_ram.specs b/libgloss/arc/emsk2.2_em9d_ram.specs
new file mode 100644
index 0000000..a524453
--- /dev/null
+++ b/libgloss/arc/emsk2.2_em9d_ram.specs
@@ -0,0 +1,18 @@
+%rename link emsk_link
+%rename link_gcc_c_sequence emsk_link_gcc_c_sequence
+%rename startfile emsk_startfile
+
+*link:
+%(emsk_link) -T emsk2.2_em9d_ram.ld%s
+
+*emsk_libgloss:
+-luart_8250 -lemsk_uart
+
+*emsk_libc:
+%{!specs=nano.specs:-lc} %{specs=nano.specs:-lc_nano}
+
+*link_gcc_c_sequence:
+%(emsk_link_gcc_c_sequence) --start-group %G %(emsk_libc) %(emsk_libgloss) --end-group
+
+*startfile:
+%(emsk_startfile) arc-main-helper%O%s