From cf88bb9f09d71baa044b1bb8ed774f56839236ec Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Wed, 17 Jul 2002 14:15:52 +0000 Subject: Add IP2k support to BFD and LD --- ld/ChangeLog | 12 ++++ ld/Makefile.am | 4 ++ ld/Makefile.in | 6 +- ld/NEWS | 3 + ld/configure.tgt | 1 + ld/emulparams/elf32ip2k.sh | 19 ++++++ ld/scripttempl/ip2k.sc | 150 +++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 ld/emulparams/elf32ip2k.sh create mode 100644 ld/scripttempl/ip2k.sc (limited to 'ld') 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 + Nick Clifton + Frank Ch. Eigler + John Healy + + * 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 * 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 -- cgit v1.1