From 71fc99bae166bdaaf3904c94029ab8f767b4e6cf Mon Sep 17 00:00:00 2001 From: Dave Murphy Date: Sat, 27 May 2006 13:08:18 +0000 Subject: [PATCH] *** empty log message *** --- build-devkit.sh | 34 +- dkarm-eabi/crtls/Makefile | 5 + dkarm-eabi/crtls/ds_arm7.ld | 198 ++ dkarm-eabi/crtls/ds_arm7.specs | 12 + dkarm-eabi/crtls/ds_arm7_crt0.s | 93 + dkarm-eabi/crtls/ds_arm9.ld | 235 ++ dkarm-eabi/crtls/ds_arm9.specs | 12 + dkarm-eabi/crtls/ds_arm9_crt0.s | 268 ++ dkarm-eabi/crtls/ds_cart.ld | 217 ++ dkarm-eabi/crtls/ds_cart.specs | 12 + dkarm-eabi/crtls/ds_cart_crt0.s | 160 ++ dkarm-eabi/crtls/er_crt0.s | 56 + dkarm-eabi/crtls/gba.specs | 12 + dkarm-eabi/crtls/gba_cart.ld | 315 +++ dkarm-eabi/crtls/gba_crt0.s | 251 ++ dkarm-eabi/crtls/gba_er.ld | 50 + dkarm-eabi/crtls/gba_er.specs | 8 + dkarm-eabi/crtls/gba_mb.ld | 301 +++ dkarm-eabi/crtls/gba_mb.specs | 12 + dkarm-eabi/crtls/gp32.ld | 167 ++ dkarm-eabi/crtls/gp32.specs | 12 + dkarm-eabi/crtls/gp32_crt0.s | 74 + dkarm-eabi/crtls/gp32_gpsdk.ld | 198 ++ dkarm-eabi/crtls/gp32_gpsdk.specs | 12 + dkarm-eabi/crtls/gp32_gpsdk_crt0.s | 246 ++ dkarm-eabi/patches/binutils-2.16.1.patch | 16 + dkarm-eabi/patches/binutils-2.16.93.patch | 16 + dkarm-eabi/patches/gcc-4.0.1.patch | 64 + dkarm-eabi/patches/gcc-4.0.2.patch | 64 + dkarm-eabi/patches/gcc-4.1.0.patch | 126 + dkarm-eabi/patches/gcc-4.1.1.patch | 126 + dkarm-eabi/patches/newlib-1.13.0.patch | 3004 +++++++++++++++++++++ dkarm-eabi/patches/newlib-1.14.0.patch | 2890 ++++++++++++++++++++ dkarm-eabi/rules/base_rules | 73 + dkarm-eabi/rules/ds_rules | 32 + dkarm-eabi/rules/gba_rules | 23 + dkarm-eabi/rules/gp32_rules | 18 + dkarm-eabi/scripts/build-crtls.sh | 37 + dkarm-eabi/scripts/build-gcc.sh | 117 + dkarm-eabi/scripts/build-tools.sh | 16 + dkarm/crtls/gp32_gpsdk.ld | 1 + dkarm/rules/gba_rules | 6 +- dkarm/scripts/build-gcc.sh | 4 +- 43 files changed, 9578 insertions(+), 15 deletions(-) create mode 100644 dkarm-eabi/crtls/Makefile create mode 100644 dkarm-eabi/crtls/ds_arm7.ld create mode 100644 dkarm-eabi/crtls/ds_arm7.specs create mode 100644 dkarm-eabi/crtls/ds_arm7_crt0.s create mode 100644 dkarm-eabi/crtls/ds_arm9.ld create mode 100644 dkarm-eabi/crtls/ds_arm9.specs create mode 100644 dkarm-eabi/crtls/ds_arm9_crt0.s create mode 100644 dkarm-eabi/crtls/ds_cart.ld create mode 100644 dkarm-eabi/crtls/ds_cart.specs create mode 100644 dkarm-eabi/crtls/ds_cart_crt0.s create mode 100644 dkarm-eabi/crtls/er_crt0.s create mode 100644 dkarm-eabi/crtls/gba.specs create mode 100644 dkarm-eabi/crtls/gba_cart.ld create mode 100644 dkarm-eabi/crtls/gba_crt0.s create mode 100644 dkarm-eabi/crtls/gba_er.ld create mode 100644 dkarm-eabi/crtls/gba_er.specs create mode 100644 dkarm-eabi/crtls/gba_mb.ld create mode 100644 dkarm-eabi/crtls/gba_mb.specs create mode 100644 dkarm-eabi/crtls/gp32.ld create mode 100644 dkarm-eabi/crtls/gp32.specs create mode 100644 dkarm-eabi/crtls/gp32_crt0.s create mode 100644 dkarm-eabi/crtls/gp32_gpsdk.ld create mode 100644 dkarm-eabi/crtls/gp32_gpsdk.specs create mode 100644 dkarm-eabi/crtls/gp32_gpsdk_crt0.s create mode 100644 dkarm-eabi/patches/binutils-2.16.1.patch create mode 100644 dkarm-eabi/patches/binutils-2.16.93.patch create mode 100644 dkarm-eabi/patches/gcc-4.0.1.patch create mode 100644 dkarm-eabi/patches/gcc-4.0.2.patch create mode 100644 dkarm-eabi/patches/gcc-4.1.0.patch create mode 100644 dkarm-eabi/patches/gcc-4.1.1.patch create mode 100644 dkarm-eabi/patches/newlib-1.13.0.patch create mode 100644 dkarm-eabi/patches/newlib-1.14.0.patch create mode 100644 dkarm-eabi/rules/base_rules create mode 100644 dkarm-eabi/rules/ds_rules create mode 100644 dkarm-eabi/rules/gba_rules create mode 100644 dkarm-eabi/rules/gp32_rules create mode 100644 dkarm-eabi/scripts/build-crtls.sh create mode 100644 dkarm-eabi/scripts/build-gcc.sh create mode 100644 dkarm-eabi/scripts/build-tools.sh diff --git a/build-devkit.sh b/build-devkit.sh index 090e1be..b8ad3a6 100644 --- a/build-devkit.sh +++ b/build-devkit.sh @@ -6,8 +6,8 @@ #--------------------------------------------------------------------------------- # specify some urls to download the source packages from #--------------------------------------------------------------------------------- -BINUTILS_VER=2.16.1 -GCC_VER=4.1.0 +BINUTILS_VER=2.16.93 +GCC_VER=4.1.1 NEWLIB_VER=1.14.0 LIBOGC_VER=20050812 LIBGBA_VER=20060518 @@ -23,13 +23,14 @@ LIBGBA="libgba-src-$LIBGBA_VER.tar.bz2" LIBNDS="libnds-src-$LIBNDS_VER.tar.bz2" ELF2FLT="elf2flt-src-$ELF2FLT_VER.tar.bz2" +SFMIRROR="jaist" BINUTILS_URL="http://ftp.gnu.org/gnu/binutils/$BINUTILS" GCC_CORE_URL="http://ftp.gnu.org/gnu/gcc/gcc-$GCC_VER/$GCC_CORE" GCC_GPP_URL="http://ftp.gnu.org/gnu/gcc/gcc-$GCC_VER/$GCC_GPP" -LIBOGC_URL="http://osdn.dl.sourceforge.net/sourceforge/devkitpro/$LIBOGC" -LIBGBA_URL="http://osdn.dl.sourceforge.net/sourceforge/devkitpro/$LIBGBA" -LIBNDS_URL="http://osdn.dl.sourceforge.net/sourceforge/devkitpro/$LIBNDS" -ELF2FLT_URL="http://osdn.dl.sourceforge.net/sourceforge/devkitpro/$ELF2FLT" +LIBOGC_URL="http://$SFMIRROR.dl.sourceforge.net/sourceforge/devkitpro/$LIBOGC" +LIBGBA_URL="http://$SFMIRROR.dl.sourceforge.net/sourceforge/devkitpro/$LIBGBA" +LIBNDS_URL="http://$SFMIRROR.dl.sourceforge.net/sourceforge/devkitpro/$LIBNDS" +ELF2FLT_URL="http://$SFMIRROR.dl.sourceforge.net/sourceforge/devkitpro/$ELF2FLT" NEWLIB_URL="ftp://sources.redhat.com/pub/newlib/$NEWLIB" #--------------------------------------------------------------------------------- @@ -46,9 +47,10 @@ do echo "1: build devkitARM (gba gp32 ds)" echo "2: build devkitPPC (gamecube)" echo "3: build devkitPSP (PSP)" + echo "4: build devkitARM eabi (gba gp32 ds)" read VERSION - if [ "$VERSION" -ne 1 -a "$VERSION" -ne 2 -a "$VERSION" -ne 3 ] + if [ "$VERSION" -ne 1 -a "$VERSION" -ne 2 -a "$VERSION" -ne 3 -a "$VERSION" -ne 4 ] then VERSION=0 fi @@ -89,6 +91,14 @@ then fi fi +if [ $VERSION -eq 4 ] +then + basedir='dkarm-eabi' + package=devkitARM + builddir=arm-eabi + target=arm-eabi + toolchain=DEVKITARM +fi DOWNLOAD=0 @@ -173,7 +183,7 @@ then FOUND=1 fi - if [ $VERSION -eq 1 ] + if [ $VERSION -eq 1 -o $VERSION -eq 4 ] then if [ ! -f $SRCDIR/$LIBGBA ] then @@ -228,7 +238,7 @@ else fi - if [ $VERSION -eq 1 ] + if [ $VERSION -eq 1 -o $VERSION -eq 4 ] then $WGET -c $LIBNDS_URL || { echo "Error: Failed to download "$LIBNDS; exit; } $WGET -c $LIBGBA_URL || { echo "Error: Failed to download "$LIBGBA; exit; } @@ -283,7 +293,7 @@ scriptdir=$(pwd)/$basedir/scripts BUILDSCRIPTDIR=$(pwd) echo "Extracting $BINUTILS" -tar -xjvf $SRCDIR/$BINUTILS || { echo "Error extracting "$BINUTILS; exit; } +#tar -xjvf $SRCDIR/$BINUTILS || { echo "Error extracting "$BINUTILS; exit; } echo "Extracting $GCC_CORE" tar -xjvf $SRCDIR/$GCC_CORE || { echo "Error extracting "$GCC_CORE; exit; } @@ -302,7 +312,7 @@ then fi -if [ $VERSION -eq 1 ] +if [ $VERSION -eq 1 -o $VERSION -eq 4 ] then echo "Extracting $LIBNDS" mkdir -p $LIBNDS_SRCDIR @@ -310,7 +320,7 @@ then echo "Extracting $LIBGBA" mkdir -p $LIBGBA_SRCDIR bzip2 -cd $SRCDIR/$LIBGBA | tar -xv -C $LIBGBA_SRCDIR || { echo "Error extracting "$LIBGBA; exit; } - echo "Extracting $NEWLIB" + echo "Extracting $ELF2FLT" tar -xjvf $SRCDIR/$ELF2FLT || { echo "Error extracting "$ELF2FLT; exit; } fi diff --git a/dkarm-eabi/crtls/Makefile b/dkarm-eabi/crtls/Makefile new file mode 100644 index 0000000..c3423bb --- /dev/null +++ b/dkarm-eabi/crtls/Makefile @@ -0,0 +1,5 @@ +include $(DEVKITARM)/base_rules + +all: + $(CC) -x assembler-with-cpp -marm -c $(CRT)_crt0.s -o$(CRT)_crt0.o + $(CC) -x assembler-with-cpp -mthumb -c $(CRT)_crt0.s -o thumb/$(CRT)_crt0.o diff --git a/dkarm-eabi/crtls/ds_arm7.ld b/dkarm-eabi/crtls/ds_arm7.ld new file mode 100644 index 0000000..a1bbe2f --- /dev/null +++ b/dkarm-eabi/crtls/ds_arm7.ld @@ -0,0 +1,198 @@ +OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_start) + +MEMORY { + + rom : ORIGIN = 0x08000000, LENGTH = 32M + iwram : ORIGIN = 0x03800000, LENGTH = 64K + ewram : ORIGIN = 0x02040000, LENGTH = 4M +} + +__ewram_start = ORIGIN(ewram); +__eheap_end = ORIGIN(ewram)+ LENGTH(ewram); +__iwram_start = ORIGIN(iwram); +__iwram_top = ORIGIN(iwram)+ LENGTH(iwram); +__sp_irq = __iwram_top - 0x60; +__sp_svc = __sp_irq - 0x100; +__sp_usr = __sp_svc - 0x100; + +__irq_flags = __iwram_top - 8; +__irq_vector = __iwram_top - 4; + +SECTIONS +{ + .init : + { + __text_start = . ; + KEEP (*(.init)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >iwram = 0xff + .plt : { *(.plt) } >iwram = 0xff + + .text : /* ALIGN (4): */ + { + + *(.text.*) + *(.stub) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + *(.gnu.linkonce.t*) + *(.glue_7) + *(.glue_7t) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >iwram = 0xff + + .fini : + { + KEEP (*(.fini)) + } >iwram =0xff + + __text_end = . ; + + .rodata : + { + *(.rodata) + *all.rodata*(*) + *(.roda) + *(.rodata.*) + *(.gnu.linkonce.r*) + SORT(CONSTRUCTORS) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >iwram = 0xff + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >iwram + __exidx_start = .; + .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >iwram + __exidx_end = .; + +/* Ensure the __preinit_array_start label is properly aligned. We + could instead move the label definition inside the section, but + the linker would then create the section even if it turns out to + be empty, which isn't pretty. */ + . = ALIGN(32 / 8); + PROVIDE (__preinit_array_start = .); + .preinit_array : { KEEP (*(.preinit_array)) } >iwram = 0xff + PROVIDE (__preinit_array_end = .); + PROVIDE (__init_array_start = .); + .init_array : { KEEP (*(.init_array)) } >iwram = 0xff + PROVIDE (__init_array_end = .); + PROVIDE (__fini_array_start = .); + .fini_array : { KEEP (*(.fini_array)) } >iwram = 0xff + PROVIDE (__fini_array_end = .); + + .ctors : + { + /* gcc uses crtbegin.o to find the start of the constructors, so + we make sure it is first. Because this is a wildcard, it + doesn't matter if the user does not actually link against + crtbegin.o; the linker won't look for a file to match a + wildcard. The wildcard also means that it doesn't matter which + directory crtbegin.o is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >iwram = 0xff + + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >iwram = 0xff + + .eh_frame : + { + KEEP (*(.eh_frame)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >iwram = 0xff + + .gcc_except_table : + { + *(.gcc_except_table) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >iwram = 0xff + .jcr : { KEEP (*(.jcr)) } >iwram = 0 + .got : { *(.got.plt) *(.got) } >iwram = 0 + + + .iwram ALIGN(4) : + { + __iwram_start = ABSOLUTE(.) ; + *(.iwram) + *iwram.*(.text) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + __iwram_end = ABSOLUTE(.) ; + } >iwram = 0xff + + + .data ALIGN(4) : { + __data_start = ABSOLUTE(.); + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + CONSTRUCTORS + . = ALIGN(4); + __data_end = ABSOLUTE(.) ; + } >iwram = 0xff + + + + .bss ALIGN(4) : + { + __bss_start = ABSOLUTE(.); + __bss_start__ = ABSOLUTE(.); + *(.dynbss) + *(.gnu.linkonce.b*) + *(.bss*) + *(COMMON) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >iwram + + __bss_end = . ; + __bss_end__ = . ; + + _end = . ; + __end__ = . ; + PROVIDE (end = _end); + + /* 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 debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* 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) } + .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) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .stack 0x80000 : { _stack = .; *(.stack) } + /* These must appear regardless of . */ +} diff --git a/dkarm-eabi/crtls/ds_arm7.specs b/dkarm-eabi/crtls/ds_arm7.specs new file mode 100644 index 0000000..e5cb3c1 --- /dev/null +++ b/dkarm-eabi/crtls/ds_arm7.specs @@ -0,0 +1,12 @@ +%rename link old_link +%rename link_gcc_c_sequence old_gcc_c_sequence + +*link_gcc_c_sequence: +%(old_gcc_c_sequence) --start-group -lsysbase -lc --end-group + +*link: +%(old_link) -T ds_arm7.ld%s + +*startfile: +ds_arm7_crt0%O%s crti%O%s crtbegin%O%s + diff --git a/dkarm-eabi/crtls/ds_arm7_crt0.s b/dkarm-eabi/crtls/ds_arm7_crt0.s new file mode 100644 index 0000000..45fe98f --- /dev/null +++ b/dkarm-eabi/crtls/ds_arm7_crt0.s @@ -0,0 +1,93 @@ +@--------------------------------------------------------------------------------- + .section ".init" + .global _start +@--------------------------------------------------------------------------------- + .align 4 + .arm +@--------------------------------------------------------------------------------- +_start: +@--------------------------------------------------------------------------------- + mov r0, #0x04000000 @ IME = 0; + str r0, [r0, #0x208] + + mov r0, #0x12 @ Switch to IRQ Mode + msr cpsr, r0 + ldr sp, =__sp_irq @ Set IRQ stack + + mov r0, #0x13 @ Switch to SVC Mode + msr cpsr, r0 + ldr sp, =__sp_svc @ Set SVC stack + + mov r0, #0x1F @ Switch to System Mode + msr cpsr, r0 + ldr sp, =__sp_usr @ Set user stack + + ldr r0, =__bss_start @ Clear BSS section to 0x00 + ldr r1, =__bss_end + sub r1, r1, r0 + bl ClearMem + + ldr r3, =_init @ global constructors + bl _call_via_r3 + + mov r0, #0 @ int argc + mov r1, #0 @ char *argv[] + ldr r3, =main + bl _call_via_r3 @ jump to user code + + @ If the user ever returns, return to flash cartridge + mov r0, #0x08000000 + bx r0 + +@--------------------------------------------------------------------------------- +@ Clear memory to 0x00 if length != 0 +@ r0 = Start Address +@ r1 = Length +@--------------------------------------------------------------------------------- +ClearMem: +@--------------------------------------------------------------------------------- + mov r2, #3 @ Round down to nearest word boundary + add r1, r1, r2 @ Shouldn't be needed + bics r1, r1, r2 @ Clear 2 LSB (and set Z) + bxeq lr @ Quit if copy size is 0 + + mov r2, #0 +ClrLoop: + stmia r0!, {r2} + subs r1, r1, #4 + bne ClrLoop + bx lr + +@--------------------------------------------------------------------------------- +@ Copy memory if length != 0 +@ r1 = Source Address +@ r2 = Dest Address +@ r4 = Dest Address + Length +@--------------------------------------------------------------------------------- +CopyMemCheck: +@--------------------------------------------------------------------------------- + sub r3, r4, r2 @ Is there any data to copy? +@--------------------------------------------------------------------------------- +@ Copy memory +@ r1 = Source Address +@ r2 = Dest Address +@ r3 = Length +@--------------------------------------------------------------------------------- +CopyMem: +@--------------------------------------------------------------------------------- + mov r0, #3 @ These commands are used in cases where + add r3, r3, r0 @ the length is not a multiple of 4, + bics r3, r3, r0 @ even though it should be. + bxeq lr @ Length is zero, so exit +CIDLoop: + ldmia r1!, {r0} + stmia r2!, {r0} + subs r3, r3, #4 + bne CIDLoop + bx lr + +@--------------------------------------------------------------------------------- + .align + .pool + .end +@--------------------------------------------------------------------------------- diff --git a/dkarm-eabi/crtls/ds_arm9.ld b/dkarm-eabi/crtls/ds_arm9.ld new file mode 100644 index 0000000..996ba49 --- /dev/null +++ b/dkarm-eabi/crtls/ds_arm9.ld @@ -0,0 +1,235 @@ +OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_start) + +MEMORY { + + rom : ORIGIN = 0x08000000, LENGTH = 32M + ewram : ORIGIN = 0x02000000, LENGTH = 4M - 4k + dtcm : ORIGIN = 0x0b000000, LENGTH = 16K + itcm : ORIGIN = 0x01000000, LENGTH = 32K +} + +__itcm_start = ORIGIN(itcm); +__ewram_end = ORIGIN(ewram) + LENGTH(ewram); +__eheap_end = ORIGIN(ewram) + LENGTH(ewram); +__dtcm_start = ORIGIN(dtcm); +__dtcm_top = ORIGIN(dtcm) + LENGTH(dtcm); +__irq_flags = __dtcm_top - 0x08; +__irq_vector = __dtcm_top - 0x04; + +__sp_svc = __dtcm_top - 0x100; +__sp_irq = __sp_svc - 0x100; +__sp_usr = __sp_irq - 0x100; + +SECTIONS +{ + .init : + { + __text_start = . ; + KEEP (*(.init)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram = 0xff + + .plt : { *(.plt) } >ewram = 0xff + + .text : /* ALIGN (4): */ + { + *(EXCLUDE_FILE (*.itcm*) .text) + + *(.text.*) + *(.stub) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + *(.gnu.linkonce.t*) + *(.glue_7) + *(.glue_7t) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram = 0xff + + .fini : + { + KEEP (*(.fini)) + } >ewram =0xff + + __text_end = . ; + + .rodata : + { + *(.rodata) + *all.rodata*(*) + *(.roda) + *(.rodata.*) + *(.gnu.linkonce.r*) + SORT(CONSTRUCTORS) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram = 0xff + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ewram + __exidx_start = .; + .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ewram + __exidx_end = .; + /* Ensure the __preinit_array_start label is properly aligned. We + could instead move the label definition inside the section, but + the linker would then create the section even if it turns out to + be empty, which isn't pretty. */ + . = ALIGN(32 / 8); + PROVIDE (__preinit_array_start = .); + .preinit_array : { KEEP (*(.preinit_array)) } >ewram = 0xff + PROVIDE (__preinit_array_end = .); + PROVIDE (__init_array_start = .); + .init_array : { KEEP (*(.init_array)) } >ewram = 0xff + PROVIDE (__init_array_end = .); + PROVIDE (__fini_array_start = .); + .fini_array : { KEEP (*(.fini_array)) } >ewram = 0xff + PROVIDE (__fini_array_end = .); + + .ctors : + { + /* gcc uses crtbegin.o to find the start of the constructors, so + we make sure it is first. Because this is a wildcard, it + doesn't matter if the user does not actually link against + crtbegin.o; the linker won't look for a file to match a + wildcard. The wildcard also means that it doesn't matter which + directory crtbegin.o is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram = 0xff + + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram = 0xff + + .eh_frame : + { + KEEP (*(.eh_frame)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram = 0xff + + .gcc_except_table : + { + *(.gcc_except_table) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram = 0xff + .jcr : { KEEP (*(.jcr)) } >ewram = 0 + .got : { *(.got.plt) *(.got) } >ewram = 0 + + .ewram ALIGN(4) : + { + __ewram_start = ABSOLUTE(.) ; + *(.ewram) + *ewram.*(.text) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram = 0xff + + + .data ALIGN(4) : + { + __data_start = ABSOLUTE(.); + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + CONSTRUCTORS + . = ALIGN(4); + __data_end = ABSOLUTE(.) ; + } >ewram = 0xff + + + __dtcm_lma = . ; + + .dtcm __dtcm_start : AT (__dtcm_lma) + { + *(.dtcm) + *(.dtcm.*) + . = ALIGN(4); + __dtcm_end = ABSOLUTE(.); + } >dtcm = 0xff + + + __itcm_lma = __dtcm_lma + SIZEOF(.dtcm); + + .itcm __itcm_start : AT (__itcm_lma) + { + *(.itcm) + *itcm.*(.text) + . = ALIGN(4); + __itcm_end = ABSOLUTE(.); + } >itcm = 0xff + + .sbss __dtcm_end : + { + __sbss_start = ABSOLUTE(.); + __sbss_start__ = ABSOLUTE(.); + *(.sbss) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + __sbss_end = ABSOLUTE(.); + } >dtcm + + + + __bss_lma = __itcm_lma + SIZEOF(.itcm) ; + __appended_data = __itcm_lma + SIZEOF(.itcm) ; + .bss __bss_lma : AT (__bss_lma) + { + __bss_start = ABSOLUTE(.); + __bss_start__ = ABSOLUTE(.); + *(.dynbss) + *(.gnu.linkonce.b*) + *(.bss*) + *(COMMON) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + __bss_end = ABSOLUTE(.) ; + __bss_end__ = __bss_end ; + } >ewram + + + _end = . ; + __end__ = . ; + PROVIDE (end = _end); + + + + /* 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 debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* 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) } + .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) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .stack 0x80000 : { _stack = .; *(.stack) } + /* These must appear regardless of . */ +} diff --git a/dkarm-eabi/crtls/ds_arm9.specs b/dkarm-eabi/crtls/ds_arm9.specs new file mode 100644 index 0000000..3d3e7da --- /dev/null +++ b/dkarm-eabi/crtls/ds_arm9.specs @@ -0,0 +1,12 @@ +%rename link old_link +%rename link_gcc_c_sequence old_gcc_c_sequence + +*link_gcc_c_sequence: +%(old_gcc_c_sequence) --start-group -lsysbase -lc --end-group + +*link: +%(old_link) -T ds_arm9.ld%s + +*startfile: +ds_arm9_crt0%O%s crti%O%s crtbegin%O%s + diff --git a/dkarm-eabi/crtls/ds_arm9_crt0.s b/dkarm-eabi/crtls/ds_arm9_crt0.s new file mode 100644 index 0000000..916dfb3 --- /dev/null +++ b/dkarm-eabi/crtls/ds_arm9_crt0.s @@ -0,0 +1,268 @@ +#define PAGE_4K (0b01011 << 1) +#define PAGE_8K (0b01100 << 1) +#define PAGE_16K (0b01101 << 1) +#define PAGE_32K (0b01110 << 1) +#define PAGE_64K (0b00111 << 1) +#define PAGE_128K (0b10000 << 1) +#define PAGE_256K (0b10001 << 1) +#define PAGE_512K (0b10010 << 1) +#define PAGE_1M (0b10011 << 1) +#define PAGE_2M (0b10100 << 1) +#define PAGE_4M (0b10101 << 1) +#define PAGE_8M (0b10110 << 1) +#define PAGE_16M (0b10111 << 1) +#define PAGE_32M (0b11000 << 1) +#define PAGE_64M (0b11001 << 1) +#define PAGE_128M (0b11010 << 1) +#define PAGE_256M (0b11011 << 1) +#define PAGE_512M (0b11100 << 1) +#define PAGE_1G (0b11101 << 1) +#define PAGE_2G (0b11110 << 1) +#define PAGE_4G (0b11111 << 1) + +#define ITCM_LOAD (1<<19) +#define ITCM_ENABLE (1<<18) +#define DTCM_LOAD (1<<17) +#define DTCM_ENABLE (1<<16) +#define DISABLE_TBIT (1<<15) +#define ROUND_ROBIN (1<<14) +#define ALT_VECTORS (1<<13) +#define ICACHE_ENABLE (1<<12) +#define BIG_ENDIAN (1<<7) +#define DCACHE_ENABLE (1<<2) +#define PROTECT_ENABLE (1<<0) + +@--------------------------------------------------------------------------------- + .section ".init" + .global _start +@--------------------------------------------------------------------------------- + .align 4 + .arm +@--------------------------------------------------------------------------------- +_start: +@--------------------------------------------------------------------------------- + mov r0, #0x04000000 @ IME = 0; + str r0, [r0, #0x208] + +@--------------------------------------------------------------------------------- +@ turn the power on for M3 +@--------------------------------------------------------------------------------- + ldr r1, =0x8203 + add r0,r0,#0x304 + strh r1, [r0] + + ldr r1, =0x00002078 @ disable TCM and protection unit + mcr p15, 0, r1, c1, c0 + +@--------------------------------------------------------------------------------- +@ Protection Unit Setup added by Sasq +@--------------------------------------------------------------------------------- + @ Disable cache + mov r0, #0 + mcr p15, 0, r0, c7, c5, 0 @ Instruction cache + mcr p15, 0, r0, c7, c6, 0 @ Data cache + + @ Wait for write buffer to empty + mcr p15, 0, r0, c7, c10, 4 + + ldr r0, =__dtcm_start + orr r0,r0,#0x0a + mcr p15, 0, r0, c9, c1,0 @ DTCM base = __dtcm_start, size = 16 KB + + mov r0,#0x20 + mcr p15, 0, r0, c9, c1,1 @ ITCM base = 0 , size = 32 MB + +@--------------------------------------------------------------------------------- +@ Setup memory regions similar to Release Version +@--------------------------------------------------------------------------------- + + @------------------------------------------------------------------------- + @ Region 0 - IO registers + @------------------------------------------------------------------------- + ldr r0,=( PAGE_64M | 0x04000000 | 1) + mcr p15, 0, r0, c6, c0, 0 + + @------------------------------------------------------------------------- + @ Region 1 - Main Memory + @------------------------------------------------------------------------- + ldr r0,=( PAGE_4M | 0x02000000 | 1) + mcr p15, 0, r0, c6, c1, 0 + + @------------------------------------------------------------------------- + @ Region 2 - iwram + @------------------------------------------------------------------------- + ldr r0,=( PAGE_32K | 0x037F8000 | 1) + mcr p15, 0, r0, c6, c2, 0 + + @------------------------------------------------------------------------- + @ Region 3 - DS Accessory (GBA Cart) + @------------------------------------------------------------------------- + ldr r0,=( PAGE_128M | 0x08000000 | 1) + mcr p15, 0, r0, c6, c3, 0 + + @------------------------------------------------------------------------- + @ Region 4 - DTCM + @------------------------------------------------------------------------- + ldr r0,=__dtcm_start + orr r0,r0,#(PAGE_16K | 1) + mcr p15, 0, r0, c6, c4, 0 + + @------------------------------------------------------------------------- + @ Region 5 - ITCM + @------------------------------------------------------------------------- + ldr r0,=__itcm_start + orr r0,r0,#(PAGE_32K | 1) + mcr p15, 0, r0, c6, c5, 0 + + @------------------------------------------------------------------------- + @ Region 6 - System ROM + @------------------------------------------------------------------------- + ldr r0,=( PAGE_32K | 0xFFFF0000 | 1) + mcr p15, 0, r0, c6, c6, 0 + + @------------------------------------------------------------------------- + @ Region 7 - non cacheable main ram + @------------------------------------------------------------------------- + ldr r0,=( PAGE_4M | 0x02400000 | 1) + mcr p15, 0, r0, c6, c7, 0 + + @------------------------------------------------------------------------- + @ Write buffer enable + @------------------------------------------------------------------------- + ldr r0,=0b00000110 + mcr p15, 0, r0, c3, c0, 0 + + @------------------------------------------------------------------------- + @ DCache & ICache enable + @------------------------------------------------------------------------- + ldr r0,=0b01000110 + ldr r0,=0x42 + mcr p15, 0, r0, c2, c0, 0 + mcr p15, 0, r0, c2, c0, 1 + + @------------------------------------------------------------------------- + @ IAccess + @------------------------------------------------------------------------- + ldr r0,=0x36636333 + mcr p15, 0, r0, c5, c0, 3 + + @------------------------------------------------------------------------- + @ DAccess + @------------------------------------------------------------------------- + ldr r0,=0x36333333 + mcr p15, 0, r0, c5, c0, 2 + + @------------------------------------------------------------------------- + @ Enable ICache, DCache, ITCM & DTCM + @------------------------------------------------------------------------- + mrc p15, 0, r0, c1, c0, 0 + ldr r1,= ITCM_ENABLE | DTCM_ENABLE | ICACHE_ENABLE | DCACHE_ENABLE | PROTECT_ENABLE + orr r0,r0,r1 + mcr p15, 0, r0, c1, c0, 0 + + mov r0, #0x12 @ Switch to IRQ Mode + msr cpsr, r0 + ldr sp, =__sp_irq @ Set IRQ stack + + mov r0, #0x13 @ Switch to SVC Mode + msr cpsr, r0 + ldr sp, =__sp_svc @ Set SVC stack + + mov r0, #0x1F @ Switch to System Mode + msr cpsr, r0 + ldr sp, =__sp_usr @ Set user stack + + ldr r1, =__itcm_lma @ Copy instruction tightly coupled memory (itcm section) from LMA to VMA (ROM to RAM) + ldr r2, =__itcm_start + ldr r4, =__itcm_end + bl CopyMemCheck + + ldr r1, =__dtcm_lma @ Copy data tightly coupled memory (dtcm section) from LMA to VMA (ROM to RAM) + ldr r2, =__dtcm_start + ldr r4, =__dtcm_end + bl CopyMemCheck + + ldr r0, =__bss_start @ Clear BSS section + ldr r1, =__bss_end + sub r1, r1, r0 + bl ClearMem + + ldr r0, =__sbss_start @ Clear SBSS section + ldr r1, =__sbss_end + sub r1, r1, r0 + bl ClearMem + + ldr r1, =fake_heap_end @ set heap end + ldr r0, =__eheap_end + str r0, [r1] + + ldr r3, =_init @ global constructors + bl _call_via_r3 + + mov r0, #0 @ int argc + mov r1, #0 @ char *argv[] + ldr r3, =main + bl _call_via_r3 @ jump to user code + + @ If the user ever returns, go to an infinte loop + ldr r0, =ILoop + ldr r0, [r0] + ldr r1, =0x027FFE78 + str r0, [r1] + bx r1 +ILoop: + b ILoop + +@--------------------------------------------------------------------------------- +@ Clear memory to 0x00 if length != 0 +@ r0 = Start Address +@ r1 = Length +@--------------------------------------------------------------------------------- +ClearMem: +@--------------------------------------------------------------------------------- + mov r2, #3 @ Round down to nearest word boundary + add r1, r1, r2 @ Shouldn't be needed + bics r1, r1, r2 @ Clear 2 LSB (and set Z) + bxeq lr @ Quit if copy size is 0 + + mov r2, #0 +ClrLoop: + stmia r0!, {r2} + subs r1, r1, #4 + bne ClrLoop + + bx lr + +@--------------------------------------------------------------------------------- +@ Copy memory if length != 0 +@ r1 = Source Address +@ r2 = Dest Address +@ r4 = Dest Address + Length +@--------------------------------------------------------------------------------- +CopyMemCheck: +@--------------------------------------------------------------------------------- + sub r3, r4, r2 @ Is there any data to copy? +@--------------------------------------------------------------------------------- +@ Copy memory +@ r1 = Source Address +@ r2 = Dest Address +@ r3 = Length +@--------------------------------------------------------------------------------- +CopyMem: +@--------------------------------------------------------------------------------- + mov r0, #3 @ These commands are used in cases where + add r3, r3, r0 @ the length is not a multiple of 4, + bics r3, r3, r0 @ even though it should be. + bxeq lr @ Length is zero, so exit +CIDLoop: + ldmia r1!, {r0} + stmia r2!, {r0} + subs r3, r3, #4 + bne CIDLoop + + bx lr +@--------------------------------------------------------------------------------- + .align + .pool + .end +@--------------------------------------------------------------------------------- diff --git a/dkarm-eabi/crtls/ds_cart.ld b/dkarm-eabi/crtls/ds_cart.ld new file mode 100644 index 0000000..2b19497 --- /dev/null +++ b/dkarm-eabi/crtls/ds_cart.ld @@ -0,0 +1,217 @@ +OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_start) + +MEMORY { + + rom : ORIGIN = 0x08000000, LENGTH = 32M + iwram : ORIGIN = 0x03800000, LENGTH = 64K + ewram : ORIGIN = 0x02000000, LENGTH = 4M +} + +__ewram_start = ORIGIN(ewram); +__eheap_end = ORIGIN(ewram)+ LENGTH(ewram); +__iwram_start = ORIGIN(iwram); +__iwram_top = ORIGIN(iwram)+ LENGTH(iwram); +__sp_irq = __iwram_top - 0x60; +__sp_svc = __sp_irq - 0x100; +__sp_usr = __sp_svc - 0x100; + +__irq_flags = __iwram_top - 8; +__irq_vector = __iwram_top - 4; + +SECTIONS +{ + .init : + { + __text_start = . ; + KEEP (*(.init)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >rom = 0xff + .plt : { *(.plt) } >rom = 0xff + + .text : /* ALIGN (4): */ + { + + *(EXCLUDE_FILE (*text.iwram*) .text) + *(.text.*) + *(.stub) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + *(.gnu.linkonce.t*) + *(.glue_7) + *(.glue_7t) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >rom = 0xff + + .fini : + { + KEEP (*(.fini)) + } >rom =0xff + + __text_end = . ; + + .rodata : + { + *(.rodata) + *all.rodata*(*) + *(.roda) + *(.rodata.*) + *(.gnu.linkonce.r*) + SORT(CONSTRUCTORS) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >rom = 0xff + + /* Ensure the __preinit_array_start label is properly aligned. We + could instead move the label definition inside the section, but + the linker would then create the section even if it turns out to + be empty, which isn't pretty. */ + . = ALIGN(32 / 8); + PROVIDE (__preinit_array_start = .); + .preinit_array : { KEEP (*(.preinit_array)) } >rom = 0xff + PROVIDE (__preinit_array_end = .); + PROVIDE (__init_array_start = .); + .init_array : { KEEP (*(.init_array)) } >rom = 0xff + PROVIDE (__init_array_end = .); + PROVIDE (__fini_array_start = .); + .fini_array : { KEEP (*(.fini_array)) } >rom = 0xff + PROVIDE (__fini_array_end = .); + + .ctors : + { + /* gcc uses crtbegin.o to find the start of the constructors, so + we make sure it is first. Because this is a wildcard, it + doesn't matter if the user does not actually link against + crtbegin.o; the linker won't look for a file to match a + wildcard. The wildcard also means that it doesn't matter which + directory crtbegin.o is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >rom = 0xff + + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >rom = 0xff + + .eh_frame : + { + KEEP (*(.eh_frame)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >rom = 0xff + + .gcc_except_table : + { + *(.gcc_except_table) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >rom = 0xff + .jcr : { KEEP (*(.jcr)) } >rom = 0 + .got : { *(.got.plt) *(.got) } >rom = 0 + + __ewram_lma = . ; + + .ewram __ewram_start : AT (__ewram_lma) + { + __ewram_start = ABSOLUTE(.) ; + *(.ewram) + *ewram.*(.text) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram = 0xff + + .sbss ALIGN(4): + { + __sbss_start = ABSOLUTE(.); + *(.sbss) + . = ALIGN(4); + } >ewram + __sbss_end = . ; + + _end = . ; + __end__ = . ; + PROVIDE (end = _end); + + __iwram_lma = __ewram_lma + SIZEOF(.ewram) + SIZEOF(.sbss); + + .iwram __iwram_start : AT (__iwram_lma) + { + __iwram_start = ABSOLUTE(.) ; + *(.iwram) + *iwram.*(.text) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >iwram = 0xff + + __iwram_end = . ; + __data_lma = __iwram_lma + SIZEOF(.iwram) ; + + + .data ALIGN(4) : AT (__data_lma) + { + __data_start = ABSOLUTE(.); + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + CONSTRUCTORS + . = ALIGN(4); + } >iwram = 0xff + + __data_end = . ; + __appended_data = __data_lma + SIZEOF(.data) ; + + + .bss ALIGN(4) : + { + __bss_start = ABSOLUTE(.); + __bss_start__ = ABSOLUTE(.); + *(.dynbss) + *(.gnu.linkonce.b*) + *(.bss*) + *(COMMON) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >iwram + + __bss_end = . ; + __bss_end__ = . ; + + /* 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 debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* 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) } + .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) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .stack 0x80000 : { _stack = .; *(.stack) } + /* These must appear regardless of . */ +} diff --git a/dkarm-eabi/crtls/ds_cart.specs b/dkarm-eabi/crtls/ds_cart.specs new file mode 100644 index 0000000..8bd5778 --- /dev/null +++ b/dkarm-eabi/crtls/ds_cart.specs @@ -0,0 +1,12 @@ +%rename link old_link +%rename link_gcc_c_sequence old_gcc_c_sequence + +*link_gcc_c_sequence: +%(old_gcc_c_sequence) --start-group -lsysbase -lc --end-group + +*link: +%(old_link) -T ds_cart.ld%s + +*startfile: +ds_cart_crt0%O%s crti%O%s crtbegin%O%s + diff --git a/dkarm-eabi/crtls/ds_cart_crt0.s b/dkarm-eabi/crtls/ds_cart_crt0.s new file mode 100644 index 0000000..e053c77 --- /dev/null +++ b/dkarm-eabi/crtls/ds_cart_crt0.s @@ -0,0 +1,160 @@ +@--------------------------------------------------------------------------------- + .section ".init" + .global _start + .arm +@--------------------------------------------------------------------------------- +_start: +@--------------------------------------------------------------------------------- + b rom_header_end + +@--------------------------------------------------------------------------------- + .fill 156,1,0 @ Nintendo Logo Character Data (8000004h) + .fill 16,1,0 @ Game Title + .byte 0x30,0x31 @ Maker Code (80000B0h) + .byte 0x96 @ Fixed Value (80000B2h) + .byte 0x00 @ Main Unit Code (80000B3h) + .byte 0x00 @ Device Type (80000B4h) + .fill 7,1,0 @ unused + .byte 0x00 @ Software Version No (80000BCh) + .byte 0xf0 @ Complement Check (80000BDh) + .byte 0x00,0x00 @ Checksum (80000BEh) + +rom_header_end: + b start_vector @ This branch must be here for proper + @ positioning of the following header. + + .GLOBAL __boot_method, __slave_number +__boot_method: + .byte 0 @ boot method (0=ROM boot, 3=Multiplay boot) +__slave_number: + .byte 0 @ slave # (1=slave#1, 2=slave#2, 3=slave#3) + + .byte 0 @ reserved + .byte 0 @ reserved + .word 0 @ reserved + .word 0 @ reserved + .word 0 @ reserved + .word 0 @ reserved + .word 0 @ reserved + .word 0 @ reserved +@--------------------------------------------------------------------------------- + .align 4 + .arm +@--------------------------------------------------------------------------------- +start_vector: +@--------------------------------------------------------------------------------- + mov r0, #0x04000000 @ IME = 0; + str r0, [r0, #0x208] + + mov r0, #0x12 @ Switch to IRQ Mode + msr cpsr, r0 + ldr sp, =__sp_irq @ Set IRQ stack + + mov r0, #0x13 @ Switch to SVC Mode + msr cpsr, r0 + ldr sp, =__sp_svc @ Set SVC stack + + + mov r0, #0x1F @ Switch to System Mode + msr cpsr, r0 + ldr sp, =__sp_usr @ Set user stack + + mov r1, #0x42 + strb r1, [r7], #1 + mov r1, #0x35 + strb r1, [r7], #1 + mov r1, #0x2B + strb r1, [r7], #1 + mov r1, #0x2B + strb r1, [r7], #1 + + ldr r1, =__data_lma @ Copy initialized data (data section) from LMA to VMA (ROM to RAM) + ldr r2, =__data_start + ldr r4, =__data_end + bl CopyMemChk + + ldr r1, =__iwram_lma @ Copy internal work ram (iwram section) from LMA to VMA (ROM to RAM) + ldr r2, =__iwram_start + ldr r4, =__iwram_end + bl CopyMemChk + + ldr r0, =__bss_start @ Clear BSS section to 0x00 + ldr r1, =__bss_end + sub r1, r1, r0 + bl ClearMem + + ldr r0, =__sbss_start @ Clear SBSS section to 0x00 + ldr r1, =__sbss_end + sub r1, r1, r0 + bl ClearMem + + ldr r1, =fake_heap_end @ set heap end + ldr r0, =__eheap_end + str r0, [r1] + + ldr r3, =_init @ global constructors + bl _call_via_r3 + + mov r0, #0 @ int argc + mov r1, #0 @ char *argv[] + ldr r3, =main + bl _call_via_r3 @ jump to user code + + +@--------------------------------------------------------------------------------- +@ Clear memory to 0x00 if length != 0 +@ r0 = Start Address +@ r1 = Length +@--------------------------------------------------------------------------------- +ClearMem: + mov r2, #3 @ Round down to nearest word boundary + add r1, r1, r2 @ Shouldn't be needed + bics r1, r1, r2 @ Clear 2 LSB (and set Z) + bxeq lr @ Quit if copy size is 0 + + mov r2, #0 +@--------------------------------------------------------------------------------- +ClrLoop: +@--------------------------------------------------------------------------------- + stmia r0!, {r2} + subs r1, r1, #4 + bne ClrLoop + bx lr + +@--------------------------------------------------------------------------------- +@ Copy memory if length != 0 +@ r1 = Source Address +@ r2 = Dest Address +@ r4 = Dest Address + Length +@--------------------------------------------------------------------------------- +CopyMemChk: +@--------------------------------------------------------------------------------- + sub r3, r4, r2 @ Is there any data to copy? +@--------------------------------------------------------------------------------- +@ Copy memory +@ r1 = Source Address +@ r2 = Dest Address +@ r3 = Length +@--------------------------------------------------------------------------------- +CopyMem: +@--------------------------------------------------------------------------------- + mov r0, #3 @ These commands are used in cases where + add r3, r3, r0 @ the length is not a multiple of 4, + bics r3, r3, r0 @ even though it should be. + bxeq lr @ Length is zero so exit + +@--------------------------------------------------------------------------------- +CIDLoop: +@--------------------------------------------------------------------------------- + ldmia r1!, {r0} + stmia r2!, {r0} + subs r3, r3, #4 + bne CIDLoop + bx lr +@--------------------------------------------------------------------------------- + .align + .pool +@--------------------------------------------------------------------------------- + .end +@--------------------------------------------------------------------------------- + diff --git a/dkarm-eabi/crtls/er_crt0.s b/dkarm-eabi/crtls/er_crt0.s new file mode 100644 index 0000000..801ffa3 --- /dev/null +++ b/dkarm-eabi/crtls/er_crt0.s @@ -0,0 +1,56 @@ +@--------------------------------------------------------------------------------- +@ nintendo e-reader startup code +@--------------------------------------------------------------------------------- +@ author : tim schuerewegen +@ version : 1.0 +@--------------------------------------------------------------------------------- + .section ".init" + .global _start + .align + .arm +@--------------------------------------------------------------------------------- +_start: +@--------------------------------------------------------------------------------- + b start_vector + .long 0 + .long 0x02000000 + +start_vector: + @ enter thumb mode + adr r0, _start_thumb + 1 + bx r0 + + .thumb + +_start_thumb: + + @ save return address (rom) + mov r3, lr + + @ clear bss section + ldr r0, =__bss_start + ldr r1, =__bss_end + mov r2, #0 +_loop_bss_clear: + strb r2, [r0] + add r0, #1 + cmp r0, r1 + blt _loop_bss_clear + + @ set return address (rom) + mov lr, r3 + + @ jump to main + ldr r3, =main + bx r3 + + .align + + .pool + + .end + + .align + .pool + .end + diff --git a/dkarm-eabi/crtls/gba.specs b/dkarm-eabi/crtls/gba.specs new file mode 100644 index 0000000..84b9dff --- /dev/null +++ b/dkarm-eabi/crtls/gba.specs @@ -0,0 +1,12 @@ +%rename link old_link +%rename link_gcc_c_sequence old_gcc_c_sequence + +*link_gcc_c_sequence: +%(old_gcc_c_sequence) --start-group -lsysbase -lc --end-group + +*link: +%(old_link) -T gba_cart.ld%s + +*startfile: +gba_crt0%O%s crti%O%s crtbegin%O%s + diff --git a/dkarm-eabi/crtls/gba_cart.ld b/dkarm-eabi/crtls/gba_cart.ld new file mode 100644 index 0000000..2256985 --- /dev/null +++ b/dkarm-eabi/crtls/gba_cart.ld @@ -0,0 +1,315 @@ +/* Linker Script Original v1.3 by Jeff Frohwein */ +/* v1.0 - Original release */ +/* v1.1 - Added proper .data section support */ +/* v1.2 - Added support for c++ & iwram overlays */ +/* - Major contributions by Jason Wilkins. */ +/* v1.3 - .ewram section now can be used when */ +/* compiling for MULTIBOOT mode. This fixes */ +/* malloc() in DevKitAdvance which depends */ +/* on __eheap_start instead of end to define*/ +/* the starting location of heap space. */ +/* External global variable __gba_iwram_heap*/ +/* support added to allow labels end, _end, */ +/* & __end__ to point to end of iwram or */ +/* the end of ewram. */ +/* Additions by WinterMute */ +/* v1.4 - .sbss section added for unitialised */ +/* data in ewram */ +/* v1.5 - padding section added to stop EZF */ +/* stripping important data */ + +/* This file is released into the public domain */ +/* for commercial or non-commercial use with no */ +/* restrictions placed upon it. */ + +/* NOTE!!!: This linker script defines the RAM & */ +/* ROM start addresses. In order for it to work */ +/* properly, remove -Ttext and -Tbss linker */ +/* options from your makefile if they are */ +/* present. */ + +/* You can use the following to view section */ +/* addresses in your .elf file: */ +/* objdump -h file.elf */ +/* Please note that empty sections may incorrectly*/ +/* list the lma address as the vma address for */ +/* some versions of objdump. */ + +OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_start) +/* SEARCH_DIR(/bin/arm); */ + +/* The linker script function "var1 += var2;" sometimes */ +/* reports incorrect values in the *.map file but the */ +/* actual value it calculates is usually, if not always, */ +/* correct. If you leave out the ". = ALIGN(4);" at the */ +/* end of each section then the return value of SIZEOF() */ +/* is sometimes incorrect and "var1 += var2;" appears to */ +/* not work as well. "var1 += var2" style functions are */ +/* avoided below as a result. */ + +MEMORY { + + rom : ORIGIN = 0x08000000, LENGTH = 32M + iwram : ORIGIN = 0x03000000, LENGTH = 32K + ewram : ORIGIN = 0x02000000, LENGTH = 256K +} + +__text_start = 0x8000000; +__eheap_end = 0x2040000; +__iwram_start = 0x3000000; +__iwram_end = 0x3008000; + +__sp_irq = __iwram_end - 0x100; +__sp_usr = __sp_irq - 0x100; + +__irq_flags = 0x03007ff8; + +SECTIONS +{ + . = __text_start; + .init : + { + KEEP (*(.init)) + . = ALIGN(4); + } >rom =0xff + + .plt : + { + *(.plt) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >rom + + .text : /* ALIGN (4): */ + { + *(EXCLUDE_FILE (*.iwram*) .text) + *(.text.*) + *(.stub) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + *(.gnu.linkonce.t*) + *(.glue_7) + *(.glue_7t) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >rom = 0xff + + __text_end = .; + .fini : + { + KEEP (*(.fini)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >rom =0 + + .rodata : + { + *(.rodata) + *all.rodata*(*) + *(.roda) + *(.rodata.*) + *(.gnu.linkonce.r*) + SORT(CONSTRUCTORS) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >rom = 0xff + /* Ensure the __preinit_array_start label is properly aligned. We + could instead move the label definition inside the section, but + the linker would then create the section even if it turns out to + be empty, which isn't pretty. */ + . = ALIGN(32 / 8); + PROVIDE (__preinit_array_start = .); + .preinit_array : { KEEP (*(.preinit_array)) } >rom = 0xff + PROVIDE (__preinit_array_end = .); + PROVIDE (__init_array_start = .); + .init_array : { KEEP (*(.init_array)) } >rom = 0xff + PROVIDE (__init_array_end = .); + PROVIDE (__fini_array_start = .); + .fini_array : { KEEP (*(.fini_array)) } >rom = 0xff + PROVIDE (__fini_array_end = .); + + .ctors : + { + /* gcc uses crtbegin.o to find the start of the constructors, so + we make sure it is first. Because this is a wildcard, it + doesn't matter if the user does not actually link against + crtbegin.o; the linker won't look for a file to match a + wildcard. The wildcard also means that it doesn't matter which + directory crtbegin.o is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >rom = 0 + + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >rom = 0 + + .jcr : { KEEP (*(.jcr)) } >rom + + .eh_frame : + { + KEEP (*(.eh_frame)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >rom = 0 + + .gcc_except_table : + { + *(.gcc_except_table) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >rom = 0 + + __iwram_lma = .; + + .iwram __iwram_start : AT (__iwram_lma) + { + __iwram_start = ABSOLUTE(.) ; + *(.iwram) + *iwram.*(.text) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >iwram = 0xff + + __data_lma = __iwram_lma + SIZEOF(.iwram) ; + __iwram_end = . ; + + .bss ALIGN(4) : + { + __bss_start = ABSOLUTE(.); + __bss_start__ = ABSOLUTE(.); + *(.dynbss) + *(.gnu.linkonce.b*) + *(.bss*) + *(COMMON) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >iwram + + __bss_end = . ; + __bss_end__ = . ; + + .data ALIGN(4) : AT (__data_lma) + { + __data_start = ABSOLUTE(.); + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + CONSTRUCTORS + . = ALIGN(4); + } >iwram = 0xff + + __iwram_overlay_lma = __data_lma + SIZEOF(.data); + + __data_end = .; + __iwram_overlay_start = . ; + + OVERLAY ALIGN(4) : NOCROSSREFS AT (__iwram_overlay_lma) + { + .iwram0 { *(.iwram0) . = ALIGN(4);} + .iwram1 { *(.iwram1) . = ALIGN(4);} + .iwram2 { *(.iwram2) . = ALIGN(4);} + .iwram3 { *(.iwram3) . = ALIGN(4);} + .iwram4 { *(.iwram4) . = ALIGN(4);} + .iwram5 { *(.iwram5) . = ALIGN(4);} + .iwram6 { *(.iwram6) . = ALIGN(4);} + .iwram7 { *(.iwram7) . = ALIGN(4);} + .iwram8 { *(.iwram8) . = ALIGN(4);} + .iwram9 { *(.iwram9) . = ALIGN(4);} + }>iwram = 0xff + + __ewram_lma = LOADADDR(.iwram0) + SIZEOF(.iwram0)+SIZEOF(.iwram1)+SIZEOF(.iwram2)+SIZEOF(.iwram3)+SIZEOF(.iwram4)+SIZEOF(.iwram5)+SIZEOF(.iwram6)+SIZEOF(.iwram7)+SIZEOF(.iwram8)+SIZEOF(.iwram9); + + __iwram_overlay_end = . ; + __iheap_start = . ; + + __ewram_start = 0x2000000; + .ewram __ewram_start : AT (__ewram_lma) + { + *(.ewram) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + }>ewram = 0xff + + __ewram_overlay_lma = __ewram_lma + SIZEOF(.ewram); + + .sbss ALIGN(4): + { + __sbss_start = ABSOLUTE(.); + *(.sbss) + . = ALIGN(4); + } >ewram + + __sbss_end = .; + + __ewram_end = . ; + __ewram_overlay_start = . ; + + OVERLAY ALIGN(4): NOCROSSREFS AT (__ewram_overlay_lma) + { + .ewram0 { *(.ewram0) . = ALIGN(4);} + .ewram1 { *(.ewram1) . = ALIGN(4);} + .ewram2 { *(.ewram2) . = ALIGN(4);} + .ewram3 { *(.ewram3) . = ALIGN(4);} + .ewram4 { *(.ewram4) . = ALIGN(4);} + .ewram5 { *(.ewram5) . = ALIGN(4);} + .ewram6 { *(.ewram6) . = ALIGN(4);} + .ewram7 { *(.ewram7) . = ALIGN(4);} + .ewram8 { *(.ewram8) . = ALIGN(4);} + .ewram9 { *(.ewram9) . = ALIGN(4);} + }>ewram = 0xff + + __pad_lma = LOADADDR(.ewram0) + SIZEOF(.ewram0)+SIZEOF(.ewram1)+SIZEOF(.ewram2)+SIZEOF(.ewram3)+SIZEOF(.ewram4)+SIZEOF(.ewram5)+SIZEOF(.ewram6)+SIZEOF(.ewram7)+SIZEOF(.ewram8)+SIZEOF(.ewram9); + + /* EZF Advance strips trailing 0xff bytes, add a pad section so nothing important is removed */ + .pad ALIGN(4) : AT (__pad_lma) + { + LONG(0x52416b64) + LONG(0x4d) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } = 0xff + + __ewram_overlay_end = . ; + __eheap_start = . ; + + _end = .; + __end__ = _end ; /* v1.3 */ + PROVIDE (end = _end); /* v1.3 */ + + /* 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 debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* 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) } + .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) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .stack 0x80000 : { _stack = .; *(.stack) } + /* These must appear regardless of . */ +} diff --git a/dkarm-eabi/crtls/gba_crt0.s b/dkarm-eabi/crtls/gba_crt0.s new file mode 100644 index 0000000..8616021 --- /dev/null +++ b/dkarm-eabi/crtls/gba_crt0.s @@ -0,0 +1,251 @@ + .section ".init" + .global _start + .align + .arm +@--------------------------------------------------------------------------------- +_start: +@--------------------------------------------------------------------------------- + b rom_header_end + + .fill 156,1,0 @ Nintendo Logo Character Data (8000004h) + .fill 16,1,0 @ Game Title + .byte 0x30,0x31 @ Maker Code (80000B0h) + .byte 0x96 @ Fixed Value (80000B2h) + .byte 0x00 @ Main Unit Code (80000B3h) + .byte 0x00 @ Device Type (80000B4h) + .fill 7,1,0 @ unused + .byte 0x00 @ Software Version No (80000BCh) + .byte 0xf0 @ Complement Check (80000BDh) + .byte 0x00,0x00 @ Checksum (80000BEh) + +@--------------------------------------------------------------------------------- +rom_header_end: +@--------------------------------------------------------------------------------- + b start_vector @ This branch must be here for proper + @ positioning of the following header. + + .GLOBAL __boot_method, __slave_number +@--------------------------------------------------------------------------------- +__boot_method: +@--------------------------------------------------------------------------------- + .byte 0 @ boot method (0=ROM boot, 3=Multiplay boot) +@--------------------------------------------------------------------------------- +__slave_number: +@--------------------------------------------------------------------------------- + .byte 0 @ slave # (1=slave#1, 2=slave#2, 3=slave#3) + + .byte 0 @ reserved + .byte 0 @ reserved + .word 0 @ reserved + .word 0 @ reserved + .word 0 @ reserved + .word 0 @ reserved + .word 0 @ reserved + .word 0 @ reserved + + .global start_vector + .align +@--------------------------------------------------------------------------------- +start_vector: +@--------------------------------------------------------------------------------- + mov r0, #0x4000000 @ REG_BASE + str r0, [r0, #0x208] + + mov r0, #0x12 @ Switch to IRQ Mode + msr cpsr, r0 + ldr sp, =__sp_irq @ Set IRQ stack + mov r0, #0x1f @ Switch to System Mode + msr cpsr, r0 + ldr sp, =__sp_usr @ Set user stack + +@--------------------------------------------------------------------------------- +@ Enter Thumb mode +@--------------------------------------------------------------------------------- + add r0, pc, #1 + bx r0 + + .thumb + + ldr r0, =__text_start + lsl r0, #5 @ Was code compiled at 0x08000000 or higher? + bcs DoEWRAMClear @ yes, you can not run it in external WRAM + + mov r0, pc + lsl r0, #5 @ Are we running from ROM (0x8000000 or higher) ? + bcc SkipEWRAMClear @ No, so no need to do a copy. + +@--------------------------------------------------------------------------------- +@ We were started in ROM, silly emulators. :P +@ So we need to copy to ExWRAM. +@--------------------------------------------------------------------------------- + mov r2, #2 + lsl r2, r2, #24 @ r2= 0x02000000 + ldr r3, =__end__ @ last ewram address + sub r3, r2 @ r3= actual binary size + mov r6, r2 @ r6= 0x02000000 + lsl r1, r2, #2 @ r1= 0x08000000 + + bl CopyMem + + bx r6 @ Jump to the code to execute + +@--------------------------------------------------------------------------------- +DoEWRAMClear: @ Clear External WRAM to 0x00 +@--------------------------------------------------------------------------------- + mov r1, #0x40 + lsl r1, #12 @ r1 = 0x40000 + lsl r0, r1, #7 @ r0 = 0x2000000 + bl ClearMem + +@--------------------------------------------------------------------------------- +SkipEWRAMClear: @ Clear Internal WRAM to 0x00 +@--------------------------------------------------------------------------------- + +@--------------------------------------------------------------------------------- +@ Clear BSS section to 0x00 +@--------------------------------------------------------------------------------- + ldr r0, =__bss_start + ldr r1, =__bss_end + sub r1, r0 + bl ClearMem + +@--------------------------------------------------------------------------------- +@ Clear SBSS section to 0x00 +@--------------------------------------------------------------------------------- + ldr r0, =__sbss_start + ldr r1, =__sbss_end + sub r1, r0 + bl ClearMem + +@--------------------------------------------------------------------------------- +@ Copy initialized data (data section) from LMA to VMA (ROM to RAM) +@--------------------------------------------------------------------------------- + ldr r1, =__data_lma + ldr r2, =__data_start + ldr r4, =__data_end + bl CopyMemChk + +@--------------------------------------------------------------------------------- +@ Copy internal work ram (iwram section) from LMA to VMA (ROM to RAM) +@--------------------------------------------------------------------------------- + ldr r1,= __iwram_lma + ldr r2,= __iwram_start + ldr r4,= __iwram_end + bl CopyMemChk + +@--------------------------------------------------------------------------------- +@ Copy internal work ram overlay 0 (iwram0 section) from LMA to VMA (ROM to RAM) +@--------------------------------------------------------------------------------- + ldr r2,= __load_stop_iwram0 + ldr r1,= __load_start_iwram0 + sub r3, r2, r1 @ Is there any data to copy? + beq CIW0Skip @ no + + ldr r2,= __iwram_overlay_start + bl CopyMem +@--------------------------------------------------------------------------------- +CIW0Skip: +@--------------------------------------------------------------------------------- +@ Copy external work ram (ewram section) from LMA to VMA (ROM to RAM) +@--------------------------------------------------------------------------------- + ldr r1, =__ewram_lma + ldr r2, =__ewram_start + ldr r4, =__ewram_end + bl CopyMemChk + +@--------------------------------------------------------------------------------- +@ Copy external work ram overlay 0 (ewram0 section) from LMA to VMA (ROM to RAM) +@--------------------------------------------------------------------------------- + ldr r2, =__load_stop_ewram0 + ldr r1, =__load_start_ewram0 + sub r3, r2, r1 @ Is there any data to copy? + beq CEW0Skip @ no + + ldr r2, =__ewram_overlay_start + bl CopyMem +@--------------------------------------------------------------------------------- +CEW0Skip: +@--------------------------------------------------------------------------------- +@ set heap end +@--------------------------------------------------------------------------------- + ldr r1, =fake_heap_end + ldr r0, =__eheap_end + str r0, [r1] +@--------------------------------------------------------------------------------- +@ global constructors +@--------------------------------------------------------------------------------- + ldr r3, =_init + bl _call_via_r3 +@--------------------------------------------------------------------------------- +@ Jump to user code +@--------------------------------------------------------------------------------- + mov r0, #0 @ int argc + mov r1, #0 @ char *argv[] + ldr r3, =main + bl _call_via_r3 +@--------------------------------------------------------------------------------- +@ Clear memory to 0x00 if length != 0 +@--------------------------------------------------------------------------------- +@ r0 = Start Address +@ r1 = Length +@--------------------------------------------------------------------------------- +ClearMem: +@--------------------------------------------------------------------------------- + mov r2,#3 @ These commands are used in cases where + add r1,r2 @ the length is not a multiple of 4, + bic r1,r2 @ even though it should be. + + beq ClearMX @ Length is zero so exit + + mov r2,#0 +@--------------------------------------------------------------------------------- +ClrLoop: +@--------------------------------------------------------------------------------- + stmia r0!, {r2} + sub r1,#4 + bne ClrLoop +@--------------------------------------------------------------------------------- +ClearMX: +@--------------------------------------------------------------------------------- + bx lr + +@--------------------------------------------------------------------------------- +@ Copy memory if length != 0 +@--------------------------------------------------------------------------------- +@ r1 = Source Address +@ r2 = Dest Address +@ r4 = Dest Address + Length +@--------------------------------------------------------------------------------- +CopyMemChk: +@--------------------------------------------------------------------------------- + sub r3, r4, r2 @ Is there any data to copy? +@--------------------------------------------------------------------------------- +@ Copy memory +@--------------------------------------------------------------------------------- +@ r1 = Source Address +@ r2 = Dest Address +@ r3 = Length +@--------------------------------------------------------------------------------- +CopyMem: +@--------------------------------------------------------------------------------- + mov r0, #3 @ These commands are used in cases where + add r3, r0 @ the length is not a multiple of 4, + bic r3, r0 @ even though it should be. + beq CIDExit @ Length is zero so exit + +@--------------------------------------------------------------------------------- +CIDLoop: +@--------------------------------------------------------------------------------- + ldmia r1!, {r0} + stmia r2!, {r0} + sub r3, #4 + bne CIDLoop +@--------------------------------------------------------------------------------- +CIDExit: +@--------------------------------------------------------------------------------- + bx lr + + .align + .pool + .end + diff --git a/dkarm-eabi/crtls/gba_er.ld b/dkarm-eabi/crtls/gba_er.ld new file mode 100644 index 0000000..4147ebe --- /dev/null +++ b/dkarm-eabi/crtls/gba_er.ld @@ -0,0 +1,50 @@ +/***********************************/ +/* NINTENDO E-READER LINKER SCRIPT */ +/***********************************/ +/* Author : Tim Schuerewegen */ +/* Version : 1.0 */ +/***********************************/ + +OUTPUT_FORMAT( "elf32-littlearm", "elf32-bigarm", "elf32-littlearm") +OUTPUT_ARCH( arm) +ENTRY( _start) + +SECTIONS +{ + . = 0x02000000; + + .init : + { + *(.init) + . = ALIGN(4); + } = 0xff + + .text : + { + *(.text) + . = ALIGN(4); + } = 0xff + + .rodata : + { + *(.rodata) + . = ALIGN(4); + } = 0xff + + .data : + { + *(.data) + . = ALIGN(4); + } = 0xff + + .bss : + { + __bss_start = .; + *(.bss) + . = ALIGN(4); + } + __bss_end = .; + + __end = .; +} + diff --git a/dkarm-eabi/crtls/gba_er.specs b/dkarm-eabi/crtls/gba_er.specs new file mode 100644 index 0000000..419b085 --- /dev/null +++ b/dkarm-eabi/crtls/gba_er.specs @@ -0,0 +1,8 @@ +%rename link old_link +%rename endfile old_endfile + +*link: +-T gba_er.ld%s %(old_link) + +*startfile: +er_crt0%O%s diff --git a/dkarm-eabi/crtls/gba_mb.ld b/dkarm-eabi/crtls/gba_mb.ld new file mode 100644 index 0000000..8c1edb4 --- /dev/null +++ b/dkarm-eabi/crtls/gba_mb.ld @@ -0,0 +1,301 @@ +/* Linker Script Original v1.3 by Jeff Frohwein */ +/* v1.0 - Original release */ +/* v1.1 - Added proper .data section support */ +/* v1.2 - Added support for c++ & iwram overlays */ +/* - Major contributions by Jason Wilkins. */ +/* v1.3 - .ewram section now can be used when */ +/* compiling for MULTIBOOT mode. This fixes */ +/* malloc() in DevKitAdvance which depends */ +/* on __eheap_start instead of end to define*/ +/* the starting location of heap space. */ +/* External global variable __gba_iwram_heap*/ +/* support added to allow labels end, _end, */ +/* & __end__ to point to end of iwram or */ +/* the end of ewram. */ +/* Additions by WinterMute */ +/* v1.4 - .sbss section added for unitialised */ +/* data in ewram */ +/* v1.5 - padding section added to stop EZF */ +/* stripping important data */ +/* v1.6 - added memory sections */ + +/* This file is released into the public domain */ +/* for commercial or non-commercial use with no */ +/* restrictions placed upon it. */ + +/* NOTE!!!: This linker script defines the RAM & */ +/* ROM start addresses. In order for it to work */ +/* properly, remove -Ttext and -Tbss linker */ +/* options from your makefile if they are */ +/* present. */ + +/* You can use the following to view section */ +/* addresses in your .elf file: */ +/* objdump -h file.elf */ +/* Please note that empty sections may incorrectly*/ +/* list the lma address as the vma address for */ +/* some versions of objdump. */ + +OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_start) + +MEMORY { + + rom : ORIGIN = 0x08000000, LENGTH = 32M + iwram : ORIGIN = 0x03000000, LENGTH = 32K + ewram : ORIGIN = 0x02000000, LENGTH = 256K +} + + + +__text_start = 0x2000000 ; +__eheap_end = 0x2040000; +__iwram_start = 0x3000000; +__iwram_end = 0x3008000; +__sp_irq = __iwram_end - 0x100; +__sp_usr = __sp_irq - 0x100; + +__irq_flags = 0x03007ff8; + +SECTIONS +{ + . = __text_start; + .init : + { + KEEP (*(.init)) + . = ALIGN(4); + } >ewram =0xff + + .plt : + { + *(.plt) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram + + .text ALIGN (4): + { + *(EXCLUDE_FILE (*.iwram*) .text) + *(.text.*) + *(.stub) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + *(.gnu.linkonce.t*) + *(.glue_7) + *(.glue_7t) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram = 0xff + + __text_end = .; + .fini : + { + KEEP (*(.fini)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram =0 + + .rodata : + { + *(.rodata) + *all.rodata*(*) + *(.roda) + *(.rodata.*) + *(.gnu.linkonce.r*) + SORT(CONSTRUCTORS) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram = 0xff + + /* Ensure the __preinit_array_start label is properly aligned. We + could instead move the label definition inside the section, but + the linker would then create the section even if it turns out to + be empty, which isn't pretty. */ + . = ALIGN(32 / 8); + PROVIDE (__preinit_array_start = .); + .preinit_array : { KEEP (*(.preinit_array)) } >ewram = 0xff + PROVIDE (__preinit_array_end = .); + PROVIDE (__init_array_start = .); + .init_array : { KEEP (*(.init_array)) } >ewram = 0xff + PROVIDE (__init_array_end = .); + PROVIDE (__fini_array_start = .); + .fini_array : { KEEP (*(.fini_array)) } >ewram = 0xff + PROVIDE (__fini_array_end = .); + .ctors : + { + /* gcc uses crtbegin.o to find the start of the constructors, so + we make sure it is first. Because this is a wildcard, it + doesn't matter if the user does not actually link against + crtbegin.o; the linker won't look for a file to match a + wildcard. The wildcard also means that it doesn't matter which + directory crtbegin.o is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram = 0 + + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram = 0 + + .jcr : { KEEP (*(.jcr)) } >ewram + .eh_frame : + { + KEEP (*(.eh_frame)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram = 0 + + .gcc_except_table : + { + *(.gcc_except_table) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram = 0 + + __iwram_lma = .; + + .iwram __iwram_start : AT (__iwram_lma) + { + __iwram_start = ABSOLUTE(.) ; + *(.iwram) + *iwram.*(.text) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >iwram = 0xff + + __data_lma = __iwram_lma + SIZEOF(.iwram) ; + __iwram_end = . ; + + .bss ALIGN(4) : + { + __bss_start = ABSOLUTE(.); + __bss_start__ = ABSOLUTE(.); + *(.dynbss) + *(.gnu.linkonce.b*) + *(.bss*) + *(COMMON) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } + + __bss_end = . ; + __bss_end__ = . ; + + .data ALIGN(4) : AT (__data_lma) + { + __data_start = ABSOLUTE(.); + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + CONSTRUCTORS + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >iwram = 0xff + + __iwram_overlay_lma = __data_lma + SIZEOF(.data); + + __data_end = .; + PROVIDE (edata = .); + __iwram_overlay_start = . ; + + OVERLAY ALIGN(4) : NOCROSSREFS AT (__iwram_overlay_lma) + { + .iwram0 { *(.iwram0) . = ALIGN(4);} + .iwram1 { *(.iwram1) . = ALIGN(4);} + .iwram2 { *(.iwram2) . = ALIGN(4);} + .iwram3 { *(.iwram3) . = ALIGN(4);} + .iwram4 { *(.iwram4) . = ALIGN(4);} + .iwram5 { *(.iwram5) . = ALIGN(4);} + .iwram6 { *(.iwram6) . = ALIGN(4);} + .iwram7 { *(.iwram7) . = ALIGN(4);} + .iwram8 { *(.iwram8) . = ALIGN(4);} + .iwram9 { *(.iwram9) . = ALIGN(4);} + } >iwram = 0xff + + __ewram_lma = LOADADDR(.iwram0) + SIZEOF(.iwram0)+SIZEOF(.iwram1)+SIZEOF(.iwram2)+SIZEOF(.iwram3)+SIZEOF(.iwram4)+SIZEOF(.iwram5)+SIZEOF(.iwram6)+SIZEOF(.iwram7)+SIZEOF(.iwram8)+SIZEOF(.iwram9); + + __iwram_overlay_end = . ; + __iheap_start = . ; + + /* v1.3 */ + __ewram_start = __ewram_lma ; + + .ewram __ewram_start : AT (__ewram_lma) + { + *(.ewram) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ewram = 0xff + + __ewram_overlay_lma = __ewram_lma + SIZEOF(.ewram); + + .sbss ALIGN(4): + { + __sbss_start = ABSOLUTE(.); + *(.sbss) + . = ALIGN(4); + } + + __sbss_end = .; + + __ewram_end = . ; + __ewram_overlay_start = . ; + + OVERLAY ALIGN(4): NOCROSSREFS AT (__ewram_overlay_lma) + { + .ewram0 { *(.ewram0) . = ALIGN(4);} + .ewram1 { *(.ewram1) . = ALIGN(4);} + .ewram2 { *(.ewram2) . = ALIGN(4);} + .ewram3 { *(.ewram3) . = ALIGN(4);} + .ewram4 { *(.ewram4) . = ALIGN(4);} + .ewram5 { *(.ewram5) . = ALIGN(4);} + .ewram6 { *(.ewram6) . = ALIGN(4);} + .ewram7 { *(.ewram7) . = ALIGN(4);} + .ewram8 { *(.ewram8) . = ALIGN(4);} + .ewram9 { *(.ewram9) . = ALIGN(4);} + } >ewram = 0xff + + __ewram_overlay_end = . ; + + __eheap_start = . ; + + _end = .; + __end__ = _end ; /* v1.3 */ + PROVIDE (end = _end); /* v1.3 */ + + + /* 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 debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* 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) } + .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) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .stack 0x80000 : { _stack = .; *(.stack) } + /* These must appear regardless of . */ +} diff --git a/dkarm-eabi/crtls/gba_mb.specs b/dkarm-eabi/crtls/gba_mb.specs new file mode 100644 index 0000000..b5a364f --- /dev/null +++ b/dkarm-eabi/crtls/gba_mb.specs @@ -0,0 +1,12 @@ +%rename link old_link +%rename link_gcc_c_sequence old_gcc_c_sequence + +*link_gcc_c_sequence: +%(old_gcc_c_sequence) --start-group -lsysbase -lc --end-group + +*link: +-T gba_mb.ld%s %(old_link) + +*startfile: +gba_crt0%O%s crti%O%s crtbegin%O%s + diff --git a/dkarm-eabi/crtls/gp32.ld b/dkarm-eabi/crtls/gp32.ld new file mode 100644 index 0000000..f5f0209 --- /dev/null +++ b/dkarm-eabi/crtls/gp32.ld @@ -0,0 +1,167 @@ +OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_start) + +MEMORY + { + ram : ORIGIN = 0xc000000, LENGTH = 8M + } + +SECTIONS +{ + .init : + { + __text_start = . ; + KEEP (*(.init)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ram = 0xff + .plt : { *(.plt) } >ram = 0xff + + .text : /* ALIGN (4): */ + { + + *(EXCLUDE_FILE (*text.iwram*) .text) + *(.text.*) + *(.stub) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + *(.gnu.linkonce.t*) + *(.glue_7) + *(.glue_7t) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ram = 0xff + .fini : + { + KEEP (*(.fini)) + } >ram =0xff + + __text_end = . ; + + .rodata : + { + *(.rodata) + *all.rodata*(*) + *(.roda) + *(.rodata.*) + *(.gnu.linkonce.r*) + SORT(CONSTRUCTORS) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ram = 0xff + + /* Ensure the __preinit_array_start label is properly aligned. We + could instead move the label definition inside the section, but + the linker would then create the section even if it turns out to + be empty, which isn't pretty. */ + . = ALIGN(32 / 8); + PROVIDE (__preinit_array_start = .); + .preinit_array : { KEEP (*(.preinit_array)) } >ram = 0xff + PROVIDE (__preinit_array_end = .); + PROVIDE (__init_array_start = .); + .init_array : { KEEP (*(.init_array)) } >ram = 0xff + PROVIDE (__init_array_end = .); + PROVIDE (__fini_array_start = .); + .fini_array : { KEEP (*(.fini_array)) } >ram = 0xff + PROVIDE (__fini_array_end = .); + .ctors : + { + /* gcc uses crtbegin.o to find the start of the constructors, so + we make sure it is first. Because this is a wildcard, it + doesn't matter if the user does not actually link against + crtbegin.o; the linker won't look for a file to match a + wildcard. The wildcard also means that it doesn't matter which + directory crtbegin.o is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ram = 0 + + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ram = 0 + + .eh_frame : + { + KEEP (*(.eh_frame)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ram = 0 + + .gcc_except_table : + { + *(.gcc_except_table) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ram = 0 + .jcr : { KEEP (*(.jcr)) } >ram = 0 + .got : { *(.got.plt) *(.got) } >ram = 0 + __ro_end = . ; + + .data ALIGN(4) : + { + __data_start = ABSOLUTE(.); + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + CONSTRUCTORS + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ram = 0xff + + __data_end = . ; + + .bss ALIGN(4) : + { + __bss_start = ABSOLUTE(.); + /* __bss_start__ = ABSOLUTE(.); */ + *(.dynbss) + *(.gnu.linkonce.b*) + *(.bss*) + *(COMMON) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } > ram + __bss_end = . ; + + _end = . ; + __end__ = . ; + PROVIDE (end = _end); + + /* 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 debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* 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) } + .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) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .stack 0x80000 : { _stack = .; *(.stack) } + /* These must appear regardless of . */ +} diff --git a/dkarm-eabi/crtls/gp32.specs b/dkarm-eabi/crtls/gp32.specs new file mode 100644 index 0000000..4484877 --- /dev/null +++ b/dkarm-eabi/crtls/gp32.specs @@ -0,0 +1,12 @@ +%rename link old_link +%rename link_gcc_c_sequence old_gcc_c_sequence + +*link_gcc_c_sequence: +%(old_gcc_c_sequence) --start-group -lsysbase -lc --end-group + +*link: +%(old_link) -T gp32.ld%s + +*startfile: +gp32_crt0%O%s crti%O%s crtbegin%O%s + diff --git a/dkarm-eabi/crtls/gp32_crt0.s b/dkarm-eabi/crtls/gp32_crt0.s new file mode 100644 index 0000000..838dfc2 --- /dev/null +++ b/dkarm-eabi/crtls/gp32_crt0.s @@ -0,0 +1,74 @@ + .section ".init" + .code 32 + .align + .global _start +@--------------------------------------------------------------------------------- +_start: +@--------------------------------------------------------------------------------- + b _start2 + +@--------------------------------------------------------------------------------- +@ AXF addresses +@--------------------------------------------------------------------------------- +_text_start: + .word __text_start +_ro_end: + .word __ro_end +_data_start: + .word __data_start + .word __bss_end +_bss_start: + .word __bss_start +_bss_end: + .word __bss_end + +@--------------------------------------------------------------------------------- +@ GamePark magic sequence +@--------------------------------------------------------------------------------- + .word 0x44450011 + .word 0x44450011 + .word 0x01234567 + .word 0x12345678 + .word 0x23456789 + .word 0x34567890 + .word 0x45678901 + .word 0x56789012 + .word 0x23456789 + .word 0x34567890 + .word 0x45678901 + .word 0x56789012 + .word 0x23456789 + .word 0x34567890 + .word 0x45678901 + .word 0x56789012 + +@--------------------------------------------------------------------------------- +_start2: +@--------------------------------------------------------------------------------- + mrs r0, CPSR + orr r0, r0, #0xC0 + msr CPSR_ctl, r0 + + mrs r0, CPSR + bic r0, r0, #0xC0 + orr r0, r0, #0x40 + msr CPSR_ctl,r0 + +@--------------------------------------------------------------------------------- +@ global constructors +@--------------------------------------------------------------------------------- + ldr r3,=_call_main + mov lr,r3 + ldr r3,=_init + bx r3 +@--------------------------------------------------------------------------------- +@ Jump to user code +@--------------------------------------------------------------------------------- +_call_main: +@--------------------------------------------------------------------------------- + mov lr, #0 + ldr r3, =main + bx r3 + + .pool + .end diff --git a/dkarm-eabi/crtls/gp32_gpsdk.ld b/dkarm-eabi/crtls/gp32_gpsdk.ld new file mode 100644 index 0000000..85de0b6 --- /dev/null +++ b/dkarm-eabi/crtls/gp32_gpsdk.ld @@ -0,0 +1,198 @@ +/* GP32 Linker Script v1.2 by Jeff F */ +/* v1.0 - Original release */ +/* v1.1 - Cleaned up and added MEMORY command */ +/* v1.2 - DJWillis - Added propper .init and */ +/* .fini for GCC 3.3.2 and above */ +/* */ +/* This file is released into the public domain */ +/* for commercial or non-commercial use with no */ +/* restrictions placed upon it. */ +/* */ +/* NOTE!!!: This linker script defines the RAM */ +/* start addresses. In order for it to work */ +/* properly, remove -Ttext and -Tbss linker */ +/* options from your makefile if they are */ +/* present. */ +/* */ +/* You can use the following to view section */ +/* addresses in your .elf file: */ +/* objdump -h file.elf */ +/* */ +/* Please note that empty sections may incorrectly*/ +/* list the lma address as the vma address for */ +/* some versions of objdump. */ + +OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_start) +/* SEARCH_DIR(/bin/arm); */ + +/* Then use it like this: IWRAMHEAP */ +/* The linker script function "var1 += var2;" sometimes */ +/* reports incorrect values in the *.map file but the */ +/* actual value it calculates is usually, if not always, */ +/* correct. If you leave out the ". = ALIGN(4);" at the */ +/* end of each section then the return value of SIZEOF() */ +/* is sometimes incorrect and "var1 += var2;" appears to */ +/* not work as well. "var1 += var2" style functions are */ +/* avoided below as a result. */ + +/* The linker script MEMORY directive is not used here due */ +/* to the fact that __text_start is not always a fixed value. */ + +MEMORY + { + ram : ORIGIN = 0xc000000, LENGTH = 8M + } + +SECTIONS +{ + .text : /* ALIGN (4): */ + { + __text_start = . ; + + *(EXCLUDE_FILE (*text.iwram*) .text) + *(.text.*) + *(.stub) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + *(.gnu.linkonce.t*) + *(.glue_7) + *(.glue_7t) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ram = 0xff + + __text_end = . ; + + + .init : + { + *(.init) + } > ram = 0xff + + .jcr : + { + *(.jcr) + } > ram = 0xff + + .fini : + { + *(.fini) + } > ram = 0xff + + .rodata : + { + *(.rodata) + *all.rodata*(*) + *(.roda) + *(.rodata.*) + *(.gnu.linkonce.r*) + SORT(CONSTRUCTORS) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ram = 0xff + + .ctors : + { + /* gcc uses crtbegin.o to find the start of the constructors, so + we make sure it is first. Because this is a wildcard, it + doesn't matter if the user does not actually link against + crtbegin.o; the linker won't look for a file to match a + wildcard. The wildcard also means that it doesn't matter which + directory crtbegin.o is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ram = 0 + + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ram = 0 + + .eh_frame : + { + KEEP (*(.eh_frame)) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ram = 0 + + .gcc_except_table : + { + *(.gcc_except_table) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ram = 0 + __ro_end = . ; + + .data ALIGN(4) : + { + __data_start = ABSOLUTE(.); + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + CONSTRUCTORS + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } >ram = 0xff + + __data_end = . ; + + .bss ALIGN(4) : + { + __bss_start = ABSOLUTE(.); + /* __bss_start__ = ABSOLUTE(.); */ + *(.dynbss) + *(.gnu.linkonce.b*) + *(COMMON) + *(.bss*) + . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ + } > ram + __bss_end = . ; + + __eheap_start = . ; /* Needed by DevKitAdvance. Start of malloc() heap for DKA. */ + + _end = . ; + __end__ = . ; + PROVIDE (end = _end); + + __eheap_end = . ; + + /* 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 debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* 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) } + .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) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + .stack 0x80000 : { _stack = .; *(.stack) } + /* These must appear regardless of . */ +} diff --git a/dkarm-eabi/crtls/gp32_gpsdk.specs b/dkarm-eabi/crtls/gp32_gpsdk.specs new file mode 100644 index 0000000..239e773 --- /dev/null +++ b/dkarm-eabi/crtls/gp32_gpsdk.specs @@ -0,0 +1,12 @@ +%rename link old_link +%rename link_gcc_c_sequence old_gcc_c_sequence + +*link_gcc_c_sequence: +%(old_gcc_c_sequence) --start-group -lsysbase -lc --end-group + +*link: +%(old_link) -T gp32_gpsdk.ld%s + +*startfile: +gp32_gpsdk_crt0%O%s crti%O%s crtbegin%O%s + diff --git a/dkarm-eabi/crtls/gp32_gpsdk_crt0.s b/dkarm-eabi/crtls/gp32_gpsdk_crt0.s new file mode 100644 index 0000000..99770ce --- /dev/null +++ b/dkarm-eabi/crtls/gp32_gpsdk_crt0.s @@ -0,0 +1,246 @@ +@**************************************************** +@* gp32 crt0.S v1.0 by Jeff F * +@**************************************************** + +@ v1.0 - Original release +@ +@ This file is released into the public domain for commercial +@ or non-commercial usage with no restrictions placed upon it. + + .TEXT + +@ Note: Normally it is the job of crt0.S to clear the BSS +@ (Zero Initialized) section to 0x00, but in the case of +@ the gp32 we do not have to do this because it is done +@ by the gp32 bios after it loads the app. + +@ The official sdt dev kit uses 'Main ()' as the entry +@ point. If you would rather use 'main ()' instead then +@ comment out the next line. +@ +@ You have to use 'main ()' at some point in your program +@ if you want to do c++ code. GCC will do a call to constructor +@ setup before executing 'main ()'. Using 'main ()' also increases +@ your program size by ~5500 bytes. + +@ .equ __OfficialEntry, 1 + +@ The official sdt dev kit initializes various things in init.o +@ Crt0.S performs similar tasks for compatibility. If you don't +@ wish to use the official libs, or those that are compatible, +@ then you need to comment out the next line to prevent link errors. + + .equ __OfficialInits, 1 + + + .GLOBAL _start +_start: + .ALIGN + .CODE 32 + + @ Start Vector + + b _GpInit + + .word __text_start @ Start of text (Read Only) section +_roe: .word __ro_end @ End " +_rws: .word __data_start @ Start of data (Read/Write) section + .word __bss_end @ End of bss (this is the way sdt does it for some reason) +_zis: .word __bss_start @ Start of bss (Zero Initialized) section +_zie: .word __bss_end @ End " + + .word 0x44450011 + .word 0x44450011 + + .word 0x01234567 + .word 0x12345678 + .word 0x23456789 + .word 0x34567890 + .word 0x45678901 + .word 0x56789012 + .word 0x23456789 + .word 0x34567890 + .word 0x45678901 + .word 0x56789012 + .word 0x23456789 + .word 0x34567890 + .word 0x45678901 + .word 0x56789012 + +_GpInit: + mrs r0,CPSR + orr r0,r0,#0xc0 + msr CPSR_fsxc,r0 + +.ifdef __OfficialInits + +@ Call function in user_init.s +@ bl asm_user_entry + +@ Get pointer to GpSurfaceSet routine + mov r0,#0 + swi 0xb + ldr r1,=GpSurfaceSet + ldr r2,=GpSurfaceFlip + str r0,[r1] + str r0,[r2] + +@ Get time passed + mov r0,#6 + swi 0xb + ldr r1,=_timepassed + str r0,[r1] + +@ Get button stuff + mov r0,#0 + swi 0x10 + ldr r2,=_reg_io_key_a + ldr r3,=_reg_io_key_b + str r0,[r2] + str r1,[r3] + +@ Set heap start location + ldr r0,_zie + ldr r1,=HEAPSTART + str r0,[r1] + +@ Set heap end location + mov r0,#5 + swi 0xb + ldr r1,=HEAPEND + sub r0,r0,#255 + bic r0,r0,#3 + str r0,[r1] + +@ Set App Argument + swi 0x15 + + mov r10,r0 + mov r11,r1 @ possibly not needed but left in anyway + + mrs r0,CPSR + bic r0,r0,#192 + orr r0,r0,#64 + msr CPSR_fsxc,r0 + + mov r0,r10 + mov r1,r11 @ possibly not needed but left in anyway +.endif + +@ Jump to Main () + +.ifdef __OfficialEntry + ldr r3,=Main +.else + ldr r3,=main +.endif + bx r3 @ Init.o uses 'mov pc,r3' but + @ 'bx r3' is used here instead. This way + @ the main function can be ARM or Thumb. + +.ifdef __OfficialInits + + swi 0x12 + orr r1,r1,r2 + and r1,r1,r3 + eor r1,r1,r4 + mov r5,r1,lsr #4 + add r1,r1,r7 + sub r7,r7,r1 + mov r8,#0 + mov pc,r8 + b . + b . + b . + b . + b . + b . + b . + b . + b . + b . + b . + b . + nop + nop + nop + nop + nop + nop + + .GLOBAL _fw_init_for_dbg +_fw_init_for_dbg: + stmdb sp!,{r0-r12} + + mov r10,lr + mov r11,sp + + bic r0,r0,#31 @ 0x1f + orr r1,r0,#17 @ 0x11 + orr r2,r0,#19 @ 0x13 + msr cpsr_cxsf,r1 + mov r12,#4 + add r12,r12,pc + msr cpsr_cxsf,r2 + swi 0x1ff + +@ bl asm_user_entry_path + + mov r0,r11 + mov r1,r10 + add r0,r0,#52 + ldr r2,[r0] + mov lr,r1 + stmdb sp!,{r2} + stmdb sp!,{r0-r12,lr} + +@ Copy RW Base - ZI Base + ldr r0,=_roe @ |Image$$RO$$Limit| + ldr r3,=_zis @ |Image$$ZI$$Base| + ldr r2,=_rws @ |Image$$RW$$Base| + sub r3,r3,r2 +CopyRWData: + cmp r3,#36 + blt CopyRWData2 + ldmia r0!,{r4-r12} + stmia r2!,{r4-r12} + sub r3,r3,#36 + b CopyRWData +CopyRWData2: + cmp r3,#0 + ble CopyRWData3 + ldr r4,[r0],#4 + str r4,[r2],#4 + sub r3,r3,#4 + b CopyRWData2 +CopyRWData3: + +@ Clear ZI section + ldr r1,=_zie @ |Image$$ZI$$Limit| + ldr r0,=_zis @ |Image$$ZI$$Base| + mov r2,#0 + mov r3,r2 + mov r4,r2 + mov r5,r2 + mov r6,r2 + mov r7,r2 + mov r8,r2 + mov r9,r2 + mov r10,r2 + mov r11,r2 + mov r12,r2 +CopyZIData: + stmia r0!,{r2-r12} + cmp r0,r1 + blt CopyZIData + + ldmia sp!,{r0-r12,pc} + +.endif + + .ALIGN + .POOL + + + .END + diff --git a/dkarm-eabi/patches/binutils-2.16.1.patch b/dkarm-eabi/patches/binutils-2.16.1.patch new file mode 100644 index 0000000..1487dd6 --- /dev/null +++ b/dkarm-eabi/patches/binutils-2.16.1.patch @@ -0,0 +1,16 @@ +diff -Nbaur --exclude=*.info* binutils-2.16.1/bfd/doc/chew.c binutils-2.16.1-arm/bfd/doc/chew.c +--- binutils-2.16.1/bfd/doc/chew.c Thu Mar 3 11:41:02 2005 ++++ binutils-2.16.1-arm/bfd/doc/chew.c Mon Sep 19 03:38:45 2005 +@@ -91,6 +91,12 @@ + #define DEF_SIZE 5000 + #define STACK 50 + ++#ifdef __MINGW32__ ++/* Prevent \r\n\ line endings */ ++#include ++unsigned int _CRT_fmode = _O_BINARY; ++#endif ++ + int internal_wanted; + int internal_mode; + diff --git a/dkarm-eabi/patches/binutils-2.16.93.patch b/dkarm-eabi/patches/binutils-2.16.93.patch new file mode 100644 index 0000000..1487dd6 --- /dev/null +++ b/dkarm-eabi/patches/binutils-2.16.93.patch @@ -0,0 +1,16 @@ +diff -Nbaur --exclude=*.info* binutils-2.16.1/bfd/doc/chew.c binutils-2.16.1-arm/bfd/doc/chew.c +--- binutils-2.16.1/bfd/doc/chew.c Thu Mar 3 11:41:02 2005 ++++ binutils-2.16.1-arm/bfd/doc/chew.c Mon Sep 19 03:38:45 2005 +@@ -91,6 +91,12 @@ + #define DEF_SIZE 5000 + #define STACK 50 + ++#ifdef __MINGW32__ ++/* Prevent \r\n\ line endings */ ++#include ++unsigned int _CRT_fmode = _O_BINARY; ++#endif ++ + int internal_wanted; + int internal_mode; + diff --git a/dkarm-eabi/patches/gcc-4.0.1.patch b/dkarm-eabi/patches/gcc-4.0.1.patch new file mode 100644 index 0000000..0e1cbe1 --- /dev/null +++ b/dkarm-eabi/patches/gcc-4.0.1.patch @@ -0,0 +1,64 @@ +diff -Naurb gcc-4.0.1/gcc/c-incpath.c gcc-4.0.1-new/gcc/c-incpath.c +--- gcc-4.0.1/gcc/c-incpath.c Sun Jan 23 15:05:27 2005 ++++ gcc-4.0.1-new/gcc/c-incpath.c Fri Jul 8 11:32:20 2005 +@@ -331,13 +331,18 @@ + cpp_dir *p; + + #if defined (HAVE_DOS_BASED_FILE_SYSTEM) +- /* Convert all backslashes to slashes. The native CRT stat() +- function does not recognize a directory that ends in a backslash +- (unless it is a drive root dir, such "c:\"). Forward slashes, +- trailing or otherwise, cause no problems for stat(). */ +- char* c; +- for (c = path; *c; c++) +- if (*c == '\\') *c = '/'; ++ /* Remove unnecessary trailing slashes. On some versions of MS ++ Windows, trailing _forward_ slashes cause no problems for stat(). ++ On newer versions, stat() does not recognise a directory that ends ++ in a '\\' or '/', unless it is a drive root dir, such as "c:/", ++ where it is obligatory. */ ++ int pathlen = strlen (path); ++ char* end = path + pathlen - 1; ++ /* Preserve the lead '/' or lead "c:/". */ ++ char* start = path + (pathlen > 2 && path[1] == ':' ? 3 : 1); ++ ++ for (; end > start && IS_DIR_SEPARATOR (*end); end--) ++ *end = 0; + #endif + + p = xmalloc (sizeof (cpp_dir)); +diff -Naurb gcc-4.0.1/gcc/version.c gcc-4.0.1-arm/gcc/version.c +--- gcc-4.0.1/gcc/version.c Thu Jul 7 19:41:54 2005 ++++ gcc-4.0.1-arm/gcc/version.c Tue Jul 26 22:31:02 2005 +@@ -14,4 +14,4 @@ + forward us bugs reported to you, if you determine that they are + not bugs in your modifications.) */ + +-const char bug_report_url[] = ""; ++const char bug_report_url[] = ""; +diff -Naurb gcc-4.0.1/gcc/config/arm/t-arm-elf gcc-4.0.1-new/gcc/config/arm/t-arm-elf +--- gcc-4.0.1/gcc/config/arm/t-arm-elf Wed Sep 1 12:14:21 2004 ++++ gcc-4.0.1-new/gcc/config/arm/t-arm-elf Wed Jul 20 23:25:14 2005 +@@ -23,8 +23,8 @@ + # MULTILIB_DIRNAMES += fpu soft + # MULTILIB_EXCEPTIONS += *mthumb/*mhard-float* + # +-# MULTILIB_OPTIONS += mno-thumb-interwork/mthumb-interwork +-# MULTILIB_DIRNAMES += normal interwork ++MULTILIB_OPTIONS += mno-thumb-interwork/mthumb-interwork ++MULTILIB_DIRNAMES += normal interwork + # + # MULTILIB_OPTIONS += fno-leading-underscore/fleading-underscore + # MULTILIB_DIRNAMES += elf under +diff -Naurb gcc-4.0.1/gcc/hwint.h gcc-4.0.1-new/gcc/hwint.h +--- gcc-4.0.1/gcc/hwint.h Wed Nov 24 04:31:57 2004 ++++ gcc-4.0.1-new/gcc/hwint.h Thu Jul 21 14:37:06 2005 +@@ -80,7 +80,7 @@ + # define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%lx%08lx" + # endif + #else +-# define HOST_WIDE_INT_PRINT "ll" ++# define HOST_WIDE_INT_PRINT HOST_LONG_LONG_FORMAT + # define HOST_WIDE_INT_PRINT_C "LL" + /* We can assume that 'long long' is at least 64 bits. */ + # define HOST_WIDE_INT_PRINT_DOUBLE_HEX \ diff --git a/dkarm-eabi/patches/gcc-4.0.2.patch b/dkarm-eabi/patches/gcc-4.0.2.patch new file mode 100644 index 0000000..0e1cbe1 --- /dev/null +++ b/dkarm-eabi/patches/gcc-4.0.2.patch @@ -0,0 +1,64 @@ +diff -Naurb gcc-4.0.1/gcc/c-incpath.c gcc-4.0.1-new/gcc/c-incpath.c +--- gcc-4.0.1/gcc/c-incpath.c Sun Jan 23 15:05:27 2005 ++++ gcc-4.0.1-new/gcc/c-incpath.c Fri Jul 8 11:32:20 2005 +@@ -331,13 +331,18 @@ + cpp_dir *p; + + #if defined (HAVE_DOS_BASED_FILE_SYSTEM) +- /* Convert all backslashes to slashes. The native CRT stat() +- function does not recognize a directory that ends in a backslash +- (unless it is a drive root dir, such "c:\"). Forward slashes, +- trailing or otherwise, cause no problems for stat(). */ +- char* c; +- for (c = path; *c; c++) +- if (*c == '\\') *c = '/'; ++ /* Remove unnecessary trailing slashes. On some versions of MS ++ Windows, trailing _forward_ slashes cause no problems for stat(). ++ On newer versions, stat() does not recognise a directory that ends ++ in a '\\' or '/', unless it is a drive root dir, such as "c:/", ++ where it is obligatory. */ ++ int pathlen = strlen (path); ++ char* end = path + pathlen - 1; ++ /* Preserve the lead '/' or lead "c:/". */ ++ char* start = path + (pathlen > 2 && path[1] == ':' ? 3 : 1); ++ ++ for (; end > start && IS_DIR_SEPARATOR (*end); end--) ++ *end = 0; + #endif + + p = xmalloc (sizeof (cpp_dir)); +diff -Naurb gcc-4.0.1/gcc/version.c gcc-4.0.1-arm/gcc/version.c +--- gcc-4.0.1/gcc/version.c Thu Jul 7 19:41:54 2005 ++++ gcc-4.0.1-arm/gcc/version.c Tue Jul 26 22:31:02 2005 +@@ -14,4 +14,4 @@ + forward us bugs reported to you, if you determine that they are + not bugs in your modifications.) */ + +-const char bug_report_url[] = ""; ++const char bug_report_url[] = ""; +diff -Naurb gcc-4.0.1/gcc/config/arm/t-arm-elf gcc-4.0.1-new/gcc/config/arm/t-arm-elf +--- gcc-4.0.1/gcc/config/arm/t-arm-elf Wed Sep 1 12:14:21 2004 ++++ gcc-4.0.1-new/gcc/config/arm/t-arm-elf Wed Jul 20 23:25:14 2005 +@@ -23,8 +23,8 @@ + # MULTILIB_DIRNAMES += fpu soft + # MULTILIB_EXCEPTIONS += *mthumb/*mhard-float* + # +-# MULTILIB_OPTIONS += mno-thumb-interwork/mthumb-interwork +-# MULTILIB_DIRNAMES += normal interwork ++MULTILIB_OPTIONS += mno-thumb-interwork/mthumb-interwork ++MULTILIB_DIRNAMES += normal interwork + # + # MULTILIB_OPTIONS += fno-leading-underscore/fleading-underscore + # MULTILIB_DIRNAMES += elf under +diff -Naurb gcc-4.0.1/gcc/hwint.h gcc-4.0.1-new/gcc/hwint.h +--- gcc-4.0.1/gcc/hwint.h Wed Nov 24 04:31:57 2004 ++++ gcc-4.0.1-new/gcc/hwint.h Thu Jul 21 14:37:06 2005 +@@ -80,7 +80,7 @@ + # define HOST_WIDE_INT_PRINT_DOUBLE_HEX "0x%lx%08lx" + # endif + #else +-# define HOST_WIDE_INT_PRINT "ll" ++# define HOST_WIDE_INT_PRINT HOST_LONG_LONG_FORMAT + # define HOST_WIDE_INT_PRINT_C "LL" + /* We can assume that 'long long' is at least 64 bits. */ + # define HOST_WIDE_INT_PRINT_DOUBLE_HEX \ diff --git a/dkarm-eabi/patches/gcc-4.1.0.patch b/dkarm-eabi/patches/gcc-4.1.0.patch new file mode 100644 index 0000000..91a62d7 --- /dev/null +++ b/dkarm-eabi/patches/gcc-4.1.0.patch @@ -0,0 +1,126 @@ +diff -Naurb gcc-4.1.0/gcc/c-incpath.c gcc-4.1.0-arm/gcc/c-incpath.c +--- gcc-4.1.0/gcc/c-incpath.c Sat Jun 25 03:02:01 2005 ++++ gcc-4.1.0-arm/gcc/c-incpath.c Wed Apr 12 16:00:30 2006 +@@ -331,13 +331,18 @@ + cpp_dir *p; + + #if defined (HAVE_DOS_BASED_FILE_SYSTEM) +- /* Convert all backslashes to slashes. The native CRT stat() +- function does not recognize a directory that ends in a backslash +- (unless it is a drive root dir, such "c:\"). Forward slashes, +- trailing or otherwise, cause no problems for stat(). */ +- char* c; +- for (c = path; *c; c++) +- if (*c == '\\') *c = '/'; ++ /* Remove unnecessary trailing slashes. On some versions of MS ++ Windows, trailing _forward_ slashes cause no problems for stat(). ++ On newer versions, stat() does not recognise a directory that ends ++ in a '\\' or '/', unless it is a drive root dir, such as "c:/", ++ where it is obligatory. */ ++ int pathlen = strlen (path); ++ char* end = path + pathlen - 1; ++ /* Preserve the lead '/' or lead "c:/". */ ++ char* start = path + (pathlen > 2 && path[1] == ':' ? 3 : 1); ++ ++ for (; end > start && IS_DIR_SEPARATOR (*end); end--) ++ *end = 0; + #endif + + p = xmalloc (sizeof (cpp_dir)); +diff -Naurb gcc-4.1.0/gcc/gcc.c gcc-4.1.0-arm/gcc/gcc.c +--- gcc-4.1.0/gcc/gcc.c Sat Jan 21 18:29:08 2006 ++++ gcc-4.1.0-arm/gcc/gcc.c Fri May 5 10:18:31 2006 +@@ -3250,8 +3250,6 @@ + gcc_libexec_prefix = make_relative_prefix (argv[0], + standard_bindir_prefix, + standard_libexec_prefix); +- if (gcc_exec_prefix) +- putenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix, NULL)); + } + else + gcc_libexec_prefix = make_relative_prefix (gcc_exec_prefix, +@@ -6148,10 +6146,10 @@ + + /* We need to check standard_exec_prefix/just_machine_suffix/specs + for any override of as, ld and libraries. */ +- specs_file = alloca (strlen (standard_exec_prefix) ++ specs_file = alloca (strlen (gcc_exec_prefix) + + strlen (just_machine_suffix) + sizeof ("specs")); + +- strcpy (specs_file, standard_exec_prefix); ++ strcpy (specs_file, gcc_exec_prefix); + strcat (specs_file, just_machine_suffix); + strcat (specs_file, "specs"); + if (access (specs_file, R_OK) == 0) +diff -Naurb gcc-4.1.0/gcc/prefix.c gcc-4.1.0-arm/gcc/prefix.c +--- gcc-4.1.0/gcc/prefix.c Sat Jun 25 03:02:01 2005 ++++ gcc-4.1.0-arm/gcc/prefix.c Fri May 5 10:18:51 2006 +@@ -246,13 +246,16 @@ + The returned string is always malloc-ed, and the caller is + responsible for freeing it. */ + ++ ++static const char *old_prefix = PREFIX; ++ + char * + update_path (const char *path, const char *key) + { + char *result, *p; +- const int len = strlen (std_prefix); ++ const int len = strlen (old_prefix); + +- if (! strncmp (path, std_prefix, len) ++ if (! strncmp (path, old_prefix, len) + && (IS_DIR_SEPARATOR(path[len]) + || path[len] == '\0') + && key != 0) +@@ -354,4 +357,6 @@ + set_std_prefix (const char *prefix, int len) + { + std_prefix = save_string (prefix, len); ++ ++ putenv (concat ("GCC_EXEC_PREFIX=", std_prefix, NULL)); + } +diff -Naurb gcc-4.1.0/gcc/toplev.c gcc-4.1.0-arm/gcc/toplev.c +--- gcc-4.1.0/gcc/toplev.c Sat Feb 4 22:13:20 2006 ++++ gcc-4.1.0-arm/gcc/toplev.c Wed Apr 26 16:49:36 2006 +@@ -82,6 +82,7 @@ + #include "value-prof.h" + #include "alloc-pool.h" + #include "tree-mudflap.h" ++#include "prefix.h" + + #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO) + #include "dwarf2out.h" +@@ -1434,6 +1435,10 @@ + progname = p; + + xmalloc_set_program_name (progname); ++ ++ p = getenv("GCC_EXEC_PREFIX"); ++ set_std_prefix (p, strlen(p)); ++ + + hex_init (); + +diff -Naurb gcc-4.1.0/gcc/version.c gcc-4.1.0-arm/gcc/version.c +--- gcc-4.1.0/gcc/version.c Wed Mar 16 06:04:10 2005 ++++ gcc-4.1.0-arm/gcc/version.c Wed Apr 12 16:00:30 2006 +@@ -8,7 +8,7 @@ + in parentheses. You may also wish to include a number indicating + the revision of your modified compiler. */ + +-#define VERSUFFIX "" ++#define VERSUFFIX " (devkitARM release 19)" + + /* This is the location of the online document giving instructions for + reporting bugs. If you distribute a modified version of GCC, +@@ -17,7 +17,7 @@ + forward us bugs reported to you, if you determine that they are + not bugs in your modifications.) */ + +-const char bug_report_url[] = ""; ++const char bug_report_url[] = ""; + + /* The complete version string, assembled from several pieces. + BASEVER, DATESTAMP, and DEVPHASE are defined by the Makefile. */ diff --git a/dkarm-eabi/patches/gcc-4.1.1.patch b/dkarm-eabi/patches/gcc-4.1.1.patch new file mode 100644 index 0000000..91a62d7 --- /dev/null +++ b/dkarm-eabi/patches/gcc-4.1.1.patch @@ -0,0 +1,126 @@ +diff -Naurb gcc-4.1.0/gcc/c-incpath.c gcc-4.1.0-arm/gcc/c-incpath.c +--- gcc-4.1.0/gcc/c-incpath.c Sat Jun 25 03:02:01 2005 ++++ gcc-4.1.0-arm/gcc/c-incpath.c Wed Apr 12 16:00:30 2006 +@@ -331,13 +331,18 @@ + cpp_dir *p; + + #if defined (HAVE_DOS_BASED_FILE_SYSTEM) +- /* Convert all backslashes to slashes. The native CRT stat() +- function does not recognize a directory that ends in a backslash +- (unless it is a drive root dir, such "c:\"). Forward slashes, +- trailing or otherwise, cause no problems for stat(). */ +- char* c; +- for (c = path; *c; c++) +- if (*c == '\\') *c = '/'; ++ /* Remove unnecessary trailing slashes. On some versions of MS ++ Windows, trailing _forward_ slashes cause no problems for stat(). ++ On newer versions, stat() does not recognise a directory that ends ++ in a '\\' or '/', unless it is a drive root dir, such as "c:/", ++ where it is obligatory. */ ++ int pathlen = strlen (path); ++ char* end = path + pathlen - 1; ++ /* Preserve the lead '/' or lead "c:/". */ ++ char* start = path + (pathlen > 2 && path[1] == ':' ? 3 : 1); ++ ++ for (; end > start && IS_DIR_SEPARATOR (*end); end--) ++ *end = 0; + #endif + + p = xmalloc (sizeof (cpp_dir)); +diff -Naurb gcc-4.1.0/gcc/gcc.c gcc-4.1.0-arm/gcc/gcc.c +--- gcc-4.1.0/gcc/gcc.c Sat Jan 21 18:29:08 2006 ++++ gcc-4.1.0-arm/gcc/gcc.c Fri May 5 10:18:31 2006 +@@ -3250,8 +3250,6 @@ + gcc_libexec_prefix = make_relative_prefix (argv[0], + standard_bindir_prefix, + standard_libexec_prefix); +- if (gcc_exec_prefix) +- putenv (concat ("GCC_EXEC_PREFIX=", gcc_exec_prefix, NULL)); + } + else + gcc_libexec_prefix = make_relative_prefix (gcc_exec_prefix, +@@ -6148,10 +6146,10 @@ + + /* We need to check standard_exec_prefix/just_machine_suffix/specs + for any override of as, ld and libraries. */ +- specs_file = alloca (strlen (standard_exec_prefix) ++ specs_file = alloca (strlen (gcc_exec_prefix) + + strlen (just_machine_suffix) + sizeof ("specs")); + +- strcpy (specs_file, standard_exec_prefix); ++ strcpy (specs_file, gcc_exec_prefix); + strcat (specs_file, just_machine_suffix); + strcat (specs_file, "specs"); + if (access (specs_file, R_OK) == 0) +diff -Naurb gcc-4.1.0/gcc/prefix.c gcc-4.1.0-arm/gcc/prefix.c +--- gcc-4.1.0/gcc/prefix.c Sat Jun 25 03:02:01 2005 ++++ gcc-4.1.0-arm/gcc/prefix.c Fri May 5 10:18:51 2006 +@@ -246,13 +246,16 @@ + The returned string is always malloc-ed, and the caller is + responsible for freeing it. */ + ++ ++static const char *old_prefix = PREFIX; ++ + char * + update_path (const char *path, const char *key) + { + char *result, *p; +- const int len = strlen (std_prefix); ++ const int len = strlen (old_prefix); + +- if (! strncmp (path, std_prefix, len) ++ if (! strncmp (path, old_prefix, len) + && (IS_DIR_SEPARATOR(path[len]) + || path[len] == '\0') + && key != 0) +@@ -354,4 +357,6 @@ + set_std_prefix (const char *prefix, int len) + { + std_prefix = save_string (prefix, len); ++ ++ putenv (concat ("GCC_EXEC_PREFIX=", std_prefix, NULL)); + } +diff -Naurb gcc-4.1.0/gcc/toplev.c gcc-4.1.0-arm/gcc/toplev.c +--- gcc-4.1.0/gcc/toplev.c Sat Feb 4 22:13:20 2006 ++++ gcc-4.1.0-arm/gcc/toplev.c Wed Apr 26 16:49:36 2006 +@@ -82,6 +82,7 @@ + #include "value-prof.h" + #include "alloc-pool.h" + #include "tree-mudflap.h" ++#include "prefix.h" + + #if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO) + #include "dwarf2out.h" +@@ -1434,6 +1435,10 @@ + progname = p; + + xmalloc_set_program_name (progname); ++ ++ p = getenv("GCC_EXEC_PREFIX"); ++ set_std_prefix (p, strlen(p)); ++ + + hex_init (); + +diff -Naurb gcc-4.1.0/gcc/version.c gcc-4.1.0-arm/gcc/version.c +--- gcc-4.1.0/gcc/version.c Wed Mar 16 06:04:10 2005 ++++ gcc-4.1.0-arm/gcc/version.c Wed Apr 12 16:00:30 2006 +@@ -8,7 +8,7 @@ + in parentheses. You may also wish to include a number indicating + the revision of your modified compiler. */ + +-#define VERSUFFIX "" ++#define VERSUFFIX " (devkitARM release 19)" + + /* This is the location of the online document giving instructions for + reporting bugs. If you distribute a modified version of GCC, +@@ -17,7 +17,7 @@ + forward us bugs reported to you, if you determine that they are + not bugs in your modifications.) */ + +-const char bug_report_url[] = ""; ++const char bug_report_url[] = ""; + + /* The complete version string, assembled from several pieces. + BASEVER, DATESTAMP, and DEVPHASE are defined by the Makefile. */ diff --git a/dkarm-eabi/patches/newlib-1.13.0.patch b/dkarm-eabi/patches/newlib-1.13.0.patch new file mode 100644 index 0000000..287cba9 --- /dev/null +++ b/dkarm-eabi/patches/newlib-1.13.0.patch @@ -0,0 +1,3004 @@ +diff -Nbaur newlib-1.13.0/libgloss/configure newlib-1.13.0-new/libgloss/configure +--- newlib-1.13.0/libgloss/configure Thu Oct 28 09:18:18 2004 ++++ newlib-1.13.0-new/libgloss/configure Tue Aug 30 23:19:31 2005 +@@ -711,9 +711,9 @@ + + + if test -z "${with_multisubdir}" ; then +- configdirs="doc libnosys" ++ configdirs="doc libnosys libsysbase" + else +- configdirs="libnosys" ++ configdirs="libnosys libsysbase" + fi + + case "${target}" in +diff -Nbaur newlib-1.13.0/libgloss/configure.in newlib-1.13.0-new/libgloss/configure.in +--- newlib-1.13.0/libgloss/configure.in Thu Oct 28 09:18:18 2004 ++++ newlib-1.13.0-new/libgloss/configure.in Tue Aug 30 23:18:47 2005 +@@ -22,9 +22,9 @@ + AC_CANONICAL_SYSTEM + + if test -z "${with_multisubdir}" ; then +- configdirs="doc libnosys" ++ configdirs="doc libnosys libsysbase" + else +- configdirs="libnosys" ++ configdirs="libnosys libsysbase" + fi + + case "${target}" in +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/Makefile.in newlib-1.13.0-new/libgloss/libsysbase/Makefile.in +--- newlib-1.13.0/libgloss/libsysbase/Makefile.in Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/Makefile.in Wed Aug 31 00:29:28 2005 +@@ -0,0 +1,145 @@ ++# Copyright (c) 1998 Cygnus Support ++# ++# 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. ++ ++DESTDIR = ++VPATH = @srcdir@ ++srcdir = @srcdir@ ++objdir = . ++srcroot = $(srcdir)/../.. ++objroot = $(objdir)/../.. ++ ++prefix = @prefix@ ++exec_prefix = @exec_prefix@ ++ ++host_alias = @host_alias@ ++target_alias = @target_alias@ ++program_transform_name = @program_transform_name@ ++ ++bindir = @bindir@ ++libdir = @libdir@ ++tooldir = $(exec_prefix)/$(target_alias) ++ ++# Multilib support variables. ++# TOP is used instead of MULTI{BUILD,SRC}TOP. ++MULTIDIRS = ++MULTISUBDIR = ++MULTIDO = true ++MULTICLEAN = true ++ ++INSTALL = @INSTALL@ ++INSTALL_PROGRAM = @INSTALL_PROGRAM@ ++INSTALL_DATA = @INSTALL_DATA@ ++ ++SHELL = /bin/sh ++ ++CC = @CC@ ++ ++#AS = @AS@ ++AS = `if [ -f ${objroot}/../gas/as.new ] ; \ ++ then echo ${objroot}/../gas/as.new ; \ ++ else echo as ; fi` ++ ++AR = @AR@ ++ ++#LD = @LD@ ++LD = `if [ -f ${objroot}/../ld/ld.new ] ; \ ++ then echo ${objroot}/../ld/ld.new ; \ ++ else echo ld ; fi` ++ ++RANLIB = @RANLIB@ ++ ++OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ ++ then echo ${objroot}/../binutils/objdump ; \ ++ else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` ++OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ ++ then echo ${objroot}/../binutils/objcopy ; \ ++ else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` ++ ++# object files needed ++OBJS = abort.o iosupport.o close.o environ.o execve.o fork.o fstat.o getpid.o gettod.o \ ++ isatty.o kill.o link.o lseek.o open.o read.o sbrk.o stat.o \ ++ times.o unlink.o wait.o write.o _exit.o malloc_vars.o ++ ++# Object files specific to particular targets. ++EVALOBJS = ${OBJS} ++ ++GCC_LDFLAGS = `if [ -d ${objroot}/../gcc ] ; \ ++ then echo -L${objroot}/../gcc ; fi` ++ ++OUTPUTS = libsysbase.a ++ ++NEWLIB_CFLAGS = `if [ -d ${objroot}/newlib ]; then echo -I${objroot}/newlib/targ-include -I${srcroot}/newlib/libc/include; fi` ++NEWLIB_LDFLAGS = `if [ -d ${objroot}/newlib ]; then echo -B${objroot}/newlib/ -L${objroot}/newlib/; fi` ++ ++INCLUDES = -I. -I$(srcdir)/.. ++# Note that when building the library, ${MULTILIB} is not the way multilib ++# options are passed; they're passed in $(CFLAGS). ++CFLAGS_FOR_TARGET = ${MULTILIB} ${INCLUDES} ${NEWLIB_CFLAGS} ++LDFLAGS_FOR_TARGET = ${MULTILIB} ${NEWLIB_LDFLAGS} ++AR_FLAGS = qc ++ ++.c.o: ++ $(CC) $(CFLAGS_FOR_TARGET) -O2 $(INCLUDES) -c $(CFLAGS) $< ++ ++.C.o: ++ $(CC) $(CFLAGS_FOR_TARGET) -O2 $(INCLUDES) -c $(CFLAGS) $< ++.s.o: ++ $(AS) $(ASFLAGS_FOR_TARGET) $(INCLUDES) $(ASFLAGS) -o $*.o $< ++ ++# ++# GCC knows to run the preprocessor on .S files before it assembles them. ++# ++.S.o: ++ $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $< ++ ++# ++# this is a bogus target that'll produce an assembler from the ++# C source with the right compiler options. this is so we can ++# track down code generation or debug symbol bugs. ++# ++.c.s: ++ $(CC) $(CFLAGS_FOR_TARGET) -S $(INCLUDES) $(CFLAGS) $< ++ ++all: ${OUTPUTS} ++ ++# ++# here's where we build the library for each target ++# ++ ++libsysbase.a: $(EVALOBJS) ++ ${AR} ${ARFLAGS} $@ $(EVALOBJS) ++ ${RANLIB} $@ ++ ++doc: ++ ++clean mostlyclean: ++ rm -f $(OUTPUTS) *.i *~ *.o *-test *.srec *.dis *.map *.x ++ ++distclean maintainer-clean realclean: clean ++ rm -f Makefile config.status $(OUTPUTS) ++ ++.PHONY: install info install-info clean-info ++install: ++ @for outputs in ${OUTPUTS}; do\ ++ mkdir -p $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}; \ ++ $(INSTALL_PROGRAM) $${outputs} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}; \ ++ done ++ ++info: ++install-info: ++clean-info: ++ ++Makefile: Makefile.in config.status @host_makefile_frag_path@ ++ $(SHELL) config.status ++ ++config.status: configure ++ $(SHELL) config.status --recheck +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/_exit.c newlib-1.13.0-new/libgloss/libsysbase/_exit.c +--- newlib-1.13.0/libgloss/libsysbase/_exit.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/_exit.c Fri Jun 25 23:17:04 2004 +@@ -0,0 +1,15 @@ ++/* Stub version of _exit. */ ++ ++#include ++#include "config.h" ++#include <_ansi.h> ++#include <_syslist.h> ++ ++_VOID ++_DEFUN (_exit, (rc), ++ int rc) ++{ ++ /* Default stub just causes a divide by 0 exception. */ ++ int x = rc / INT_MAX; ++ x = 4 / x; ++} +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/abort.c newlib-1.13.0-new/libgloss/libsysbase/abort.c +--- newlib-1.13.0/libgloss/libsysbase/abort.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/abort.c Tue Aug 30 22:01:23 2005 +@@ -0,0 +1,8 @@ ++#include ++#include ++ ++void abort(void) { ++ write (2, "Abort called.\n", sizeof("Abort called.\n")-1); ++ exit (1); ++} ++ +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/acconfig.h newlib-1.13.0-new/libgloss/libsysbase/acconfig.h +--- newlib-1.13.0/libgloss/libsysbase/acconfig.h Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/acconfig.h Sat May 11 21:48:04 2002 +@@ -0,0 +1,26 @@ ++/* Name of package. */ ++#undef PACKAGE ++ ++/* Version of package. */ ++#undef VERSION ++ ++/* Missing syscall names */ ++#undef MISSING_SYSCALL_NAMES ++ ++/* Using ELF format */ ++#undef HAVE_ELF ++ ++/* Using GNU LD */ ++#undef HAVE_GNU_LD ++ ++/* .previous directive allowed */ ++#undef HAVE_ASM_PREVIOUS_DIRECTIVE ++ ++/* .pushsection/.popsection directives allowed */ ++#undef HAVE_ASM_POPSECTION_DIRECTIVE ++ ++/* support for section attributes */ ++#undef HAVE_SECTION_ATTRIBUTES ++ ++/* symbol prefix */ ++#undef __SYMBOL_PREFIX +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/close.c newlib-1.13.0-new/libgloss/libsysbase/close.c +--- newlib-1.13.0/libgloss/libsysbase/close.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/close.c Tue Aug 30 22:33:10 2005 +@@ -0,0 +1,36 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++ ++#include ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++int _DEFUN(_close_r,(ptr,fileDesc), ++ struct _reent *ptr _AND ++ int fileDesc) { ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++int _DEFUN(_close,(fileDesc), ++ int fileDesc) { ++//--------------------------------------------------------------------------------- ++ struct _reent *ptr = _REENT; ++#endif ++ int ret = -1; ++ unsigned int dev = 0; ++ unsigned int fd = -1; ++ ++ if(fileDesc!=-1) { ++ dev = fileDesc; ++ if(fileDesc&0xf000) { ++ dev = _SHIFTR(fileDesc,12,4); ++ fd = fileDesc&0x0fff; ++ } ++ ++ if(devoptab_list[dev]->close_r) ++ ret = devoptab_list[dev]->close_r(ptr,fd); ++ } ++ return ret; ++} +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/config.h.in newlib-1.13.0-new/libgloss/libsysbase/config.h.in +--- newlib-1.13.0/libgloss/libsysbase/config.h.in Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/config.h.in Sat May 11 21:48:04 2002 +@@ -0,0 +1,22 @@ ++/* config.h.in. Generated automatically from configure.in by autoheader. */ ++ ++/* Missing syscall names */ ++#undef MISSING_SYSCALL_NAMES ++ ++/* Using ELF format */ ++#undef HAVE_ELF ++ ++/* Using GNU LD */ ++#undef HAVE_GNU_LD ++ ++/* .previous directive allowed */ ++#undef HAVE_ASM_PREVIOUS_DIRECTIVE ++ ++/* .pushsection/.popsection directives allowed */ ++#undef HAVE_ASM_POPSECTION_DIRECTIVE ++ ++/* support for section attributes */ ++#undef HAVE_SECTION_ATTRIBUTES ++ ++/* symbol prefix */ ++#undef __SYMBOL_PREFIX +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/configure newlib-1.13.0-new/libgloss/libsysbase/configure +--- newlib-1.13.0/libgloss/libsysbase/configure Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/configure Fri Oct 25 20:05:34 2002 +@@ -0,0 +1,1461 @@ ++#! /bin/sh ++ ++# Guess values for system-dependent variables and create Makefiles. ++# Generated automatically using autoconf version 2.13 ++# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. ++# ++# This configure script is free software; the Free Software Foundation ++# gives unlimited permission to copy, distribute and modify it. ++ ++# Defaults: ++ac_help= ++ac_default_prefix=/usr/local ++# Any additions from configure.in: ++ ++# Initialize some variables set by options. ++# The variables have the same names as the options, with ++# dashes changed to underlines. ++build=NONE ++cache_file=./config.cache ++exec_prefix=NONE ++host=NONE ++no_create= ++nonopt=NONE ++no_recursion= ++prefix=NONE ++program_prefix=NONE ++program_suffix=NONE ++program_transform_name=s,x,x, ++silent= ++site= ++srcdir= ++target=NONE ++verbose= ++x_includes=NONE ++x_libraries=NONE ++bindir='${exec_prefix}/bin' ++sbindir='${exec_prefix}/sbin' ++libexecdir='${exec_prefix}/libexec' ++datadir='${prefix}/share' ++sysconfdir='${prefix}/etc' ++sharedstatedir='${prefix}/com' ++localstatedir='${prefix}/var' ++libdir='${exec_prefix}/lib' ++includedir='${prefix}/include' ++oldincludedir='/usr/include' ++infodir='${prefix}/info' ++mandir='${prefix}/man' ++ ++# Initialize some other variables. ++subdirs= ++MFLAGS= MAKEFLAGS= ++SHELL=${CONFIG_SHELL-/bin/sh} ++# Maximum number of lines to put in a shell here document. ++ac_max_here_lines=12 ++ ++ac_prev= ++for ac_option ++do ++ ++ # If the previous option needs an argument, assign it. ++ if test -n "$ac_prev"; then ++ eval "$ac_prev=\$ac_option" ++ ac_prev= ++ continue ++ fi ++ ++ case "$ac_option" in ++ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; ++ *) ac_optarg= ;; ++ esac ++ ++ # Accept the important Cygnus configure options, so we can diagnose typos. ++ ++ case "$ac_option" in ++ ++ -bindir | --bindir | --bindi | --bind | --bin | --bi) ++ ac_prev=bindir ;; ++ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) ++ bindir="$ac_optarg" ;; ++ ++ -build | --build | --buil | --bui | --bu) ++ ac_prev=build ;; ++ -build=* | --build=* | --buil=* | --bui=* | --bu=*) ++ build="$ac_optarg" ;; ++ ++ -cache-file | --cache-file | --cache-fil | --cache-fi \ ++ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ++ ac_prev=cache_file ;; ++ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ ++ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) ++ cache_file="$ac_optarg" ;; ++ ++ -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ++ ac_prev=datadir ;; ++ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ ++ | --da=*) ++ datadir="$ac_optarg" ;; ++ ++ -disable-* | --disable-*) ++ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` ++ # Reject names that are not valid shell variable names. ++ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then ++ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } ++ fi ++ ac_feature=`echo $ac_feature| sed 's/-/_/g'` ++ eval "enable_${ac_feature}=no" ;; ++ ++ -enable-* | --enable-*) ++ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` ++ # Reject names that are not valid shell variable names. ++ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then ++ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } ++ fi ++ ac_feature=`echo $ac_feature| sed 's/-/_/g'` ++ case "$ac_option" in ++ *=*) ;; ++ *) ac_optarg=yes ;; ++ esac ++ eval "enable_${ac_feature}='$ac_optarg'" ;; ++ ++ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ ++ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ ++ | --exec | --exe | --ex) ++ ac_prev=exec_prefix ;; ++ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ ++ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ ++ | --exec=* | --exe=* | --ex=*) ++ exec_prefix="$ac_optarg" ;; ++ ++ -gas | --gas | --ga | --g) ++ # Obsolete; use --with-gas. ++ with_gas=yes ;; ++ ++ -help | --help | --hel | --he) ++ # Omit some internal or obsolete options to make the list less imposing. ++ # This message is too long to be a string in the A/UX 3.1 sh. ++ cat << EOF ++Usage: configure [options] [host] ++Options: [defaults in brackets after descriptions] ++Configuration: ++ --cache-file=FILE cache test results in FILE ++ --help print this message ++ --no-create do not create output files ++ --quiet, --silent do not print \`checking...' messages ++ --version print the version of autoconf that created configure ++Directory and file names: ++ --prefix=PREFIX install architecture-independent files in PREFIX ++ [$ac_default_prefix] ++ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX ++ [same as prefix] ++ --bindir=DIR user executables in DIR [EPREFIX/bin] ++ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] ++ --libexecdir=DIR program executables in DIR [EPREFIX/libexec] ++ --datadir=DIR read-only architecture-independent data in DIR ++ [PREFIX/share] ++ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] ++ --sharedstatedir=DIR modifiable architecture-independent data in DIR ++ [PREFIX/com] ++ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] ++ --libdir=DIR object code libraries in DIR [EPREFIX/lib] ++ --includedir=DIR C header files in DIR [PREFIX/include] ++ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] ++ --infodir=DIR info documentation in DIR [PREFIX/info] ++ --mandir=DIR man documentation in DIR [PREFIX/man] ++ --srcdir=DIR find the sources in DIR [configure dir or ..] ++ --program-prefix=PREFIX prepend PREFIX to installed program names ++ --program-suffix=SUFFIX append SUFFIX to installed program names ++ --program-transform-name=PROGRAM ++ run sed PROGRAM on installed program names ++EOF ++ cat << EOF ++Host type: ++ --build=BUILD configure for building on BUILD [BUILD=HOST] ++ --host=HOST configure for HOST [guessed] ++ --target=TARGET configure for TARGET [TARGET=HOST] ++Features and packages: ++ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) ++ --enable-FEATURE[=ARG] include FEATURE [ARG=yes] ++ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] ++ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) ++ --x-includes=DIR X include files are in DIR ++ --x-libraries=DIR X library files are in DIR ++EOF ++ if test -n "$ac_help"; then ++ echo "--enable and --with options recognized:$ac_help" ++ fi ++ exit 0 ;; ++ ++ -host | --host | --hos | --ho) ++ ac_prev=host ;; ++ -host=* | --host=* | --hos=* | --ho=*) ++ host="$ac_optarg" ;; ++ ++ -includedir | --includedir | --includedi | --included | --include \ ++ | --includ | --inclu | --incl | --inc) ++ ac_prev=includedir ;; ++ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ ++ | --includ=* | --inclu=* | --incl=* | --inc=*) ++ includedir="$ac_optarg" ;; ++ ++ -infodir | --infodir | --infodi | --infod | --info | --inf) ++ ac_prev=infodir ;; ++ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) ++ infodir="$ac_optarg" ;; ++ ++ -libdir | --libdir | --libdi | --libd) ++ ac_prev=libdir ;; ++ -libdir=* | --libdir=* | --libdi=* | --libd=*) ++ libdir="$ac_optarg" ;; ++ ++ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ ++ | --libexe | --libex | --libe) ++ ac_prev=libexecdir ;; ++ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ ++ | --libexe=* | --libex=* | --libe=*) ++ libexecdir="$ac_optarg" ;; ++ ++ -localstatedir | --localstatedir | --localstatedi | --localstated \ ++ | --localstate | --localstat | --localsta | --localst \ ++ | --locals | --local | --loca | --loc | --lo) ++ ac_prev=localstatedir ;; ++ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ ++ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ ++ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) ++ localstatedir="$ac_optarg" ;; ++ ++ -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ++ ac_prev=mandir ;; ++ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) ++ mandir="$ac_optarg" ;; ++ ++ -nfp | --nfp | --nf) ++ # Obsolete; use --without-fp. ++ with_fp=no ;; ++ ++ -no-create | --no-create | --no-creat | --no-crea | --no-cre \ ++ | --no-cr | --no-c) ++ no_create=yes ;; ++ ++ -no-recursion | --no-recursion | --no-recursio | --no-recursi \ ++ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ++ no_recursion=yes ;; ++ ++ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ ++ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ ++ | --oldin | --oldi | --old | --ol | --o) ++ ac_prev=oldincludedir ;; ++ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ ++ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ ++ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) ++ oldincludedir="$ac_optarg" ;; ++ ++ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ++ ac_prev=prefix ;; ++ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) ++ prefix="$ac_optarg" ;; ++ ++ -program-prefix | --program-prefix | --program-prefi | --program-pref \ ++ | --program-pre | --program-pr | --program-p) ++ ac_prev=program_prefix ;; ++ -program-prefix=* | --program-prefix=* | --program-prefi=* \ ++ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) ++ program_prefix="$ac_optarg" ;; ++ ++ -program-suffix | --program-suffix | --program-suffi | --program-suff \ ++ | --program-suf | --program-su | --program-s) ++ ac_prev=program_suffix ;; ++ -program-suffix=* | --program-suffix=* | --program-suffi=* \ ++ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) ++ program_suffix="$ac_optarg" ;; ++ ++ -program-transform-name | --program-transform-name \ ++ | --program-transform-nam | --program-transform-na \ ++ | --program-transform-n | --program-transform- \ ++ | --program-transform | --program-transfor \ ++ | --program-transfo | --program-transf \ ++ | --program-trans | --program-tran \ ++ | --progr-tra | --program-tr | --program-t) ++ ac_prev=program_transform_name ;; ++ -program-transform-name=* | --program-transform-name=* \ ++ | --program-transform-nam=* | --program-transform-na=* \ ++ | --program-transform-n=* | --program-transform-=* \ ++ | --program-transform=* | --program-transfor=* \ ++ | --program-transfo=* | --program-transf=* \ ++ | --program-trans=* | --program-tran=* \ ++ | --progr-tra=* | --program-tr=* | --program-t=*) ++ program_transform_name="$ac_optarg" ;; ++ ++ -q | -quiet | --quiet | --quie | --qui | --qu | --q \ ++ | -silent | --silent | --silen | --sile | --sil) ++ silent=yes ;; ++ ++ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ++ ac_prev=sbindir ;; ++ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ ++ | --sbi=* | --sb=*) ++ sbindir="$ac_optarg" ;; ++ ++ -sharedstatedir | --sharedstatedir | --sharedstatedi \ ++ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ ++ | --sharedst | --shareds | --shared | --share | --shar \ ++ | --sha | --sh) ++ ac_prev=sharedstatedir ;; ++ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ ++ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ ++ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ ++ | --sha=* | --sh=*) ++ sharedstatedir="$ac_optarg" ;; ++ ++ -site | --site | --sit) ++ ac_prev=site ;; ++ -site=* | --site=* | --sit=*) ++ site="$ac_optarg" ;; ++ ++ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ++ ac_prev=srcdir ;; ++ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ++ srcdir="$ac_optarg" ;; ++ ++ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ ++ | --syscon | --sysco | --sysc | --sys | --sy) ++ ac_prev=sysconfdir ;; ++ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ ++ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) ++ sysconfdir="$ac_optarg" ;; ++ ++ -target | --target | --targe | --targ | --tar | --ta | --t) ++ ac_prev=target ;; ++ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) ++ target="$ac_optarg" ;; ++ ++ -v | -verbose | --verbose | --verbos | --verbo | --verb) ++ verbose=yes ;; ++ ++ -version | --version | --versio | --versi | --vers) ++ echo "configure generated by autoconf version 2.13" ++ exit 0 ;; ++ ++ -with-* | --with-*) ++ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` ++ # Reject names that are not valid shell variable names. ++ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then ++ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } ++ fi ++ ac_package=`echo $ac_package| sed 's/-/_/g'` ++ case "$ac_option" in ++ *=*) ;; ++ *) ac_optarg=yes ;; ++ esac ++ eval "with_${ac_package}='$ac_optarg'" ;; ++ ++ -without-* | --without-*) ++ ac_package=`echo $ac_option|sed -e 's/-*without-//'` ++ # Reject names that are not valid shell variable names. ++ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then ++ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } ++ fi ++ ac_package=`echo $ac_package| sed 's/-/_/g'` ++ eval "with_${ac_package}=no" ;; ++ ++ --x) ++ # Obsolete; use --with-x. ++ with_x=yes ;; ++ ++ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ ++ | --x-incl | --x-inc | --x-in | --x-i) ++ ac_prev=x_includes ;; ++ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ ++ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) ++ x_includes="$ac_optarg" ;; ++ ++ -x-libraries | --x-libraries | --x-librarie | --x-librari \ ++ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ++ ac_prev=x_libraries ;; ++ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ ++ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) ++ x_libraries="$ac_optarg" ;; ++ ++ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } ++ ;; ++ ++ *) ++ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then ++ echo "configure: warning: $ac_option: invalid host type" 1>&2 ++ fi ++ if test "x$nonopt" != xNONE; then ++ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ++ fi ++ nonopt="$ac_option" ++ ;; ++ ++ esac ++done ++ ++if test -n "$ac_prev"; then ++ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } ++fi ++ ++trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 ++ ++# File descriptor usage: ++# 0 standard input ++# 1 file creation ++# 2 errors and warnings ++# 3 some systems may open it to /dev/tty ++# 4 used on the Kubota Titan ++# 6 checking for... messages and results ++# 5 compiler messages saved in config.log ++if test "$silent" = yes; then ++ exec 6>/dev/null ++else ++ exec 6>&1 ++fi ++exec 5>./config.log ++ ++echo "\ ++This file contains any messages produced by compilers while ++running configure, to aid debugging if configure makes a mistake. ++" 1>&5 ++ ++# Strip out --no-create and --no-recursion so they do not pile up. ++# Also quote any args containing shell metacharacters. ++ac_configure_args= ++for ac_arg ++do ++ case "$ac_arg" in ++ -no-create | --no-create | --no-creat | --no-crea | --no-cre \ ++ | --no-cr | --no-c) ;; ++ -no-recursion | --no-recursion | --no-recursio | --no-recursi \ ++ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; ++ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ++ ac_configure_args="$ac_configure_args '$ac_arg'" ;; ++ *) ac_configure_args="$ac_configure_args $ac_arg" ;; ++ esac ++done ++ ++# NLS nuisances. ++# Only set these to C if already set. These must not be set unconditionally ++# because not all systems understand e.g. LANG=C (notably SCO). ++# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! ++# Non-C LC_CTYPE values break the ctype check. ++if test "${LANG+set}" = set; then LANG=C; export LANG; fi ++if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi ++if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi ++if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi ++ ++# confdefs.h avoids OS command line length limits that DEFS can exceed. ++rm -rf conftest* confdefs.h ++# AIX cpp loses on an empty file, so make sure it contains at least a newline. ++echo > confdefs.h ++ ++# A filename unique to this package, relative to the directory that ++# configure is in, which we can look for to find out if srcdir is correct. ++ac_unique_file=close.c ++ ++# Find the source files, if location was not specified. ++if test -z "$srcdir"; then ++ ac_srcdir_defaulted=yes ++ # Try the directory containing this script, then its parent. ++ ac_prog=$0 ++ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` ++ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. ++ srcdir=$ac_confdir ++ if test ! -r $srcdir/$ac_unique_file; then ++ srcdir=.. ++ fi ++else ++ ac_srcdir_defaulted=no ++fi ++if test ! -r $srcdir/$ac_unique_file; then ++ if test "$ac_srcdir_defaulted" = yes; then ++ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } ++ else ++ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } ++ fi ++fi ++srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` ++ ++# Prefer explicitly selected file to automatically selected ones. ++if test -z "$CONFIG_SITE"; then ++ if test "x$prefix" != xNONE; then ++ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" ++ else ++ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" ++ fi ++fi ++for ac_site_file in $CONFIG_SITE; do ++ if test -r "$ac_site_file"; then ++ echo "loading site script $ac_site_file" ++ . "$ac_site_file" ++ fi ++done ++ ++if test -r "$cache_file"; then ++ echo "loading cache $cache_file" ++ . $cache_file ++else ++ echo "creating cache $cache_file" ++ > $cache_file ++fi ++ ++ac_ext=c ++# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ++ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' ++cross_compiling=$ac_cv_prog_cc_cross ++ ++ac_exeext= ++ac_objext=o ++if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then ++ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. ++ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ++ ac_n= ac_c=' ++' ac_t=' ' ++ else ++ ac_n=-n ac_c= ac_t= ++ fi ++else ++ ac_n= ac_c='\c' ac_t= ++fi ++ ++ ++ ++ ++if test "${enable_shared}" = "yes" ; then ++ echo "Shared libraries not supported for cross compiling, ignored" ++fi ++ ++if test "$srcdir" = "." ; then ++ if test "${with_target_subdir}" != "." ; then ++ libgloss_topdir="${srcdir}/${with_multisrctop}../../.." ++ else ++ libgloss_topdir="${srcdir}/${with_multisrctop}../.." ++ fi ++else ++ libgloss_topdir="${srcdir}/../.." ++fi ++ac_aux_dir= ++for ac_dir in $libgloss_topdir $srcdir/$libgloss_topdir; do ++ if test -f $ac_dir/install-sh; then ++ ac_aux_dir=$ac_dir ++ ac_install_sh="$ac_aux_dir/install-sh -c" ++ break ++ elif test -f $ac_dir/install.sh; then ++ ac_aux_dir=$ac_dir ++ ac_install_sh="$ac_aux_dir/install.sh -c" ++ break ++ fi ++done ++if test -z "$ac_aux_dir"; then ++ { echo "configure: error: can not find install-sh or install.sh in $libgloss_topdir $srcdir/$libgloss_topdir" 1>&2; exit 1; } ++fi ++ac_config_guess=$ac_aux_dir/config.guess ++ac_config_sub=$ac_aux_dir/config.sub ++ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. ++ ++ ++ ++# Do some error checking and defaulting for the host and target type. ++# The inputs are: ++# configure --host=HOST --target=TARGET --build=BUILD NONOPT ++# ++# The rules are: ++# 1. You are not allowed to specify --host, --target, and nonopt at the ++# same time. ++# 2. Host defaults to nonopt. ++# 3. If nonopt is not specified, then host defaults to the current host, ++# as determined by config.guess. ++# 4. Target and build default to nonopt. ++# 5. If nonopt is not specified, then target and build default to host. ++ ++# The aliases save the names the user supplied, while $host etc. ++# will get canonicalized. ++case $host---$target---$nonopt in ++NONE---*---* | *---NONE---* | *---*---NONE) ;; ++*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;; ++esac ++ ++ ++# Make sure we can run config.sub. ++if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : ++else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } ++fi ++ ++echo $ac_n "checking host system type""... $ac_c" 1>&6 ++echo "configure:588: checking host system type" >&5 ++ ++host_alias=$host ++case "$host_alias" in ++NONE) ++ case $nonopt in ++ NONE) ++ if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : ++ else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } ++ fi ;; ++ *) host_alias=$nonopt ;; ++ esac ;; ++esac ++ ++host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` ++host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` ++host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` ++host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++echo "$ac_t""$host" 1>&6 ++ ++echo $ac_n "checking target system type""... $ac_c" 1>&6 ++echo "configure:609: checking target system type" >&5 ++ ++target_alias=$target ++case "$target_alias" in ++NONE) ++ case $nonopt in ++ NONE) target_alias=$host_alias ;; ++ *) target_alias=$nonopt ;; ++ esac ;; ++esac ++ ++target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias` ++target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` ++target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` ++target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++echo "$ac_t""$target" 1>&6 ++ ++echo $ac_n "checking build system type""... $ac_c" 1>&6 ++echo "configure:627: checking build system type" >&5 ++ ++build_alias=$build ++case "$build_alias" in ++NONE) ++ case $nonopt in ++ NONE) build_alias=$host_alias ;; ++ *) build_alias=$nonopt ;; ++ esac ;; ++esac ++ ++build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` ++build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` ++build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` ++build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++echo "$ac_t""$build" 1>&6 ++ ++test "$host_alias" != "$target_alias" && ++ test "$program_prefix$program_suffix$program_transform_name" = \ ++ NONENONEs,x,x, && ++ program_prefix=${target_alias}- ++ ++if test "$program_transform_name" = s,x,x,; then ++ program_transform_name= ++else ++ # Double any \ or $. echo might interpret backslashes. ++ cat <<\EOF_SED > conftestsed ++s,\\,\\\\,g; s,\$,$$,g ++EOF_SED ++ program_transform_name="`echo $program_transform_name|sed -f conftestsed`" ++ rm -f conftestsed ++fi ++test "$program_prefix" != NONE && ++ program_transform_name="s,^,${program_prefix},; $program_transform_name" ++# Use a double $ so make ignores it. ++test "$program_suffix" != NONE && ++ program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" ++ ++# sed with no file args requires a program. ++test "$program_transform_name" = "" && program_transform_name="s,x,x," ++ ++ ++# Find a good install program. We prefer a C program (faster), ++# so one script is as good as another. But avoid the broken or ++# incompatible versions: ++# SysV /etc/install, /usr/sbin/install ++# SunOS /usr/etc/install ++# IRIX /sbin/install ++# AIX /bin/install ++# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag ++# AFS /usr/afsws/bin/install, which mishandles nonexistent args ++# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" ++# ./install, which can be erroneously created by make from ./install.sh. ++echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 ++echo "configure:681: checking for a BSD compatible install" >&5 ++if test -z "$INSTALL"; then ++if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" ++ for ac_dir in $PATH; do ++ # Account for people who put trailing slashes in PATH elements. ++ case "$ac_dir/" in ++ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; ++ *) ++ # OSF1 and SCO ODT 3.0 have their own names for install. ++ # Don't use installbsd from OSF since it installs stuff as root ++ # by default. ++ for ac_prog in ginstall scoinst install; do ++ if test -f $ac_dir/$ac_prog; then ++ if test $ac_prog = install && ++ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then ++ # AIX install. It has an incompatible calling convention. ++ : ++ else ++ ac_cv_path_install="$ac_dir/$ac_prog -c" ++ break 2 ++ fi ++ fi ++ done ++ ;; ++ esac ++ done ++ IFS="$ac_save_IFS" ++ ++fi ++ if test "${ac_cv_path_install+set}" = set; then ++ INSTALL="$ac_cv_path_install" ++ else ++ # As a last resort, use the slow shell script. We don't cache a ++ # path for INSTALL within a source directory, because that will ++ # break other packages using the cache if that directory is ++ # removed, or if the path is relative. ++ INSTALL="$ac_install_sh" ++ fi ++fi ++echo "$ac_t""$INSTALL" 1>&6 ++ ++# Use test -z because SunOS4 sh mishandles braces in ${var-val}. ++# It thinks the first close brace ends the variable substitution. ++test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' ++ ++test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' ++ ++test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' ++ ++ ++# FIXME: We temporarily define our own version of AC_PROG_CC. This is ++# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We ++# are building a library that must be included in all links, so we ++# can't link an executable until this lib is built. ++# autoconf should provide a way to do this. ++ ++ ++ ++cat >> confdefs.h <<\EOF ++#define HAVE_GNU_LD 1 ++EOF ++ ++case "${target}" in ++ *-*-cygwin*) ++ ;; ++ a29k-amd-udi) ++ ;; ++ arc-*-*) ++ ;; ++ arm-*-pe) ++ ;; ++ arm-*-*) ++ ;; ++ strongarm-*-*) ++ ;; ++ d10v*) ++ ;; ++ h8300*-*-*) ++ ;; ++ h8500-*-*) ++ ;; ++ i345686-*-sco*) ++ ;; ++ m32r-*-*) ++ ;; ++ mn10?00-*-*) ++ ;; ++ powerpcle-*-pe) ++ ;; ++ sh*-*-*) ++ ;; ++ sparc-sun-sunos*) ++ ;; ++ sparc64-*-*) ++ ;; ++ thumb-*-pe) ++ ;; ++ thumb-*-*) ++ ;; ++ v850-*-*) ++ ;; ++ v850e-*-*) ++ ;; ++ v850ea-*-*) ++ ;; ++ w65-*-*) ++ ;; ++ xstormy16-*-*) ++ ;; ++ z8k-*-*) ++ ;; ++ *) ++ cat >> confdefs.h <<\EOF ++#define MISSING_SYSCALL_NAMES 1 ++EOF ++ ++ ;; ++esac ++ ++case "${target}" in ++ *-*-elf) ++ cat >> confdefs.h <<\EOF ++#define HAVE_ELF 1 ++EOF ++ ++ ++ echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6 ++echo "configure:811: checking for .previous assembler directive" >&5 ++if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ cat > conftest.s <&5; (eval $ac_try) 2>&5; }; }; then ++ cat >> confdefs.h <<\EOF ++#define HAVE_ASM_PREVIOUS_DIRECTIVE 1 ++EOF ++ ++ fi ++ rm -f conftest* ++fi ++ ++echo "$ac_t""$libc_cv_asm_previous_directive" 1>&6 ++ ++ echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6 ++echo "configure:831: checking for .popsection assembler directive" >&5 ++if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ cat > conftest.s <&5; (eval $ac_try) 2>&5; }; }; then ++ cat >> confdefs.h <<\EOF ++#define HAVE_ASM_POPSECTION_DIRECTIVE 1 ++EOF ++ ++ fi ++ rm -f conftest* ++fi ++ ++echo "$ac_t""$libc_cv_asm_popsection_directive" 1>&6 ++ ++ echo $ac_n "checking for section attributes""... $ac_c" 1>&6 ++echo "configure:851: checking for section attributes" >&5 ++if eval "test \"`echo '$''{'libc_cv_section_attributes'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ cat > conftest.c <&5; (eval $ac_try) 2>&5; }; }; then ++ cat >> confdefs.h <<\EOF ++#define HAVE_SECTION_ATTRIBUTES 1 ++EOF ++ ++ fi ++ rm -f conftest* ++fi ++ ++echo "$ac_t""$libc_cv_section_attributes" 1>&6 ++ ;; ++esac ++ ++echo $ac_n "checking for function prefix""... $ac_c" 1>&6 ++echo "configure:873: checking for function prefix" >&5 ++if eval "test \"`echo '$''{'libc_dollar_prefix'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ cat > conftest.c <<\EOF ++foo () { } ++EOF ++if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo" > /dev/null'; { (eval echo configure:880: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; ++then ++ libc_dollar_prefix=yes ++else ++ libc_dollar_prefix=no ++fi ++rm -f conftest* ++fi ++ ++echo "$ac_t""$libc_dollar_prefix" 1>&6 ++if test $libc_dollar_prefix = yes ; then ++ cat >> confdefs.h <<\EOF ++#define __SYMBOL_PREFIX "$" ++EOF ++ ++else ++ cat >> confdefs.h <<\EOF ++#define __SYMBOL_PREFIX "" ++EOF ++ ++fi ++ ++# Extract the first word of "gcc", so it can be a program name with args. ++set dummy gcc; ac_word=$2 ++echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ++echo "configure:905: checking for $ac_word" >&5 ++if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ if test -n "$CC"; then ++ ac_cv_prog_CC="$CC" # Let the user override the test. ++else ++ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ++ ac_dummy="$PATH" ++ for ac_dir in $ac_dummy; do ++ test -z "$ac_dir" && ac_dir=. ++ if test -f $ac_dir/$ac_word; then ++ ac_cv_prog_CC="gcc" ++ break ++ fi ++ done ++ IFS="$ac_save_ifs" ++fi ++fi ++CC="$ac_cv_prog_CC" ++if test -n "$CC"; then ++ echo "$ac_t""$CC" 1>&6 ++else ++ echo "$ac_t""no" 1>&6 ++fi ++ ++if test -z "$CC"; then ++ # Extract the first word of "cc", so it can be a program name with args. ++set dummy cc; ac_word=$2 ++echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ++echo "configure:935: checking for $ac_word" >&5 ++if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ if test -n "$CC"; then ++ ac_cv_prog_CC="$CC" # Let the user override the test. ++else ++ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ++ ac_prog_rejected=no ++ ac_dummy="$PATH" ++ for ac_dir in $ac_dummy; do ++ test -z "$ac_dir" && ac_dir=. ++ if test -f $ac_dir/$ac_word; then ++ if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ++ ac_prog_rejected=yes ++ continue ++ fi ++ ac_cv_prog_CC="cc" ++ break ++ fi ++ done ++ IFS="$ac_save_ifs" ++if test $ac_prog_rejected = yes; then ++ # We found a bogon in the path, so make sure we never use it. ++ set dummy $ac_cv_prog_CC ++ shift ++ if test $# -gt 0; then ++ # We chose a different compiler from the bogus one. ++ # However, it has the same basename, so the bogon will be chosen ++ # first if we set CC to just the basename; use the full file name. ++ shift ++ set dummy "$ac_dir/$ac_word" "$@" ++ shift ++ ac_cv_prog_CC="$@" ++ fi ++fi ++fi ++fi ++CC="$ac_cv_prog_CC" ++if test -n "$CC"; then ++ echo "$ac_t""$CC" 1>&6 ++else ++ echo "$ac_t""no" 1>&6 ++fi ++ ++ test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } ++fi ++ ++echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 ++echo "configure:984: checking whether we are using GNU C" >&5 ++if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ++ ac_cv_prog_gcc=yes ++else ++ ac_cv_prog_gcc=no ++fi ++fi ++ ++echo "$ac_t""$ac_cv_prog_gcc" 1>&6 ++ ++if test $ac_cv_prog_gcc = yes; then ++ GCC=yes ++ ac_test_CFLAGS="${CFLAGS+set}" ++ ac_save_CFLAGS="$CFLAGS" ++ CFLAGS= ++ echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ++echo "configure:1008: checking whether ${CC-cc} accepts -g" >&5 ++if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ echo 'void f(){}' > conftest.c ++if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then ++ ac_cv_prog_cc_g=yes ++else ++ ac_cv_prog_cc_g=no ++fi ++rm -f conftest* ++ ++fi ++ ++echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 ++ if test "$ac_test_CFLAGS" = set; then ++ CFLAGS="$ac_save_CFLAGS" ++ elif test $ac_cv_prog_cc_g = yes; then ++ CFLAGS="-g -O2" ++ else ++ CFLAGS="-O2" ++ fi ++else ++ GCC= ++ test "${CFLAGS+set}" = set || CFLAGS="-g" ++fi ++ ++AS=${AS-as} ++ ++AR=${AR-ar} ++ ++LD=${LD-ld} ++ ++# Extract the first word of "ranlib", so it can be a program name with args. ++set dummy ranlib; ac_word=$2 ++echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ++echo "configure:1044: checking for $ac_word" >&5 ++if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ if test -n "$RANLIB"; then ++ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. ++else ++ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ++ ac_dummy="$PATH" ++ for ac_dir in $ac_dummy; do ++ test -z "$ac_dir" && ac_dir=. ++ if test -f $ac_dir/$ac_word; then ++ ac_cv_prog_RANLIB="ranlib" ++ break ++ fi ++ done ++ IFS="$ac_save_ifs" ++ test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" ++fi ++fi ++RANLIB="$ac_cv_prog_RANLIB" ++if test -n "$RANLIB"; then ++ echo "$ac_t""$RANLIB" 1>&6 ++else ++ echo "$ac_t""no" 1>&6 ++fi ++ ++ ++host_makefile_frag=${srcdir}/../config/default.mh ++ ++host_makefile_frag_path=$host_makefile_frag ++ ++ ++ ++trap '' 1 2 15 ++cat > confcache <<\EOF ++# This file is a shell script that caches the results of configure ++# tests run on this system so they can be shared between configure ++# scripts and configure runs. It is not useful on other systems. ++# If it contains results you don't want to keep, you may remove or edit it. ++# ++# By default, configure uses ./config.cache as the cache file, ++# creating it if it does not exist already. You can give configure ++# the --cache-file=FILE option to use a different cache file; that is ++# what configure does when it calls configure scripts in ++# subdirectories, so they share the cache. ++# Giving --cache-file=/dev/null disables caching, for debugging configure. ++# config.status only pays attention to the cache file if you give it the ++# --recheck option to rerun configure. ++# ++EOF ++# The following way of writing the cache mishandles newlines in values, ++# but we know of no workaround that is simple, portable, and efficient. ++# So, don't put newlines in cache variables' values. ++# Ultrix sh set writes to stderr and can't be redirected directly, ++# and sets the high bit in the cache file unless we assign to the vars. ++(set) 2>&1 | ++ case `(ac_space=' '; set | grep ac_space) 2>&1` in ++ *ac_space=\ *) ++ # `set' does not quote correctly, so add quotes (double-quote substitution ++ # turns \\\\ into \\, and sed turns \\ into \). ++ sed -n \ ++ -e "s/'/'\\\\''/g" \ ++ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ++ ;; ++ *) ++ # `set' quotes correctly as required by POSIX, so do not add quotes. ++ sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ++ ;; ++ esac >> confcache ++if cmp -s $cache_file confcache; then ++ : ++else ++ if test -w $cache_file; then ++ echo "updating cache $cache_file" ++ cat confcache > $cache_file ++ else ++ echo "not updating unwritable cache $cache_file" ++ fi ++fi ++rm -f confcache ++ ++trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 ++ ++test "x$prefix" = xNONE && prefix=$ac_default_prefix ++# Let make expand exec_prefix. ++test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' ++ ++# Any assignment to VPATH causes Sun make to only execute ++# the first set of double-colon rules, so remove it if not needed. ++# If there is a colon in the path, we need to keep it. ++if test "x$srcdir" = x.; then ++ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' ++fi ++ ++trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 ++ ++DEFS=-DHAVE_CONFIG_H ++ ++# Without the "./", some shells look in PATH for config.status. ++: ${CONFIG_STATUS=./config.status} ++ ++echo creating $CONFIG_STATUS ++rm -f $CONFIG_STATUS ++cat > $CONFIG_STATUS </dev/null | sed 1q`: ++# ++# $0 $ac_configure_args ++# ++# Compiler output produced by configure, useful for debugging ++# configure, is in ./config.log if it exists. ++ ++ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" ++for ac_option ++do ++ case "\$ac_option" in ++ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ++ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" ++ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; ++ -version | --version | --versio | --versi | --vers | --ver | --ve | --v) ++ echo "$CONFIG_STATUS generated by autoconf version 2.13" ++ exit 0 ;; ++ -help | --help | --hel | --he | --h) ++ echo "\$ac_cs_usage"; exit 0 ;; ++ *) echo "\$ac_cs_usage"; exit 1 ;; ++ esac ++done ++ ++ac_given_srcdir=$srcdir ++ac_given_INSTALL="$INSTALL" ++ ++trap 'rm -fr `echo "Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 ++EOF ++cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF ++$ac_vpsub ++$extrasub ++s%@SHELL@%$SHELL%g ++s%@CFLAGS@%$CFLAGS%g ++s%@CPPFLAGS@%$CPPFLAGS%g ++s%@CXXFLAGS@%$CXXFLAGS%g ++s%@FFLAGS@%$FFLAGS%g ++s%@DEFS@%$DEFS%g ++s%@LDFLAGS@%$LDFLAGS%g ++s%@LIBS@%$LIBS%g ++s%@exec_prefix@%$exec_prefix%g ++s%@prefix@%$prefix%g ++s%@program_transform_name@%$program_transform_name%g ++s%@bindir@%$bindir%g ++s%@sbindir@%$sbindir%g ++s%@libexecdir@%$libexecdir%g ++s%@datadir@%$datadir%g ++s%@sysconfdir@%$sysconfdir%g ++s%@sharedstatedir@%$sharedstatedir%g ++s%@localstatedir@%$localstatedir%g ++s%@libdir@%$libdir%g ++s%@includedir@%$includedir%g ++s%@oldincludedir@%$oldincludedir%g ++s%@infodir@%$infodir%g ++s%@mandir@%$mandir%g ++s%@host@%$host%g ++s%@host_alias@%$host_alias%g ++s%@host_cpu@%$host_cpu%g ++s%@host_vendor@%$host_vendor%g ++s%@host_os@%$host_os%g ++s%@target@%$target%g ++s%@target_alias@%$target_alias%g ++s%@target_cpu@%$target_cpu%g ++s%@target_vendor@%$target_vendor%g ++s%@target_os@%$target_os%g ++s%@build@%$build%g ++s%@build_alias@%$build_alias%g ++s%@build_cpu@%$build_cpu%g ++s%@build_vendor@%$build_vendor%g ++s%@build_os@%$build_os%g ++s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g ++s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g ++s%@INSTALL_DATA@%$INSTALL_DATA%g ++s%@CC@%$CC%g ++s%@AS@%$AS%g ++s%@AR@%$AR%g ++s%@LD@%$LD%g ++s%@RANLIB@%$RANLIB%g ++s%@host_makefile_frag_path@%$host_makefile_frag_path%g ++/@host_makefile_frag@/r $host_makefile_frag ++s%@host_makefile_frag@%%g ++ ++CEOF ++EOF ++ ++cat >> $CONFIG_STATUS <<\EOF ++ ++# Split the substitutions into bite-sized pieces for seds with ++# small command number limits, like on Digital OSF/1 and HP-UX. ++ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. ++ac_file=1 # Number of current file. ++ac_beg=1 # First line for current file. ++ac_end=$ac_max_sed_cmds # Line after last line for current file. ++ac_more_lines=: ++ac_sed_cmds="" ++while $ac_more_lines; do ++ if test $ac_beg -gt 1; then ++ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file ++ else ++ sed "${ac_end}q" conftest.subs > conftest.s$ac_file ++ fi ++ if test ! -s conftest.s$ac_file; then ++ ac_more_lines=false ++ rm -f conftest.s$ac_file ++ else ++ if test -z "$ac_sed_cmds"; then ++ ac_sed_cmds="sed -f conftest.s$ac_file" ++ else ++ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" ++ fi ++ ac_file=`expr $ac_file + 1` ++ ac_beg=$ac_end ++ ac_end=`expr $ac_end + $ac_max_sed_cmds` ++ fi ++done ++if test -z "$ac_sed_cmds"; then ++ ac_sed_cmds=cat ++fi ++EOF ++ ++cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF ++for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then ++ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". ++ case "$ac_file" in ++ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ++ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; ++ *) ac_file_in="${ac_file}.in" ;; ++ esac ++ ++ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. ++ ++ # Remove last slash and all that follows it. Not all systems have dirname. ++ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` ++ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then ++ # The file is in a subdirectory. ++ test ! -d "$ac_dir" && mkdir "$ac_dir" ++ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" ++ # A "../" for each directory in $ac_dir_suffix. ++ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` ++ else ++ ac_dir_suffix= ac_dots= ++ fi ++ ++ case "$ac_given_srcdir" in ++ .) srcdir=. ++ if test -z "$ac_dots"; then top_srcdir=. ++ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; ++ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; ++ *) # Relative path. ++ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" ++ top_srcdir="$ac_dots$ac_given_srcdir" ;; ++ esac ++ ++ case "$ac_given_INSTALL" in ++ [/$]*) INSTALL="$ac_given_INSTALL" ;; ++ *) INSTALL="$ac_dots$ac_given_INSTALL" ;; ++ esac ++ ++ echo creating "$ac_file" ++ rm -f "$ac_file" ++ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." ++ case "$ac_file" in ++ *Makefile*) ac_comsub="1i\\ ++# $configure_input" ;; ++ *) ac_comsub= ;; ++ esac ++ ++ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` ++ sed -e "$ac_comsub ++s%@configure_input@%$configure_input%g ++s%@srcdir@%$srcdir%g ++s%@top_srcdir@%$top_srcdir%g ++s%@INSTALL@%$INSTALL%g ++" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file ++fi; done ++rm -f conftest.s* ++ ++# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where ++# NAME is the cpp macro being defined and VALUE is the value it is being given. ++# ++# ac_d sets the value in "#define NAME VALUE" lines. ++ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' ++ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' ++ac_dC='\3' ++ac_dD='%g' ++# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". ++ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ++ac_uB='\([ ]\)%\1#\2define\3' ++ac_uC=' ' ++ac_uD='\4%g' ++# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ++ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ++ac_eB='$%\1#\2define\3' ++ac_eC=' ' ++ac_eD='%g' ++ ++if test "${CONFIG_HEADERS+set}" != set; then ++EOF ++cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF ++fi ++for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then ++ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". ++ case "$ac_file" in ++ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ++ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; ++ *) ac_file_in="${ac_file}.in" ;; ++ esac ++ ++ echo creating $ac_file ++ ++ rm -f conftest.frag conftest.in conftest.out ++ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` ++ cat $ac_file_inputs > conftest.in ++ ++EOF ++ ++# Transform confdefs.h into a sed script conftest.vals that substitutes ++# the proper values into config.h.in to produce config.h. And first: ++# Protect against being on the right side of a sed subst in config.status. ++# Protect against being in an unquoted here document in config.status. ++rm -f conftest.vals ++cat > conftest.hdr <<\EOF ++s/[\\&%]/\\&/g ++s%[\\$`]%\\&%g ++s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp ++s%ac_d%ac_u%gp ++s%ac_u%ac_e%gp ++EOF ++sed -n -f conftest.hdr confdefs.h > conftest.vals ++rm -f conftest.hdr ++ ++# This sed command replaces #undef with comments. This is necessary, for ++# example, in the case of _POSIX_SOURCE, which is predefined and required ++# on some systems where configure will not decide to define it. ++cat >> conftest.vals <<\EOF ++s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% ++EOF ++ ++# Break up conftest.vals because some shells have a limit on ++# the size of here documents, and old seds have small limits too. ++ ++rm -f conftest.tail ++while : ++do ++ ac_lines=`grep -c . conftest.vals` ++ # grep -c gives empty output for an empty file on some AIX systems. ++ if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi ++ # Write a limited-size here document to conftest.frag. ++ echo ' cat > conftest.frag <> $CONFIG_STATUS ++ sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS ++ echo 'CEOF ++ sed -f conftest.frag conftest.in > conftest.out ++ rm -f conftest.in ++ mv conftest.out conftest.in ++' >> $CONFIG_STATUS ++ sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail ++ rm -f conftest.vals ++ mv conftest.tail conftest.vals ++done ++rm -f conftest.vals ++ ++cat >> $CONFIG_STATUS <<\EOF ++ rm -f conftest.frag conftest.h ++ echo "/* $ac_file. Generated automatically by configure. */" > conftest.h ++ cat conftest.in >> conftest.h ++ rm -f conftest.in ++ if cmp -s $ac_file conftest.h 2>/dev/null; then ++ echo "$ac_file is unchanged" ++ rm -f conftest.h ++ else ++ # Remove last slash and all that follows it. Not all systems have dirname. ++ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` ++ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then ++ # The file is in a subdirectory. ++ test ! -d "$ac_dir" && mkdir "$ac_dir" ++ fi ++ rm -f $ac_file ++ mv conftest.h $ac_file ++ fi ++fi; done ++ ++EOF ++cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF ++ac_file=Makefile . ${libgloss_topdir}/config-ml.in ++exit 0 ++EOF ++chmod +x $CONFIG_STATUS ++rm -fr confdefs* $ac_clean_files ++test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 ++ ++ ++ +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/configure.in newlib-1.13.0-new/libgloss/libsysbase/configure.in +--- newlib-1.13.0/libgloss/libsysbase/configure.in Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/configure.in Sat May 11 21:48:04 2002 +@@ -0,0 +1,219 @@ ++# Copyright (c) 1995, 1996 Cygnus Support ++# ++# 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. ++# ++# Process this file with autoconf to produce a configure script. ++# ++AC_PREREQ(2.5)dnl ++AC_INIT(close.c) ++AC_CONFIG_HEADER(config.h) ++ ++if test "${enable_shared}" = "yes" ; then ++ echo "Shared libraries not supported for cross compiling, ignored" ++fi ++ ++if test "$srcdir" = "." ; then ++ if test "${with_target_subdir}" != "." ; then ++ libgloss_topdir="${srcdir}/${with_multisrctop}../../.." ++ else ++ libgloss_topdir="${srcdir}/${with_multisrctop}../.." ++ fi ++else ++ libgloss_topdir="${srcdir}/../.." ++fi ++AC_CONFIG_AUX_DIR($libgloss_topdir) ++ ++AC_CANONICAL_SYSTEM ++AC_ARG_PROGRAM ++ ++AC_PROG_INSTALL ++ ++# FIXME: We temporarily define our own version of AC_PROG_CC. This is ++# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We ++# are building a library that must be included in all links, so we ++# can't link an executable until this lib is built. ++# autoconf should provide a way to do this. ++ ++AC_DEFUN(LIB_AC_PROG_CC, ++[AC_BEFORE([$0], [AC_PROG_CPP])dnl ++AC_CHECK_PROG(CC, gcc, gcc) ++if test -z "$CC"; then ++ AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc) ++ test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH]) ++fi ++ ++AC_PROG_CC_GNU ++ ++if test $ac_cv_prog_gcc = yes; then ++ GCC=yes ++dnl Check whether -g works, even if CFLAGS is set, in case the package ++dnl plays around with CFLAGS (such as to build both debugging and ++dnl normal versions of a library), tasteless as that idea is. ++ ac_test_CFLAGS="${CFLAGS+set}" ++ ac_save_CFLAGS="$CFLAGS" ++ CFLAGS= ++ AC_PROG_CC_G ++ if test "$ac_test_CFLAGS" = set; then ++ CFLAGS="$ac_save_CFLAGS" ++ elif test $ac_cv_prog_cc_g = yes; then ++ CFLAGS="-g -O2" ++ else ++ CFLAGS="-O2" ++ fi ++else ++ GCC= ++ test "${CFLAGS+set}" = set || CFLAGS="-g" ++fi ++]) ++ ++AC_DEFINE(HAVE_GNU_LD) ++dnl Make sure syscall names match those being used by newlib ++case "${target}" in ++ *-*-cygwin*) ++ ;; ++ a29k-amd-udi) ++ ;; ++ arc-*-*) ++ ;; ++ arm-*-pe) ++ ;; ++ arm-*-*) ++ ;; ++ strongarm-*-*) ++ ;; ++ d10v*) ++ ;; ++ h8300*-*-*) ++ ;; ++ h8500-*-*) ++ ;; ++ i[3456]86-*-sco*) ++ ;; ++ m32r-*-*) ++ ;; ++ mn10?00-*-*) ++ ;; ++ powerpcle-*-pe) ++ ;; ++ sh*-*-*) ++ ;; ++ sparc-sun-sunos*) ++ ;; ++ sparc64-*-*) ++ ;; ++ thumb-*-pe) ++ ;; ++ thumb-*-*) ++ ;; ++ v850-*-*) ++ ;; ++ v850e-*-*) ++ ;; ++ v850ea-*-*) ++ ;; ++ w65-*-*) ++ ;; ++ xstormy16-*-*) ++ ;; ++ z8k-*-*) ++ ;; ++ *) ++ AC_DEFINE(MISSING_SYSCALL_NAMES) ++ ;; ++esac ++ ++dnl Make sure we know if elf format used ++case "${target}" in ++ *-*-elf) ++ AC_DEFINE(HAVE_ELF) ++ ++ AC_CACHE_CHECK(for .previous assembler directive, ++ libc_cv_asm_previous_directive, [dnl ++ cat > conftest.s <&AC_FD_CC); then ++ AC_DEFINE(HAVE_ASM_PREVIOUS_DIRECTIVE) ++ fi ++ rm -f conftest*]) ++ ++ AC_CACHE_CHECK(for .popsection assembler directive, ++ libc_cv_asm_popsection_directive, [dnl ++ cat > conftest.s <&AC_FD_CC); then ++ AC_DEFINE(HAVE_ASM_POPSECTION_DIRECTIVE) ++ fi ++ rm -f conftest*]) ++ ++ AC_CACHE_CHECK(for section attributes, ++ libc_cv_section_attributes, [dnl ++ cat > conftest.c <&AC_FD_CC); then ++ AC_DEFINE(HAVE_SECTION_ATTRIBUTES) ++ fi ++ rm -f conftest*]) ++ ;; ++esac ++ ++AC_CACHE_CHECK(for function prefix, libc_dollar_prefix, [dnl ++cat > conftest.c <<\EOF ++foo () { } ++EOF ++dnl ++if AC_TRY_COMMAND([${CC-cc} -S conftest.c -o - | fgrep "\$foo" > /dev/null]); ++then ++ libc_dollar_prefix=yes ++else ++ libc_dollar_prefix=no ++fi ++rm -f conftest* ]) ++if test $libc_dollar_prefix = yes ; then ++ AC_DEFINE(__SYMBOL_PREFIX, "$") ++else ++ AC_DEFINE(__SYMBOL_PREFIX, "") ++fi ++ ++LIB_AC_PROG_CC ++AS=${AS-as} ++AC_SUBST(AS) ++AR=${AR-ar} ++AC_SUBST(AR) ++LD=${LD-ld} ++AC_SUBST(LD) ++AC_PROG_RANLIB ++ ++host_makefile_frag=${srcdir}/../config/default.mh ++ ++dnl We have to assign the same value to other variables because autoconf ++dnl doesn't provide a mechanism to substitute a replacement keyword with ++dnl arbitrary data or pathnames. ++dnl ++host_makefile_frag_path=$host_makefile_frag ++AC_SUBST(host_makefile_frag_path) ++AC_SUBST_FILE(host_makefile_frag) ++ ++AC_OUTPUT(Makefile, ++ac_file=Makefile . ${libgloss_topdir}/config-ml.in, ++srcdir=${srcdir} ++target=${target} ++ac_configure_args="${ac_configure_args} --enable-multilib" ++CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} ++libgloss_topdir=${libgloss_topdir} ++) ++ ++ +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/environ.c newlib-1.13.0-new/libgloss/libsysbase/environ.c +--- newlib-1.13.0/libgloss/libsysbase/environ.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/environ.c Fri Mar 17 22:48:50 2000 +@@ -0,0 +1,6 @@ ++/* ++ * Version of environ for no OS. ++ */ ++ ++char *__env[1] = { 0 }; ++char **environ = __env; +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/execve.c newlib-1.13.0-new/libgloss/libsysbase/execve.c +--- newlib-1.13.0/libgloss/libsysbase/execve.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/execve.c Tue Aug 30 22:32:37 2005 +@@ -0,0 +1,21 @@ ++/* ++ * Stub version of execve. ++ */ ++ ++#include "config.h" ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include "warning.h" ++ ++int ++_DEFUN (_execve, (name, argv, env), ++ char *name _AND ++ char **argv _AND ++ char **env) ++{ ++ errno = ENOSYS; ++ return -1; ++} ++ ++stub_warning(_execve) +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/fork.c newlib-1.13.0-new/libgloss/libsysbase/fork.c +--- newlib-1.13.0/libgloss/libsysbase/fork.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/fork.c Tue Aug 30 22:32:32 2005 +@@ -0,0 +1,19 @@ ++/* ++ * Stub version of fork. ++ */ ++ ++#include "config.h" ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include "warning.h" ++ ++int ++_DEFUN (_fork, (), ++ _NOARGS) ++{ ++ errno = ENOSYS; ++ return -1; ++} ++ ++stub_warning(_fork) +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/fstat.c newlib-1.13.0-new/libgloss/libsysbase/fstat.c +--- newlib-1.13.0/libgloss/libsysbase/fstat.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/fstat.c Tue Aug 30 22:32:16 2005 +@@ -0,0 +1,39 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++#include ++ ++#include ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++int _DEFUN (_fstat_r,(r,fileDesc, st), ++ struct _reent * r _AND ++ int fileDesc _AND ++ struct stat *st) { ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++int _DEFUN (_fstat,(fileDesc, st), ++ int fileDesc _AND ++ struct stat *st) { ++//--------------------------------------------------------------------------------- ++ struct _reent *r = _REENT; ++#endif ++ int ret = -1; ++ unsigned int dev = 0; ++ unsigned int fd = -1; ++ ++ if(fileDesc!=-1) { ++ dev = fileDesc; ++ if(fileDesc&0xf000) { ++ dev = _SHIFTR(fileDesc,12,4); ++ fd = fileDesc&0x0fff; ++ } ++ ++ if(devoptab_list[dev]->stat_r) ++ ret = devoptab_list[dev]->stat_r(r,fd,st); ++ } ++ return ret; ++} +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/getpid.c newlib-1.13.0-new/libgloss/libsysbase/getpid.c +--- newlib-1.13.0/libgloss/libsysbase/getpid.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/getpid.c Tue Aug 30 12:22:30 2005 +@@ -0,0 +1,12 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++ ++//--------------------------------------------------------------------------------- ++int _DEFUN (_getpid, (), ++ _NOARGS) { ++//--------------------------------------------------------------------------------- ++ errno = ENOSYS; ++ return -1; ++} ++ +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/gettod.c newlib-1.13.0-new/libgloss/libsysbase/gettod.c +--- newlib-1.13.0/libgloss/libsysbase/gettod.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/gettod.c Tue Aug 30 22:31:58 2005 +@@ -0,0 +1,25 @@ ++/* ++ * Stub version of gettimeofday. ++ */ ++ ++#include "config.h" ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++#include ++#include "warning.h" ++ ++struct timeval; ++struct timezone; ++ ++int ++_DEFUN (_gettimeofday, (ptimeval, ptimezone), ++ struct timeval *ptimeval _AND ++ struct timezone *ptimezone) ++{ ++ errno = ENOSYS; ++ return -1; ++} ++ ++stub_warning(_gettimeofday) +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/iosupport.c newlib-1.13.0-new/libgloss/libsysbase/iosupport.c +--- newlib-1.13.0/libgloss/libsysbase/iosupport.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/iosupport.c Wed Oct 19 20:09:40 2005 +@@ -0,0 +1,91 @@ ++#include ++#include ++ ++//--------------------------------------------------------------------------------- ++int stdnull_open(struct _reent *r,const char *path,int flags,int mode) { ++//--------------------------------------------------------------------------------- ++ return -1; ++} ++ ++//--------------------------------------------------------------------------------- ++int stdnull_close(struct _reent *r,int fd) { ++//--------------------------------------------------------------------------------- ++ return -1; ++} ++ ++//--------------------------------------------------------------------------------- ++int stdnull_write(struct _reent *r,int fd,const char *ptr,int len) { ++//--------------------------------------------------------------------------------- ++ return -1; ++} ++ ++//--------------------------------------------------------------------------------- ++int stdnull_read(struct _reent *r,int fd,char *ptr,int len) { ++//--------------------------------------------------------------------------------- ++ return -1; ++} ++ ++ ++ ++ ++//--------------------------------------------------------------------------------- ++const devoptab_t dotab_stdnull = { ++//--------------------------------------------------------------------------------- ++ "stdnull", ++ stdnull_open, ++ stdnull_close, ++ stdnull_write, ++ stdnull_read, ++ NULL, ++ NULL ++}; ++ ++//--------------------------------------------------------------------------------- ++const devoptab_t *devoptab_list[STD_MAX] = { ++//--------------------------------------------------------------------------------- ++ &dotab_stdnull, &dotab_stdnull, &dotab_stdnull, &dotab_stdnull, ++ &dotab_stdnull, &dotab_stdnull, &dotab_stdnull, &dotab_stdnull, ++ &dotab_stdnull, &dotab_stdnull, &dotab_stdnull, &dotab_stdnull, ++ &dotab_stdnull, &dotab_stdnull, &dotab_stdnull, &dotab_stdnull ++}; ++ ++ ++//--------------------------------------------------------------------------------- ++int FindDevice(char* name) { ++//--------------------------------------------------------------------------------- ++ int i, namelen, dev = -1; ++ ++ while(iname); ++ if(strncmp(devoptab_list[i]->name,name,namelen)==0 && name[namelen] == ':' ) { ++ dev = i; ++ break; ++ } ++ } ++ i++; ++ } ++ ++ return dev; ++} ++ ++//--------------------------------------------------------------------------------- ++int AddDevice( const devoptab_t* device) { ++//--------------------------------------------------------------------------------- ++ ++ int devnum; ++ ++ for ( devnum = 3;devnum name, device->name) || ++ strcmp(devoptab_list[devnum]->name, "stdnull") ) ++ break; ++ } ++ ++ if ( devnum == STD_MAX ) { ++ devnum = -1; ++ } else { ++ devoptab_list[devnum] = device; ++ } ++ return devnum; ++} +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/isatty.c newlib-1.13.0-new/libgloss/libsysbase/isatty.c +--- newlib-1.13.0/libgloss/libsysbase/isatty.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/isatty.c Tue Aug 30 01:02:43 2005 +@@ -0,0 +1,10 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++ ++//--------------------------------------------------------------------------------- ++int _DEFUN(isatty,(file), ++ int file) { ++//--------------------------------------------------------------------------------- ++ return 0; ++} +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/kill.c newlib-1.13.0-new/libgloss/libsysbase/kill.c +--- newlib-1.13.0/libgloss/libsysbase/kill.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/kill.c Tue Aug 30 22:31:39 2005 +@@ -0,0 +1,20 @@ ++/* ++ * Stub version of kill. ++ */ ++ ++#include "config.h" ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include "warning.h" ++ ++int ++_DEFUN (_kill, (pid, sig), ++ int pid _AND ++ int sig) ++{ ++ errno = ENOSYS; ++ return -1; ++} ++ ++stub_warning(_kill) +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/link.c newlib-1.13.0-new/libgloss/libsysbase/link.c +--- newlib-1.13.0/libgloss/libsysbase/link.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/link.c Tue Aug 30 12:40:08 2005 +@@ -0,0 +1,20 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++int _DEFUN (_link_r, (r, existing, new), ++ struct _reent r _AND ++ char *existing _AND ++ char *new) { ++#else ++int _DEFUN (_link, (existing, new), ++ char *existing _AND ++ char *new) { ++ struct _reent *r = _REENT; ++#endif ++ r->_errno = ENOSYS; ++ return -1; ++} ++ +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/lseek.c newlib-1.13.0-new/libgloss/libsysbase/lseek.c +--- newlib-1.13.0/libgloss/libsysbase/lseek.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/lseek.c Tue Aug 30 22:31:20 2005 +@@ -0,0 +1,29 @@ ++ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++ ++#include ++ ++//--------------------------------------------------------------------------------- ++int _DEFUN(_lseek,(file, pos, dir), ++ int file _AND ++ int pos _AND ++ int dir) { ++//--------------------------------------------------------------------------------- ++ int ret = -1; ++ unsigned int dev = 0; ++ unsigned int fd = -1; ++ ++ if(file!=-1) { ++ dev = file; ++ if(file&0xf000) { ++ dev = _SHIFTR(file,12,4); ++ fd = file&0x0fff; ++ } ++ ++ if(devoptab_list[dev]->seek_r) ++ ret = devoptab_list[dev]->seek_r(0,fd,pos,dir); ++ } ++ return ret; ++} +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/malloc_vars.c newlib-1.13.0-new/libgloss/libsysbase/malloc_vars.c +--- newlib-1.13.0/libgloss/libsysbase/malloc_vars.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/malloc_vars.c Mon Aug 29 21:03:15 2005 +@@ -0,0 +1,2 @@ ++char *fake_heap_end = (char*)0; ++char *fake_heap_start = (char*)0; +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/open.c newlib-1.13.0-new/libgloss/libsysbase/open.c +--- newlib-1.13.0/libgloss/libsysbase/open.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/open.c Fri Sep 16 03:21:31 2005 +@@ -0,0 +1,42 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++int _DEFUN (_open_r, (r, file, flags, mode), ++ struct _reent * r _AND ++ char *file _AND ++ int flags _AND ++ int mode) { ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++int _DEFUN (_open, (file, flags, mode), ++ char *file _AND ++ int flags _AND ++ int mode) { ++//--------------------------------------------------------------------------------- ++ struct _reent *r = _REENT; ++#endif ++ int handle; ++ int dev,fd; ++ ++ ++ dev = FindDevice(file); ++ ++ fd = -1; ++ handle = -1; ++ if(dev!=-1 && devoptab_list[dev]->open_r) { ++ fd = devoptab_list[dev]->open_r(r,file,flags,mode); ++ if(fd!=-1) handle = _SHIFTL(dev,12,4)|(fd&0x0fff); ++ } ++ ++ return handle; ++} +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/read.c newlib-1.13.0-new/libgloss/libsysbase/read.c +--- newlib-1.13.0/libgloss/libsysbase/read.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/read.c Tue Aug 30 22:30:42 2005 +@@ -0,0 +1,40 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++ ++#include ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++int _DEFUN(_read_r,(r, file, ptr, len), ++ struct _reent * r _AND ++ int file _AND ++ char *ptr _AND ++ int len) { ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++int _DEFUN(_read,(file, ptr, len), ++ int file _AND ++ char *ptr _AND ++ int len) { ++//--------------------------------------------------------------------------------- ++ struct _reent *r = _REENT; ++#endif ++ int ret = -1; ++ unsigned int dev = 0; ++ unsigned int fd = -1; ++ ++ if(file!=-1) { ++ dev = file; ++ if(file&0xf000) { ++ dev = _SHIFTR(file,12,4); ++ fd = file&0x0fff; ++ } ++ if(devoptab_list[dev]->read_r) ++ ret = devoptab_list[dev]->read_r(r,fd,ptr,len); ++ } ++ return ret; ++} ++ +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/sbrk.c newlib-1.13.0-new/libgloss/libsysbase/sbrk.c +--- newlib-1.13.0/libgloss/libsysbase/sbrk.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/sbrk.c Fri Sep 9 17:52:53 2005 +@@ -0,0 +1,58 @@ ++#include <_ansi.h> ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++extern char *fake_heap_end; ++extern char *fake_heap_start; ++ ++/* Register name faking - works in collusion with the linker. */ ++register char * stack_ptr asm ("sp"); ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++caddr_t _sbrk_r (struct _reent *ptr, int incr) { ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++caddr_t _sbrk (int incr) { ++//--------------------------------------------------------------------------------- ++ struct _reent *ptr = _REENT; ++#endif ++ extern char end asm ("end"); /* Defined by the linker. */ ++ static char * heap_end; ++ char * prev_heap_end; ++ char * our_heap_end; ++ ++ if (heap_end == NULL) { ++ if (fake_heap_start == NULL) { ++ heap_end = &end; ++ } else { ++ heap_end = fake_heap_start; ++ } ++ } ++ ++ prev_heap_end = heap_end; ++ ++ if (fake_heap_end == NULL) { ++ our_heap_end = stack_ptr; ++ } else { ++ our_heap_end = fake_heap_end; ++ } ++ ++ if (heap_end + incr > our_heap_end) { ++ ptr->_errno = ENOMEM; ++ return (caddr_t) -1; ++ } ++ ++ heap_end += incr; ++ ++ return (caddr_t) prev_heap_end; ++} +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/stat.c newlib-1.13.0-new/libgloss/libsysbase/stat.c +--- newlib-1.13.0/libgloss/libsysbase/stat.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/stat.c Tue Aug 30 22:30:31 2005 +@@ -0,0 +1,22 @@ ++/* ++ * Stub version of stat. ++ */ ++ ++#include "config.h" ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++#include ++#include "warning.h" ++ ++int ++_DEFUN (_stat, (file, st), ++ const char *file _AND ++ struct stat *st) ++{ ++ errno = ENOSYS; ++ return -1; ++} ++ ++stub_warning(_stat) +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/times.c newlib-1.13.0-new/libgloss/libsysbase/times.c +--- newlib-1.13.0/libgloss/libsysbase/times.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/times.c Tue Aug 30 22:30:23 2005 +@@ -0,0 +1,13 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++ ++//--------------------------------------------------------------------------------- ++clock_t _DEFUN (_times, (buf), ++ struct tms *buf) { ++//--------------------------------------------------------------------------------- ++ errno = ENOSYS; ++ return -1; ++} ++ +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/unlink.c newlib-1.13.0-new/libgloss/libsysbase/unlink.c +--- newlib-1.13.0/libgloss/libsysbase/unlink.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/unlink.c Tue Aug 30 12:40:17 2005 +@@ -0,0 +1,22 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++int _DEFUN (_unlink_r, (r, name), ++ struct _reent * r _AND ++ char *name ) { ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++int _DEFUN (_unlink, (name), ++ char *name) { ++//--------------------------------------------------------------------------------- ++ struct _reent *r = _REENT; ++#endif ++ r->_errno = ENOSYS; ++ return -1; ++} ++ +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/wait.c newlib-1.13.0-new/libgloss/libsysbase/wait.c +--- newlib-1.13.0/libgloss/libsysbase/wait.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/wait.c Tue Aug 30 22:33:21 2005 +@@ -0,0 +1,19 @@ ++/* ++ * Stub version of wait. ++ */ ++ ++#include "config.h" ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include "warning.h" ++ ++int ++_DEFUN (_wait, (status), ++ int *status) ++{ ++ errno = ENOSYS; ++ return -1; ++} ++ ++stub_warning(_wait) +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/warning.h newlib-1.13.0-new/libgloss/libsysbase/warning.h +--- newlib-1.13.0/libgloss/libsysbase/warning.h Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/warning.h Sat May 11 21:48:04 2002 +@@ -0,0 +1,43 @@ ++#ifndef __WARNING_H__ ++#define __WARNING_H__ ++ ++#ifdef HAVE_GNU_LD ++# ifdef HAVE_ELF ++ ++/* We want the .gnu.warning.SYMBOL section to be unallocated. */ ++# ifdef HAVE_ASM_PREVIOUS_DIRECTIVE ++# define __make_section_unallocated(section_string) \ ++ asm(".section " section_string "; .previous"); ++# elif defined (HAVE_ASM_POPSECTION_DIRECTIVE) ++# define __make_section_unallocated(section_string) \ ++ asm(".pushsection " section_string "; .popsection"); ++# else ++# define __make_section_unallocated(section_string) ++# endif ++ ++# ifdef HAVE_SECTION_ATTRIBUTES ++# define link_warning(symbol, msg) \ ++ __make_section_unallocated (".gnu.warning." #symbol) \ ++ static const char __evoke_link_warning_##symbol[] \ ++ __attribute__ ((section (".gnu.warning." #symbol))) = msg; ++# else ++# define link_warning(symbol, msg) ++# endif ++ ++#else /* !ELF */ ++ ++# define link_warning(symbol, msg) \ ++ asm(".stabs \"" msg "\",30,0,0,0\n" \ ++ ".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0\n"); ++# endif ++#else /* !GNULD */ ++/* We will never be heard; they will all die horribly. */ ++# define link_warning(symbol, msg) ++#endif ++ ++/* A canned warning for sysdeps/stub functions. */ ++#define stub_warning(name) \ ++ link_warning (name, \ ++ "warning: " #name " is not implemented and will always fail") ++ ++#endif /* __WARNING_H__ */ +diff -Nbaur newlib-1.13.0/libgloss/libsysbase/write.c newlib-1.13.0-new/libgloss/libsysbase/write.c +--- newlib-1.13.0/libgloss/libsysbase/write.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/libgloss/libsysbase/write.c Tue Aug 30 22:29:39 2005 +@@ -0,0 +1,39 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++ ++#include ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++int _DEFUN(_write_r,(r, file, ptr, len), ++ struct _reent * r _AND ++ int file _AND ++ char *ptr _AND ++ int len) { ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++int _DEFUN (_write, (file, ptr, len), ++ int file _AND ++ char *ptr _AND ++ int len) { ++//--------------------------------------------------------------------------------- ++ struct _reent *r = _REENT; ++#endif ++ int ret = -1; ++ unsigned int dev = 0; ++ unsigned int fd = -1; ++ ++ if(file!=-1) { ++ dev = file; ++ if(file&0xf000) { ++ dev = _SHIFTR(file,12,4); ++ fd = file&0x0fff; ++ } ++ if(devoptab_list[dev]->write_r) ++ ret = devoptab_list[dev]->write_r(r,fd,ptr,len); ++ } ++ return ret; ++} +diff -Nbaur newlib-1.13.0/newlib/libc/include/stdint.h newlib-1.13.0-new/newlib/libc/include/stdint.h +--- newlib-1.13.0/newlib/libc/include/stdint.h Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/newlib/libc/include/stdint.h Mon Sep 19 23:33:16 2005 +@@ -0,0 +1,282 @@ ++/* ++ * Copyright (c) 2004, 2005 by ++ * Ralf Corsepius, Ulm/Germany. All rights reserved. ++ * ++ * Permission to use, copy, modify, and distribute this software ++ * is freely granted, provided that this notice is preserved. ++ */ ++ ++/* ++ * @todo - Add fast_t types. ++ * @todo - Add support for wint_t types. ++ */ ++ ++#ifndef _STDINT_H ++#define _STDINT_H ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++#if defined(__GNUC__) && (__GNUC__ >= 3 ) \ ++ && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ > 2 ) ++#define __EXP(x) __##x##__ ++#else ++#define __EXP(x) x ++#include ++#endif ++ ++#if __EXP(SCHAR_MAX) == 0x7f ++typedef signed char int8_t ; ++typedef unsigned char uint8_t ; ++#define __int8_t_defined 1 ++#endif ++ ++#if __int8_t_defined ++typedef signed char int_least8_t; ++typedef unsigned char uint_least8_t; ++#define __int_least8_t_defined 1 ++#endif ++ ++#if __EXP(SHRT_MAX) == 0x7fff ++typedef signed short int16_t; ++typedef unsigned short uint16_t; ++#define __int16_t_defined 1 ++#elif __EXP(INT_MAX) == 0x7fff ++typedef signed int int16_t; ++typedef unsigned int uint16_t; ++#define __int16_t_defined 1 ++#elif __EXP(SCHAR_MAX) == 0x7fff ++typedef signed char int16_t; ++typedef unsigned char uint16_t; ++#define __int16_t_defined 1 ++#endif ++ ++#if __int16_t_defined ++typedef int16_t int_least16_t; ++typedef uint16_t uint_least16_t; ++#define __int_least16_t_defined 1 ++ ++#ifndef __int_least8_t_defined ++typedef int16_t int_least8_t; ++typedef uint16_t uint_least8_t; ++#define __int_least8_t_defined 1 ++#endif ++#endif ++ ++#if __EXP(INT_MAX) == 0x7fffffffL ++typedef signed int int32_t; ++typedef unsigned int uint32_t; ++#define __int32_t_defined 1 ++#elif __EXP(LONG_MAX) == 0x7fffffffL ++typedef signed long int32_t; ++typedef unsigned long uint32_t; ++#define __int32_t_defined 1 ++#define __have_long32 1 ++#elif __EXP(SHRT_MAX) == 0x7fffffffL ++typedef signed short int32_t; ++typedef unsigned short uint32_t; ++#define __int32_t_defined 1 ++#elif __EXP(SCHAR_MAX) == 0x7fffffffL ++typedef signed char int32_t; ++typedef unsigned char uint32_t; ++#define __int32_t_defined 1 ++#endif ++ ++#if __int32_t_defined ++typedef int32_t int_least32_t; ++typedef uint32_t uint_least32_t; ++#define __int_least32_t_defined 1 ++ ++#ifndef __int_least8_t_defined ++typedef int32_t int_least8_t; ++typedef uint32_t uint_least8_t; ++#define __int_least8_t_defined 1 ++#endif ++ ++#ifndef __int_least16_t_defined ++typedef int32_t int_least16_t; ++typedef uint32_t uint_least16_t; ++#define __int_least16_t_defined 1 ++#endif ++#endif ++ ++#if __EXP(LONG_MAX) > 0x7fffffff ++typedef signed long int64_t; ++typedef unsigned long uint64_t; ++#define __int64_t_defined 1 ++#define __have_long64 1 ++#elif defined(__LONG_LONG_MAX__) && (__LONG_LONG_MAX__ > 0x7fffffff) ++typedef signed long long int64_t; ++typedef unsigned long long uint64_t; ++#define __int64_t_defined 1 ++#define __have_longlong64 1 ++#elif defined(LLONG_MAX) && (LLONG_MAX > 0x7fffffff) ++typedef signed long long int64_t; ++typedef unsigned long long uint64_t; ++#define __int64_t_defined 1 ++#define __have_longlong64 1 ++#elif __EXP(INT_MAX) > 0x7fffffff ++typedef signed int int64_t; ++typedef unsigned int uint64_t; ++#define __int64_t_defined 1 ++#endif ++ ++#if __int64_t_defined ++typedef int64_t int_least64_t; ++typedef uint64_t uint_least64_t; ++#define __int_least64_t_defined 1 ++ ++#ifndef __int_least8_t_defined ++typedef int64_t int_least8_t; ++typedef uint64_t uint_least8_t; ++#define __int_least8_t_defined 1 ++#endif ++ ++#ifndef __int_least16_t_defined ++typedef int64_t int_least16_t; ++typedef uint64_t uint_least16_t; ++#define __int_least16_t_defined 1 ++#endif ++ ++#ifndef __int_least32_t_defined ++typedef int64_t int_least32_t; ++typedef uint64_t uint_least32_t; ++#define __int_least32_t_defined 1 ++#endif ++#endif ++ ++#if __have_longlong64 ++typedef signed long long intmax_t; ++typedef unsigned long long uintmax_t; ++#else ++typedef signed long intmax_t; ++typedef unsigned long uintmax_t; ++#endif ++ ++/* ++ * GCC doesn't provide an propriate macro for [u]intptr_t ++ * For now, use __PTRDIFF_TYPE__ ++ */ ++#if defined(__PTRDIFF_TYPE__) ++typedef signed __PTRDIFF_TYPE__ intptr_t; ++typedef unsigned __PTRDIFF_TYPE__ uintptr_t; ++#else ++/* ++ * Fallback to hardcoded values, ++ * should be valid on cpu's with 32bit int/32bit void* ++ */ ++typedef signed long intptr_t; ++typedef unsigned long uintptr_t; ++#endif ++ ++/* Limits of Specified-Width Integer Types */ ++ ++#if __int8_t_defined ++#define INT8_MIN -128 ++#define INT8_MAX 127 ++#define UINT8_MAX 255 ++#endif ++ ++#if __int_least8_t_defined ++#define INTLEAST8_MIN -128 ++#define INTLEAST8_MAX 127 ++#define UINTLEAST8_MAX 255 ++#else ++#error required type int_least8_t missing ++#endif ++ ++#if __int16_t_defined ++#define INT16_MIN -32768 ++#define INT16_MAX 32767 ++#define UINT16_MAX 65535 ++#endif ++ ++#if __int_least16_t_defined ++#define INTLEAST16_MIN -32768 ++#define INTLEAST16_MAX 32767 ++#define UINTLEAST16_MAX 65535 ++#else ++#error required type int_least16_t missing ++#endif ++ ++#if __int32_t_defined ++#define INT32_MIN -2147483648 ++#define INT32_MAX 2147483647 ++#define UINT32_MAX 4294967295 ++#endif ++ ++#if __int_least32_t_defined ++#define INTLEAST32_MIN -2147483648 ++#define INTLEAST32_MAX 2147483647 ++#define UINTLEAST32_MAX 4294967295 ++#else ++#error required type int_least32_t missing ++#endif ++ ++#if __int64_t_defined ++#define INT64_MIN -9223372036854775808 ++#define INT64_MAX 9223372036854775807 ++#define UINT64_MAX 18446744073709551615 ++#endif ++ ++#if __int_least64_t_defined ++#define INTLEAST64_MIN -9223372036854775808 ++#define INTLEAST64_MAX 9223372036854775807 ++#define UINTLEAST64_MAX 18446744073709551615 ++#endif ++ ++/* This must match size_t in stddef.h, currently long unsigned int */ ++#define SIZE_MIN (-__EXP(LONG_MAX) - 1L) ++#define SIZE_MAX __EXP(LONG_MAX) ++ ++/* This must match sig_atomic_t in (currently int) */ ++#define SIG_ATOMIC_MIN (-__EXP(INT_MAX) - 1) ++#define SIG_ATOMIC_MAX __EXP(INT_MAX) ++ ++/* This must match ptrdiff_t in (currently long int) */ ++#define PTRDIFF_MIN (-__EXP(LONG_MAX) - 1L) ++#define PTHDIFF_MAX __EXT(LONG_MAX) ++ ++#undef __EXP ++ ++/** Macros for minimum-width integer constant expressions */ ++#define INT8_C(x) x ++#define UINT8_C(x) x##U ++ ++#define INT16_C(x) x ++#define UINT16_C(x) x##U ++ ++#if __have_long32 ++#define INT32_C(x) x##L ++#define UINT32_C(x) x##UL ++#else ++#define INT32_C(x) x ++#define UINT32_C(x) x##U ++#endif ++ ++#if __int64_t_defined ++#if __have_longlong64 ++#define INT64_C(x) x##LL ++#define UINT64_C(x) x##ULL ++#else ++#define INT64_C(x) x##L ++#define UINT64_C(x) x##UL ++#endif ++#endif ++ ++/** Macros for greatest-width integer constant expression */ ++#if __have_longlong64 ++#define INTMAX_C(x) x##LL ++#define UINTMAX_C(x) x##ULL ++#else ++#define INTMAX_C(x) x##L ++#define UINTMAX_C(x) x##UL ++#endif ++ ++ ++#ifdef __cplusplus ++} ++#endif ++ ++#endif /* _STDINT_H */ +diff -Nbaur newlib-1.13.0/newlib/libc/include/stdio.h newlib-1.13.0-new/newlib/libc/include/stdio.h +--- newlib-1.13.0/newlib/libc/include/stdio.h Wed Nov 24 00:45:40 2004 ++++ newlib-1.13.0-new/newlib/libc/include/stdio.h Wed Sep 14 04:49:02 2005 +@@ -244,6 +244,7 @@ + int _EXFUN(vfiscanf, (FILE *, const char *, __VALIST)); + int _EXFUN(vfscanf, (FILE *, const char *, __VALIST)); + int _EXFUN(viscanf, (const char *, __VALIST)); ++int _EXFUN(viprintf, (const char *, __VALIST)); + int _EXFUN(vscanf, (const char *, __VALIST)); + int _EXFUN(vsiscanf, (const char *, const char *, __VALIST)); + int _EXFUN(vsscanf, (const char *, const char *, __VALIST)); +diff -Nbaur newlib-1.13.0/newlib/libc/include/sys/iosupport.h newlib-1.13.0-new/newlib/libc/include/sys/iosupport.h +--- newlib-1.13.0/newlib/libc/include/sys/iosupport.h Thu Jan 1 00:00:00 1970 ++++ newlib-1.13.0-new/newlib/libc/include/sys/iosupport.h Fri Sep 16 03:20:57 2005 +@@ -0,0 +1,33 @@ ++#ifndef __iosupp_h__ ++#define __iosupp_h__ ++ ++#include ++ ++enum { ++ STD_IN, ++ STD_OUT, ++ STD_ERR, ++ STD_MAX = 16 ++}; ++ ++#define _SHIFTL(v, s, w) \ ++ ((unsigned int) (((unsigned int)(v) & ((0x01 << (w)) - 1)) << (s))) ++#define _SHIFTR(v, s, w) \ ++ ((unsigned int)(((unsigned int)(v) >> (s)) & ((0x01 << (w)) - 1))) ++ ++typedef struct { ++ const char *name; ++ int (*open_r)(struct _reent *r,const char *path,int flags,int mode); ++ int (*close_r)(struct _reent *r,int fd); ++ int (*write_r)(struct _reent *r,int fd,const char *ptr,int len); ++ int (*read_r)(struct _reent *r,int fd,char *ptr,int len); ++ int (*seek_r)(struct _reent *r,int fd,int pos,int dir); ++ int (*stat_r)(struct _reent *r,int fd,struct stat *st); ++} devoptab_t; ++ ++extern const devoptab_t *devoptab_list[]; ++ ++int AddDevice( const devoptab_t* device); ++int FindDevice(char* name); ++ ++#endif diff --git a/dkarm-eabi/patches/newlib-1.14.0.patch b/dkarm-eabi/patches/newlib-1.14.0.patch new file mode 100644 index 0000000..e84b3ef --- /dev/null +++ b/dkarm-eabi/patches/newlib-1.14.0.patch @@ -0,0 +1,2890 @@ +diff -Nbaur newlib-1.14.0/libgloss/configure newlib-1.14.0-arm/libgloss/configure +--- newlib-1.14.0/libgloss/configure Mon Dec 12 11:25:07 2005 ++++ newlib-1.14.0-arm/libgloss/configure Fri Apr 14 22:08:39 2006 +@@ -711,9 +711,9 @@ + + + if test -z "${with_multisubdir}" ; then +- configdirs="doc libnosys" ++ configdirs="doc libnosys libsysbase" + else +- configdirs="libnosys" ++ configdirs="libnosys libsysbase" + fi + + case "${target}" in +diff -Nbaur newlib-1.14.0/libgloss/configure.in newlib-1.14.0-arm/libgloss/configure.in +--- newlib-1.14.0/libgloss/configure.in Mon Dec 12 11:25:07 2005 ++++ newlib-1.14.0-arm/libgloss/configure.in Fri Apr 14 22:08:39 2006 +@@ -22,9 +22,9 @@ + AC_CANONICAL_SYSTEM + + if test -z "${with_multisubdir}" ; then +- configdirs="doc libnosys" ++ configdirs="doc libnosys libsysbase" + else +- configdirs="libnosys" ++ configdirs="libnosys libsysbase" + fi + + case "${target}" in +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/Makefile.in newlib-1.14.0-arm/libgloss/libsysbase/Makefile.in +--- newlib-1.14.0/libgloss/libsysbase/Makefile.in Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/Makefile.in Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,145 @@ ++# Copyright (c) 1998 Cygnus Support ++# ++# 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. ++ ++DESTDIR = ++VPATH = @srcdir@ ++srcdir = @srcdir@ ++objdir = . ++srcroot = $(srcdir)/../.. ++objroot = $(objdir)/../.. ++ ++prefix = @prefix@ ++exec_prefix = @exec_prefix@ ++ ++host_alias = @host_alias@ ++target_alias = @target_alias@ ++program_transform_name = @program_transform_name@ ++ ++bindir = @bindir@ ++libdir = @libdir@ ++tooldir = $(exec_prefix)/$(target_alias) ++ ++# Multilib support variables. ++# TOP is used instead of MULTI{BUILD,SRC}TOP. ++MULTIDIRS = ++MULTISUBDIR = ++MULTIDO = true ++MULTICLEAN = true ++ ++INSTALL = @INSTALL@ ++INSTALL_PROGRAM = @INSTALL_PROGRAM@ ++INSTALL_DATA = @INSTALL_DATA@ ++ ++SHELL = /bin/sh ++ ++CC = @CC@ ++ ++#AS = @AS@ ++AS = `if [ -f ${objroot}/../gas/as.new ] ; \ ++ then echo ${objroot}/../gas/as.new ; \ ++ else echo as ; fi` ++ ++AR = @AR@ ++ ++#LD = @LD@ ++LD = `if [ -f ${objroot}/../ld/ld.new ] ; \ ++ then echo ${objroot}/../ld/ld.new ; \ ++ else echo ld ; fi` ++ ++RANLIB = @RANLIB@ ++ ++OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ ++ then echo ${objroot}/../binutils/objdump ; \ ++ else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` ++OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ ++ then echo ${objroot}/../binutils/objcopy ; \ ++ else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` ++ ++# object files needed ++OBJS = abort.o iosupport.o close.o environ.o execve.o fork.o fstat.o getpid.o gettod.o \ ++ isatty.o kill.o link.o lseek.o open.o read.o sbrk.o stat.o \ ++ times.o unlink.o wait.o write.o _exit.o malloc_vars.o ++ ++# Object files specific to particular targets. ++EVALOBJS = ${OBJS} ++ ++GCC_LDFLAGS = `if [ -d ${objroot}/../gcc ] ; \ ++ then echo -L${objroot}/../gcc ; fi` ++ ++OUTPUTS = libsysbase.a ++ ++NEWLIB_CFLAGS = `if [ -d ${objroot}/newlib ]; then echo -I${objroot}/newlib/targ-include -I${srcroot}/newlib/libc/include; fi` ++NEWLIB_LDFLAGS = `if [ -d ${objroot}/newlib ]; then echo -B${objroot}/newlib/ -L${objroot}/newlib/; fi` ++ ++INCLUDES = -I. -I$(srcdir)/.. ++# Note that when building the library, ${MULTILIB} is not the way multilib ++# options are passed; they're passed in $(CFLAGS). ++CFLAGS_FOR_TARGET = ${MULTILIB} ${INCLUDES} ${NEWLIB_CFLAGS} ++LDFLAGS_FOR_TARGET = ${MULTILIB} ${NEWLIB_LDFLAGS} ++AR_FLAGS = qc ++ ++.c.o: ++ $(CC) $(CFLAGS_FOR_TARGET) -O2 $(INCLUDES) -c $(CFLAGS) $< ++ ++.C.o: ++ $(CC) $(CFLAGS_FOR_TARGET) -O2 $(INCLUDES) -c $(CFLAGS) $< ++.s.o: ++ $(AS) $(ASFLAGS_FOR_TARGET) $(INCLUDES) $(ASFLAGS) -o $*.o $< ++ ++# ++# GCC knows to run the preprocessor on .S files before it assembles them. ++# ++.S.o: ++ $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $< ++ ++# ++# this is a bogus target that'll produce an assembler from the ++# C source with the right compiler options. this is so we can ++# track down code generation or debug symbol bugs. ++# ++.c.s: ++ $(CC) $(CFLAGS_FOR_TARGET) -S $(INCLUDES) $(CFLAGS) $< ++ ++all: ${OUTPUTS} ++ ++# ++# here's where we build the library for each target ++# ++ ++libsysbase.a: $(EVALOBJS) ++ ${AR} ${ARFLAGS} $@ $(EVALOBJS) ++ ${RANLIB} $@ ++ ++doc: ++ ++clean mostlyclean: ++ rm -f $(OUTPUTS) *.i *~ *.o *-test *.srec *.dis *.map *.x ++ ++distclean maintainer-clean realclean: clean ++ rm -f Makefile config.status $(OUTPUTS) ++ ++.PHONY: install info install-info clean-info ++install: ++ @for outputs in ${OUTPUTS}; do\ ++ mkdir -p $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}; \ ++ $(INSTALL_PROGRAM) $${outputs} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}; \ ++ done ++ ++info: ++install-info: ++clean-info: ++ ++Makefile: Makefile.in config.status @host_makefile_frag_path@ ++ $(SHELL) config.status ++ ++config.status: configure ++ $(SHELL) config.status --recheck +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/_exit.c newlib-1.14.0-arm/libgloss/libsysbase/_exit.c +--- newlib-1.14.0/libgloss/libsysbase/_exit.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/_exit.c Wed May 10 20:44:45 2006 +@@ -0,0 +1,14 @@ ++/* Stub version of _exit. */ ++ ++#include ++#include "config.h" ++#include <_ansi.h> ++#include <_syslist.h> ++ ++_VOID ++_DEFUN (_exit, (rc), ++ int rc) ++{ ++ ++ while(1); ++} +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/abort.c newlib-1.14.0-arm/libgloss/libsysbase/abort.c +--- newlib-1.14.0/libgloss/libsysbase/abort.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/abort.c Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,8 @@ ++#include ++#include ++ ++void abort(void) { ++ write (2, "Abort called.\n", sizeof("Abort called.\n")-1); ++ exit (1); ++} ++ +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/acconfig.h newlib-1.14.0-arm/libgloss/libsysbase/acconfig.h +--- newlib-1.14.0/libgloss/libsysbase/acconfig.h Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/acconfig.h Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,26 @@ ++/* Name of package. */ ++#undef PACKAGE ++ ++/* Version of package. */ ++#undef VERSION ++ ++/* Missing syscall names */ ++#undef MISSING_SYSCALL_NAMES ++ ++/* Using ELF format */ ++#undef HAVE_ELF ++ ++/* Using GNU LD */ ++#undef HAVE_GNU_LD ++ ++/* .previous directive allowed */ ++#undef HAVE_ASM_PREVIOUS_DIRECTIVE ++ ++/* .pushsection/.popsection directives allowed */ ++#undef HAVE_ASM_POPSECTION_DIRECTIVE ++ ++/* support for section attributes */ ++#undef HAVE_SECTION_ATTRIBUTES ++ ++/* symbol prefix */ ++#undef __SYMBOL_PREFIX +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/close.c newlib-1.14.0-arm/libgloss/libsysbase/close.c +--- newlib-1.14.0/libgloss/libsysbase/close.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/close.c Wed May 10 20:19:42 2006 +@@ -0,0 +1,38 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++ ++#include ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++int _DEFUN(_close_r,(ptr,fileDesc), ++ struct _reent *ptr _AND ++ int fileDesc) { ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++int _DEFUN(_close,(fileDesc), ++ int fileDesc) { ++//--------------------------------------------------------------------------------- ++ struct _reent *ptr = _REENT; ++#endif ++ int ret = -1; ++ unsigned int dev = 0; ++ unsigned int fd = -1; ++ ++ if(fileDesc!=-1) { ++ ++ __handle *handle = fileDesc; ++ ++ dev = handle->device; ++ fd = handle->fileStruct; ++ ++ if(devoptab_list[dev]->close_r) ++ ret = devoptab_list[dev]->close_r(ptr,fd); ++ ++ free(fileDesc); ++ } ++ return ret; ++} +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/config.h.in newlib-1.14.0-arm/libgloss/libsysbase/config.h.in +--- newlib-1.14.0/libgloss/libsysbase/config.h.in Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/config.h.in Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,22 @@ ++/* config.h.in. Generated automatically from configure.in by autoheader. */ ++ ++/* Missing syscall names */ ++#undef MISSING_SYSCALL_NAMES ++ ++/* Using ELF format */ ++#undef HAVE_ELF ++ ++/* Using GNU LD */ ++#undef HAVE_GNU_LD ++ ++/* .previous directive allowed */ ++#undef HAVE_ASM_PREVIOUS_DIRECTIVE ++ ++/* .pushsection/.popsection directives allowed */ ++#undef HAVE_ASM_POPSECTION_DIRECTIVE ++ ++/* support for section attributes */ ++#undef HAVE_SECTION_ATTRIBUTES ++ ++/* symbol prefix */ ++#undef __SYMBOL_PREFIX +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/configure newlib-1.14.0-arm/libgloss/libsysbase/configure +--- newlib-1.14.0/libgloss/libsysbase/configure Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/configure Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,1461 @@ ++#! /bin/sh ++ ++# Guess values for system-dependent variables and create Makefiles. ++# Generated automatically using autoconf version 2.13 ++# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. ++# ++# This configure script is free software; the Free Software Foundation ++# gives unlimited permission to copy, distribute and modify it. ++ ++# Defaults: ++ac_help= ++ac_default_prefix=/usr/local ++# Any additions from configure.in: ++ ++# Initialize some variables set by options. ++# The variables have the same names as the options, with ++# dashes changed to underlines. ++build=NONE ++cache_file=./config.cache ++exec_prefix=NONE ++host=NONE ++no_create= ++nonopt=NONE ++no_recursion= ++prefix=NONE ++program_prefix=NONE ++program_suffix=NONE ++program_transform_name=s,x,x, ++silent= ++site= ++srcdir= ++target=NONE ++verbose= ++x_includes=NONE ++x_libraries=NONE ++bindir='${exec_prefix}/bin' ++sbindir='${exec_prefix}/sbin' ++libexecdir='${exec_prefix}/libexec' ++datadir='${prefix}/share' ++sysconfdir='${prefix}/etc' ++sharedstatedir='${prefix}/com' ++localstatedir='${prefix}/var' ++libdir='${exec_prefix}/lib' ++includedir='${prefix}/include' ++oldincludedir='/usr/include' ++infodir='${prefix}/info' ++mandir='${prefix}/man' ++ ++# Initialize some other variables. ++subdirs= ++MFLAGS= MAKEFLAGS= ++SHELL=${CONFIG_SHELL-/bin/sh} ++# Maximum number of lines to put in a shell here document. ++ac_max_here_lines=12 ++ ++ac_prev= ++for ac_option ++do ++ ++ # If the previous option needs an argument, assign it. ++ if test -n "$ac_prev"; then ++ eval "$ac_prev=\$ac_option" ++ ac_prev= ++ continue ++ fi ++ ++ case "$ac_option" in ++ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; ++ *) ac_optarg= ;; ++ esac ++ ++ # Accept the important Cygnus configure options, so we can diagnose typos. ++ ++ case "$ac_option" in ++ ++ -bindir | --bindir | --bindi | --bind | --bin | --bi) ++ ac_prev=bindir ;; ++ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) ++ bindir="$ac_optarg" ;; ++ ++ -build | --build | --buil | --bui | --bu) ++ ac_prev=build ;; ++ -build=* | --build=* | --buil=* | --bui=* | --bu=*) ++ build="$ac_optarg" ;; ++ ++ -cache-file | --cache-file | --cache-fil | --cache-fi \ ++ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ++ ac_prev=cache_file ;; ++ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ ++ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) ++ cache_file="$ac_optarg" ;; ++ ++ -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ++ ac_prev=datadir ;; ++ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ ++ | --da=*) ++ datadir="$ac_optarg" ;; ++ ++ -disable-* | --disable-*) ++ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` ++ # Reject names that are not valid shell variable names. ++ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then ++ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } ++ fi ++ ac_feature=`echo $ac_feature| sed 's/-/_/g'` ++ eval "enable_${ac_feature}=no" ;; ++ ++ -enable-* | --enable-*) ++ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` ++ # Reject names that are not valid shell variable names. ++ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then ++ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } ++ fi ++ ac_feature=`echo $ac_feature| sed 's/-/_/g'` ++ case "$ac_option" in ++ *=*) ;; ++ *) ac_optarg=yes ;; ++ esac ++ eval "enable_${ac_feature}='$ac_optarg'" ;; ++ ++ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ ++ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ ++ | --exec | --exe | --ex) ++ ac_prev=exec_prefix ;; ++ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ ++ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ ++ | --exec=* | --exe=* | --ex=*) ++ exec_prefix="$ac_optarg" ;; ++ ++ -gas | --gas | --ga | --g) ++ # Obsolete; use --with-gas. ++ with_gas=yes ;; ++ ++ -help | --help | --hel | --he) ++ # Omit some internal or obsolete options to make the list less imposing. ++ # This message is too long to be a string in the A/UX 3.1 sh. ++ cat << EOF ++Usage: configure [options] [host] ++Options: [defaults in brackets after descriptions] ++Configuration: ++ --cache-file=FILE cache test results in FILE ++ --help print this message ++ --no-create do not create output files ++ --quiet, --silent do not print \`checking...' messages ++ --version print the version of autoconf that created configure ++Directory and file names: ++ --prefix=PREFIX install architecture-independent files in PREFIX ++ [$ac_default_prefix] ++ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX ++ [same as prefix] ++ --bindir=DIR user executables in DIR [EPREFIX/bin] ++ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] ++ --libexecdir=DIR program executables in DIR [EPREFIX/libexec] ++ --datadir=DIR read-only architecture-independent data in DIR ++ [PREFIX/share] ++ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] ++ --sharedstatedir=DIR modifiable architecture-independent data in DIR ++ [PREFIX/com] ++ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] ++ --libdir=DIR object code libraries in DIR [EPREFIX/lib] ++ --includedir=DIR C header files in DIR [PREFIX/include] ++ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] ++ --infodir=DIR info documentation in DIR [PREFIX/info] ++ --mandir=DIR man documentation in DIR [PREFIX/man] ++ --srcdir=DIR find the sources in DIR [configure dir or ..] ++ --program-prefix=PREFIX prepend PREFIX to installed program names ++ --program-suffix=SUFFIX append SUFFIX to installed program names ++ --program-transform-name=PROGRAM ++ run sed PROGRAM on installed program names ++EOF ++ cat << EOF ++Host type: ++ --build=BUILD configure for building on BUILD [BUILD=HOST] ++ --host=HOST configure for HOST [guessed] ++ --target=TARGET configure for TARGET [TARGET=HOST] ++Features and packages: ++ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) ++ --enable-FEATURE[=ARG] include FEATURE [ARG=yes] ++ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] ++ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) ++ --x-includes=DIR X include files are in DIR ++ --x-libraries=DIR X library files are in DIR ++EOF ++ if test -n "$ac_help"; then ++ echo "--enable and --with options recognized:$ac_help" ++ fi ++ exit 0 ;; ++ ++ -host | --host | --hos | --ho) ++ ac_prev=host ;; ++ -host=* | --host=* | --hos=* | --ho=*) ++ host="$ac_optarg" ;; ++ ++ -includedir | --includedir | --includedi | --included | --include \ ++ | --includ | --inclu | --incl | --inc) ++ ac_prev=includedir ;; ++ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ ++ | --includ=* | --inclu=* | --incl=* | --inc=*) ++ includedir="$ac_optarg" ;; ++ ++ -infodir | --infodir | --infodi | --infod | --info | --inf) ++ ac_prev=infodir ;; ++ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) ++ infodir="$ac_optarg" ;; ++ ++ -libdir | --libdir | --libdi | --libd) ++ ac_prev=libdir ;; ++ -libdir=* | --libdir=* | --libdi=* | --libd=*) ++ libdir="$ac_optarg" ;; ++ ++ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ ++ | --libexe | --libex | --libe) ++ ac_prev=libexecdir ;; ++ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ ++ | --libexe=* | --libex=* | --libe=*) ++ libexecdir="$ac_optarg" ;; ++ ++ -localstatedir | --localstatedir | --localstatedi | --localstated \ ++ | --localstate | --localstat | --localsta | --localst \ ++ | --locals | --local | --loca | --loc | --lo) ++ ac_prev=localstatedir ;; ++ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ ++ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ ++ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) ++ localstatedir="$ac_optarg" ;; ++ ++ -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ++ ac_prev=mandir ;; ++ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) ++ mandir="$ac_optarg" ;; ++ ++ -nfp | --nfp | --nf) ++ # Obsolete; use --without-fp. ++ with_fp=no ;; ++ ++ -no-create | --no-create | --no-creat | --no-crea | --no-cre \ ++ | --no-cr | --no-c) ++ no_create=yes ;; ++ ++ -no-recursion | --no-recursion | --no-recursio | --no-recursi \ ++ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ++ no_recursion=yes ;; ++ ++ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ ++ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ ++ | --oldin | --oldi | --old | --ol | --o) ++ ac_prev=oldincludedir ;; ++ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ ++ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ ++ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) ++ oldincludedir="$ac_optarg" ;; ++ ++ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ++ ac_prev=prefix ;; ++ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) ++ prefix="$ac_optarg" ;; ++ ++ -program-prefix | --program-prefix | --program-prefi | --program-pref \ ++ | --program-pre | --program-pr | --program-p) ++ ac_prev=program_prefix ;; ++ -program-prefix=* | --program-prefix=* | --program-prefi=* \ ++ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) ++ program_prefix="$ac_optarg" ;; ++ ++ -program-suffix | --program-suffix | --program-suffi | --program-suff \ ++ | --program-suf | --program-su | --program-s) ++ ac_prev=program_suffix ;; ++ -program-suffix=* | --program-suffix=* | --program-suffi=* \ ++ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) ++ program_suffix="$ac_optarg" ;; ++ ++ -program-transform-name | --program-transform-name \ ++ | --program-transform-nam | --program-transform-na \ ++ | --program-transform-n | --program-transform- \ ++ | --program-transform | --program-transfor \ ++ | --program-transfo | --program-transf \ ++ | --program-trans | --program-tran \ ++ | --progr-tra | --program-tr | --program-t) ++ ac_prev=program_transform_name ;; ++ -program-transform-name=* | --program-transform-name=* \ ++ | --program-transform-nam=* | --program-transform-na=* \ ++ | --program-transform-n=* | --program-transform-=* \ ++ | --program-transform=* | --program-transfor=* \ ++ | --program-transfo=* | --program-transf=* \ ++ | --program-trans=* | --program-tran=* \ ++ | --progr-tra=* | --program-tr=* | --program-t=*) ++ program_transform_name="$ac_optarg" ;; ++ ++ -q | -quiet | --quiet | --quie | --qui | --qu | --q \ ++ | -silent | --silent | --silen | --sile | --sil) ++ silent=yes ;; ++ ++ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ++ ac_prev=sbindir ;; ++ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ ++ | --sbi=* | --sb=*) ++ sbindir="$ac_optarg" ;; ++ ++ -sharedstatedir | --sharedstatedir | --sharedstatedi \ ++ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ ++ | --sharedst | --shareds | --shared | --share | --shar \ ++ | --sha | --sh) ++ ac_prev=sharedstatedir ;; ++ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ ++ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ ++ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ ++ | --sha=* | --sh=*) ++ sharedstatedir="$ac_optarg" ;; ++ ++ -site | --site | --sit) ++ ac_prev=site ;; ++ -site=* | --site=* | --sit=*) ++ site="$ac_optarg" ;; ++ ++ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ++ ac_prev=srcdir ;; ++ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) ++ srcdir="$ac_optarg" ;; ++ ++ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ ++ | --syscon | --sysco | --sysc | --sys | --sy) ++ ac_prev=sysconfdir ;; ++ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ ++ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) ++ sysconfdir="$ac_optarg" ;; ++ ++ -target | --target | --targe | --targ | --tar | --ta | --t) ++ ac_prev=target ;; ++ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) ++ target="$ac_optarg" ;; ++ ++ -v | -verbose | --verbose | --verbos | --verbo | --verb) ++ verbose=yes ;; ++ ++ -version | --version | --versio | --versi | --vers) ++ echo "configure generated by autoconf version 2.13" ++ exit 0 ;; ++ ++ -with-* | --with-*) ++ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` ++ # Reject names that are not valid shell variable names. ++ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then ++ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } ++ fi ++ ac_package=`echo $ac_package| sed 's/-/_/g'` ++ case "$ac_option" in ++ *=*) ;; ++ *) ac_optarg=yes ;; ++ esac ++ eval "with_${ac_package}='$ac_optarg'" ;; ++ ++ -without-* | --without-*) ++ ac_package=`echo $ac_option|sed -e 's/-*without-//'` ++ # Reject names that are not valid shell variable names. ++ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then ++ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } ++ fi ++ ac_package=`echo $ac_package| sed 's/-/_/g'` ++ eval "with_${ac_package}=no" ;; ++ ++ --x) ++ # Obsolete; use --with-x. ++ with_x=yes ;; ++ ++ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ ++ | --x-incl | --x-inc | --x-in | --x-i) ++ ac_prev=x_includes ;; ++ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ ++ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) ++ x_includes="$ac_optarg" ;; ++ ++ -x-libraries | --x-libraries | --x-librarie | --x-librari \ ++ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ++ ac_prev=x_libraries ;; ++ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ ++ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) ++ x_libraries="$ac_optarg" ;; ++ ++ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } ++ ;; ++ ++ *) ++ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then ++ echo "configure: warning: $ac_option: invalid host type" 1>&2 ++ fi ++ if test "x$nonopt" != xNONE; then ++ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ++ fi ++ nonopt="$ac_option" ++ ;; ++ ++ esac ++done ++ ++if test -n "$ac_prev"; then ++ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } ++fi ++ ++trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 ++ ++# File descriptor usage: ++# 0 standard input ++# 1 file creation ++# 2 errors and warnings ++# 3 some systems may open it to /dev/tty ++# 4 used on the Kubota Titan ++# 6 checking for... messages and results ++# 5 compiler messages saved in config.log ++if test "$silent" = yes; then ++ exec 6>/dev/null ++else ++ exec 6>&1 ++fi ++exec 5>./config.log ++ ++echo "\ ++This file contains any messages produced by compilers while ++running configure, to aid debugging if configure makes a mistake. ++" 1>&5 ++ ++# Strip out --no-create and --no-recursion so they do not pile up. ++# Also quote any args containing shell metacharacters. ++ac_configure_args= ++for ac_arg ++do ++ case "$ac_arg" in ++ -no-create | --no-create | --no-creat | --no-crea | --no-cre \ ++ | --no-cr | --no-c) ;; ++ -no-recursion | --no-recursion | --no-recursio | --no-recursi \ ++ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; ++ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) ++ ac_configure_args="$ac_configure_args '$ac_arg'" ;; ++ *) ac_configure_args="$ac_configure_args $ac_arg" ;; ++ esac ++done ++ ++# NLS nuisances. ++# Only set these to C if already set. These must not be set unconditionally ++# because not all systems understand e.g. LANG=C (notably SCO). ++# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! ++# Non-C LC_CTYPE values break the ctype check. ++if test "${LANG+set}" = set; then LANG=C; export LANG; fi ++if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi ++if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi ++if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi ++ ++# confdefs.h avoids OS command line length limits that DEFS can exceed. ++rm -rf conftest* confdefs.h ++# AIX cpp loses on an empty file, so make sure it contains at least a newline. ++echo > confdefs.h ++ ++# A filename unique to this package, relative to the directory that ++# configure is in, which we can look for to find out if srcdir is correct. ++ac_unique_file=close.c ++ ++# Find the source files, if location was not specified. ++if test -z "$srcdir"; then ++ ac_srcdir_defaulted=yes ++ # Try the directory containing this script, then its parent. ++ ac_prog=$0 ++ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` ++ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. ++ srcdir=$ac_confdir ++ if test ! -r $srcdir/$ac_unique_file; then ++ srcdir=.. ++ fi ++else ++ ac_srcdir_defaulted=no ++fi ++if test ! -r $srcdir/$ac_unique_file; then ++ if test "$ac_srcdir_defaulted" = yes; then ++ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } ++ else ++ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } ++ fi ++fi ++srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` ++ ++# Prefer explicitly selected file to automatically selected ones. ++if test -z "$CONFIG_SITE"; then ++ if test "x$prefix" != xNONE; then ++ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" ++ else ++ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" ++ fi ++fi ++for ac_site_file in $CONFIG_SITE; do ++ if test -r "$ac_site_file"; then ++ echo "loading site script $ac_site_file" ++ . "$ac_site_file" ++ fi ++done ++ ++if test -r "$cache_file"; then ++ echo "loading cache $cache_file" ++ . $cache_file ++else ++ echo "creating cache $cache_file" ++ > $cache_file ++fi ++ ++ac_ext=c ++# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ++ac_cpp='$CPP $CPPFLAGS' ++ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ++ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' ++cross_compiling=$ac_cv_prog_cc_cross ++ ++ac_exeext= ++ac_objext=o ++if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then ++ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. ++ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then ++ ac_n= ac_c=' ++' ac_t=' ' ++ else ++ ac_n=-n ac_c= ac_t= ++ fi ++else ++ ac_n= ac_c='\c' ac_t= ++fi ++ ++ ++ ++ ++if test "${enable_shared}" = "yes" ; then ++ echo "Shared libraries not supported for cross compiling, ignored" ++fi ++ ++if test "$srcdir" = "." ; then ++ if test "${with_target_subdir}" != "." ; then ++ libgloss_topdir="${srcdir}/${with_multisrctop}../../.." ++ else ++ libgloss_topdir="${srcdir}/${with_multisrctop}../.." ++ fi ++else ++ libgloss_topdir="${srcdir}/../.." ++fi ++ac_aux_dir= ++for ac_dir in $libgloss_topdir $srcdir/$libgloss_topdir; do ++ if test -f $ac_dir/install-sh; then ++ ac_aux_dir=$ac_dir ++ ac_install_sh="$ac_aux_dir/install-sh -c" ++ break ++ elif test -f $ac_dir/install.sh; then ++ ac_aux_dir=$ac_dir ++ ac_install_sh="$ac_aux_dir/install.sh -c" ++ break ++ fi ++done ++if test -z "$ac_aux_dir"; then ++ { echo "configure: error: can not find install-sh or install.sh in $libgloss_topdir $srcdir/$libgloss_topdir" 1>&2; exit 1; } ++fi ++ac_config_guess=$ac_aux_dir/config.guess ++ac_config_sub=$ac_aux_dir/config.sub ++ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. ++ ++ ++ ++# Do some error checking and defaulting for the host and target type. ++# The inputs are: ++# configure --host=HOST --target=TARGET --build=BUILD NONOPT ++# ++# The rules are: ++# 1. You are not allowed to specify --host, --target, and nonopt at the ++# same time. ++# 2. Host defaults to nonopt. ++# 3. If nonopt is not specified, then host defaults to the current host, ++# as determined by config.guess. ++# 4. Target and build default to nonopt. ++# 5. If nonopt is not specified, then target and build default to host. ++ ++# The aliases save the names the user supplied, while $host etc. ++# will get canonicalized. ++case $host---$target---$nonopt in ++NONE---*---* | *---NONE---* | *---*---NONE) ;; ++*) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;; ++esac ++ ++ ++# Make sure we can run config.sub. ++if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : ++else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } ++fi ++ ++echo $ac_n "checking host system type""... $ac_c" 1>&6 ++echo "configure:588: checking host system type" >&5 ++ ++host_alias=$host ++case "$host_alias" in ++NONE) ++ case $nonopt in ++ NONE) ++ if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : ++ else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } ++ fi ;; ++ *) host_alias=$nonopt ;; ++ esac ;; ++esac ++ ++host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` ++host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` ++host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` ++host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++echo "$ac_t""$host" 1>&6 ++ ++echo $ac_n "checking target system type""... $ac_c" 1>&6 ++echo "configure:609: checking target system type" >&5 ++ ++target_alias=$target ++case "$target_alias" in ++NONE) ++ case $nonopt in ++ NONE) target_alias=$host_alias ;; ++ *) target_alias=$nonopt ;; ++ esac ;; ++esac ++ ++target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias` ++target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` ++target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` ++target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++echo "$ac_t""$target" 1>&6 ++ ++echo $ac_n "checking build system type""... $ac_c" 1>&6 ++echo "configure:627: checking build system type" >&5 ++ ++build_alias=$build ++case "$build_alias" in ++NONE) ++ case $nonopt in ++ NONE) build_alias=$host_alias ;; ++ *) build_alias=$nonopt ;; ++ esac ;; ++esac ++ ++build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` ++build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` ++build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` ++build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ++echo "$ac_t""$build" 1>&6 ++ ++test "$host_alias" != "$target_alias" && ++ test "$program_prefix$program_suffix$program_transform_name" = \ ++ NONENONEs,x,x, && ++ program_prefix=${target_alias}- ++ ++if test "$program_transform_name" = s,x,x,; then ++ program_transform_name= ++else ++ # Double any \ or $. echo might interpret backslashes. ++ cat <<\EOF_SED > conftestsed ++s,\\,\\\\,g; s,\$,$$,g ++EOF_SED ++ program_transform_name="`echo $program_transform_name|sed -f conftestsed`" ++ rm -f conftestsed ++fi ++test "$program_prefix" != NONE && ++ program_transform_name="s,^,${program_prefix},; $program_transform_name" ++# Use a double $ so make ignores it. ++test "$program_suffix" != NONE && ++ program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" ++ ++# sed with no file args requires a program. ++test "$program_transform_name" = "" && program_transform_name="s,x,x," ++ ++ ++# Find a good install program. We prefer a C program (faster), ++# so one script is as good as another. But avoid the broken or ++# incompatible versions: ++# SysV /etc/install, /usr/sbin/install ++# SunOS /usr/etc/install ++# IRIX /sbin/install ++# AIX /bin/install ++# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag ++# AFS /usr/afsws/bin/install, which mishandles nonexistent args ++# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" ++# ./install, which can be erroneously created by make from ./install.sh. ++echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 ++echo "configure:681: checking for a BSD compatible install" >&5 ++if test -z "$INSTALL"; then ++if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" ++ for ac_dir in $PATH; do ++ # Account for people who put trailing slashes in PATH elements. ++ case "$ac_dir/" in ++ /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; ++ *) ++ # OSF1 and SCO ODT 3.0 have their own names for install. ++ # Don't use installbsd from OSF since it installs stuff as root ++ # by default. ++ for ac_prog in ginstall scoinst install; do ++ if test -f $ac_dir/$ac_prog; then ++ if test $ac_prog = install && ++ grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then ++ # AIX install. It has an incompatible calling convention. ++ : ++ else ++ ac_cv_path_install="$ac_dir/$ac_prog -c" ++ break 2 ++ fi ++ fi ++ done ++ ;; ++ esac ++ done ++ IFS="$ac_save_IFS" ++ ++fi ++ if test "${ac_cv_path_install+set}" = set; then ++ INSTALL="$ac_cv_path_install" ++ else ++ # As a last resort, use the slow shell script. We don't cache a ++ # path for INSTALL within a source directory, because that will ++ # break other packages using the cache if that directory is ++ # removed, or if the path is relative. ++ INSTALL="$ac_install_sh" ++ fi ++fi ++echo "$ac_t""$INSTALL" 1>&6 ++ ++# Use test -z because SunOS4 sh mishandles braces in ${var-val}. ++# It thinks the first close brace ends the variable substitution. ++test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' ++ ++test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' ++ ++test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' ++ ++ ++# FIXME: We temporarily define our own version of AC_PROG_CC. This is ++# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We ++# are building a library that must be included in all links, so we ++# can't link an executable until this lib is built. ++# autoconf should provide a way to do this. ++ ++ ++ ++cat >> confdefs.h <<\EOF ++#define HAVE_GNU_LD 1 ++EOF ++ ++case "${target}" in ++ *-*-cygwin*) ++ ;; ++ a29k-amd-udi) ++ ;; ++ arc-*-*) ++ ;; ++ arm-*-pe) ++ ;; ++ arm-*-*) ++ ;; ++ strongarm-*-*) ++ ;; ++ d10v*) ++ ;; ++ h8300*-*-*) ++ ;; ++ h8500-*-*) ++ ;; ++ i345686-*-sco*) ++ ;; ++ m32r-*-*) ++ ;; ++ mn10?00-*-*) ++ ;; ++ powerpcle-*-pe) ++ ;; ++ sh*-*-*) ++ ;; ++ sparc-sun-sunos*) ++ ;; ++ sparc64-*-*) ++ ;; ++ thumb-*-pe) ++ ;; ++ thumb-*-*) ++ ;; ++ v850-*-*) ++ ;; ++ v850e-*-*) ++ ;; ++ v850ea-*-*) ++ ;; ++ w65-*-*) ++ ;; ++ xstormy16-*-*) ++ ;; ++ z8k-*-*) ++ ;; ++ *) ++ cat >> confdefs.h <<\EOF ++#define MISSING_SYSCALL_NAMES 1 ++EOF ++ ++ ;; ++esac ++ ++case "${target}" in ++ *-*-elf) ++ cat >> confdefs.h <<\EOF ++#define HAVE_ELF 1 ++EOF ++ ++ ++ echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6 ++echo "configure:811: checking for .previous assembler directive" >&5 ++if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ cat > conftest.s <&5; (eval $ac_try) 2>&5; }; }; then ++ cat >> confdefs.h <<\EOF ++#define HAVE_ASM_PREVIOUS_DIRECTIVE 1 ++EOF ++ ++ fi ++ rm -f conftest* ++fi ++ ++echo "$ac_t""$libc_cv_asm_previous_directive" 1>&6 ++ ++ echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6 ++echo "configure:831: checking for .popsection assembler directive" >&5 ++if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ cat > conftest.s <&5; (eval $ac_try) 2>&5; }; }; then ++ cat >> confdefs.h <<\EOF ++#define HAVE_ASM_POPSECTION_DIRECTIVE 1 ++EOF ++ ++ fi ++ rm -f conftest* ++fi ++ ++echo "$ac_t""$libc_cv_asm_popsection_directive" 1>&6 ++ ++ echo $ac_n "checking for section attributes""... $ac_c" 1>&6 ++echo "configure:851: checking for section attributes" >&5 ++if eval "test \"`echo '$''{'libc_cv_section_attributes'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ cat > conftest.c <&5; (eval $ac_try) 2>&5; }; }; then ++ cat >> confdefs.h <<\EOF ++#define HAVE_SECTION_ATTRIBUTES 1 ++EOF ++ ++ fi ++ rm -f conftest* ++fi ++ ++echo "$ac_t""$libc_cv_section_attributes" 1>&6 ++ ;; ++esac ++ ++echo $ac_n "checking for function prefix""... $ac_c" 1>&6 ++echo "configure:873: checking for function prefix" >&5 ++if eval "test \"`echo '$''{'libc_dollar_prefix'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ cat > conftest.c <<\EOF ++foo () { } ++EOF ++if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo" > /dev/null'; { (eval echo configure:880: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; ++then ++ libc_dollar_prefix=yes ++else ++ libc_dollar_prefix=no ++fi ++rm -f conftest* ++fi ++ ++echo "$ac_t""$libc_dollar_prefix" 1>&6 ++if test $libc_dollar_prefix = yes ; then ++ cat >> confdefs.h <<\EOF ++#define __SYMBOL_PREFIX "$" ++EOF ++ ++else ++ cat >> confdefs.h <<\EOF ++#define __SYMBOL_PREFIX "" ++EOF ++ ++fi ++ ++# Extract the first word of "gcc", so it can be a program name with args. ++set dummy gcc; ac_word=$2 ++echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ++echo "configure:905: checking for $ac_word" >&5 ++if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ if test -n "$CC"; then ++ ac_cv_prog_CC="$CC" # Let the user override the test. ++else ++ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ++ ac_dummy="$PATH" ++ for ac_dir in $ac_dummy; do ++ test -z "$ac_dir" && ac_dir=. ++ if test -f $ac_dir/$ac_word; then ++ ac_cv_prog_CC="gcc" ++ break ++ fi ++ done ++ IFS="$ac_save_ifs" ++fi ++fi ++CC="$ac_cv_prog_CC" ++if test -n "$CC"; then ++ echo "$ac_t""$CC" 1>&6 ++else ++ echo "$ac_t""no" 1>&6 ++fi ++ ++if test -z "$CC"; then ++ # Extract the first word of "cc", so it can be a program name with args. ++set dummy cc; ac_word=$2 ++echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ++echo "configure:935: checking for $ac_word" >&5 ++if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ if test -n "$CC"; then ++ ac_cv_prog_CC="$CC" # Let the user override the test. ++else ++ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ++ ac_prog_rejected=no ++ ac_dummy="$PATH" ++ for ac_dir in $ac_dummy; do ++ test -z "$ac_dir" && ac_dir=. ++ if test -f $ac_dir/$ac_word; then ++ if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then ++ ac_prog_rejected=yes ++ continue ++ fi ++ ac_cv_prog_CC="cc" ++ break ++ fi ++ done ++ IFS="$ac_save_ifs" ++if test $ac_prog_rejected = yes; then ++ # We found a bogon in the path, so make sure we never use it. ++ set dummy $ac_cv_prog_CC ++ shift ++ if test $# -gt 0; then ++ # We chose a different compiler from the bogus one. ++ # However, it has the same basename, so the bogon will be chosen ++ # first if we set CC to just the basename; use the full file name. ++ shift ++ set dummy "$ac_dir/$ac_word" "$@" ++ shift ++ ac_cv_prog_CC="$@" ++ fi ++fi ++fi ++fi ++CC="$ac_cv_prog_CC" ++if test -n "$CC"; then ++ echo "$ac_t""$CC" 1>&6 ++else ++ echo "$ac_t""no" 1>&6 ++fi ++ ++ test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } ++fi ++ ++echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 ++echo "configure:984: checking whether we are using GNU C" >&5 ++if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ++ ac_cv_prog_gcc=yes ++else ++ ac_cv_prog_gcc=no ++fi ++fi ++ ++echo "$ac_t""$ac_cv_prog_gcc" 1>&6 ++ ++if test $ac_cv_prog_gcc = yes; then ++ GCC=yes ++ ac_test_CFLAGS="${CFLAGS+set}" ++ ac_save_CFLAGS="$CFLAGS" ++ CFLAGS= ++ echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ++echo "configure:1008: checking whether ${CC-cc} accepts -g" >&5 ++if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ echo 'void f(){}' > conftest.c ++if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then ++ ac_cv_prog_cc_g=yes ++else ++ ac_cv_prog_cc_g=no ++fi ++rm -f conftest* ++ ++fi ++ ++echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 ++ if test "$ac_test_CFLAGS" = set; then ++ CFLAGS="$ac_save_CFLAGS" ++ elif test $ac_cv_prog_cc_g = yes; then ++ CFLAGS="-g -O2" ++ else ++ CFLAGS="-O2" ++ fi ++else ++ GCC= ++ test "${CFLAGS+set}" = set || CFLAGS="-g" ++fi ++ ++AS=${AS-as} ++ ++AR=${AR-ar} ++ ++LD=${LD-ld} ++ ++# Extract the first word of "ranlib", so it can be a program name with args. ++set dummy ranlib; ac_word=$2 ++echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ++echo "configure:1044: checking for $ac_word" >&5 ++if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then ++ echo $ac_n "(cached) $ac_c" 1>&6 ++else ++ if test -n "$RANLIB"; then ++ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. ++else ++ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ++ ac_dummy="$PATH" ++ for ac_dir in $ac_dummy; do ++ test -z "$ac_dir" && ac_dir=. ++ if test -f $ac_dir/$ac_word; then ++ ac_cv_prog_RANLIB="ranlib" ++ break ++ fi ++ done ++ IFS="$ac_save_ifs" ++ test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" ++fi ++fi ++RANLIB="$ac_cv_prog_RANLIB" ++if test -n "$RANLIB"; then ++ echo "$ac_t""$RANLIB" 1>&6 ++else ++ echo "$ac_t""no" 1>&6 ++fi ++ ++ ++host_makefile_frag=${srcdir}/../config/default.mh ++ ++host_makefile_frag_path=$host_makefile_frag ++ ++ ++ ++trap '' 1 2 15 ++cat > confcache <<\EOF ++# This file is a shell script that caches the results of configure ++# tests run on this system so they can be shared between configure ++# scripts and configure runs. It is not useful on other systems. ++# If it contains results you don't want to keep, you may remove or edit it. ++# ++# By default, configure uses ./config.cache as the cache file, ++# creating it if it does not exist already. You can give configure ++# the --cache-file=FILE option to use a different cache file; that is ++# what configure does when it calls configure scripts in ++# subdirectories, so they share the cache. ++# Giving --cache-file=/dev/null disables caching, for debugging configure. ++# config.status only pays attention to the cache file if you give it the ++# --recheck option to rerun configure. ++# ++EOF ++# The following way of writing the cache mishandles newlines in values, ++# but we know of no workaround that is simple, portable, and efficient. ++# So, don't put newlines in cache variables' values. ++# Ultrix sh set writes to stderr and can't be redirected directly, ++# and sets the high bit in the cache file unless we assign to the vars. ++(set) 2>&1 | ++ case `(ac_space=' '; set | grep ac_space) 2>&1` in ++ *ac_space=\ *) ++ # `set' does not quote correctly, so add quotes (double-quote substitution ++ # turns \\\\ into \\, and sed turns \\ into \). ++ sed -n \ ++ -e "s/'/'\\\\''/g" \ ++ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ++ ;; ++ *) ++ # `set' quotes correctly as required by POSIX, so do not add quotes. ++ sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ++ ;; ++ esac >> confcache ++if cmp -s $cache_file confcache; then ++ : ++else ++ if test -w $cache_file; then ++ echo "updating cache $cache_file" ++ cat confcache > $cache_file ++ else ++ echo "not updating unwritable cache $cache_file" ++ fi ++fi ++rm -f confcache ++ ++trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 ++ ++test "x$prefix" = xNONE && prefix=$ac_default_prefix ++# Let make expand exec_prefix. ++test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' ++ ++# Any assignment to VPATH causes Sun make to only execute ++# the first set of double-colon rules, so remove it if not needed. ++# If there is a colon in the path, we need to keep it. ++if test "x$srcdir" = x.; then ++ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' ++fi ++ ++trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 ++ ++DEFS=-DHAVE_CONFIG_H ++ ++# Without the "./", some shells look in PATH for config.status. ++: ${CONFIG_STATUS=./config.status} ++ ++echo creating $CONFIG_STATUS ++rm -f $CONFIG_STATUS ++cat > $CONFIG_STATUS </dev/null | sed 1q`: ++# ++# $0 $ac_configure_args ++# ++# Compiler output produced by configure, useful for debugging ++# configure, is in ./config.log if it exists. ++ ++ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" ++for ac_option ++do ++ case "\$ac_option" in ++ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ++ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" ++ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; ++ -version | --version | --versio | --versi | --vers | --ver | --ve | --v) ++ echo "$CONFIG_STATUS generated by autoconf version 2.13" ++ exit 0 ;; ++ -help | --help | --hel | --he | --h) ++ echo "\$ac_cs_usage"; exit 0 ;; ++ *) echo "\$ac_cs_usage"; exit 1 ;; ++ esac ++done ++ ++ac_given_srcdir=$srcdir ++ac_given_INSTALL="$INSTALL" ++ ++trap 'rm -fr `echo "Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 ++EOF ++cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF ++$ac_vpsub ++$extrasub ++s%@SHELL@%$SHELL%g ++s%@CFLAGS@%$CFLAGS%g ++s%@CPPFLAGS@%$CPPFLAGS%g ++s%@CXXFLAGS@%$CXXFLAGS%g ++s%@FFLAGS@%$FFLAGS%g ++s%@DEFS@%$DEFS%g ++s%@LDFLAGS@%$LDFLAGS%g ++s%@LIBS@%$LIBS%g ++s%@exec_prefix@%$exec_prefix%g ++s%@prefix@%$prefix%g ++s%@program_transform_name@%$program_transform_name%g ++s%@bindir@%$bindir%g ++s%@sbindir@%$sbindir%g ++s%@libexecdir@%$libexecdir%g ++s%@datadir@%$datadir%g ++s%@sysconfdir@%$sysconfdir%g ++s%@sharedstatedir@%$sharedstatedir%g ++s%@localstatedir@%$localstatedir%g ++s%@libdir@%$libdir%g ++s%@includedir@%$includedir%g ++s%@oldincludedir@%$oldincludedir%g ++s%@infodir@%$infodir%g ++s%@mandir@%$mandir%g ++s%@host@%$host%g ++s%@host_alias@%$host_alias%g ++s%@host_cpu@%$host_cpu%g ++s%@host_vendor@%$host_vendor%g ++s%@host_os@%$host_os%g ++s%@target@%$target%g ++s%@target_alias@%$target_alias%g ++s%@target_cpu@%$target_cpu%g ++s%@target_vendor@%$target_vendor%g ++s%@target_os@%$target_os%g ++s%@build@%$build%g ++s%@build_alias@%$build_alias%g ++s%@build_cpu@%$build_cpu%g ++s%@build_vendor@%$build_vendor%g ++s%@build_os@%$build_os%g ++s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g ++s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g ++s%@INSTALL_DATA@%$INSTALL_DATA%g ++s%@CC@%$CC%g ++s%@AS@%$AS%g ++s%@AR@%$AR%g ++s%@LD@%$LD%g ++s%@RANLIB@%$RANLIB%g ++s%@host_makefile_frag_path@%$host_makefile_frag_path%g ++/@host_makefile_frag@/r $host_makefile_frag ++s%@host_makefile_frag@%%g ++ ++CEOF ++EOF ++ ++cat >> $CONFIG_STATUS <<\EOF ++ ++# Split the substitutions into bite-sized pieces for seds with ++# small command number limits, like on Digital OSF/1 and HP-UX. ++ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. ++ac_file=1 # Number of current file. ++ac_beg=1 # First line for current file. ++ac_end=$ac_max_sed_cmds # Line after last line for current file. ++ac_more_lines=: ++ac_sed_cmds="" ++while $ac_more_lines; do ++ if test $ac_beg -gt 1; then ++ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file ++ else ++ sed "${ac_end}q" conftest.subs > conftest.s$ac_file ++ fi ++ if test ! -s conftest.s$ac_file; then ++ ac_more_lines=false ++ rm -f conftest.s$ac_file ++ else ++ if test -z "$ac_sed_cmds"; then ++ ac_sed_cmds="sed -f conftest.s$ac_file" ++ else ++ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" ++ fi ++ ac_file=`expr $ac_file + 1` ++ ac_beg=$ac_end ++ ac_end=`expr $ac_end + $ac_max_sed_cmds` ++ fi ++done ++if test -z "$ac_sed_cmds"; then ++ ac_sed_cmds=cat ++fi ++EOF ++ ++cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF ++for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then ++ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". ++ case "$ac_file" in ++ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ++ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; ++ *) ac_file_in="${ac_file}.in" ;; ++ esac ++ ++ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. ++ ++ # Remove last slash and all that follows it. Not all systems have dirname. ++ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` ++ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then ++ # The file is in a subdirectory. ++ test ! -d "$ac_dir" && mkdir "$ac_dir" ++ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" ++ # A "../" for each directory in $ac_dir_suffix. ++ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` ++ else ++ ac_dir_suffix= ac_dots= ++ fi ++ ++ case "$ac_given_srcdir" in ++ .) srcdir=. ++ if test -z "$ac_dots"; then top_srcdir=. ++ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; ++ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; ++ *) # Relative path. ++ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" ++ top_srcdir="$ac_dots$ac_given_srcdir" ;; ++ esac ++ ++ case "$ac_given_INSTALL" in ++ [/$]*) INSTALL="$ac_given_INSTALL" ;; ++ *) INSTALL="$ac_dots$ac_given_INSTALL" ;; ++ esac ++ ++ echo creating "$ac_file" ++ rm -f "$ac_file" ++ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." ++ case "$ac_file" in ++ *Makefile*) ac_comsub="1i\\ ++# $configure_input" ;; ++ *) ac_comsub= ;; ++ esac ++ ++ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` ++ sed -e "$ac_comsub ++s%@configure_input@%$configure_input%g ++s%@srcdir@%$srcdir%g ++s%@top_srcdir@%$top_srcdir%g ++s%@INSTALL@%$INSTALL%g ++" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file ++fi; done ++rm -f conftest.s* ++ ++# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where ++# NAME is the cpp macro being defined and VALUE is the value it is being given. ++# ++# ac_d sets the value in "#define NAME VALUE" lines. ++ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' ++ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' ++ac_dC='\3' ++ac_dD='%g' ++# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". ++ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ++ac_uB='\([ ]\)%\1#\2define\3' ++ac_uC=' ' ++ac_uD='\4%g' ++# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". ++ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' ++ac_eB='$%\1#\2define\3' ++ac_eC=' ' ++ac_eD='%g' ++ ++if test "${CONFIG_HEADERS+set}" != set; then ++EOF ++cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF ++fi ++for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then ++ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". ++ case "$ac_file" in ++ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` ++ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; ++ *) ac_file_in="${ac_file}.in" ;; ++ esac ++ ++ echo creating $ac_file ++ ++ rm -f conftest.frag conftest.in conftest.out ++ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` ++ cat $ac_file_inputs > conftest.in ++ ++EOF ++ ++# Transform confdefs.h into a sed script conftest.vals that substitutes ++# the proper values into config.h.in to produce config.h. And first: ++# Protect against being on the right side of a sed subst in config.status. ++# Protect against being in an unquoted here document in config.status. ++rm -f conftest.vals ++cat > conftest.hdr <<\EOF ++s/[\\&%]/\\&/g ++s%[\\$`]%\\&%g ++s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp ++s%ac_d%ac_u%gp ++s%ac_u%ac_e%gp ++EOF ++sed -n -f conftest.hdr confdefs.h > conftest.vals ++rm -f conftest.hdr ++ ++# This sed command replaces #undef with comments. This is necessary, for ++# example, in the case of _POSIX_SOURCE, which is predefined and required ++# on some systems where configure will not decide to define it. ++cat >> conftest.vals <<\EOF ++s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% ++EOF ++ ++# Break up conftest.vals because some shells have a limit on ++# the size of here documents, and old seds have small limits too. ++ ++rm -f conftest.tail ++while : ++do ++ ac_lines=`grep -c . conftest.vals` ++ # grep -c gives empty output for an empty file on some AIX systems. ++ if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi ++ # Write a limited-size here document to conftest.frag. ++ echo ' cat > conftest.frag <> $CONFIG_STATUS ++ sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS ++ echo 'CEOF ++ sed -f conftest.frag conftest.in > conftest.out ++ rm -f conftest.in ++ mv conftest.out conftest.in ++' >> $CONFIG_STATUS ++ sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail ++ rm -f conftest.vals ++ mv conftest.tail conftest.vals ++done ++rm -f conftest.vals ++ ++cat >> $CONFIG_STATUS <<\EOF ++ rm -f conftest.frag conftest.h ++ echo "/* $ac_file. Generated automatically by configure. */" > conftest.h ++ cat conftest.in >> conftest.h ++ rm -f conftest.in ++ if cmp -s $ac_file conftest.h 2>/dev/null; then ++ echo "$ac_file is unchanged" ++ rm -f conftest.h ++ else ++ # Remove last slash and all that follows it. Not all systems have dirname. ++ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` ++ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then ++ # The file is in a subdirectory. ++ test ! -d "$ac_dir" && mkdir "$ac_dir" ++ fi ++ rm -f $ac_file ++ mv conftest.h $ac_file ++ fi ++fi; done ++ ++EOF ++cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF ++ac_file=Makefile . ${libgloss_topdir}/config-ml.in ++exit 0 ++EOF ++chmod +x $CONFIG_STATUS ++rm -fr confdefs* $ac_clean_files ++test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 ++ ++ ++ +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/configure.in newlib-1.14.0-arm/libgloss/libsysbase/configure.in +--- newlib-1.14.0/libgloss/libsysbase/configure.in Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/configure.in Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,219 @@ ++# Copyright (c) 1995, 1996 Cygnus Support ++# ++# 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. ++# ++# Process this file with autoconf to produce a configure script. ++# ++AC_PREREQ(2.5)dnl ++AC_INIT(close.c) ++AC_CONFIG_HEADER(config.h) ++ ++if test "${enable_shared}" = "yes" ; then ++ echo "Shared libraries not supported for cross compiling, ignored" ++fi ++ ++if test "$srcdir" = "." ; then ++ if test "${with_target_subdir}" != "." ; then ++ libgloss_topdir="${srcdir}/${with_multisrctop}../../.." ++ else ++ libgloss_topdir="${srcdir}/${with_multisrctop}../.." ++ fi ++else ++ libgloss_topdir="${srcdir}/../.." ++fi ++AC_CONFIG_AUX_DIR($libgloss_topdir) ++ ++AC_CANONICAL_SYSTEM ++AC_ARG_PROGRAM ++ ++AC_PROG_INSTALL ++ ++# FIXME: We temporarily define our own version of AC_PROG_CC. This is ++# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We ++# are building a library that must be included in all links, so we ++# can't link an executable until this lib is built. ++# autoconf should provide a way to do this. ++ ++AC_DEFUN(LIB_AC_PROG_CC, ++[AC_BEFORE([$0], [AC_PROG_CPP])dnl ++AC_CHECK_PROG(CC, gcc, gcc) ++if test -z "$CC"; then ++ AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc) ++ test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH]) ++fi ++ ++AC_PROG_CC_GNU ++ ++if test $ac_cv_prog_gcc = yes; then ++ GCC=yes ++dnl Check whether -g works, even if CFLAGS is set, in case the package ++dnl plays around with CFLAGS (such as to build both debugging and ++dnl normal versions of a library), tasteless as that idea is. ++ ac_test_CFLAGS="${CFLAGS+set}" ++ ac_save_CFLAGS="$CFLAGS" ++ CFLAGS= ++ AC_PROG_CC_G ++ if test "$ac_test_CFLAGS" = set; then ++ CFLAGS="$ac_save_CFLAGS" ++ elif test $ac_cv_prog_cc_g = yes; then ++ CFLAGS="-g -O2" ++ else ++ CFLAGS="-O2" ++ fi ++else ++ GCC= ++ test "${CFLAGS+set}" = set || CFLAGS="-g" ++fi ++]) ++ ++AC_DEFINE(HAVE_GNU_LD) ++dnl Make sure syscall names match those being used by newlib ++case "${target}" in ++ *-*-cygwin*) ++ ;; ++ a29k-amd-udi) ++ ;; ++ arc-*-*) ++ ;; ++ arm-*-pe) ++ ;; ++ arm-*-*) ++ ;; ++ strongarm-*-*) ++ ;; ++ d10v*) ++ ;; ++ h8300*-*-*) ++ ;; ++ h8500-*-*) ++ ;; ++ i[3456]86-*-sco*) ++ ;; ++ m32r-*-*) ++ ;; ++ mn10?00-*-*) ++ ;; ++ powerpcle-*-pe) ++ ;; ++ sh*-*-*) ++ ;; ++ sparc-sun-sunos*) ++ ;; ++ sparc64-*-*) ++ ;; ++ thumb-*-pe) ++ ;; ++ thumb-*-*) ++ ;; ++ v850-*-*) ++ ;; ++ v850e-*-*) ++ ;; ++ v850ea-*-*) ++ ;; ++ w65-*-*) ++ ;; ++ xstormy16-*-*) ++ ;; ++ z8k-*-*) ++ ;; ++ *) ++ AC_DEFINE(MISSING_SYSCALL_NAMES) ++ ;; ++esac ++ ++dnl Make sure we know if elf format used ++case "${target}" in ++ *-*-elf) ++ AC_DEFINE(HAVE_ELF) ++ ++ AC_CACHE_CHECK(for .previous assembler directive, ++ libc_cv_asm_previous_directive, [dnl ++ cat > conftest.s <&AC_FD_CC); then ++ AC_DEFINE(HAVE_ASM_PREVIOUS_DIRECTIVE) ++ fi ++ rm -f conftest*]) ++ ++ AC_CACHE_CHECK(for .popsection assembler directive, ++ libc_cv_asm_popsection_directive, [dnl ++ cat > conftest.s <&AC_FD_CC); then ++ AC_DEFINE(HAVE_ASM_POPSECTION_DIRECTIVE) ++ fi ++ rm -f conftest*]) ++ ++ AC_CACHE_CHECK(for section attributes, ++ libc_cv_section_attributes, [dnl ++ cat > conftest.c <&AC_FD_CC); then ++ AC_DEFINE(HAVE_SECTION_ATTRIBUTES) ++ fi ++ rm -f conftest*]) ++ ;; ++esac ++ ++AC_CACHE_CHECK(for function prefix, libc_dollar_prefix, [dnl ++cat > conftest.c <<\EOF ++foo () { } ++EOF ++dnl ++if AC_TRY_COMMAND([${CC-cc} -S conftest.c -o - | fgrep "\$foo" > /dev/null]); ++then ++ libc_dollar_prefix=yes ++else ++ libc_dollar_prefix=no ++fi ++rm -f conftest* ]) ++if test $libc_dollar_prefix = yes ; then ++ AC_DEFINE(__SYMBOL_PREFIX, "$") ++else ++ AC_DEFINE(__SYMBOL_PREFIX, "") ++fi ++ ++LIB_AC_PROG_CC ++AS=${AS-as} ++AC_SUBST(AS) ++AR=${AR-ar} ++AC_SUBST(AR) ++LD=${LD-ld} ++AC_SUBST(LD) ++AC_PROG_RANLIB ++ ++host_makefile_frag=${srcdir}/../config/default.mh ++ ++dnl We have to assign the same value to other variables because autoconf ++dnl doesn't provide a mechanism to substitute a replacement keyword with ++dnl arbitrary data or pathnames. ++dnl ++host_makefile_frag_path=$host_makefile_frag ++AC_SUBST(host_makefile_frag_path) ++AC_SUBST_FILE(host_makefile_frag) ++ ++AC_OUTPUT(Makefile, ++ac_file=Makefile . ${libgloss_topdir}/config-ml.in, ++srcdir=${srcdir} ++target=${target} ++ac_configure_args="${ac_configure_args} --enable-multilib" ++CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} ++libgloss_topdir=${libgloss_topdir} ++) ++ ++ +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/environ.c newlib-1.14.0-arm/libgloss/libsysbase/environ.c +--- newlib-1.14.0/libgloss/libsysbase/environ.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/environ.c Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,6 @@ ++/* ++ * Version of environ for no OS. ++ */ ++ ++char *__env[1] = { 0 }; ++char **environ = __env; +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/execve.c newlib-1.14.0-arm/libgloss/libsysbase/execve.c +--- newlib-1.14.0/libgloss/libsysbase/execve.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/execve.c Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,21 @@ ++/* ++ * Stub version of execve. ++ */ ++ ++#include "config.h" ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include "warning.h" ++ ++int ++_DEFUN (_execve, (name, argv, env), ++ char *name _AND ++ char **argv _AND ++ char **env) ++{ ++ errno = ENOSYS; ++ return -1; ++} ++ ++stub_warning(_execve) +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/fork.c newlib-1.14.0-arm/libgloss/libsysbase/fork.c +--- newlib-1.14.0/libgloss/libsysbase/fork.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/fork.c Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,19 @@ ++/* ++ * Stub version of fork. ++ */ ++ ++#include "config.h" ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include "warning.h" ++ ++int ++_DEFUN (_fork, (), ++ _NOARGS) ++{ ++ errno = ENOSYS; ++ return -1; ++} ++ ++stub_warning(_fork) +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/fstat.c newlib-1.14.0-arm/libgloss/libsysbase/fstat.c +--- newlib-1.14.0/libgloss/libsysbase/fstat.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/fstat.c Fri May 19 11:48:22 2006 +@@ -0,0 +1,45 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++#include ++ ++#include ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++int _DEFUN (_fstat_r,(r,fileDesc, st), ++ struct _reent * r _AND ++ int fileDesc _AND ++ struct stat *st) { ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++int _DEFUN (_fstat,(fileDesc, st), ++ int fileDesc _AND ++ struct stat *st) { ++//--------------------------------------------------------------------------------- ++ struct _reent *r = _REENT; ++#endif ++ int ret = -1; ++ unsigned int dev = 0; ++ unsigned int fd = -1; ++ ++ __handle * handle = NULL; ++ ++ if(fileDesc!=-1) { ++ if ( fileDesc < 3) { ++ dev = fileDesc; ++ } else { ++ handle = (__handle *)fileDesc; ++ dev = handle->device; ++ fd = (int)handle->fileStruct; ++ } ++ if(devoptab_list[dev]->fstat_r) { ++ ret = devoptab_list[dev]->fstat_r(r,fd,st); ++ } else { ++ r->_errno = ENOSYS; ++ } ++ } ++ return ret; ++} +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/getpid.c newlib-1.14.0-arm/libgloss/libsysbase/getpid.c +--- newlib-1.14.0/libgloss/libsysbase/getpid.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/getpid.c Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,20 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++int _DEFUN( _getpid_r,(ptr), ++ struct _reent *ptr) { ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++int _DEFUN (_getpid, (), ++ _NOARGS) { ++//--------------------------------------------------------------------------------- ++ struct _reent *ptr = _REENT; ++#endif ++ ptr->_errno = ENOSYS; ++ return -1; ++} ++ +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/gettod.c newlib-1.14.0-arm/libgloss/libsysbase/gettod.c +--- newlib-1.14.0/libgloss/libsysbase/gettod.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/gettod.c Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,25 @@ ++/* ++ * Stub version of gettimeofday. ++ */ ++ ++#include "config.h" ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++#include ++#include "warning.h" ++ ++struct timeval; ++struct timezone; ++ ++int ++_DEFUN (_gettimeofday, (ptimeval, ptimezone), ++ struct timeval *ptimeval _AND ++ struct timezone *ptimezone) ++{ ++ errno = ENOSYS; ++ return -1; ++} ++ ++stub_warning(_gettimeofday) +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/iosupport.c newlib-1.14.0-arm/libgloss/libsysbase/iosupport.c +--- newlib-1.14.0/libgloss/libsysbase/iosupport.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/iosupport.c Sat May 20 19:49:43 2006 +@@ -0,0 +1,98 @@ ++#include ++#include ++#include ++ ++static int defaultDevice = -1; ++ ++//--------------------------------------------------------------------------------- ++void setDefaultDevice( int device ) { ++//--------------------------------------------------------------------------------- ++ ++ if ( device >2 && device <= STD_MAX) ++ defaultDevice = device; ++} ++ ++//--------------------------------------------------------------------------------- ++const devoptab_t dotab_stdnull = { ++//--------------------------------------------------------------------------------- ++ "stdnull", // device name ++ 0, // size of file structure ++ NULL, // device open ++ NULL, // device close ++ NULL, // device write ++ NULL, // device read ++ NULL, // device seek ++ NULL, // device fstat ++ NULL, // device stat ++ NULL, // device link ++ NULL, // device unlink ++ NULL // device chdir ++}; ++ ++//--------------------------------------------------------------------------------- ++const devoptab_t *devoptab_list[STD_MAX] = { ++//--------------------------------------------------------------------------------- ++ &dotab_stdnull, &dotab_stdnull, &dotab_stdnull, &dotab_stdnull, ++ &dotab_stdnull, &dotab_stdnull, &dotab_stdnull, &dotab_stdnull, ++ &dotab_stdnull, &dotab_stdnull, &dotab_stdnull, &dotab_stdnull, ++ &dotab_stdnull, &dotab_stdnull, &dotab_stdnull, &dotab_stdnull ++}; ++ ++//--------------------------------------------------------------------------------- ++int FindDevice(const char* name) { ++//--------------------------------------------------------------------------------- ++ int i = 0, namelen, dev = -1; ++ ++ while(iname); ++ if(strncmp(devoptab_list[i]->name,name,namelen)==0 ) { ++ if ( name[namelen] == ':' || (isdigit(name[namelen]) && name[namelen+1] ==':' )) { ++ dev = i; ++ break; ++ } ++ } ++ } ++ i++; ++ } ++ ++ if ( dev == -1 && defaultDevice != -1 ) dev = defaultDevice; ++ ++ return dev; ++} ++ ++//--------------------------------------------------------------------------------- ++int RemoveDevice( const char* name) { ++//--------------------------------------------------------------------------------- ++ int dev = FindDevice(name); ++ ++ if ( -1 != dev ) { ++ devoptab_list[dev] = &dotab_stdnull; ++ return 0; ++ } ++ ++ return -1; ++ ++} ++//--------------------------------------------------------------------------------- ++int AddDevice( const devoptab_t* device) { ++//--------------------------------------------------------------------------------- ++ ++ int devnum; ++ ++ for ( devnum = 3;devnum name, device->name) && ++ strlen(devoptab_list[devnum]->name) == strlen(device->name) ) || ++ !strcmp(devoptab_list[devnum]->name, "stdnull") ++ ) ++ break; ++ } ++ ++ if ( devnum == STD_MAX ) { ++ devnum = -1; ++ } else { ++ devoptab_list[devnum] = device; ++ } ++ return devnum; ++} +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/isatty.c newlib-1.14.0-arm/libgloss/libsysbase/isatty.c +--- newlib-1.14.0/libgloss/libsysbase/isatty.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/isatty.c Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,10 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++ ++//--------------------------------------------------------------------------------- ++int _DEFUN(isatty,(file), ++ int file) { ++//--------------------------------------------------------------------------------- ++ return 0; ++} +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/kill.c newlib-1.14.0-arm/libgloss/libsysbase/kill.c +--- newlib-1.14.0/libgloss/libsysbase/kill.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/kill.c Fri Apr 14 22:10:52 2006 +@@ -0,0 +1,24 @@ ++/* ++ * Stub version of kill. ++ */ ++ ++#include "config.h" ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include "warning.h" ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++int _DEFUN(_kill_r,(ptr,pid,sig), ++ struct _reent *ptr _AND ++ int pid _AND ++ int sig) { ++#else ++int _DEFUN(_kill,(pid,sig), ++ int pid _AND ++ int sig) { ++ struct _reent *ptr = _REENT; ++#endif ++ ptr->_errno = ENOSYS; ++ return -1; ++} +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/link.c newlib-1.14.0-arm/libgloss/libsysbase/link.c +--- newlib-1.14.0/libgloss/libsysbase/link.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/link.c Fri May 19 11:50:37 2006 +@@ -0,0 +1,36 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++#include ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++int _DEFUN (_link_r, (r, existing, new), ++ struct _reent r _AND ++ char *existing _AND ++ char *new) { ++#else ++int _DEFUN (_link, (existing, new), ++ char *existing _AND ++ char *new) { ++ struct _reent *r = _REENT; ++#endif ++ int ret; ++ int sourceDev = findDevice(existing); ++ int destDev = findDevice(new); ++ ++ ret = -1; ++ ++ if ( sourceDev == destDev) { ++ if (devoptab_list[destDev]->link_r) { ++ ret = devoptab_list[destDev]->link_r( r, existing, new); ++ } else { ++ r->_errno = ENOSYS; ++ } ++ } else { ++ r->_errno = EXDEV; ++ } ++ ++ return ret; ++} ++ +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/lseek.c newlib-1.14.0-arm/libgloss/libsysbase/lseek.c +--- newlib-1.14.0/libgloss/libsysbase/lseek.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/lseek.c Sat May 20 19:58:52 2006 +@@ -0,0 +1,46 @@ ++ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++ ++#include ++ ++//--------------------------------------------------------------------------------- ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++int _DEFUN(_lseek_r,(r, fileDesc, pos, dir), ++ struct _reent * r _AND ++ int fileDesc _AND ++ int pos _AND ++ int dir) ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++int _DEFUN(_lseek,(fileDesc, pos, dir), ++ int fileDesc _AND ++ int pos _AND ++ int dir) { ++//--------------------------------------------------------------------------------- ++ struct _reent *r = _REENT; ++//--------------------------------------------------------------------------------- ++#endif ++//--------------------------------------------------------------------------------- ++ int ret = -1; ++ unsigned int dev = 0; ++ unsigned int fd = -1; ++ ++ __handle * handle; ++ ++ if(fileDesc!=-1) { ++ ++ handle = (__handle *)fileDesc; ++ dev = handle->device; ++ fd = (int)handle->fileStruct; ++ ++ if(devoptab_list[dev]->seek_r) ++ ret = devoptab_list[dev]->seek_r(0,fd,pos,dir); ++ ++ } ++ return ret; ++ ++} +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/malloc_vars.c newlib-1.14.0-arm/libgloss/libsysbase/malloc_vars.c +--- newlib-1.14.0/libgloss/libsysbase/malloc_vars.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/malloc_vars.c Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,2 @@ ++char *fake_heap_end = (char*)0; ++char *fake_heap_start = (char*)0; +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/open.c newlib-1.14.0-arm/libgloss/libsysbase/open.c +--- newlib-1.14.0/libgloss/libsysbase/open.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/open.c Fri May 19 11:49:07 2006 +@@ -0,0 +1,57 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++int _DEFUN (_open_r, (r, file, flags, mode), ++ struct _reent * r _AND ++ char *file _AND ++ int flags _AND ++ int mode) { ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++int _DEFUN (_open, (file, flags, mode), ++ char *file _AND ++ int flags _AND ++ int mode) { ++//--------------------------------------------------------------------------------- ++ struct _reent *r = _REENT; ++#endif ++ __handle *handle; ++ int dev,fd; ++ ++ r->_errno = ENOSYS; ++ dev = FindDevice(file); ++ ++ fd = -1; ++ handle = (__handle *)-1; ++ if(dev!=-1 && devoptab_list[dev]->open_r) { ++ ++ handle = (__handle *)malloc( sizeof(__handle) + devoptab_list[dev]->structSize ); ++ ++ if ( NULL != handle ) { ++ handle->device = dev; ++ handle->fileStruct = ((void *)handle) + sizeof(handle); ++ ++ fd = devoptab_list[dev]->open_r(r, handle->fileStruct, file, flags, mode); ++ ++ if ( fd == -1 ) { ++ free(handle); ++ handle = (__handle *)-1; ++ } ++ } else { ++ r->_errno = ENOSR; ++ handle = (__handle *)-1; ++ } ++ } ++ ++ return (int)handle; ++} +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/read.c newlib-1.14.0-arm/libgloss/libsysbase/read.c +--- newlib-1.14.0/libgloss/libsysbase/read.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/read.c Wed May 10 20:52:51 2006 +@@ -0,0 +1,44 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++ ++#include ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++int _DEFUN(_read_r,(r, fileDesc, ptr, len), ++ struct _reent * r _AND ++ int fileDesc _AND ++ char *ptr _AND ++ int len) { ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++int _DEFUN(_read,(fileDesc, ptr, len), ++ int fileDesc _AND ++ char *ptr _AND ++ int len) { ++//--------------------------------------------------------------------------------- ++ struct _reent *r = _REENT; ++#endif ++ int ret = -1; ++ unsigned int dev = 0; ++ unsigned int fd = -1; ++ ++ __handle * handle = NULL; ++ ++ if(fileDesc!=-1) { ++ if ( fileDesc < 3) { ++ dev = fileDesc; ++ } else { ++ handle = (__handle *)fileDesc; ++ dev = handle->device; ++ fd = (int)handle->fileStruct; ++ } ++ if(devoptab_list[dev]->read_r) ++ ret = devoptab_list[dev]->read_r(r,fd,ptr,len); ++ } ++ return ret; ++} ++ +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/sbrk.c newlib-1.14.0-arm/libgloss/libsysbase/sbrk.c +--- newlib-1.14.0/libgloss/libsysbase/sbrk.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/sbrk.c Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,61 @@ ++#include <_ansi.h> ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++ ++extern char *fake_heap_end; ++extern char *fake_heap_start; ++ ++/* Register name faking - works in collusion with the linker. */ ++register char * stack_ptr asm ("sp"); ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++caddr_t _sbrk_r (struct _reent *ptr, int incr) { ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++caddr_t _sbrk (int incr) { ++//--------------------------------------------------------------------------------- ++ struct _reent *ptr = _REENT; ++#endif ++ extern char end asm ("end"); /* Defined by the linker. */ ++ static char * heap_start; ++ ++ ++ char * prev_heap_start; ++ char * heap_end; ++ ++ if (heap_start == NULL) { ++ if (fake_heap_start == NULL) { ++ heap_start = &end; ++ } else { ++ heap_start = fake_heap_start; ++ } ++ } ++ ++ prev_heap_start = heap_start; ++ ++ if (fake_heap_end == NULL) { ++ heap_end = stack_ptr; ++ } else { ++ heap_end = fake_heap_end; ++ } ++ ++ if (heap_start + incr > heap_end) { ++ ptr->_errno = ENOMEM; ++ return (caddr_t) -1; ++ } ++ ++ heap_start += incr; ++ ++ return (caddr_t) prev_heap_start; ++} +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/stat.c newlib-1.14.0-arm/libgloss/libsysbase/stat.c +--- newlib-1.14.0/libgloss/libsysbase/stat.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/stat.c Fri May 19 11:36:58 2006 +@@ -0,0 +1,39 @@ ++#include "config.h" ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++#include ++#include ++ ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++int _DEFUN (_stat_r,(r,file, st), ++ struct _reent * r _AND ++ const char *file _AND ++ struct stat *st) { ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++int ++_DEFUN (_stat, (file, st), ++ const char *file _AND ++ struct stat *st) ++{ ++//--------------------------------------------------------------------------------- ++ struct _reent *r = _REENT; ++#endif ++ int dev,ret; ++ ++ dev = FindDevice(file); ++ ++ if(dev!=-1 && devoptab_list[dev]->stat_r) { ++ ret = devoptab_list[dev]->stat_r(r,file,st); ++ } else { ++ ret = -1; ++ r->_errno = ENODEV; ++ } ++ return ret; ++} ++ +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/times.c newlib-1.14.0-arm/libgloss/libsysbase/times.c +--- newlib-1.14.0/libgloss/libsysbase/times.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/times.c Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,13 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++ ++//--------------------------------------------------------------------------------- ++clock_t _DEFUN (_times, (buf), ++ struct tms *buf) { ++//--------------------------------------------------------------------------------- ++ errno = ENOSYS; ++ return -1; ++} ++ +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/unlink.c newlib-1.14.0-arm/libgloss/libsysbase/unlink.c +--- newlib-1.14.0/libgloss/libsysbase/unlink.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/unlink.c Fri May 19 11:23:45 2006 +@@ -0,0 +1,32 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++#include ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++int _DEFUN (_unlink_r, (r, name), ++ struct _reent * r _AND ++ char *name ) { ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++int _DEFUN (_unlink, (name), ++ char *name) { ++//--------------------------------------------------------------------------------- ++ struct _reent *r = _REENT; ++#endif ++ int dev,ret; ++ ++ dev = FindDevice(name); ++ if(dev!=-1 && devoptab_list[dev]->unlink_r) { ++ ret = devoptab_list[dev]->unlink_r(r,name); ++ } else { ++ ret = -1; ++ r->_errno = ENODEV; ++ } ++ ++ return ret; ++} ++ +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/wait.c newlib-1.14.0-arm/libgloss/libsysbase/wait.c +--- newlib-1.14.0/libgloss/libsysbase/wait.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/wait.c Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,19 @@ ++/* ++ * Stub version of wait. ++ */ ++ ++#include "config.h" ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include "warning.h" ++ ++int ++_DEFUN (_wait, (status), ++ int *status) ++{ ++ errno = ENOSYS; ++ return -1; ++} ++ ++stub_warning(_wait) +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/warning.h newlib-1.14.0-arm/libgloss/libsysbase/warning.h +--- newlib-1.14.0/libgloss/libsysbase/warning.h Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/warning.h Fri Apr 14 22:08:39 2006 +@@ -0,0 +1,43 @@ ++#ifndef __WARNING_H__ ++#define __WARNING_H__ ++ ++#ifdef HAVE_GNU_LD ++# ifdef HAVE_ELF ++ ++/* We want the .gnu.warning.SYMBOL section to be unallocated. */ ++# ifdef HAVE_ASM_PREVIOUS_DIRECTIVE ++# define __make_section_unallocated(section_string) \ ++ asm(".section " section_string "; .previous"); ++# elif defined (HAVE_ASM_POPSECTION_DIRECTIVE) ++# define __make_section_unallocated(section_string) \ ++ asm(".pushsection " section_string "; .popsection"); ++# else ++# define __make_section_unallocated(section_string) ++# endif ++ ++# ifdef HAVE_SECTION_ATTRIBUTES ++# define link_warning(symbol, msg) \ ++ __make_section_unallocated (".gnu.warning." #symbol) \ ++ static const char __evoke_link_warning_##symbol[] \ ++ __attribute__ ((section (".gnu.warning." #symbol))) = msg; ++# else ++# define link_warning(symbol, msg) ++# endif ++ ++#else /* !ELF */ ++ ++# define link_warning(symbol, msg) \ ++ asm(".stabs \"" msg "\",30,0,0,0\n" \ ++ ".stabs \"" __SYMBOL_PREFIX #symbol "\",1,0,0,0\n"); ++# endif ++#else /* !GNULD */ ++/* We will never be heard; they will all die horribly. */ ++# define link_warning(symbol, msg) ++#endif ++ ++/* A canned warning for sysdeps/stub functions. */ ++#define stub_warning(name) \ ++ link_warning (name, \ ++ "warning: " #name " is not implemented and will always fail") ++ ++#endif /* __WARNING_H__ */ +diff -Nbaur newlib-1.14.0/libgloss/libsysbase/write.c newlib-1.14.0-arm/libgloss/libsysbase/write.c +--- newlib-1.14.0/libgloss/libsysbase/write.c Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/libgloss/libsysbase/write.c Wed May 10 22:09:00 2006 +@@ -0,0 +1,44 @@ ++#include <_ansi.h> ++#include <_syslist.h> ++#include ++#include ++ ++#include ++ ++#ifdef REENTRANT_SYSCALLS_PROVIDED ++//--------------------------------------------------------------------------------- ++int _DEFUN(_write_r,(r, fileDesc, ptr, len), ++ struct _reent * r _AND ++ int fileDesc _AND ++ char *ptr _AND ++ int len) { ++//--------------------------------------------------------------------------------- ++#else ++//--------------------------------------------------------------------------------- ++int _DEFUN (_write, (fileDesc, ptr, len), ++ int fileDesc _AND ++ char *ptr _AND ++ int len) { ++//--------------------------------------------------------------------------------- ++ struct _reent *r = _REENT; ++#endif ++ int ret = -1; ++ unsigned int dev = 0; ++ unsigned int fd = -1; ++ ++ __handle * handle = NULL; ++ ++ ++ if(fileDesc!=-1) { ++ if ( fileDesc < 3) { ++ dev = fileDesc; ++ } else { ++ handle = (__handle *)fileDesc; ++ dev = handle->device; ++ fd = (int)handle->fileStruct; ++ } ++ if(devoptab_list[dev]->write_r) ++ ret = devoptab_list[dev]->write_r(r,fd,ptr,len); ++ } ++ return ret; ++} +diff -Nbaur newlib-1.14.0/newlib/libc/include/stdio.h newlib-1.14.0-arm/newlib/libc/include/stdio.h +--- newlib-1.14.0/newlib/libc/include/stdio.h Wed Oct 12 00:59:32 2005 ++++ newlib-1.14.0-arm/newlib/libc/include/stdio.h Fri Apr 14 22:08:39 2006 +@@ -179,6 +179,7 @@ + int _EXFUN(printf, (const char *, ...)); + int _EXFUN(scanf, (const char *, ...)); + int _EXFUN(sscanf, (const char *, const char *, ...)); ++int _EXFUN(siscanf, (const char *, const char *, ...)); + int _EXFUN(vfprintf, (FILE *, const char *, __VALIST)); + int _EXFUN(vprintf, (const char *, __VALIST)); + int _EXFUN(vsprintf, (char *, const char *, __VALIST)); +@@ -229,7 +230,7 @@ + #ifndef _REENT_ONLY + int _EXFUN(asiprintf, (char **, const char *, ...)); + int _EXFUN(asprintf, (char **, const char *, ...)); +-int _EXFUN(dprintf, (int, const char *, ...)); ++//int _EXFUN(dprintf, (int, const char *, ...)); + int _EXFUN(fcloseall, (_VOID)); + int _EXFUN(fiprintf, (FILE *, const char *, ...)); + int _EXFUN(iprintf, (const char *, ...)); +@@ -247,6 +248,7 @@ + int _EXFUN(vfscanf, (FILE *, const char *, __VALIST)); + int _EXFUN(viprintf, (const char *, __VALIST)); + int _EXFUN(viscanf, (const char *, __VALIST)); ++int _EXFUN(viprintf, (const char *, __VALIST)); + int _EXFUN(vscanf, (const char *, __VALIST)); + int _EXFUN(vsiscanf, (const char *, const char *, __VALIST)); + int _EXFUN(vsscanf, (const char *, const char *, __VALIST)); +diff -Nbaur newlib-1.14.0/newlib/libc/include/sys/iosupport.h newlib-1.14.0-arm/newlib/libc/include/sys/iosupport.h +--- newlib-1.14.0/newlib/libc/include/sys/iosupport.h Thu Jan 1 00:00:00 1970 ++++ newlib-1.14.0-arm/newlib/libc/include/sys/iosupport.h Sat May 20 13:07:58 2006 +@@ -0,0 +1,45 @@ ++//--------------------------------------------------------------------------------- ++#ifndef __iosupp_h__ ++#define __iosupp_h__ ++//--------------------------------------------------------------------------------- ++ ++#include ++ ++enum { ++ STD_IN, ++ STD_OUT, ++ STD_ERR, ++ STD_MAX = 16 ++}; ++ ++ ++typedef struct { ++ int device; ++ void *fileStruct; ++} __handle; ++ ++typedef struct { ++ const char *name; ++ int structSize; ++ int (*open_r)(struct _reent *r, void *fileStruct, const char *path,int flags,int mode); ++ int (*close_r)(struct _reent *r,int fd); ++ int (*write_r)(struct _reent *r,int fd,const char *ptr,int len); ++ int (*read_r)(struct _reent *r,int fd,char *ptr,int len); ++ int (*seek_r)(struct _reent *r,int fd,int pos,int dir); ++ int (*fstat_r)(struct _reent *r,int fd,struct stat *st); ++ int (*stat_r)(struct _reent *r,const char *file,struct stat *st); ++ int (*link_r)(struct _reent *r,char *existing, char *new); ++ int (*unlink_r)(struct _reent *r,char *name); ++ int (*chdir_r)(struct _reent *r,char *name); ++} devoptab_t; ++ ++extern const devoptab_t *devoptab_list[]; ++ ++int AddDevice( const devoptab_t* device); ++int FindDevice(const char* name); ++int RemoveDevice(const char* name); ++void setDefaultDevice( int device ); ++ ++//--------------------------------------------------------------------------------- ++#endif ++//--------------------------------------------------------------------------------- +diff -Nbaur newlib-1.14.0/newlib/libc/include/sys/reent.h newlib-1.14.0-arm/newlib/libc/include/sys/reent.h +--- newlib-1.14.0/newlib/libc/include/sys/reent.h Tue Feb 8 01:33:16 2005 ++++ newlib-1.14.0-arm/newlib/libc/include/sys/reent.h Wed May 10 15:36:06 2006 +@@ -151,7 +151,7 @@ + int _r; /* read space left for getc() */ + int _w; /* write space left for putc() */ + short _flags; /* flags, below; this FILE is free if 0 */ +- short _file; /* fileno, if Unix descriptor, else -1 */ ++ int _file; /* fileno, if Unix descriptor, else -1 */ + struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */ + int _lbfsize; /* 0 or -_bf._size, for inline putc */ + +@@ -168,7 +168,7 @@ + int _r; /* read space left for getc() */ + int _w; /* write space left for putc() */ + short _flags; /* flags, below; this FILE is free if 0 */ +- short _file; /* fileno, if Unix descriptor, else -1 */ ++ int _file; /* fileno, if Unix descriptor, else -1 */ + struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */ + int _lbfsize; /* 0 or -_bf._size, for inline putc */ + +@@ -216,7 +216,7 @@ + int _r; /* read space left for getc() */ + int _w; /* write space left for putc() */ + short _flags; /* flags, below; this FILE is free if 0 */ +- short _file; /* fileno, if Unix descriptor, else -1 */ ++ int _file; /* fileno, if Unix descriptor, else -1 */ + struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */ + int _lbfsize; /* 0 or -_bf._size, for inline putc */ + diff --git a/dkarm-eabi/rules/base_rules b/dkarm-eabi/rules/base_rules new file mode 100644 index 0000000..8c28273 --- /dev/null +++ b/dkarm-eabi/rules/base_rules @@ -0,0 +1,73 @@ +#--------------------------------------------------------------------------------- +# path to tools - this can be deleted if you set the path in windows +#--------------------------------------------------------------------------------- +export PATH := $(DEVKITARM)/bin:$(PATH) + +#--------------------------------------------------------------------------------- +# the prefix on the compiler executables +#--------------------------------------------------------------------------------- +PREFIX := arm-eabi- + +export CC := $(PREFIX)gcc +export CXX := $(PREFIX)g++ +export AS := $(PREFIX)as +export AR := $(PREFIX)ar +export OBJCOPY := $(PREFIX)objcopy + +#--------------------------------------------------------------------------------- +%.a: +#--------------------------------------------------------------------------------- + @echo $(notdir $@) + @rm -f $@ + $(AR) -rc $@ $^ + +#--------------------------------------------------------------------------------- +%.o: %.cpp + @echo $(notdir $<) + $(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) -c $< -o $@ + +#--------------------------------------------------------------------------------- +%.o: %.c + @echo $(notdir $<) + $(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) -c $< -o $@ + +#--------------------------------------------------------------------------------- +%.iwram.o: %.iwram.cpp + @echo $(notdir $<) + $(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) -marm-c $< -o $@ + +#--------------------------------------------------------------------------------- +%.iwram.o: %.iwram.c + @echo $(notdir $<) + $(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) -marm -c $< -o $@ + +#--------------------------------------------------------------------------------- +%.itcm.o: %.itcm.cpp + @echo $(notdir $<) + $(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) -marm-c $< -o $@ + +#--------------------------------------------------------------------------------- +%.itcm.o: %.itcm.c + @echo $(notdir $<) + $(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) -marm -c $< -o $@ + +#--------------------------------------------------------------------------------- +%.o: %.s + @echo $(notdir $<) + $(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ + +#--------------------------------------------------------------------------------- +%.o: %.S + @echo $(notdir $<) + $(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ + +#--------------------------------------------------------------------------------- +# canned command sequence for binary data +#--------------------------------------------------------------------------------- +define bin2o + bin2s $< | $(AS) $(ARCH) -o $(@) + echo "extern const u8" `(echo $( `(echo $(> `(echo $(> `(echo $(devkitPro) +endif + +include $(DEVKITARM)/base_rules + +LIBNDS := $(DEVKITPRO)/libnds + +#--------------------------------------------------------------------------------- +%.ds.gba: %.nds + @dsbuild $< + @echo built ... $(notdir $@) + +#--------------------------------------------------------------------------------- +%.nds: %.arm9 + @ndstool -c $@ -9 $< + @echo built ... $(notdir $@) + +#--------------------------------------------------------------------------------- +%.arm9: %.elf + @$(OBJCOPY) -O binary $< $@ + @echo built ... $(notdir $@) + +#--------------------------------------------------------------------------------- +%.arm7: %.elf + @$(OBJCOPY) -O binary $< $@ + @echo built ... $(notdir $@) + +#--------------------------------------------------------------------------------- +%.elf: + @echo linking $(notdir $@) + @$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@ diff --git a/dkarm-eabi/rules/gba_rules b/dkarm-eabi/rules/gba_rules new file mode 100644 index 0000000..8b6ae3c --- /dev/null +++ b/dkarm-eabi/rules/gba_rules @@ -0,0 +1,23 @@ +ifeq ($(strip $(DEVKITPRO)),) +$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPro) +endif + +include $(DEVKITARM)/base_rules + +LIBGBA := $(DEVKITPRO)/libgba + +#--------------------------------------------------------------------------------- +%.gba: %.elf + @$(OBJCOPY) -O binary $< $@ + @echo built ... $(notdir $@) + @gbafix $@ + +#--------------------------------------------------------------------------------- +%_mb.elf: + @echo linking multiboot + @$(LD) -specs=gba_mb.specs $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@ + +#--------------------------------------------------------------------------------- +%.elf: + @echo linking cartridge + @$(LD) $(LDFLAGS) -specs=gba.specs $(OFILES) $(LIBPATHS) $(LIBS) -o $@ diff --git a/dkarm-eabi/rules/gp32_rules b/dkarm-eabi/rules/gp32_rules new file mode 100644 index 0000000..d4e3918 --- /dev/null +++ b/dkarm-eabi/rules/gp32_rules @@ -0,0 +1,18 @@ +-include $(DEVKITARM)/base_rules + +LIBMIRKO := $(DEVKITPRO)/libmirko + +#--------------------------------------------------------------------------------- +%.fxe: %.bin + @b2fxec -a "$(AUTHOR)" -t "$(TITLE)" $< $@ + @echo built ... $(notdir $@) + +#--------------------------------------------------------------------------------- +%.bin: %.elf + @$(OBJCOPY) -O binary $< $@ + @echo built ... $(notdir $@) + +#--------------------------------------------------------------------------------- +%.elf: + @echo linking binary + @$(LD) $(LDFLAGS) -specs=gp32.specs $(OFILES) $(LIBPATHS) $(LIBS) -o $@ diff --git a/dkarm-eabi/scripts/build-crtls.sh b/dkarm-eabi/scripts/build-crtls.sh new file mode 100644 index 0000000..21ecd2d --- /dev/null +++ b/dkarm-eabi/scripts/build-crtls.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +export DEVKITARM=$TOOLPATH/devkitARM +export DEVKITPRO=$TOOLPATH + +#--------------------------------------------------------------------------------- +# Install and build the gba crt +#--------------------------------------------------------------------------------- + +cp $(pwd)/dkarm-eabi/crtls/* $DEVKITARM/arm-eabi/lib/ +cd $DEVKITARM/arm-eabi/lib/ +$MAKE CRT=gba +$MAKE CRT=gp32 +$MAKE CRT=er +$MAKE CRT=gp32_gpsdk +$MAKE CRT=ds_arm7 +$MAKE CRT=ds_arm9 +$MAKE CRT=ds_cart + +cd $BUILDSCRIPTDIR + +$MAKE -C tools/general +$MAKE -C tools/general install PREFIX=$DEVKITARM/bin + +#--------------------------------------------------------------------------------- +# copy base rulesets +#--------------------------------------------------------------------------------- +cp dkarm-eabi/rules/* $DEVKITARM + +cd $LIBNDS_SRCDIR +echo "building libnds ..." +$MAKE install INSTALLDIR=$TOOLPATH + +echo "building libgba ..." +cd $BUILDSCRIPTDIR +cd $LIBGBA_SRCDIR +$MAKE install INSTALLDIR=$TOOLPATH diff --git a/dkarm-eabi/scripts/build-gcc.sh b/dkarm-eabi/scripts/build-gcc.sh new file mode 100644 index 0000000..19b48d8 --- /dev/null +++ b/dkarm-eabi/scripts/build-gcc.sh @@ -0,0 +1,117 @@ +#!/bin/sh +#--------------------------------------------------------------------------------- +# Check Parameters +#--------------------------------------------------------------------------------- + +prefix=$INSTALLDIR/devkitARM + +#--------------------------------------------------------------------------------- +# build and install binutils +#--------------------------------------------------------------------------------- + +mkdir -p $target/binutils +cd $target/binutils + +../../$BINUTILS_SRCDIR/configure \ + --prefix=$prefix --target=$target --disable-nls --disable-shared --disable-debug \ + --disable-threads --with-gcc --with-gnu-as --with-gnu-ld \ + || { echo "Error configuring binutils"; exit 1; } + +$MAKE || { echo "Error building binutils"; exit 1; } +$MAKE install || { echo "Error installing binutils"; exit 1; } + +cd $BUILDSCRIPTDIR + +#--------------------------------------------------------------------------------- +# build and install elf2flt +#--------------------------------------------------------------------------------- +mkdir -p $target/elf2flt +cd $target/elf2flt + +../../elf2flt/configure \ + --prefix=$prefix --target=$target \ + --with-libbfd=../binutils/bfd/libbfd.a \ + --with-libiberty=../binutils/libiberty/libiberty.a \ + --with-bfd-include-dir=../binutils/bfd/ \ + --with-binutils-include-dir=../../$BINUTILS_SRCDIR/include/ \ + || { echo "Error configuring elf2flt"; exit 1; } + $MAKE || { echo "Error building elf2flt"; exit 1; } + $MAKE install || { echo "Error installing elf2flt"; exit 1; } + + +cd $BUILDSCRIPTDIR + +#--------------------------------------------------------------------------------- +# remove temp stuff to conserve disc space +#--------------------------------------------------------------------------------- +rm -fr $target/binutils +rm -fr $BINUTILS_SRCDIR +rm -fr $target/elf2flt +rm -fr elf2flt + +#--------------------------------------------------------------------------------- +# build and install just the c compiler +#--------------------------------------------------------------------------------- +mkdir -p $target/gcc +cd $target/gcc + + +../../$GCC_SRCDIR/configure \ + --enable-languages=c,c++ \ + --with-cpu=arm7tdmi\ + --enable-interwork --enable-multilib\ + --with-gcc --with-gnu-ld --with-gnu-as \ + --disable-shared --disable-threads --disable-win32-registry --disable-nls --disable-debug\ + --disable-libmudflap --disable-libssp \ + --target=$target \ + --with-newlib \ + --prefix=$prefix\ + || { echo "Error configuring gcc"; exit 1; } + +mkdir -p libiberty libcpp fixincludes + +$MAKE all-gcc || { echo "Error building gcc"; exit 1; } +$MAKE install-gcc || { echo "Error installing gcc"; exit 1; } + +cd $BUILDSCRIPTDIR + +#--------------------------------------------------------------------------------- +# build and install newlib +#--------------------------------------------------------------------------------- +mkdir -p $target/newlib +cd $target/newlib +mkdir -p etc + +$BUILDSCRIPTDIR/$NEWLIB_SRCDIR/configure \ + --disable-newlib-supplied-syscalls \ + --disable-debug \ + --target=$target \ + --prefix=$prefix \ + || { echo "Error configuring newlib"; exit 1; } + +$MAKE || { echo "Error building newlib"; exit 1; } +$MAKE install || { echo "Error installing newlib"; exit 1; } + +#--------------------------------------------------------------------------------- +# remove temp stuff to conserve disc space +#--------------------------------------------------------------------------------- +rm -fr $target/newlib +rm -fr $NEWLIB_SRCDIR + +#--------------------------------------------------------------------------------- +# build and install the final compiler +#--------------------------------------------------------------------------------- + +cd $BUILDSCRIPTDIR +cd $target/gcc + +$MAKE || { echo "Error building g++"; exit 1; } +$MAKE install || { echo "Error installing g++"; exit 1; } + +cd $BUILDSCRIPTDIR + +#--------------------------------------------------------------------------------- +# remove temp stuff to conserve disc space +#--------------------------------------------------------------------------------- +rm -fr $target/gcc +rm -fr $GCC_SRCDIR diff --git a/dkarm-eabi/scripts/build-tools.sh b/dkarm-eabi/scripts/build-tools.sh new file mode 100644 index 0000000..dfa4d86 --- /dev/null +++ b/dkarm-eabi/scripts/build-tools.sh @@ -0,0 +1,16 @@ +#!/bin/sh + + +export DEVKITARM=$TOOLPATH/devkitARM +export DEVKITPRO=$TOOLPATH + +$MAKE -C tools/gba +$MAKE -C tools/gba install PREFIX=$DEVKITARM/bin + +$MAKE -C tools/gp32 +$MAKE -C tools/gp32 install PREFIX=$DEVKITARM/bin + +$MAKE -C tools/nds/ +$MAKE -C tools/nds/ install PREFIX=$DEVKITARM/bin + +$MAKE -C tools clean diff --git a/dkarm/crtls/gp32_gpsdk.ld b/dkarm/crtls/gp32_gpsdk.ld index 4e2ed55..85de0b6 100644 --- a/dkarm/crtls/gp32_gpsdk.ld +++ b/dkarm/crtls/gp32_gpsdk.ld @@ -147,6 +147,7 @@ SECTIONS *(.dynbss) *(.gnu.linkonce.b*) *(COMMON) + *(.bss*) . = ALIGN(4); /* REQUIRED. LD is flaky without it. */ } > ram __bss_end = . ; diff --git a/dkarm/rules/gba_rules b/dkarm/rules/gba_rules index 0cc74c1..8b6ae3c 100644 --- a/dkarm/rules/gba_rules +++ b/dkarm/rules/gba_rules @@ -1,4 +1,8 @@ --include $(DEVKITARM)/base_rules +ifeq ($(strip $(DEVKITPRO)),) +$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=devkitPro) +endif + +include $(DEVKITARM)/base_rules LIBGBA := $(DEVKITPRO)/libgba diff --git a/dkarm/scripts/build-gcc.sh b/dkarm/scripts/build-gcc.sh index bdc5c53..19b48d8 100644 --- a/dkarm/scripts/build-gcc.sh +++ b/dkarm/scripts/build-gcc.sh @@ -14,7 +14,7 @@ cd $target/binutils ../../$BINUTILS_SRCDIR/configure \ --prefix=$prefix --target=$target --disable-nls --disable-shared --disable-debug \ - --disable-threads --with-gcc --with-gnu-as --with-gnu-ld --with-stabs \ + --disable-threads --with-gcc --with-gnu-as --with-gnu-ld \ || { echo "Error configuring binutils"; exit 1; } $MAKE || { echo "Error building binutils"; exit 1; } @@ -60,7 +60,7 @@ cd $target/gcc --enable-languages=c,c++ \ --with-cpu=arm7tdmi\ --enable-interwork --enable-multilib\ - --with-gcc --with-gnu-ld --with-gnu-as --with-stabs \ + --with-gcc --with-gnu-ld --with-gnu-as \ --disable-shared --disable-threads --disable-win32-registry --disable-nls --disable-debug\ --disable-libmudflap --disable-libssp \ --target=$target \