Compare commits

...

33 Commits

Author SHA1 Message Date
Dave Murphy
223bc0823d now building devkitARM r51 2019-02-20 16:21:06 +00:00
Dave Murphy
c6675ab007 devkitARM: update newlib to 3.1.0 2019-02-20 16:16:55 +00:00
Dave Murphy
af02813a13 devkitARM: update gdb patch for macOS 2019-02-20 16:15:57 +00:00
Dave Murphy
21d8bd0e46 devkitARM: use new devkitarm-crtls package 2019-02-19 16:05:07 +00:00
Dave Murphy
b10d1e133f remove stale patches 2019-02-19 16:05:07 +00:00
Dave Murphy
c38b9e9425 update libgba version 2019-02-19 16:05:07 +00:00
Dave Murphy
d643106bf8 devkitARM: update gdb to 8.2.1 2019-02-19 16:05:07 +00:00
Dave Murphy
dd40237a2a use latest 3ds libs 2019-02-19 16:05:07 +00:00
Dave Murphy
6530f0a3c3 devkitARM: use new devkitarm-rules package 2019-02-19 16:04:53 +00:00
Dave Murphy
0bd88d5ac8 devkitARM: upgrade binutils to 2.32 2019-02-18 23:18:24 +00:00
Dave Murphy
ec6543e3c0 devkitPPC rules files moved to separate package 2019-02-18 14:05:55 +00:00
Carsten Teibes
11d640cd77 Add citro2d library to devkitARM build targets 2019-02-18 14:03:12 +00:00
Dave Murphy
d2614153c5 update to binutils 2.32 2019-02-11 19:28:58 +00:00
Dave Murphy
37b381ea1f proper fix for struct timeval 2019-02-11 19:28:09 +00:00
Dave Murphy
a6c67408af devkitPPC: separate rules files for independent update 2019-01-30 12:49:32 +00:00
Dave Murphy
bd5c0ba3ec remove old wii-u attempt 2019-01-30 11:04:48 +00:00
Dave Murphy
41b418fd8c consolidate paths 2019-01-30 08:57:46 +00:00
Dave Murphy
8421d92bcb always use --build 2018-12-15 21:36:53 +00:00
Dave Murphy
20dc1324d4 increase devices to 32 2018-12-15 21:36:53 +00:00
Dave Murphy
118896fb1a add gdb 8.2 patch 2018-12-15 21:36:53 +00:00
Dave Murphy
ab95988007 update devkitARM version 2018-12-15 21:36:53 +00:00
Dave Murphy
596d710c3b use gdb 8.2 2018-12-15 21:35:15 +00:00
Dave Murphy
f0463ecba1 update to binutils 2.31.1 2018-12-15 21:35:15 +00:00
Dave Murphy
0bbc2be394 update to gcc 8.2 2018-12-15 21:35:15 +00:00
Dave Murphy
61dec9401a add note about devkitPro pacman 2018-11-14 19:34:07 +00:00
Dave Murphy
a9712ae81e use gdb 8.2 2018-11-14 19:34:07 +00:00
Dave Murphy
83f1b5cf02 remove old gcc patch 2018-11-14 19:34:07 +00:00
Dave Murphy
0c9af4df25 use binutils 2.31.1 2018-11-14 19:34:07 +00:00
Dave Murphy
4191cbef14 use gcc 8.2 2018-11-14 19:34:07 +00:00
PoroCYon
b0d0a3b3a3 fix symbol names in bin2o-generated header files sometimes being invalid C identifiers 2018-09-18 17:16:49 +01:00
Dave Murphy
da8d9c793b explicitly MPL crt0 files. Closes #31 2018-08-15 02:02:59 +01:00
Dave Murphy
e477403617 update devkitA64 gcc to 8.2.0 2018-07-28 15:57:51 +01:00
Dave Murphy
c84da440c4 update devkitA64 binutils 2018-07-28 15:56:01 +01:00
64 changed files with 442 additions and 5081 deletions

View File

@@ -1,8 +1,8 @@
#!/bin/bash
#---------------------------------------------------------------------------------
# devkitARM release 49
# devkitPPC release 32
# devkitA64 release 11
# devkitARM release 51
# devkitPPC release 33
# devkitA64 release 12
#---------------------------------------------------------------------------------
if [ 0 -eq 1 ] ; then
@@ -18,6 +18,9 @@ echo "Please note, these scripts are provided as a courtesy, toolchains built wi
echo "are for personal use only and may not be distributed by entities other than devkitPro."
echo "See http://devkitpro.org/wiki/Trademarks"
echo
echo "Users should use devkitPro pacman to maintain toolchain installations where possible"
echo "See https://devkitpro.org/wiki/devkitPro_pacman"
echo
echo "Patches and improvements are of course welcome, please submit a PR"
echo "https://github.com/devkitPro/buildscripts/pulls"
echo
@@ -25,8 +28,10 @@ echo
GENERAL_TOOLS_VER=1.0.2
LIBGBA_VER=0.5.1
LIBGBA_VER=0.5.2
GBATOOLS_VER=1.1.0
DKARM_RULES_VER=1.0.0
DKARM_CRTLS_VER=1.0.0
LIBNDS_VER=1.7.2
DEFAULT_ARM7_VER=0.7.4
@@ -43,12 +48,13 @@ DFU_UTIL_VER=0.9.1
STLINK_VER=1.2.3
GAMECUBE_TOOLS_VER=1.0.2
LIBOGC_VER=1.8.20
LIBOGC_VER=1.8.21
WIILOAD_VER=0.5.1
DKPPC_RULES_VER=1.0.0
LIBCTRU_VER=1.5.0
CITRO3D_VER=1.4.0
CITRO2D_VER=1.0.0
LIBCTRU_VER=1.5.1
CITRO3D_VER=1.5.0
CITRO2D_VER=1.1.0
TOOLS3DS_VER=1.1.4
LINK3DS_VER=0.5.2
PICASSO_VER=2.7.0
@@ -151,11 +157,13 @@ export MAKE
TOOLPATH=$(echo $INSTALLDIR | sed -e 's/^\([a-zA-Z]\):/\/\1/')
export PATH=$PATH:$TOOLPATH/$package/bin
CROSS_PARAMS="--build=`./config.guess`"
if [ ! -z $CROSSBUILD ]; then
toolsprefix=$INSTALLDIR/$CROSSBUILD/tools
prefix=$INSTALLDIR/$CROSSBUILD/$package
toolsprefix=$INSTALLDIR/$CROSSBUILD/tools
CROSS_PARAMS="--build=`./config.guess` --host=$CROSSBUILD"
CROSS_PARAMS="$CROSS_PARAMS --host=$CROSSBUILD"
CROSS_GCC_PARAMS="--with-gmp=$CROSSPATH --with-mpfr=$CROSSPATH --with-mpc=$CROSSPATH"
else
toolsprefix=$INSTALLDIR/tools
@@ -206,7 +214,7 @@ fi
patchdir=$(pwd)/$basedir/patches
scriptdir=$(pwd)/$basedir/scripts
archives="binutils-${BINUTILS_VER}.tar.bz2 gcc-${GCC_VER}.tar.xz newlib-${NEWLIB_VER}.tar.gz gdb-${GDB_VER}.tar.xz"
archives="binutils-${BINUTILS_VER}.tar.xz gcc-${GCC_VER}.tar.xz newlib-${NEWLIB_VER}.tar.gz gdb-${GDB_VER}.tar.xz"
if [ $VERSION -eq 1 ]; then
@@ -221,6 +229,8 @@ if [ $VERSION -eq 1 ]; then
general-tools-$GENERAL_TOOLS_VER.tar.bz2 mmutil-$MMUTIL_VER.tar.bz2
dfu-util-$DFU_UTIL_VER.tar.bz2 stlink-$STLINK_VER.tar.bz2 3dstools-$TOOLS3DS_VER.tar.bz2
picasso-$PICASSO_VER.tar.bz2 tex3ds-$TEX3DS_VER.tar.bz2 3dslink-$LINK3DS_VER.tar.bz2"
archives="devkitarm-rules-$DKARM_RULES_VER.tar.xz devkitarm-crtls-$DKARM_CRTLS_VER.tar.xz $archives"
fi
if [ $VERSION -eq 2 ]; then
@@ -229,7 +239,7 @@ if [ $VERSION -eq 2 ]; then
hostarchives="gamecube-tools-$GAMECUBE_TOOLS_VER.tar.bz2 wiiload-$WIILOAD_VER.tar.bz2 general-tools-$GENERAL_TOOLS_VER.tar.bz2"
archives="binutils-${MN_BINUTILS_VER}.tar.bz2 $archives"
archives="binutils-${MN_BINUTILS_VER}.tar.bz2 devkitppc-rules-$DKPPC_RULES_VER.tar.xz $archives"
fi
if [ $VERSION -eq 3 ]; then
@@ -260,7 +270,7 @@ cd $BUILDSCRIPTDIR
mkdir -p $BUILDDIR
cd $BUILDDIR
extract_and_patch binutils $BINUTILS_VER bz2
extract_and_patch binutils $BINUTILS_VER xz
extract_and_patch gcc $GCC_VER xz
extract_and_patch newlib $NEWLIB_VER gz
extract_and_patch gdb $GDB_VER xz
@@ -300,6 +310,8 @@ if [ "$BUILD_DKPRO_SKIP_LIBRARIES" != "1" ] && [ -f $scriptdir/build-libs.sh ];
. $scriptdir/build-libs.sh || { echo "Error building libraries"; exit 1; }; cd $BUILDSCRIPTDIR;
fi
cd $BUILDSCRIPTDIR
if [ ! -z $CROSSBUILD ] && grep -q "mingw" <<<"$CROSSBUILD" ; then
cp -v $CROSSBINPATH//libwinpthread-1.dll $prefix/bin
fi

View File

@@ -1,5 +1,7 @@
#!/bin/bash
export CROSSBUILD=i686-w64-mingw32
export CROSSLIBPATH=/opt/mingw32/mingw/lib
export CROSSBINPATH=/opt/mingw32/mingw/bin
export CROSSPATH=/opt/mingw32/mingw
export CROSSLIBPATH=$CROSSPATH/lib
export CROSSBINPATH=$CROSSPATH/bin
export PATH=/opt/mingw32/bin:$PATH

View File

