aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
Diffstat (limited to 'ld')
-rw-r--r--ld/ChangeLog12
-rw-r--r--ld/Makefile.am4
-rw-r--r--ld/Makefile.in6
-rw-r--r--ld/NEWS3
-rw-r--r--ld/configure.tgt1
-rw-r--r--ld/emulparams/elf32ip2k.sh19
-rw-r--r--ld/scripttempl/ip2k.sc150
7 files changed, 194 insertions, 1 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog
index e14b2f4..876110f 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,15 @@
+2002-07-16 Denis Chertykov <denisc@overta.ru>
+ Nick Clifton <nickc@redhat.com>
+ Frank Ch. Eigler <fche@redhat.com>
+ John Healy <jhealy@redhat.com>
+
+ * configure.tgt: Add support for ip2k-elf.
+ * Makefile.am: Add support for ip2k-elf.
+ * Makefile.in: Regenerate.
+ * emulparams/elf32ip2k.sh: New file.
+ * scripttempl/ip2k.sc: New file
+ * NEWS: Mention support for new port.
+
2002-07-16 Nick Clifton <nickc@cambridge.redhat.com>
* NEWS: Add 'Changes in 2.13'.
diff --git a/ld/Makefile.am b/ld/Makefile.am
index 8247d25..fbdb946 100644
--- a/ld/Makefile.am
+++ b/ld/Makefile.am
@@ -161,6 +161,7 @@ ALL_EMULATIONS = \
eelf32fr30.o \
eelf32frv.o \
eelf32i370.o \
+ eelf32ip2k.o \
eelf32l4300.o \
eelf32lmip.o \
eelf32lppc.o \
@@ -626,6 +627,9 @@ eelf64lppc.c: $(srcdir)/emulparams/elf64lppc.sh \
eelf32i370.c: $(srcdir)/emulparams/elf32i370.sh \
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfi370.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32i370 "$(tdir_elf32i370)"
+eelf32ip2k.c: $(srcdir)/emulparams/elf32ip2k.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/ip2k.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ip2k "$(tdir_ip2k)"
eelf64alpha.c: $(srcdir)/emulparams/elf64alpha.sh \
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64alpha "$(tdir_elf64alpha)"
diff --git a/ld/Makefile.in b/ld/Makefile.in
index f9d9fa4..079d334 100644
--- a/ld/Makefile.in
+++ b/ld/Makefile.in
@@ -272,6 +272,7 @@ ALL_EMULATIONS = \
eelf32fr30.o \
eelf32frv.o \
eelf32i370.o \
+ eelf32ip2k.o \
eelf32l4300.o \
eelf32lmip.o \
eelf32lppc.o \
@@ -526,7 +527,7 @@ deffilep.c ldgram.c ldlex.c
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = tar
+TAR = gtar
GZIP_ENV = --best
SOURCES = $(ld_new_SOURCES) $(EXTRA_ld_new_SOURCES)
OBJECTS = $(ld_new_OBJECTS)
@@ -1349,6 +1350,9 @@ eelf64lppc.c: $(srcdir)/emulparams/elf64lppc.sh \
eelf32i370.c: $(srcdir)/emulparams/elf32i370.sh \
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfi370.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf32i370 "$(tdir_elf32i370)"
+eelf32ip2k.c: $(srcdir)/emulparams/elf32ip2k.sh \
+ $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/ip2k.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} elf32ip2k "$(tdir_ip2k)"
eelf64alpha.c: $(srcdir)/emulparams/elf64alpha.sh \
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} elf64alpha "$(tdir_elf64alpha)"
diff --git a/ld/NEWS b/ld/NEWS
index 383bd8c..533041c 100644
--- a/ld/NEWS
+++ b/ld/NEWS
@@ -1,4 +1,7 @@
-*- text -*-
+
+* IP2K support added by Denis Chertykov.
+
Changes in 2.13:
* Support for the Fujitsu FRV architecture added by Red Hat. Models for FR400
diff --git a/ld/configure.tgt b/ld/configure.tgt
index c1d7620..f923346 100644
--- a/ld/configure.tgt
+++ b/ld/configure.tgt
@@ -494,6 +494,7 @@ mcore-*-elf) targ_emul=elf32mcore ;;
s390x-*-linux*) targ_emul=elf64_s390 ;;
s390-*-linux*) targ_emul=elf_s390 ;;
*-*-ieee*) targ_emul=vanilla ;;
+ip2k-*-elf) targ_emul=elf32ip2k ;;
*)
echo 2>&1 "*** ld does not support target ${targ}"
diff --git a/ld/emulparams/elf32ip2k.sh b/ld/emulparams/elf32ip2k.sh
new file mode 100644
index 0000000..be2ce33
--- /dev/null
+++ b/ld/emulparams/elf32ip2k.sh
@@ -0,0 +1,19 @@
+MACHINE=
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf32-ip2k"
+# See also `include/elf/ip2k.h'
+DATA_ADDR=0x01000100
+TEXT_START_ADDR=0x02010000
+GPR_START_ADDR=0x1000080
+GPR_SIZE=0x7F
+GRP_MEMORY=gpr
+ARCH=ip2k
+ENTRY=__start
+EMBEDDED=yes
+ELFSIZE=32
+MAXPAGESIZE=256
+WRITABLE_RODATA=
+OTHER_RELOCATING_SECTIONS='PROVIDE (__stack = 0x01000FFF);'
+OTHER_READONLY_SECTIONS='.pram 0x2000000 : { *(.pram) } .reset 0x201FFE0 : { *(.reset) }'
+OTHER_READWRITE_SECTIONS='.gpr 0x1000080 : { *(.gpr) }'
+
diff --git a/ld/scripttempl/ip2k.sc b/ld/scripttempl/ip2k.sc
new file mode 100644
index 0000000..d7826ca
--- /dev/null
+++ b/ld/scripttempl/ip2k.sc
@@ -0,0 +1,150 @@
+cat << EOF
+OUTPUT_FORMAT("elf32-ip2k", "elf32-ip2k", "elf32-ip2k")
+OUTPUT_ARCH(ip2k)
+ENTRY(_start)
+SEARCH_DIR(.);
+
+/* IP2022 default linker script. */
+
+MEMORY
+{
+ D_GPR : org = 0x01000080, len = 128
+ D_RAM : org = 0x01000100, len = 4K - 256
+ P_RAM : org = 0x02000000, len = 16K
+ P_ROM : org = 0x02010000, len = 64K - 32
+ P_RESET : org = 0x0201FFE0, len = 32
+ P_CONFIG : org = 0x02020000, len = 128
+}
+
+SECTIONS
+{
+ /* Allocated memory end markers
+ (initialized to start of appropiate memory address). */
+ __data_end = 0x01000100;
+ __pram_end = 0x02000000;
+ __flash_end = 0x02010000;
+
+ /* Global general purpose registers in direct addressing range. */
+ .gpr 0x01000080 :
+ {
+ *(.gpr)
+ } >D_GPR
+
+ /* Pre-allocated, pre-initialized data memory. */
+ __data_run_begin = __data_end;
+ __data_load_begin = (__flash_end + 1) & 0xFFFFFFFE;
+ .data __data_run_begin : AT (__data_load_begin)
+ {
+ * (.data);
+ * (.rodata)
+ } >D_RAM
+ __data_run_end = __data_run_begin + SIZEOF(.data);
+ __data_load_end = __data_load_begin + SIZEOF(.data);
+ __data_end = __data_run_end;
+ __flash_end = __data_load_end;
+
+ /* Pre-allocated, uninitialized data memory. */
+ __bss_begin = __data_end;
+ .bss __bss_begin :
+ {
+ * (.bss)
+ } >D_RAM
+ __bss_end = __bss_begin + SIZEOF(.bss);
+ __data_end = __bss_end;
+
+ /* Pre-allocated PRAM data memory. */
+ __pram_data_begin = (__pram_end + 1) & 0xFFFFFFFE;
+ .pram_data __pram_data_begin :
+ {
+ * (.pram_data)
+ } >P_RAM
+ __pram_data_end = __pram_data_begin + SIZEOF(.pram_data);
+ __pram_end = __pram_data_end;
+
+ /* PRAM code. */
+ __pram_run_begin = (__pram_end + 1) & 0xFFFFFFFE;
+ __pram_load_begin = (__flash_end + 1) & 0xFFFFFFFE;
+ .pram __pram_run_begin : AT (__pram_load_begin)
+ {
+ * (.pram)
+ } >P_RAM
+ __pram_run_end = __pram_run_begin + SIZEOF(.pram);
+ __pram_load_end = __pram_load_begin + SIZEOF(.pram);
+
+ __pram_load_shift = ((__pram_run_begin - __pram_load_begin) & 0x1FFFF) | 0x02000000;
+ __pram_end = __pram_run_end;
+ __flash_end = __pram_load_end;
+
+ /* PRAM overlay code. */
+ __pram_overlay_run_start = (__pram_end + 1) & 0xFFFFFFFE;
+ __pram_overlay_load_start = (__flash_end + 1) & 0xFFFFFFFE;
+ OVERLAY __pram_overlay_run_start : AT (__pram_overlay_load_start)
+ {
+ .pram1 { */overlay1/* (.pram); * (.pram1) }
+ .pram2 { */overlay2/* (.pram); * (.pram2) }
+ } >P_RAM
+ __pram_overlay_run_end = .;
+ __pram_overlay_load_end = __pram_overlay_load_start + SIZEOF(.pram1) + SIZEOF(.pram2);
+ __pram_end = __pram_overlay_run_end;
+ __flash_end = __pram_overlay_load_end;
+
+ /* Flash code. */
+ __text_begin = (__flash_end + 1) & 0xFFFFFFFE;
+ .text __text_begin :
+ {
+ * (.text);
+ * (.text.libgcc)
+ } >P_ROM = 0xffff
+ __text_end = __text_begin + SIZEOF(.text);
+ __flash_end = __text_end;
+
+ /* Strings. */
+ __strings_begin = (__flash_end + 1) & 0xFFFFFFFE;
+ .strings __strings_begin :
+ {
+ * (strings);
+ * (.progmem.data)
+ } >P_ROM = 0xffff
+ __strings_end = __strings_begin + SIZEOF (.strings);
+ __flash_end = __strings_end;
+
+ .ctors : { * (.ctors) } > P_ROM
+ .dtors : { * (.dtors) } > P_ROM
+
+ /* Reset code. */
+ .reset : { * (.reset) } >P_RESET = 0xffff
+
+ /* Configuration block. */
+ .config : { * (.config) } >P_CONFIG = 0xffff
+
+ /* Stack. */
+ PROVIDE (__stack = 0x01000FFF);
+
+ /* Stabs debugging sections. */
+ .stab 0 : { *(.stab) }
+ .stabstr 0 : { *(.stabstr) }
+ .stab.excl 0 : { *(.stab.excl) }
+ .stab.exclstr 0 : { *(.stab.exclstr) }
+ .stab.index 0 : { *(.stab.index) }
+ .stab.indexstr 0 : { *(.stab.indexstr) }
+ .comment 0 : { *(.comment) }
+
+ /* DWARF 1. */
+ .debug 0 : { *(.debug) }
+ .line 0 : { *(.line) }
+ /* GNU DWARF 1 extensions. */
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }
+ .debug_sfnames 0 : { *(.debug_sfnames) }
+ /* DWARF 1.1 and DWARF 2. */
+ .debug_aranges 0 : { *(.debug_aranges) }
+ .debug_pubnames 0 : { *(.debug_pubnames) }
+ /* DWARF 2. */
+ .debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
+ .debug_abbrev 0 : { *(.debug_abbrev) }
+ .debug_line 0 : { *(.debug_line) }
+ .debug_frame 0 : { *(.debug_frame) }
+ .debug_str 0 : { *(.debug_str) }
+ .debug_loc 0 : { *(.debug_loc) }
+ .debug_macinfo 0 : { *(.debug_macinfo) }
+}
+EOF