@@ -1,7 +1,7 @@
diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarch64.c
--- binutils-2.30/bfd/elfnn-aarch64.c 2018-01-17 11:29:21.000000000 +0000
+++ binutils-2.30-dka64/bfd/elfnn-aarch64.c 2018-02-11 19:54:08.141257544 +0000
@@ -2097,6 +2097,12 @@
diff -NBaur binutils-2.31.1/bfd/elfnn-aarch64.c binutils-2.31.1-dka64/bfd/elfnn-aarch64.c
--- binutils-2.31.1/bfd/elfnn-aarch64.c 2018-06-25 12:44:16.000000000 +0100
+++ binutils-2.31.1-dka64/bfd/elfnn-aarch64.c 2018-07-27 18:11:15.757082269 +0100
@@ -2342,6 +2342,12 @@
aarch64_stub_erratum_843419_veneer,
};
@@ -14,7 +14,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
struct elf_aarch64_stub_hash_entry
{
/* Base hash table entry structure. */
@@ -6088,11 +6094,13 @@
@@ -6370,11 +6376,13 @@
Elf_Internal_Sym *sym;
asection *sec;
struct elf_link_hash_entry *h;
@@ -28,7 +28,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
char *error_message = NULL;
r_symndx = ELFNN_R_SYM (rel->r_info);
@@ -6226,6 +6234,10 @@
@@ -6509,6 +6517,10 @@
h, &unresolved_reloc,
save_addend, &addend, sym);
@@ -36,10 +36,10 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
+ resolved_to_zero = (eh != NULL
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
+
switch (elfNN_aarch64_bfd_reloc_from_type (r_type))
switch (elfNN_aarch64_bfd_reloc_from_type (input_bfd, r_type))
{
case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:
@@ -6249,7 +6261,7 @@
@@ -6532,7 +6544,7 @@
need_relocs =
(!bfd_link_executable (info) || indx != 0) &&
(h == NULL
@@ -48,7 +48,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -6344,7 +6356,7 @@
@@ -6627,7 +6639,7 @@
need_relocs =
(!bfd_link_executable (info) || indx != 0) &&
(h == NULL
@@ -57,7 +57,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -6393,7 +6405,7 @@
@@ -6676,7 +6688,7 @@
bfd_vma off = symbol_tlsdesc_got_offset (input_bfd, h, r_symndx);
need_relocs = (h == NULL
@@ -66,7 +66,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
|| h->root.type != bfd_link_hash_undefweak);
BFD_ASSERT (globals->root.srelgot != NULL);
@@ -6735,6 +6747,26 @@
@@ -7019,6 +7031,26 @@
return FALSE;
}
@@ -93,7 +93,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
/* Adjust a symbol defined by a dynamic object and referenced by a
regular object. The current definition is in some section of the
dynamic object, but we're not including those sections. We have to
@@ -7928,6 +7960,7 @@
@@ -8221,6 +8253,7 @@
struct elf_aarch64_link_hash_table *htab;
struct elf_aarch64_link_hash_entry *eh;
struct elf_dyn_relocs *p;
@@ -101,7 +101,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
/* An example of a bfd_link_hash_indirect symbol is versioned
symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect)
@@ -7947,6 +7980,10 @@
@@ -8240,6 +8273,10 @@
info = (struct bfd_link_info *) inf;
htab = elf_aarch64_hash_table (info);
@@ -112,7 +112,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
/* Since STT_GNU_IFUNC symbol must go through PLT, we handle it
here if it is defined and referenced in a non-shared object. */
if (h->type == STT_GNU_IFUNC
@@ -7956,7 +7993,7 @@
@@ -8249,7 +8286,7 @@
{
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
@@ -121,7 +121,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
&& h->root.type == bfd_link_hash_undefweak)
{
if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -7990,6 +8027,11 @@
@@ -8283,6 +8320,11 @@
of relaxing into these from the large model PLT entries. */
s->size += PLT_SMALL_ENTRY_SIZE;
@@ -133,7 +133,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
/* We also need to make an entry in the .got.plt section, which
will be placed in the .got section by the linker script. */
htab->root.sgotplt->size += GOT_ENTRY_SIZE;
@@ -8012,6 +8054,7 @@
@@ -8305,6 +8347,7 @@
htab->root.srelplt->reloc_count++;
}
@@ -141,7 +141,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
else
{
h->plt.offset = (bfd_vma) - 1;
@@ -8024,9 +8067,6 @@
@@ -8317,9 +8360,6 @@
h->needs_plt = 0;
}
@@ -151,7 +151,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
if (h->got.refcount > 0)
{
bfd_boolean dyn;
@@ -8038,7 +8078,7 @@
@@ -8331,7 +8371,7 @@
/* Make sure this symbol is output as a dynamic symbol.
Undefined weak syms won't yet be marked as dynamic. */
@@ -160,7 +160,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
&& h->root.type == bfd_link_hash_undefweak)
{
if (!bfd_elf_link_record_dynamic_symbol (info, h))
@@ -8052,7 +8092,7 @@
@@ -8345,7 +8385,7 @@
{
h->got.offset = htab->root.sgot->size;
htab->root.sgot->size += GOT_ENTRY_SIZE;
@@ -169,7 +169,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
|| h->root.type != bfd_link_hash_undefweak)
&& (bfd_link_pic (info)
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
@@ -8088,7 +8128,7 @@
@@ -8381,7 +8421,7 @@
}
indx = h && h->dynindx != -1 ? h->dynindx : 0;
@@ -178,7 +178,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
|| h->root.type != bfd_link_hash_undefweak)
&& (!bfd_link_executable (info)
|| indx != 0
@@ -8154,7 +8194,7 @@
@@ -8447,7 +8487,7 @@
visibility. */
if (eh->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak)
{
@@ -187,7 +187,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
|| UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
eh->dyn_relocs = NULL;
@@ -8174,7 +8214,9 @@
@@ -8467,7 +8507,9 @@
symbols which turn out to need copy relocs or are not
dynamic. */
@@ -198,7 +198,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
&& ((h->def_dynamic
&& !h->def_regular)
|| (htab->root.dynamic_sections_created
@@ -8185,6 +8227,7 @@
@@ -8478,6 +8520,7 @@
Undefined weak syms won't yet be marked as dynamic. */
if (h->dynindx == -1
&& !h->forced_local
@@ -206,7 +206,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
&& h->root.type == bfd_link_hash_undefweak
&& !bfd_elf_link_record_dynamic_symbol (info, h))
return FALSE;
@@ -8805,8 +8848,17 @@
@@ -9098,8 +9141,17 @@
Elf_Internal_Sym *sym)
{
struct elf_aarch64_link_hash_table *htab;
@@ -224,7 +224,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
if (h->plt.offset != (bfd_vma) - 1)
{
asection *plt, *gotplt, *relplt;
@@ -8841,7 +8893,7 @@
@@ -9134,7 +9186,7 @@
return FALSE;
elfNN_aarch64_create_small_pltn_entry (h, htab, output_bfd, info);
@@ -233,7 +233,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
{
/* Mark the symbol as undefined, rather than as defined in
the .plt section. */
@@ -8860,10 +8912,11 @@
@@ -9153,10 +9205,11 @@
}
if (h->got.offset != (bfd_vma) - 1
@@ -247,7 +247,7 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
{
Elf_Internal_Rela rela;
bfd_byte *loc;
@@ -9357,6 +9410,9 @@
@@ -9650,6 +9703,9 @@
#define elf_backend_init_index_section \
_bfd_elf_init_2_index_sections
@@ -257,28 +257,28 @@ diff -NBaur binutils-2.30/bfd/elfnn-aarch64.c binutils-2.30-dka64/bfd/elfnn-aarc
#define elf_backend_finish_dynamic_sections \
elfNN_aarch64_finish_dynamic_sections
diff -NBaur binutils-2.30/ld/emulparams/aarch64elf32.sh binutils-2.30-dka64/ld/emulparams/aarch64elf32.sh
--- binutils-2.30/ld/emulparams/aarch64elf32.sh 2018-01-13 13:31:16.000000000 +0000
+++ binutils-2.30-dka64/ld/emulparams/aarch64elf32.sh 2018-02-11 19:48:08.997273556 +0000
diff -NBaur binutils-2.31.1/ld/emulparams/aarch64elf32.sh binutils-2.31.1-dka64/ld/emulparams/aarch64elf32.sh
--- binutils-2.31.1/ld/emulparams/aarch64elf32.sh 2018-06-24 19:38:57.000000000 +0100
+++ binutils-2.31.1-dka64/ld/emulparams/aarch64elf32.sh 2018-07-27 18:04:52.585317513 +0100
@@ -1,3 +1,5 @@
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH="aarch64:ilp32"
MACHINE=
NOP=0
diff -NBaur binutils-2.30/ld/emulparams/aarch64elf.sh binutils-2.30-dka64/ld/emulparams/aarch64elf.sh
--- binutils-2.30/ld/emulparams/aarch64elf.sh 2018-01-13 13:31:16.000000000 +0000
+++ binutils-2.30-dka64/ld/emulparams/aarch64elf.sh 2018-02-11 19:48:09.009273555 +0000
NOP=0x1f2003d5
diff -NBaur binutils-2.31.1/ld/emulparams/aarch64elf.sh binutils-2.31.1-dka64/ld/emulparams/aarch64elf.sh
--- binutils-2.31.1/ld/emulparams/aarch64elf.sh 2018-06-24 19:38:57.000000000 +0100
+++ binutils-2.31.1-dka64/ld/emulparams/aarch64elf.sh 2018-07-27 18:04:52.585317513 +0100
@@ -1,3 +1,5 @@
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh
+
ARCH=aarch64
MACHINE=
NOP=0
diff -NBaur binutils-2.30/ld/emultempl/aarch64elf.em binutils-2.30-dka64/ld/emultempl/aarch64elf.em
--- binutils-2.30/ld/emultempl/aarch64elf.em 2018-01-13 13:31:16.000000000 +0000
+++ binutils-2.30-dka64/ld/emultempl/aarch64elf.em 2018-02-11 19:48:09.009273555 +0000
@@ -378,7 +378,7 @@
NOP=0x1f2003d5
diff -NBaur binutils-2.31.1/ld/emultempl/aarch64elf.em binutils-2.31.1-dka64/ld/emultempl/aarch64elf.em
--- binutils-2.31.1/ld/emultempl/aarch64elf.em 2018-06-26 12:27:20.000000000 +0100
+++ binutils-2.31.1-dka64/ld/emultempl/aarch64elf.em 2018-07-27 18:04:52.585317513 +0100
@@ -380,7 +380,7 @@
{ "no-apply-dynamic-relocs", no_argument, NULL, OPTION_NO_APPLY_DYNAMIC_RELOCS},
'
@@ -286,11 +286,11 @@ diff -NBaur binutils-2.30/ld/emultempl/aarch64elf.em binutils-2.30-dka64/ld/emul
+PARSE_AND_LIST_OPTIONS=${PARSE_AND_LIST_OPTIONS}'
fprintf (file, _(" --no-enum-size-warning Don'\''t warn about objects with incompatible\n"
" enum sizes\n"));
fprintf (file, _(" --no-wchar-size-warning Don'\''t warn about objects with incompatible"
diff -NBaur binutils-2.30/ld/Makefile.am binutils-2.30-dka64/ld/Makefile.am
--- binutils-2.30/ld/Makefile.am 2018-01-13 13:31:16.000000000 +0000
+++ binutils-2.30-dka64/ld/Makefile.am 2018-02-11 19:48:09.021273555 +0000
@@ -1654,19 +1654,23 @@
fprintf (file, _(" --no-wchar-size-warning Don'\''t warn about objects with incompatible\n"
diff -NBaur binutils-2.31.1/ld/Makefile.am binutils-2.31.1-dka64/ld/Makefile.am
--- binutils-2.31.1/ld/Makefile.am 2018-06-24 19:38:57.000000000 +0100
+++ binutils-2.31.1-dka64/ld/Makefile.am 2018-07-27 18:04:52.585317513 +0100
@@ -1495,19 +1495,23 @@
$(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
eaarch64elf.c: $(srcdir)/emulparams/aarch64elf.sh \
@@ -318,10 +318,10 @@ diff -NBaur binutils-2.30/ld/Makefile.am binutils-2.30-dka64/ld/Makefile.am
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \
diff -NBaur binutils-2.30/ld/Makefile.in binutils-2.30-dka64/ld/Makefile.in
--- binutils-2.30/ld/Makefile.in 2018-01-27 15:03:10.000000000 +0000
+++ binutils-2.30-dka64/ld/Makefile.in 2018-02-11 19:48:09.037273554 +0000
@@ -3219,18 +3219,22 @@
diff -NBaur binutils-2.31.1/ld/Makefile.in binutils-2.31.1-dka64/ld/Makefile.in
--- binutils-2.31.1/ld/Makefile.in 2018-07-18 08:46:21.000000000 +0100
+++ binutils-2.31.1-dka64/ld/Makefile.in 2018-07-27 18:04:52.585317513 +0100
@@ -3097,18 +3097,22 @@
eaarch64elf.c: $(srcdir)/emulparams/aarch64elf.sh \
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \

View File

@@ -1,7 +1,49 @@
diff -NBaur gcc-8.1.0/gcc/config/aarch64/aarch64.c gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64.c
--- gcc-8.1.0/gcc/config/aarch64/aarch64.c 2018-03-15 08:55:04.000000000 +0000
+++ gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64.c 2018-05-08 11:09:01.247467815 +0100
@@ -11963,8 +11963,24 @@
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 532c33f4c2b..c8a8bc698a7 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -945,6 +945,7 @@ aarch64*-*-elf | aarch64*-*-fuchsia* | aarch64*-*-rtems*)
case $target in
aarch64-*-elf*)
use_gcc_stdint=wrap
+ tm_defines="${tm_defines} TARGET_DEFAULT_ASYNC_UNWIND_TABLES=1"
;;
aarch64-*-fuchsia*)
tm_file="${tm_file} fuchsia.h"
diff --git a/gcc/config/aarch64/aarch64-elf-raw.h b/gcc/config/aarch64/aarch64-elf-raw.h
index c074238df06..ef503ddd5a6 100644
--- a/gcc/config/aarch64/aarch64-elf-raw.h
+++ b/gcc/config/aarch64/aarch64-elf-raw.h
@@ -22,6 +22,7 @@
#ifndef GCC_AARCH64_ELF_RAW_H
#define GCC_AARCH64_ELF_RAW_H
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
#define STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
#define ENDFILE_SPEC \
" crtend%O%s crtn%O%s " \
diff --git a/gcc/config/aarch64/aarch64-opts.h b/gcc/config/aarch64/aarch64-opts.h
index 7a5c6d7664f..687793841de 100644
--- a/gcc/config/aarch64/aarch64-opts.h
+++ b/gcc/config/aarch64/aarch64-opts.h
@@ -48,6 +48,12 @@ enum aarch64_tls_type {
TLS_DESCRIPTORS
};
+/* Which thread pointer access sequence to use. */
+enum aarch64_tp_type {
+ TP_HARD,
+ TP_SOFT
+};
+
/* The code model defines the address generation strategy.
Most have a PIC and non-PIC variant. */
enum aarch64_code_model {
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 175f13dc264..733ab473cbd 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -11979,8 +11979,24 @@ aarch64_load_tp (rtx target)
|| !register_operand (target, Pmode))
target = gen_reg_rtx (Pmode);
@@ -28,21 +70,11 @@ diff -NBaur gcc-8.1.0/gcc/config/aarch64/aarch64.c gcc-8.1.0-aarch64/gcc/config/
return target;
}
diff -NBaur gcc-8.1.0/gcc/config/aarch64/aarch64-elf-raw.h gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64-elf-raw.h
--- gcc-8.1.0/gcc/config/aarch64/aarch64-elf-raw.h 2018-01-03 10:03:58.000000000 +0000
+++ gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64-elf-raw.h 2018-05-08 11:09:01.247467815 +0100
@@ -22,6 +22,7 @@
#ifndef GCC_AARCH64_ELF_RAW_H
#define GCC_AARCH64_ELF_RAW_H
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
#define STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
#define ENDFILE_SPEC \
" crtend%O%s crtn%O%s " \
diff -NBaur gcc-8.1.0/gcc/config/aarch64/aarch64.h gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64.h
--- gcc-8.1.0/gcc/config/aarch64/aarch64.h 2018-02-21 14:05:45.000000000 +0000
+++ gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64.h 2018-05-08 11:09:01.255467862 +0100
@@ -957,6 +957,10 @@
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 976f9afae54..73263bcb5e7 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -957,6 +957,10 @@ typedef struct
/* Check TLS Descriptors mechanism is selected. */
#define TARGET_TLS_DESC (aarch64_tls_dialect == TLS_DESCRIPTORS)
@@ -53,9 +85,10 @@ diff -NBaur gcc-8.1.0/gcc/config/aarch64/aarch64.h gcc-8.1.0-aarch64/gcc/config/
extern enum aarch64_code_model aarch64_cmodel;
/* When using the tiny addressing model conditional and unconditional branches
diff -NBaur gcc-8.1.0/gcc/config/aarch64/aarch64.md gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64.md
--- gcc-8.1.0/gcc/config/aarch64/aarch64.md 2018-04-24 17:58:49.000000000 +0100
+++ gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64.md 2018-05-08 11:09:01.255467862 +0100
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 32a0e1f3685..783c655acf0 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -5693,11 +5693,22 @@
(define_insn "aarch64_load_tp_hard"
[(set (match_operand:DI 0 "register_operand" "=r")
@@ -81,10 +114,11 @@ diff -NBaur gcc-8.1.0/gcc/config/aarch64/aarch64.md gcc-8.1.0-aarch64/gcc/config
;; The TLS ABI specifically requires that the compiler does not schedule
;; instructions in the TLS stubs, in order to enable linker relaxation.
;; Therefore we treat the stubs as an atomic sequence.
diff -NBaur gcc-8.1.0/gcc/config/aarch64/aarch64.opt gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64.opt
--- gcc-8.1.0/gcc/config/aarch64/aarch64.opt 2018-01-13 17:50:35.000000000 +0000
+++ gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64.opt 2018-05-08 11:09:01.255467862 +0100
@@ -115,6 +115,20 @@
diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt
index 52eaf8c6f40..52bccddc6e3 100644
--- a/gcc/config/aarch64/aarch64.opt
+++ b/gcc/config/aarch64/aarch64.opt
@@ -115,6 +115,20 @@ Enum(aarch64_tls_size) String(32) Value(32)
EnumValue
Enum(aarch64_tls_size) String(48) Value(48)
@@ -105,26 +139,11 @@ diff -NBaur gcc-8.1.0/gcc/config/aarch64/aarch64.opt gcc-8.1.0-aarch64/gcc/confi
march=
Target RejectNegative ToLower Joined Var(aarch64_arch_string)
-march=ARCH Use features of architecture ARCH.
diff -NBaur gcc-8.1.0/gcc/config/aarch64/aarch64-opts.h gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64-opts.h
--- gcc-8.1.0/gcc/config/aarch64/aarch64-opts.h 2018-01-13 17:50:35.000000000 +0000
+++ gcc-8.1.0-aarch64/gcc/config/aarch64/aarch64-opts.h 2018-05-08 11:09:01.255467862 +0100
@@ -48,6 +48,12 @@
TLS_DESCRIPTORS
};
+/* Which thread pointer access sequence to use. */
+enum aarch64_tp_type {
+ TP_HARD,
+ TP_SOFT
+};
+
/* The code model defines the address generation strategy.
Most have a PIC and non-PIC variant. */
enum aarch64_code_model {
diff -NBaur gcc-8.1.0/gcc/config/aarch64/t-aarch64 gcc-8.1.0-aarch64/gcc/config/aarch64/t-aarch64
--- gcc-8.1.0/gcc/config/aarch64/t-aarch64 2018-01-03 10:03:58.000000000 +0000
+++ gcc-8.1.0-aarch64/gcc/config/aarch64/t-aarch64 2018-05-08 11:09:01.255467862 +0100
@@ -68,5 +68,7 @@
diff --git a/gcc/config/aarch64/t-aarch64 b/gcc/config/aarch64/t-aarch64
index 0be1f0d63aa..a54068bfd96 100644
--- a/gcc/config/aarch64/t-aarch64
+++ b/gcc/config/aarch64/t-aarch64
@@ -68,5 +68,7 @@ cortex-a57-fma-steering.o: $(srcdir)/config/aarch64/cortex-a57-fma-steering.c \
$(srcdir)/config/aarch64/cortex-a57-fma-steering.c
comma=,
@@ -134,10 +153,11 @@ diff -NBaur gcc-8.1.0/gcc/config/aarch64/t-aarch64 gcc-8.1.0-aarch64/gcc/config/
+MULTILIB_DIRNAMES = large pic
+MULTILIB_REQUIRED = mcmodel=large fPIC
+MULTILIB_MATCHES = fPIC=fpic fPIC=fpie fPIC=fPIE
diff -NBaur gcc-8.1.0/gcc/gcc.c gcc-8.1.0-aarch64/gcc/gcc.c
--- gcc-8.1.0/gcc/gcc.c 2018-02-09 06:44:06.000000000 +0000
+++ gcc-8.1.0-aarch64/gcc/gcc.c 2018-05-08 11:09:01.259467885 +0100
@@ -786,6 +786,11 @@
diff --git a/gcc/gcc.c b/gcc/gcc.c
index a716f708259..6a11011dba7 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -786,6 +786,11 @@ proper position among the other output files. */
#endif
#endif
@@ -149,7 +169,7 @@ diff -NBaur gcc-8.1.0/gcc/gcc.c gcc-8.1.0-aarch64/gcc/gcc.c
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
#ifndef STARTFILE_SPEC
#define STARTFILE_SPEC \
@@ -1081,6 +1086,7 @@
@@ -1081,6 +1086,7 @@ static const char *link_spec = LINK_SPEC;
static const char *lib_spec = LIB_SPEC;
static const char *link_gomp_spec = "";
static const char *libgcc_spec = LIBGCC_SPEC;
@@ -157,7 +177,7 @@ diff -NBaur gcc-8.1.0/gcc/gcc.c gcc-8.1.0-aarch64/gcc/gcc.c
static const char *endfile_spec = ENDFILE_SPEC;
static const char *startfile_spec = STARTFILE_SPEC;
static const char *linker_name_spec = LINKER_NAME;
@@ -1577,6 +1583,7 @@
@@ -1577,6 +1583,7 @@ static struct spec_list static_specs[] =
INIT_STATIC_SPEC ("lib", &lib_spec),
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
@@ -165,10 +185,11 @@ diff -NBaur gcc-8.1.0/gcc/gcc.c gcc-8.1.0-aarch64/gcc/gcc.c
INIT_STATIC_SPEC ("startfile", &startfile_spec),
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
INIT_STATIC_SPEC ("version", &compiler_version),
diff -NBaur gcc-8.1.0/libgcc/crtstuff.c gcc-8.1.0-aarch64/libgcc/crtstuff.c
--- gcc-8.1.0/libgcc/crtstuff.c 2018-01-03 10:03:58.000000000 +0000
+++ gcc-8.1.0-aarch64/libgcc/crtstuff.c 2018-05-08 11:09:01.259467885 +0100
@@ -47,6 +47,7 @@
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 5e894455e16..f2347455de0 100644
--- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c
@@ -47,6 +47,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* Target machine header files require this define. */
#define IN_LIBGCC2
@@ -176,15 +197,3 @@ diff -NBaur gcc-8.1.0/libgcc/crtstuff.c gcc-8.1.0-aarch64/libgcc/crtstuff.c
/* FIXME: Including auto-host is incorrect, but until we have
identified the set of defines that need to go into auto-target.h,
diff -NBaur gcc-8.1.0/libgcc/Makefile.in gcc-8.1.0-aarch64/libgcc/Makefile.in
--- gcc-8.1.0/libgcc/Makefile.in 2018-01-03 10:03:58.000000000 +0000
+++ gcc-8.1.0-aarch64/libgcc/Makefile.in 2018-05-08 11:09:01.259467885 +0100
@@ -847,7 +847,7 @@
# libgcc_eh.a, only LIB2ADDEH matters. If we do, only LIB2ADDEHSTATIC and
# LIB2ADDEHSHARED matter. (Usually all three are identical.)
-c_flags := -fexceptions
+c_flags := -fno-exceptions
ifeq ($(enable_shared),yes)

View File

@@ -33,8 +33,8 @@ include $(DEVKITPRO)/devkitA64/base_tools
#---------------------------------------------------------------------------------
define bin2o
bin2s $< | $(AS) -o $(@)
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(<F) | tr . _)`.h
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(<F) | tr . _)`.h
echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(<F) | tr . _)`.h
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' -e 's/[^A-Za-z0-9_]/_/g')`"_end[];" > `(echo $(<F) | tr . _)`.h
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' -e 's/[^A-Za-z0-9_]/_/g')`"[];" >> `(echo $(<F) | tr . _)`.h
echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' -e 's/[^A-Za-z0-9_]/_/g')`_size";" >> `(echo $(<F) | tr . _)`.h
endef

View File

@@ -64,7 +64,7 @@ then
--prefix=$prefix \
--enable-lto $plugin_ld\
--with-system-zlib \
--with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 release 11" \
--with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 release 12" \
$CROSS_PARAMS \
$CROSS_GCC_PARAMS \
|| { echo "Error configuring gcc"; exit 1; }

View File

@@ -1,190 +0,0 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
PHDRS
{
code PT_LOAD FLAGS(5) /* Read | Execute */;
rodata PT_LOAD FLAGS(4) /* Read */;
data PT_LOAD FLAGS(6) /* Read | Write */;
}
SECTIONS
{
/* =========== CODE section =========== */
PROVIDE(__start__ = 0x100000);
. = __start__;
.text ALIGN(0x1000) :
{
/* .init */
KEEP( *(.crt0) )
KEEP( *(.init) )
. = ALIGN(4);
/* .text */
*(.text)
*(.text.*)
*(.glue_7)
*(.glue_7t)
*(.stub)
*(.gnu.warning)
*(.gnu.linkonce.t*)
. = ALIGN(4);
/* .fini */
KEEP( *(.fini) )
. = ALIGN(4);
} : code
/* =========== RODATA section =========== */
. = ALIGN(0x1000);
.rodata :
{
*(.rodata)
*(.roda)
*(.rodata.*)
*all.rodata*(*)
*(.gnu.linkonce.r*)
SORT(CONSTRUCTORS)
. = ALIGN(4);
} : rodata
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } : rodata
__exidx_start = .;
ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } : rodata
__exidx_end = .;
/* =========== DATA section =========== */
. = ALIGN(0x1000);
.data :
{
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4);
} : data
.tdata ALIGN(4) :
{
__tdata_lma = .;
*(.tdata)
*(.tdata.*)
*(.gnu.linkonce.td.*)
. = ALIGN(4);
__tdata_lma_end = .;
} : data
.tbss ALIGN(4) :
{
*(.tbss)
*(.tbss.*)
*(.gnu.linkonce.tb.*)
*(.tcommon)
. = ALIGN(4);
} : data
.preinit_array ALIGN(4) :
{
PROVIDE (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE (__preinit_array_end = .);
} : data
.init_array ALIGN(4) :
{
PROVIDE (__init_array_start = .);
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
PROVIDE (__init_array_end = .);
} : data
.fini_array ALIGN(4) :
{
PROVIDE (__fini_array_start = .);
KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*)))
PROVIDE (__fini_array_end = .);
} : data
.ctors ALIGN(4) :
{
KEEP (*crtbegin.o(.ctors)) /* MUST be first -- GCC requires it */
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
} : data
.dtors ALIGN(4) :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
} : data
__bss_start__ = .;
.bss ALIGN(4) :
{
*(.dynbss)
*(.bss)
*(.bss.*)
*(.gnu.linkonce.b*)
*(COMMON)
. = ALIGN(4);
/* Reserve space for the TLS segment of the main thread */
__tls_start = .;
. += + SIZEOF(.tdata) + SIZEOF(.tbss);
__tls_end = .;
} : data
__bss_end__ = .;
__end__ = ABSOLUTE(.) ;
/* ==================
==== Metadata ====
================== */
/* Discard sections that difficult post-processing */
/DISCARD/ : { *(.group .comment .note) }
/* 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) }
/* 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) }
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T 3dsx.ld%s -d --emit-relocs --use-blx --gc-sections
*startfile:
3dsx_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,73 +0,0 @@
@---------------------------------------------------------------------------------
@ 3DS processor selection
@---------------------------------------------------------------------------------
.cpu mpcore
@---------------------------------------------------------------------------------
@---------------------------------------------------------------------------------
.section ".crt0","ax"
.global _start, __service_ptr, __apt_appid, __heap_size, __linear_heap_size, __system_arglist, __system_runflags
@---------------------------------------------------------------------------------
.align 2
.arm
@---------------------------------------------------------------------------------
_start:
@---------------------------------------------------------------------------------
b startup
.ascii "_prm"
__service_ptr:
.word 0 @ Pointer to service handle override list -- if non-NULL it is assumed that we have been launched from a homebrew launcher
__apt_appid:
.word 0x300 @ Program APPID
__heap_size:
.word 24*1024*1024 @ Default heap size (24 MiB)
__linear_heap_size:
.word 32*1024*1024 @ Default linear heap size (32 MiB)
__system_arglist:
.word 0 @ Pointer to argument list (argc (u32) followed by that many NULL terminated strings)
__system_runflags:
.word 0 @ Flags to signal runtime restrictions to ctrulib
startup:
@ Save return address
mov r4, lr
@ Clear the BSS section
ldr r0, =__bss_start__
ldr r1, =__bss_end__
sub r1, r1, r0
bl ClearMem
@ System initialization
mov r0, r4
bl initSystem
@ Set up argc/argv arguments for main()
ldr r0, =__system_argc
ldr r1, =__system_argv
ldr r0, [r0]
ldr r1, [r1]
@ Jump to user code
ldr r3, =main
ldr lr, =__ctru_exit
bx r3
@---------------------------------------------------------------------------------
@ 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

View File

@@ -1,13 +0,0 @@
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
ds_arm7_vram_crt0:
$(CC) -x assembler-with-cpp -marm -c -DVRAM ds_arm7_crt0.s -ods_arm7_vram_crt0.o
$(CC) -x assembler-with-cpp -mthumb -c -DVRAM ds_arm7_crt0.s -othumb/ds_arm7_vram_crt0.o
3dsx_crt0:
$(CC) -march=armv6k -mfloat-abi=hard -c 3dsx_crt0.s -o armv6k/fpu/3dsx_crt0.o

View File

@@ -1,190 +0,0 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
MEMORY {
/* This base address is chosen to be a reserved instruction in THUMB mode,
and SWILT in ARM mode, with an impossible SWI value. This should allow
the patcher / linker to find all shifted addresses within each section.
Changed sections are: glue_7, got
*/
ddmem : ORIGIN = 0xBF800000, LENGTH = 16K
}
SECTIONS
{
.crt0 :
{
__text_start = . ;
KEEP (*(.crt0))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ddmem = 0xff
.text : /* ALIGN (4): */
{
*(.text.*)
*(.stub)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.gnu.linkonce.t*)
__glue_start = ABSOLUTE(.);
*(.glue_7)
*(.glue_7t)
__glue_end = ABSOLUTE(.);
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ddmem = 0xff
.fini :
{
KEEP (*(.fini))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ddmem =0xff
__text_end = . ;
.rodata :
{
*(.rodata)
*all.rodata*(*)
*(.roda)
*(.rodata.*)
*(.gnu.linkonce.r*)
SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ddmem = 0xff
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ddmem
__exidx_start = .;
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ddmem
__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)) } >ddmem = 0xff
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
.init_array : { KEEP (*(.init_array)) } >ddmem = 0xff
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
.fini_array : { KEEP (*(.fini_array)) } >ddmem = 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. */
} >ddmem = 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. */
} >ddmem = 0xff
.eh_frame :
{
KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ddmem = 0xff
.gcc_except_table :
{
*(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ddmem = 0xff
.jcr : { KEEP (*(.jcr)) } >ddmem = 0
__got_start = . ;
.got :
{
*(.got.plt)
*(.got)
*(.rel.got)
} >ddmem = 0
__got_end = . ;
.data ALIGN(4) : {
__data_start = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4);
__data_end = ABSOLUTE(.) ;
} >ddmem = 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. */
} >ddmem
__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 . */
}

View File

@@ -1,227 +0,0 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
PHDRS {
crt0 PT_LOAD FLAGS(7);
arm7 PT_LOAD FLAGS(7);
arm7i PT_LOAD FLAGS(0x100007);
}
MEMORY {
ewram : ORIGIN = 0x02380000, LENGTH = 12M - 512K
rom : ORIGIN = 0x08000000, LENGTH = 32M
iwram : ORIGIN = 0x037f8000, LENGTH = 96K
twl_ewram : ORIGIN = 0x02e80000, LENGTH = 512K - 64K
twl_iwram : ORIGIN = 0x03000000, LENGTH = 256K
}
__iwram_start = ORIGIN(iwram);
__iwram_top = ORIGIN(iwram)+ LENGTH(iwram);
__sp_irq = __iwram_top - 0x100;
__sp_svc = __sp_irq - 0x100;
__sp_usr = __sp_svc - 0x100;
__irq_flags = 0x04000000 - 8;
__irq_flagsaux = 0x04000000 - 0x40;
__irq_vector = 0x04000000 - 4;
SECTIONS
{
.twl :
{
__arm7i_lma__ = LOADADDR(.twl);
__arm7i_start__ = .;
*(.twl)
*.twl*(.text .stub .text.* .gnu.linkonce.t.*)
*.twl*(.rodata)
*.twl*(.roda)
*.twl*(.rodata.*)
*.twl*(.data)
*.twl*(.data.*)
*.twl*(.gnu.linkonce.d*)
. = ALIGN(4);
__arm7i_end__ = .;
} >twl_iwram AT>twl_ewram :arm7i
.twl_bss ALIGN(4) (NOLOAD) :
{
__twl_bss_start__ = .;
*(.twl_bss)
*.twl.*(.dynbss)
*.twl.*(.gnu.linkonce.b*)
*.twl.*(.bss*)
*.twl.*(COMMON)
. = ALIGN(4);
__twl_bss_end__ = .;
} >twl_iwram :NONE
.crt0 :
{
KEEP (*(.crt0))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram :crt0
.text :
{
__arm7_lma__ = LOADADDR(.text);
__arm7_start__ = .;
KEEP (*(SORT_NONE(.init)))
*(.plt)
*(.text .stub .text.* .gnu.linkonce.t.*)
KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram AT>ewram :arm7
.fini :
{
KEEP (*(.fini))
} >iwram AT>ewram
.rodata :
{
*(.rodata)
*all.rodata*(*)
*(.roda)
*(.rodata.*)
*(.gnu.linkonce.r*)
SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram AT>ewram
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >iwram AT>ewram
.ARM.exidx : {
__exidx_start = .;
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
__exidx_end = .;
} >iwram AT>ewram
/* 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. */
.preinit_array : {
. = ALIGN(32 / 8);
PROVIDE (__preinit_array_start = .);
KEEP (*(.preinit_array))
PROVIDE (__preinit_array_end = .);
} >iwram AT>ewram
.init_array : {
PROVIDE (__init_array_start = .);
KEEP (*(.init_array))
PROVIDE (__init_array_end = .);
} >iwram AT>ewram
.fini_array : {
PROVIDE (__fini_array_start = .);
KEEP (*(.fini_array))
PROVIDE (__fini_array_end = .);
} >iwram AT>ewram
.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 AT>ewram
.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 AT>ewram
.eh_frame :
{
KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram AT>ewram
.gcc_except_table :
{
*(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram AT>ewram
.jcr : { KEEP (*(.jcr)) } >iwram AT>ewram
.got : { *(.got.plt) *(.got) } >iwram AT>ewram
.data ALIGN(4) : {
__data_start = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4);
__data_end = ABSOLUTE(.) ;
} >iwram AT>ewram
.bss ALIGN(4) (NOLOAD) :
{
__arm7_end__ = .;
__bss_start = ABSOLUTE(.);
__bss_start__ = ABSOLUTE(.);
*(.dynbss)
*(.gnu.linkonce.b*)
*(.bss*)
*(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__bss_end__ = ABSOLUTE(.);
__end__ = ABSOLUTE(.);
} >iwram
/* 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) }
/* These must appear regardless of . */
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T ds_arm7.ld%s --gc-sections
*startfile:
ds_arm7_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,179 +0,0 @@
@---------------------------------------------------------------------------------
.section ".crt0","ax"
.global _start
@---------------------------------------------------------------------------------
.align 4
.arm
@---------------------------------------------------------------------------------
_start:
@---------------------------------------------------------------------------------
mov r0, #0x04000000 @ IME = 0;
mov r1, #0
str r1, [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
#ifndef VRAM
adr r1, __sync_start @ Perform ARM7<->ARM9 sync code
ldr r2, =__arm7_start__
mov r3, #(__sync_end-__sync_start)
mov r8, r2
bl CopyMem
mov r3, r8
bl _blx_r3_stub
@---------------------------------------------------------------------------------
@ Copy arm7 binary from LMA to VMA (EWRAM to IWRAM)
@---------------------------------------------------------------------------------
adr r0, arm7lma @ Calculate ARM7 LMA
ldr r1, [r0]
add r1, r1, r0
ldr r2, =__arm7_start__
ldr r4, =__arm7_end__
bl CopyMemCheck
#else
bl __sync_start
#endif
ldr r0, =__bss_start__ @ Clear BSS section to 0x00
ldr r1, =__bss_end__
sub r1, r1, r0
bl ClearMem
cmp r10, #1
bne NotTWL
ldr r1, =__dsimode @ set DSi mode flag
strb r10, [r1]
#ifndef VRAM
ldr r1, =0x02ffe1d8 @ Get ARM7i LMA from header
ldr r1, [r1]
ldr r2, =__arm7i_start__
ldr r4, =__arm7i_end__
bl CopyMemCheck
ldr r0, =__twl_bss_start__ @ Clear TWL BSS section to 0x00
ldr r1, =__twl_bss_end__
sub r1, r1, r0
bl ClearMem
#endif
NotTWL:
ldr r3, =__libc_init_array @ global constructors
bl _blx_r3_stub
mov r0, #0 @ int argc
mov r1, #0 @ char *argv[]
ldr r3, =main
ldr lr,=__libnds_exit
mov r12, #0x4000000 @ tell arm9 we are ready
mov r9, #0
str r9, [r12, #0x180]
_blx_r3_stub:
bx r3
#ifndef VRAM
arm7lma:
.word __arm7_lma__ - .
#endif
.pool
@---------------------------------------------------------------------------------
@ ARM7<->ARM9 synchronization code
@---------------------------------------------------------------------------------
__sync_start:
push {lr}
mov r12, #0x4000000
mov r9, #0x0
bl IPCSync
mov r9, #(0x9<<8)
str r9, [r12, #0x180]
mov r9, #0xA
bl IPCSync
mov r9, #(0xB<<8)
str r9, [r12, #0x180]
mov r9, #0xC
bl IPCSync
mov r9, #(0xD<<8)
str r9, [r12, #0x180]
IPCRecvFlag:
ldr r10, [r12, #0x180]
and r10, r10, #0xF
cmp r10, #0xC
beq IPCRecvFlag
pop {pc}
IPCSync:
ldr r10, [r12, #0x180]
and r10, r10, #0xF
cmp r10, r9
bne IPCSync
bx lr
__sync_end:
@---------------------------------------------------------------------------------
@ 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:
@---------------------------------------------------------------------------------
cmp r1, r2
bxeq lr
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
@---------------------------------------------------------------------------------

View File

@@ -1,187 +0,0 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
MEMORY {
rom : ORIGIN = 0x08000000, LENGTH = 32M
iwram : ORIGIN = 0x037f8000, LENGTH = 96K
}
__iwram_start = ORIGIN(iwram);
__iwram_top = ORIGIN(iwram)+ LENGTH(iwram);
__sp_irq = __iwram_top - 0x100;
__sp_svc = __sp_irq - 0x100;
__sp_usr = __sp_svc - 0x100;
__irq_flags = 0x04000000 - 8;
__irq_flagsaux = 0x04000000 - 0x40;
__irq_vector = 0x04000000 - 4;
SECTIONS
{
.crt0 :
{
__text_start = . ;
KEEP (*(.crt0))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >iwram = 0xff
.init :
{
KEEP (*(SORT_NONE(.init)))
} >iwram = 0xff
.plt : { *(.plt) } >iwram = 0xff
.text : /* ALIGN (4): */
{
*(.text .stub .text.* .gnu.linkonce.t.*)
KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
. = 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
.data ALIGN(4) : {
__data_start = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4);
__data_end = ABSOLUTE(.) ;
} >iwram = 0xff
__arm7_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__ = ABSOLUTE(.);
__end__ = ABSOLUTE(.);
} >iwram
/* 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 . */
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T ds_arm7_iwram.ld%s
*startfile:
ds_arm7_vram_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,191 +0,0 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
MEMORY {
rom : ORIGIN = 0x08000000, LENGTH = 32M
iwram : ORIGIN = 0x037f8000, LENGTH = 96K
vram : ORIGIN = 0x06000000, LENGTH = 256K
}
__iwram_start = ORIGIN(iwram);
__iwram_top = ORIGIN(iwram)+ LENGTH(iwram);
__sp_irq = __iwram_top - 0x100;
__sp_svc = __sp_irq - 0x100;
__sp_usr = __sp_svc - 0x100;
__irq_flags = 0x04000000 - 8;
__irq_flagsaux = 0x04000000 - 0x40;
__irq_vector = 0x04000000 - 4;
SECTIONS
{
.crt0 :
{
__text_start = . ;
KEEP (*(.crt0))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >vram = 0xff
__arm7_lma__ = .;
__arm7_start__ = .;
.init :
{
KEEP (*(SORT_NONE(.init)))
} >vram = 0xff
.plt : { *(.plt) } >vram = 0xff
.text : /* ALIGN (4): */
{
*(.text .stub .text.* .twl .gnu.linkonce.t.*)
KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >vram = 0xff
.fini :
{
KEEP (*(.fini))
} >vram =0xff
__text_end = . ;
.rodata :
{
*(.rodata)
*all.rodata*(*)
*(.roda)
*(.rodata.*)
*(.gnu.linkonce.r*)
SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >vram = 0xff
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >vram
__exidx_start = .;
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >vram
__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)) } >vram = 0xff
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
.init_array : { KEEP (*(.init_array)) } >vram = 0xff
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
.fini_array : { KEEP (*(.fini_array)) } >vram = 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. */
} >vram = 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. */
} >vram = 0xff
.eh_frame :
{
KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >vram = 0xff
.gcc_except_table :
{
*(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >vram = 0xff
.jcr : { KEEP (*(.jcr)) } >vram = 0
.got : { *(.got.plt) *(.got) } >vram = 0
.data ALIGN(4) : {
__data_start = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4);
__data_end = ABSOLUTE(.) ;
} >vram = 0xff
__arm7_end__ = .;
.bss ALIGN(4) (NOLOAD) :
{
__bss_start = ABSOLUTE(.);
__bss_start__ = ABSOLUTE(.);
*(.dynbss)
*(.gnu.linkonce.b*)
*(.bss*)
*(.twl_bss)
*(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__bss_end__ = ABSOLUTE(.);
__end__ = ABSOLUTE(.);
} >vram
/* 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 . */
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T ds_arm7_vram.ld%s
*startfile:
ds_arm7_vram_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,279 +0,0 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
__ewram_end = ORIGIN(ewram) + LENGTH(ewram);
__eheap_end = ORIGIN(ewram) + LENGTH(ewram);
__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;
PHDRS {
main PT_LOAD FLAGS(7);
dtcm PT_LOAD FLAGS(7);
itcm PT_LOAD FLAGS(7);
vectors PT_LOAD FLAGS(7);
twl PT_LOAD FLAGS(0x100007);
}
SECTIONS
{
/* Secure area crap */
.secure : { *(.secure) } >ewram :main = 0
.crt0 :
{
__text_start = . ;
KEEP (*(.crt0))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram :main = 0x00
.plt : { *(.plt) } >ewram :main = 0xff
.init :
{
KEEP (*(SORT_NONE(.init)))
} >ewram :main
.text : /* ALIGN (4): */
{
*(EXCLUDE_FILE(*.itcm* *.vectors* *.twl*) .text)
*(EXCLUDE_FILE(*.itcm* *.vectors* *.twl*) .stub)
*(EXCLUDE_FILE(*.itcm* *.vectors* *.twl*) .text.*)
/* .gnu.warning sections are handled specially by elf32.em. */
*(EXCLUDE_FILE(*.twl*) .gnu.warning)
*(EXCLUDE_FILE(*.twl*) .gnu.linkonce.t*)
*(.glue_7)
*(.glue_7t)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram :main = 0xff
.fini :
{
KEEP (*(.fini))
} >ewram :main =0xff
__text_end = . ;
.rodata :
{
*(EXCLUDE_FILE(*.twl*) .rodata)
*all.rodata*(*)
*(EXCLUDE_FILE(*.twl*) .roda)
*(EXCLUDE_FILE(*.twl*) .rodata.*)
*(EXCLUDE_FILE(*.twl*) .gnu.linkonce.r*)
SORT(CONSTRUCTORS)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram :main = 0xff
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ewram :main
__exidx_start = .;
ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ewram :main
__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 :main = 0xff
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
.init_array :
{
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
} >ewram :main = 0xff
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
.fini_array :
{
KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*)))
} >ewram :main = 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 :main = 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 :main = 0xff
.eh_frame :
{
KEEP (*(.eh_frame))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram :main = 0xff
.gcc_except_table :
{
*(.gcc_except_table)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram :main = 0xff
.jcr : { KEEP (*(.jcr)) } >ewram :main = 0
.got : { *(.got.plt) *(.got) *(.rel.got) } >ewram :main = 0
.ewram ALIGN(4) :
{
__ewram_start = ABSOLUTE(.) ;
*(.ewram)
*ewram.*(.text)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram :main = 0xff
.data ALIGN(4) :
{
__data_start = ABSOLUTE(.);
*(EXCLUDE_FILE(*.twl*) .data)
*(EXCLUDE_FILE(*.twl*) .data.*)
*(EXCLUDE_FILE(*.twl*) .gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4);
__data_end = ABSOLUTE(.) ;
} >ewram :main = 0xff
__bss_vma = . ;
.dtcm :
{
__dtcm_lma = LOADADDR(.dtcm);
__dtcm_start = ABSOLUTE(.);
*(.dtcm)
*(.dtcm.*)
. = ALIGN(4);
__dtcm_end = ABSOLUTE(.);
} >dtcm AT>ewram :dtcm = 0xff
.itcm :
{
__itcm_lma = LOADADDR(.itcm);
__itcm_start = ABSOLUTE(.);
*(.itcm)
*.itcm*(.text .stub .text.*)
. = ALIGN(4);
__itcm_end = ABSOLUTE(.);
} >itcm AT>ewram :itcm = 0xff
.vectors :
{
__vectors_lma = LOADADDR(.vectors);
__vectors_start = ABSOLUTE(.);
KEEP(*(.vectors .vectors.*))
. = ALIGN(4);
__vectors_end = ABSOLUTE(.);
} >vectors AT>ewram :vectors = 0xff
.sbss __dtcm_end (NOLOAD):
{
__sbss_start = ABSOLUTE(.);
__sbss_start__ = ABSOLUTE(.);
*(.sbss)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__sbss_end = ABSOLUTE(.);
} >dtcm :NONE
.bss __bss_vma (NOLOAD):
{
__bss_start = ABSOLUTE(.);
__bss_start__ = ABSOLUTE(.);
*(EXCLUDE_FILE(*.twl*) .dynbss)
*(EXCLUDE_FILE(*.twl*) .gnu.linkonce.b*)
*(EXCLUDE_FILE(*.twl*) .bss*)
*(EXCLUDE_FILE(*.twl*) COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__bss_end__ = ABSOLUTE(.) ;
__end__ = ABSOLUTE(.) ;
} >ewram :NONE
.twl __end__ : AT(MAX(0x2400000,MAX(__end__,LOADADDR(.vectors)+SIZEOF(.vectors))))
{
__arm9i_lma__ = LOADADDR(.twl);
__arm9i_start__ = ABSOLUTE(.);
*(.twl)
*.twl*(.text .stub .text.* .gnu.linkonce.t.*)
*.twl*(.rodata)
*.twl*(.roda)
*.twl*(.rodata.*)
*.twl*(.data)
*.twl*(.data.*)
*.twl*(.gnu.linkonce.d*)
__arm9i_end__ = ABSOLUTE(.);
} :twl
.twl_bss __arm9i_end__ (NOLOAD):
{
__twl_bss_start__ = ABSOLUTE(.);
*(.twl_bss)
*.twl*(.dynbss)
*.twl*(.gnu.linkonce.b*)
*.twl*(.bss*)
*.twl*(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__twl_bss_end__ = ABSOLUTE(.);
__twl_end__ = ABSOLUTE(.);
} :NONE
/* 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 . */
}

View File

@@ -1,6 +0,0 @@
MEMORY {
ewram : ORIGIN = 0x02000000, LENGTH = 4M - 512k
dtcm : ORIGIN = 0x0b000000, LENGTH = 16K
vectors : ORIGIN = 0x01000000, LENGTH = 256
itcm : ORIGIN = 0x01000100, LENGTH = 32K - 256
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T ds_arm9.mem%s -T ds_arm9.ld%s --gc-sections
*startfile:
ds_arm9_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,266 +0,0 @@
@---------------------------------------------------------------------------------
@ DS processor selection
@---------------------------------------------------------------------------------
.arch armv5te
.cpu arm946e-s
@---------------------------------------------------------------------------------
.equ _libnds_argv,0x02FFFE70
@---------------------------------------------------------------------------------
.section ".crt0","ax"
.global _start
@---------------------------------------------------------------------------------
.align 4
.arm
@---------------------------------------------------------------------------------
_start:
@---------------------------------------------------------------------------------
mov r0, #0x04000000 @ IME = 0;
str r0, [r0, #0x208]
@ set sensible stacks to allow bios call
mov r0, #0x13 @ Switch to SVC Mode
msr cpsr, r0
mov r1,#0x03000000
sub r1,r1,#0x1000
mov sp,r1
mov r0, #0x1F @ Switch to System Mode
msr cpsr, r0
sub r1,r1,#0x100
mov sp,r1
ldr r3, =__libnds_mpu_setup
blx r3
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 r12, #0x4000000 @ Read system ROM status (NTR/TWL)
ldrb r11, [r12,r12,lsr #12]
and r11, r11, #0x3
mov r9, #(0x0<<8) @ Synchronize with ARM7
str r9, [r12, #0x180]
mov r9, #0x9
bl IPCSync
mov r9, #(0xA<<8)
str r9, [r12, #0x180]
mov r9, #0xB
bl IPCSync
mov r9, #(0xC<<8)
str r9, [r12, #0x180]
mov r9, #0xD
bl IPCSync
mov r9, r11, lsl #8
str r9, [r12, #0x180]
mov r9, #0
bl IPCSync
str r9, [r12, #0x180]
ldr r1, =__itcm_lma @ Copy instruction tightly coupled memory (itcm section) from LMA to VMA
ldr r2, =__itcm_start
ldr r4, =__itcm_end
bl CopyMemCheck
ldr r1, =__vectors_lma @ Copy reserved vectors area (itcm section) from LMA to VMA
ldr r2, =__vectors_start
ldr r4, =__vectors_end
bl CopyMemCheck
ldr r1, =__dtcm_lma @ Copy data tightly coupled memory (dtcm section) from LMA to VMA
ldr r2, =__dtcm_start
ldr r4, =__dtcm_end
bl CopyMemCheck
cmp r11, #1
ldrne r10, =__end__ @ (DS mode) heap start
ldreq r10, =__twl_end__ @ (DSi mode) heap start
bl checkARGV @ check and process argv trickery
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
cmp r11, #1
bne NotTWL
ldr r9, =__dsimode @ set DSi mode flag
strb r11, [r9]
@ Copy TWL area (arm9i section) from LMA to VMA
ldr r1, =0x02ffe1c8 @ Get ARM9i LMA from header
ldr r1, [r1]
ldr r2, =__arm9i_start__
cmp r1, r2 @ skip copy if LMA=VMA
ldrne r4, =__arm9i_end__
blne CopyMemCheck
ldr r0, =__twl_bss_start__ @ Clear TWL BSS section
ldr r1, =__twl_bss_end__
sub r1, r1, r0
bl ClearMem
NotTWL:
ldr r0, =_libnds_argv
@ reset heap base
ldr r2, [r0,#20] @ newheap base
cmp r2, #0
moveq r2, r10
ldr r1, =fake_heap_start @ set heap start
str r2, [r1]
ldr r1, =fake_heap_end @ set heap end
sub r8, r8,#0xc000
str r8, [r1]
push {r0}
ldr r0, =__secure_area__
ldr r3, =initSystem
blx r3 @ system initialisation
ldr r3, =__libc_init_array @ global constructors
blx r3
pop {r0}
ldr r1, [r0,#16] @ argv
ldr r0, [r0,#12] @ argc
ldr r3, =main
ldr lr, =__libnds_exit
bx r3 @ jump to user code
@---------------------------------------------------------------------------------
@ check for a commandline
@---------------------------------------------------------------------------------
checkARGV:
@---------------------------------------------------------------------------------
ldr r0, =_libnds_argv @ argv structure
mov r1, #0
str r1, [r0,#12] @ clear argc
str r1, [r0,#16] @ clear argv
ldr r3, [r0] @ argv magic number
ldr r2, =0x5f617267 @ '_arg'
cmp r3, r2
strne r1, [r0,#20]
bxne lr @ bail out if no magic
ldr r1, [r0, #4] @ command line address
ldr r2, [r0, #8] @ length of command line
@ copy to heap
mov r3, r10 @ initial heap base
str r3, [r0, #4] @ set command line address
cmp r2, #0
subnes r4, r3, r1 @ dst-src
bxeq lr @ dst == src || len==0 : nothing to do.
cmphi r2, r4 @ len > (dst-src)
bhi .copybackward
.copyforward:
ldrb r4, [r1], #1
strb r4, [r3], #1
subs r2, r2, #1
bne .copyforward
b .copydone
.copybackward:
subs r2, r2, #1
ldrb r4, [r1, r2]
strb r4, [r3, r2]
bne .copybackward
.copydone:
push {lr}
ldr r3, =build_argv
blx r3
pop {lr}
bx lr
@---------------------------------------------------------------------------------
@ 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
@---------------------------------------------------------------------------------
@ Synchronize with ARM7
@---------------------------------------------------------------------------------
IPCSync:
@---------------------------------------------------------------------------------
ldr r10, [r12, #0x180]
and r10, r10, #0xF
cmp r10, r9
bne IPCSync
bx lr
@---------------------------------------------------------------------------------
.align
.pool
.end
@---------------------------------------------------------------------------------

View File

@@ -1,224 +0,0 @@
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
{
.crt0 :
{
__text_start = . ;
KEEP (*(.crt0))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom = 0xff
.init :
{
KEEP (*(SORT_NONE(.init)))
} >rom = 0xff
.plt : { *(.plt) } >rom = 0xff
.init :
{
KEEP (*(SORT_NONE(.init)))
} >ewram
.text : /* ALIGN (4): */
{
*(EXCLUDE_FILE (*.iwram*) .text)
*(.text .stub .text.* .gnu.linkonce.t.*)
KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
. = 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. */
__bss_end__ = ABSOLUTE(.);
__end__ = ABSOLUTE(.);
} >iwram
/* 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 . */
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T ds_cart.ld%s --gc-sections
*startfile:
ds_cart_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,160 +0,0 @@
@---------------------------------------------------------------------------------
.section ".crt0","ax"
.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, =__libc_init_array @ 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
@---------------------------------------------------------------------------------

View File

@@ -1,6 +0,0 @@
MEMORY {
ewram : ORIGIN = 0x02000000, LENGTH = 15M - 512k
dtcm : ORIGIN = 0x0b000000, LENGTH = 16K
vectors : ORIGIN = 0x01000000, LENGTH = 256
itcm : ORIGIN = 0x01000100, LENGTH = 32K - 256
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T dsi_arm9.mem%s -T ds_arm9.ld%s --gc-sections
*startfile:
ds_arm9_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,56 +0,0 @@
@---------------------------------------------------------------------------------
@ nintendo e-reader startup code
@---------------------------------------------------------------------------------
@ author : tim schuerewegen
@ version : 1.0
@---------------------------------------------------------------------------------
.section ".crt0","ax"
.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

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T gba_cart.ld%s --gc-sections
*startfile:
gba_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,318 +0,0 @@
/* 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 = ORIGIN(rom);
__eheap_end = ORIGIN(ewram) + LENGTH(ewram);
__iwram_start = ORIGIN(iwram);
__iwram_top = ORIGIN(iwram) + LENGTH(iwram);;
__sp_irq = __iwram_top - 0x060;
__sp_usr = __sp_irq - 0x0a0;
__irq_flags = 0x03007ff8;
SECTIONS
{
. = __text_start;
.crt0 :
{
KEEP (*(.crt0))
. = ALIGN(4);
} >rom =0xff
.init :
{
KEEP (*(SORT_NONE(.init)))
} >rom
.plt :
{
*(.plt)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >rom
.text : /* ALIGN (4): */
{
*(EXCLUDE_FILE (*.iwram*) .text)
*(.text .stub .text.* .gnu.linkonce.t.*)
KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
. = 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
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >rom
__exidx_start = .;
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >rom
__exidx_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
.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_end__ = ABSOLUTE(.) ;
} >iwram = 0xff
__data_lma = __iwram_lma + SIZEOF(.iwram) ;
.bss ALIGN(4) (NOLOAD) :
{
__bss_start = ABSOLUTE(.);
__bss_start__ = ABSOLUTE(.);
*(.dynbss)
*(.gnu.linkonce.b*)
*(.bss*)
*(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__bss_end__ = ABSOLUTE(.);
} AT>iwram
.data ALIGN(4) : AT (__data_lma)
{
__data_start__ = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4);
} >iwram = 0xff
__preinit_lma = __data_lma + SIZEOF(.data);
.preinit_array ALIGN(4) : AT (__preinit_lma)
{
__preinit_array_start = ABSOLUTE(.);
KEEP (*(.preinit_array))
__preinit_array_end = ABSOLUTE(.);
} >iwram
__init_lma = __preinit_lma + SIZEOF(.preinit_array);
.init_array ALIGN(4) : AT (__init_lma)
{
__init_array_start = ABSOLUTE(.);
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
__init_array_end = ABSOLUTE(.);
} >iwram
__fini_lma = __init_lma + SIZEOF(.init_array);
.fini_array ALIGN(4) : AT (__fini_lma)
{
__fini_array_start = ABSOLUTE(.);
KEEP (*(SORT(.fini_array.*)))
KEEP (*(.fini_array))
__fini_array_end = ABSOLUTE(.);
} >iwram
__jcr_lma = __fini_lma + SIZEOF(.fini_array);
.jcr ALIGN(4) : AT (__jcr_lma) { KEEP (*(.jcr)) } >iwram
__data_end__ = ABSOLUTE(.);
__iwram_overlay_lma = __jcr_lma + SIZEOF(.jcr);
__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
__iwram_overlay_end = . ;
__ewram_lma = __iwram_overlay_lma + (__iwram_overlay_end - __iwram_overlay_start) ;
__iheap_start = . ;
__ewram_start = ORIGIN(ewram);
.ewram __ewram_start : AT (__ewram_lma)
{
*(.ewram)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__ewram_end = ABSOLUTE(.);
}>ewram = 0xff
__pad_lma = __ewram_lma + SIZEOF(.ewram);
.sbss ALIGN(4)(NOLOAD):
{
__sbss_start__ = ABSOLUTE(.);
*(.sbss)
. = ALIGN(4);
__sbss_end__ = ABSOLUTE(.);
__end__ = ABSOLUTE(.);
__eheap_start = ABSOLUTE(.);
} AT>ewram
/* 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
__rom_end__ = __pad_lma + SIZEOF(.pad);
/* 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 . */
.note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
.ARM.attributes 0 : { KEEP (*(.ARM.attributes)) }
/DISCARD/ : { *(.note.GNU-stack) }
}

View File

@@ -1,249 +0,0 @@
.section ".crt0","ax"
.global _start
.align
.arm
.cpu arm7tdmi
@---------------------------------------------------------------------------------
_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
@---------------------------------------------------------------------------------
CEW0Skip:
@---------------------------------------------------------------------------------
@ set heap end
@---------------------------------------------------------------------------------
ldr r1, =fake_heap_end
ldr r0, =__eheap_end
str r0, [r1]
@---------------------------------------------------------------------------------
@ global constructors
@---------------------------------------------------------------------------------
ldr r3, =__libc_init_array
bl _blx_r3_stub
@---------------------------------------------------------------------------------
@ Jump to user code
@---------------------------------------------------------------------------------
mov r0, #0 @ int argc
mov r1, #0 @ char *argv[]
ldr r3, =main
bl _blx_r3_stub
@---------------------------------------------------------------------------------
@ 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
@---------------------------------------------------------------------------------
_blx_r3_stub:
@---------------------------------------------------------------------------------
bx r3
@---------------------------------------------------------------------------------
@ 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

View File

@@ -1,49 +0,0 @@
/***********************************/
/* 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;
.crt0 :
{
*(.crt0)
. = 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__ = ABSOLUTE(.);
__end__ = ABSOLUTE(.);
}
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
%rename endfile old_endfile
*link:
-T gba_er.ld%s %(old_link) --gc-sections
*startfile:
er_crt0%O%s

View File

@@ -1,303 +0,0 @@
/* 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 = ORIGIN(ewram);
__eheap_end = ORIGIN(ewram) + LENGTH(ewram);
__iwram_start = ORIGIN(iwram);
__iwram_top = ORIGIN(iwram) + LENGTH(iwram);;
__sp_irq = __iwram_top - 0x060;
__sp_usr = __sp_irq - 0x0a0;
__irq_flags = 0x03007ff8;
SECTIONS
{
. = __text_start;
. = __text_start;
.crt0 :
{
KEEP (*(.crt0))
. = ALIGN(4);
} >ewram =0xff
.init :
{
KEEP (*(SORT_NONE(.init)))
} >ewram
.plt :
{
*(.plt)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ewram
.text ALIGN (4):
{
*(EXCLUDE_FILE (*.iwram*) .text)
*(.text .stub .text.* .gnu.linkonce.t.*)
KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
. = 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
.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 = 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_end__ = ABSOLUTE(.) ;
} >iwram = 0xff
__data_lma = __iwram_lma + SIZEOF(.iwram) ;
.bss ALIGN(4) (NOLOAD):
{
__bss_start__ = ABSOLUTE(.);
*(.dynbss)
*(.gnu.linkonce.b*)
*(.bss*)
*(COMMON)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__bss_end__ = ABSOLUTE(.) ;
}
.data ALIGN(4) : AT (__data_lma)
{
__data_start__ = ABSOLUTE(.);
*(.data)
*(.data.*)
*(.gnu.linkonce.d*)
CONSTRUCTORS
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__data_end__ = ABSOLUTE(.);
} >iwram = 0xff
__iwram_overlay_lma = __data_lma + SIZEOF(.data);
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 = __ewram_lma ;
/* v1.3 */
__ewram_start = __ewram_lma ;
.ewram __ewram_start : AT (__ewram_lma)
{
*(.ewram)
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
__ewram_end = ABSOLUTE(.);
} >ewram = 0xff
__ewram_overlay_lma = __ewram_lma + SIZEOF(.ewram);
.sbss ALIGN(4)(NOLOAD):
{
__sbss_start__ = ABSOLUTE(.);
*(.sbss)
. = ALIGN(4);
__sbss_end__ = ABSOLUTE(.);
__end__ = ABSOLUTE(.);
__eheap_start = ABSOLUTE(.);
}
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 = ABSOLUTE(.);
__eheap_start = __ewram_overlay_end ;
_end = __ewram_overlay_end;
__end__ = __ewram_overlay_end;
__rom_end__ = __ewram_overlay_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 . */
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
-T gba_mb.ld%s %(old_link) --gc-sections
*startfile:
gba_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,171 +0,0 @@
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
MEMORY
{
ram : ORIGIN = 0xc000000, LENGTH = 8M
}
SECTIONS
{
.crt0 :
{
__text_start = . ;
KEEP (*(.crt0))
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
} >ram = 0xff
.init :
{
KEEP (*(SORT_NONE(.init)))
} >ram
.plt : { *(.plt) } >ram = 0xff
.text : /* ALIGN (4): */
{
*(.text .stub .text.* .gnu.linkonce.t.*)
KEEP (*(.text.*personality*))
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
. = 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
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ram
__exidx_start = .;
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ram
__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)) } >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. */
__data_end = ABSOLUTE(.);
} >ram = 0xff
.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 = ABSOLUTE(.) ;
__end__ = ABSOLUTE(.) ;
} > ram
/* 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 . */
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T gp32.ld%s --gc-sections
*startfile:
gp32_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,74 +0,0 @@
.section ".crt0","ax"
.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,=__libc_init_array
bx r3
@---------------------------------------------------------------------------------
@ Jump to user code
@---------------------------------------------------------------------------------
_call_main:
@---------------------------------------------------------------------------------
mov lr, #0
ldr r3, =main
bx r3
.pool
.end

View File

@@ -1,213 +0,0 @@
/* 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
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ram
__exidx_start = .;
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ram
__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)) } >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
__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. */
__bss_end = ABSOLUTE(.);
__end__ = ABSOLUTE(.);
} > ram
__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 . */
}

View File

@@ -1,8 +0,0 @@
%rename link old_link
*link:
%(old_link) -T gp32_gpsdk.ld%s --gc-sections
*startfile:
gp32_gpsdk_crt0%O%s crti%O%s crtbegin%O%s

View File

@@ -1,246 +0,0 @@
@****************************************************
@* 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

View File

@@ -1,7 +1,8 @@
diff -NBaur gcc-8.1.0/gcc/config/arm/arm-cpus.in gcc-8.1.0-arm/gcc/config/arm/arm-cpus.in
--- gcc-8.1.0/gcc/config/arm/arm-cpus.in 2018-01-11 15:21:26.000000000 +0000
+++ gcc-8.1.0-arm/gcc/config/arm/arm-cpus.in 2018-05-11 01:05:33.648236777 +0000
@@ -393,7 +393,7 @@
diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
index 545321b0bbe..63ed77af8fd 100644
--- a/gcc/config/arm/arm-cpus.in
+++ b/gcc/config/arm/arm-cpus.in
@@ -395,7 +395,7 @@ begin arch armv6k
tune for mpcore
tune flags CO_PROC
base 6K
@@ -10,9 +11,10 @@ diff -NBaur gcc-8.1.0/gcc/config/arm/arm-cpus.in gcc-8.1.0-arm/gcc/config/arm/ar
option fp add VFPv2 FP_DBL
optalias vfpv2 fp
option nofp remove ALL_FP
diff -NBaur gcc-8.1.0/gcc/config/arm/t-arm-elf gcc-8.1.0-arm/gcc/config/arm/t-arm-elf
--- gcc-8.1.0/gcc/config/arm/t-arm-elf 2018-01-11 15:21:26.000000000 +0000
+++ gcc-8.1.0-arm/gcc/config/arm/t-arm-elf 2018-05-10 23:15:13.124566279 +0000
diff --git a/gcc/config/arm/t-arm-elf b/gcc/config/arm/t-arm-elf
index 9ec5bf065ac..9ab3ffb109d 100644
--- a/gcc/config/arm/t-arm-elf
+++ b/gcc/config/arm/t-arm-elf
@@ -1,4 +1,4 @@
-# Copyright (C) 1998-2018 Free Software Foundation, Inc.
+# Copyright (C) 1998-2017 Free Software Foundation, Inc.
@@ -105,25 +107,22 @@ diff -NBaur gcc-8.1.0/gcc/config/arm/t-arm-elf gcc-8.1.0-arm/gcc/config/arm/t-ar
-
-MULTILIB_MATCHES += $(foreach FPARCH, $(v7a_fps), \
- march?armv7+fp=march?armv7-a+$(FPARCH))
-
-MULTILIB_MATCHES += $(foreach FPARCH, $(v7ve_fps), \
- march?armv7+fp=march?armv7ve+$(FPARCH))
+MULTILIB_REQUIRED = mthumb mbig-endian mthumb/mbig-endian march=armv6k/mfloat-abi=hard
-
-MULTILIB_MATCHES += $(foreach ARCH, $(all_v7_a_r), \
- march?armv7+fp=march?$(ARCH) \
- march?armv7+fp=march?$(ARCH)+fp)
-
-MULTILIB_MATCHES += $(foreach ARCH, $(all_v8_archs), \
- march?armv7+fp=march?$(ARCH) \
- $(foreach FPARCH, $(v8_fps), \
- march?armv7+fp=march?$(ARCH)+$(FPARCH)))
+MULTILIB_MATCHES += march?armv6k=mtune?mpcore
+MULTILIB_MATCHES += march?armv6k=mcpu?mpcore
-
-MULTILIB_MATCHES += $(foreach ARCH, armv7e-m armv8-m.mainline, \
- march?armv7+fp=march?$(ARCH)+fp.dp)
-
-# PART 4 - Reuse rules
-MULTILIB_REUSE += mthumb=mthumb/mfpu.auto
@@ -135,6 +134,14 @@ diff -NBaur gcc-8.1.0/gcc/config/arm/t-arm-elf gcc-8.1.0-arm/gcc/config/arm/t-ar
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=mthumb/march.armv7+fp/mfloat-abi.hard
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=mfpu.auto/march.armv7+fp/mfloat-abi.hard
-MULTILIB_REUSE += mthumb/mfpu.auto/march.armv7+fp/mfloat-abi.hard=march.armv7+fp/mfloat-abi.hard
+MULTILIB_REQUIRED = mthumb mbig-endian mthumb/mbig-endian march=armv6k/mfloat-abi=hard
+
+
+MULTILIB_MATCHES += march?armv6k=mtune?mpcore
+MULTILIB_MATCHES += march?armv6k=mcpu?mpcore
+
+
+
+#MULTILIB_OPTIONS += mcpu=fa526/mcpu=fa626/mcpu=fa606te/mcpu=fa626te/mcpu=fmp626/mcpu=fa726te
+#MULTILIB_DIRNAMES += fa526 fa626 fa606te fa626te fmp626 fa726te
+#MULTILIB_EXCEPTIONS += *mthumb*/*mcpu=fa526 *mthumb*/*mcpu=fa626
@@ -202,9 +209,10 @@ diff -NBaur gcc-8.1.0/gcc/config/arm/t-arm-elf gcc-8.1.0-arm/gcc/config/arm/t-ar
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm600
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm610
+# MULTILIB_MATCHES += mcpu?arm7=mcpu?arm620
diff -NBaur gcc-8.1.0/gcc/config/arm/unknown-elf.h gcc-8.1.0-arm/gcc/config/arm/unknown-elf.h
--- gcc-8.1.0/gcc/config/arm/unknown-elf.h 2018-01-03 10:03:58.000000000 +0000
+++ gcc-8.1.0-arm/gcc/config/arm/unknown-elf.h 2018-05-10 23:01:02.432676190 +0000
diff --git a/gcc/config/arm/unknown-elf.h b/gcc/config/arm/unknown-elf.h
index 12dd0931b08..59584fe64bc 100644
--- a/gcc/config/arm/unknown-elf.h
+++ b/gcc/config/arm/unknown-elf.h
@@ -29,7 +29,7 @@
#endif
@@ -225,10 +233,11 @@ diff -NBaur gcc-8.1.0/gcc/config/arm/unknown-elf.h gcc-8.1.0-arm/gcc/config/arm/
+#undef NO_IMPLICIT_EXTERN_C
+#define NO_IMPLICIT_EXTERN_C
+
diff -NBaur gcc-8.1.0/gcc/gcc.c gcc-8.1.0-arm/gcc/gcc.c
--- gcc-8.1.0/gcc/gcc.c 2018-02-09 06:44:06.000000000 +0000
+++ gcc-8.1.0-arm/gcc/gcc.c 2018-05-10 23:01:02.440676328 +0000
@@ -786,6 +786,11 @@
diff --git a/gcc/gcc.c b/gcc/gcc.c
index a716f708259..6a11011dba7 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -786,6 +786,11 @@ proper position among the other output files. */
#endif
#endif
@@ -240,7 +249,7 @@ diff -NBaur gcc-8.1.0/gcc/gcc.c gcc-8.1.0-arm/gcc/gcc.c
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
#ifndef STARTFILE_SPEC
#define STARTFILE_SPEC \
@@ -1081,6 +1086,7 @@
@@ -1081,6 +1086,7 @@ static const char *link_spec = LINK_SPEC;
static const char *lib_spec = LIB_SPEC;
static const char *link_gomp_spec = "";
static const char *libgcc_spec = LIBGCC_SPEC;
@@ -248,7 +257,7 @@ diff -NBaur gcc-8.1.0/gcc/gcc.c gcc-8.1.0-arm/gcc/gcc.c
static const char *endfile_spec = ENDFILE_SPEC;
static const char *startfile_spec = STARTFILE_SPEC;
static const char *linker_name_spec = LINKER_NAME;
@@ -1577,6 +1583,7 @@
@@ -1577,6 +1583,7 @@ static struct spec_list static_specs[] =
INIT_STATIC_SPEC ("lib", &lib_spec),
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
@@ -256,19 +265,21 @@ diff -NBaur gcc-8.1.0/gcc/gcc.c gcc-8.1.0-arm/gcc/gcc.c
INIT_STATIC_SPEC ("startfile", &startfile_spec),
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
INIT_STATIC_SPEC ("version", &compiler_version),
diff -NBaur gcc-8.1.0/libgcc/config/arm/t-bpabi gcc-8.1.0-arm/libgcc/config/arm/t-bpabi
--- gcc-8.1.0/libgcc/config/arm/t-bpabi 2012-08-17 15:06:06.000000000 +0000
+++ gcc-8.1.0-arm/libgcc/config/arm/t-bpabi 2018-05-10 23:01:02.440676328 +0000
@@ -17,4 +17,4 @@
diff --git a/libgcc/config/arm/t-bpabi b/libgcc/config/arm/t-bpabi
index dddddc7c444..c2502597953 100644
--- a/libgcc/config/arm/t-bpabi
+++ b/libgcc/config/arm/t-bpabi
@@ -17,4 +17,4 @@ SHLIB_MAPFILES += $(srcdir)/config/arm/libgcc-bpabi.ver
# On ARM, specifying -fnon-call-exceptions will needlessly pull in
# the unwinder in simple programs which use 64-bit division. Omitting
# the option is safe.
-LIB2_DIVMOD_EXCEPTION_FLAGS := -fexceptions
+LIB2_DIVMOD_EXCEPTION_FLAGS := -fno-exceptions
diff -NBaur gcc-8.1.0/libgcc/crtstuff.c gcc-8.1.0-arm/libgcc/crtstuff.c
--- gcc-8.1.0/libgcc/crtstuff.c 2018-01-03 10:03:58.000000000 +0000
+++ gcc-8.1.0-arm/libgcc/crtstuff.c 2018-05-10 23:01:02.440676328 +0000
@@ -47,7 +47,7 @@
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 5e894455e16..f81c9c6a64c 100644
--- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c
@@ -47,7 +47,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* Target machine header files require this define. */
#define IN_LIBGCC2
@@ -277,15 +288,3 @@ diff -NBaur gcc-8.1.0/libgcc/crtstuff.c gcc-8.1.0-arm/libgcc/crtstuff.c
/* FIXME: Including auto-host is incorrect, but until we have
identified the set of defines that need to go into auto-target.h,
this will have to do. */
diff -NBaur gcc-8.1.0/libgcc/Makefile.in gcc-8.1.0-arm/libgcc/Makefile.in
--- gcc-8.1.0/libgcc/Makefile.in 2018-01-03 10:03:58.000000000 +0000
+++ gcc-8.1.0-arm/libgcc/Makefile.in 2018-05-10 23:01:02.440676328 +0000
@@ -847,7 +847,7 @@
# libgcc_eh.a, only LIB2ADDEH matters. If we do, only LIB2ADDEHSTATIC and
# LIB2ADDEHSHARED matter. (Usually all three are identical.)
-c_flags := -fexceptions
+c_flags := -fno-exceptions
ifeq ($(enable_shared),yes)

View File

@@ -1,29 +1,7 @@
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 1d2dbaf3f7..2d24f09c1b 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -779,6 +779,7 @@ ALL_64_TARGET_OBS = \
ALL_TARGET_OBS = \
arc-tdep.o \
arm.o \
+ arm-3ds-tdep.o \
arm-bsd-tdep.o \
arm-get-next-pcs.o \
arm-linux.o \
@@ -2487,6 +2488,7 @@ ALLDEPFILES = \
amd64-tdep.c \
arc-tdep.c \
arm.c \
+ arm-3ds-tdep.c \
arm-bsd-tdep.c \
arm-get-next-pcs.c \
arm-linux.c \
diff --git a/gdb/arm-3ds-tdep.c b/gdb/arm-3ds-tdep.c
new file mode 100644
index 0000000000..ad014e28db
--- /dev/null
+++ b/gdb/arm-3ds-tdep.c
@@ -0,0 +1,197 @@
diff -NBaur gdb-8.2.1/gdb/arm-3ds-tdep.c gdb-8.2.1-apple/gdb/arm-3ds-tdep.c
--- gdb-8.2.1/gdb/arm-3ds-tdep.c 1970-01-01 01:00:00.000000000 +0100
+++ gdb-8.2.1-apple/gdb/arm-3ds-tdep.c 2019-02-19 17:15:22.100604954 +0000
@@ -0,0 +1,157 @@
+/* Target-dependent code for 3DS. */
+
+/* This uses code from GDB, which license is: */
@@ -95,48 +73,11 @@ index 0000000000..ad014e28db
+ return next_pc;
+}
+
+static VEC (CORE_ADDR) *
+arm_3ds_software_single_step (struct regcache *regcache)
+{
+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
+ struct arm_get_next_pcs next_pcs_ctx;
+ CORE_ADDR pc;
+ int i;
+ VEC (CORE_ADDR) *next_pcs = NULL;
+ struct cleanup *old_chain;
+
+ /* If the target does have hardware single step, GDB doesn't have
+ to bother software single step. */
+ if (target_can_do_single_step () == 1)
+ return NULL;
+
+ old_chain = make_cleanup (VEC_cleanup (CORE_ADDR), &next_pcs);
+
+ arm_get_next_pcs_ctor (&next_pcs_ctx,
+ &arm_3ds_get_next_pcs_ops,
+ gdbarch_byte_order (gdbarch),
+ gdbarch_byte_order_for_code (gdbarch),
+ 1,
+ regcache);
+
+ next_pcs = arm_get_next_pcs (&next_pcs_ctx);
+
+ for (i = 0; VEC_iterate (CORE_ADDR, next_pcs, i, pc); i++)
+ {
+ pc = gdbarch_addr_bits_remove (gdbarch, pc);
+ VEC_replace (CORE_ADDR, next_pcs, i, pc);
+ }
+
+ discard_cleanups (old_chain);
+
+ return next_pcs;
+}
+
+static LONGEST
+arm_3ds_get_syscall_number (struct gdbarch *gdbarch,
+ ptid_t ptid)
+ thread_info *thread)
+{
+ struct regcache *regs = get_thread_regcache (ptid);
+ struct regcache *regs = get_thread_regcache (thread);
+
+ ULONGEST pc;
+ ULONGEST cpsr;
@@ -205,42 +146,35 @@ index 0000000000..ad014e28db
+ tdep->fp_model = ARM_FLOAT_VFP;
+
+ /* Single stepping. */
+ set_gdbarch_software_single_step (gdbarch, arm_3ds_software_single_step);
+ set_gdbarch_software_single_step (gdbarch, arm_software_single_step);
+
+ /* `catch syscall' */
+ set_xml_syscall_file_name (gdbarch, "syscalls/arm-3ds.xml");
+ set_gdbarch_get_syscall_number (gdbarch, arm_3ds_get_syscall_number);
+}
+
+/* Provide a prototype to silence -Wmissing-prototypes. */
+extern initialize_file_ftype _initialize_arm_3ds_tdep;
+
+void
+_initialize_arm_3ds_tdep (void)
+{
+ gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_3DS,
+ arm_3ds_init_abi);
+}
diff --git a/gdb/configure.tgt b/gdb/configure.tgt
index fdcb7b1d69..d8fd1622b8 100644
--- a/gdb/configure.tgt
+++ b/gdb/configure.tgt
@@ -119,8 +119,8 @@ arm*-*-symbianelf*)
gdb_target_obs="arm.o arm-get-next-pcs.o arm-tdep.o arm-symbian-tdep.o"
;;
arm*-*-*)
- # Target: ARM embedded system
- gdb_target_obs="arm.o arm-get-next-pcs.o arm-tdep.o"
+ # Target: ARM embedded system (+ 3DS)
+ gdb_target_obs="arm.o arm-get-next-pcs.o arm-tdep.o arm-3ds-tdep.o"
gdb_sim=../sim/arm/libsim.a
diff -NBaur gdb-8.2.1/gdb/configure.tgt gdb-8.2.1-apple/gdb/configure.tgt
--- gdb-8.2.1/gdb/configure.tgt 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/configure.tgt 2019-02-19 17:15:22.104618045 +0000
@@ -61,7 +61,7 @@
;;
diff --git a/gdb/data-directory/Makefile.in b/gdb/data-directory/Makefile.in
index 304d4b05c0..2cf8986d3a 100644
--- a/gdb/data-directory/Makefile.in
+++ b/gdb/data-directory/Makefile.in
@@ -63,7 +63,7 @@ GEN_SYSCALLS_FILES = \
arm*-*-*)
- cpu_obs="arch/arm.o arch/arm-get-next-pcs.o arm-tdep.o";;
+ cpu_obs="arch/arm.o arch/arm-get-next-pcs.o arm-tdep.o arm-3ds-tdep.o";;
hppa*-*-*)
# Target: HP PA-RISC
diff -NBaur gdb-8.2.1/gdb/data-directory/Makefile.in gdb-8.2.1-apple/gdb/data-directory/Makefile.in
--- gdb-8.2.1/gdb/data-directory/Makefile.in 2018-01-05 04:07:23.000000000 +0000
+++ gdb-8.2.1-apple/gdb/data-directory/Makefile.in 2019-02-19 17:15:22.104618045 +0000
@@ -63,7 +63,7 @@
sparc-linux.xml \
sparc64-linux.xml
@@ -249,11 +183,10 @@ index 304d4b05c0..2cf8986d3a 100644
PYTHON_DIR = python
PYTHON_INSTALL_DIR = $(DESTDIR)$(GDB_DATADIR)/$(PYTHON_DIR)
diff --git a/gdb/defs.h b/gdb/defs.h
index a0b586f401..a1508fd5b3 100644
--- a/gdb/defs.h
+++ b/gdb/defs.h
@@ -604,6 +604,7 @@ enum gdb_osabi
diff -NBaur gdb-8.2.1/gdb/defs.h gdb-8.2.1-apple/gdb/defs.h
--- gdb-8.2.1/gdb/defs.h 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/defs.h 2019-02-19 17:15:22.104618045 +0000
@@ -495,6 +495,7 @@
GDB_OSABI_LYNXOS178,
GDB_OSABI_NEWLIB,
GDB_OSABI_SDE,
@@ -261,11 +194,41 @@ index a0b586f401..a1508fd5b3 100644
GDB_OSABI_INVALID /* keep this last */
};
diff --git a/gdb/osabi.c b/gdb/osabi.c
index 84fa9c0273..c1c4bb1672 100644
--- a/gdb/osabi.c
+++ b/gdb/osabi.c
@@ -79,6 +79,7 @@ static const struct osabi_names gdb_osabi_names[] =
diff -NBaur gdb-8.2.1/gdb/dtrace-probe.c gdb-8.2.1-apple/gdb/dtrace-probe.c
--- gdb-8.2.1/gdb/dtrace-probe.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/dtrace-probe.c 2019-02-19 17:30:16.449175937 +0000
@@ -100,7 +100,7 @@
/* DTrace static_probe_ops. */
-const dtrace_static_probe_ops dtrace_static_probe_ops;
+const dtrace_static_probe_ops dtrace_static_probe_ops = {};
/* The following structure represents a dtrace probe. */
diff -NBaur gdb-8.2.1/gdb/Makefile.in gdb-8.2.1-apple/gdb/Makefile.in
--- gdb-8.2.1/gdb/Makefile.in 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/Makefile.in 2019-02-19 17:15:22.104618045 +0000
@@ -684,6 +684,7 @@
arch/arm-linux.o \
arch/i386.o \
arch/ppc-linux-common.o \
+ arm-3ds-tdep.o \
arm-bsd-tdep.o \
arm-fbsd-tdep.o \
arm-linux-tdep.o \
@@ -2213,6 +2214,7 @@
amd64-tdep.c \
arc-tdep.c \
arm.c \
+ arm-3ds-tdep.c \
arm-bsd-tdep.c \
arm-fbsd-nat.c \
arm-fbsd-tdep.c \
diff -NBaur gdb-8.2.1/gdb/osabi.c gdb-8.2.1-apple/gdb/osabi.c
--- gdb-8.2.1/gdb/osabi.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/osabi.c 2019-02-19 17:15:22.104618045 +0000
@@ -80,6 +80,7 @@
{ "LynxOS178", NULL },
{ "Newlib", NULL },
{ "SDE", NULL },
@@ -273,11 +236,45 @@ index 84fa9c0273..c1c4bb1672 100644
{ "<invalid>", NULL }
};
diff --git a/gdb/syscalls/arm-3ds.xml b/gdb/syscalls/arm-3ds.xml
new file mode 100644
index 0000000000..48780b7bd5
--- /dev/null
+++ b/gdb/syscalls/arm-3ds.xml
diff -NBaur gdb-8.2.1/gdb/probe.c gdb-8.2.1-apple/gdb/probe.c
--- gdb-8.2.1/gdb/probe.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/probe.c 2019-02-19 17:31:05.266578008 +0000
@@ -60,7 +60,7 @@
/* Static operations associated with a generic probe. */
-const any_static_probe_ops any_static_probe_ops;
+const any_static_probe_ops any_static_probe_ops = {};
/* A helper for parse_probes that decodes a probe specification in
SEARCH_PSPACE. It appends matching SALs to RESULT. */
diff -NBaur gdb-8.2.1/gdb/record-btrace.c gdb-8.2.1-apple/gdb/record-btrace.c
--- gdb-8.2.1/gdb/record-btrace.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/record-btrace.c 2019-02-19 17:31:33.301731324 +0000
@@ -144,7 +144,7 @@
/* Token associated with a new-thread observer enabling branch tracing
for the new thread. */
-static const gdb::observers::token record_btrace_thread_observer_token;
+static const gdb::observers::token record_btrace_thread_observer_token = {};
/* Memory access types used in set/show record btrace replay-memory-access. */
static const char replay_memory_access_read_only[] = "read-only";
diff -NBaur gdb-8.2.1/gdb/stap-probe.c gdb-8.2.1-apple/gdb/stap-probe.c
--- gdb-8.2.1/gdb/stap-probe.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/stap-probe.c 2019-02-19 17:29:35.744567941 +0000
@@ -119,7 +119,7 @@
/* SystemTap static_probe_ops. */
-const stap_static_probe_ops stap_static_probe_ops;
+const stap_static_probe_ops stap_static_probe_ops = {};
class stap_probe : public probe
{
diff -NBaur gdb-8.2.1/gdb/syscalls/arm-3ds.xml gdb-8.2.1-apple/gdb/syscalls/arm-3ds.xml
--- gdb-8.2.1/gdb/syscalls/arm-3ds.xml 1970-01-01 01:00:00.000000000 +0100
+++ gdb-8.2.1-apple/gdb/syscalls/arm-3ds.xml 2019-02-19 17:15:22.104618045 +0000
@@ -0,0 +1,159 @@
+<?xml version="1.0"?>
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
@@ -438,4 +435,15 @@ index 0000000000..48780b7bd5
+ <syscall name="TranslateHandle" number="178" groups="custom,synchronization,ipc,thread,process,debug"/>
+
+</syscalls_info>
diff -NBaur gdb-8.2.1/gdb/tui/tui-hooks.c gdb-8.2.1-apple/gdb/tui/tui-hooks.c
--- gdb-8.2.1/gdb/tui/tui-hooks.c 2018-12-23 05:51:54.000000000 +0000
+++ gdb-8.2.1-apple/gdb/tui/tui-hooks.c 2019-02-19 17:28:53.178460364 +0000
@@ -205,7 +205,7 @@
/* Token associated with observers registered while TUI hooks are
installed. */
-static const gdb::observers::token tui_observers_token;
+static const gdb::observers::token tui_observers_token = {};
/* Attach or detach a single observer, according to ATTACH. */

View File

@@ -1,8 +1,8 @@
diff --git a/libgloss/configure b/libgloss/configure
index aa6f8f834..0e8579890 100755
index 1a4033dce..ba7aea7b0 100755
--- a/libgloss/configure
+++ b/libgloss/configure
@@ -2594,6 +2594,8 @@ if test "${config_libnosys}" = "true"; then
@@ -2599,6 +2599,8 @@ if test "${config_libnosys}" = "true"; then
fi
@@ -12,7 +12,7 @@ index aa6f8f834..0e8579890 100755
ac_config_commands="$ac_config_commands depfiles"
diff --git a/libgloss/configure.in b/libgloss/configure.in
index 6da164352..f18f17447 100644
index 41843eed1..dc0e2a5fd 100644
--- a/libgloss/configure.in
+++ b/libgloss/configure.in
@@ -2,6 +2,7 @@ dnl Process this file with autoconf to produce a configure script.
@@ -23,7 +23,7 @@ index 6da164352..f18f17447 100644
if test "${enable_shared}" = "yes" ; then
echo "Shared libraries not supported for cross compiling, ignored"
@@ -187,6 +188,7 @@ dnl fi
@@ -190,6 +191,7 @@ dnl fi
if test "${config_libnosys}" = "true"; then
AC_CONFIG_SUBDIRS([libnosys])
fi
@@ -7404,10 +7404,10 @@ index 000000000..61de918bc
+ return ret;
+}
diff --git a/newlib/configure.host b/newlib/configure.host
index eb645868b..9cb69fde9 100644
index 6c49cb750..6a5e1c78d 100644
--- a/newlib/configure.host
+++ b/newlib/configure.host
@@ -631,6 +631,14 @@ newlib_cflags="${newlib_cflags} -DCLOCK_PROVIDED -DMALLOC_PROVIDED -DEXIT_PROVID
@@ -666,6 +666,14 @@ newlib_cflags="${newlib_cflags} -DCLOCK_PROVIDED -DMALLOC_PROVIDED -DEXIT_PROVID
syscall_dir=syscalls
default_newlib_io_long_long="yes"
;;
@@ -7423,7 +7423,7 @@ index eb645868b..9cb69fde9 100644
syscall_dir=syscalls
;;
diff --git a/newlib/libc/include/stdio.h b/newlib/libc/include/stdio.h
index cbc0fa989..10960f912 100644
index 164d95bca..083e48758 100644
--- a/newlib/libc/include/stdio.h
+++ b/newlib/libc/include/stdio.h
@@ -233,7 +233,7 @@ int fsetpos (FILE *, const _fpos_t *);
@@ -7436,7 +7436,7 @@ index cbc0fa989..10960f912 100644
void clearerr (FILE *);
int feof (FILE *);
diff --git a/newlib/libc/include/sys/config.h b/newlib/libc/include/sys/config.h
index 2082dfdb1..e535f189b 100644
index 49b62ebf6..d84ffaa59 100644
--- a/newlib/libc/include/sys/config.h
+++ b/newlib/libc/include/sys/config.h
@@ -4,6 +4,9 @@
@@ -7516,7 +7516,7 @@ index a3fb5c02c..5debd1525 100644
+
+#endif // _dirent_h_
diff --git a/newlib/libc/include/sys/features.h b/newlib/libc/include/sys/features.h
index 2900b332f..6efb54eb3 100644
index f28dd071b..96980676d 100644
--- a/newlib/libc/include/sys/features.h
+++ b/newlib/libc/include/sys/features.h
@@ -330,6 +330,9 @@ extern "C" {
@@ -7531,7 +7531,7 @@ index 2900b332f..6efb54eb3 100644
#ifdef __rtems__
diff --git a/newlib/libc/include/sys/iosupport.h b/newlib/libc/include/sys/iosupport.h
new file mode 100644
index 000000000..ee14d2610
index 000000000..c190fa37d
--- /dev/null
+++ b/newlib/libc/include/sys/iosupport.h
@@ -0,0 +1,112 @@
@@ -7547,13 +7547,13 @@ index 000000000..ee14d2610
+#include <reent.h>
+#include <sys/stat.h>
+#include <sys/statvfs.h>
+#include <time.h>
+#include <sys/time.h>
+
+enum {
+ STD_IN,
+ STD_OUT,
+ STD_ERR,
+ STD_MAX = 16
+ STD_MAX = 35
+};
+
+
@@ -7648,7 +7648,7 @@ index 000000000..ee14d2610
+#endif // __iosupp_h__
+//---------------------------------------------------------------------------------
diff --git a/newlib/libc/include/sys/reent.h b/newlib/libc/include/sys/reent.h
index 1ef226194..ce3721a14 100644
index 6e55e1c1f..6e0c1c9cf 100644
--- a/newlib/libc/include/sys/reent.h
+++ b/newlib/libc/include/sys/reent.h
@@ -416,6 +416,8 @@ struct _reent
@@ -7659,8 +7659,8 @@ index 1ef226194..ce3721a14 100644
+ void *deviceData;
};
extern const struct __sFILE_fake __sf_fake_stdin;
@@ -647,6 +649,7 @@ struct _reent
#ifdef _REENT_GLOBAL_STDIO_STREAMS
@@ -686,6 +688,7 @@ struct _reent
# ifndef _REENT_GLOBAL_STDIO_STREAMS
__FILE __sf[3]; /* first three file descriptors */
# endif
@@ -7752,10 +7752,10 @@ index 5e937f103..635a7a6b8 100644
};
#endif
diff --git a/newlib/libc/locale/locale.c b/newlib/libc/locale/locale.c
index baa5451a6..a11f89473 100644
index 4c343e462..c04493460 100644
--- a/newlib/libc/locale/locale.c
+++ b/newlib/libc/locale/locale.c
@@ -91,7 +91,7 @@ beginning with <<"LC_">>.
@@ -92,7 +92,7 @@ beginning with <<"LC_">>.
<<localeconv>> returns a pointer to a structure (also defined in
`<<locale.h>>') describing the locale-specific conventions currently
@@ -7764,7 +7764,7 @@ index baa5451a6..a11f89473 100644
<<_localeconv_r>> and <<_setlocale_r>> are reentrant versions of
<<localeconv>> and <<setlocale>> respectively. The extra argument
@@ -165,15 +165,18 @@ No supporting OS subroutines are required.
@@ -166,15 +166,18 @@ No supporting OS subroutines are required.
#include "../ctype/ctype_.h"
#include "../stdlib/local.h"
@@ -7783,7 +7783,7 @@ index baa5451a6..a11f89473 100644
#ifdef _MB_CAPABLE
/*
* Category names for getenv()
@@ -193,7 +196,11 @@ static char *categories[_LC_LAST] = {
@@ -194,7 +197,11 @@ static char *categories[_LC_LAST] = {
* Default locale per POSIX. Can be overridden on a per-target base.
*/
#ifndef DEFAULT_LOCALE
@@ -7796,7 +7796,7 @@ index baa5451a6..a11f89473 100644
#endif
#ifdef _MB_CAPABLE
@@ -206,8 +213,13 @@ char __default_locale[ENCODING_LEN + 1] = DEFAULT_LOCALE;
@@ -207,8 +214,13 @@ char __default_locale[ENCODING_LEN + 1] = DEFAULT_LOCALE;
const struct __locale_t __C_locale =
{
{ "C", "C", "C", "C", "C", "C", "C", },
@@ -7810,7 +7810,7 @@ index baa5451a6..a11f89473 100644
0,
DEFAULT_CTYPE_PTR,
{
@@ -218,9 +230,15 @@ const struct __locale_t __C_locale =
@@ -219,9 +231,15 @@ const struct __locale_t __C_locale =
CHAR_MAX, CHAR_MAX
},
#ifndef __HAVE_LOCALE_INFO__
@@ -7826,7 +7826,7 @@ index baa5451a6..a11f89473 100644
#else /* __HAVE_LOCALE_INFO__ */
{
{ NULL, NULL }, /* LC_ALL */
@@ -239,10 +257,11 @@ const struct __locale_t __C_locale =
@@ -240,10 +258,11 @@ const struct __locale_t __C_locale =
};
#endif /* _MB_CAPABLE */
@@ -7839,7 +7839,7 @@ index baa5451a6..a11f89473 100644
__utf8_wctomb,
__utf8_mbtowc,
#else
@@ -259,9 +278,15 @@ struct __locale_t __global_locale =
@@ -260,9 +279,15 @@ struct __locale_t __global_locale =
CHAR_MAX, CHAR_MAX
},
#ifndef __HAVE_LOCALE_INFO__
@@ -7855,7 +7855,7 @@ index baa5451a6..a11f89473 100644
#else /* __HAVE_LOCALE_INFO__ */
{
{ NULL, NULL }, /* LC_ALL */
@@ -295,7 +320,7 @@ _setlocale_r (struct _reent *p,
@@ -296,7 +321,7 @@ _setlocale_r (struct _reent *p,
{
#ifndef _MB_CAPABLE
if (locale)
@@ -7864,7 +7864,7 @@ index baa5451a6..a11f89473 100644
if (strcmp (locale, "POSIX") && strcmp (locale, "C")
&& strcmp (locale, ""))
return NULL;
@@ -982,6 +1007,7 @@ __locale_ctype_ptr_l (struct __locale_t *locale)
@@ -990,6 +1015,7 @@ __locale_ctype_ptr_l (struct __locale_t *locale)
const char *
__locale_ctype_ptr (void)
@@ -7932,17 +7932,15 @@ index d9dbcd5c3..43712f813 100644
diff --git a/newlib/libc/machine/arm/sync_synchronize.c b/newlib/libc/machine/arm/sync_synchronize.c
new file mode 100644
index 000000000..3acc9e094
index 000000000..f5a85c3a8
--- /dev/null
+++ b/newlib/libc/machine/arm/sync_synchronize.c
@@ -0,0 +1,10 @@
@@ -0,0 +1,8 @@
+#if __ARM_ARCH < 6
+#include <sys/cdefs.h>
+void __attribute__((weak))
+__sync_synchronize (void)
+{
+ __warn_references (__sync_synchronize,
+ "legacy compatible __sync_synchronize used. Not suitable for multi-threaded applications");
+ return;
+}
+#endif
@@ -8093,7 +8091,7 @@ index c4bf2dbe3..d756df37d 100644
if (ch == 'S' || (flags & LONGINT)) {
mbstate_t ps;
diff --git a/newlib/libc/stdio/vfscanf.c b/newlib/libc/stdio/vfscanf.c
index b97235559..298f68a9c 100644
index 9c38eebf4..fbc8d877d 100644
--- a/newlib/libc/stdio/vfscanf.c
+++ b/newlib/libc/stdio/vfscanf.c
@@ -74,6 +74,8 @@ These are GNU extensions.
@@ -8120,7 +8118,7 @@ index 980b31e3b..722be905e 100644
#ifdef INTEGER_ONLY
diff --git a/newlib/libc/stdio/vfwscanf.c b/newlib/libc/stdio/vfwscanf.c
index c3470a15c..626f13723 100644
index 0464b0837..435fc0142 100644
--- a/newlib/libc/stdio/vfwscanf.c
+++ b/newlib/libc/stdio/vfwscanf.c
@@ -74,6 +74,9 @@ PORTABILITY

View File

@@ -1,43 +0,0 @@
ifeq ($(strip $(DEVKITPRO)),)
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
endif
include $(DEVKITARM)/base_rules
PORTLIBS := $(PORTLIBS_PATH)/3ds
export PATH := $(PORTLIBS_PATH)/3ds/bin:$(PATH)
CTRULIB ?= $(DEVKITPRO)/libctru
ifeq ($(strip $(APP_TITLE)),)
APP_TITLE := $(notdir $(OUTPUT))
endif
ifeq ($(strip $(APP_DESCRIPTION)),)
APP_DESCRIPTION := Built with devkitARM & libctru
endif
ifeq ($(strip $(APP_AUTHOR)),)
APP_AUTHOR := Unspecified Author
endif
ifeq ($(strip $(APP_ICON)),)
APP_ICON := $(CTRULIB)/default_icon.png
endif
#---------------------------------------------------------------------------------
%.smdh: $(APP_ICON) $(MAKEFILE_LIST)
@smdhtool --create "$(APP_TITLE)" "$(APP_DESCRIPTION)" "$(APP_AUTHOR)" $(APP_ICON) $@
@echo built ... $(notdir $@)
#---------------------------------------------------------------------------------
%.3dsx: %.elf
@3dsxtool $< $@ $(_3DSXFLAGS)
@echo built ... $(notdir $@)
#---------------------------------------------------------------------------------
%.elf:
@echo linking $(notdir $@)
@$(LD) $(LDFLAGS) $(OFILES) $(LIBPATHS) $(LIBS) -o $@
@$(NM) -CSn $@ > $(notdir $*.lst)

View File

@@ -1,111 +0,0 @@
include $(DEVKITARM)/base_tools
#---------------------------------------------------------------------------------
# add portlibs path
#---------------------------------------------------------------------------------
export PORTLIBS_PATH := $(DEVKITPRO)/portlibs
#---------------------------------------------------------------------------------
%.a:
#---------------------------------------------------------------------------------
@echo $(notdir $@)
@rm -f $@
$(AR) -rc $@ $^
#---------------------------------------------------------------------------------
%.arm.o: %.arm.cpp
@echo $(notdir $<)
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.arm.d $(CXXFLAGS) -marm -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.arm.o: %.arm.c
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.arm.d $(CFLAGS) -marm -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.arm.o: %.arm.m
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.arm.d $(OBJCFLAGS) -marm -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.thumb.o: %.thumb.cpp
@echo $(notdir $<)
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.thumb.d $(CXXFLAGS) -mthumb -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.thumb.o: %.thumb.c
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.thumb.d $(CFLAGS) -mthumb -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.thumb.o: %.thumb.m
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.thumb.d $(OBJCFLAGS) -mthumb -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.iwram.o: %.iwram.cpp
@echo $(notdir $<)
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.iwram.d $(CXXFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.iwram.o: %.iwram.c
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.iwram.d $(CFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.iwram.o: %.iwram.m
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.iwram.d $(OBJCFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.itcm.o: %.itcm.cpp
@echo $(notdir $<)
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.itcm.d $(CXXFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.itcm.o: %.itcm.c
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.itcm.d $(CFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.itcm.o: %.itcm.m
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.itcm.d $(OBJCFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.o: %.cpp
@echo $(notdir $<)
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.o: %.c
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.o: %.m
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(OBJCFLAGS) -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.o: %.s
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.o: %.S
@echo $(notdir $<)
$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
# canned command sequence for binary data
#---------------------------------------------------------------------------------
define bin2o
bin2s $< | $(AS) -o $(@)
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(<F) | tr . _)`.h
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(<F) | tr . _)`.h
echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(<F) | tr . _)`.h
endef

View File

@@ -1,34 +0,0 @@
#---------------------------------------------------------------------------------
# make sure we have bash on OSX
#---------------------------------------------------------------------------------
UNAME_S := $(shell uname -s)
UNAME_R := $(shell uname -r)
ifneq (,$(findstring Darwin,$(UNAME_S)))
export SHELL=/bin/bash
endif
#---------------------------------------------------------------------------------
# path to tools
#---------------------------------------------------------------------------------
DEVKITPATH=$(shell echo "$(DEVKITPRO)" | sed -e 's/^\([a-zA-Z]\):/\/\1/')
export PATH := $(DEVKITPATH)/tools/bin:$(DEVKITPATH)/devkitARM/bin:$(PATH)
#---------------------------------------------------------------------------------
# the prefix on the compiler executables
#---------------------------------------------------------------------------------
PREFIX := arm-none-eabi-
export CC := $(PREFIX)gcc
export CXX := $(PREFIX)g++
export AS := $(PREFIX)as
export AR := $(PREFIX)gcc-ar
export OBJCOPY := $(PREFIX)objcopy
export STRIP := $(PREFIX)strip
export NM := $(PREFIX)gcc-nm
export RANLIB := $(PREFIX)gcc-ranlib
ISVC=$(or $(VCBUILDHELPER_COMMAND),$(MSBUILDEXTENSIONSPATH32),$(MSBUILDEXTENSIONSPATH))
ifneq (,$(ISVC))
ERROR_FILTER := 2>&1 | sed -e 's/\(.[a-zA-Z]\+\):\([0-9]\+\):/\1(\2):/g'
endif

View File

@@ -1,54 +0,0 @@
ifeq ($(strip $(DEVKITPRO)),)
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
endif
include $(DEVKITARM)/base_rules
PORTLIBS := $(PORTLIBS_PATH)/nds $(PORTLIBS_PATH)/armv5te
LIBNDS := $(DEVKITPRO)/libnds
ifeq ($(strip $(GAME_TITLE)),)
GAME_TITLE := $(notdir $(OUTPUT))
endif
ifeq ($(strip $(GAME_SUBTITLE1)),)
GAME_SUBTITLE1 := built with devkitARM
endif
ifeq ($(strip $(GAME_SUBTITLE2)),)
GAME_SUBTITLE2 := http://devkitpro.org
endif
ifeq ($(strip $(GAME_ICON)),)
GAME_ICON := $(DEVKITPRO)/libnds/icon.bmp
endif
ifneq ($(strip $(NITRO_FILES)),)
_ADDFILES := -d $(NITRO_FILES)
endif
#---------------------------------------------------------------------------------
%.nds: %.arm9
@ndstool -c $@ -9 $< -b $(GAME_ICON) "$(GAME_TITLE);$(GAME_SUBTITLE1);$(GAME_SUBTITLE2)" $(_ADDFILES)
@echo built ... $(notdir $@)
#---------------------------------------------------------------------------------
%.nds: %.elf
@ndstool -c $@ -9 $< -b $(GAME_ICON) "$(GAME_TITLE);$(GAME_SUBTITLE1);$(GAME_SUBTITLE2)" $(_ADDFILES)
@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 $@

View File

@@ -1,25 +0,0 @@
ifeq ($(strip $(DEVKITPRO)),)
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPro)
endif
include $(DEVKITARM)/base_rules
PORTLIBS := $(PORTLIBS_PATH)/gba $(PORTLIBS_PATH)/armv4
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 $@

View File

@@ -1,20 +0,0 @@
-include $(DEVKITARM)/base_rules
PORTLIBS := $(PORTLIBS_PATH)/gp32 $(PORTLIBS_PATH)/armv4
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 $@

View File

@@ -12,7 +12,7 @@ if [ ! -f configured-binutils ]
then
CPPFLAGS="$cppflags $CPPFLAGS" LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \
--prefix=$prefix --target=$target --disable-nls --disable-werror \
--enable-lto --enable-plugins --enable-gold \
--enable-lto --enable-plugins \
--enable-poison-system-directories \
$CROSS_PARAMS \
|| { echo "Error configuring binutils"; exit 1; }
@@ -64,7 +64,7 @@ then
--prefix=$prefix \
--enable-lto\
--with-system-zlib \
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 49" \
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 51" \
$CROSS_PARAMS \
$CROSS_GCC_PARAMS \
|| { echo "Error configuring gcc"; exit 1; }
@@ -151,39 +151,6 @@ rm -fr $prefix/$target/sys-include
cd $BUILDDIR
#---------------------------------------------------------------------------------
# copy base rulesets
#---------------------------------------------------------------------------------
cp -v $BUILDSCRIPTDIR/dkarm-eabi/rules/* $prefix
#---------------------------------------------------------------------------------
# set env variables
#---------------------------------------------------------------------------------
export DEVKITPRO=$TOOLPATH
export DEVKITARM=$DEVKITPRO/devkitARM
#---------------------------------------------------------------------------------
# Install and build the crt0 files
#---------------------------------------------------------------------------------
cp -v $BUILDSCRIPTDIR/dkarm-eabi/crtls/* $prefix/$target/lib/
cd $prefix/$target/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
$MAKE ds_arm7_vram_crt0
$MAKE 3dsx_crt0
cd $BUILDDIR
#---------------------------------------------------------------------------------
# build and install the debugger
#---------------------------------------------------------------------------------

View File

@@ -1,8 +1,31 @@
#!/bin/sh
#---------------------------------------------------------------------------------
# set env variables
#---------------------------------------------------------------------------------
export DEVKITPRO=$TOOLPATH
export DEVKITARM=$DEVKITPRO/devkitARM
#---------------------------------------------------------------------------------
# Install the rules files
#---------------------------------------------------------------------------------
cd $BUILDDIR
mkdir -p rules
cd rules
tar -xvf $SRCDIR/devkitarm-rules-$DKARM_RULES_VER.tar.xz
make install
#---------------------------------------------------------------------------------
# Install and build the crt0 files
#---------------------------------------------------------------------------------
cd $BUILDDIR
mkdir -p crtls
cd crtls
tar -xvf $SRCDIR/devkitarm-crtls-$DKARM_CRTLS_VER.tar.xz
make install
cd $BUILDDIR/libgba-$LIBGBA_VER
$MAKE || { echo "error building libgba"; exit 1; }
$MAKE install || { echo "error installing libgba"; exit 1; }
@@ -40,6 +63,9 @@ $MAKE || { echo "error building libctru"; exit 1; }
$MAKE install || { echo "error installing libctru"; exit 1; }
cd $BUILDDIR/citro3d-$CITRO3D_VER
$MAKE || { echo "error building libctru"; exit 1; }
$MAKE install || { echo "error installing libctru"; exit 1; }
$MAKE || { echo "error building citro3d"; exit 1; }
$MAKE install || { echo "error installing citro3d"; exit 1; }
cd $BUILDDIR/citro2d-$CITRO2D_VER
$MAKE || { echo "error building citro2d"; exit 1; }
$MAKE install || { echo "error installing citro2d"; exit 1; }

View File

@@ -1,257 +0,0 @@
/*
* Linkscript for Wii U
*/
OUTPUT_FORMAT("elf32-powerpc", "elf32-powerpc", "elf32-powerpc");
OUTPUT_ARCH(powerpc:common);
EXTERN(_start);
ENTRY(_start);
PHDRS
{
stub PT_LOAD FLAGS(5);
text PT_LOAD FLAGS(5);
data PT_LOAD FLAGS(6);
bss1 PT_LOAD;
bss2 PT_LOAD;
}
SECTIONS
{
/* default base address */
/* use -Wl,--section-start,.init=0xADDRESS to change */
. = 0x00802000;
/* Program */
.init :
{
KEEP (*crt0.o(*.init))
KEEP (*(.init))
} :text = 0
.plt : { *(.plt) }
.interp : { *(.interp) }
.hash : { *(.hash) }
.dynsym : { *(.dynsym) }
.dynstr : { *(.dynstr) }
.gnu.version : { *(.gnu.version) }
.gnu.version_d : { *(.gnu.version_d) }
.gnu.version_r : { *(.gnu.version_r) }
.rel.init : { *(.rel.init) }
.rela.init : { *(.rela.init) }
.rel.text : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
.rela.text : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
.rel.fini : { *(.rel.fini) }
.rela.fini : { *(.rela.fini) }
.rel.rodata : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
.rela.rodata : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
.rel.data : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
.rela.data : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
.rel.tdata : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
.rela.tdata : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
.rel.tbss : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
.rela.tbss : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
.rel.ctors : { *(.rel.ctors) }
.rela.ctors : { *(.rela.ctors) }
.rel.dtors : { *(.rel.dtors) }
.rela.dtors : { *(.rela.dtors) }
.rel.got : { *(.rel.got) }
.rela.got : { *(.rela.got) }
.rela.got1 : { *(.rela.got1) }
.rela.got2 : { *(.rela.got2) }
.rel.sdata : { *(.rel.sdata .rel.sdata.* .rel.gnu.linkonce.s.*) }
.rela.sdata : { *(.rela.sdata .rela.sdata.* .rela.gnu.linkonce.s.*) }
.rel.sbss : { *(.rel.sbss .rel.sbss.* .rel.gnu.linkonce.sb.*) }
.rela.sbss : { *(.rela.sbss .rela.sbss.* .rel.gnu.linkonce.sb.*) }
.rel.sdata2 : { *(.rel.sdata2 .rel.sdata2.* .rel.gnu.linkonce.s2.*) }
.rela.sdata2 : { *(.rela.sdata2 .rela.sdata2.* .rela.gnu.linkonce.s2.*) }
.rel.sbss2 : { *(.rel.sbss2 .rel.sbss2.* .rel.gnu.linkonce.sb2.*) }
.rela.sbss2 : { *(.rela.sbss2 .rela.sbss2.* .rela.gnu.linkonce.sb2.*) }
.rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
.rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
.rel.plt : { *(.rel.plt) }
.rela.plt : { *(.rela.plt) }
.text :
{
*(.text)
*(.text.*)
/* .gnu.warning sections are handled specially by elf32.em. */
*(.gnu.warning)
*(.gnu.linkonce.t.*)
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
} = 0
.fini :
{
KEEP (*(.fini))
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
} = 0
PROVIDE (__etext = .);
PROVIDE (_etext = .);
PROVIDE (etext = .);
.rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r.*) } :data
.rodata1 : { *(.rodata1) }
.sdata2 : { *(.sdata2) *(.sdata2.*) *(.gnu.linkonce.s2.*) }
.sbss2 : { *(.sbss2) *(.sbss2.*) *(.gnu.linkonce.sb2.*) }
/* Adjust the address for the data segment. We want to adjust up to
the same address within the page on the next page up. */
/* 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 : { *(.preinit_array) }
PROVIDE (__preinit_array_end = .);
PROVIDE (__init_array_start = .);
.init_array : { *(.init_array) }
PROVIDE (__init_array_end = .);
PROVIDE (__fini_array_start = .);
.fini_array : { *(.fini_array) }
PROVIDE (__fini_array_end = .);
.data :
{
*(.data)
*(.data.*)
*(.gnu.linkonce.d.*)
SORT(CONSTRUCTORS)
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
}
.data1 : { *(.data1) }
.tdata : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
.tbss : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
.eh_frame : { KEEP (*(.eh_frame)) }
.gcc_except_table : { *(.gcc_except_table) }
.fixup : { *(.fixup) }
.got1 : { *(.got1) }
.got2 : { *(.got2) }
.dynamic : { *(.dynamic) }
.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))
/* We don't want to include the .ctor section from
from the crtend.o file until after the sorted ctors.
The .ctor section from the crtend file contains the
end of ctors marker and it must be last */
KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
KEEP (*(SORT(.ctors.*)))
KEEP (*(.ctors))
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
}
.dtors :
{
KEEP (*crtbegin.o(.dtors))
KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
KEEP (*(SORT(.dtors.*)))
KEEP (*(.dtors))
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
}
.jcr : { KEEP (*(.jcr)) }
.got : { *(.got.plt) *(.got) }
/* We want the small data sections together, so single-instruction offsets
can access them all, and initialized data all before uninitialized, so
we can shorten the on-disk segment size. */
.sdata :
{
*(.sdata)
*(.sdata.*)
*(.gnu.linkonce.s.*)
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
}
_edata = .;
PROVIDE (edata = .);
.sbss :
{
__sbss_start = .;
PROVIDE (__sbss_start = .);
PROVIDE (___sbss_start = .);
*(.dynsbss)
*(.sbss)
*(.sbss.*)
*(.gnu.linkonce.sb.*)
*(.scommon)
PROVIDE (__sbss_end = .);
PROVIDE (___sbss_end = .);
. = ALIGN(32); /* REQUIRED. LD is flaky without it. */
__sbss_end = .;
} :bss1
.bss :
{
__bss_start = .;
PROVIDE (__bss_start = .);
*(.dynbss)
*(.bss)
*(.bss.*)
*(.gnu.linkonce.b.*)
*(COMMON)
/* Align here to ensure that the .bss section occupies space up to
_end. Align after .bss to ensure correct alignment even if the
.bss section disappears because there are no input sections. */
. = ALIGN(32);
PROVIDE (__bss_end = .);
__bss_end = .;
} :bss2
_end = .;
PROVIDE(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) }
/* These must appear regardless of . */
}

View File

@@ -1,7 +1,7 @@
diff -NBaur binutils-2.30/opcodes/ppc-opc.c binutils-2.30-ppc/opcodes/ppc-opc.c
--- binutils-2.30/opcodes/ppc-opc.c 2018-01-13 13:31:16.000000000 +0000
+++ binutils-2.30-ppc/opcodes/ppc-opc.c 2018-05-27 22:33:42.302025484 +0100
@@ -3488,7 +3488,7 @@
diff -NBaur binutils-2.31.1/opcodes/ppc-opc.c binutils-2.31.1-ppc/opcodes/ppc-opc.c
--- binutils-2.31.1/opcodes/ppc-opc.c 2018-06-24 19:38:58.000000000 +0100
+++ binutils-2.31.1-ppc/opcodes/ppc-opc.c 2018-11-01 10:59:42.814553627 +0000
@@ -3501,7 +3501,7 @@
#define MFDEC2 (PPC_OPCODE_PPC | PPC_OPCODE_601 | PPC_OPCODE_BOOKE \
| PPC_OPCODE_TITAN)
#define BOOKE PPC_OPCODE_BOOKE

View File

@@ -1,5 +1,5 @@
diff --git a/config/gthr.m4 b/config/gthr.m4
index 7b29f1f..814104f 100644
index 7b29f1f3327..814104f32a2 100644
--- a/config/gthr.m4
+++ b/config/gthr.m4
@@ -12,6 +12,7 @@ AC_DEFUN([GCC_AC_THREAD_HEADER],
@@ -11,10 +11,10 @@ index 7b29f1f..814104f 100644
lynx) thread_header=config/gthr-lynx.h ;;
mipssde) thread_header=config/mips/gthr-mipssde.h ;;
diff --git a/gcc/config.gcc b/gcc/config.gcc
index a5defb0..d714072 100644
index 532c33f4c2b..bb87330bbbe 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -2459,7 +2459,7 @@ powerpc-xilinx-eabi*)
@@ -2461,7 +2461,7 @@ powerpc-xilinx-eabi*)
use_gcc_stdint=wrap
;;
powerpc-*-eabi*)
@@ -23,11 +23,24 @@ index a5defb0..d714072 100644
extra_options="${extra_options} rs6000/sysv4.opt"
tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
use_gcc_stdint=wrap
diff --git a/gcc/config/newlib-stdint.h b/gcc/config/newlib-stdint.h
index f46e797d610..fd39e64c38d 100644
--- a/gcc/config/newlib-stdint.h
+++ b/gcc/config/newlib-stdint.h
@@ -25,7 +25,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
/* newlib uses 32-bit long in certain cases for all non-SPU
targets. */
#ifndef STDINT_LONG32
-#define STDINT_LONG32 (LONG_TYPE_SIZE == 32)
+#define STDINT_LONG32 0
#endif
#define SIG_ATOMIC_TYPE "int"
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index b9b58a8..7c86ac6 100644
index b83b304e3eb..b85359edcfc 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -205,6 +205,7 @@
@@ -212,6 +212,7 @@
{ "asm_cpu_476", ASM_CPU_476_SPEC }, \
SUBTARGET_EXTRA_SPECS
@@ -35,7 +48,7 @@ index b9b58a8..7c86ac6 100644
/* -mcpu=native handling only makes sense with compiler running on
an PowerPC chip. If changing this condition, also change
the condition in driver-rs6000.c. */
@@ -219,6 +220,8 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
@@ -226,6 +227,8 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
#else
#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
#endif
@@ -45,10 +58,10 @@ index b9b58a8..7c86ac6 100644
#ifndef CC1_CPU_SPEC
#ifdef HAVE_LOCAL_CPU_DETECT
diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h
index bb19d0d..ff5f80b 100644
index bb19d0dcd41..74d1e474432 100644
--- a/gcc/config/rs6000/sysv4.h
+++ b/gcc/config/rs6000/sysv4.h
@@ -565,7 +565,12 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
@@ -565,7 +565,11 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
/* Default starting address if specified. */
#define LINK_START_SPEC "\
@@ -57,23 +70,21 @@ index bb19d0d..ff5f80b 100644
+ mvgc : %(link_start_vgc) ; \
+ mgcbios : %(link_start_gcb) ; \
+ mrvl : %(link_start_rvl) ; \
+ mwup : %(link_start_wup) ; \
+ mads : %(link_start_ads) ; \
myellowknife : %(link_start_yellowknife) ; \
mmvme : %(link_start_mvme) ; \
msim : %(link_start_sim) ; \
@@ -596,7 +601,9 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
@@ -596,7 +600,8 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
/* Any specific OS flags. */
#define LINK_OS_SPEC "\
-%{mads : %(link_os_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(link_os_ogc) ; \
+ mwup : %(link_os_wup) ; \
+ mads : %(link_os_ads) ; \
myellowknife : %(link_os_yellowknife) ; \
mmvme : %(link_os_mvme) ; \
msim : %(link_os_sim) ; \
@@ -614,7 +621,11 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
@@ -614,7 +619,10 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
/* Override rs6000.h definition. */
#undef CPP_SPEC
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \
@@ -81,12 +92,11 @@ index bb19d0d..ff5f80b 100644
+%{mgcn : %(cpp_os_gcn) ; \
+ mogc|mvgc|mgcbios : %(cpp_os_ogc) ; \
+ mrvl : %(cpp_os_rvl) ; \
+ mwup : %(cpp_os_wup) ; \
+ mads : %(cpp_os_ads) ; \
myellowknife : %(cpp_os_yellowknife) ; \
mmvme : %(cpp_os_mvme) ; \
msim : %(cpp_os_sim) ; \
@@ -628,7 +639,11 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
@@ -628,7 +636,10 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "\
@@ -94,23 +104,21 @@ index bb19d0d..ff5f80b 100644
+%{mgcn : %(startfile_gcn) ; \
+ mogc|mvgc|mgcbios : %(startfile_ogc) ; \
+ mrvl : %(startfile_ogc) ; \
+ mwup : %(startfile_wup) ; \
+ mads : %(startfile_ads) ; \
myellowknife : %(startfile_yellowknife) ; \
mmvme : %(startfile_mvme) ; \
msim : %(startfile_sim) ; \
@@ -642,7 +657,9 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
@@ -642,7 +653,8 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
#undef LIB_SPEC
#define LIB_SPEC "\
-%{mads : %(lib_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(lib_ogc) ; \
+ mwup : %(lib_wup) ; \
+ mads : %(lib_ads) ; \
myellowknife : %(lib_yellowknife) ; \
mmvme : %(lib_mvme) ; \
msim : %(lib_sim) ; \
@@ -652,11 +669,13 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
@@ -652,11 +664,12 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
mcall-openbsd: %(lib_openbsd) ; \
: %(lib_default) }"
@@ -121,110 +129,97 @@ index bb19d0d..ff5f80b 100644
#define ENDFILE_SPEC "\
-%{mads : %(endfile_ads) ; \
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(endfile_ogc) ; \
+ mwup : %(endfile_wup) ; \
+ mads : %(endfile_ads) ; \
myellowknife : %(endfile_yellowknife) ; \
mmvme : %(endfile_mvme) ; \
msim : %(endfile_sim) ; \
@@ -672,16 +691,33 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
@@ -672,16 +685,27 @@ ENDIAN_SELECT(" -mbig", " -mlittle", DEFAULT_ASM_ENDIAN)
/* Motorola ADS support. */
#define LIB_ADS_SPEC "--start-group -lads -lc --end-group"
+#define LIB_OGC_SPEC "--start-group -lsysbase -lc --end-group"
+#define LIB_WUP_SPEC "--start-group -lsysbase -lc --end-group"
#define STARTFILE_ADS_SPEC "ecrti.o%s crt0.o%s crtbegin.o%s"
+#define STARTFILE_OGC_SPEC "ecrti.o%s crtbegin.o%s crtmain.o%s"
+#define STARTFILE_WUP_SPEC "ecrti.o%s crtbegin.o%s crtmain.o%s"
#define ENDFILE_ADS_SPEC "crtend.o%s ecrtn.o%s"
+#define ENDFILE_OGC_SPEC "crtend.o%s ecrtn.o%s"
+#define ENDFILE_WUP_SPEC "crtend.o%s ecrtn.o%s"
#define LINK_START_ADS_SPEC "-T ads.ld%s"
+#define LINK_START_OGC_SPEC "-T ogc.ld%s"
+#define LINK_START_RVL_SPEC "-T rvl.ld%s"
+#define LINK_START_WUP_SPEC "-T wup.ld%s"
+#define LINK_START_VGC_SPEC "-T vgcogc.ld%s"
+#define LINK_START_GCB_SPEC "-T gcbogc.ld%s"
#define LINK_OS_ADS_SPEC ""
+#define LINK_OS_OGC_SPEC "--gc-sections"
+#define LINK_OS_WUP_SPEC "--gc-sections"
#define CPP_OS_ADS_SPEC ""
+#define CPP_OS_GCN_SPEC "-D__gamecube__ -ffunction-sections -fdata-sections"
+#define CPP_OS_OGC_SPEC "-D__gamecube__ -DHW_DOL -ffunction-sections -fdata-sections"
+#define CPP_OS_RVL_SPEC "-D__wii__ -DHW_RVL -ffunction-sections -fdata-sections"
+#define CPP_OS_WUP_SPEC "-D__wiiu__ -DHW_WUP -ffunction-sections -fdata-sections"
/* Motorola Yellowknife support. */
#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group"
@@ -882,6 +918,8 @@ ncrtn.o%s"
@@ -882,6 +906,7 @@ ncrtn.o%s"
#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
{ "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \
+ { "lib_ogc", LIB_OGC_SPEC }, \
+ { "lib_wup", LIB_WUP_SPEC }, \
{ "lib_ads", LIB_ADS_SPEC }, \
{ "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \
{ "lib_mvme", LIB_MVME_SPEC }, \
@@ -891,6 +929,8 @@ ncrtn.o%s"
@@ -891,6 +916,7 @@ ncrtn.o%s"
{ "lib_netbsd", LIB_NETBSD_SPEC }, \
{ "lib_openbsd", LIB_OPENBSD_SPEC }, \
{ "lib_default", LIB_DEFAULT_SPEC }, \
+ { "startfile_ogc", STARTFILE_OGC_SPEC }, \
+ { "startfile_wup", STARTFILE_WUP_SPEC }, \
{ "startfile_ads", STARTFILE_ADS_SPEC }, \
{ "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \
{ "startfile_mvme", STARTFILE_MVME_SPEC }, \
@@ -900,6 +940,8 @@ ncrtn.o%s"
@@ -900,6 +926,7 @@ ncrtn.o%s"
{ "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \
{ "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \
+ { "endfile_ogc", ENDFILE_OGC_SPEC }, \
+ { "endfile_wup", ENDFILE_WUP_SPEC }, \
{ "endfile_ads", ENDFILE_ADS_SPEC }, \
{ "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \
{ "endfile_mvme", ENDFILE_MVME_SPEC }, \
@@ -911,7 +953,12 @@ ncrtn.o%s"
@@ -911,7 +938,11 @@ ncrtn.o%s"
{ "endfile_default", ENDFILE_DEFAULT_SPEC }, \
{ "link_shlib", LINK_SHLIB_SPEC }, \
{ "link_start", LINK_START_SPEC }, \
+ { "link_start_vgc", LINK_START_VGC_SPEC }, \
+ { "link_start_gcb", LINK_START_GCB_SPEC }, \
+ { "link_start_rvl", LINK_START_RVL_SPEC }, \
+ { "link_start_wup", LINK_START_WUP_SPEC }, \
{ "link_start_ads", LINK_START_ADS_SPEC }, \
+ { "link_start_ogc", LINK_START_OGC_SPEC }, \
{ "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \
{ "link_start_mvme", LINK_START_MVME_SPEC }, \
{ "link_start_sim", LINK_START_SIM_SPEC }, \
@@ -921,6 +968,8 @@ ncrtn.o%s"
@@ -921,6 +952,7 @@ ncrtn.o%s"
{ "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \
{ "link_start_default", LINK_START_DEFAULT_SPEC }, \
{ "link_os", LINK_OS_SPEC }, \
+ { "link_os_ogc", LINK_OS_OGC_SPEC }, \
+ { "link_os_wup", LINK_OS_WUP_SPEC }, \
{ "link_os_ads", LINK_OS_ADS_SPEC }, \
{ "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \
{ "link_os_mvme", LINK_OS_MVME_SPEC }, \
@@ -932,6 +981,10 @@ ncrtn.o%s"
@@ -932,6 +964,9 @@ ncrtn.o%s"
{ "link_os_default", LINK_OS_DEFAULT_SPEC }, \
{ "cc1_secure_plt_default", CC1_SECURE_PLT_DEFAULT_SPEC }, \
{ "link_secure_plt", LINK_SECURE_PLT_SPEC }, \
+ { "cpp_os_gcn", CPP_OS_GCN_SPEC }, \
+ { "cpp_os_ogc", CPP_OS_OGC_SPEC }, \
+ { "cpp_os_rvl", CPP_OS_RVL_SPEC }, \
+ { "cpp_os_wup", CPP_OS_WUP_SPEC }, \
{ "cpp_os_ads", CPP_OS_ADS_SPEC }, \
{ "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \
{ "cpp_os_mvme", CPP_OS_MVME_SPEC }, \
diff --git a/gcc/config/rs6000/sysv4.opt b/gcc/config/rs6000/sysv4.opt
index 34fea0d..9451447 100644
index 34fea0ddd08..084a8ae435e 100644
--- a/gcc/config/rs6000/sysv4.opt
+++ b/gcc/config/rs6000/sysv4.opt
@@ -124,6 +124,30 @@ mads
@@ -124,6 +124,26 @@ mads
Target RejectNegative
Link with libads.a, libc.a and crt0.o.
@@ -247,16 +242,12 @@ index 34fea0d..9451447 100644
+mrvl
+Target RejectNegative
+Link with libsysbase.a and libc.a, use rvl linker script
+
+mwup
+Target RejectNegative
+Link with libsysbase.a and libc.a, use wup linker script
+
myellowknife
Target RejectNegative
Link with libyk.a, libc.a and crt0.o.
diff --git a/gcc/configure b/gcc/configure
index 6121e16..6584112 100755
index 6121e163259..6584112e6a1 100755
--- a/gcc/configure
+++ b/gcc/configure
@@ -11692,7 +11692,7 @@ case ${enable_threads} in
@@ -269,7 +260,7 @@ index 6121e16..6584112 100755
target_thread_file=${enable_threads}
;;
diff --git a/gcc/configure.ac b/gcc/configure.ac
index b066cc6..c42b3ef 100644
index b066cc609e1..c42b3ef5fc6 100644
--- a/gcc/configure.ac
+++ b/gcc/configure.ac
@@ -1611,7 +1611,7 @@ case ${enable_threads} in
@@ -282,7 +273,7 @@ index b066cc6..c42b3ef 100644
target_thread_file=${enable_threads}
;;
diff --git a/libgcc/config/rs6000/crtrestvr.S b/libgcc/config/rs6000/crtrestvr.S
index ba2b262..8d86610 100644
index ba2b2623301..8d866107142 100644
--- a/libgcc/config/rs6000/crtrestvr.S
+++ b/libgcc/config/rs6000/crtrestvr.S
@@ -24,7 +24,7 @@
@@ -300,7 +291,7 @@ index ba2b262..8d86610 100644
#endif
+#endif
diff --git a/libgcc/config/rs6000/crtsavevr.S b/libgcc/config/rs6000/crtsavevr.S
index 077e33f..b7be68b 100644
index 077e33f34d5..b7be68b710f 100644
--- a/libgcc/config/rs6000/crtsavevr.S
+++ b/libgcc/config/rs6000/crtsavevr.S
@@ -24,7 +24,7 @@
@@ -319,7 +310,7 @@ index 077e33f..b7be68b 100644
+#endif
diff --git a/libgcc/config/rs6000/gthr-dkp.c b/libgcc/config/rs6000/gthr-dkp.c
new file mode 100644
index 0000000..94d6ba9
index 00000000000..94d6ba94ec0
--- /dev/null
+++ b/libgcc/config/rs6000/gthr-dkp.c
@@ -0,0 +1,349 @@
@@ -674,7 +665,7 @@ index 0000000..94d6ba9
+}
diff --git a/libgcc/config/rs6000/gthr-dkp.h b/libgcc/config/rs6000/gthr-dkp.h
new file mode 100644
index 0000000..281c19d
index 00000000000..281c19d2a60
--- /dev/null
+++ b/libgcc/config/rs6000/gthr-dkp.h
@@ -0,0 +1,185 @@
@@ -864,7 +855,7 @@ index 0000000..281c19d
+
+#endif /* ! _GLIBCXX_GCC_GTHR_DKP_H */
diff --git a/libgcc/config/rs6000/t-ppccomm b/libgcc/config/rs6000/t-ppccomm
index fb812d3..7f6669d 100644
index fb812d3801f..7f6669d530f 100644
--- a/libgcc/config/rs6000/t-ppccomm
+++ b/libgcc/config/rs6000/t-ppccomm
@@ -1,4 +1,5 @@
@@ -874,7 +865,7 @@ index fb812d3..7f6669d 100644
# This can't end up in shared libgcc
diff --git a/libgcc/configure b/libgcc/configure
index b2f3f87..c6f93f8 100644
index b2f3f870844..c6f93f8b3ac 100644
--- a/libgcc/configure
+++ b/libgcc/configure
@@ -5442,6 +5442,7 @@ tm_file="${tm_file_}"
@@ -886,7 +877,7 @@ index b2f3f87..c6f93f8 100644
lynx) thread_header=config/gthr-lynx.h ;;
mipssde) thread_header=config/mips/gthr-mipssde.h ;;
diff --git a/libgcc/crtstuff.c b/libgcc/crtstuff.c
index 5e89445..f234745 100644
index 5e894455e16..f2347455de0 100644
--- a/libgcc/crtstuff.c
+++ b/libgcc/crtstuff.c
@@ -47,6 +47,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
@@ -898,7 +889,7 @@ index 5e89445..f234745 100644
/* FIXME: Including auto-host is incorrect, but until we have
identified the set of defines that need to go into auto-target.h,
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure
index ba094be..ac53ee6 100755
index fbc9daeb195..90c15adda62 100755
--- a/libstdc++-v3/configure
+++ b/libstdc++-v3/configure
@@ -15178,6 +15178,7 @@ $as_echo "$target_thread_file" >&6; }

View File

@@ -7407,10 +7407,10 @@ index eb645868b..b9a006453 100644
powerpc*-*-linux* | \
powerpc*-*-rtem* | \
diff --git a/newlib/libc/include/sys/dirent.h b/newlib/libc/include/sys/dirent.h
index a3fb5c02c..b42f0b3b1 100644
index a3fb5c02c..adb8e1083 100644
--- a/newlib/libc/include/sys/dirent.h
+++ b/newlib/libc/include/sys/dirent.h
@@ -4,10 +4,56 @@
@@ -4,10 +4,57 @@
not support <dirent.h>, we will get this file which uses #error to force
an error. */
@@ -7419,6 +7419,7 @@ index a3fb5c02c..b42f0b3b1 100644
+
+#include <sys/types.h>
+#include <sys/syslimits.h>
+#include <sys/iosupport.h>
+
+#define _DIRENT_HAVE_D_TYPE
+
@@ -7445,7 +7446,7 @@ index a3fb5c02c..b42f0b3b1 100644
+
+ typedef struct {
+ long int position;
+ void* dirData;
+ DIR_ITER* dirData;
+ struct dirent fileData;
+ } DIR;
+
@@ -7484,7 +7485,7 @@ index 2900b332f..6efb54eb3 100644
#ifdef __rtems__
diff --git a/newlib/libc/include/sys/iosupport.h b/newlib/libc/include/sys/iosupport.h
new file mode 100644
index 000000000..649fc2630
index 000000000..8b6d8da30
--- /dev/null
+++ b/newlib/libc/include/sys/iosupport.h
@@ -0,0 +1,108 @@
@@ -7500,7 +7501,7 @@ index 000000000..649fc2630
+#include <reent.h>
+#include <sys/stat.h>
+#include <sys/statvfs.h>
+#include <time.h>
+#include <sys/time.h>
+
+enum {
+ STD_IN,

View File

@@ -1,45 +0,0 @@
include $(DEVKITPPC)/base_tools
#---------------------------------------------------------------------------------
%.a:
#---------------------------------------------------------------------------------
@echo $(notdir $@)
@rm -f $@
@$(AR) -rc $@ $^
#---------------------------------------------------------------------------------
%.o: %.cpp
@echo $(notdir $<)
@$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.o: %.c
@echo $(notdir $<)
@$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(CFLAGS) -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.o: %.m
@echo $(notdir $<)
@$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d $(OBJCFLAGS) -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.o: %.s
@echo $(notdir $<)
@$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
%.o: %.S
@echo $(notdir $<)
@$(CC) -MMD -MP -MF $(DEPSDIR)/$*.d -x assembler-with-cpp $(ASFLAGS) -c $< -o $@ $(ERROR_FILTER)
#---------------------------------------------------------------------------------
# canned command sequence for binary data
#---------------------------------------------------------------------------------
define bin2o
bin2s -a 32 $< | $(AS) -o $(@)
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"_end[];" > `(echo $(<F) | tr . _)`.h
echo "extern const u8" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`"[];" >> `(echo $(<F) | tr . _)`.h
echo "extern const u32" `(echo $(<F) | sed -e 's/^\([0-9]\)/_\1/' | tr . _)`_size";" >> `(echo $(<F) | tr . _)`.h
endef

View File

@@ -1,37 +0,0 @@
#---------------------------------------------------------------------------------
# change shell on Snow Leopard
#---------------------------------------------------------------------------------
UNAME_S := $(shell uname -s)
UNAME_R := $(shell uname -r)
ifneq (,$(findstring Darwin,$(UNAME_S)))
ifneq (,$(findstring 10.8.0,$(UNAME_R)))
export SHELL=/bin/bash
endif
endif
#---------------------------------------------------------------------------------
# path to tools
#---------------------------------------------------------------------------------
DEVKITPATH=$(shell echo "$(DEVKITPRO)" | sed -e 's/^\([a-zA-Z]\):/\/\1/')
export PORTLIBS := $(DEVKITPATH)/portlibs/ppc
export PATH := $(DEVKITPATH)/tools/bin:$(DEVKITPATH)/devkitPPC/bin:$(PORTLIBS)/bin:$(PATH)
#---------------------------------------------------------------------------------
# the prefix on the compiler executables
#---------------------------------------------------------------------------------
PREFIX := powerpc-eabi-
export AS := $(PREFIX)as
export CC := $(PREFIX)gcc
export CXX := $(PREFIX)g++
export AR := $(PREFIX)ar
export OBJCOPY := $(PREFIX)objcopy
ISVC=$(or $(VCBUILDHELPER_COMMAND),$(MSBUILDEXTENSIONSPATH32),$(MSBUILDEXTENSIONSPATH))
ifneq (,$(ISVC))
ERROR_FILTER := 2>&1 | sed -e 's/\(.[a-zA-Z]\+\):\([0-9]\+\):/\1(\2):/g'
endif

View File

@@ -1,25 +0,0 @@
ifeq ($(strip $(DEVKITPPC)),)
$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPro/devkitPPC)
endif
export LIBOGC_INC := $(DEVKITPRO)/libogc/include
export LIBOGC_LIB := $(DEVKITPRO)/libogc/lib/cube
include $(DEVKITPPC)/base_rules
MACHDEP = -DGEKKO -mogc -mcpu=750 -meabi -mhard-float
#---------------------------------------------------------------------------------
%.dol: %.elf
@echo output ... $(notdir $@)
@elf2dol $< $@
#---------------------------------------------------------------------------------
%.tpl : %.scf
@echo $(notdir $<)
@gxtexconv -s $< -d $(DEPSDIR)/$*.d -o $@
#---------------------------------------------------------------------------------
%.elf:
@echo linking ... $(notdir $@)
@$(LD) $^ $(LDFLAGS) $(LIBPATHS) $(LIBS) -o $@

View File

@@ -1,25 +0,0 @@
ifeq ($(strip $(DEVKITPPC)),)
$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPro/devkitPPC)
endif
export LIBOGC_INC := $(DEVKITPRO)/libogc/include
export LIBOGC_LIB := $(DEVKITPRO)/libogc/lib/wii
MACHDEP = -DGEKKO -mrvl -mcpu=750 -meabi -mhard-float
include $(DEVKITPPC)/base_rules
#---------------------------------------------------------------------------------
%.dol: %.elf
@echo output ... $(notdir $@)
@elf2dol $< $@
#---------------------------------------------------------------------------------
%.tpl : %.scf
@echo $(notdir $<)
@gxtexconv -s $< -d $(DEPSDIR)/$*.d -o $@
#---------------------------------------------------------------------------------
%.elf:
@echo linking ... $(notdir $@)
@$(LD) $^ $(LDFLAGS) $(LIBPATHS) $(LIBS) -o $@

View File

@@ -1,12 +0,0 @@
ifeq ($(strip $(DEVKITPPC)),)
$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPro/devkitPPC)
endif
MACHDEP = -DESPRESSO -mwup -mcpu=750 -meabi -mhard-float
include $(DEVKITPPC)/base_rules
#---------------------------------------------------------------------------------
%.elf:
@echo linking ... $(notdir $@)
@$(LD) $^ $(LDFLAGS) $(LIBPATHS) $(LIBS) -o $@

View File

@@ -97,7 +97,7 @@ then
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
--prefix=$prefix\
--with-system-zlib\
--with-bugurl="https://github.com/devkitpro/buildscripts/issues" --with-pkgversion="devkitPPC release 32" \
--with-bugurl="https://github.com/devkitpro/buildscripts/issues" --with-pkgversion="devkitPPC release 34" \
$CROSS_PARAMS \
$CROSS_GCC_PARAMS \
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
@@ -185,10 +185,6 @@ rm -fr $prefix/$target/sys-include
echo "installing linkscripts ..."
cp $BUILDSCRIPTDIR/dkppc/crtls/*.ld $prefix/$target/lib/
#---------------------------------------------------------------------------------
# copy base rulesets
#---------------------------------------------------------------------------------
cp $BUILDSCRIPTDIR/dkppc/rules/* $prefix
cd $BUILDDIR

View File

@@ -3,6 +3,12 @@
export DEVKITPPC=$TOOLPATH/devkitPPC
export DEVKITPRO=$TOOLPATH
cd $BUILDDIR
mkdir -p rules
cd rules
tar -xvf $SRCDIR/devkitppc-rules-$DKPPC_RULES_VER.tar.xz
make install
cd $BUILDDIR/libogc-$LIBOGC_VER
if [ ! -f installed ]; then

View File

@@ -30,29 +30,29 @@ done
case "$VERSION" in
"1" )
GCC_VER=8.1.0
BINUTILS_VER=2.30
NEWLIB_VER=3.0.0
GDB_VER=8.0
GCC_VER=8.2.0
BINUTILS_VER=2.32
NEWLIB_VER=3.1.0
GDB_VER=8.2.1
basedir='dkarm-eabi'
package=devkitARM
target=arm-none-eabi
toolchain=DEVKITARM
;;
"2" )
GCC_VER=8.1.0
BINUTILS_VER=2.30
GCC_VER=8.2.0
BINUTILS_VER=2.32
MN_BINUTILS_VER=2.17
NEWLIB_VER=3.0.0
GDB_VER=8.0.1
GDB_VER=8.2
basedir='dkppc'
package=devkitPPC
target=powerpc-eabi
toolchain=DEVKITPPC
;;
"3" )
GCC_VER=8.1.0
BINUTILS_VER=2.30
GCC_VER=8.2.0
BINUTILS_VER=2.31.1
NEWLIB_VER=3.0.0
GDB_VER=8.0
basedir='dka64'