mirror of
https://github.com/devkitPro/buildscripts.git
synced 2026-08-21 09:54:03 -05:00
Compare commits
1 Commits
devkitA64_
...
devkitPSP_
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9bf09fc8a8 |
5
.gitignore
vendored
5
.gitignore
vendored
@@ -1,7 +1,4 @@
|
|||||||
config.sh
|
config.sh
|
||||||
.devkitARM*
|
.devkitARM*
|
||||||
.devkitPPC*
|
.devkitPPC*
|
||||||
.devkitA64*
|
.devkitPSP*
|
||||||
*.gz
|
|
||||||
*.bz2
|
|
||||||
*~
|
|
||||||
|
|||||||
94
README.TXT
94
README.TXT
@@ -1,84 +1,59 @@
|
|||||||
devkitPro build scripts
|
devkitPro build scripts
|
||||||
--------------------------
|
--------------------------
|
||||||
|
|
||||||
This readme will guide you through building devkitARM, devkitPPC or devkitA64
|
This readme will guide you through building devkitARM, devkitPPC or devkitPSP from source using a set of scripts.
|
||||||
from source using a set of scripts.
|
|
||||||
|
|
||||||
The windows versions of the toolchains are now cross compiled on linux using
|
To use these scripts under minsys and MinGW you will need some additional packages over and above the base install.
|
||||||
mingw-w64
|
|
||||||
|
|
||||||
Preparing to build
|
The minsys developer toolkit
|
||||||
--------------------------
|
|
||||||
|
http://prdownloads.sourceforge.net/mingw/msysDTK-1.0.1.exe?download
|
||||||
|
|
||||||
|
Bison, Flex and Wget from the gnuwin32 project
|
||||||
|
|
||||||
|
http://sourceforge.net/projects/gnuwin32/
|
||||||
|
|
||||||
|
For devkitPSP a command line subversion client is required to get the PSP SDK http://www.tigris.org
|
||||||
|
|
||||||
required packages for building on debian/*buntu
|
required packages for building on debian/*buntu
|
||||||
|
|
||||||
sudo apt-get install build-essential autoconf automake bison flex libncurses5-dev
|
sudo apt-get install build-essential autoconf automake bison flex libncurses5-dev libreadline-dev texinfo
|
||||||
libreadline-dev texinfo pkg-config
|
|
||||||
|
|
||||||
For building gcc libgmp, libmpfr and libmpc are required - these are built as
|
for building gcc libgmp, libmpfr and libmpc are required
|
||||||
static libraries to make packaging simpler. If you're building the tools for
|
|
||||||
personal use then the versions packaged by your chosen distro should suffice.
|
|
||||||
|
|
||||||
http://gmplib.org/
|
http://gmplib.org/
|
||||||
http://www.mpfr.org/
|
http://www.mpfr.org/
|
||||||
http://www.multiprecision.org/
|
http://www.multiprecision.org/
|
||||||
|
|
||||||
sudo apt-get install libgmp-dev libmpfr-dev libmpc-dev
|
Some of the tools for devkitARM and devkitPPC also require FreeImage and zlib
|
||||||
|
|
||||||
Some of the tools for devkitARM and devkitPPC also require FreeImage, zlib,
|
|
||||||
expat, and libusb. Again these are built as static libraries for ease of
|
|
||||||
packaging but you can probably use the versions supplied by your distro.
|
|
||||||
|
|
||||||
http://freeimage.sourceforge.net/
|
http://freeimage.sourceforge.net/
|
||||||
http://www.zlib.net
|
http://www.zlib.net
|
||||||
http://www.libusb.org
|
|
||||||
http://expat.sourceforge.net/
|
Downloading the source packages
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
sudo apt-get install libfreeimage-dev zlib1g-dev libusb-dev libexpat1-dev
|
When you run the build script it will ask you to choose from one of two options, one for if you have already downloaded the source packages and another for if you want it to download them for you (using wget or curl).
|
||||||
|
|
||||||
|
|
||||||
Building gxtexconv for cube/wii needs GL/gl.h which can be obtained with
|
|
||||||
|
|
||||||
sudo apt-get install mesa-common-dev
|
|
||||||
|
|
||||||
Tools for devkitA64 require liblz4.
|
|
||||||
|
|
||||||
http://lz4.github.io/lz4/
|
|
||||||
|
|
||||||
sudo apt-get install liblz4-dev
|
|
||||||
|
|
||||||
|
|
||||||
For building the OSX versions we install the Xcode commandline tools and build
|
|
||||||
pkg-config from source as well as static versions of the libraries listed above.
|
|
||||||
This helps keep the dependencies to a minimum so end users can use the tools
|
|
||||||
with only Xcode command line tools to obtain make.
|
|
||||||
|
|
||||||
To avoid having to manually answer prompts during the build the script will
|
|
||||||
read variables from config.sh if it exists. Copy config.sh.sample to config.sh
|
|
||||||
and set the variables as appropriate for your build.
|
|
||||||
|
|
||||||
The script will download the source packages it needs. These will be downloaded
|
|
||||||
to the script directory by default but you can set BUILD_DKPRO_SRCDIR if you want
|
|
||||||
to put them somewhere else. When its finished you have the option to delete
|
|
||||||
all temporary files, sources and their source packages.
|
|
||||||
|
|
||||||
|
The top level shell script has now been unified and offers the option of devkitARM, devkitPPC or devkitPSP.
|
||||||
|
|
||||||
Building the devkits
|
Building the devkits
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
Simply run the "build-devkit.sh" script in the same directory as this text file
|
Simply run the "build-devkit.sh" script in the same directory as this text file as shown below, then follow the prompts;
|
||||||
as shown below, then follow the prompts;
|
|
||||||
|
|
||||||
./build-devkit.sh
|
./build-devkit.sh
|
||||||
|
|
||||||
Several examples tarballs are provided for the platforms supported by devkitARM &
|
Once the script finds the source packages they will be decompressed and the build process will begin. When its finished you have the option to delete all temporary files, sources and their source packages.
|
||||||
devkitPPC, these include basic templates for starting your own projects.
|
|
||||||
See http://wiki.devkitpro.org/index.php/Getting_Started for links.
|
To avoid having to manually answer prompts during the build the script will read variables from config.sh if it exists. Copy config.sh.sample to config.sh and set the variables as appropriate for your build.
|
||||||
|
|
||||||
|
Several examples tarballs are provided for the platforms supported by devkitARM & devkitPPC, these include basic templates for starting your own projects. See http://wiki.devkitpro.org/index.php/Getting_Started for links.
|
||||||
|
|
||||||
Using devkitARM
|
Using devkitARM
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
to use the built in crt0 and linkscript use arm-none-eabi-gcc to link your project
|
to use the built in crt0 and linkscript use arm-eabi-gcc to link your project
|
||||||
|
|
||||||
Several specs files are built in for the various platforms
|
Several specs files are built in for the various platforms
|
||||||
|
|
||||||
@@ -90,21 +65,25 @@ Several specs files are built in for the various platforms
|
|||||||
-specs=ds_cart for a DS arm7 binary which runs from GBA cart.
|
-specs=ds_cart for a DS arm7 binary which runs from GBA cart.
|
||||||
-specs=gp32.specs for standard GP32 app.
|
-specs=gp32.specs for standard GP32 app.
|
||||||
-specs=gp32_gpsdk.specs for official gamepark SDK GP32 app.
|
-specs=gp32_gpsdk.specs for official gamepark SDK GP32 app.
|
||||||
-specs=3dsx.specs for a 3DS homebrew binary.
|
|
||||||
|
|
||||||
Using devkitPPC
|
Using devkitPPC
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
to use the built in crt0 and linkscript use powerpc-eabi-gcc to link your project,
|
to use the built in crt0 and linkscript use powerpc-gekko-gcc to link your project, using the command line switch -mgcn for a bare bones system, -mogc to use libogc and the multi-threaded microkernel for gamecube, -mrvl for wii.
|
||||||
using the command line switch -mgcn for a bare bones system, -mogc to use libogc and
|
|
||||||
the multi-threaded microkernel for gamecube, -mrvl for wii, -mwup for wii u.
|
|
||||||
|
|
||||||
|
Using devkitPSP
|
||||||
|
---------------
|
||||||
|
|
||||||
|
All you need to do now to use devkitPSP is make sure that your freshly built tools are in your PATH, something like this;
|
||||||
|
|
||||||
|
export PATH=$PATH:<path to devkitPSP>/bin
|
||||||
|
|
||||||
|
(Obviously replace <path to devkitPSP> with the full path to the devkitPSP installation directory)
|
||||||
|
|
||||||
Getting started
|
Getting started
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
The best thing to do next is test the compiler, so grab an examples tarball
|
The best thing to do next is test the compiler, so grab an examples tarball from sourceforge & run make in the top level.
|
||||||
from sourceforge & run make in the top level.
|
|
||||||
|
|
||||||
Credits
|
Credits
|
||||||
-------
|
-------
|
||||||
@@ -112,7 +91,6 @@ Credits
|
|||||||
* Thanks to WinterMute for bringing us devkitPro, the website is http://www.devkitpro.org
|
* Thanks to WinterMute for bringing us devkitPro, the website is http://www.devkitpro.org
|
||||||
* Build scripts written by WinterMute and tied together by GreenGianT
|
* Build scripts written by WinterMute and tied together by GreenGianT
|
||||||
* Thanks to Mr Spiv, Honkey Kong, Raleigh and JoostP for OS X testing
|
* Thanks to Mr Spiv, Honkey Kong, Raleigh and JoostP for OS X testing
|
||||||
* libctru by Smealum, YellowS8, fincs, mtheall & WinterMute with contributions from many others.
|
|
||||||
* libogc written and supplied by Shagkur. Additional code by WinterMute, Bushing, Marcan & Tybor
|
* libogc written and supplied by Shagkur. Additional code by WinterMute, Bushing, Marcan & Tybor
|
||||||
* libgba by WinterMute
|
* libgba by WinterMute
|
||||||
* libnds by Joat, Dovoto and WinterMute with contributions from many others.
|
* libnds by Joat, Dovoto and WinterMute with contributions from many others.
|
||||||
|
|||||||
168
build-devkit.sh
168
build-devkit.sh
@@ -1,8 +1,9 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# devkitARM release 47
|
# Build scripts for
|
||||||
# devkitPPC release 29-1
|
# devkitARM release 38
|
||||||
# devkitA64 release 8
|
# devkitPPC release 26
|
||||||
|
# devkitPSP release 17
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
if [ 0 -eq 1 ] ; then
|
if [ 0 -eq 1 ] ; then
|
||||||
@@ -10,8 +11,8 @@ if [ 0 -eq 1 ] ; then
|
|||||||
echo "Please use the latest release buildscripts unless advised otherwise by devkitPro staff."
|
echo "Please use the latest release buildscripts unless advised otherwise by devkitPro staff."
|
||||||
echo "http://sourceforge.net/projects/devkitpro/files/buildscripts/"
|
echo "http://sourceforge.net/projects/devkitpro/files/buildscripts/"
|
||||||
echo
|
echo
|
||||||
echo "The scripts in the git repository are quite often dependent on things which currently only exist"
|
echo "The scripts in svn are quite often dependent on things which currently only exist on developer"
|
||||||
echo "on developer machines. This is not a bug, use stable releases."
|
echo "machines. This is not a bug, use stable releases."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -23,57 +24,49 @@ echo "Patches and improvements are of course welcome, please send these to the p
|
|||||||
echo "https://sourceforge.net/tracker/?group_id=114505&atid=668553"
|
echo "https://sourceforge.net/tracker/?group_id=114505&atid=668553"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
LIBOGC_VER=1.8.10
|
||||||
GENERAL_TOOLS_VER=1.0.2
|
LIBGBA_VER=20090222
|
||||||
|
LIBNDS_VER=1.5.5
|
||||||
LIBGBA_VER=0.5.0
|
DEFAULT_ARM7_VER=0.5.24
|
||||||
GBATOOLS_VER=1.0.0
|
DSWIFI_VER=0.3.13
|
||||||
|
|
||||||
LIBNDS_VER=1.6.2
|
|
||||||
DEFAULT_ARM7_VER=0.7.0
|
|
||||||
DSWIFI_VER=0.4.1
|
|
||||||
MAXMOD_VER=1.0.11
|
|
||||||
FILESYSTEM_VER=0.9.13
|
|
||||||
LIBFAT_VER=1.1.0
|
|
||||||
DSTOOLS_VER=1.1.0
|
|
||||||
GRIT_VER=0.8.14
|
|
||||||
NDSTOOL_VER=2.0.3
|
|
||||||
DLDITOOL_VER=1.24.0
|
|
||||||
MMUTIL_VER=1.8.6
|
|
||||||
|
|
||||||
DFU_UTIL_VER=0.9.1
|
|
||||||
STLINK_VER=1.2.3
|
|
||||||
|
|
||||||
GAMECUBE_TOOLS_VER=1.0.1
|
|
||||||
LIBOGC_VER=1.8.16
|
|
||||||
WIILOAD_VER=0.5.1
|
|
||||||
|
|
||||||
LIBCTRU_VER=1.3.0
|
|
||||||
CITRO3D_VER=1.3.0
|
|
||||||
TOOLS3DS_VER=1.1.4
|
|
||||||
LINK3DS_VER=0.5.2
|
|
||||||
PICASSO_VER=2.6.2
|
|
||||||
|
|
||||||
GP32_TOOLS_VER=1.0.3
|
|
||||||
LIBMIRKO_VER=0.9.7
|
LIBMIRKO_VER=0.9.7
|
||||||
|
MAXMOD_VER=1.0.7
|
||||||
SWITCH_TOOLS_VER=1.2.0
|
FILESYSTEM_VER=0.9.9
|
||||||
LIBNX_VER=1.0.0
|
LIBFAT_VER=1.0.11
|
||||||
|
PSPSDK_VER=20120404
|
||||||
OSXMIN=${OSXMIN:-10.9}
|
GBATOOLS_VER=1.0.0
|
||||||
|
GRIT_VER=0.8.10
|
||||||
|
NDSTOOL_VER=1.50.1
|
||||||
|
GENERAL_TOOLS_VER=1.0.0
|
||||||
|
DLDITOOL_VER=1.24.0
|
||||||
|
GXTEXCONV_VER=0.1.9
|
||||||
|
GCDSPSUITE_VER=1.4.0
|
||||||
|
ELF2DOL_VER=1.0.0
|
||||||
|
WIILOAD_VER=0.5.1
|
||||||
|
MMUTIL_VER=1.8.6
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
function extract_and_patch {
|
function extract_and_patch {
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
if [ ! -f extracted-$1-$2 ]; then
|
if [ ! -f extracted-$1 ]; then
|
||||||
echo "extracting $1-$2"
|
echo "extracting $1"
|
||||||
tar -xf "$SRCDIR/$1-$2.tar.$3" || { echo "Error extracting "$1; exit 1; }
|
if [ $3 == "bz2" ]; then
|
||||||
touch extracted-$1-$2
|
extractflags="-xjf"
|
||||||
|
archivetype=".tar.bz2"
|
||||||
|
elif [ $3 == "gz" ]; then
|
||||||
|
extractflags="-xzf"
|
||||||
|
archivetype=".tar.gz"
|
||||||
|
else
|
||||||
|
echo "invalid archive type"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
tar $extractflags $SRCDIR/$1-$2$archivetype || { echo "Error extracting "$1; exit 1; }
|
||||||
|
touch extracted-$1
|
||||||
fi
|
fi
|
||||||
if [[ ! -f patched-$1-$2 && -f $patchdir/$1-$2.patch ]]; then
|
if [[ ! -f patched-$1 && -f $patchdir/$1-$2.patch ]]; then
|
||||||
echo "patching $1-$2"
|
echo "patching $1"
|
||||||
patch -p1 -d $1-$2 -i $patchdir/$1-$2.patch || { echo "Error patching $1"; exit 1; }
|
patch -p1 -d $1-$2 -i $patchdir/$1-$2.patch || { echo "Error patching $1"; exit 1; }
|
||||||
touch patched-$1-$2
|
touch patched-$1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +87,7 @@ unset LDFLAGS
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Look for automated configuration file to bypass prompts
|
# Look for automated configuration file to bypass prompts
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
echo -n "Looking for configuration file... "
|
echo -n "Looking for configuration file... "
|
||||||
if [ -f ./config.sh ]; then
|
if [ -f ./config.sh ]; then
|
||||||
echo "Found."
|
echo "Found."
|
||||||
@@ -116,7 +109,7 @@ else
|
|||||||
echo "for mingw/msys you must use <drive>:/<install path> or you will have include path problems"
|
echo "for mingw/msys you must use <drive>:/<install path> or you will have include path problems"
|
||||||
echo "this is the top level directory for devkitpro, i.e. e:/devkitPro"
|
echo "this is the top level directory for devkitpro, i.e. e:/devkitPro"
|
||||||
|
|
||||||
read -e INSTALLDIR
|
read INSTALLDIR
|
||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -161,7 +154,7 @@ fi
|
|||||||
if [ "$BUILD_DKPRO_AUTOMATED" != "1" ] ; then
|
if [ "$BUILD_DKPRO_AUTOMATED" != "1" ] ; then
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo 'Ready to install '$package' in '$prefix
|
echo 'Ready to install '$package' in '$INSTALLDIR
|
||||||
echo
|
echo
|
||||||
echo 'press return to continue'
|
echo 'press return to continue'
|
||||||
|
|
||||||
@@ -171,16 +164,10 @@ PLATFORM=`uname -s`
|
|||||||
|
|
||||||
case $PLATFORM in
|
case $PLATFORM in
|
||||||
Darwin )
|
Darwin )
|
||||||
cflags="-mmacosx-version-min=${OSXMIN} -I/usr/local/include"
|
cflags="-mmacosx-version-min=10.4 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
|
||||||
ldflags="-mmacosx-version-min=${OSXMIN} -L/usr/local/lib"
|
ldflags="-mmacosx-version-min=10.4 -arch i386 -arch ppc -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk"
|
||||||
if [ "x${OSXSDKPATH}x" != "xx" ]; then
|
export CC=gcc-4.0
|
||||||
cflags="$cflags -isysroot ${OSXSDKPATH}"
|
export CXX=g++-4.0
|
||||||
ldflags="$ldflags -Wl,-syslibroot,${OSXSDKPATH}"
|
|
||||||
fi
|
|
||||||
TESTCC=`cc -v 2>&1 | grep clang`
|
|
||||||
if [ "x${TESTCC}x" != "xx" ]; then
|
|
||||||
cflags="$cflags -fbracket-depth=512"
|
|
||||||
fi
|
|
||||||
;;
|
;;
|
||||||
MINGW32* )
|
MINGW32* )
|
||||||
cflags="-D__USE_MINGW_ACCESS"
|
cflags="-D__USE_MINGW_ACCESS"
|
||||||
@@ -189,61 +176,49 @@ case $PLATFORM in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
|
||||||
BUILDSCRIPTDIR=$(pwd)
|
BUILDSCRIPTDIR=$(pwd)
|
||||||
BUILDDIR=$(pwd)/.$package
|
BUILDDIR=$(pwd)/.$package
|
||||||
|
|
||||||
if [ ! -z $CROSSBUILD ]; then
|
if [ ! -z $CROSSBUILD ]; then
|
||||||
BUILDDIR=$BUILDDIR-$CROSSBUILD
|
BUILDDIR=$BUILDDIR-$CROSSBUILD
|
||||||
fi
|
fi
|
||||||
|
DEVKITPRO_URL="https://downloads.devkitpro.org"
|
||||||
|
|
||||||
patchdir=$(pwd)/$basedir/patches
|
patchdir=$(pwd)/$basedir/patches
|
||||||
scriptdir=$(pwd)/$basedir/scripts
|
scriptdir=$(pwd)/$basedir/scripts
|
||||||
|
|
||||||
archives="binutils-${BINUTILS_VER}.tar.bz2 gcc-${GCC_VER}.tar.bz2 newlib-${NEWLIB_VER}.tar.gz gdb-${GDB_VER}.tar.xz"
|
archives="binutils-${BINUTILS_VER}.tar.bz2 gcc-${GCC_VER}.tar.bz2 newlib-${NEWLIB_VER}.tar.gz gdb-${GDB_VER}.tar.bz2"
|
||||||
|
|
||||||
if [ $VERSION -eq 1 ]; then
|
if [ $VERSION -eq 1 ]; then
|
||||||
|
|
||||||
targetarchives="libnds-src-${LIBNDS_VER}.tar.bz2 libgba-src-${LIBGBA_VER}.tar.bz2
|
targetarchives="libnds-src-${LIBNDS_VER}.tar.bz2 libgba-src-${LIBGBA_VER}.tar.bz2
|
||||||
libmirko-src-${LIBMIRKO_VER}.tar.bz2 dswifi-src-${DSWIFI_VER}.tar.bz2 maxmod-src-${MAXMOD_VER}.tar.bz2
|
libmirko-src-${LIBMIRKO_VER}.tar.bz2 dswifi-src-${DSWIFI_VER}.tar.bz2 maxmod-src-${MAXMOD_VER}.tar.bz2
|
||||||
default_arm7-src-${DEFAULT_ARM7_VER}.tar.bz2 libfilesystem-src-${FILESYSTEM_VER}.tar.bz2
|
default-arm7-src-${DEFAULT_ARM7_VER}.tar.bz2 libfilesystem-src-${FILESYSTEM_VER}.tar.bz2
|
||||||
libfat-src-${LIBFAT_VER}.tar.bz2 libctru-src-${LIBCTRU_VER}.tar.bz2 citro3d-src-${CITRO3D_VER}.tar.bz2"
|
libfat-src-${LIBFAT_VER}.tar.bz2"
|
||||||
|
hostarchives="gbatools-$GBATOOLS_VER.tar.bz2 grit-$GRIT_VER.tar.bz2 ndstool-$NDSTOOL_VER.tar.bz2
|
||||||
hostarchives="gbatools-$GBATOOLS_VER.tar.bz2 gp32tools-$GP32_TOOLS_VER.tar.bz2
|
general-tools-$GENERAL_TOOLS_VER.tar.bz2 dlditool-$DLDITOOL_VER.tar.bz2 mmutil-$MMUTIL_VER.tar.bz2"
|
||||||
dstools-$DSTOOLS_VER.tar.bz2 grit-$GRIT_VER.tar.bz2 ndstool-$NDSTOOL_VER.tar.bz2
|
|
||||||
general-tools-$GENERAL_TOOLS_VER.tar.bz2 dlditool-$DLDITOOL_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 3dslink-$LINK3DS_VER.tar.bz2"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $VERSION -eq 2 ]; then
|
if [ $VERSION -eq 2 ]; then
|
||||||
|
|
||||||
targetarchives="libogc-src-${LIBOGC_VER}.tar.bz2 libfat-src-${LIBFAT_VER}.tar.bz2"
|
targetarchives="libogc-src-${LIBOGC_VER}.tar.bz2 libfat-src-${LIBFAT_VER}.tar.bz2"
|
||||||
|
hostarchives="gxtexconv-$GXTEXCONV_VER.tar.bz2 gcdspsuite-$GCDSPSUITE_VER.tar.bz2
|
||||||
hostarchives="gamecube-tools-$GAMECUBE_TOOLS_VER.tar.bz2 wiiload-$WIILOAD_VER.tar.bz2 general-tools-$GENERAL_TOOLS_VER.tar.bz2"
|
wiiload-$WIILOAD_VER.tar.bz2 elf2dol-$ELF2DOL_VER.tar.bz2 general-tools-$GENERAL_TOOLS_VER.tar.bz2"
|
||||||
|
|
||||||
archives="binutils-${MN_BINUTILS_VER}.tar.bz2 $archives"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $VERSION -eq 3 ]; then
|
if [ $VERSION -eq 3 ]; then
|
||||||
|
targetarchives="pspsdk-src-${PSPSDK_VER}.tar.bz2"
|
||||||
hostarchives="general-tools-$GENERAL_TOOLS_VER.tar.bz2 switch-tools-$SWITCH_TOOLS_VER.tar.bz2"
|
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
if [ ! -z "$BUILD_DKPRO_SRCDIR" ] ; then
|
if [ ! -z "$BUILD_DKPRO_SRCDIR" ] ; then
|
||||||
SRCDIR="$BUILD_DKPRO_SRCDIR"
|
SRCDIR="$BUILD_DKPRO_SRCDIR"
|
||||||
else
|
else
|
||||||
SRCDIR=`pwd`
|
SRCDIR=`pwd`
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cd "$SRCDIR"
|
cd $SRCDIR
|
||||||
for archive in $archives $targetarchives $hostarchives
|
for archive in $archives $targetarchives $hostarchives
|
||||||
do
|
do
|
||||||
echo $archive
|
echo $archive
|
||||||
if [ ! -f $archive ]; then
|
if [ ! -f $archive ]; then
|
||||||
$FETCH https://github.com/devkitPro/buildscripts/releases/download/sources/$archive || { echo "Error: Failed to download $archive"; exit 1; }
|
$FETCH $DEVKITPRO_URL/$archive || { echo "Error: Failed to download $archive"; exit 1; }
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -253,12 +228,9 @@ cd $BUILDDIR
|
|||||||
|
|
||||||
extract_and_patch binutils $BINUTILS_VER bz2
|
extract_and_patch binutils $BINUTILS_VER bz2
|
||||||
extract_and_patch gcc $GCC_VER bz2
|
extract_and_patch gcc $GCC_VER bz2
|
||||||
|
rm -fr gcc-$GCC_VER/zlib
|
||||||
extract_and_patch newlib $NEWLIB_VER gz
|
extract_and_patch newlib $NEWLIB_VER gz
|
||||||
extract_and_patch gdb $GDB_VER xz
|
extract_and_patch gdb $GDB_VER bz2
|
||||||
|
|
||||||
if [ $VERSION -eq 2 ]; then
|
|
||||||
extract_and_patch binutils $MN_BINUTILS_VER bz2
|
|
||||||
fi
|
|
||||||
|
|
||||||
for archive in $targetarchives
|
for archive in $targetarchives
|
||||||
do
|
do
|
||||||
@@ -266,16 +238,13 @@ do
|
|||||||
echo $destdir
|
echo $destdir
|
||||||
if [ ! -d $destdir ]; then
|
if [ ! -d $destdir ]; then
|
||||||
mkdir -p $destdir
|
mkdir -p $destdir
|
||||||
bzip2 -cd "$SRCDIR/$archive" | tar -xf - -C $destdir || { echo "Error extracting "$archive; exit 1; }
|
bzip2 -cd $SRCDIR/$archive | tar -xf - -C $destdir || { echo "Error extracting "$archive; exit 1; }
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
for archive in $hostarchives
|
for archive in $hostarchives
|
||||||
do
|
do
|
||||||
destdir=$(echo $archive | sed -e 's/\(.*\)-src-\(.*\)\.tar\.bz2/\1-\2/' )
|
tar -xjf $SRCDIR/$archive
|
||||||
if [ ! -d $destdir ]; then
|
|
||||||
tar -xjf "$SRCDIR/$archive"
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
@@ -285,8 +254,13 @@ if [ -f $scriptdir/build-gcc.sh ]; then . $scriptdir/build-gcc.sh || { echo "Err
|
|||||||
if [ -f $scriptdir/build-tools.sh ]; then . $scriptdir/build-tools.sh || { echo "Error building tools"; exit 1; }; cd $BUILDSCRIPTDIR; fi
|
if [ -f $scriptdir/build-tools.sh ]; then . $scriptdir/build-tools.sh || { echo "Error building tools"; exit 1; }; cd $BUILDSCRIPTDIR; fi
|
||||||
if [ -f $scriptdir/build-crtls.sh ]; then . $scriptdir/build-crtls.sh || { echo "Error building crtls"; exit 1; }; cd $BUILDSCRIPTDIR; fi
|
if [ -f $scriptdir/build-crtls.sh ]; then . $scriptdir/build-crtls.sh || { echo "Error building crtls"; exit 1; }; cd $BUILDSCRIPTDIR; fi
|
||||||
|
|
||||||
if [ ! -z $CROSSBUILD ]; then
|
if [ "$CROSSBUILD" = "i686-w64-mingw32" ]; then
|
||||||
cp -v $CROSSBINPATH/*.dll $CROSSLIBPATH/*.dll $prefix/bin
|
if [ $VERSION -ne 3 ]; then
|
||||||
|
cp -v /opt/i686-w64-mingw32/mingw/lib/FreeImage.dll $prefix/bin
|
||||||
|
fi
|
||||||
|
cp -v /opt/i686-w64-mingw32/mingw/lib/libstdc++-6.dll \
|
||||||
|
/opt/i686-w64-mingw32/mingw/lib/libgcc_s_sjlj-1.dll \
|
||||||
|
$prefix/bin
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "stripping installed binaries"
|
echo "stripping installed binaries"
|
||||||
|
|||||||
30
config.sh.sample
Executable file → Normal file
30
config.sh.sample
Executable file → Normal file
@@ -9,10 +9,19 @@
|
|||||||
# 0: User selects manually
|
# 0: User selects manually
|
||||||
# 1: devkitARM
|
# 1: devkitARM
|
||||||
# 2: devkitPPC
|
# 2: devkitPPC
|
||||||
# 3: devkitA64
|
# 3: devkitPSP
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
BUILD_DKPRO_PACKAGE=0
|
BUILD_DKPRO_PACKAGE=0
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# Download source packages
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# 0: User selects manually
|
||||||
|
# 1: already downloaded
|
||||||
|
# 2: download packages
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
BUILD_DKPRO_DOWNLOAD=0
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Toolchain installation directory, comment if not specified
|
# Toolchain installation directory, comment if not specified
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
@@ -22,25 +31,12 @@ BUILD_DKPRO_PACKAGE=0
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Path to previously downloaded source packages, comment if not specified
|
# Path to previously downloaded source packages, comment if not specified
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
#BUILD_DKPRO_SRCDIR=~/projects/archives
|
#BUILD_DKPRO_SRCDIR=/d/projects/archives
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# MAKEFLAGS for building - use number of processors for jobs
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
#numcores=`getconf _NPROCESSORS_ONLN`
|
|
||||||
#export MAKEFLAGS="$MAKEFLAGS -j${numcores}"
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# Automated script execution
|
# Automated script execution
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# 0: Ask to delete build folders & patched sources
|
# 0: Ask to delete build folders & patched sources
|
||||||
# 1: Use defaults, don't pause for answers
|
# 1: Use defaults, don't pause for answers
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
BUILD_DKPRO_AUTOMATED=0
|
BUILD_DKPRO_AUTOMATED=0
|
||||||
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# set OSX SDK path if needed
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
#export OSXSDKPATH=/Library/Developer/CommandLineTools/SDKs/MacOSX10.12.sdk
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,3 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
export CROSSBUILD=i686-w64-mingw32
|
export CROSSBUILD=i686-w64-mingw32
|
||||||
export CROSSLIBPATH=/opt/mingw32/mingw/lib
|
export PATH=/opt/i686-w64-mingw32/bin:$PATH
|
||||||
export CROSSBINPATH=/opt/mingw32/mingw/bin
|
|
||||||
export PATH=/opt/mingw32/bin:$PATH
|
|
||||||
export PKG_CONFIG_PATH=
|
|
||||||
export PKG_CONFIG_LIBDIR=$CROSSLIBPATH/pkgconfig
|
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
export CROSSBUILD=x86_64-w64-mingw32
|
|
||||||
export CROSSPATH=/opt/mingw64/mingw
|
|
||||||
export CROSSLIBPATH=$CROSSPATH/lib
|
|
||||||
export CROSSBINPATH=$CROSSPATH/bin
|
|
||||||
export PATH=/opt/mingw64/bin:$PATH
|
|
||||||
export PKG_CONFIG_PATH=
|
|
||||||
export PKG_CONFIG_LIBDIR=$CROSSLIBPATH/pkgconfig
|
|
||||||
|
|
||||||
@@ -1,342 +0,0 @@
|
|||||||
diff -Nbaur binutils-2.29.1-orig/bfd/elfnn-aarch64.c binutils-2.29.1-dka64/bfd/elfnn-aarch64.c
|
|
||||||
--- binutils-2.29.1-orig/bfd/elfnn-aarch64.c 2017-09-05 14:12:46.000000000 +0100
|
|
||||||
+++ binutils-2.29.1-dka64/bfd/elfnn-aarch64.c 2017-10-22 06:58:57.711591457 +0100
|
|
||||||
@@ -2097,6 +2097,12 @@
|
|
||||||
aarch64_stub_erratum_843419_veneer,
|
|
||||||
};
|
|
||||||
|
|
||||||
+/* Is an undefined weak symbol resolved to 0 ? */
|
|
||||||
+#define UNDEFINED_WEAK_RESOLVED_TO_ZERO(INFO, EH) \
|
|
||||||
+ ((EH)->root.root.type == bfd_link_hash_undefweak \
|
|
||||||
+ && bfd_link_executable (INFO) \
|
|
||||||
+ && !(INFO)->dynamic_undefined_weak)
|
|
||||||
+
|
|
||||||
struct elf_aarch64_stub_hash_entry
|
|
||||||
{
|
|
||||||
/* Base hash table entry structure. */
|
|
||||||
@@ -6081,11 +6087,13 @@
|
|
||||||
Elf_Internal_Sym *sym;
|
|
||||||
asection *sec;
|
|
||||||
struct elf_link_hash_entry *h;
|
|
||||||
+ struct elf_aarch64_link_hash_entry *eh;
|
|
||||||
bfd_vma relocation;
|
|
||||||
bfd_reloc_status_type r;
|
|
||||||
arelent bfd_reloc;
|
|
||||||
char sym_type;
|
|
||||||
bfd_boolean unresolved_reloc = FALSE;
|
|
||||||
+ bfd_boolean resolved_to_zero = FALSE;
|
|
||||||
char *error_message = NULL;
|
|
||||||
|
|
||||||
r_symndx = ELFNN_R_SYM (rel->r_info);
|
|
||||||
@@ -6225,6 +6233,10 @@
|
|
||||||
h, &unresolved_reloc,
|
|
||||||
save_addend, &addend, sym);
|
|
||||||
|
|
||||||
+ eh = (struct elf_aarch64_link_hash_entry *) h;
|
|
||||||
+ resolved_to_zero = (eh != NULL
|
|
||||||
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
|
|
||||||
+
|
|
||||||
switch (elfNN_aarch64_bfd_reloc_from_type (r_type))
|
|
||||||
{
|
|
||||||
case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:
|
|
||||||
@@ -6248,7 +6260,7 @@
|
|
||||||
need_relocs =
|
|
||||||
(bfd_link_pic (info) || indx != 0) &&
|
|
||||||
(h == NULL
|
|
||||||
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
|
||||||
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|
|
||||||
|| h->root.type != bfd_link_hash_undefweak);
|
|
||||||
|
|
||||||
BFD_ASSERT (globals->root.srelgot != NULL);
|
|
||||||
@@ -6343,7 +6355,7 @@
|
|
||||||
need_relocs =
|
|
||||||
(bfd_link_pic (info) || indx != 0) &&
|
|
||||||
(h == NULL
|
|
||||||
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
|
||||||
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|
|
||||||
|| h->root.type != bfd_link_hash_undefweak);
|
|
||||||
|
|
||||||
BFD_ASSERT (globals->root.srelgot != NULL);
|
|
||||||
@@ -6392,7 +6404,7 @@
|
|
||||||
bfd_vma off = symbol_tlsdesc_got_offset (input_bfd, h, r_symndx);
|
|
||||||
|
|
||||||
need_relocs = (h == NULL
|
|
||||||
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
|
||||||
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|
|
||||||
|| h->root.type != bfd_link_hash_undefweak);
|
|
||||||
|
|
||||||
BFD_ASSERT (globals->root.srelgot != NULL);
|
|
||||||
@@ -6891,6 +6903,26 @@
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Remove undefined weak symbol from the dynamic symbol table if it
|
|
||||||
+ is resolved to 0. */
|
|
||||||
+
|
|
||||||
+extern bfd_boolean
|
|
||||||
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *, struct elf_link_hash_entry *);
|
|
||||||
+
|
|
||||||
+bfd_boolean
|
|
||||||
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *info,
|
|
||||||
+ struct elf_link_hash_entry *h)
|
|
||||||
+{
|
|
||||||
+ if (h->dynindx != -1
|
|
||||||
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, elf_aarch64_hash_entry (h)))
|
|
||||||
+ {
|
|
||||||
+ h->dynindx = -1;
|
|
||||||
+ _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
|
|
||||||
+ h->dynstr_index);
|
|
||||||
+ }
|
|
||||||
+ return TRUE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* 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
|
|
||||||
@@ -8068,6 +8100,7 @@
|
|
||||||
struct elf_aarch64_link_hash_table *htab;
|
|
||||||
struct elf_aarch64_link_hash_entry *eh;
|
|
||||||
struct elf_dyn_relocs *p;
|
|
||||||
+ bfd_boolean resolved_to_zero;
|
|
||||||
|
|
||||||
/* An example of a bfd_link_hash_indirect symbol is versioned
|
|
||||||
symbol. For example: __gxx_personality_v0(bfd_link_hash_indirect)
|
|
||||||
@@ -8087,6 +8120,10 @@
|
|
||||||
info = (struct bfd_link_info *) inf;
|
|
||||||
htab = elf_aarch64_hash_table (info);
|
|
||||||
|
|
||||||
+ eh = (struct elf_aarch64_link_hash_entry *) h;
|
|
||||||
+ eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
|
|
||||||
+ resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
|
|
||||||
+
|
|
||||||
/* 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
|
|
||||||
@@ -8096,7 +8133,7 @@
|
|
||||||
{
|
|
||||||
/* Make sure this symbol is output as a dynamic symbol.
|
|
||||||
Undefined weak syms won't yet be marked as dynamic. */
|
|
||||||
- if (h->dynindx == -1 && !h->forced_local
|
|
||||||
+ if (h->dynindx == -1 && !h->forced_local && !resolved_to_zero
|
|
||||||
&& h->root.type == bfd_link_hash_undefweak)
|
|
||||||
{
|
|
||||||
if (!bfd_elf_link_record_dynamic_symbol (info, h))
|
|
||||||
@@ -8130,6 +8167,11 @@
|
|
||||||
of relaxing into these from the large model PLT entries. */
|
|
||||||
s->size += PLT_SMALL_ENTRY_SIZE;
|
|
||||||
|
|
||||||
+ /* There should be no PLT relocations against resolved undefined
|
|
||||||
+ weak symbols in the executable. */
|
|
||||||
+ if (!resolved_to_zero)
|
|
||||||
+ {
|
|
||||||
+
|
|
||||||
/* 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;
|
|
||||||
@@ -8152,6 +8194,7 @@
|
|
||||||
|
|
||||||
htab->root.srelplt->reloc_count++;
|
|
||||||
}
|
|
||||||
+ }
|
|
||||||
else
|
|
||||||
{
|
|
||||||
h->plt.offset = (bfd_vma) - 1;
|
|
||||||
@@ -8164,9 +8207,6 @@
|
|
||||||
h->needs_plt = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
- eh = (struct elf_aarch64_link_hash_entry *) h;
|
|
||||||
- eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
|
|
||||||
-
|
|
||||||
if (h->got.refcount > 0)
|
|
||||||
{
|
|
||||||
bfd_boolean dyn;
|
|
||||||
@@ -8178,7 +8218,7 @@
|
|
||||||
|
|
||||||
/* Make sure this symbol is output as a dynamic symbol.
|
|
||||||
Undefined weak syms won't yet be marked as dynamic. */
|
|
||||||
- if (dyn && h->dynindx == -1 && !h->forced_local
|
|
||||||
+ if (dyn && h->dynindx == -1 && !h->forced_local && !resolved_to_zero
|
|
||||||
&& h->root.type == bfd_link_hash_undefweak)
|
|
||||||
{
|
|
||||||
if (!bfd_elf_link_record_dynamic_symbol (info, h))
|
|
||||||
@@ -8192,7 +8232,7 @@
|
|
||||||
{
|
|
||||||
h->got.offset = htab->root.sgot->size;
|
|
||||||
htab->root.sgot->size += GOT_ENTRY_SIZE;
|
|
||||||
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
|
||||||
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|
|
||||||
|| h->root.type != bfd_link_hash_undefweak)
|
|
||||||
&& (bfd_link_pic (info)
|
|
||||||
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
|
|
||||||
@@ -8225,7 +8265,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
indx = h && h->dynindx != -1 ? h->dynindx : 0;
|
|
||||||
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
|
||||||
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|
|
||||||
|| h->root.type != bfd_link_hash_undefweak)
|
|
||||||
&& (bfd_link_pic (info)
|
|
||||||
|| indx != 0
|
|
||||||
@@ -8291,7 +8331,7 @@
|
|
||||||
visibility. */
|
|
||||||
if (eh->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak)
|
|
||||||
{
|
|
||||||
- if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
|
|
||||||
+ if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || resolved_to_zero)
|
|
||||||
eh->dyn_relocs = NULL;
|
|
||||||
|
|
||||||
/* Make sure undefined weak symbols are output as a dynamic
|
|
||||||
@@ -8310,7 +8350,9 @@
|
|
||||||
symbols which turn out to need copy relocs or are not
|
|
||||||
dynamic. */
|
|
||||||
|
|
||||||
- if (!h->non_got_ref
|
|
||||||
+ if (!(h->non_got_ref
|
|
||||||
+ || (h->root.type == bfd_link_hash_undefweak
|
|
||||||
+ && !resolved_to_zero))
|
|
||||||
&& ((h->def_dynamic
|
|
||||||
&& !h->def_regular)
|
|
||||||
|| (htab->root.dynamic_sections_created
|
|
||||||
@@ -8321,6 +8363,7 @@
|
|
||||||
Undefined weak syms won't yet be marked as dynamic. */
|
|
||||||
if (h->dynindx == -1
|
|
||||||
&& !h->forced_local
|
|
||||||
+ && !resolved_to_zero
|
|
||||||
&& h->root.type == bfd_link_hash_undefweak
|
|
||||||
&& !bfd_elf_link_record_dynamic_symbol (info, h))
|
|
||||||
return FALSE;
|
|
||||||
@@ -8940,8 +8983,17 @@
|
|
||||||
Elf_Internal_Sym *sym)
|
|
||||||
{
|
|
||||||
struct elf_aarch64_link_hash_table *htab;
|
|
||||||
+ struct elf_aarch64_link_hash_entry *eh;
|
|
||||||
+ bfd_boolean local_undefweak;
|
|
||||||
htab = elf_aarch64_hash_table (info);
|
|
||||||
|
|
||||||
+ eh = (struct elf_aarch64_link_hash_entry *) h;
|
|
||||||
+
|
|
||||||
+ /* We keep PLT/GOT entries without dynamic PLT/GOT relocations for
|
|
||||||
+ resolved undefined weak symbols in executable so that their
|
|
||||||
+ references have value 0 at run-time. */
|
|
||||||
+ local_undefweak = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
|
|
||||||
+
|
|
||||||
if (h->plt.offset != (bfd_vma) - 1)
|
|
||||||
{
|
|
||||||
asection *plt, *gotplt, *relplt;
|
|
||||||
@@ -8976,7 +9028,7 @@
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
elfNN_aarch64_create_small_pltn_entry (h, htab, output_bfd, info);
|
|
||||||
- if (!h->def_regular)
|
|
||||||
+ if (!local_undefweak && !h->def_regular)
|
|
||||||
{
|
|
||||||
/* Mark the symbol as undefined, rather than as defined in
|
|
||||||
the .plt section. */
|
|
||||||
@@ -8995,7 +9047,8 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
if (h->got.offset != (bfd_vma) - 1
|
|
||||||
- && elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL)
|
|
||||||
+ && elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL
|
|
||||||
+ && !local_undefweak)
|
|
||||||
{
|
|
||||||
Elf_Internal_Rela rela;
|
|
||||||
bfd_byte *loc;
|
|
||||||
@@ -9489,6 +9542,9 @@
|
|
||||||
#define elf_backend_init_index_section \
|
|
||||||
_bfd_elf_init_2_index_sections
|
|
||||||
|
|
||||||
+#define elf_backend_fixup_symbol \
|
|
||||||
+ elfNN_aarch64_elf_fixup_symbol
|
|
||||||
+
|
|
||||||
#define elf_backend_finish_dynamic_sections \
|
|
||||||
elfNN_aarch64_finish_dynamic_sections
|
|
||||||
|
|
||||||
diff -Nbaur binutils-2.29.1-orig/ld/emulparams/aarch64elf32.sh binutils-2.29.1-dka64/ld/emulparams/aarch64elf32.sh
|
|
||||||
--- binutils-2.29.1-orig/ld/emulparams/aarch64elf32.sh 2017-07-10 10:54:42.000000000 +0100
|
|
||||||
+++ binutils-2.29.1-dka64/ld/emulparams/aarch64elf32.sh 2017-10-22 06:58:57.719591510 +0100
|
|
||||||
@@ -1,3 +1,5 @@
|
|
||||||
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh
|
|
||||||
+
|
|
||||||
ARCH="aarch64:ilp32"
|
|
||||||
MACHINE=
|
|
||||||
NOP=0
|
|
||||||
diff -Nbaur binutils-2.29.1-orig/ld/emulparams/aarch64elf.sh binutils-2.29.1-dka64/ld/emulparams/aarch64elf.sh
|
|
||||||
--- binutils-2.29.1-orig/ld/emulparams/aarch64elf.sh 2017-07-10 10:54:42.000000000 +0100
|
|
||||||
+++ binutils-2.29.1-dka64/ld/emulparams/aarch64elf.sh 2017-10-22 06:58:57.719591510 +0100
|
|
||||||
@@ -1,3 +1,5 @@
|
|
||||||
+. ${srcdir}/emulparams/dynamic_undefined_weak.sh
|
|
||||||
+
|
|
||||||
ARCH=aarch64
|
|
||||||
MACHINE=
|
|
||||||
NOP=0
|
|
||||||
diff -Nbaur binutils-2.29.1-orig/ld/emultempl/aarch64elf.em binutils-2.29.1-dka64/ld/emultempl/aarch64elf.em
|
|
||||||
--- binutils-2.29.1-orig/ld/emultempl/aarch64elf.em 2017-07-10 10:54:42.000000000 +0100
|
|
||||||
+++ binutils-2.29.1-dka64/ld/emultempl/aarch64elf.em 2017-10-22 06:58:57.719591510 +0100
|
|
||||||
@@ -375,7 +375,7 @@
|
|
||||||
{ "no-apply-dynamic-relocs", no_argument, NULL, OPTION_NO_APPLY_DYNAMIC_RELOCS},
|
|
||||||
'
|
|
||||||
|
|
||||||
-PARSE_AND_LIST_OPTIONS='
|
|
||||||
+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.29.1-orig/ld/Makefile.am binutils-2.29.1-dka64/ld/Makefile.am
|
|
||||||
--- binutils-2.29.1-orig/ld/Makefile.am 2017-07-10 10:54:42.000000000 +0100
|
|
||||||
+++ binutils-2.29.1-dka64/ld/Makefile.am 2017-10-22 06:58:57.719591510 +0100
|
|
||||||
@@ -1654,19 +1654,23 @@
|
|
||||||
$(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64elf.c: $(srcdir)/emulparams/aarch64elf.sh \
|
|
||||||
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
|
||||||
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
|
||||||
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
|
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64elf32.c: $(srcdir)/emulparams/aarch64elf32.sh \
|
|
||||||
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
|
||||||
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
|
||||||
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
|
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64elfb.c: $(srcdir)/emulparams/aarch64elfb.sh $(srcdir)/emulparams/aarch64elf.sh \
|
|
||||||
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
|
||||||
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
|
||||||
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
|
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aarch64elf32.sh \
|
|
||||||
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
|
||||||
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
|
||||||
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
|
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \
|
|
||||||
diff -Nbaur binutils-2.29.1-orig/ld/Makefile.in binutils-2.29.1-dka64/ld/Makefile.in
|
|
||||||
--- binutils-2.29.1-orig/ld/Makefile.in 2017-09-15 12:38:08.000000000 +0100
|
|
||||||
+++ binutils-2.29.1-dka64/ld/Makefile.in 2017-10-22 06:58:57.719591510 +0100
|
|
||||||
@@ -3219,18 +3219,22 @@
|
|
||||||
|
|
||||||
eaarch64elf.c: $(srcdir)/emulparams/aarch64elf.sh \
|
|
||||||
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
|
||||||
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64elf32.c: $(srcdir)/emulparams/aarch64elf32.sh \
|
|
||||||
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
|
||||||
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64elfb.c: $(srcdir)/emulparams/aarch64elfb.sh $(srcdir)/emulparams/aarch64elf.sh \
|
|
||||||
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
|
||||||
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aarch64elf32.sh \
|
|
||||||
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
|
||||||
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \
|
|
||||||
@@ -1,346 +0,0 @@
|
|||||||
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 @@
|
|
||||||
aarch64_stub_erratum_843419_veneer,
|
|
||||||
};
|
|
||||||
|
|
||||||
+/* Is an undefined weak symbol resolved to 0 ? */
|
|
||||||
+#define UNDEFINED_WEAK_RESOLVED_TO_ZERO(INFO, EH) \
|
|
||||||
+ ((EH)->root.root.type == bfd_link_hash_undefweak \
|
|
||||||
+ && bfd_link_executable (INFO) \
|
|
||||||
+ && !(INFO)->dynamic_undefined_weak)
|
|
||||||
+
|
|
||||||
struct elf_aarch64_stub_hash_entry
|
|
||||||
{
|
|
||||||
/* Base hash table entry structure. */
|
|
||||||
@@ -6088,11 +6094,13 @@
|
|
||||||
Elf_Internal_Sym *sym;
|
|
||||||
asection *sec;
|
|
||||||
struct elf_link_hash_entry *h;
|
|
||||||
+ struct elf_aarch64_link_hash_entry *eh;
|
|
||||||
bfd_vma relocation;
|
|
||||||
bfd_reloc_status_type r;
|
|
||||||
arelent bfd_reloc;
|
|
||||||
char sym_type;
|
|
||||||
bfd_boolean unresolved_reloc = FALSE;
|
|
||||||
+ bfd_boolean resolved_to_zero = FALSE;
|
|
||||||
char *error_message = NULL;
|
|
||||||
|
|
||||||
r_symndx = ELFNN_R_SYM (rel->r_info);
|
|
||||||
@@ -6226,6 +6234,10 @@
|
|
||||||
h, &unresolved_reloc,
|
|
||||||
save_addend, &addend, sym);
|
|
||||||
|
|
||||||
+ eh = (struct elf_aarch64_link_hash_entry *) h;
|
|
||||||
+ resolved_to_zero = (eh != NULL
|
|
||||||
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh));
|
|
||||||
+
|
|
||||||
switch (elfNN_aarch64_bfd_reloc_from_type (r_type))
|
|
||||||
{
|
|
||||||
case BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC:
|
|
||||||
@@ -6249,7 +6261,7 @@
|
|
||||||
need_relocs =
|
|
||||||
(!bfd_link_executable (info) || indx != 0) &&
|
|
||||||
(h == NULL
|
|
||||||
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
|
||||||
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|
|
||||||
|| h->root.type != bfd_link_hash_undefweak);
|
|
||||||
|
|
||||||
BFD_ASSERT (globals->root.srelgot != NULL);
|
|
||||||
@@ -6344,7 +6356,7 @@
|
|
||||||
need_relocs =
|
|
||||||
(!bfd_link_executable (info) || indx != 0) &&
|
|
||||||
(h == NULL
|
|
||||||
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
|
||||||
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|
|
||||||
|| h->root.type != bfd_link_hash_undefweak);
|
|
||||||
|
|
||||||
BFD_ASSERT (globals->root.srelgot != NULL);
|
|
||||||
@@ -6393,7 +6405,7 @@
|
|
||||||
bfd_vma off = symbol_tlsdesc_got_offset (input_bfd, h, r_symndx);
|
|
||||||
|
|
||||||
need_relocs = (h == NULL
|
|
||||||
- || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
|
||||||
+ || (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|
|
||||||
|| h->root.type != bfd_link_hash_undefweak);
|
|
||||||
|
|
||||||
BFD_ASSERT (globals->root.srelgot != NULL);
|
|
||||||
@@ -6735,6 +6747,26 @@
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Remove undefined weak symbol from the dynamic symbol table if it
|
|
||||||
+ is resolved to 0. */
|
|
||||||
+
|
|
||||||
+extern bfd_boolean
|
|
||||||
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *, struct elf_link_hash_entry *);
|
|
||||||
+
|
|
||||||
+bfd_boolean
|
|
||||||
+elfNN_aarch64_elf_fixup_symbol (struct bfd_link_info *info,
|
|
||||||
+ struct elf_link_hash_entry *h)
|
|
||||||
+{
|
|
||||||
+ if (h->dynindx != -1
|
|
||||||
+ && UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, elf_aarch64_hash_entry (h)))
|
|
||||||
+ {
|
|
||||||
+ h->dynindx = -1;
|
|
||||||
+ _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
|
|
||||||
+ h->dynstr_index);
|
|
||||||
+ }
|
|
||||||
+ return TRUE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* 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 @@
|
|
||||||
struct elf_aarch64_link_hash_table *htab;
|
|
||||||
struct elf_aarch64_link_hash_entry *eh;
|
|
||||||
struct elf_dyn_relocs *p;
|
|
||||||
+ bfd_boolean resolved_to_zero;
|
|
||||||
|
|
||||||
/* 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 @@
|
|
||||||
info = (struct bfd_link_info *) inf;
|
|
||||||
htab = elf_aarch64_hash_table (info);
|
|
||||||
|
|
||||||
+ eh = (struct elf_aarch64_link_hash_entry *) h;
|
|
||||||
+ eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
|
|
||||||
+ resolved_to_zero = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
|
|
||||||
+
|
|
||||||
/* 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 @@
|
|
||||||
{
|
|
||||||
/* Make sure this symbol is output as a dynamic symbol.
|
|
||||||
Undefined weak syms won't yet be marked as dynamic. */
|
|
||||||
- if (h->dynindx == -1 && !h->forced_local
|
|
||||||
+ if (h->dynindx == -1 && !h->forced_local && !resolved_to_zero
|
|
||||||
&& h->root.type == bfd_link_hash_undefweak)
|
|
||||||
{
|
|
||||||
if (!bfd_elf_link_record_dynamic_symbol (info, h))
|
|
||||||
@@ -7990,6 +8027,11 @@
|
|
||||||
of relaxing into these from the large model PLT entries. */
|
|
||||||
s->size += PLT_SMALL_ENTRY_SIZE;
|
|
||||||
|
|
||||||
+ /* There should be no PLT relocations against resolved undefined
|
|
||||||
+ weak symbols in the executable. */
|
|
||||||
+ if (!resolved_to_zero)
|
|
||||||
+ {
|
|
||||||
+
|
|
||||||
/* 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 @@
|
|
||||||
|
|
||||||
htab->root.srelplt->reloc_count++;
|
|
||||||
}
|
|
||||||
+ }
|
|
||||||
else
|
|
||||||
{
|
|
||||||
h->plt.offset = (bfd_vma) - 1;
|
|
||||||
@@ -8024,9 +8067,6 @@
|
|
||||||
h->needs_plt = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
- eh = (struct elf_aarch64_link_hash_entry *) h;
|
|
||||||
- eh->tlsdesc_got_jump_table_offset = (bfd_vma) - 1;
|
|
||||||
-
|
|
||||||
if (h->got.refcount > 0)
|
|
||||||
{
|
|
||||||
bfd_boolean dyn;
|
|
||||||
@@ -8038,7 +8078,7 @@
|
|
||||||
|
|
||||||
/* Make sure this symbol is output as a dynamic symbol.
|
|
||||||
Undefined weak syms won't yet be marked as dynamic. */
|
|
||||||
- if (dyn && h->dynindx == -1 && !h->forced_local
|
|
||||||
+ if (dyn && h->dynindx == -1 && !h->forced_local && !resolved_to_zero
|
|
||||||
&& h->root.type == bfd_link_hash_undefweak)
|
|
||||||
{
|
|
||||||
if (!bfd_elf_link_record_dynamic_symbol (info, h))
|
|
||||||
@@ -8052,7 +8092,7 @@
|
|
||||||
{
|
|
||||||
h->got.offset = htab->root.sgot->size;
|
|
||||||
htab->root.sgot->size += GOT_ENTRY_SIZE;
|
|
||||||
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
|
||||||
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|
|
||||||
|| h->root.type != bfd_link_hash_undefweak)
|
|
||||||
&& (bfd_link_pic (info)
|
|
||||||
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
|
|
||||||
@@ -8088,7 +8128,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
indx = h && h->dynindx != -1 ? h->dynindx : 0;
|
|
||||||
- if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
|
||||||
+ if (((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT && !resolved_to_zero)
|
|
||||||
|| h->root.type != bfd_link_hash_undefweak)
|
|
||||||
&& (!bfd_link_executable (info)
|
|
||||||
|| indx != 0
|
|
||||||
@@ -8154,7 +8194,7 @@
|
|
||||||
visibility. */
|
|
||||||
if (eh->dyn_relocs != NULL && h->root.type == bfd_link_hash_undefweak)
|
|
||||||
{
|
|
||||||
- if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
|
|
||||||
+ if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT || resolved_to_zero
|
|
||||||
|| UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
|
|
||||||
eh->dyn_relocs = NULL;
|
|
||||||
|
|
||||||
@@ -8174,7 +8214,9 @@
|
|
||||||
symbols which turn out to need copy relocs or are not
|
|
||||||
dynamic. */
|
|
||||||
|
|
||||||
- if (!h->non_got_ref
|
|
||||||
+ if (!(h->non_got_ref
|
|
||||||
+ || (h->root.type == bfd_link_hash_undefweak
|
|
||||||
+ && !resolved_to_zero))
|
|
||||||
&& ((h->def_dynamic
|
|
||||||
&& !h->def_regular)
|
|
||||||
|| (htab->root.dynamic_sections_created
|
|
||||||
@@ -8185,6 +8227,7 @@
|
|
||||||
Undefined weak syms won't yet be marked as dynamic. */
|
|
||||||
if (h->dynindx == -1
|
|
||||||
&& !h->forced_local
|
|
||||||
+ && !resolved_to_zero
|
|
||||||
&& h->root.type == bfd_link_hash_undefweak
|
|
||||||
&& !bfd_elf_link_record_dynamic_symbol (info, h))
|
|
||||||
return FALSE;
|
|
||||||
@@ -8805,8 +8848,17 @@
|
|
||||||
Elf_Internal_Sym *sym)
|
|
||||||
{
|
|
||||||
struct elf_aarch64_link_hash_table *htab;
|
|
||||||
+ struct elf_aarch64_link_hash_entry *eh;
|
|
||||||
+ bfd_boolean local_undefweak;
|
|
||||||
htab = elf_aarch64_hash_table (info);
|
|
||||||
|
|
||||||
+ eh = (struct elf_aarch64_link_hash_entry *) h;
|
|
||||||
+
|
|
||||||
+ /* We keep PLT/GOT entries without dynamic PLT/GOT relocations for
|
|
||||||
+ resolved undefined weak symbols in executable so that their
|
|
||||||
+ references have value 0 at run-time. */
|
|
||||||
+ local_undefweak = UNDEFINED_WEAK_RESOLVED_TO_ZERO (info, eh);
|
|
||||||
+
|
|
||||||
if (h->plt.offset != (bfd_vma) - 1)
|
|
||||||
{
|
|
||||||
asection *plt, *gotplt, *relplt;
|
|
||||||
@@ -8841,7 +8893,7 @@
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
elfNN_aarch64_create_small_pltn_entry (h, htab, output_bfd, info);
|
|
||||||
- if (!h->def_regular)
|
|
||||||
+ if (!local_undefweak && !h->def_regular)
|
|
||||||
{
|
|
||||||
/* Mark the symbol as undefined, rather than as defined in
|
|
||||||
the .plt section. */
|
|
||||||
@@ -8860,10 +8912,11 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
if (h->got.offset != (bfd_vma) - 1
|
|
||||||
- && elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL
|
|
||||||
+ && elf_aarch64_hash_entry (h)->got_type == GOT_NORMAL
|
|
||||||
/* Undefined weak symbol in static PIE resolves to 0 without
|
|
||||||
any dynamic relocations. */
|
|
||||||
- && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
|
|
||||||
+ && !UNDEFWEAK_NO_DYNAMIC_RELOC (info, h)
|
|
||||||
+ && !local_undefweak)
|
|
||||||
{
|
|
||||||
Elf_Internal_Rela rela;
|
|
||||||
bfd_byte *loc;
|
|
||||||
@@ -9357,6 +9410,9 @@
|
|
||||||
#define elf_backend_init_index_section \
|
|
||||||
_bfd_elf_init_2_index_sections
|
|
||||||
|
|
||||||
+#define elf_backend_fixup_symbol \
|
|
||||||
+ elfNN_aarch64_elf_fixup_symbol
|
|
||||||
+
|
|
||||||
#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
|
|
||||||
@@ -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
|
|
||||||
@@ -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 @@
|
|
||||||
{ "no-apply-dynamic-relocs", no_argument, NULL, OPTION_NO_APPLY_DYNAMIC_RELOCS},
|
|
||||||
'
|
|
||||||
|
|
||||||
-PARSE_AND_LIST_OPTIONS='
|
|
||||||
+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 @@
|
|
||||||
$(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64elf.c: $(srcdir)/emulparams/aarch64elf.sh \
|
|
||||||
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
|
||||||
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
|
||||||
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
|
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64elf32.c: $(srcdir)/emulparams/aarch64elf32.sh \
|
|
||||||
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
|
||||||
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
|
||||||
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
|
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64elfb.c: $(srcdir)/emulparams/aarch64elfb.sh $(srcdir)/emulparams/aarch64elf.sh \
|
|
||||||
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
|
||||||
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
|
||||||
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
|
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aarch64elf32.sh \
|
|
||||||
- $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
|
||||||
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
|
||||||
+ $(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em ldemul-list.h \
|
|
||||||
$(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 @@
|
|
||||||
|
|
||||||
eaarch64elf.c: $(srcdir)/emulparams/aarch64elf.sh \
|
|
||||||
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
|
||||||
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64elf32.c: $(srcdir)/emulparams/aarch64elf32.sh \
|
|
||||||
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
|
||||||
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64elfb.c: $(srcdir)/emulparams/aarch64elfb.sh $(srcdir)/emulparams/aarch64elf.sh \
|
|
||||||
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
|
||||||
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64elf32b.c: $(srcdir)/emulparams/aarch64elf32b.sh $(srcdir)/emulparams/aarch64elf32.sh \
|
|
||||||
$(ELF_DEPS) $(srcdir)/emultempl/aarch64elf.em \
|
|
||||||
+ $(srcdir)/emulparams/dynamic_undefined_weak.sh \
|
|
||||||
$(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
|
|
||||||
|
|
||||||
eaarch64cloudabi.c: $(srcdir)/emulparams/aarch64cloudabi.sh \
|
|
||||||
@@ -1,190 +0,0 @@
|
|||||||
diff -NBaur gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64.c gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64.c
|
|
||||||
--- gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64.c 2017-11-03 15:01:10.970890000 +0000
|
|
||||||
+++ gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64.c 2018-01-22 20:15:07.232099998 +0000
|
|
||||||
@@ -10009,8 +10009,24 @@
|
|
||||||
|| !register_operand (target, Pmode))
|
|
||||||
target = gen_reg_rtx (Pmode);
|
|
||||||
|
|
||||||
- /* Can return in any reg. */
|
|
||||||
- emit_insn (gen_aarch64_load_tp_hard (target));
|
|
||||||
+ if (TARGET_HARD_TP)
|
|
||||||
+ {
|
|
||||||
+ /* Can return in any reg. */
|
|
||||||
+ emit_insn (gen_aarch64_load_tp_hard (target));
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ /* Always returned in r0. Immediately copy the result into a pseudo,
|
|
||||||
+ otherwise other uses of r0 (e.g. setting up function arguments) may
|
|
||||||
+ clobber the value. */
|
|
||||||
+
|
|
||||||
+ rtx tmp;
|
|
||||||
+
|
|
||||||
+ emit_insn (gen_aarch64_load_tp_soft ());
|
|
||||||
+
|
|
||||||
+ tmp = gen_rtx_REG (DImode, R0_REGNUM);
|
|
||||||
+ emit_move_insn (target, tmp);
|
|
||||||
+ }
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff -NBaur gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64-elf-raw.h gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64-elf-raw.h
|
|
||||||
--- gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64-elf-raw.h 2017-01-01 12:07:43.905435000 +0000
|
|
||||||
+++ gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64-elf-raw.h 2018-01-22 20:15:07.232099998 +0000
|
|
||||||
@@ -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-7.3.0-RC-20180122/gcc/config/aarch64/aarch64.h gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64.h
|
|
||||||
--- gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64.h 2017-09-21 13:16:31.171118000 +0100
|
|
||||||
+++ gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64.h 2018-01-22 20:15:07.232099998 +0000
|
|
||||||
@@ -887,6 +887,10 @@
|
|
||||||
/* Check TLS Descriptors mechanism is selected. */
|
|
||||||
#define TARGET_TLS_DESC (aarch64_tls_dialect == TLS_DESCRIPTORS)
|
|
||||||
|
|
||||||
+/* Check selected thread pointer access sequence to use. */
|
|
||||||
+#define TARGET_HARD_TP (target_thread_pointer == TP_HARD)
|
|
||||||
+#define TARGET_SOFT_TP (target_thread_pointer == TP_SOFT)
|
|
||||||
+
|
|
||||||
extern enum aarch64_code_model aarch64_cmodel;
|
|
||||||
|
|
||||||
/* When using the tiny addressing model conditional and unconditional branches
|
|
||||||
diff -NBaur gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64.md gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64.md
|
|
||||||
--- gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64.md 2017-04-05 12:48:02.927619000 +0100
|
|
||||||
+++ gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64.md 2018-01-22 20:15:07.236099934 +0000
|
|
||||||
@@ -5230,11 +5230,22 @@
|
|
||||||
(define_insn "aarch64_load_tp_hard"
|
|
||||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
|
||||||
(unspec:DI [(const_int 0)] UNSPEC_TLS))]
|
|
||||||
- ""
|
|
||||||
- "mrs\\t%0, tpidr_el0"
|
|
||||||
+ "TARGET_HARD_TP"
|
|
||||||
+ "mrs\\t%0, tpidr_el0\\t// aarch64_load_tp_hard"
|
|
||||||
[(set_attr "type" "mrs")]
|
|
||||||
)
|
|
||||||
|
|
||||||
+(define_insn "aarch64_load_tp_soft"
|
|
||||||
+ [(set (reg:DI 0) (unspec:DI [(const_int 0)] UNSPEC_TLS))
|
|
||||||
+ (clobber (reg:DI IP0_REGNUM))
|
|
||||||
+ (clobber (reg:DI IP1_REGNUM))
|
|
||||||
+ (clobber (reg:DI LR_REGNUM))
|
|
||||||
+ (clobber (reg:CC CC_REGNUM))]
|
|
||||||
+ "TARGET_SOFT_TP"
|
|
||||||
+ "bl\\t__aarch64_read_tp\\t// aarch64_load_tp_soft"
|
|
||||||
+ [(set_attr "type" "branch")]
|
|
||||||
+)
|
|
||||||
+
|
|
||||||
;; 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-7.3.0-RC-20180122/gcc/config/aarch64/aarch64.opt gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64.opt
|
|
||||||
--- gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64.opt 2017-03-17 17:05:23.131899000 +0000
|
|
||||||
+++ gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64.opt 2018-01-22 20:15:07.236099934 +0000
|
|
||||||
@@ -115,6 +115,20 @@
|
|
||||||
EnumValue
|
|
||||||
Enum(aarch64_tls_size) String(48) Value(48)
|
|
||||||
|
|
||||||
+mtp=
|
|
||||||
+Target RejectNegative Joined Enum(aarch64_tp_type) Var(target_thread_pointer) Init(TP_HARD)
|
|
||||||
+Specify how to access the thread pointer.
|
|
||||||
+
|
|
||||||
+Enum
|
|
||||||
+Name(aarch64_tp_type) Type(enum aarch64_tp_type)
|
|
||||||
+Valid arguments to -mtp=:
|
|
||||||
+
|
|
||||||
+EnumValue
|
|
||||||
+Enum(aarch64_tp_type) String(hard) Value(TP_HARD)
|
|
||||||
+
|
|
||||||
+EnumValue
|
|
||||||
+Enum(aarch64_tp_type) String(soft) Value(TP_SOFT)
|
|
||||||
+
|
|
||||||
march=
|
|
||||||
Target RejectNegative ToLower Joined Var(aarch64_arch_string)
|
|
||||||
-march=ARCH Use features of architecture ARCH.
|
|
||||||
diff -NBaur gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64-opts.h gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64-opts.h
|
|
||||||
--- gcc-7.3.0-RC-20180122/gcc/config/aarch64/aarch64-opts.h 2017-01-20 00:03:20.347898000 +0000
|
|
||||||
+++ gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/aarch64-opts.h 2018-01-22 20:15:07.232099998 +0000
|
|
||||||
@@ -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-7.3.0-RC-20180122/gcc/config/aarch64/t-aarch64 gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/t-aarch64
|
|
||||||
--- gcc-7.3.0-RC-20180122/gcc/config/aarch64/t-aarch64 2017-01-01 12:07:43.905435000 +0000
|
|
||||||
+++ gcc-7.3.0-RC-20180122-aarch64/gcc/config/aarch64/t-aarch64 2018-01-22 20:15:07.236099934 +0000
|
|
||||||
@@ -68,5 +68,7 @@
|
|
||||||
$(srcdir)/config/aarch64/cortex-a57-fma-steering.c
|
|
||||||
|
|
||||||
comma=,
|
|
||||||
-MULTILIB_OPTIONS = $(subst $(comma),/, $(patsubst %, mabi=%, $(subst $(comma),$(comma)mabi=,$(TM_MULTILIB_CONFIG))))
|
|
||||||
-MULTILIB_DIRNAMES = $(subst $(comma), ,$(TM_MULTILIB_CONFIG))
|
|
||||||
+MULTILIB_OPTIONS = mcmodel=large fPIC
|
|
||||||
+MULTILIB_DIRNAMES = large pic
|
|
||||||
+MULTILIB_REQUIRED = mcmodel=large fPIC
|
|
||||||
+MULTILIB_MATCHES = fPIC=fpic fPIC=fpie fPIC=fPIE
|
|
||||||
diff -NBaur gcc-7.3.0-RC-20180122/gcc/gcc.c gcc-7.3.0-RC-20180122-aarch64/gcc/gcc.c
|
|
||||||
--- gcc-7.3.0-RC-20180122/gcc/gcc.c 2017-09-15 09:18:34.015147000 +0100
|
|
||||||
+++ gcc-7.3.0-RC-20180122-aarch64/gcc/gcc.c 2018-01-22 20:15:07.236099934 +0000
|
|
||||||
@@ -779,6 +779,11 @@
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#ifndef LIBGLOSS_SPEC
|
|
||||||
+# define LIBGLOSS_SPEC "-lsysbase"
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+
|
|
||||||
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
|
|
||||||
#ifndef STARTFILE_SPEC
|
|
||||||
#define STARTFILE_SPEC \
|
|
||||||
@@ -1074,6 +1079,7 @@
|
|
||||||
static const char *lib_spec = LIB_SPEC;
|
|
||||||
static const char *link_gomp_spec = "";
|
|
||||||
static const char *libgcc_spec = LIBGCC_SPEC;
|
|
||||||
+static const char *libgloss_spec = LIBGLOSS_SPEC;
|
|
||||||
static const char *endfile_spec = ENDFILE_SPEC;
|
|
||||||
static const char *startfile_spec = STARTFILE_SPEC;
|
|
||||||
static const char *linker_name_spec = LINKER_NAME;
|
|
||||||
@@ -1579,6 +1585,7 @@
|
|
||||||
INIT_STATIC_SPEC ("lib", &lib_spec),
|
|
||||||
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
|
|
||||||
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
|
|
||||||
+ INIT_STATIC_SPEC ("libgloss", &libgloss_spec),
|
|
||||||
INIT_STATIC_SPEC ("startfile", &startfile_spec),
|
|
||||||
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
|
|
||||||
INIT_STATIC_SPEC ("version", &compiler_version),
|
|
||||||
diff -NBaur gcc-7.3.0-RC-20180122/libgcc/crtstuff.c gcc-7.3.0-RC-20180122-aarch64/libgcc/crtstuff.c
|
|
||||||
--- gcc-7.3.0-RC-20180122/libgcc/crtstuff.c 2017-01-01 12:07:43.905435000 +0000
|
|
||||||
+++ gcc-7.3.0-RC-20180122-aarch64/libgcc/crtstuff.c 2018-01-22 20:15:07.236099934 +0000
|
|
||||||
@@ -47,6 +47,7 @@
|
|
||||||
|
|
||||||
/* Target machine header files require this define. */
|
|
||||||
#define IN_LIBGCC2
|
|
||||||
+#define USED_FOR_TARGET
|
|
||||||
|
|
||||||
/* 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-7.3.0-RC-20180122/libgcc/Makefile.in gcc-7.3.0-RC-20180122-aarch64/libgcc/Makefile.in
|
|
||||||
--- gcc-7.3.0-RC-20180122/libgcc/Makefile.in 2017-04-19 09:08:44.446150000 +0100
|
|
||||||
+++ gcc-7.3.0-RC-20180122-aarch64/libgcc/Makefile.in 2018-01-22 20:15:07.236099934 +0000
|
|
||||||
@@ -844,7 +844,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)
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,40 +0,0 @@
|
|||||||
include $(DEVKITPRO)/devkitA64/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: %.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
|
|
||||||
|
|
||||||
@@ -1,41 +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)/devkitA64/bin:$(PATH)
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# add portlibs path
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
export PORTLIBS_PATH := $(DEVKITPATH)/portlibs
|
|
||||||
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# the prefix on the compiler executables
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
PREFIX := aarch64-none-elf-
|
|
||||||
|
|
||||||
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
|
|
||||||
@@ -1,179 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install binutils
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
mkdir -p $target/binutils
|
|
||||||
cd $target/binutils
|
|
||||||
|
|
||||||
if [ ! -f configured-binutils ]
|
|
||||||
then
|
|
||||||
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \
|
|
||||||
--prefix=$prefix --target=$target --disable-nls --disable-werror \
|
|
||||||
--enable-lto --enable-plugins --enable-poison-system-directories \
|
|
||||||
$CROSS_PARAMS \
|
|
||||||
|| { echo "Error configuring binutils"; exit 1; }
|
|
||||||
touch configured-binutils
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f built-binutils ]
|
|
||||||
then
|
|
||||||
$MAKE || { echo "Error building binutils"; exit 1; }
|
|
||||||
touch built-binutils
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f installed-binutils ]
|
|
||||||
then
|
|
||||||
$MAKE install || { echo "Error installing binutils"; exit 1; }
|
|
||||||
touch installed-binutils
|
|
||||||
fi
|
|
||||||
cd $BUILDDIR
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install just the c compiler
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
mkdir -p $target/gcc
|
|
||||||
cd $target/gcc
|
|
||||||
|
|
||||||
if [ ! -f configured-gcc ]
|
|
||||||
then
|
|
||||||
CFLAGS="$cflags" \
|
|
||||||
CXXFLAGS="$cflags" \
|
|
||||||
LDFLAGS="$ldflags" \
|
|
||||||
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
|
||||||
CXXFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
|
||||||
LDFLAGS_FOR_TARGET="" \
|
|
||||||
../../gcc-$GCC_VER/configure \
|
|
||||||
--enable-languages=c,c++ \
|
|
||||||
--with-gnu-as --with-gnu-ld --with-gcc \
|
|
||||||
--with-march=armv8\
|
|
||||||
--enable-cxx-flags='-ffunction-sections' \
|
|
||||||
--disable-libstdcxx-verbose \
|
|
||||||
--enable-poison-system-directories \
|
|
||||||
--enable-interwork --enable-multilib \
|
|
||||||
--enable-threads --disable-win32-registry --disable-nls --disable-debug\
|
|
||||||
--disable-libmudflap --disable-libssp --disable-libgomp \
|
|
||||||
--disable-libstdcxx-pch \
|
|
||||||
--enable-libstdcxx-time \
|
|
||||||
--target=$target \
|
|
||||||
--with-newlib \
|
|
||||||
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
|
|
||||||
--prefix=$prefix \
|
|
||||||
--enable-lto $plugin_ld\
|
|
||||||
--with-system-zlib \
|
|
||||||
--with-bugurl="https://github.com/devkitPro/buildscripts/issues" --with-pkgversion="devkitA64 release 8" \
|
|
||||||
$CROSS_PARAMS \
|
|
||||||
|| { echo "Error configuring gcc"; exit 1; }
|
|
||||||
touch configured-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f built-gcc ]
|
|
||||||
then
|
|
||||||
$MAKE all-gcc || { echo "Error building gcc stage1"; exit 1; }
|
|
||||||
touch built-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f installed-gcc ]
|
|
||||||
then
|
|
||||||
$MAKE install-gcc || { echo "Error installing gcc"; exit 1; }
|
|
||||||
touch installed-gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
unset CFLAGS
|
|
||||||
cd $BUILDDIR
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install newlib
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
mkdir -p $target/newlib
|
|
||||||
cd $target/newlib
|
|
||||||
|
|
||||||
if [ ! -f configured-newlib ]
|
|
||||||
then
|
|
||||||
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
|
||||||
../../newlib-$NEWLIB_VER/configure \
|
|
||||||
--disable-newlib-supplied-syscalls \
|
|
||||||
--enable-newlib-mb \
|
|
||||||
--disable-newlib-wide-orient \
|
|
||||||
--target=$target \
|
|
||||||
--prefix=$prefix \
|
|
||||||
|| { echo "Error configuring newlib"; exit 1; }
|
|
||||||
touch configured-newlib
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f built-newlib ]
|
|
||||||
then
|
|
||||||
$MAKE || { echo "Error building newlib"; exit 1; }
|
|
||||||
touch built-newlib
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [ ! -f installed-newlib ]
|
|
||||||
then
|
|
||||||
$MAKE install -j1 || { echo "Error installing newlib"; exit 1; }
|
|
||||||
touch installed-newlib
|
|
||||||
fi
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install the final compiler
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
cd $BUILDDIR
|
|
||||||
|
|
||||||
cd $target/gcc
|
|
||||||
|
|
||||||
if [ ! -f built-stage2 ]
|
|
||||||
then
|
|
||||||
$MAKE all || { echo "Error building gcc stage2"; exit 1; }
|
|
||||||
touch built-stage2
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f installed-stage2 ]
|
|
||||||
then
|
|
||||||
$MAKE install || { echo "Error installing gcc stage2"; exit 1; }
|
|
||||||
touch installed-stage2
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm -fr $prefix/$target/sys-include
|
|
||||||
|
|
||||||
cd $BUILDDIR
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# build and install the debugger
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
mkdir -p $target/gdb
|
|
||||||
cd $target/gdb
|
|
||||||
|
|
||||||
PLATFORM=`uname -s`
|
|
||||||
|
|
||||||
if [ ! -f configured-gdb ]
|
|
||||||
then
|
|
||||||
CFLAGS="$cflags" \
|
|
||||||
CXXFLAGS="$cflags" \
|
|
||||||
LDFLAGS="$ldflags" \
|
|
||||||
../../gdb-$GDB_VER/configure \
|
|
||||||
--disable-nls --prefix=$prefix --target=$target --disable-werror \
|
|
||||||
$CROSS_PARAMS \
|
|
||||||
|| { echo "Error configuring gdb"; exit 1; }
|
|
||||||
touch configured-gdb
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f built-gdb ]
|
|
||||||
then
|
|
||||||
$MAKE || { echo "Error building gdb"; exit 1; }
|
|
||||||
touch built-gdb
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f installed-gdb ]
|
|
||||||
then
|
|
||||||
$MAKE install || { echo "Error installing gdb"; exit 1; }
|
|
||||||
touch installed-gdb
|
|
||||||
fi
|
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
# copy base rulesets
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
cp -v $BUILDSCRIPTDIR/dka64/rules/* $prefix
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
cd $BUILDDIR
|
|
||||||
|
|
||||||
for archive in $hostarchives
|
|
||||||
do
|
|
||||||
dir=$(echo $archive | sed -e 's/\(.*\)\.tar\.bz2/\1/' )
|
|
||||||
cd $BUILDDIR/$dir
|
|
||||||
if [ ! -f configured ]; then
|
|
||||||
CXXFLAGS=$cflags CFLAGS=$cflags LDFLAGS=$ldflags ./configure --prefix=$prefix $CROSS_PARAMS || { echo "error configuring $archive"; exit 1; }
|
|
||||||
touch configured
|
|
||||||
fi
|
|
||||||
if [ ! -f built ]; then
|
|
||||||
$MAKE || { echo "error building $dir"; exit 1; }
|
|
||||||
touch built
|
|
||||||
fi
|
|
||||||
if [ ! -f installed ]; then
|
|
||||||
$MAKE install || { echo "error installing $dir"; exit 1; }
|
|
||||||
touch installed
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
@@ -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) }
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
|
|
||||||
@@ -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
|
|
||||||
@@ -3,11 +3,3 @@ include $(DEVKITARM)/base_rules
|
|||||||
all:
|
all:
|
||||||
$(CC) -x assembler-with-cpp -marm -c $(CRT)_crt0.s -o$(CRT)_crt0.o
|
$(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
|
$(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
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,16 +8,16 @@ MEMORY {
|
|||||||
the patcher / linker to find all shifted addresses within each section.
|
the patcher / linker to find all shifted addresses within each section.
|
||||||
Changed sections are: glue_7, got
|
Changed sections are: glue_7, got
|
||||||
*/
|
*/
|
||||||
ddmem : ORIGIN = 0xBF800000, LENGTH = 16K
|
ddmem : ORIGIN = 0xBF800000, LENGTH = 32K
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
.crt0 :
|
.init :
|
||||||
{
|
{
|
||||||
__text_start = . ;
|
__text_start = . ;
|
||||||
KEEP (*(.crt0))
|
KEEP (*(.init))
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >ddmem = 0xff
|
} >ddmem = 0xff
|
||||||
|
|
||||||
|
|||||||
@@ -2,21 +2,10 @@ OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
|||||||
OUTPUT_ARCH(arm)
|
OUTPUT_ARCH(arm)
|
||||||
ENTRY(_start)
|
ENTRY(_start)
|
||||||
|
|
||||||
|
|
||||||
PHDRS {
|
|
||||||
crt0 PT_LOAD FLAGS(7);
|
|
||||||
arm7 PT_LOAD FLAGS(7);
|
|
||||||
arm7i PT_LOAD FLAGS(0x100007);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
MEMORY {
|
MEMORY {
|
||||||
ewram : ORIGIN = 0x02380000, LENGTH = 12M - 512K
|
|
||||||
rom : ORIGIN = 0x08000000, LENGTH = 32M
|
|
||||||
iwram : ORIGIN = 0x037f8000, LENGTH = 96K
|
|
||||||
|
|
||||||
twl_ewram : ORIGIN = 0x02e80000, LENGTH = 512K - 64K
|
rom : ORIGIN = 0x08000000, LENGTH = 32M
|
||||||
twl_iwram : ORIGIN = 0x03000000, LENGTH = 256K
|
iwram : ORIGIN = 0x037f8000, LENGTH = 96K
|
||||||
}
|
}
|
||||||
|
|
||||||
__iwram_start = ORIGIN(iwram);
|
__iwram_start = ORIGIN(iwram);
|
||||||
@@ -32,57 +21,30 @@ __irq_vector = 0x04000000 - 4;
|
|||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
|
.init :
|
||||||
.twl :
|
|
||||||
{
|
{
|
||||||
__arm7i_lma__ = LOADADDR(.twl);
|
__text_start = . ;
|
||||||
__arm7i_start__ = .;
|
KEEP (*(.init))
|
||||||
*(.twl)
|
|
||||||
*.twl*(.text .stub .text.* .gnu.linkonce.t.*)
|
|
||||||
*.twl*(.rodata)
|
|
||||||
*.twl*(.roda)
|
|
||||||
*.twl*(.rodata.*)
|
|
||||||
*.twl*(.data)
|
|
||||||
*.twl*(.data.*)
|
|
||||||
*.twl*(.gnu.linkonce.d*)
|
|
||||||
__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)
|
|
||||||
__twl_bss_end__ = .;
|
|
||||||
} >twl_iwram :NONE
|
|
||||||
|
|
||||||
.crt0 :
|
|
||||||
{
|
|
||||||
KEEP (*(.crt0))
|
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >ewram :crt0
|
} >iwram = 0xff
|
||||||
|
.plt : { *(.plt) } >iwram = 0xff
|
||||||
|
|
||||||
.text :
|
.text : /* ALIGN (4): */
|
||||||
{
|
{
|
||||||
__arm7_lma__ = LOADADDR(.text);
|
|
||||||
__arm7_start__ = .;
|
|
||||||
KEEP (*(SORT_NONE(.init)))
|
|
||||||
*(.plt)
|
|
||||||
*(.text .stub .text.* .gnu.linkonce.t.*)
|
*(.text .stub .text.* .gnu.linkonce.t.*)
|
||||||
KEEP (*(.text.*personality*))
|
KEEP (*(.text.*personality*))
|
||||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||||
*(.gnu.warning)
|
*(.gnu.warning)
|
||||||
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
|
*(.glue_7t) *(.glue_7) *(.vfp11_veneer)
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >iwram AT>ewram :arm7
|
} >iwram = 0xff
|
||||||
|
|
||||||
.fini :
|
.fini :
|
||||||
{
|
{
|
||||||
KEEP (*(.fini))
|
KEEP (*(.fini))
|
||||||
} >iwram AT>ewram
|
} >iwram =0xff
|
||||||
|
|
||||||
|
__text_end = . ;
|
||||||
|
|
||||||
.rodata :
|
.rodata :
|
||||||
{
|
{
|
||||||
@@ -93,38 +55,27 @@ SECTIONS
|
|||||||
*(.gnu.linkonce.r*)
|
*(.gnu.linkonce.r*)
|
||||||
SORT(CONSTRUCTORS)
|
SORT(CONSTRUCTORS)
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >iwram AT>ewram
|
} >iwram = 0xff
|
||||||
|
|
||||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >iwram AT>ewram
|
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >iwram
|
||||||
|
__exidx_start = .;
|
||||||
.ARM.exidx : {
|
.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >iwram
|
||||||
__exidx_start = .;
|
__exidx_end = .;
|
||||||
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
|
||||||
__exidx_end = .;
|
|
||||||
} >iwram AT>ewram
|
|
||||||
|
|
||||||
/* Ensure the __preinit_array_start label is properly aligned. We
|
/* Ensure the __preinit_array_start label is properly aligned. We
|
||||||
could instead move the label definition inside the section, but
|
could instead move the label definition inside the section, but
|
||||||
the linker would then create the section even if it turns out to
|
the linker would then create the section even if it turns out to
|
||||||
be empty, which isn't pretty. */
|
be empty, which isn't pretty. */
|
||||||
.preinit_array : {
|
. = ALIGN(32 / 8);
|
||||||
. = ALIGN(32 / 8);
|
PROVIDE (__preinit_array_start = .);
|
||||||
PROVIDE (__preinit_array_start = .);
|
.preinit_array : { KEEP (*(.preinit_array)) } >iwram = 0xff
|
||||||
KEEP (*(.preinit_array))
|
PROVIDE (__preinit_array_end = .);
|
||||||
PROVIDE (__preinit_array_end = .);
|
PROVIDE (__init_array_start = .);
|
||||||
} >iwram AT>ewram
|
.init_array : { KEEP (*(.init_array)) } >iwram = 0xff
|
||||||
|
PROVIDE (__init_array_end = .);
|
||||||
.init_array : {
|
PROVIDE (__fini_array_start = .);
|
||||||
PROVIDE (__init_array_start = .);
|
.fini_array : { KEEP (*(.fini_array)) } >iwram = 0xff
|
||||||
KEEP (*(.init_array))
|
PROVIDE (__fini_array_end = .);
|
||||||
PROVIDE (__init_array_end = .);
|
|
||||||
} >iwram AT>ewram
|
|
||||||
|
|
||||||
.fini_array : {
|
|
||||||
PROVIDE (__fini_array_start = .);
|
|
||||||
KEEP (*(.fini_array))
|
|
||||||
PROVIDE (__fini_array_end = .);
|
|
||||||
} >iwram AT>ewram
|
|
||||||
|
|
||||||
.ctors :
|
.ctors :
|
||||||
{
|
{
|
||||||
@@ -139,7 +90,7 @@ SECTIONS
|
|||||||
KEEP (*(SORT(.ctors.*)))
|
KEEP (*(SORT(.ctors.*)))
|
||||||
KEEP (*(.ctors))
|
KEEP (*(.ctors))
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >iwram AT>ewram
|
} >iwram = 0xff
|
||||||
|
|
||||||
.dtors :
|
.dtors :
|
||||||
{
|
{
|
||||||
@@ -148,21 +99,21 @@ SECTIONS
|
|||||||
KEEP (*(SORT(.dtors.*)))
|
KEEP (*(SORT(.dtors.*)))
|
||||||
KEEP (*(.dtors))
|
KEEP (*(.dtors))
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >iwram AT>ewram
|
} >iwram = 0xff
|
||||||
|
|
||||||
.eh_frame :
|
.eh_frame :
|
||||||
{
|
{
|
||||||
KEEP (*(.eh_frame))
|
KEEP (*(.eh_frame))
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >iwram AT>ewram
|
} >iwram = 0xff
|
||||||
|
|
||||||
.gcc_except_table :
|
.gcc_except_table :
|
||||||
{
|
{
|
||||||
*(.gcc_except_table)
|
*(.gcc_except_table)
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >iwram AT>ewram
|
} >iwram = 0xff
|
||||||
.jcr : { KEEP (*(.jcr)) } >iwram AT>ewram
|
.jcr : { KEEP (*(.jcr)) } >iwram = 0
|
||||||
.got : { *(.got.plt) *(.got) } >iwram AT>ewram
|
.got : { *(.got.plt) *(.got) } >iwram = 0
|
||||||
|
|
||||||
.data ALIGN(4) : {
|
.data ALIGN(4) : {
|
||||||
__data_start = ABSOLUTE(.);
|
__data_start = ABSOLUTE(.);
|
||||||
@@ -172,11 +123,10 @@ SECTIONS
|
|||||||
CONSTRUCTORS
|
CONSTRUCTORS
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
__data_end = ABSOLUTE(.) ;
|
__data_end = ABSOLUTE(.) ;
|
||||||
} >iwram AT>ewram
|
} >iwram = 0xff
|
||||||
|
|
||||||
.bss ALIGN(4) (NOLOAD) :
|
.bss ALIGN(4) :
|
||||||
{
|
{
|
||||||
__arm7_end__ = .;
|
|
||||||
__bss_start = ABSOLUTE(.);
|
__bss_start = ABSOLUTE(.);
|
||||||
__bss_start__ = ABSOLUTE(.);
|
__bss_start__ = ABSOLUTE(.);
|
||||||
*(.dynbss)
|
*(.dynbss)
|
||||||
@@ -221,5 +171,6 @@ SECTIONS
|
|||||||
.debug_funcnames 0 : { *(.debug_funcnames) }
|
.debug_funcnames 0 : { *(.debug_funcnames) }
|
||||||
.debug_typenames 0 : { *(.debug_typenames) }
|
.debug_typenames 0 : { *(.debug_typenames) }
|
||||||
.debug_varnames 0 : { *(.debug_varnames) }
|
.debug_varnames 0 : { *(.debug_varnames) }
|
||||||
|
.stack 0x80000 : { _stack = .; *(.stack) }
|
||||||
/* These must appear regardless of . */
|
/* These must appear regardless of . */
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
%rename link old_link
|
%rename link old_link
|
||||||
|
|
||||||
*link:
|
*link:
|
||||||
%(old_link) -T ds_arm7.ld%s --gc-sections
|
%(old_link) -T ds_arm7.ld%s
|
||||||
|
|
||||||
*startfile:
|
*startfile:
|
||||||
ds_arm7_crt0%O%s crti%O%s crtbegin%O%s
|
ds_arm7_crt0%O%s crti%O%s crtbegin%O%s
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
.section ".crt0","ax"
|
.section ".init"
|
||||||
.global _start
|
.global _start
|
||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
.align 4
|
.align 4
|
||||||
@@ -23,53 +23,11 @@ _start:
|
|||||||
msr cpsr, r0
|
msr cpsr, r0
|
||||||
ldr sp, =__sp_usr @ Set user stack
|
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 r0, =__bss_start__ @ Clear BSS section to 0x00
|
||||||
ldr r1, =__bss_end__
|
ldr r1, =__bss_end__
|
||||||
sub r1, r1, r0
|
sub r1, r1, r0
|
||||||
bl ClearMem
|
bl ClearMem
|
||||||
|
|
||||||
#ifndef VRAM
|
|
||||||
cmp r10, #1
|
|
||||||
bne NotTWL
|
|
||||||
ldr r1, =__dsimode @ set DSi mode flag
|
|
||||||
strb r10, [r1]
|
|
||||||
|
|
||||||
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
|
ldr r3, =__libc_init_array @ global constructors
|
||||||
bl _blx_r3_stub
|
bl _blx_r3_stub
|
||||||
|
|
||||||
@@ -77,50 +35,13 @@ NotTWL:
|
|||||||
mov r1, #0 @ char *argv[]
|
mov r1, #0 @ char *argv[]
|
||||||
ldr r3, =main
|
ldr r3, =main
|
||||||
ldr lr,=__libnds_exit
|
ldr lr,=__libnds_exit
|
||||||
mov r12, #0x4000000 @ tell arm9 we are ready
|
|
||||||
mov r9, #0
|
|
||||||
str r9, [r12, #0x180]
|
|
||||||
_blx_r3_stub:
|
|
||||||
bx r3
|
bx r3
|
||||||
|
|
||||||
#ifndef VRAM
|
|
||||||
arm7lma:
|
|
||||||
.word __arm7_lma__ - .
|
|
||||||
#endif
|
|
||||||
.pool
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
@ ARM7<->ARM9 synchronization code
|
_blx_r3_stub:
|
||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
|
bx r3
|
||||||
__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
|
@ Clear memory to 0x00 if length != 0
|
||||||
@@ -149,9 +70,6 @@ ClrLoop:
|
|||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
CopyMemCheck:
|
CopyMemCheck:
|
||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
cmp r1, r2
|
|
||||||
bxeq lr
|
|
||||||
|
|
||||||
sub r3, r4, r2 @ Is there any data to copy?
|
sub r3, r4, r2 @ Is there any data to copy?
|
||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
@ Copy memory
|
@ Copy memory
|
||||||
|
|||||||
@@ -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 . */
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
|
|
||||||
@@ -6,7 +6,7 @@ MEMORY {
|
|||||||
|
|
||||||
rom : ORIGIN = 0x08000000, LENGTH = 32M
|
rom : ORIGIN = 0x08000000, LENGTH = 32M
|
||||||
iwram : ORIGIN = 0x037f8000, LENGTH = 96K
|
iwram : ORIGIN = 0x037f8000, LENGTH = 96K
|
||||||
vram : ORIGIN = 0x06000000, LENGTH = 256K
|
vram : ORIGIN = 0x06000000, LENGTH = 128K
|
||||||
}
|
}
|
||||||
|
|
||||||
__iwram_start = ORIGIN(iwram);
|
__iwram_start = ORIGIN(iwram);
|
||||||
@@ -22,20 +22,12 @@ __irq_vector = 0x04000000 - 4;
|
|||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
.crt0 :
|
.init :
|
||||||
{
|
{
|
||||||
__text_start = . ;
|
__text_start = . ;
|
||||||
KEEP (*(.crt0))
|
KEEP (*(.init))
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >vram = 0xff
|
} >vram = 0xff
|
||||||
|
|
||||||
__arm7_lma__ = .;
|
|
||||||
__arm7_start__ = .;
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
KEEP (*(SORT_NONE(.init)))
|
|
||||||
} >vram = 0xff
|
|
||||||
|
|
||||||
.plt : { *(.plt) } >vram = 0xff
|
.plt : { *(.plt) } >vram = 0xff
|
||||||
|
|
||||||
.text : /* ALIGN (4): */
|
.text : /* ALIGN (4): */
|
||||||
@@ -136,8 +128,6 @@ SECTIONS
|
|||||||
} >vram = 0xff
|
} >vram = 0xff
|
||||||
|
|
||||||
|
|
||||||
__arm7_end__ = .;
|
|
||||||
|
|
||||||
|
|
||||||
.bss ALIGN(4) :
|
.bss ALIGN(4) :
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -4,5 +4,5 @@
|
|||||||
%(old_link) -T ds_arm7_vram.ld%s
|
%(old_link) -T ds_arm7_vram.ld%s
|
||||||
|
|
||||||
*startfile:
|
*startfile:
|
||||||
ds_arm7_vram_crt0%O%s crti%O%s crtbegin%O%s
|
ds_arm7_crt0%O%s crti%O%s crtbegin%O%s
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,11 @@ OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
|
|||||||
OUTPUT_ARCH(arm)
|
OUTPUT_ARCH(arm)
|
||||||
ENTRY(_start)
|
ENTRY(_start)
|
||||||
|
|
||||||
|
__vectors_start = ORIGIN(vectors);
|
||||||
|
__itcm_start = ORIGIN(itcm);
|
||||||
__ewram_end = ORIGIN(ewram) + LENGTH(ewram);
|
__ewram_end = ORIGIN(ewram) + LENGTH(ewram);
|
||||||
__eheap_end = ORIGIN(ewram) + LENGTH(ewram);
|
__eheap_end = ORIGIN(ewram) + LENGTH(ewram);
|
||||||
|
__dtcm_start = ORIGIN(dtcm);
|
||||||
__dtcm_top = ORIGIN(dtcm) + LENGTH(dtcm);
|
__dtcm_top = ORIGIN(dtcm) + LENGTH(dtcm);
|
||||||
__irq_flags = __dtcm_top - 0x08;
|
__irq_flags = __dtcm_top - 0x08;
|
||||||
__irq_vector = __dtcm_top - 0x04;
|
__irq_vector = __dtcm_top - 0x04;
|
||||||
@@ -13,67 +15,52 @@ __sp_svc = __dtcm_top - 0x100;
|
|||||||
__sp_irq = __sp_svc - 0x100;
|
__sp_irq = __sp_svc - 0x100;
|
||||||
__sp_usr = __sp_irq - 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
|
SECTIONS
|
||||||
{
|
{
|
||||||
/* Secure area crap */
|
.init :
|
||||||
.secure : { *(.secure) } >ewram :main = 0
|
|
||||||
|
|
||||||
.crt0 :
|
|
||||||
{
|
{
|
||||||
__text_start = . ;
|
__text_start = . ;
|
||||||
KEEP (*(.crt0))
|
KEEP (*(.init))
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >ewram :main = 0x00
|
} >ewram = 0xff
|
||||||
|
|
||||||
.plt : { *(.plt) } >ewram :main = 0xff
|
.plt : { *(.plt) } >ewram = 0xff
|
||||||
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
KEEP (*(SORT_NONE(.init)))
|
|
||||||
} >ewram :main
|
|
||||||
|
|
||||||
.text : /* ALIGN (4): */
|
.text : /* ALIGN (4): */
|
||||||
{
|
{
|
||||||
*(EXCLUDE_FILE(*.itcm* *.vectors* *.twl*) .text)
|
*(EXCLUDE_FILE (*.itcm*) .text)
|
||||||
*(EXCLUDE_FILE(*.itcm* *.vectors* *.twl*) .stub)
|
|
||||||
*(EXCLUDE_FILE(*.itcm* *.vectors* *.twl*) .text.*)
|
*(.text.*)
|
||||||
|
*(.stub)
|
||||||
/* .gnu.warning sections are handled specially by elf32.em. */
|
/* .gnu.warning sections are handled specially by elf32.em. */
|
||||||
*(EXCLUDE_FILE(*.twl*) .gnu.warning)
|
*(.gnu.warning)
|
||||||
*(EXCLUDE_FILE(*.twl*) .gnu.linkonce.t*)
|
*(.gnu.linkonce.t*)
|
||||||
*(.glue_7)
|
*(.glue_7)
|
||||||
*(.glue_7t)
|
*(.glue_7t)
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >ewram :main = 0xff
|
} >ewram = 0xff
|
||||||
|
|
||||||
.fini :
|
.fini :
|
||||||
{
|
{
|
||||||
KEEP (*(.fini))
|
KEEP (*(.fini))
|
||||||
} >ewram :main =0xff
|
} >ewram =0xff
|
||||||
|
|
||||||
__text_end = . ;
|
__text_end = . ;
|
||||||
|
|
||||||
.rodata :
|
.rodata :
|
||||||
{
|
{
|
||||||
*(EXCLUDE_FILE(*.twl*) .rodata)
|
*(.rodata)
|
||||||
*all.rodata*(*)
|
*all.rodata*(*)
|
||||||
*(EXCLUDE_FILE(*.twl*) .roda)
|
*(.roda)
|
||||||
*(EXCLUDE_FILE(*.twl*) .rodata.*)
|
*(.rodata.*)
|
||||||
*(EXCLUDE_FILE(*.twl*) .gnu.linkonce.r*)
|
*(.gnu.linkonce.r*)
|
||||||
SORT(CONSTRUCTORS)
|
SORT(CONSTRUCTORS)
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >ewram :main = 0xff
|
} >ewram = 0xff
|
||||||
|
|
||||||
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ewram :main
|
.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >ewram
|
||||||
__exidx_start = .;
|
__exidx_start = .;
|
||||||
ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ewram :main
|
ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) } >ewram
|
||||||
__exidx_end = .;
|
__exidx_end = .;
|
||||||
|
|
||||||
/* Ensure the __preinit_array_start label is properly aligned. We
|
/* Ensure the __preinit_array_start label is properly aligned. We
|
||||||
@@ -84,21 +71,21 @@ SECTIONS
|
|||||||
. = ALIGN(32 / 8);
|
. = ALIGN(32 / 8);
|
||||||
|
|
||||||
PROVIDE (__preinit_array_start = .);
|
PROVIDE (__preinit_array_start = .);
|
||||||
.preinit_array : { KEEP (*(.preinit_array)) } >ewram :main = 0xff
|
.preinit_array : { KEEP (*(.preinit_array)) } >ewram = 0xff
|
||||||
PROVIDE (__preinit_array_end = .);
|
PROVIDE (__preinit_array_end = .);
|
||||||
PROVIDE (__init_array_start = .);
|
PROVIDE (__init_array_start = .);
|
||||||
.init_array :
|
.init_array :
|
||||||
{
|
{
|
||||||
KEEP (*(SORT(.init_array.*)))
|
KEEP (*(SORT(.init_array.*)))
|
||||||
KEEP (*(.init_array))
|
KEEP (*(.init_array))
|
||||||
} >ewram :main = 0xff
|
} >ewram = 0xff
|
||||||
PROVIDE (__init_array_end = .);
|
PROVIDE (__init_array_end = .);
|
||||||
PROVIDE (__fini_array_start = .);
|
PROVIDE (__fini_array_start = .);
|
||||||
.fini_array :
|
.fini_array :
|
||||||
{
|
{
|
||||||
KEEP (*(.fini_array))
|
KEEP (*(.fini_array))
|
||||||
KEEP (*(SORT(.fini_array.*)))
|
KEEP (*(SORT(.fini_array.*)))
|
||||||
} >ewram :main = 0xff
|
} >ewram = 0xff
|
||||||
|
|
||||||
PROVIDE (__fini_array_end = .);
|
PROVIDE (__fini_array_end = .);
|
||||||
|
|
||||||
@@ -115,7 +102,7 @@ SECTIONS
|
|||||||
KEEP (*(SORT(.ctors.*)))
|
KEEP (*(SORT(.ctors.*)))
|
||||||
KEEP (*(.ctors))
|
KEEP (*(.ctors))
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >ewram :main = 0xff
|
} >ewram = 0xff
|
||||||
|
|
||||||
.dtors :
|
.dtors :
|
||||||
{
|
{
|
||||||
@@ -124,21 +111,21 @@ SECTIONS
|
|||||||
KEEP (*(SORT(.dtors.*)))
|
KEEP (*(SORT(.dtors.*)))
|
||||||
KEEP (*(.dtors))
|
KEEP (*(.dtors))
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >ewram :main = 0xff
|
} >ewram = 0xff
|
||||||
|
|
||||||
.eh_frame :
|
.eh_frame :
|
||||||
{
|
{
|
||||||
KEEP (*(.eh_frame))
|
KEEP (*(.eh_frame))
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >ewram :main = 0xff
|
} >ewram = 0xff
|
||||||
|
|
||||||
.gcc_except_table :
|
.gcc_except_table :
|
||||||
{
|
{
|
||||||
*(.gcc_except_table)
|
*(.gcc_except_table)
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >ewram :main = 0xff
|
} >ewram = 0xff
|
||||||
.jcr : { KEEP (*(.jcr)) } >ewram :main = 0
|
.jcr : { KEEP (*(.jcr)) } >ewram = 0
|
||||||
.got : { *(.got.plt) *(.got) *(.rel.got) } >ewram :main = 0
|
.got : { *(.got.plt) *(.got) *(.rel.got) } >ewram = 0
|
||||||
|
|
||||||
.ewram ALIGN(4) :
|
.ewram ALIGN(4) :
|
||||||
{
|
{
|
||||||
@@ -146,51 +133,52 @@ SECTIONS
|
|||||||
*(.ewram)
|
*(.ewram)
|
||||||
*ewram.*(.text)
|
*ewram.*(.text)
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >ewram :main = 0xff
|
} >ewram = 0xff
|
||||||
|
|
||||||
|
|
||||||
.data ALIGN(4) :
|
.data ALIGN(4) :
|
||||||
{
|
{
|
||||||
__data_start = ABSOLUTE(.);
|
__data_start = ABSOLUTE(.);
|
||||||
*(EXCLUDE_FILE(*.twl*) .data)
|
*(.data)
|
||||||
*(EXCLUDE_FILE(*.twl*) .data.*)
|
*(.data.*)
|
||||||
*(EXCLUDE_FILE(*.twl*) .gnu.linkonce.d*)
|
*(.gnu.linkonce.d*)
|
||||||
CONSTRUCTORS
|
CONSTRUCTORS
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
__data_end = ABSOLUTE(.) ;
|
__data_end = ABSOLUTE(.) ;
|
||||||
} >ewram :main = 0xff
|
} >ewram = 0xff
|
||||||
|
|
||||||
|
|
||||||
|
__dtcm_lma = . ;
|
||||||
__bss_vma = . ;
|
__bss_vma = . ;
|
||||||
|
|
||||||
.dtcm :
|
.dtcm __dtcm_start : AT (__dtcm_lma)
|
||||||
{
|
{
|
||||||
__dtcm_lma = LOADADDR(.dtcm);
|
|
||||||
__dtcm_start = ABSOLUTE(.);
|
|
||||||
*(.dtcm)
|
*(.dtcm)
|
||||||
*(.dtcm.*)
|
*(.dtcm.*)
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
__dtcm_end = ABSOLUTE(.);
|
__dtcm_end = ABSOLUTE(.);
|
||||||
} >dtcm AT>ewram :dtcm = 0xff
|
} >dtcm = 0xff
|
||||||
|
|
||||||
.itcm :
|
|
||||||
|
__itcm_lma = __dtcm_lma + SIZEOF(.dtcm);
|
||||||
|
|
||||||
|
.itcm __itcm_start : AT (__itcm_lma)
|
||||||
{
|
{
|
||||||
__itcm_lma = LOADADDR(.itcm);
|
|
||||||
__itcm_start = ABSOLUTE(.);
|
|
||||||
*(.itcm)
|
*(.itcm)
|
||||||
*.itcm*(.text .stub .text.*)
|
*itcm.*(.text)
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
__itcm_end = ABSOLUTE(.);
|
__itcm_end = ABSOLUTE(.);
|
||||||
} >itcm AT>ewram :itcm = 0xff
|
} >itcm = 0xff
|
||||||
|
|
||||||
|
__vectors_lma = __itcm_lma + SIZEOF(.itcm);
|
||||||
|
|
||||||
.vectors :
|
.vectors __vectors_start : AT (__vectors_lma)
|
||||||
{
|
{
|
||||||
__vectors_lma = LOADADDR(.vectors);
|
|
||||||
__vectors_start = ABSOLUTE(.);
|
|
||||||
*(.vectors)
|
*(.vectors)
|
||||||
*.vectors*(.text .stub .text.*)
|
*vectors.*(.text)
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
__vectors_end = ABSOLUTE(.);
|
__vectors_end = ABSOLUTE(.);
|
||||||
} >vectors AT>ewram :vectors = 0xff
|
} >vectors = 0xff
|
||||||
|
|
||||||
.sbss __dtcm_end (NOLOAD):
|
.sbss __dtcm_end (NOLOAD):
|
||||||
{
|
{
|
||||||
@@ -199,48 +187,22 @@ SECTIONS
|
|||||||
*(.sbss)
|
*(.sbss)
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
__sbss_end = ABSOLUTE(.);
|
__sbss_end = ABSOLUTE(.);
|
||||||
} >dtcm :NONE
|
} >dtcm
|
||||||
|
|
||||||
.bss __bss_vma (NOLOAD):
|
.bss __bss_vma (NOLOAD):
|
||||||
{
|
{
|
||||||
__bss_start = ABSOLUTE(.);
|
__bss_start = ABSOLUTE(.);
|
||||||
__bss_start__ = ABSOLUTE(.);
|
__bss_start__ = ABSOLUTE(.);
|
||||||
*(EXCLUDE_FILE(*.twl*) .dynbss)
|
*(.dynbss)
|
||||||
*(EXCLUDE_FILE(*.twl*) .gnu.linkonce.b*)
|
*(.gnu.linkonce.b*)
|
||||||
*(EXCLUDE_FILE(*.twl*) .bss*)
|
*(.bss*)
|
||||||
*(EXCLUDE_FILE(*.twl*) COMMON)
|
*(COMMON)
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
__bss_end__ = ABSOLUTE(.) ;
|
__bss_end__ = ABSOLUTE(.) ;
|
||||||
__end__ = ABSOLUTE(.) ;
|
__end__ = ABSOLUTE(.) ;
|
||||||
} >ewram :NONE
|
} AT>ewram
|
||||||
|
|
||||||
.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. */
|
/* Stabs debugging sections. */
|
||||||
.stab 0 : { *(.stab) }
|
.stab 0 : { *(.stab) }
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
MEMORY {
|
MEMORY {
|
||||||
ewram : ORIGIN = 0x02000000, LENGTH = 4M - 512k
|
|
||||||
|
rom : ORIGIN = 0x08000000, LENGTH = 32M
|
||||||
|
ewram : ORIGIN = 0x02000000, LENGTH = 4M - 4k
|
||||||
dtcm : ORIGIN = 0x0b000000, LENGTH = 16K
|
dtcm : ORIGIN = 0x0b000000, LENGTH = 16K
|
||||||
vectors : ORIGIN = 0x01000000, LENGTH = 256
|
vectors : ORIGIN = 0x01000000, LENGTH = 256
|
||||||
itcm : ORIGIN = 0x01000100, LENGTH = 32K - 256
|
itcm : ORIGIN = 0x01000100, LENGTH = 32K - 256
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
%rename link old_link
|
%rename link old_link
|
||||||
|
|
||||||
*link:
|
*link:
|
||||||
%(old_link) -T ds_arm9.mem%s -T ds_arm9.ld%s --gc-sections
|
%(old_link) -T ds_arm9.mem%s -T ds_arm9.ld%s
|
||||||
|
|
||||||
*startfile:
|
*startfile:
|
||||||
ds_arm9_crt0%O%s crti%O%s crtbegin%O%s
|
ds_arm9_crt0%O%s crti%O%s crtbegin%O%s
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
.equ _libnds_argv,0x02FFFE70
|
.equ _libnds_argv,0x02FFFE70
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
.section ".crt0","ax"
|
.section ".init"
|
||||||
.global _start
|
.global _start
|
||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
.align 4
|
.align 4
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
_start:
|
_start:
|
||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
mov r0, #0x04000000 @ IME = 0;
|
mov r0, #0x04000000 @ IME = 0;
|
||||||
str r0, [r0, #0x208]
|
str r0, [r0, #0x208]
|
||||||
|
|
||||||
@ set sensible stacks to allow bios call
|
@ set sensible stacks to allow bios call
|
||||||
@@ -46,34 +46,12 @@ _start:
|
|||||||
msr cpsr, r0
|
msr cpsr, r0
|
||||||
ldr sp, =__sp_usr @ Set user stack
|
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 r1, =__itcm_lma @ Copy instruction tightly coupled memory (itcm section) from LMA to VMA
|
||||||
ldr r2, =__itcm_start
|
ldr r2, =__itcm_start
|
||||||
ldr r4, =__itcm_end
|
ldr r4, =__itcm_end
|
||||||
bl CopyMemCheck
|
bl CopyMemCheck
|
||||||
|
|
||||||
ldr r1, =__vectors_lma @ Copy reserved vectors area (itcm section) from LMA to VMA
|
ldr r1, =__vectors_lma @ Copy reserved vectors area (itcm section) from LMA to VMA
|
||||||
ldr r2, =__vectors_start
|
ldr r2, =__vectors_start
|
||||||
ldr r4, =__vectors_end
|
ldr r4, =__vectors_end
|
||||||
bl CopyMemCheck
|
bl CopyMemCheck
|
||||||
@@ -83,9 +61,6 @@ _start:
|
|||||||
ldr r4, =__dtcm_end
|
ldr r4, =__dtcm_end
|
||||||
bl CopyMemCheck
|
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
|
bl checkARGV @ check and process argv trickery
|
||||||
|
|
||||||
ldr r0, =__bss_start__ @ Clear BSS section
|
ldr r0, =__bss_start__ @ Clear BSS section
|
||||||
@@ -97,42 +72,20 @@ _start:
|
|||||||
ldr r1, =__sbss_end
|
ldr r1, =__sbss_end
|
||||||
sub r1, r1, r0
|
sub r1, r1, r0
|
||||||
bl ClearMem
|
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
|
ldr r0, =_libnds_argv
|
||||||
|
|
||||||
@ reset heap base
|
@ reset heap base
|
||||||
ldr r2, [r0,#20] @ newheap base
|
ldr r2, [r0,#20] @ newheap base
|
||||||
cmp r2, #0
|
ldr r1,=fake_heap_start
|
||||||
moveq r2, r10
|
str r2,[r1]
|
||||||
ldr r1, =fake_heap_start @ set heap start
|
|
||||||
str r2, [r1]
|
|
||||||
|
|
||||||
ldr r1, =fake_heap_end @ set heap end
|
ldr r1, =fake_heap_end @ set heap end
|
||||||
sub r8, r8,#0xc000
|
sub r8, r8,#0xc000
|
||||||
str r8, [r1]
|
str r8, [r1]
|
||||||
|
|
||||||
push {r0}
|
push {r0}
|
||||||
ldr r0, =__secure_area__
|
|
||||||
ldr r3, =initSystem
|
ldr r3, =initSystem
|
||||||
blx r3 @ system initialisation
|
blx r3 @ system initialisation
|
||||||
|
|
||||||
@@ -168,7 +121,7 @@ checkARGV:
|
|||||||
ldr r2, [r0, #8] @ length of command line
|
ldr r2, [r0, #8] @ length of command line
|
||||||
|
|
||||||
@ copy to heap
|
@ copy to heap
|
||||||
mov r3, r10 @ initial heap base
|
ldr r3, =__end__ @ initial heap base
|
||||||
str r3, [r0, #4] @ set command line address
|
str r3, [r0, #4] @ set command line address
|
||||||
|
|
||||||
cmp r2, #0
|
cmp r2, #0
|
||||||
@@ -208,7 +161,7 @@ ClearMem:
|
|||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
mov r2, #3 @ Round down to nearest word boundary
|
mov r2, #3 @ Round down to nearest word boundary
|
||||||
add r1, r1, r2 @ Shouldn't be needed
|
add r1, r1, r2 @ Shouldn't be needed
|
||||||
bics r1, r1, r2 @ Clear 2 LSB (and set Z)
|
bics r1, r1, r2 @ Clear 2 LSB (and set Z)
|
||||||
bxeq lr @ Quit if copy size is 0
|
bxeq lr @ Quit if copy size is 0
|
||||||
|
|
||||||
mov r2, #0
|
mov r2, #0
|
||||||
@@ -238,7 +191,7 @@ CopyMem:
|
|||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
mov r0, #3 @ These commands are used in cases where
|
mov r0, #3 @ These commands are used in cases where
|
||||||
add r3, r3, r0 @ the length is not a multiple of 4,
|
add r3, r3, r0 @ the length is not a multiple of 4,
|
||||||
bics r3, r3, r0 @ even though it should be.
|
bics r3, r3, r0 @ even though it should be.
|
||||||
bxeq lr @ Length is zero, so exit
|
bxeq lr @ Length is zero, so exit
|
||||||
CIDLoop:
|
CIDLoop:
|
||||||
ldmia r1!, {r0}
|
ldmia r1!, {r0}
|
||||||
@@ -248,17 +201,6 @@ CIDLoop:
|
|||||||
|
|
||||||
bx lr
|
bx lr
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
@ Synchronize with ARM7
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
IPCSync:
|
|
||||||
@---------------------------------------------------------------------------------
|
|
||||||
ldr r10, [r12, #0x180]
|
|
||||||
and r10, r10, #0xF
|
|
||||||
cmp r10, r9
|
|
||||||
bne IPCSync
|
|
||||||
bx lr
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
.align
|
.align
|
||||||
.pool
|
.pool
|
||||||
|
|||||||
@@ -22,25 +22,14 @@ __irq_vector = __iwram_top - 4;
|
|||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
.crt0 :
|
.init :
|
||||||
{
|
{
|
||||||
__text_start = . ;
|
__text_start = . ;
|
||||||
KEEP (*(.crt0))
|
KEEP (*(.init))
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >rom = 0xff
|
} >rom = 0xff
|
||||||
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
KEEP (*(SORT_NONE(.init)))
|
|
||||||
} >rom = 0xff
|
|
||||||
|
|
||||||
.plt : { *(.plt) } >rom = 0xff
|
.plt : { *(.plt) } >rom = 0xff
|
||||||
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
KEEP (*(SORT_NONE(.init)))
|
|
||||||
} >ewram
|
|
||||||
|
|
||||||
.text : /* ALIGN (4): */
|
.text : /* ALIGN (4): */
|
||||||
{
|
{
|
||||||
*(EXCLUDE_FILE (*.iwram*) .text)
|
*(EXCLUDE_FILE (*.iwram*) .text)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
%rename link old_link
|
%rename link old_link
|
||||||
|
|
||||||
*link:
|
*link:
|
||||||
%(old_link) -T ds_cart.ld%s --gc-sections
|
%(old_link) -T ds_cart.ld%s
|
||||||
|
|
||||||
*startfile:
|
*startfile:
|
||||||
ds_cart_crt0%O%s crti%O%s crtbegin%O%s
|
ds_cart_crt0%O%s crti%O%s crtbegin%O%s
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
.section ".crt0","ax"
|
.section ".init"
|
||||||
.global _start
|
.global _start
|
||||||
.arm
|
.arm
|
||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
MEMORY {
|
MEMORY {
|
||||||
ewram : ORIGIN = 0x02000000, LENGTH = 15M - 512k
|
|
||||||
|
rom : ORIGIN = 0x08000000, LENGTH = 32M
|
||||||
|
ewram : ORIGIN = 0x02000000, LENGTH = 16M - 4k
|
||||||
dtcm : ORIGIN = 0x0b000000, LENGTH = 16K
|
dtcm : ORIGIN = 0x0b000000, LENGTH = 16K
|
||||||
vectors : ORIGIN = 0x01000000, LENGTH = 256
|
vectors : ORIGIN = 0x01000000, LENGTH = 256
|
||||||
itcm : ORIGIN = 0x01000100, LENGTH = 32K - 256
|
itcm : ORIGIN = 0x01000100, LENGTH = 32K - 256
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
%rename link old_link
|
%rename link old_link
|
||||||
|
|
||||||
*link:
|
*link:
|
||||||
%(old_link) -T dsi_arm9.mem%s -T ds_arm9.ld%s --gc-sections
|
%(old_link) -T dsi_arm9.mem%s -T ds_arm9.ld%s
|
||||||
|
|
||||||
*startfile:
|
*startfile:
|
||||||
ds_arm9_crt0%O%s crti%O%s crtbegin%O%s
|
ds_arm9_crt0%O%s crti%O%s crtbegin%O%s
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
@ author : tim schuerewegen
|
@ author : tim schuerewegen
|
||||||
@ version : 1.0
|
@ version : 1.0
|
||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
.section ".crt0","ax"
|
.section ".init"
|
||||||
.global _start
|
.global _start
|
||||||
.align
|
.align
|
||||||
.arm
|
.arm
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
%rename link old_link
|
%rename link old_link
|
||||||
|
|
||||||
*link:
|
*link:
|
||||||
%(old_link) -T gba_cart.ld%s --gc-sections
|
%(old_link) -T gba_cart.ld%s
|
||||||
|
|
||||||
*startfile:
|
*startfile:
|
||||||
gba_crt0%O%s crti%O%s crtbegin%O%s
|
gba_crt0%O%s crti%O%s crtbegin%O%s
|
||||||
|
|||||||
@@ -67,17 +67,11 @@ __irq_flags = 0x03007ff8;
|
|||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
. = __text_start;
|
. = __text_start;
|
||||||
.crt0 :
|
|
||||||
{
|
|
||||||
KEEP (*(.crt0))
|
|
||||||
. = ALIGN(4);
|
|
||||||
} >rom =0xff
|
|
||||||
|
|
||||||
|
|
||||||
.init :
|
.init :
|
||||||
{
|
{
|
||||||
KEEP (*(SORT_NONE(.init)))
|
KEEP (*(.init))
|
||||||
} >rom
|
. = ALIGN(4);
|
||||||
|
} >rom =0xff
|
||||||
|
|
||||||
.plt :
|
.plt :
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
.section ".crt0","ax"
|
.section ".init"
|
||||||
.global _start
|
.global _start
|
||||||
.align
|
.align
|
||||||
|
|
||||||
.arm
|
.arm
|
||||||
.cpu arm7tdmi
|
|
||||||
|
|
||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
_start:
|
_start:
|
||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
@@ -46,8 +43,8 @@ __slave_number:
|
|||||||
.word 0 @ reserved
|
.word 0 @ reserved
|
||||||
.word 0 @ reserved
|
.word 0 @ reserved
|
||||||
|
|
||||||
.global start_vector
|
.global start_vector
|
||||||
.align
|
.align
|
||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
start_vector:
|
start_vector:
|
||||||
@---------------------------------------------------------------------------------
|
@---------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ SECTIONS
|
|||||||
{
|
{
|
||||||
. = 0x02000000;
|
. = 0x02000000;
|
||||||
|
|
||||||
.crt0 :
|
.init :
|
||||||
{
|
{
|
||||||
*(.crt0)
|
*(.init)
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
} = 0xff
|
} = 0xff
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
%rename endfile old_endfile
|
%rename endfile old_endfile
|
||||||
|
|
||||||
*link:
|
*link:
|
||||||
-T gba_er.ld%s %(old_link) --gc-sections
|
-T gba_er.ld%s %(old_link)
|
||||||
|
|
||||||
*startfile:
|
*startfile:
|
||||||
er_crt0%O%s
|
er_crt0%O%s
|
||||||
|
|||||||
@@ -61,25 +61,18 @@ __irq_flags = 0x03007ff8;
|
|||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
. = __text_start;
|
. = __text_start;
|
||||||
. = __text_start;
|
.init :
|
||||||
.crt0 :
|
|
||||||
{
|
{
|
||||||
KEEP (*(.crt0))
|
KEEP (*(.init))
|
||||||
. = ALIGN(4);
|
. = ALIGN(4);
|
||||||
} >ewram =0xff
|
} >ewram =0xff
|
||||||
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
KEEP (*(SORT_NONE(.init)))
|
|
||||||
} >ewram
|
|
||||||
|
|
||||||
.plt :
|
.plt :
|
||||||
{
|
{
|
||||||
*(.plt)
|
*(.plt)
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >ewram
|
} >ewram
|
||||||
|
|
||||||
|
|
||||||
.text ALIGN (4):
|
.text ALIGN (4):
|
||||||
{
|
{
|
||||||
*(EXCLUDE_FILE (*.iwram*) .text)
|
*(EXCLUDE_FILE (*.iwram*) .text)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
%rename link old_link
|
%rename link old_link
|
||||||
|
|
||||||
*link:
|
*link:
|
||||||
-T gba_mb.ld%s %(old_link) --gc-sections
|
-T gba_mb.ld%s %(old_link)
|
||||||
|
|
||||||
*startfile:
|
*startfile:
|
||||||
gba_crt0%O%s crti%O%s crtbegin%O%s
|
gba_crt0%O%s crti%O%s crtbegin%O%s
|
||||||
|
|||||||
@@ -9,18 +9,12 @@ MEMORY
|
|||||||
|
|
||||||
SECTIONS
|
SECTIONS
|
||||||
{
|
{
|
||||||
.crt0 :
|
.init :
|
||||||
{
|
{
|
||||||
__text_start = . ;
|
__text_start = . ;
|
||||||
KEEP (*(.crt0))
|
KEEP (*(.init))
|
||||||
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
. = ALIGN(4); /* REQUIRED. LD is flaky without it. */
|
||||||
} >ram = 0xff
|
} >ram = 0xff
|
||||||
|
|
||||||
.init :
|
|
||||||
{
|
|
||||||
KEEP (*(SORT_NONE(.init)))
|
|
||||||
} >ram
|
|
||||||
|
|
||||||
.plt : { *(.plt) } >ram = 0xff
|
.plt : { *(.plt) } >ram = 0xff
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
%rename link old_link
|
%rename link old_link
|
||||||
|
|
||||||
*link:
|
*link:
|
||||||
%(old_link) -T gp32.ld%s --gc-sections
|
%(old_link) -T gp32.ld%s
|
||||||
|
|
||||||
*startfile:
|
*startfile:
|
||||||
gp32_crt0%O%s crti%O%s crtbegin%O%s
|
gp32_crt0%O%s crti%O%s crtbegin%O%s
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
.section ".crt0","ax"
|
.section ".init"
|
||||||
.code 32
|
.code 32
|
||||||
.align
|
.align
|
||||||
.global _start
|
.global _start
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
%rename link old_link
|
%rename link old_link
|
||||||
|
|
||||||
*link:
|
*link:
|
||||||
%(old_link) -T gp32_gpsdk.ld%s --gc-sections
|
%(old_link) -T gp32_gpsdk.ld%s
|
||||||
|
|
||||||
*startfile:
|
*startfile:
|
||||||
gp32_gpsdk_crt0%O%s crti%O%s crtbegin%O%s
|
gp32_gpsdk_crt0%O%s crti%O%s crtbegin%O%s
|
||||||
|
|||||||
162
dkarm-eabi/patches/binutils-2.22.patch
Normal file
162
dkarm-eabi/patches/binutils-2.22.patch
Normal file
@@ -0,0 +1,162 @@
|
|||||||
|
diff -Nbaur binutils-2.22/bfd/bfd-in2.h binutils-2.22-arm/bfd/bfd-in2.h
|
||||||
|
--- binutils-2.22/bfd/bfd-in2.h 2011-09-16 02:15:18.000000000 +0100
|
||||||
|
+++ binutils-2.22-arm/bfd/bfd-in2.h 2012-04-01 12:58:20.000000000 +0100
|
||||||
|
@@ -38,6 +38,8 @@
|
||||||
|
|
||||||
|
#include "ansidecl.h"
|
||||||
|
#include "symcat.h"
|
||||||
|
+#include <sys/stat.h>
|
||||||
|
+
|
||||||
|
#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
|
||||||
|
#ifndef SABER
|
||||||
|
/* This hack is to avoid a problem with some strict ANSI C preprocessors.
|
||||||
|
@@ -308,8 +310,6 @@
|
||||||
|
&& (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
|
||||||
|
&& (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
|
||||||
|
|
||||||
|
-/* Forward define. */
|
||||||
|
-struct stat;
|
||||||
|
|
||||||
|
typedef enum bfd_print_symbol
|
||||||
|
{
|
||||||
|
diff -Nbaur binutils-2.22/bfd/bfd-in.h binutils-2.22-arm/bfd/bfd-in.h
|
||||||
|
--- binutils-2.22/bfd/bfd-in.h 2011-09-16 02:15:18.000000000 +0100
|
||||||
|
+++ binutils-2.22-arm/bfd/bfd-in.h 2012-04-01 12:58:20.000000000 +0100
|
||||||
|
@@ -31,6 +31,8 @@
|
||||||
|
|
||||||
|
#include "ansidecl.h"
|
||||||
|
#include "symcat.h"
|
||||||
|
+#include <sys/stat.h>
|
||||||
|
+
|
||||||
|
#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
|
||||||
|
#ifndef SABER
|
||||||
|
/* This hack is to avoid a problem with some strict ANSI C preprocessors.
|
||||||
|
@@ -301,8 +303,6 @@
|
||||||
|
&& (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
|
||||||
|
&& (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
|
||||||
|
|
||||||
|
-/* Forward define. */
|
||||||
|
-struct stat;
|
||||||
|
|
||||||
|
typedef enum bfd_print_symbol
|
||||||
|
{
|
||||||
|
diff -Nbaur binutils-2.22/bfd/config.in binutils-2.22-arm/bfd/config.in
|
||||||
|
--- binutils-2.22/bfd/config.in 2011-05-12 08:41:40.000000000 +0100
|
||||||
|
+++ binutils-2.22-arm/bfd/config.in 2012-04-03 17:35:45.000000000 +0100
|
||||||
|
@@ -245,6 +245,9 @@
|
||||||
|
/* Define if <sys/procfs.h> has win32_pstatus_t. */
|
||||||
|
#undef HAVE_WIN32_PSTATUS_T
|
||||||
|
|
||||||
|
+/* Define to 1 if you have the <windows.h> header file. */
|
||||||
|
+#undef HAVE_WINDOWS_H
|
||||||
|
+
|
||||||
|
/* Define to 1 if you have the <zlib.h> header file. */
|
||||||
|
#undef HAVE_ZLIB_H
|
||||||
|
|
||||||
|
diff -Nbaur binutils-2.22/bfd/configure binutils-2.22-arm/bfd/configure
|
||||||
|
--- binutils-2.22/bfd/configure 2011-11-21 11:55:48.000000000 +0000
|
||||||
|
+++ binutils-2.22-arm/bfd/configure 2012-04-03 17:35:45.000000000 +0100
|
||||||
|
@@ -13508,6 +13508,22 @@
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
+
|
||||||
|
+for ac_header in windows.h dlfcn.h
|
||||||
|
+do :
|
||||||
|
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||||
|
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
|
+eval as_val=\$$as_ac_Header
|
||||||
|
+ if test "x$as_val" = x""yes; then :
|
||||||
|
+ cat >>confdefs.h <<_ACEOF
|
||||||
|
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
||||||
|
+_ACEOF
|
||||||
|
+
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+done
|
||||||
|
+
|
||||||
|
+
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether string.h and strings.h may both be included" >&5
|
||||||
|
$as_echo_n "checking whether string.h and strings.h may both be included... " >&6; }
|
||||||
|
if test "${gcc_cv_header_string+set}" = set; then :
|
||||||
|
diff -Nbaur binutils-2.22/bfd/configure.in binutils-2.22-arm/bfd/configure.in
|
||||||
|
--- binutils-2.22/bfd/configure.in 2011-11-21 11:55:46.000000000 +0000
|
||||||
|
+++ binutils-2.22-arm/bfd/configure.in 2012-04-03 17:35:45.000000000 +0100
|
||||||
|
@@ -190,6 +190,9 @@
|
||||||
|
GCC_HEADER_STDINT(bfd_stdint.h)
|
||||||
|
AC_HEADER_TIME
|
||||||
|
AC_HEADER_DIRENT
|
||||||
|
+
|
||||||
|
+AC_CHECK_HEADERS(windows.h dlfcn.h)
|
||||||
|
+
|
||||||
|
ACX_HEADER_STRING
|
||||||
|
AC_CHECK_FUNCS(fcntl getpagesize setitimer sysconf fdopen getuid getgid fileno)
|
||||||
|
AC_CHECK_FUNCS(strtoull)
|
||||||
|
diff -Nbaur binutils-2.22/bfd/plugin.c binutils-2.22-arm/bfd/plugin.c
|
||||||
|
--- binutils-2.22/bfd/plugin.c 2011-07-11 16:03:07.000000000 +0100
|
||||||
|
+++ binutils-2.22-arm/bfd/plugin.c 2012-04-03 17:35:45.000000000 +0100
|
||||||
|
@@ -25,7 +25,13 @@
|
||||||
|
#if BFD_SUPPORTS_PLUGINS
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
+#ifdef HAVE_DLFCN_H
|
||||||
|
#include <dlfcn.h>
|
||||||
|
+#elif defined (HAVE_WINDOWS_H)
|
||||||
|
+#include <windows.h>
|
||||||
|
+#else
|
||||||
|
+#error Unknown how to handle dynamic-load-libraries.
|
||||||
|
+#endif
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include "plugin-api.h"
|
||||||
|
#include "sysdep.h"
|
||||||
|
@@ -34,6 +40,37 @@
|
||||||
|
#include "libiberty.h"
|
||||||
|
#include <dirent.h>
|
||||||
|
|
||||||
|
+#if !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H)
|
||||||
|
+
|
||||||
|
+#define RTLD_NOW 0 /* Dummy value. */
|
||||||
|
+
|
||||||
|
+static void *
|
||||||
|
+dlopen (const char *file, int mode ATTRIBUTE_UNUSED)
|
||||||
|
+{
|
||||||
|
+ return LoadLibrary (file);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void *
|
||||||
|
+dlsym (void *handle, const char *name)
|
||||||
|
+{
|
||||||
|
+ return GetProcAddress (handle, name);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int ATTRIBUTE_UNUSED
|
||||||
|
+dlclose (void *handle)
|
||||||
|
+{
|
||||||
|
+ FreeLibrary (handle);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static const char *
|
||||||
|
+dlerror (void)
|
||||||
|
+{
|
||||||
|
+ return "Unable to load DLL.";
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+#endif /* !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H) */
|
||||||
|
+
|
||||||
|
#define bfd_plugin_close_and_cleanup _bfd_generic_close_and_cleanup
|
||||||
|
#define bfd_plugin_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
|
||||||
|
#define bfd_plugin_new_section_hook _bfd_generic_new_section_hook
|
||||||
|
diff -Nbaur binutils-2.22/include/opcode/arm.h binutils-2.22-arm/include/opcode/arm.h
|
||||||
|
--- binutils-2.22/include/opcode/arm.h 2011-05-31 15:12:55.000000000 +0100
|
||||||
|
+++ binutils-2.22-arm/include/opcode/arm.h 2012-04-01 12:58:20.000000000 +0100
|
||||||
|
@@ -109,7 +109,8 @@
|
||||||
|
#define ARM_AEXT_V6KT2 (ARM_AEXT_V6T2 | ARM_EXT_V6K)
|
||||||
|
#define ARM_AEXT_V6ZT2 (ARM_AEXT_V6T2 | ARM_EXT_SEC)
|
||||||
|
#define ARM_AEXT_V6ZKT2 (ARM_AEXT_V6T2 | ARM_EXT_V6K | ARM_EXT_SEC)
|
||||||
|
-#define ARM_AEXT_V7_ARM (ARM_AEXT_V6KT2 | ARM_EXT_V7 | ARM_EXT_BARRIER)
|
||||||
|
+#define ARM_AEXT_V7_ARM (ARM_AEXT_V6KT2 | ARM_EXT_V7 | ARM_EXT_BARRIER \
|
||||||
|
+ | ARM_EXT_OS )
|
||||||
|
#define ARM_AEXT_V7A (ARM_AEXT_V7_ARM | ARM_EXT_V7A)
|
||||||
|
#define ARM_AEXT_V7R (ARM_AEXT_V7_ARM | ARM_EXT_V7R | ARM_EXT_DIV)
|
||||||
|
#define ARM_AEXT_NOTM \
|
||||||
167
dkarm-eabi/patches/gcc-4.7.0.patch
Normal file
167
dkarm-eabi/patches/gcc-4.7.0.patch
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
diff -Nbaur gcc-4.7.0/gcc/config/arm/t-arm-elf gcc-4.7.0-arm/gcc/config/arm/t-arm-elf
|
||||||
|
--- gcc-4.7.0/gcc/config/arm/t-arm-elf 2011-11-02 15:23:48.000000000 +0000
|
||||||
|
+++ gcc-4.7.0-arm/gcc/config/arm/t-arm-elf 2012-04-05 20:36:17.000000000 +0100
|
||||||
|
@@ -26,22 +26,44 @@
|
||||||
|
#MULTILIB_DIRNAMES += fa526 fa626 fa606te fa626te fmp626 fa726te
|
||||||
|
#MULTILIB_EXCEPTIONS += *mthumb*/*mcpu=fa526 *mthumb*/*mcpu=fa626
|
||||||
|
|
||||||
|
-#MULTILIB_OPTIONS += march=armv7
|
||||||
|
-#MULTILIB_DIRNAMES += thumb2
|
||||||
|
-#MULTILIB_EXCEPTIONS += march=armv7* marm/*march=armv7*
|
||||||
|
-#MULTILIB_MATCHES += march?armv7=march?armv7-a
|
||||||
|
-#MULTILIB_MATCHES += march?armv7=march?armv7-r
|
||||||
|
-#MULTILIB_MATCHES += march?armv7=march?armv7-m
|
||||||
|
-#MULTILIB_MATCHES += march?armv7=mcpu?cortex-a8
|
||||||
|
-#MULTILIB_MATCHES += march?armv7=mcpu?cortex-r4
|
||||||
|
-#MULTILIB_MATCHES += march?armv7=mcpu?cortex-m3
|
||||||
|
+#mfloat-abi=hard|mfpu=fpv4-sp-d16
|
||||||
|
+
|
||||||
|
+MULTILIB_OPTIONS += march=armv7/march=armv6-m/mcpu=cortex-m4
|
||||||
|
+MULTILIB_DIRNAMES += thumb2 armv6-m cortex-m4
|
||||||
|
+MULTILIB_EXCEPTIONS += march=armv7* marm/*march=armv7*
|
||||||
|
+MULTILIB_EXCEPTIONS += march=armv6-m* marm/*march=armv6-m*
|
||||||
|
+MULTILIB_EXCEPTIONS += mcpu=cortex-m4* marm/*mcpu=cortex-m4*
|
||||||
|
+MULTILIB_EXCEPTIONS += mcpu=cortex-m4* mthumb/mcpu=cortex-m4
|
||||||
|
+MULTILIB_EXCEPTIONS += mcpu=cortex-m4* mthumb/mcpu=cortex-m4/mbig-endian
|
||||||
|
+MULTILIB_MATCHES += march?armv7=march?armv7-a
|
||||||
|
+MULTILIB_MATCHES += march?armv7=march?armv7-r
|
||||||
|
+MULTILIB_MATCHES += march?armv7=march?armv7-m
|
||||||
|
+MULTILIB_MATCHES += march?armv7=mcpu?cortex-a8
|
||||||
|
+MULTILIB_MATCHES += march?armv7=mcpu?cortex-r4
|
||||||
|
+MULTILIB_MATCHES += march?armv7=mcpu?cortex-m3
|
||||||
|
+MULTILIB_MATCHES += march?armv6-m=mcpu?cortex-m0
|
||||||
|
+MULTILIB_MATCHES += march?armv6-m=mcpu?cortex-m1
|
||||||
|
+
|
||||||
|
+MULTILIB_OPTIONS += mfloat-abi=hard mfpu=fpv4-sp-d16
|
||||||
|
+MULTILIB_DIRNAMES += float-abi-hard fpuv4-sp-d16
|
||||||
|
+MULTILIB_EXCEPTIONS += mfloat* marm/mfloat*
|
||||||
|
+MULTILIB_EXCEPTIONS += mfloat* mthumb/mfloat*
|
||||||
|
+MULTILIB_EXCEPTIONS += mfloat* mthumb*march=armv6-m*mfloat*
|
||||||
|
+MULTILIB_EXCEPTIONS += mfloat* mthumb*march=armv7*mfloat*
|
||||||
|
+MULTILIB_EXCEPTIONS += mfloat* mthumb/mcpu=cortex-m4/mfloat-abi=hard
|
||||||
|
+MULTILIB_EXCEPTIONS += mfloat* mthumb/mcpu=cortex-m4/mfloat-abi=hard/mbig-endian
|
||||||
|
+MULTILIB_EXCEPTIONS += mfpu* mthumb*march=armv6-m*mfpu*
|
||||||
|
+MULTILIB_EXCEPTIONS += mfpu* mthumb*march=armv7*mfpu*
|
||||||
|
+MULTILIB_EXCEPTIONS += mfpu* mthumb/mcpu=cortex-m4/mfpu*
|
||||||
|
+MULTILIB_EXCEPTIONS += mfpu* mthumb/mfpu*
|
||||||
|
+MULTILIB_EXCEPTIONS += mfpu* marm/mfpu*
|
||||||
|
|
||||||
|
# Not quite true. We can support hard-vfp calling in Thumb2, but how do we
|
||||||
|
# express that here? Also, we really need architecture v5e or later
|
||||||
|
# (mcrr etc).
|
||||||
|
-MULTILIB_OPTIONS += mfloat-abi=hard
|
||||||
|
-MULTILIB_DIRNAMES += fpu
|
||||||
|
-MULTILIB_EXCEPTIONS += *mthumb/*mfloat-abi=hard*
|
||||||
|
+#MULTILIB_OPTIONS += mfloat-abi=hard
|
||||||
|
+#MULTILIB_DIRNAMES += fpu
|
||||||
|
+#MULTILIB_EXCEPTIONS += *mthumb/*mfloat-abi=hard*
|
||||||
|
#MULTILIB_EXCEPTIONS += *mcpu=fa526/*mfloat-abi=hard*
|
||||||
|
#MULTILIB_EXCEPTIONS += *mcpu=fa626/*mfloat-abi=hard*
|
||||||
|
|
||||||
|
@@ -49,9 +71,9 @@
|
||||||
|
# MULTILIB_DIRNAMES += ep9312
|
||||||
|
# MULTILIB_EXCEPTIONS += *mthumb/*mcpu=ep9312*
|
||||||
|
#
|
||||||
|
-# MULTILIB_OPTIONS += mlittle-endian/mbig-endian
|
||||||
|
-# MULTILIB_DIRNAMES += le be
|
||||||
|
-# MULTILIB_MATCHES += mbig-endian=mbe mlittle-endian=mle
|
||||||
|
+MULTILIB_OPTIONS += mlittle-endian/mbig-endian
|
||||||
|
+MULTILIB_DIRNAMES += le be
|
||||||
|
+MULTILIB_MATCHES += mbig-endian=mbe mlittle-endian=mle
|
||||||
|
#
|
||||||
|
# MULTILIB_OPTIONS += mfloat-abi=hard/mfloat-abi=soft
|
||||||
|
# MULTILIB_DIRNAMES += fpu soft
|
||||||
|
diff -Nbaur gcc-4.7.0/gcc/config/arm/unknown-elf.h gcc-4.7.0-arm/gcc/config/arm/unknown-elf.h
|
||||||
|
--- gcc-4.7.0/gcc/config/arm/unknown-elf.h 2011-03-31 13:13:13.000000000 +0100
|
||||||
|
+++ gcc-4.7.0-arm/gcc/config/arm/unknown-elf.h 2012-04-05 20:36:17.000000000 +0100
|
||||||
|
@@ -94,4 +94,4 @@
|
||||||
|
udivmoddi4, which will depend on the exception unwind routines,
|
||||||
|
which will depend on abort, which is defined in libc. */
|
||||||
|
#undef LINK_GCC_C_SEQUENCE_SPEC
|
||||||
|
-#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L --end-group"
|
||||||
|
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
|
||||||
|
diff -Nbaur gcc-4.7.0/gcc/gcc.c gcc-4.7.0-arm/gcc/gcc.c
|
||||||
|
--- gcc-4.7.0/gcc/gcc.c 2012-02-28 17:31:38.000000000 +0000
|
||||||
|
+++ gcc-4.7.0-arm/gcc/gcc.c 2012-04-05 20:36:17.000000000 +0100
|
||||||
|
@@ -548,6 +548,11 @@
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#ifndef LIBGLOSS_SPEC
|
||||||
|
+# define LIBGLOSS_SPEC "-lsysbase"
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+
|
||||||
|
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
|
||||||
|
#ifndef STARTFILE_SPEC
|
||||||
|
#define STARTFILE_SPEC \
|
||||||
|
@@ -717,6 +722,7 @@
|
||||||
|
static const char *mflib_spec = MFLIB_SPEC;
|
||||||
|
static const char *link_gomp_spec = "";
|
||||||
|
static const char *libgcc_spec = LIBGCC_SPEC;
|
||||||
|
+static const char *libgloss_spec = LIBGLOSS_SPEC;
|
||||||
|
static const char *endfile_spec = ENDFILE_SPEC;
|
||||||
|
static const char *startfile_spec = STARTFILE_SPEC;
|
||||||
|
static const char *linker_name_spec = LINKER_NAME;
|
||||||
|
@@ -1201,6 +1207,7 @@
|
||||||
|
INIT_STATIC_SPEC ("mflib", &mflib_spec),
|
||||||
|
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
|
||||||
|
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
|
||||||
|
+ INIT_STATIC_SPEC ("libgloss", &libgloss_spec),
|
||||||
|
INIT_STATIC_SPEC ("startfile", &startfile_spec),
|
||||||
|
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
|
||||||
|
INIT_STATIC_SPEC ("version", &compiler_version),
|
||||||
|
diff -Nbaur gcc-4.7.0/libcpp/Makefile.in gcc-4.7.0-arm/libcpp/Makefile.in
|
||||||
|
--- gcc-4.7.0/libcpp/Makefile.in 2012-03-22 07:37:39.000000000 +0000
|
||||||
|
+++ gcc-4.7.0-arm/libcpp/Makefile.in 2012-04-05 20:36:17.000000000 +0100
|
||||||
|
@@ -214,8 +214,7 @@
|
||||||
|
# Note that we put the dependencies into a .Tpo file, then move them
|
||||||
|
# into place if the compile succeeds. We need this because gcc does
|
||||||
|
# not atomically write the dependency output file.
|
||||||
|
-COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Tpo
|
||||||
|
-POSTCOMPILE = @mv $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||||
|
+COMPILE = $(COMPILE.base) -o $@
|
||||||
|
else
|
||||||
|
COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
|
||||||
|
$(depcomp) $(COMPILE.base)
|
||||||
|
diff -Nbaur gcc-4.7.0/libgcc/crtstuff.c gcc-4.7.0-arm/libgcc/crtstuff.c
|
||||||
|
--- gcc-4.7.0/libgcc/crtstuff.c 2011-12-06 21:35:41.000000000 +0000
|
||||||
|
+++ gcc-4.7.0-arm/libgcc/crtstuff.c 2012-04-05 20:36:50.000000000 +0100
|
||||||
|
@@ -49,7 +49,7 @@
|
||||||
|
|
||||||
|
/* Target machine header files require this define. */
|
||||||
|
#define IN_LIBGCC2
|
||||||
|
-
|
||||||
|
+#define USED_FOR_TARGET
|
||||||
|
/* 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-4.7.0/libgcc/Makefile.in gcc-4.7.0-arm/libgcc/Makefile.in
|
||||||
|
--- gcc-4.7.0/libgcc/Makefile.in 2011-11-22 03:01:02.000000000 +0000
|
||||||
|
+++ gcc-4.7.0-arm/libgcc/Makefile.in 2012-04-05 20:36:17.000000000 +0100
|
||||||
|
@@ -500,14 +500,14 @@
|
||||||
|
lib2-divmod-o = $(patsubst %,%$(objext),$(LIB2_DIVMOD_FUNCS))
|
||||||
|
$(lib2-divmod-o): %$(objext): $(srcdir)/libgcc2.c
|
||||||
|
$(gcc_compile) -DL$* -c $< \
|
||||||
|
- -fexceptions -fnon-call-exceptions $(vis_hide)
|
||||||
|
+ -fno-exceptions -fnon-call-exceptions $(vis_hide)
|
||||||
|
libgcc-objects += $(lib2-divmod-o)
|
||||||
|
|
||||||
|
ifeq ($(enable_shared),yes)
|
||||||
|
lib2-divmod-s-o = $(patsubst %,%_s$(objext),$(LIB2_DIVMOD_FUNCS))
|
||||||
|
$(lib2-divmod-s-o): %_s$(objext): $(srcdir)/libgcc2.c
|
||||||
|
$(gcc_s_compile) -DL$* -c $< \
|
||||||
|
- -fexceptions -fnon-call-exceptions
|
||||||
|
+ -fno-exceptions -fnon-call-exceptions
|
||||||
|
libgcc-s-objects += $(lib2-divmod-s-o)
|
||||||
|
endif
|
||||||
|
|
||||||
|
@@ -810,7 +810,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)
|
||||||
|
|
||||||
@@ -1,125 +0,0 @@
|
|||||||
diff -NBaur gcc-7.1.0/gcc/config/arm/t-arm-elf gcc-7.1.0-arm/gcc/config/arm/t-arm-elf
|
|
||||||
--- gcc-7.1.0/gcc/config/arm/t-arm-elf 2017-01-01 12:07:43.000000000 +0000
|
|
||||||
+++ gcc-7.1.0-arm/gcc/config/arm/t-arm-elf 2017-05-03 12:58:45.387209969 +0100
|
|
||||||
@@ -16,11 +16,19 @@
|
|
||||||
# along with GCC; see the file COPYING3. If not see
|
|
||||||
# <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
-MULTILIB_OPTIONS = marm/mthumb
|
|
||||||
-MULTILIB_DIRNAMES = arm thumb
|
|
||||||
+MULTILIB_OPTIONS = mthumb mbig-endian march=armv6k mfloat-abi=hard
|
|
||||||
+MULTILIB_DIRNAMES = thumb be armv6k fpu
|
|
||||||
MULTILIB_EXCEPTIONS =
|
|
||||||
MULTILIB_MATCHES =
|
|
||||||
|
|
||||||
+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
|
|
||||||
@@ -38,9 +46,9 @@
|
|
||||||
# Not quite true. We can support hard-vfp calling in Thumb2, but how do we
|
|
||||||
# express that here? Also, we really need architecture v5e or later
|
|
||||||
# (mcrr etc).
|
|
||||||
-MULTILIB_OPTIONS += mfloat-abi=hard
|
|
||||||
-MULTILIB_DIRNAMES += fpu
|
|
||||||
-MULTILIB_EXCEPTIONS += *mthumb/*mfloat-abi=hard*
|
|
||||||
+#MULTILIB_OPTIONS += mfloat-abi=hard
|
|
||||||
+#MULTILIB_DIRNAMES += fpu
|
|
||||||
+#MULTILIB_EXCEPTIONS += *mthumb/*mfloat-abi=hard*
|
|
||||||
#MULTILIB_EXCEPTIONS += *mcpu=fa526/*mfloat-abi=hard*
|
|
||||||
#MULTILIB_EXCEPTIONS += *mcpu=fa626/*mfloat-abi=hard*
|
|
||||||
|
|
||||||
diff -NBaur gcc-7.1.0/gcc/config/arm/unknown-elf.h gcc-7.1.0-arm/gcc/config/arm/unknown-elf.h
|
|
||||||
--- gcc-7.1.0/gcc/config/arm/unknown-elf.h 2017-01-01 12:07:43.000000000 +0000
|
|
||||||
+++ gcc-7.1.0-arm/gcc/config/arm/unknown-elf.h 2017-06-08 12:22:17.868509897 +0100
|
|
||||||
@@ -29,7 +29,7 @@
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Now we define the strings used to build the spec file. */
|
|
||||||
-#define UNKNOWN_ELF_STARTFILE_SPEC " crti%O%s crtbegin%O%s crt0%O%s"
|
|
||||||
+#define UNKNOWN_ELF_STARTFILE_SPEC " crti%O%s crtbegin%O%s"
|
|
||||||
|
|
||||||
#undef STARTFILE_SPEC
|
|
||||||
#define STARTFILE_SPEC \
|
|
||||||
@@ -93,4 +93,9 @@
|
|
||||||
udivmoddi4, which will depend on the exception unwind routines,
|
|
||||||
which will depend on abort, which is defined in libc. */
|
|
||||||
#undef LINK_GCC_C_SEQUENCE_SPEC
|
|
||||||
-#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L --end-group"
|
|
||||||
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L %(libgloss) --end-group"
|
|
||||||
+
|
|
||||||
+/* The system headers under devkitARM are C++-aware. */
|
|
||||||
+#undef NO_IMPLICIT_EXTERN_C
|
|
||||||
+#define NO_IMPLICIT_EXTERN_C
|
|
||||||
+
|
|
||||||
diff -NBaur gcc-7.1.0/gcc/gcc.c gcc-7.1.0-arm/gcc/gcc.c
|
|
||||||
--- gcc-7.1.0/gcc/gcc.c 2017-01-17 09:38:48.000000000 +0000
|
|
||||||
+++ gcc-7.1.0-arm/gcc/gcc.c 2017-05-03 12:58:45.395210596 +0100
|
|
||||||
@@ -779,6 +779,11 @@
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#ifndef LIBGLOSS_SPEC
|
|
||||||
+# define LIBGLOSS_SPEC "-lsysbase"
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+
|
|
||||||
/* config.h can define STARTFILE_SPEC to override the default crt0 files. */
|
|
||||||
#ifndef STARTFILE_SPEC
|
|
||||||
#define STARTFILE_SPEC \
|
|
||||||
@@ -1074,6 +1079,7 @@
|
|
||||||
static const char *lib_spec = LIB_SPEC;
|
|
||||||
static const char *link_gomp_spec = "";
|
|
||||||
static const char *libgcc_spec = LIBGCC_SPEC;
|
|
||||||
+static const char *libgloss_spec = LIBGLOSS_SPEC;
|
|
||||||
static const char *endfile_spec = ENDFILE_SPEC;
|
|
||||||
static const char *startfile_spec = STARTFILE_SPEC;
|
|
||||||
static const char *linker_name_spec = LINKER_NAME;
|
|
||||||
@@ -1579,6 +1585,7 @@
|
|
||||||
INIT_STATIC_SPEC ("lib", &lib_spec),
|
|
||||||
INIT_STATIC_SPEC ("link_gomp", &link_gomp_spec),
|
|
||||||
INIT_STATIC_SPEC ("libgcc", &libgcc_spec),
|
|
||||||
+ INIT_STATIC_SPEC ("libgloss", &libgloss_spec),
|
|
||||||
INIT_STATIC_SPEC ("startfile", &startfile_spec),
|
|
||||||
INIT_STATIC_SPEC ("cross_compile", &cross_compile),
|
|
||||||
INIT_STATIC_SPEC ("version", &compiler_version),
|
|
||||||
diff -NBaur gcc-7.1.0/libgcc/config/arm/t-bpabi gcc-7.1.0-arm/libgcc/config/arm/t-bpabi
|
|
||||||
--- gcc-7.1.0/libgcc/config/arm/t-bpabi 2012-08-17 16:06:06.000000000 +0100
|
|
||||||
+++ gcc-7.1.0-arm/libgcc/config/arm/t-bpabi 2017-05-03 12:58:45.395210596 +0100
|
|
||||||
@@ -17,4 +17,4 @@
|
|
||||||
# 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-7.1.0/libgcc/crtstuff.c gcc-7.1.0-arm/libgcc/crtstuff.c
|
|
||||||
--- gcc-7.1.0/libgcc/crtstuff.c 2017-01-01 12:07:43.000000000 +0000
|
|
||||||
+++ gcc-7.1.0-arm/libgcc/crtstuff.c 2017-05-03 12:58:45.395210596 +0100
|
|
||||||
@@ -47,7 +47,7 @@
|
|
||||||
|
|
||||||
/* Target machine header files require this define. */
|
|
||||||
#define IN_LIBGCC2
|
|
||||||
-
|
|
||||||
+#define USED_FOR_TARGET
|
|
||||||
/* 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-7.1.0/libgcc/Makefile.in gcc-7.1.0-arm/libgcc/Makefile.in
|
|
||||||
--- gcc-7.1.0/libgcc/Makefile.in 2017-04-19 09:08:44.000000000 +0100
|
|
||||||
+++ gcc-7.1.0-arm/libgcc/Makefile.in 2017-05-03 12:58:45.399210922 +0100
|
|
||||||
@@ -844,7 +844,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)
|
|
||||||
|
|
||||||
33
dkarm-eabi/patches/gdb-7.4.patch
Normal file
33
dkarm-eabi/patches/gdb-7.4.patch
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
diff -Nbaur gdb-7.4/gdb/Makefile.in gdb-7.4-arm/gdb/Makefile.in
|
||||||
|
--- gdb-7.4/gdb/Makefile.in 2012-01-06 04:43:01.000000000 +0000
|
||||||
|
+++ gdb-7.4-arm/gdb/Makefile.in 2012-02-28 03:07:12.000000000 +0000
|
||||||
|
@@ -2195,10 +2195,10 @@
|
||||||
|
# Note that we put the dependencies into a .Tpo file, then move them
|
||||||
|
# into place if the compile succeeds. We need this because gcc does
|
||||||
|
# not atomically write the dependency output file.
|
||||||
|
-@GMAKE_TRUE@override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
|
||||||
|
-@GMAKE_TRUE@ -MF $(DEPDIR)/$(basename $(@F)).Tpo
|
||||||
|
-@GMAKE_TRUE@override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \
|
||||||
|
-@GMAKE_TRUE@ $(DEPDIR)/$(basename $(@F)).Po
|
||||||
|
+#@GMAKE_TRUE@override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
|
||||||
|
+#@GMAKE_TRUE@ -MF $(DEPDIR)/$(basename $(@F)).Tpo
|
||||||
|
+#@GMAKE_TRUE@override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \
|
||||||
|
+#@GMAKE_TRUE@ $(DEPDIR)/$(basename $(@F)).Po
|
||||||
|
@GMAKE_TRUE@else
|
||||||
|
@GMAKE_TRUE@override COMPILE.pre = source='$<' object='$@' libtool=no \
|
||||||
|
@GMAKE_TRUE@ DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC)
|
||||||
|
diff -Nbaur gdb-7.4/sim/common/Make-common.in gdb-7.4-arm/sim/common/Make-common.in
|
||||||
|
--- gdb-7.4/sim/common/Make-common.in 2012-01-06 04:54:38.000000000 +0000
|
||||||
|
+++ gdb-7.4-arm/sim/common/Make-common.in 2012-02-28 03:07:41.000000000 +0000
|
||||||
|
@@ -417,10 +417,7 @@
|
||||||
|
# Note that we put the dependencies into a .Tpo file, then move them
|
||||||
|
# into place if the compile succeeds. We need this because gcc does
|
||||||
|
# not atomically write the dependency output file.
|
||||||
|
-@GMAKE_TRUE@override COMPILE.post = -c -o $@ -MT $@ -MMD -MP \
|
||||||
|
-@GMAKE_TRUE@ -MF $(DEPDIR)/$(basename $(@F)).Tpo
|
||||||
|
-@GMAKE_TRUE@override POSTCOMPILE = @mv $(DEPDIR)/$(basename $(@F)).Tpo \
|
||||||
|
-@GMAKE_TRUE@ $(DEPDIR)/$(basename $(@F)).Po
|
||||||
|
+@GMAKE_TRUE@override COMPILE.post = -c -o $@
|
||||||
|
@GMAKE_TRUE@else
|
||||||
|
@GMAKE_TRUE@override COMPILE.pre = source='$<' object='$@' libtool=no \
|
||||||
|
@GMAKE_TRUE@ DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC)
|
||||||
@@ -1,441 +0,0 @@
|
|||||||
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 @@
|
|
||||||
+/* Target-dependent code for 3DS. */
|
|
||||||
+
|
|
||||||
+/* This uses code from GDB, which license is: */
|
|
||||||
+
|
|
||||||
+/*
|
|
||||||
+ Copyright (C) 2002-2017 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ This file is part of GDB.
|
|
||||||
+
|
|
||||||
+ This program is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU General Public License as published by
|
|
||||||
+ the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+ (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
+
|
|
||||||
+#include "defs.h"
|
|
||||||
+#include "gdbcore.h"
|
|
||||||
+#include "target.h"
|
|
||||||
+#include "osabi.h"
|
|
||||||
+#include "xml-syscall.h"
|
|
||||||
+
|
|
||||||
+#include "arch/arm.h"
|
|
||||||
+#include "arch/arm-get-next-pcs.h"
|
|
||||||
+#include "arm-tdep.h"
|
|
||||||
+
|
|
||||||
+static const gdb_byte arm_3ds_arm_le_breakpoint[] = {0xff, 0x00, 0x00, 0xef};
|
|
||||||
+static const gdb_byte arm_3ds_thumb_le_breakpoint[] = {0xff, 0xdf};
|
|
||||||
+
|
|
||||||
+static CORE_ADDR
|
|
||||||
+ arm_3ds_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self);
|
|
||||||
+
|
|
||||||
+/* Operation function pointers for get_next_pcs. */
|
|
||||||
+static struct arm_get_next_pcs_ops arm_3ds_get_next_pcs_ops = {
|
|
||||||
+ arm_get_next_pcs_read_memory_unsigned_integer,
|
|
||||||
+ arm_3ds_get_next_pcs_syscall_next_pc,
|
|
||||||
+ arm_get_next_pcs_addr_bits_remove,
|
|
||||||
+ arm_get_next_pcs_is_thumb,
|
|
||||||
+ NULL,
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+static CORE_ADDR
|
|
||||||
+arm_3ds_get_next_pcs_syscall_next_pc (struct arm_get_next_pcs *self)
|
|
||||||
+{
|
|
||||||
+ CORE_ADDR next_pc = 0;
|
|
||||||
+ CORE_ADDR pc = regcache_read_pc (self->regcache);
|
|
||||||
+ int is_thumb = arm_is_thumb (self->regcache);
|
|
||||||
+ ULONGEST svc_number = 0;
|
|
||||||
+
|
|
||||||
+ if (is_thumb)
|
|
||||||
+ {
|
|
||||||
+ next_pc = pc + 2;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ next_pc = pc + 4;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Addresses for calling Thumb functions have the bit 0 set. */
|
|
||||||
+ if (is_thumb)
|
|
||||||
+ next_pc = MAKE_THUMB_ADDR (next_pc);
|
|
||||||
+
|
|
||||||
+ 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)
|
|
||||||
+{
|
|
||||||
+ struct regcache *regs = get_thread_regcache (ptid);
|
|
||||||
+
|
|
||||||
+ ULONGEST pc;
|
|
||||||
+ ULONGEST cpsr;
|
|
||||||
+ ULONGEST t_bit = arm_psr_thumb_bit (gdbarch);
|
|
||||||
+ int is_thumb;
|
|
||||||
+ ULONGEST svc_number = -1;
|
|
||||||
+
|
|
||||||
+ regcache_cooked_read_unsigned (regs, ARM_PC_REGNUM, &pc);
|
|
||||||
+ regcache_cooked_read_unsigned (regs, ARM_PS_REGNUM, &cpsr);
|
|
||||||
+ is_thumb = (cpsr & t_bit) != 0;
|
|
||||||
+
|
|
||||||
+ if (is_thumb)
|
|
||||||
+ {
|
|
||||||
+ enum bfd_endian byte_order_for_code =
|
|
||||||
+ gdbarch_byte_order_for_code (gdbarch);
|
|
||||||
+
|
|
||||||
+ /* PC gets incremented before the syscall-stop, so read the
|
|
||||||
+ previous instruction. */
|
|
||||||
+ unsigned long this_instr =
|
|
||||||
+ read_memory_unsigned_integer (pc - 2, 2, byte_order_for_code);
|
|
||||||
+
|
|
||||||
+ unsigned long svc_operand = (0x00ff & this_instr);
|
|
||||||
+ svc_number = svc_operand;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ enum bfd_endian byte_order_for_code =
|
|
||||||
+ gdbarch_byte_order_for_code (gdbarch);
|
|
||||||
+
|
|
||||||
+ /* PC gets incremented before the syscall-stop, so read the
|
|
||||||
+ previous instruction. */
|
|
||||||
+ unsigned long this_instr =
|
|
||||||
+ read_memory_unsigned_integer (pc - 4, 4, byte_order_for_code);
|
|
||||||
+
|
|
||||||
+ unsigned long svc_operand = (0x000000ff & this_instr);
|
|
||||||
+ svc_number = svc_operand;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (svc_number == 0xfe)
|
|
||||||
+ {
|
|
||||||
+ regcache_cooked_read_unsigned (regs, 12, &svc_number);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return svc_number;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+arm_3ds_init_abi (struct gdbarch_info info,
|
|
||||||
+ struct gdbarch *gdbarch)
|
|
||||||
+{
|
|
||||||
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
|
||||||
+
|
|
||||||
+ switch (info.byte_order)
|
|
||||||
+ {
|
|
||||||
+ case BFD_ENDIAN_LITTLE:
|
|
||||||
+ tdep->arm_breakpoint = arm_3ds_arm_le_breakpoint;
|
|
||||||
+ tdep->thumb_breakpoint = arm_3ds_thumb_le_breakpoint;
|
|
||||||
+ tdep->arm_breakpoint_size = sizeof (arm_3ds_arm_le_breakpoint);
|
|
||||||
+ tdep->thumb_breakpoint_size = sizeof (arm_3ds_thumb_le_breakpoint);
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ default:
|
|
||||||
+ internal_error (__FILE__, __LINE__,
|
|
||||||
+ _("arm_gdbarch_init: bad byte order"));
|
|
||||||
+ }
|
|
||||||
+ tdep->fp_model = ARM_FLOAT_VFP;
|
|
||||||
+
|
|
||||||
+ /* Single stepping. */
|
|
||||||
+ set_gdbarch_software_single_step (gdbarch, arm_3ds_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 --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 = \
|
|
||||||
sparc-linux.xml \
|
|
||||||
sparc64-linux.xml
|
|
||||||
|
|
||||||
-SYSCALLS_FILES = gdb-syscalls.dtd freebsd.xml $(GEN_SYSCALLS_FILES)
|
|
||||||
+SYSCALLS_FILES = gdb-syscalls.dtd freebsd.xml arm-3ds.xml $(GEN_SYSCALLS_FILES)
|
|
||||||
|
|
||||||
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
|
|
||||||
GDB_OSABI_LYNXOS178,
|
|
||||||
GDB_OSABI_NEWLIB,
|
|
||||||
GDB_OSABI_SDE,
|
|
||||||
+ GDB_OSABI_3DS,
|
|
||||||
|
|
||||||
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[] =
|
|
||||||
{ "LynxOS178", NULL },
|
|
||||||
{ "Newlib", NULL },
|
|
||||||
{ "SDE", NULL },
|
|
||||||
+ { "3DS", NULL },
|
|
||||||
|
|
||||||
{ "<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
|
|
||||||
@@ -0,0 +1,159 @@
|
|
||||||
+<?xml version="1.0"?>
|
|
||||||
+<!DOCTYPE syscalls_info SYSTEM "gdb-syscalls.dtd">
|
|
||||||
+<!-- This file is located inside GDB and is based on files which license are: -->
|
|
||||||
+<!-- Copyright (C) 2009-2017 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ Copying and distribution of this file, with or without modification,
|
|
||||||
+ are permitted in any medium without royalty provided the copyright
|
|
||||||
+ notice and this notice are preserved. This file is offered as-is,
|
|
||||||
+ without any warranty. -->
|
|
||||||
+<syscalls_info>
|
|
||||||
+ <syscall name="ControlMemory" number="1" groups="memory"/>
|
|
||||||
+ <syscall name="QueryMemory" number="2" groups="memory"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="ExitProcess" number="3" groups="process"/>
|
|
||||||
+ <syscall name="GetProcessAffinityMask" number="4" groups="process"/>
|
|
||||||
+ <syscall name="SetProcessAffinityMask" number="5" groups="process"/>
|
|
||||||
+ <syscall name="GetProcessIdealProcessor" number="6" groups="process"/>
|
|
||||||
+ <syscall name="SetProcessIdealProcessor" number="7" groups="process"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="CreateThread" number="8" groups="thread"/>
|
|
||||||
+ <syscall name="ExitThread" number="9" groups="thread"/>
|
|
||||||
+ <syscall name="SleepThread" number="10" groups="thread"/>
|
|
||||||
+ <syscall name="GetThreadPriority" number="11" groups="thread"/>
|
|
||||||
+ <syscall name="SetThreadPriority" number="12" groups="thread"/>
|
|
||||||
+ <syscall name="GetThreadAffinityMask" number="13" groups="thread"/>
|
|
||||||
+ <syscall name="SetThreadAffinityMask" number="14" groups="thread"/> <!-- removed -->
|
|
||||||
+ <syscall name="GetThreadIdealProcessor" number="15" groups="thread"/>
|
|
||||||
+ <syscall name="SetThreadIdealProcessor" number="16" groups="thread"/> <!-- removed -->
|
|
||||||
+ <syscall name="GetCurrentProcessorNumber" number="17" groups="thread"/>
|
|
||||||
+ <syscall name="Run" number="18" groups="thread"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="CreateMutex" number="19" groups="synchronization"/>
|
|
||||||
+ <syscall name="ReleaseMutex" number="20" groups="synchronization"/>
|
|
||||||
+ <syscall name="CreateSemaphore" number="21" groups="synchronization"/>
|
|
||||||
+ <syscall name="ReleaseSemaphore" number="22" groups="synchronization"/>
|
|
||||||
+ <syscall name="CreateEvent" number="23" groups="synchronization"/>
|
|
||||||
+ <syscall name="SignalEvent" number="24" groups="synchronization"/>
|
|
||||||
+ <syscall name="ClearEvent" number="25" groups="synchronization"/>
|
|
||||||
+ <syscall name="CreateTimer" number="26" groups="synchronization"/>
|
|
||||||
+ <syscall name="SetTimer" number="27" groups="synchronization"/>
|
|
||||||
+ <syscall name="CancelTimer" number="28" groups="synchronization"/>
|
|
||||||
+ <syscall name="ClearTimer" number="29" groups="synchronization"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="CreateMemoryBlock" number="30" groups="memory,ipc"/>
|
|
||||||
+ <syscall name="MapMemoryBlock" number="31" groups="memory,ipc"/>
|
|
||||||
+ <syscall name="UnmapMemoryBlock" number="32" groups="memory,ipc"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="CreateAddressArbiter" number="33" groups="memory,synchronization"/>
|
|
||||||
+ <syscall name="ArbitrateAddress" number="34" groups="memory,synchronization"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="CloseHandle" number="35" groups="synchronization,ipc,memory,thread,process,debug"/>
|
|
||||||
+ <syscall name="WaitSynchronization" number="36" groups="synchronization,ipc,thread,process,debug"/>
|
|
||||||
+ <syscall name="WaitSynchronizationN" number="37" groups="synchronization,ipc,thread,process,debug"/>
|
|
||||||
+ <syscall name="SignalAndWait" number="38" groups="synchronization"/> <!-- removed -->
|
|
||||||
+ <syscall name="DuplicateHandle" number="39" groups="synchronization,ipc,memory,thread,process,debug"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="GetSystemTick" number="40" groups="information"/>
|
|
||||||
+ <syscall name="GetHandleInfo" number="41" groups="information,synchronization,ipc,memory,thread,process,debug"/>
|
|
||||||
+ <syscall name="GetSystemInfo" number="42" groups="information"/>
|
|
||||||
+ <syscall name="GetProcessInfo" number="43" groups="information,process"/>
|
|
||||||
+ <syscall name="GetThreadInfo" number="44" groups="information,thread"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="ConnectToPort" number="45" groups="ipc"/>
|
|
||||||
+ <syscall name="GetCFWInfo" number="46" groups="custom,information"/> <!-- deprecated -->
|
|
||||||
+ <syscall name="SendSyncRequest2" number="47" groups="ipc"/> <!-- removed -->
|
|
||||||
+ <syscall name="SendSyncRequest3" number="48" groups="ipc"/> <!-- removed -->
|
|
||||||
+ <syscall name="SendSyncRequest4" number="49" groups="ipc"/> <!-- removed -->
|
|
||||||
+ <syscall name="SendSyncRequest" number="50" groups="ipc"/> <!-- removed -->
|
|
||||||
+
|
|
||||||
+ <syscall name="OpenProcess" number="51" groups="process"/>
|
|
||||||
+ <syscall name="OpenThread" number="52" groups="thread"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="GetProcessId" number="53" groups="process"/>
|
|
||||||
+ <syscall name="GetProcessIdOfThread" number="54" groups="process,thread"/>
|
|
||||||
+ <syscall name="GetThreadId" number="55" groups="thread"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="GetResourceLimit" number="56" groups="process"/>
|
|
||||||
+ <syscall name="GetResourceLimitLimitValues" number="57" groups="process"/>
|
|
||||||
+ <syscall name="GetResourceLimitCurrentValues" number="58" groups="process"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="GetThreadContext" number="59" groups="debug,thread"/> <!-- removed -->
|
|
||||||
+ <syscall name="Break" number="60" groups="debug"/>
|
|
||||||
+ <syscall name="OutputDebugString" number="61" groups="debug"/>
|
|
||||||
+ <syscall name="ControlPerformanceCounter" number="62" groups="debug"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="CreatePort" number="71" groups="ipc"/>
|
|
||||||
+ <syscall name="CreateSessionToPort" number="72" groups="ipc"/>
|
|
||||||
+ <syscall name="CreateSession" number="73" groups="ipc"/>
|
|
||||||
+ <syscall name="AcceptSession" number="74" groups="ipc"/>
|
|
||||||
+ <syscall name="ReplyAndReceive1" number="75" groups="ipc"/>
|
|
||||||
+ <syscall name="ReplyAndReceive2" number="76" groups="ipc"/>
|
|
||||||
+ <syscall name="ReplyAndReceive3" number="77" groups="ipc"/>
|
|
||||||
+ <syscall name="ReplyAndReceive4" number="78" groups="ipc"/>
|
|
||||||
+ <syscall name="ReplyAndReceive" number="79" groups="ipc"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="BindInterrupt" number="80" groups="io,synchronization"/>
|
|
||||||
+ <syscall name="UnbindInterrupt" number="81" groups="io,synchronization"/>
|
|
||||||
+ <syscall name="InvalidateProcessDataCache" number="82" groups="io,memory,process"/>
|
|
||||||
+ <syscall name="StoreProcessDataCache" number="83" groups="io,memory,process"/>
|
|
||||||
+ <syscall name="FlushProcessDataCache" number="84" groups="io,memory,process"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="StartInterprocessDma" number="85" groups="io,memory,ipc"/>
|
|
||||||
+ <syscall name="StopDma" number="86" groups="io,memory,ipc"/>
|
|
||||||
+ <syscall name="GetDmaState" number="87" groups="io,memory,ipc"/>
|
|
||||||
+ <syscall name="RestartDma" number="88" groups="io,memory,ipc"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="SetGpuProt" number="89" groups="io"/>
|
|
||||||
+ <syscall name="SetWifiEnabled" number="90" groups="io"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="DebugActiveProcess" number="96" groups="debug,process"/>
|
|
||||||
+ <syscall name="BreakDebugProcess" number="97" groups="debug,process"/>
|
|
||||||
+ <syscall name="TerminateDebugProcess" number="98" groups="debug,process"/>
|
|
||||||
+ <syscall name="GetProcessDebugEvent" number="99" groups="debug"/>
|
|
||||||
+ <syscall name="ContinueDebugEvent" number="100" groups="debug"/>
|
|
||||||
+ <syscall name="GetProcessList" number="101" groups="information,debug,process"/>
|
|
||||||
+ <syscall name="GetThreadList" number="102" groups="information,debug,thread"/>
|
|
||||||
+ <syscall name="GetDebugThreadContext" number="103" groups="debug,thread"/>
|
|
||||||
+ <syscall name="SetDebugThreadContext" number="104" groups="debug,thread"/>
|
|
||||||
+ <syscall name="QueryDebugProcessMemory" number="105" groups="debug,process,memory"/>
|
|
||||||
+ <syscall name="ReadProcessMemory" number="106" groups="debug,process,memory"/>
|
|
||||||
+ <syscall name="WriteProcessMemory" number="107" groups="debug,process,memory"/>
|
|
||||||
+ <syscall name="SetHardwareBreakPoint" number="108" group="debug"/>
|
|
||||||
+ <syscall name="GetDebugThreadParam" number="109" group="debug,thread"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="ControlProcessMemory" number="112" group="process,memory"/>
|
|
||||||
+ <syscall name="MapProcessMemory" number="113" group="process,memory"/>
|
|
||||||
+ <syscall name="UnmapProcessMemory" number="114" group="process,memory"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="CreateCodeSet" number="115" group="process,memory"/>
|
|
||||||
+ <syscall name="RandomStub" number="116" group="process,memory"/> <!-- removed -->
|
|
||||||
+ <syscall name="CreateProcess" number="117" group="process"/>
|
|
||||||
+ <syscall name="TerminateProcess" number="118" group="process"/>
|
|
||||||
+ <syscall name="SetProcessResourceLimits" number="119" group="process"/>
|
|
||||||
+ <syscall name="CreateResourceLimit" number="120" group="process"/>
|
|
||||||
+ <syscall name="SetResourceLimitValues" number="121" group="process"/>
|
|
||||||
+ <syscall name="AddCodeSegment" number="122" group="process"/> <!-- removed -->
|
|
||||||
+
|
|
||||||
+ <syscall name="Backdoor" number="123" group="kernel"/>
|
|
||||||
+ <syscall name="KernelSetState" number="124" group="kernel"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="QueryProcessMemory" number="125" group="process,memory"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="CustomBackdoor" number="128" group="custom,kernel"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="ConvertVAToPA" number="144" group="custom,io,memory"/>
|
|
||||||
+ <syscall name="FlushDataCacheRange" number="145" group="custom,io,memory"/>
|
|
||||||
+ <syscall name="FlushEntireDataCache" number="146" group="custom,io,memory"/>
|
|
||||||
+ <syscall name="InvalidateInstructionCacheRange" number="147" group="custom,io,memory"/>
|
|
||||||
+ <syscall name="InvalidateEntireInstructionCache" number="148" group="custom,io,memory"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="MapProcessMemoryEx" number="160" group="custom,process,memory"/>
|
|
||||||
+ <syscall name="UnmapProcessMemoryEx" number="161" group="custom,process,memory"/>
|
|
||||||
+ <syscall name="ControlMemoryEx" number="162" group="custom,memory"/>
|
|
||||||
+
|
|
||||||
+ <syscall name="ControlService" number="176" group="custom,ipc"/>
|
|
||||||
+ <syscall name="CopyHandle" number="177" groups="custom,synchronization,ipc,thread,process,debug"/>
|
|
||||||
+ <syscall name="TranslateHandle" number="178" groups="custom,synchronization,ipc,thread,process,debug"/>
|
|
||||||
+
|
|
||||||
+</syscalls_info>
|
|
||||||
|
|
||||||
7367
dkarm-eabi/patches/newlib-1.20.0.patch
Normal file
7367
dkarm-eabi/patches/newlib-1.20.0.patch
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,41 +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)/armv6k $(PORTLIBS_PATH)/3ds
|
|
||||||
|
|
||||||
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)
|
|
||||||
@@ -1,10 +1,36 @@
|
|||||||
include $(DEVKITARM)/base_tools
|
#---------------------------------------------------------------------------------
|
||||||
|
# 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
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
export PORTLIBS := $(DEVKITPRO)/portlibs/arm
|
||||||
|
export PATH := $(DEVKITARM)/bin:$(PORTLIBS)/bin:$(PATH)
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# add portlibs path
|
# the prefix on the compiler executables
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
export PORTLIBS_PATH := $(DEVKITPRO)/portlibs
|
PREFIX := arm-eabi-
|
||||||
|
|
||||||
|
export CC := $(PREFIX)gcc
|
||||||
|
export CXX := $(PREFIX)g++
|
||||||
|
export AS := $(PREFIX)as
|
||||||
|
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
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
%.a:
|
%.a:
|
||||||
@@ -17,7 +43,7 @@ export PORTLIBS_PATH := $(DEVKITPRO)/portlibs
|
|||||||
%.arm.o: %.arm.cpp
|
%.arm.o: %.arm.cpp
|
||||||
@echo $(notdir $<)
|
@echo $(notdir $<)
|
||||||
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.arm.d $(CXXFLAGS) -marm -c $< -o $@ $(ERROR_FILTER)
|
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.arm.d $(CXXFLAGS) -marm -c $< -o $@ $(ERROR_FILTER)
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
%.arm.o: %.arm.c
|
%.arm.o: %.arm.c
|
||||||
@echo $(notdir $<)
|
@echo $(notdir $<)
|
||||||
@@ -32,7 +58,7 @@ export PORTLIBS_PATH := $(DEVKITPRO)/portlibs
|
|||||||
%.thumb.o: %.thumb.cpp
|
%.thumb.o: %.thumb.cpp
|
||||||
@echo $(notdir $<)
|
@echo $(notdir $<)
|
||||||
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.thumb.d $(CXXFLAGS) -mthumb -c $< -o $@ $(ERROR_FILTER)
|
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.thumb.d $(CXXFLAGS) -mthumb -c $< -o $@ $(ERROR_FILTER)
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
%.thumb.o: %.thumb.c
|
%.thumb.o: %.thumb.c
|
||||||
@echo $(notdir $<)
|
@echo $(notdir $<)
|
||||||
@@ -47,7 +73,7 @@ export PORTLIBS_PATH := $(DEVKITPRO)/portlibs
|
|||||||
%.iwram.o: %.iwram.cpp
|
%.iwram.o: %.iwram.cpp
|
||||||
@echo $(notdir $<)
|
@echo $(notdir $<)
|
||||||
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.iwram.d $(CXXFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
|
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.iwram.d $(CXXFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
%.iwram.o: %.iwram.c
|
%.iwram.o: %.iwram.c
|
||||||
@echo $(notdir $<)
|
@echo $(notdir $<)
|
||||||
@@ -62,7 +88,7 @@ export PORTLIBS_PATH := $(DEVKITPRO)/portlibs
|
|||||||
%.itcm.o: %.itcm.cpp
|
%.itcm.o: %.itcm.cpp
|
||||||
@echo $(notdir $<)
|
@echo $(notdir $<)
|
||||||
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.itcm.d $(CXXFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
|
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.itcm.d $(CXXFLAGS) -marm -mlong-calls -c $< -o $@ $(ERROR_FILTER)
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
%.itcm.o: %.itcm.c
|
%.itcm.o: %.itcm.c
|
||||||
@echo $(notdir $<)
|
@echo $(notdir $<)
|
||||||
@@ -78,7 +104,7 @@ export PORTLIBS_PATH := $(DEVKITPRO)/portlibs
|
|||||||
%.o: %.cpp
|
%.o: %.cpp
|
||||||
@echo $(notdir $<)
|
@echo $(notdir $<)
|
||||||
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
$(CXX) -MMD -MP -MF $(DEPSDIR)/$*.d $(CXXFLAGS) -c $< -o $@ $(ERROR_FILTER)
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
%.o: %.c
|
%.o: %.c
|
||||||
@echo $(notdir $<)
|
@echo $(notdir $<)
|
||||||
|
|||||||
@@ -1,33 +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
|
|
||||||
#---------------------------------------------------------------------------------
|
|
||||||
export PATH := $(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
|
|
||||||
@@ -4,20 +4,18 @@ endif
|
|||||||
|
|
||||||
include $(DEVKITARM)/base_rules
|
include $(DEVKITARM)/base_rules
|
||||||
|
|
||||||
PORTLIBS := $(PORTLIBS_PATH)/nds $(PORTLIBS_PATH)/armv5te
|
LIBNDS := $(DEVKITPRO)/libnds
|
||||||
|
|
||||||
LIBNDS := $(DEVKITPRO)/libnds
|
|
||||||
|
|
||||||
ifeq ($(strip $(GAME_TITLE)),)
|
ifeq ($(strip $(GAME_TITLE)),)
|
||||||
GAME_TITLE := $(notdir $(OUTPUT))
|
GAME_TITLE := $(notdir $(OUTPUT))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(strip $(GAME_SUBTITLE1)),)
|
ifeq ($(strip $(GAME_SUBTITLE1)),)
|
||||||
GAME_SUBTITLE1 := built with devkitARM
|
GAME_SUBTITLE1 := www.devkitpro.org
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(strip $(GAME_SUBTITLE2)),)
|
ifeq ($(strip $(GAME_SUBTITLE2)),)
|
||||||
GAME_SUBTITLE2 := http://devkitpro.org
|
GAME_SUBTITLE2 := www.drunkencoders.com
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(strip $(GAME_ICON)),)
|
ifeq ($(strip $(GAME_ICON)),)
|
||||||
@@ -42,7 +40,7 @@ endif
|
|||||||
%.arm9: %.elf
|
%.arm9: %.elf
|
||||||
@$(OBJCOPY) -O binary $< $@
|
@$(OBJCOPY) -O binary $< $@
|
||||||
@echo built ... $(notdir $@)
|
@echo built ... $(notdir $@)
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
%.arm7: %.elf
|
%.arm7: %.elf
|
||||||
@$(OBJCOPY) -O binary $< $@
|
@$(OBJCOPY) -O binary $< $@
|
||||||
|
|||||||
@@ -4,8 +4,6 @@ endif
|
|||||||
|
|
||||||
include $(DEVKITARM)/base_rules
|
include $(DEVKITARM)/base_rules
|
||||||
|
|
||||||
PORTLIBS := $(PORTLIBS_PATH)/gba $(PORTLIBS_PATH)/armv4
|
|
||||||
|
|
||||||
LIBGBA := $(DEVKITPRO)/libgba
|
LIBGBA := $(DEVKITPRO)/libgba
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
-include $(DEVKITARM)/base_rules
|
-include $(DEVKITARM)/base_rules
|
||||||
|
|
||||||
PORTLIBS := $(PORTLIBS_PATH)/gp32 $(PORTLIBS_PATH)/armv4
|
|
||||||
|
|
||||||
LIBMIRKO := $(DEVKITPRO)/libmirko
|
LIBMIRKO := $(DEVKITPRO)/libmirko
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ cp -v $BUILDSCRIPTDIR/dkarm-eabi/rules/* $prefix
|
|||||||
# Install and build the gba crt
|
# Install and build the gba crt
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
cp -v $BUILDSCRIPTDIR/dkarm-eabi/crtls/* $prefix/$target/lib/
|
cp -v $BUILDSCRIPTDIR/dkarm-eabi/crtls/* $prefix/arm-eabi/lib/
|
||||||
cd $prefix/$target/lib/
|
cd $prefix/arm-eabi/lib/
|
||||||
$MAKE CRT=gba
|
$MAKE CRT=gba
|
||||||
$MAKE CRT=gp32
|
$MAKE CRT=gp32
|
||||||
$MAKE CRT=er
|
$MAKE CRT=er
|
||||||
@@ -21,26 +21,12 @@ $MAKE CRT=gp32_gpsdk
|
|||||||
$MAKE CRT=ds_arm7
|
$MAKE CRT=ds_arm7
|
||||||
$MAKE CRT=ds_arm9
|
$MAKE CRT=ds_arm9
|
||||||
$MAKE CRT=ds_cart
|
$MAKE CRT=ds_cart
|
||||||
$MAKE ds_arm7_vram_crt0
|
|
||||||
$MAKE 3dsx_crt0
|
|
||||||
|
|
||||||
cd $BUILDDIR/libgba-$LIBGBA_VER
|
|
||||||
$MAKE || { echo "error building libgba"; exit 1; }
|
|
||||||
$MAKE install || { echo "error installing libgba"; exit 1; }
|
|
||||||
|
|
||||||
cd $BUILDDIR/libnds-$LIBNDS_VER
|
cd $BUILDDIR/libnds-$LIBNDS_VER
|
||||||
$MAKE || { echo "error building libnds"; exit 1; }
|
$MAKE || { echo "error building libnds"; exit 1; }
|
||||||
$MAKE install || { echo "error installing libnds"; exit 1; }
|
$MAKE install || { echo "error installing libnds"; exit 1; }
|
||||||
|
|
||||||
cd $BUILDDIR/dswifi-$DSWIFI_VER
|
cd $BUILDDIR/default-arm7-$DEFAULT_ARM7_VER
|
||||||
$MAKE || { echo "error building dswifi"; exit 1; }
|
|
||||||
$MAKE install || { echo "error installing dswifi"; exit 1; }
|
|
||||||
|
|
||||||
cd $BUILDDIR/maxmod-$MAXMOD_VER
|
|
||||||
$MAKE || { echo "error building maxmod"; exit 1; }
|
|
||||||
$MAKE install || { echo "error installing maxmod"; exit 1; }
|
|
||||||
|
|
||||||
cd $BUILDDIR/default_arm7-$DEFAULT_ARM7_VER
|
|
||||||
$MAKE || { echo "error building default arm7"; exit 1; }
|
$MAKE || { echo "error building default arm7"; exit 1; }
|
||||||
$MAKE install || { echo "error installing default arm7"; exit 1; }
|
$MAKE install || { echo "error installing default arm7"; exit 1; }
|
||||||
|
|
||||||
@@ -48,19 +34,14 @@ cd $BUILDDIR/libfat-$LIBFAT_VER
|
|||||||
$MAKE nds-install || { echo "error building nds libfat"; exit 1; }
|
$MAKE nds-install || { echo "error building nds libfat"; exit 1; }
|
||||||
$MAKE gba-install || { echo "error installing gba libfat"; exit 1; }
|
$MAKE gba-install || { echo "error installing gba libfat"; exit 1; }
|
||||||
|
|
||||||
#cd $BUILDDIR/libmirko-$LIBMIRKO_VER
|
cd $BUILDDIR/maxmod-$MAXMOD_VER
|
||||||
#$MAKE || { echo "error building libmirko"; exit 1; }
|
$MAKE || { echo "error building maxmod"; exit 1; }
|
||||||
#$MAKE install || { echo "error installing libmirko"; exit 1; }
|
$MAKE install || { echo "error installing maxmod"; exit 1; }
|
||||||
|
|
||||||
|
cd $BUILDDIR/libmirko-$LIBMIRKO_VER
|
||||||
|
$MAKE || { echo "error building libmirko"; exit 1; }
|
||||||
|
$MAKE install || { echo "error installing libmirko"; exit 1; }
|
||||||
|
|
||||||
cd $BUILDDIR/libfilesystem-$FILESYSTEM_VER
|
cd $BUILDDIR/libfilesystem-$FILESYSTEM_VER
|
||||||
$MAKE || { echo "error building libfilesystem"; exit 1; }
|
$MAKE || { echo "error building libfilesystem"; exit 1; }
|
||||||
$MAKE install || { echo "error installing libfilesystem"; exit 1; }
|
$MAKE install || { echo "error installing libfilesystem"; exit 1; }
|
||||||
|
|
||||||
cd $BUILDDIR/libctru-$LIBCTRU_VER
|
|
||||||
$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; }
|
|
||||||
|
|
||||||
|
|||||||
38
dkarm-eabi/scripts/build-gcc.sh
Executable file → Normal file
38
dkarm-eabi/scripts/build-gcc.sh
Executable file → Normal file
@@ -11,7 +11,7 @@ cd $target/binutils
|
|||||||
if [ ! -f configured-binutils ]
|
if [ ! -f configured-binutils ]
|
||||||
then
|
then
|
||||||
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \
|
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \
|
||||||
--prefix=$prefix --target=$target --disable-nls --disable-werror \
|
--prefix=$prefix --target=$target --disable-nls --disable-dependency-tracking --disable-werror \
|
||||||
--enable-lto --enable-plugins --enable-poison-system-directories \
|
--enable-lto --enable-plugins --enable-poison-system-directories \
|
||||||
$CROSS_PARAMS \
|
$CROSS_PARAMS \
|
||||||
|| { echo "Error configuring binutils"; exit 1; }
|
|| { echo "Error configuring binutils"; exit 1; }
|
||||||
@@ -34,26 +34,18 @@ cd $BUILDDIR
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# build and install just the c compiler
|
# build and install just the c compiler
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
mkdir -p $target/gcc
|
mkdir -p $target/gcc-stage1
|
||||||
cd $target/gcc
|
cd $target/gcc-stage1
|
||||||
|
|
||||||
if [ ! -f configured-gcc ]
|
if [ ! -f configured-gcc ]
|
||||||
then
|
then
|
||||||
CFLAGS="$cflags" \
|
CFLAGS="$cflags" LDFLAGS="$ldflags" CFLAGS_FOR_TARGET="-O2" LDFLAGS_FOR_TARGET="" ../../gcc-$GCC_VER/configure \
|
||||||
CXXFLAGS="$cflags" \
|
--enable-languages=c,c++,objc,obj-c++ \
|
||||||
LDFLAGS="$ldflags" \
|
|
||||||
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
|
||||||
CXXFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
|
||||||
LDFLAGS_FOR_TARGET="" \
|
|
||||||
../../gcc-$GCC_VER/configure \
|
|
||||||
--enable-languages=c,c++ \
|
|
||||||
--with-gnu-as --with-gnu-ld --with-gcc \
|
|
||||||
--with-march=armv4t\
|
--with-march=armv4t\
|
||||||
--enable-cxx-flags='-ffunction-sections' \
|
|
||||||
--disable-libstdcxx-verbose \
|
|
||||||
--enable-poison-system-directories \
|
--enable-poison-system-directories \
|
||||||
--enable-interwork --enable-multilib \
|
--enable-interwork --enable-multilib \
|
||||||
--enable-threads --disable-win32-registry --disable-nls --disable-debug\
|
--disable-dependency-tracking \
|
||||||
|
--disable-threads --disable-win32-registry --disable-nls --disable-debug\
|
||||||
--disable-libmudflap --disable-libssp --disable-libgomp \
|
--disable-libmudflap --disable-libssp --disable-libgomp \
|
||||||
--disable-libstdcxx-pch \
|
--disable-libstdcxx-pch \
|
||||||
--target=$target \
|
--target=$target \
|
||||||
@@ -61,8 +53,7 @@ then
|
|||||||
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
|
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
|
||||||
--prefix=$prefix \
|
--prefix=$prefix \
|
||||||
--enable-lto $plugin_ld\
|
--enable-lto $plugin_ld\
|
||||||
--with-system-zlib \
|
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 39" \
|
||||||
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitARM release 47" \
|
|
||||||
$CROSS_PARAMS \
|
$CROSS_PARAMS \
|
||||||
|| { echo "Error configuring gcc"; exit 1; }
|
|| { echo "Error configuring gcc"; exit 1; }
|
||||||
touch configured-gcc
|
touch configured-gcc
|
||||||
@@ -92,11 +83,10 @@ cd $target/newlib
|
|||||||
|
|
||||||
if [ ! -f configured-newlib ]
|
if [ ! -f configured-newlib ]
|
||||||
then
|
then
|
||||||
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
CFLAGS_FOR_TARGET="-DREENTRANT_SYSCALLS_PROVIDED -D__DEFAULT_UTF8__ -O2" ../../newlib-$NEWLIB_VER/configure \
|
||||||
../../newlib-$NEWLIB_VER/configure \
|
|
||||||
--disable-newlib-supplied-syscalls \
|
--disable-newlib-supplied-syscalls \
|
||||||
--enable-newlib-mb \
|
--enable-newlib-mb \
|
||||||
--disable-newlib-wide-orient \
|
--enable-newlib-io-long-long \
|
||||||
--target=$target \
|
--target=$target \
|
||||||
--prefix=$prefix \
|
--prefix=$prefix \
|
||||||
|| { echo "Error configuring newlib"; exit 1; }
|
|| { echo "Error configuring newlib"; exit 1; }
|
||||||
@@ -112,7 +102,7 @@ fi
|
|||||||
|
|
||||||
if [ ! -f installed-newlib ]
|
if [ ! -f installed-newlib ]
|
||||||
then
|
then
|
||||||
$MAKE install -j1 || { echo "Error installing newlib"; exit 1; }
|
$MAKE install || { echo "Error installing newlib"; exit 1; }
|
||||||
touch installed-newlib
|
touch installed-newlib
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -150,11 +140,9 @@ PLATFORM=`uname -s`
|
|||||||
|
|
||||||
if [ ! -f configured-gdb ]
|
if [ ! -f configured-gdb ]
|
||||||
then
|
then
|
||||||
CFLAGS="$cflags" \
|
CFLAGS="$cflags" LDFLAGS="$ldflags" ../../gdb-$GDB_VER/configure \
|
||||||
CXXFLAGS="$cflags" \
|
|
||||||
LDFLAGS="$ldflags" \
|
|
||||||
../../gdb-$GDB_VER/configure \
|
|
||||||
--disable-nls --prefix=$prefix --target=$target --disable-werror \
|
--disable-nls --prefix=$prefix --target=$target --disable-werror \
|
||||||
|
--disable-dependency-tracking \
|
||||||
$CROSS_PARAMS \
|
$CROSS_PARAMS \
|
||||||
|| { echo "Error configuring gdb"; exit 1; }
|
|| { echo "Error configuring gdb"; exit 1; }
|
||||||
touch configured-gdb
|
touch configured-gdb
|
||||||
|
|||||||
4
dkarm-eabi/scripts/build-tools.sh
Executable file → Normal file
4
dkarm-eabi/scripts/build-tools.sh
Executable file → Normal file
@@ -10,11 +10,11 @@ do
|
|||||||
touch configured
|
touch configured
|
||||||
fi
|
fi
|
||||||
if [ ! -f built ]; then
|
if [ ! -f built ]; then
|
||||||
$MAKE || { echo "error building $dir"; exit 1; }
|
$MAKE || { echo "error building $archive"; exit 1; }
|
||||||
touch built
|
touch built
|
||||||
fi
|
fi
|
||||||
if [ ! -f installed ]; then
|
if [ ! -f installed ]; then
|
||||||
$MAKE install || { echo "error installing $dir"; exit 1; }
|
$MAKE install || { echo "error installing $archive"; exit 1; }
|
||||||
touch installed
|
touch installed
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -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 . */
|
|
||||||
}
|
|
||||||
149
dkppc/patches/binutils-2.22.patch
Normal file
149
dkppc/patches/binutils-2.22.patch
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
diff -Nbaur binutils-2.22/bfd/bfd-in2.h binutils-2.22-ppc/bfd/bfd-in2.h
|
||||||
|
--- binutils-2.22/bfd/bfd-in2.h 2011-09-16 02:15:18.000000000 +0100
|
||||||
|
+++ binutils-2.22-ppc/bfd/bfd-in2.h 2012-04-03 15:06:10.000000000 +0100
|
||||||
|
@@ -38,6 +38,8 @@
|
||||||
|
|
||||||
|
#include "ansidecl.h"
|
||||||
|
#include "symcat.h"
|
||||||
|
+#include <sys/stat.h>
|
||||||
|
+
|
||||||
|
#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
|
||||||
|
#ifndef SABER
|
||||||
|
/* This hack is to avoid a problem with some strict ANSI C preprocessors.
|
||||||
|
@@ -308,8 +310,6 @@
|
||||||
|
&& (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
|
||||||
|
&& (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
|
||||||
|
|
||||||
|
-/* Forward define. */
|
||||||
|
-struct stat;
|
||||||
|
|
||||||
|
typedef enum bfd_print_symbol
|
||||||
|
{
|
||||||
|
diff -Nbaur binutils-2.22/bfd/bfd-in.h binutils-2.22-ppc/bfd/bfd-in.h
|
||||||
|
--- binutils-2.22/bfd/bfd-in.h 2011-09-16 02:15:18.000000000 +0100
|
||||||
|
+++ binutils-2.22-ppc/bfd/bfd-in.h 2012-04-03 15:06:10.000000000 +0100
|
||||||
|
@@ -31,6 +31,8 @@
|
||||||
|
|
||||||
|
#include "ansidecl.h"
|
||||||
|
#include "symcat.h"
|
||||||
|
+#include <sys/stat.h>
|
||||||
|
+
|
||||||
|
#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
|
||||||
|
#ifndef SABER
|
||||||
|
/* This hack is to avoid a problem with some strict ANSI C preprocessors.
|
||||||
|
@@ -301,8 +303,6 @@
|
||||||
|
&& (sec)->sec_info_type != ELF_INFO_TYPE_MERGE \
|
||||||
|
&& (sec)->sec_info_type != ELF_INFO_TYPE_JUST_SYMS)
|
||||||
|
|
||||||
|
-/* Forward define. */
|
||||||
|
-struct stat;
|
||||||
|
|
||||||
|
typedef enum bfd_print_symbol
|
||||||
|
{
|
||||||
|
diff -Nbaur binutils-2.22/bfd/config.in binutils-2.22-ppc/bfd/config.in
|
||||||
|
--- binutils-2.22/bfd/config.in 2011-05-12 08:41:40.000000000 +0100
|
||||||
|
+++ binutils-2.22-ppc/bfd/config.in 2012-04-03 14:50:51.000000000 +0100
|
||||||
|
@@ -245,6 +245,9 @@
|
||||||
|
/* Define if <sys/procfs.h> has win32_pstatus_t. */
|
||||||
|
#undef HAVE_WIN32_PSTATUS_T
|
||||||
|
|
||||||
|
+/* Define to 1 if you have the <windows.h> header file. */
|
||||||
|
+#undef HAVE_WINDOWS_H
|
||||||
|
+
|
||||||
|
/* Define to 1 if you have the <zlib.h> header file. */
|
||||||
|
#undef HAVE_ZLIB_H
|
||||||
|
|
||||||
|
diff -Nbaur binutils-2.22/bfd/configure binutils-2.22-ppc/bfd/configure
|
||||||
|
--- binutils-2.22/bfd/configure 2011-11-21 11:55:48.000000000 +0000
|
||||||
|
+++ binutils-2.22-ppc/bfd/configure 2012-04-03 14:50:59.000000000 +0100
|
||||||
|
@@ -13508,6 +13508,22 @@
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
+
|
||||||
|
+for ac_header in windows.h dlfcn.h
|
||||||
|
+do :
|
||||||
|
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||||
|
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
|
||||||
|
+eval as_val=\$$as_ac_Header
|
||||||
|
+ if test "x$as_val" = x""yes; then :
|
||||||
|
+ cat >>confdefs.h <<_ACEOF
|
||||||
|
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
||||||
|
+_ACEOF
|
||||||
|
+
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+done
|
||||||
|
+
|
||||||
|
+
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether string.h and strings.h may both be included" >&5
|
||||||
|
$as_echo_n "checking whether string.h and strings.h may both be included... " >&6; }
|
||||||
|
if test "${gcc_cv_header_string+set}" = set; then :
|
||||||
|
diff -Nbaur binutils-2.22/bfd/configure.in binutils-2.22-ppc/bfd/configure.in
|
||||||
|
--- binutils-2.22/bfd/configure.in 2011-11-21 11:55:46.000000000 +0000
|
||||||
|
+++ binutils-2.22-ppc/bfd/configure.in 2012-04-03 14:51:23.000000000 +0100
|
||||||
|
@@ -190,6 +190,9 @@
|
||||||
|
GCC_HEADER_STDINT(bfd_stdint.h)
|
||||||
|
AC_HEADER_TIME
|
||||||
|
AC_HEADER_DIRENT
|
||||||
|
+
|
||||||
|
+AC_CHECK_HEADERS(windows.h dlfcn.h)
|
||||||
|
+
|
||||||
|
ACX_HEADER_STRING
|
||||||
|
AC_CHECK_FUNCS(fcntl getpagesize setitimer sysconf fdopen getuid getgid fileno)
|
||||||
|
AC_CHECK_FUNCS(strtoull)
|
||||||
|
diff -Nbaur binutils-2.22/bfd/plugin.c binutils-2.22-ppc/bfd/plugin.c
|
||||||
|
--- binutils-2.22/bfd/plugin.c 2011-07-11 16:03:07.000000000 +0100
|
||||||
|
+++ binutils-2.22-ppc/bfd/plugin.c 2012-04-03 14:51:32.000000000 +0100
|
||||||
|
@@ -25,7 +25,13 @@
|
||||||
|
#if BFD_SUPPORTS_PLUGINS
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
+#ifdef HAVE_DLFCN_H
|
||||||
|
#include <dlfcn.h>
|
||||||
|
+#elif defined (HAVE_WINDOWS_H)
|
||||||
|
+#include <windows.h>
|
||||||
|
+#else
|
||||||
|
+#error Unknown how to handle dynamic-load-libraries.
|
||||||
|
+#endif
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include "plugin-api.h"
|
||||||
|
#include "sysdep.h"
|
||||||
|
@@ -34,6 +40,37 @@
|
||||||
|
#include "libiberty.h"
|
||||||
|
#include <dirent.h>
|
||||||
|
|
||||||
|
+#if !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H)
|
||||||
|
+
|
||||||
|
+#define RTLD_NOW 0 /* Dummy value. */
|
||||||
|
+
|
||||||
|
+static void *
|
||||||
|
+dlopen (const char *file, int mode ATTRIBUTE_UNUSED)
|
||||||
|
+{
|
||||||
|
+ return LoadLibrary (file);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void *
|
||||||
|
+dlsym (void *handle, const char *name)
|
||||||
|
+{
|
||||||
|
+ return GetProcAddress (handle, name);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int ATTRIBUTE_UNUSED
|
||||||
|
+dlclose (void *handle)
|
||||||
|
+{
|
||||||
|
+ FreeLibrary (handle);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static const char *
|
||||||
|
+dlerror (void)
|
||||||
|
+{
|
||||||
|
+ return "Unable to load DLL.";
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+#endif /* !defined (HAVE_DLFCN_H) && defined (HAVE_WINDOWS_H) */
|
||||||
|
+
|
||||||
|
#define bfd_plugin_close_and_cleanup _bfd_generic_close_and_cleanup
|
||||||
|
#define bfd_plugin_bfd_free_cached_info _bfd_generic_bfd_free_cached_info
|
||||||
|
#define bfd_plugin_new_section_hook _bfd_generic_new_section_hook
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
diff -Nbaur binutils-2.27/opcodes/ppc-opc.c binutils-2.27-ppc/opcodes/ppc-opc.c
|
|
||||||
--- binutils-2.27/opcodes/ppc-opc.c 2016-08-03 08:36:54.000000000 +0100
|
|
||||||
+++ binutils-2.27-ppc/opcodes/ppc-opc.c 2016-11-08 21:37:45.360000000 +0000
|
|
||||||
@@ -3037,7 +3037,7 @@
|
|
||||||
#define MFDEC1 PPC_OPCODE_POWER
|
|
||||||
#define MFDEC2 PPC_OPCODE_PPC | PPC_OPCODE_601 | PPC_OPCODE_BOOKE | PPC_OPCODE_TITAN
|
|
||||||
#define BOOKE PPC_OPCODE_BOOKE
|
|
||||||
-#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_PPCPS | PPC_OPCODE_EFS
|
|
||||||
+#define NO371 PPC_OPCODE_BOOKE | PPC_OPCODE_EFS
|
|
||||||
#define PPCE300 PPC_OPCODE_E300
|
|
||||||
#define PPCSPE PPC_OPCODE_SPE
|
|
||||||
#define PPCISEL PPC_OPCODE_ISEL
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
diff -NBaur gcc-6.3.0/gcc/config/rs6000/rs6000.h gcc-6.3.0-ppc/gcc/config/rs6000/rs6000.h
|
diff -Nbaur gcc-4.6.3/gcc/config/rs6000/rs6000.h gcc-4.6.3-ppc/gcc/config/rs6000/rs6000.h
|
||||||
--- gcc-6.3.0/gcc/config/rs6000/rs6000.h 2016-07-07 20:42:07.000000000 +0100
|
--- gcc-4.6.3/gcc/config/rs6000/rs6000.h 2011-07-27 19:17:15.000000000 +0100
|
||||||
+++ gcc-6.3.0-ppc/gcc/config/rs6000/rs6000.h 2017-01-05 02:42:41.980000000 +0000
|
+++ gcc-4.6.3-ppc/gcc/config/rs6000/rs6000.h 2012-04-21 22:54:04.000000000 +0100
|
||||||
@@ -205,6 +205,7 @@
|
@@ -200,6 +200,7 @@
|
||||||
{ "asm_cpu_476", ASM_CPU_476_SPEC }, \
|
{ "asm_cpu_476", ASM_CPU_476_SPEC }, \
|
||||||
SUBTARGET_EXTRA_SPECS
|
SUBTARGET_EXTRA_SPECS
|
||||||
|
|
||||||
@@ -9,44 +9,42 @@ diff -NBaur gcc-6.3.0/gcc/config/rs6000/rs6000.h gcc-6.3.0-ppc/gcc/config/rs6000
|
|||||||
/* -mcpu=native handling only makes sense with compiler running on
|
/* -mcpu=native handling only makes sense with compiler running on
|
||||||
an PowerPC chip. If changing this condition, also change
|
an PowerPC chip. If changing this condition, also change
|
||||||
the condition in driver-rs6000.c. */
|
the condition in driver-rs6000.c. */
|
||||||
@@ -219,6 +220,8 @@
|
@@ -214,6 +215,8 @@
|
||||||
#else
|
#else
|
||||||
#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
|
#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
|
||||||
#endif
|
#endif
|
||||||
+#endif
|
+#endif
|
||||||
+#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
|
+#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
|
||||||
|
|
||||||
#ifndef CC1_CPU_SPEC
|
#ifndef CC1_CPU_SPEC
|
||||||
#ifdef HAVE_LOCAL_CPU_DETECT
|
#ifdef HAVE_LOCAL_CPU_DETECT
|
||||||
diff -NBaur gcc-6.3.0/gcc/config/rs6000/sysv4.h gcc-6.3.0-ppc/gcc/config/rs6000/sysv4.h
|
diff -Nbaur gcc-4.6.3/gcc/config/rs6000/sysv4.h gcc-4.6.3-ppc/gcc/config/rs6000/sysv4.h
|
||||||
--- gcc-6.3.0/gcc/config/rs6000/sysv4.h 2016-05-16 14:47:47.000000000 +0100
|
--- gcc-4.6.3/gcc/config/rs6000/sysv4.h 2011-03-07 07:50:23.000000000 +0000
|
||||||
+++ gcc-6.3.0-ppc/gcc/config/rs6000/sysv4.h 2017-01-05 02:46:27.020000000 +0000
|
+++ gcc-4.6.3-ppc/gcc/config/rs6000/sysv4.h 2012-04-21 22:54:04.000000000 +0100
|
||||||
@@ -559,7 +559,12 @@
|
@@ -603,7 +603,11 @@
|
||||||
|
|
||||||
/* Default starting address if specified. */
|
/* Default starting address if specified. */
|
||||||
#define LINK_START_SPEC "\
|
#define LINK_START_SPEC "\
|
||||||
-%{mads : %(link_start_ads) ; \
|
-%{mads : %(link_start_ads) ; \
|
||||||
+%{mgcn|mogc : %(link_start_ogc) ; \
|
+%{mgcn|mogc : %(link_start_ogc) ; \
|
||||||
+ mvgc : %(link_start_vgc) ; \
|
+ mvgc : %(link_start_vgc) ; \
|
||||||
+ mgcbios : %(link_start_gcb) ; \
|
+ mgcbios : %(link_start_gcb) ; \
|
||||||
+ mrvl : %(link_start_rvl) ; \
|
+ mrvl : %(link_start_rvl) ; \
|
||||||
+ mwup : %(link_start_wup) ; \
|
|
||||||
+ mads : %(link_start_ads) ; \
|
+ mads : %(link_start_ads) ; \
|
||||||
myellowknife : %(link_start_yellowknife) ; \
|
myellowknife : %(link_start_yellowknife) ; \
|
||||||
mmvme : %(link_start_mvme) ; \
|
mmvme : %(link_start_mvme) ; \
|
||||||
msim : %(link_start_sim) ; \
|
msim : %(link_start_sim) ; \
|
||||||
@@ -590,7 +595,9 @@
|
@@ -641,7 +645,8 @@
|
||||||
|
|
||||||
/* Any specific OS flags. */
|
/* Any specific OS flags. */
|
||||||
#define LINK_OS_SPEC "\
|
#define LINK_OS_SPEC "\
|
||||||
-%{mads : %(link_os_ads) ; \
|
-%{mads : %(link_os_ads) ; \
|
||||||
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(link_os_ogc) ; \
|
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(link_os_ogc) ; \
|
||||||
+ mwup : %(link_os_wup) ; \
|
|
||||||
+ mads : %(link_os_ads) ; \
|
+ mads : %(link_os_ads) ; \
|
||||||
myellowknife : %(link_os_yellowknife) ; \
|
myellowknife : %(link_os_yellowknife) ; \
|
||||||
mmvme : %(link_os_mvme) ; \
|
mmvme : %(link_os_mvme) ; \
|
||||||
msim : %(link_os_sim) ; \
|
msim : %(link_os_sim) ; \
|
||||||
@@ -608,7 +615,11 @@
|
@@ -660,7 +665,10 @@
|
||||||
/* Override rs6000.h definition. */
|
/* Override rs6000.h definition. */
|
||||||
#undef CPP_SPEC
|
#undef CPP_SPEC
|
||||||
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \
|
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \
|
||||||
@@ -54,12 +52,11 @@ diff -NBaur gcc-6.3.0/gcc/config/rs6000/sysv4.h gcc-6.3.0-ppc/gcc/config/rs6000/
|
|||||||
+%{mgcn : %(cpp_os_gcn) ; \
|
+%{mgcn : %(cpp_os_gcn) ; \
|
||||||
+ mogc|mvgc|mgcbios : %(cpp_os_ogc) ; \
|
+ mogc|mvgc|mgcbios : %(cpp_os_ogc) ; \
|
||||||
+ mrvl : %(cpp_os_rvl) ; \
|
+ mrvl : %(cpp_os_rvl) ; \
|
||||||
+ mwup : %(cpp_os_wup) ; \
|
|
||||||
+ mads : %(cpp_os_ads) ; \
|
+ mads : %(cpp_os_ads) ; \
|
||||||
myellowknife : %(cpp_os_yellowknife) ; \
|
myellowknife : %(cpp_os_yellowknife) ; \
|
||||||
mmvme : %(cpp_os_mvme) ; \
|
mmvme : %(cpp_os_mvme) ; \
|
||||||
msim : %(cpp_os_sim) ; \
|
msim : %(cpp_os_sim) ; \
|
||||||
@@ -622,7 +633,11 @@
|
@@ -675,7 +683,10 @@
|
||||||
|
|
||||||
#undef STARTFILE_SPEC
|
#undef STARTFILE_SPEC
|
||||||
#define STARTFILE_SPEC "\
|
#define STARTFILE_SPEC "\
|
||||||
@@ -67,23 +64,26 @@ diff -NBaur gcc-6.3.0/gcc/config/rs6000/sysv4.h gcc-6.3.0-ppc/gcc/config/rs6000/
|
|||||||
+%{mgcn : %(startfile_gcn) ; \
|
+%{mgcn : %(startfile_gcn) ; \
|
||||||
+ mogc|mvgc|mgcbios : %(startfile_ogc) ; \
|
+ mogc|mvgc|mgcbios : %(startfile_ogc) ; \
|
||||||
+ mrvl : %(startfile_ogc) ; \
|
+ mrvl : %(startfile_ogc) ; \
|
||||||
+ mwup : %(startfile_wup) ; \
|
|
||||||
+ mads : %(startfile_ads) ; \
|
+ mads : %(startfile_ads) ; \
|
||||||
myellowknife : %(startfile_yellowknife) ; \
|
myellowknife : %(startfile_yellowknife) ; \
|
||||||
mmvme : %(startfile_mvme) ; \
|
mmvme : %(startfile_mvme) ; \
|
||||||
msim : %(startfile_sim) ; \
|
msim : %(startfile_sim) ; \
|
||||||
@@ -636,7 +651,9 @@
|
@@ -686,11 +697,12 @@
|
||||||
|
mcall-openbsd: %(startfile_openbsd) ; \
|
||||||
|
: %(startfile_default) }"
|
||||||
|
|
||||||
|
-#define STARTFILE_DEFAULT_SPEC "ecrti.o%s crtbegin.o%s"
|
||||||
|
+#define STARTFILE_DEFAULT_SPEC "crt0.o%s ecrti.o%s crtbegin.o%s"
|
||||||
|
|
||||||
#undef LIB_SPEC
|
#undef LIB_SPEC
|
||||||
#define LIB_SPEC "\
|
#define LIB_SPEC "\
|
||||||
-%{mads : %(lib_ads) ; \
|
-%{mads : %(lib_ads) ; \
|
||||||
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(lib_ogc) ; \
|
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(lib_ogc) ; \
|
||||||
+ mwup : %(lib_wup) ; \
|
|
||||||
+ mads : %(lib_ads) ; \
|
+ mads : %(lib_ads) ; \
|
||||||
myellowknife : %(lib_yellowknife) ; \
|
myellowknife : %(lib_yellowknife) ; \
|
||||||
mmvme : %(lib_mvme) ; \
|
mmvme : %(lib_mvme) ; \
|
||||||
msim : %(lib_sim) ; \
|
msim : %(lib_sim) ; \
|
||||||
@@ -646,11 +663,13 @@
|
@@ -701,11 +713,12 @@
|
||||||
mcall-openbsd: %(lib_openbsd) ; \
|
mcall-openbsd: %(lib_openbsd) ; \
|
||||||
: %(lib_default) }"
|
: %(lib_default) }"
|
||||||
|
|
||||||
@@ -94,111 +94,98 @@ diff -NBaur gcc-6.3.0/gcc/config/rs6000/sysv4.h gcc-6.3.0-ppc/gcc/config/rs6000/
|
|||||||
#define ENDFILE_SPEC "\
|
#define ENDFILE_SPEC "\
|
||||||
-%{mads : %(endfile_ads) ; \
|
-%{mads : %(endfile_ads) ; \
|
||||||
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(endfile_ogc) ; \
|
+%{mgcn|mogc|mvgc|mgcbios|mrvl : %(endfile_ogc) ; \
|
||||||
+ mwup : %(endfile_wup) ; \
|
|
||||||
+ mads : %(endfile_ads) ; \
|
+ mads : %(endfile_ads) ; \
|
||||||
myellowknife : %(endfile_yellowknife) ; \
|
myellowknife : %(endfile_yellowknife) ; \
|
||||||
mmvme : %(endfile_mvme) ; \
|
mmvme : %(endfile_mvme) ; \
|
||||||
msim : %(endfile_sim) ; \
|
msim : %(endfile_sim) ; \
|
||||||
@@ -666,16 +685,33 @@
|
@@ -722,16 +735,27 @@
|
||||||
|
|
||||||
/* Motorola ADS support. */
|
/* Motorola ADS support. */
|
||||||
#define LIB_ADS_SPEC "--start-group -lads -lc --end-group"
|
#define LIB_ADS_SPEC "--start-group -lads -lc --end-group"
|
||||||
+#define LIB_OGC_SPEC "--start-group -lsysbase -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_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_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_ADS_SPEC "crtend.o%s ecrtn.o%s"
|
||||||
+#define ENDFILE_OGC_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_ADS_SPEC "-T ads.ld%s"
|
||||||
+#define LINK_START_OGC_SPEC "-T ogc.ld%s"
|
+#define LINK_START_OGC_SPEC "-T ogc.ld%s"
|
||||||
+#define LINK_START_RVL_SPEC "-T rvl.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_VGC_SPEC "-T vgcogc.ld%s"
|
||||||
+#define LINK_START_GCB_SPEC "-T gcbogc.ld%s"
|
+#define LINK_START_GCB_SPEC "-T gcbogc.ld%s"
|
||||||
|
|
||||||
#define LINK_OS_ADS_SPEC ""
|
#define LINK_OS_ADS_SPEC ""
|
||||||
+#define LINK_OS_OGC_SPEC "--gc-sections"
|
+#define LINK_OS_OGC_SPEC "--gc-sections"
|
||||||
+#define LINK_OS_WUP_SPEC "--gc-sections"
|
|
||||||
|
|
||||||
#define CPP_OS_ADS_SPEC ""
|
#define CPP_OS_ADS_SPEC ""
|
||||||
+#define CPP_OS_GCN_SPEC "-D__gamecube__ -ffunction-sections -fdata-sections"
|
+#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_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_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. */
|
/* Motorola Yellowknife support. */
|
||||||
#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group"
|
#define LIB_YELLOWKNIFE_SPEC "--start-group -lyk -lc --end-group"
|
||||||
@@ -866,6 +902,8 @@
|
@@ -926,6 +950,7 @@
|
||||||
#undef SUBTARGET_EXTRA_SPECS
|
#undef SUBTARGET_EXTRA_SPECS
|
||||||
#define SUBTARGET_EXTRA_SPECS \
|
#define SUBTARGET_EXTRA_SPECS \
|
||||||
{ "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \
|
{ "crtsavres_default", CRTSAVRES_DEFAULT_SPEC }, \
|
||||||
+ { "lib_ogc", LIB_OGC_SPEC }, \
|
+ { "lib_ogc", LIB_OGC_SPEC }, \
|
||||||
+ { "lib_wup", LIB_WUP_SPEC }, \
|
|
||||||
{ "lib_ads", LIB_ADS_SPEC }, \
|
{ "lib_ads", LIB_ADS_SPEC }, \
|
||||||
{ "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \
|
{ "lib_yellowknife", LIB_YELLOWKNIFE_SPEC }, \
|
||||||
{ "lib_mvme", LIB_MVME_SPEC }, \
|
{ "lib_mvme", LIB_MVME_SPEC }, \
|
||||||
@@ -875,6 +913,8 @@
|
@@ -936,6 +961,7 @@
|
||||||
{ "lib_netbsd", LIB_NETBSD_SPEC }, \
|
{ "lib_netbsd", LIB_NETBSD_SPEC }, \
|
||||||
{ "lib_openbsd", LIB_OPENBSD_SPEC }, \
|
{ "lib_openbsd", LIB_OPENBSD_SPEC }, \
|
||||||
{ "lib_default", LIB_DEFAULT_SPEC }, \
|
{ "lib_default", LIB_DEFAULT_SPEC }, \
|
||||||
+ { "startfile_ogc", STARTFILE_OGC_SPEC }, \
|
+ { "startfile_ogc", STARTFILE_OGC_SPEC }, \
|
||||||
+ { "startfile_wup", STARTFILE_WUP_SPEC }, \
|
|
||||||
{ "startfile_ads", STARTFILE_ADS_SPEC }, \
|
{ "startfile_ads", STARTFILE_ADS_SPEC }, \
|
||||||
{ "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \
|
{ "startfile_yellowknife", STARTFILE_YELLOWKNIFE_SPEC }, \
|
||||||
{ "startfile_mvme", STARTFILE_MVME_SPEC }, \
|
{ "startfile_mvme", STARTFILE_MVME_SPEC }, \
|
||||||
@@ -884,6 +924,8 @@
|
@@ -946,6 +972,7 @@
|
||||||
{ "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \
|
{ "startfile_netbsd", STARTFILE_NETBSD_SPEC }, \
|
||||||
{ "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \
|
{ "startfile_openbsd", STARTFILE_OPENBSD_SPEC }, \
|
||||||
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \
|
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \
|
||||||
+ { "endfile_ogc", ENDFILE_OGC_SPEC }, \
|
+ { "endfile_ogc", ENDFILE_OGC_SPEC }, \
|
||||||
+ { "endfile_wup", ENDFILE_WUP_SPEC }, \
|
|
||||||
{ "endfile_ads", ENDFILE_ADS_SPEC }, \
|
{ "endfile_ads", ENDFILE_ADS_SPEC }, \
|
||||||
{ "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \
|
{ "endfile_yellowknife", ENDFILE_YELLOWKNIFE_SPEC }, \
|
||||||
{ "endfile_mvme", ENDFILE_MVME_SPEC }, \
|
{ "endfile_mvme", ENDFILE_MVME_SPEC }, \
|
||||||
@@ -895,7 +937,12 @@
|
@@ -959,7 +986,11 @@
|
||||||
{ "endfile_default", ENDFILE_DEFAULT_SPEC }, \
|
|
||||||
{ "link_shlib", LINK_SHLIB_SPEC }, \
|
{ "link_shlib", LINK_SHLIB_SPEC }, \
|
||||||
|
{ "link_target", LINK_TARGET_SPEC }, \
|
||||||
{ "link_start", LINK_START_SPEC }, \
|
{ "link_start", LINK_START_SPEC }, \
|
||||||
+ { "link_start_vgc", LINK_START_VGC_SPEC }, \
|
+ { "link_start_vgc", LINK_START_VGC_SPEC }, \
|
||||||
+ { "link_start_gcb", LINK_START_GCB_SPEC }, \
|
+ { "link_start_gcb", LINK_START_GCB_SPEC }, \
|
||||||
+ { "link_start_rvl", LINK_START_RVL_SPEC }, \
|
+ { "link_start_rvl", LINK_START_RVL_SPEC }, \
|
||||||
+ { "link_start_wup", LINK_START_WUP_SPEC }, \
|
|
||||||
{ "link_start_ads", LINK_START_ADS_SPEC }, \
|
{ "link_start_ads", LINK_START_ADS_SPEC }, \
|
||||||
+ { "link_start_ogc", LINK_START_OGC_SPEC }, \
|
+ { "link_start_ogc", LINK_START_OGC_SPEC }, \
|
||||||
{ "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \
|
{ "link_start_yellowknife", LINK_START_YELLOWKNIFE_SPEC }, \
|
||||||
{ "link_start_mvme", LINK_START_MVME_SPEC }, \
|
{ "link_start_mvme", LINK_START_MVME_SPEC }, \
|
||||||
{ "link_start_sim", LINK_START_SIM_SPEC }, \
|
{ "link_start_sim", LINK_START_SIM_SPEC }, \
|
||||||
@@ -905,6 +952,8 @@
|
@@ -970,6 +1001,7 @@
|
||||||
{ "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \
|
{ "link_start_openbsd", LINK_START_OPENBSD_SPEC }, \
|
||||||
{ "link_start_default", LINK_START_DEFAULT_SPEC }, \
|
{ "link_start_default", LINK_START_DEFAULT_SPEC }, \
|
||||||
{ "link_os", LINK_OS_SPEC }, \
|
{ "link_os", LINK_OS_SPEC }, \
|
||||||
+ { "link_os_ogc", LINK_OS_OGC_SPEC }, \
|
+ { "link_os_ogc", LINK_OS_OGC_SPEC }, \
|
||||||
+ { "link_os_wup", LINK_OS_WUP_SPEC }, \
|
|
||||||
{ "link_os_ads", LINK_OS_ADS_SPEC }, \
|
{ "link_os_ads", LINK_OS_ADS_SPEC }, \
|
||||||
{ "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \
|
{ "link_os_yellowknife", LINK_OS_YELLOWKNIFE_SPEC }, \
|
||||||
{ "link_os_mvme", LINK_OS_MVME_SPEC }, \
|
{ "link_os_mvme", LINK_OS_MVME_SPEC }, \
|
||||||
@@ -916,6 +965,10 @@
|
@@ -984,6 +1016,9 @@
|
||||||
{ "link_os_default", LINK_OS_DEFAULT_SPEC }, \
|
{ "cc1_endian_little", CC1_ENDIAN_LITTLE_SPEC }, \
|
||||||
|
{ "cc1_endian_default", CC1_ENDIAN_DEFAULT_SPEC }, \
|
||||||
{ "cc1_secure_plt_default", CC1_SECURE_PLT_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_gcn", CPP_OS_GCN_SPEC }, \
|
||||||
+ { "cpp_os_ogc", CPP_OS_OGC_SPEC }, \
|
+ { "cpp_os_ogc", CPP_OS_OGC_SPEC }, \
|
||||||
+ { "cpp_os_rvl", CPP_OS_RVL_SPEC }, \
|
+ { "cpp_os_rvl", CPP_OS_RVL_SPEC }, \
|
||||||
+ { "cpp_os_wup", CPP_OS_WUP_SPEC }, \
|
|
||||||
{ "cpp_os_ads", CPP_OS_ADS_SPEC }, \
|
{ "cpp_os_ads", CPP_OS_ADS_SPEC }, \
|
||||||
{ "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \
|
{ "cpp_os_yellowknife", CPP_OS_YELLOWKNIFE_SPEC }, \
|
||||||
{ "cpp_os_mvme", CPP_OS_MVME_SPEC }, \
|
{ "cpp_os_mvme", CPP_OS_MVME_SPEC }, \
|
||||||
diff -NBaur gcc-6.3.0/gcc/config/rs6000/sysv4.opt gcc-6.3.0-ppc/gcc/config/rs6000/sysv4.opt
|
diff -Nbaur gcc-4.6.3/gcc/config/rs6000/sysv4.opt gcc-4.6.3-ppc/gcc/config/rs6000/sysv4.opt
|
||||||
--- gcc-6.3.0/gcc/config/rs6000/sysv4.opt 2016-01-04 14:30:50.000000000 +0000
|
--- gcc-4.6.3/gcc/config/rs6000/sysv4.opt 2011-01-03 20:52:22.000000000 +0000
|
||||||
+++ gcc-6.3.0-ppc/gcc/config/rs6000/sysv4.opt 2017-01-05 02:42:41.984000000 +0000
|
+++ gcc-4.6.3-ppc/gcc/config/rs6000/sysv4.opt 2012-04-21 22:54:04.000000000 +0100
|
||||||
@@ -120,6 +120,30 @@
|
@@ -108,6 +108,26 @@
|
||||||
Target RejectNegative
|
Target RejectNegative
|
||||||
Link with libads.a, libc.a and crt0.o.
|
Link with libads.a, libc.a and crt0.o
|
||||||
|
|
||||||
+mgcn
|
+mgcn
|
||||||
+Target RejectNegative
|
+Target RejectNegative
|
||||||
@@ -219,44 +206,26 @@ diff -NBaur gcc-6.3.0/gcc/config/rs6000/sysv4.opt gcc-6.3.0-ppc/gcc/config/rs600
|
|||||||
+mrvl
|
+mrvl
|
||||||
+Target RejectNegative
|
+Target RejectNegative
|
||||||
+Link with libsysbase.a and libc.a, use rvl linker script
|
+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
|
myellowknife
|
||||||
Target RejectNegative
|
Target RejectNegative
|
||||||
Link with libyk.a, libc.a and crt0.o.
|
Link with libyk.a, libc.a and crt0.o
|
||||||
diff -NBaur gcc-6.3.0/gcc/config.gcc gcc-6.3.0-ppc/gcc/config.gcc
|
diff -Nbaur gcc-4.6.3/gcc/config.gcc gcc-4.6.3-ppc/gcc/config.gcc
|
||||||
--- gcc-6.3.0/gcc/config.gcc 2016-11-07 21:38:43.000000000 +0000
|
--- gcc-4.6.3/gcc/config.gcc 2011-07-22 17:44:50.000000000 +0100
|
||||||
+++ gcc-6.3.0-ppc/gcc/config.gcc 2017-01-05 02:42:41.984000000 +0000
|
+++ gcc-4.6.3-ppc/gcc/config.gcc 2012-04-21 22:54:04.000000000 +0100
|
||||||
@@ -2390,7 +2390,7 @@
|
@@ -2133,7 +2133,7 @@
|
||||||
use_gcc_stdint=wrap
|
use_gcc_stdint=wrap
|
||||||
;;
|
;;
|
||||||
powerpc-*-eabi*)
|
powerpc-*-eabi*)
|
||||||
- tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h"
|
- tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h"
|
||||||
+ tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/750cl.h"
|
+ tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/750cl.h"
|
||||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
extra_options="${extra_options} rs6000/sysv4.opt"
|
||||||
tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
|
tmake_file="rs6000/t-fprules rs6000/t-fprules-fpbit rs6000/t-ppcgas rs6000/t-ppccomm"
|
||||||
use_gcc_stdint=wrap
|
use_gcc_stdint=wrap
|
||||||
diff -NBaur gcc-6.3.0/gcc/Makefile.in gcc-6.3.0-ppc/gcc/Makefile.in
|
diff -Nbaur gcc-4.6.3/libcpp/Makefile.in gcc-4.6.3-ppc/libcpp/Makefile.in
|
||||||
--- gcc-6.3.0/gcc/Makefile.in 2016-11-22 17:33:07.000000000 +0000
|
--- gcc-4.6.3/libcpp/Makefile.in 2012-03-01 12:03:46.000000000 +0000
|
||||||
+++ gcc-6.3.0-ppc/gcc/Makefile.in 2017-01-05 02:42:41.988000000 +0000
|
+++ gcc-4.6.3-ppc/libcpp/Makefile.in 2012-04-21 22:54:04.000000000 +0100
|
||||||
@@ -1073,8 +1073,8 @@
|
@@ -212,8 +212,7 @@
|
||||||
# things like the go/%.o rule work properly; but we use $(*F) for the
|
|
||||||
# file part, as we just want the file part of the stem, not the entire
|
|
||||||
# file name.
|
|
||||||
-COMPILE = $(COMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo
|
|
||||||
-POSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(*F).TPo $(@D)/$(DEPDIR)/$(*F).Po
|
|
||||||
+COMPILE = $(COMPILE.base)
|
|
||||||
+POSTCOMPILE =
|
|
||||||
else
|
|
||||||
COMPILE = source='$<' object='$@' libtool=no \
|
|
||||||
DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) $(COMPILE.base)
|
|
||||||
diff -NBaur gcc-6.3.0/libcpp/Makefile.in gcc-6.3.0-ppc/libcpp/Makefile.in
|
|
||||||
--- gcc-6.3.0/libcpp/Makefile.in 2016-12-21 07:53:39.000000000 +0000
|
|
||||||
+++ gcc-6.3.0-ppc/libcpp/Makefile.in 2017-01-05 02:42:41.988000000 +0000
|
|
||||||
@@ -208,8 +208,7 @@
|
|
||||||
# Note that we put the dependencies into a .Tpo file, then move them
|
# Note that we put the dependencies into a .Tpo file, then move them
|
||||||
# into place if the compile succeeds. We need this because gcc does
|
# into place if the compile succeeds. We need this because gcc does
|
||||||
# not atomically write the dependency output file.
|
# not atomically write the dependency output file.
|
||||||
@@ -266,48 +235,3 @@ diff -NBaur gcc-6.3.0/libcpp/Makefile.in gcc-6.3.0-ppc/libcpp/Makefile.in
|
|||||||
else
|
else
|
||||||
COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
|
COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
|
||||||
$(depcomp) $(COMPILE.base)
|
$(depcomp) $(COMPILE.base)
|
||||||
diff -NBaur gcc-6.3.0/libgcc/config/rs6000/crtrestvr.S gcc-6.3.0-ppc/libgcc/config/rs6000/crtrestvr.S
|
|
||||||
--- gcc-6.3.0/libgcc/config/rs6000/crtrestvr.S 2016-01-04 14:30:50.000000000 +0000
|
|
||||||
+++ gcc-6.3.0-ppc/libgcc/config/rs6000/crtrestvr.S 2017-01-05 02:42:41.988000000 +0000
|
|
||||||
@@ -24,7 +24,7 @@
|
|
||||||
|
|
||||||
/* On PowerPC64 Linux, these functions are provided by the linker. */
|
|
||||||
#ifndef __powerpc64__
|
|
||||||
-
|
|
||||||
+#if 0
|
|
||||||
#undef __ALTIVEC__
|
|
||||||
#define __ALTIVEC__ 1
|
|
||||||
#include "ppc-asm.h"
|
|
||||||
@@ -85,3 +85,4 @@
|
|
||||||
CFI_ENDPROC
|
|
||||||
|
|
||||||
#endif
|
|
||||||
+#endif
|
|
||||||
diff -NBaur gcc-6.3.0/libgcc/config/rs6000/crtsavevr.S gcc-6.3.0-ppc/libgcc/config/rs6000/crtsavevr.S
|
|
||||||
--- gcc-6.3.0/libgcc/config/rs6000/crtsavevr.S 2016-01-04 14:30:50.000000000 +0000
|
|
||||||
+++ gcc-6.3.0-ppc/libgcc/config/rs6000/crtsavevr.S 2017-01-05 02:42:41.988000000 +0000
|
|
||||||
@@ -24,7 +24,7 @@
|
|
||||||
|
|
||||||
/* On PowerPC64 Linux, these functions are provided by the linker. */
|
|
||||||
#ifndef __powerpc64__
|
|
||||||
-
|
|
||||||
+#if 0
|
|
||||||
#undef __ALTIVEC__
|
|
||||||
#define __ALTIVEC__ 1
|
|
||||||
#include "ppc-asm.h"
|
|
||||||
@@ -85,3 +85,4 @@
|
|
||||||
CFI_ENDPROC
|
|
||||||
|
|
||||||
#endif
|
|
||||||
+#endif
|
|
||||||
diff -NBaur gcc-6.3.0/libgcc/crtstuff.c gcc-6.3.0-ppc/libgcc/crtstuff.c
|
|
||||||
--- gcc-6.3.0/libgcc/crtstuff.c 2016-01-04 14:30:50.000000000 +0000
|
|
||||||
+++ gcc-6.3.0-ppc/libgcc/crtstuff.c 2017-01-05 02:42:41.988000000 +0000
|
|
||||||
@@ -47,6 +47,7 @@
|
|
||||||
|
|
||||||
/* Target machine header files require this define. */
|
|
||||||
#define IN_LIBGCC2
|
|
||||||
+#define USED_FOR_TARGET
|
|
||||||
|
|
||||||
/* FIXME: Including auto-host is incorrect, but until we have
|
|
||||||
identified the set of defines that need to go into auto-target.h,
|
|
||||||
@@ -1,330 +0,0 @@
|
|||||||
diff -NBaur gcc-6.1.0/gcc/config/rs6000/rs6000.h gcc-6.1.0-ppc/gcc/config/rs6000/rs6000.h
|
|
||||||
--- gcc-6.1.0/gcc/config/rs6000/rs6000.h 2016-01-20 20:30:24.000000000 +0000
|
|
||||||
+++ gcc-6.1.0-ppc/gcc/config/rs6000/rs6000.h 2016-05-20 12:10:24.645019640 +0100
|
|
||||||
@@ -205,6 +205,7 @@
|
|
||||||
{ "asm_cpu_476", ASM_CPU_476_SPEC }, \
|
|
||||||
SUBTARGET_EXTRA_SPECS
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
/* -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 @@
|
|
||||||
#else
|
|
||||||
#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
|
|
||||||
#endif
|
|
||||||
+#endif
|
|
||||||
+#define ASM_CPU_NATIVE_SPEC "%(asm_default)"
|
|
||||||
|
|
||||||
#ifndef CC1_CPU_SPEC
|
|
||||||
#ifdef HAVE_LOCAL_CPU_DETECT
|
|
||||||
diff -NBaur gcc-6.1.0/gcc/config/rs6000/sysv4.h gcc-6.1.0-ppc/gcc/config/rs6000/sysv4.h
|
|
||||||
--- gcc-6.1.0/gcc/config/rs6000/sysv4.h 2016-01-04 14:30:50.000000000 +0000
|
|
||||||
+++ gcc-6.1.0-ppc/gcc/config/rs6000/sysv4.h 2016-05-20 12:12:27.073019640 +0100
|
|
||||||
@@ -559,7 +559,12 @@
|
|
||||||
|
|
||||||
/* Default starting address if specified. */
|
|
||||||
#define LINK_START_SPEC "\
|
|
||||||
-%{mads : %(link_start_ads) ; \
|
|
||||||
+%{mgcn|mogc : %(link_start_ogc) ; \
|
|
||||||
+ 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) ; \
|
|
||||||
@@ -590,7 +594,9 @@
|
|
||||||
|
|
||||||
/* 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) ; \
|
|
||||||
@@ -608,7 +613,11 @@
|
|
||||||
/* Override rs6000.h definition. */
|
|
||||||
#undef CPP_SPEC
|
|
||||||
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} \
|
|
||||||
-%{mads : %(cpp_os_ads) ; \
|
|
||||||
+%{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) ; \
|
|
||||||
@@ -622,7 +630,11 @@
|
|
||||||
|
|
||||||
#undef STARTFILE_SPEC
|
|
||||||
#define STARTFILE_SPEC "\
|
|
||||||
-%{mads : %(startfile_ads) ; \
|
|
||||||
+%{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) ; \
|
|
||||||
@@ -632,11 +643,13 @@
|
|
||||||
mcall-openbsd: %(startfile_openbsd) ; \
|
|
||||||
: %(startfile_default) }"
|
|
||||||
|
|
||||||
-#define STARTFILE_DEFAULT_SPEC "ecrti.o%s crtbegin.o%s"
|
|
||||||
+#define STARTFILE_DEFAULT_SPEC "crt0.o%s ecrti.o%s crtbegin.o%s"
|
|
||||||
|
|
||||||
#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) ; \
|
|
||||||
@@ -646,11 +658,13 @@
|
|
||||||
mcall-openbsd: %(lib_openbsd) ; \
|
|
||||||
: %(lib_default) }"
|
|
||||||
|
|
||||||
-#define LIB_DEFAULT_SPEC "-lc"
|
|
||||||
+#define LIB_DEFAULT_SPEC "--start-group -lsysbase -lc --end-group"
|
|
||||||
|
|
||||||
#undef ENDFILE_SPEC
|
|
||||||
#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) ; \
|
|
||||||
@@ -666,16 +679,33 @@
|
|
||||||
|
|
||||||
/* 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"
|
|
||||||
@@ -855,6 +879,8 @@
|
|
||||||
#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 }, \
|
|
||||||
@@ -864,6 +889,8 @@
|
|
||||||
{ "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 }, \
|
|
||||||
@@ -873,6 +899,8 @@
|
|
||||||
{ "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 }, \
|
|
||||||
@@ -884,7 +911,12 @@
|
|
||||||
{ "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 }, \
|
|
||||||
@@ -894,6 +925,8 @@
|
|
||||||
{ "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 }, \
|
|
||||||
@@ -905,6 +937,10 @@
|
|
||||||
{ "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 -NBaur gcc-6.1.0/gcc/config/rs6000/sysv4.opt gcc-6.1.0-ppc/gcc/config/rs6000/sysv4.opt
|
|
||||||
--- gcc-6.1.0/gcc/config/rs6000/sysv4.opt 2016-01-04 14:30:50.000000000 +0000
|
|
||||||
+++ gcc-6.1.0-ppc/gcc/config/rs6000/sysv4.opt 2016-05-20 12:10:24.649019640 +0100
|
|
||||||
@@ -120,6 +120,30 @@
|
|
||||||
Target RejectNegative
|
|
||||||
Link with libads.a, libc.a and crt0.o.
|
|
||||||
|
|
||||||
+mgcn
|
|
||||||
+Target RejectNegative
|
|
||||||
+Link with libsysbase.a and libc.a, use ogc linker script
|
|
||||||
+
|
|
||||||
+mogc
|
|
||||||
+Target RejectNegative
|
|
||||||
+Link with libsysbase.a and libc.a, use ogc linker script
|
|
||||||
+
|
|
||||||
+mgcbios
|
|
||||||
+Target RejectNegative
|
|
||||||
+Link with libsysbase.a and libc.a, use gcbogc linker script
|
|
||||||
+
|
|
||||||
+mvgc
|
|
||||||
+Target RejectNegative
|
|
||||||
+Link with libsysbase.a and libc.a, use gcbogc linker script
|
|
||||||
+
|
|
||||||
+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 -NBaur gcc-6.1.0/gcc/config.gcc gcc-6.1.0-ppc/gcc/config.gcc
|
|
||||||
--- gcc-6.1.0/gcc/config.gcc 2016-04-11 11:14:59.000000000 +0100
|
|
||||||
+++ gcc-6.1.0-ppc/gcc/config.gcc 2016-05-20 12:10:24.661019640 +0100
|
|
||||||
@@ -2381,7 +2381,7 @@
|
|
||||||
use_gcc_stdint=wrap
|
|
||||||
;;
|
|
||||||
powerpc-*-eabi*)
|
|
||||||
- tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h"
|
|
||||||
+ tm_file="${tm_file} dbxelf.h elfos.h usegas.h freebsd-spec.h newlib-stdint.h rs6000/sysv4.h rs6000/eabi.h rs6000/e500.h rs6000/750cl.h"
|
|
||||||
extra_options="${extra_options} rs6000/sysv4.opt"
|
|
||||||
tmake_file="rs6000/t-fprules rs6000/t-ppcgas rs6000/t-ppccomm"
|
|
||||||
use_gcc_stdint=wrap
|
|
||||||
diff -NBaur gcc-6.1.0/gcc/Makefile.in gcc-6.1.0-ppc/gcc/Makefile.in
|
|
||||||
--- gcc-6.1.0/gcc/Makefile.in 2016-04-15 12:49:39.000000000 +0100
|
|
||||||
+++ gcc-6.1.0-ppc/gcc/Makefile.in 2016-05-20 12:10:24.641019640 +0100
|
|
||||||
@@ -1073,8 +1073,8 @@
|
|
||||||
# things like the go/%.o rule work properly; but we use $(*F) for the
|
|
||||||
# file part, as we just want the file part of the stem, not the entire
|
|
||||||
# file name.
|
|
||||||
-COMPILE = $(COMPILE.base) -MT $@ -MMD -MP -MF $(@D)/$(DEPDIR)/$(*F).TPo
|
|
||||||
-POSTCOMPILE = @mv $(@D)/$(DEPDIR)/$(*F).TPo $(@D)/$(DEPDIR)/$(*F).Po
|
|
||||||
+COMPILE = $(COMPILE.base)
|
|
||||||
+POSTCOMPILE =
|
|
||||||
else
|
|
||||||
COMPILE = source='$<' object='$@' libtool=no \
|
|
||||||
DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) $(COMPILE.base)
|
|
||||||
diff -NBaur gcc-6.1.0/libcpp/Makefile.in gcc-6.1.0-ppc/libcpp/Makefile.in
|
|
||||||
--- gcc-6.1.0/libcpp/Makefile.in 2016-04-27 09:22:11.000000000 +0100
|
|
||||||
+++ gcc-6.1.0-ppc/libcpp/Makefile.in 2016-05-20 12:10:24.661019640 +0100
|
|
||||||
@@ -208,8 +208,7 @@
|
|
||||||
# Note that we put the dependencies into a .Tpo file, then move them
|
|
||||||
# into place if the compile succeeds. We need this because gcc does
|
|
||||||
# not atomically write the dependency output file.
|
|
||||||
-COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Tpo
|
|
||||||
-POSTCOMPILE = @mv $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
|
||||||
+COMPILE = $(COMPILE.base) -o $@
|
|
||||||
else
|
|
||||||
COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
|
|
||||||
$(depcomp) $(COMPILE.base)
|
|
||||||
diff -NBaur gcc-6.1.0/libgcc/config/rs6000/crtrestvr.S gcc-6.1.0-ppc/libgcc/config/rs6000/crtrestvr.S
|
|
||||||
--- gcc-6.1.0/libgcc/config/rs6000/crtrestvr.S 2016-01-04 14:30:50.000000000 +0000
|
|
||||||
+++ gcc-6.1.0-ppc/libgcc/config/rs6000/crtrestvr.S 2016-05-20 12:10:24.665019640 +0100
|
|
||||||
@@ -24,7 +24,7 @@
|
|
||||||
|
|
||||||
/* On PowerPC64 Linux, these functions are provided by the linker. */
|
|
||||||
#ifndef __powerpc64__
|
|
||||||
-
|
|
||||||
+#if 0
|
|
||||||
#undef __ALTIVEC__
|
|
||||||
#define __ALTIVEC__ 1
|
|
||||||
#include "ppc-asm.h"
|
|
||||||
@@ -85,3 +85,4 @@
|
|
||||||
CFI_ENDPROC
|
|
||||||
|
|
||||||
#endif
|
|
||||||
+#endif
|
|
||||||
diff -NBaur gcc-6.1.0/libgcc/config/rs6000/crtsavevr.S gcc-6.1.0-ppc/libgcc/config/rs6000/crtsavevr.S
|
|
||||||
--- gcc-6.1.0/libgcc/config/rs6000/crtsavevr.S 2016-01-04 14:30:50.000000000 +0000
|
|
||||||
+++ gcc-6.1.0-ppc/libgcc/config/rs6000/crtsavevr.S 2016-05-20 12:10:24.665019640 +0100
|
|
||||||
@@ -24,7 +24,7 @@
|
|
||||||
|
|
||||||
/* On PowerPC64 Linux, these functions are provided by the linker. */
|
|
||||||
#ifndef __powerpc64__
|
|
||||||
-
|
|
||||||
+#if 0
|
|
||||||
#undef __ALTIVEC__
|
|
||||||
#define __ALTIVEC__ 1
|
|
||||||
#include "ppc-asm.h"
|
|
||||||
@@ -85,3 +85,4 @@
|
|
||||||
CFI_ENDPROC
|
|
||||||
|
|
||||||
#endif
|
|
||||||
+#endif
|
|
||||||
diff -NBaur gcc-6.1.0/libgcc/crtstuff.c gcc-6.1.0-ppc/libgcc/crtstuff.c
|
|
||||||
--- gcc-6.1.0/libgcc/crtstuff.c 2016-01-04 14:30:50.000000000 +0000
|
|
||||||
+++ gcc-6.1.0-ppc/libgcc/crtstuff.c 2016-05-20 12:10:24.669019640 +0100
|
|
||||||
@@ -47,6 +47,7 @@
|
|
||||||
|
|
||||||
/* Target machine header files require this define. */
|
|
||||||
#define IN_LIBGCC2
|
|
||||||
+#define USED_FOR_TARGET
|
|
||||||
|
|
||||||
/* 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-6.1.0/libstdc++-v3/include/std/type_traits gcc-6.1.0-ppc/libstdc++-v3/include/std/type_traits
|
|
||||||
--- gcc-6.1.0/libstdc++-v3/include/std/type_traits 2016-01-12 21:19:58.000000000 +0000
|
|
||||||
+++ gcc-6.1.0-ppc/libstdc++-v3/include/std/type_traits 2016-05-20 12:10:24.669019640 +0100
|
|
||||||
@@ -38,7 +38,7 @@
|
|
||||||
#include <bits/c++config.h>
|
|
||||||
|
|
||||||
#ifdef _GLIBCXX_USE_C99_STDINT_TR1
|
|
||||||
-# if defined (__UINT_LEAST16_TYPE__) && defined(__UINT_LEAST32_TYPE__)
|
|
||||||
+# if defined (__UINT_LEAST16_TYPE__) && defined(__UINT_LEAST32_TYPE__) && 0
|
|
||||||
namespace std
|
|
||||||
{
|
|
||||||
typedef __UINT_LEAST16_TYPE__ uint_least16_t;
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
diff -NBaur gdb-7.10/gdb/Makefile.in gdb-7.10-ppc/gdb/Makefile.in
|
diff -Nbaur gdb-7.4/gdb/Makefile.in gdb-7.4-ppc/gdb/Makefile.in
|
||||||
--- gdb-7.10/gdb/Makefile.in 2015-08-28 22:22:07.000000000 +0100
|
--- gdb-7.4/gdb/Makefile.in 2012-01-06 04:43:01.000000000 +0000
|
||||||
+++ gdb-7.10-ppc/gdb/Makefile.in 2015-11-09 09:21:13.228003995 +0000
|
+++ gdb-7.4-ppc/gdb/Makefile.in 2012-01-28 15:56:00.000000000 +0000
|
||||||
@@ -2676,10 +2676,10 @@
|
@@ -2195,10 +2195,10 @@
|
||||||
# Note that we put the dependencies into a .Tpo file, then move them
|
# Note that we put the dependencies into a .Tpo file, then move them
|
||||||
# into place if the compile succeeds. We need this because gcc does
|
# into place if the compile succeeds. We need this because gcc does
|
||||||
# not atomically write the dependency output file.
|
# not atomically write the dependency output file.
|
||||||
@@ -16,3 +16,15 @@ diff -NBaur gdb-7.10/gdb/Makefile.in gdb-7.10-ppc/gdb/Makefile.in
|
|||||||
@GMAKE_TRUE@else
|
@GMAKE_TRUE@else
|
||||||
@GMAKE_TRUE@override COMPILE.pre = source='$<' object='$@' libtool=no \
|
@GMAKE_TRUE@override COMPILE.pre = source='$<' object='$@' libtool=no \
|
||||||
@GMAKE_TRUE@ DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC)
|
@GMAKE_TRUE@ DEPDIR=$(DEPDIR) $(DEPMODE) $(depcomp) $(CC)
|
||||||
|
diff -Nbaur gdb-7.4/sim/ppc/Makefile.in gdb-7.4-ppc/sim/ppc/Makefile.in
|
||||||
|
--- gdb-7.4/sim/ppc/Makefile.in 2009-09-16 00:26:44.000000000 +0100
|
||||||
|
+++ gdb-7.4-ppc/sim/ppc/Makefile.in 2012-02-25 13:30:02.000000000 +0000
|
||||||
|
@@ -551,7 +551,7 @@
|
||||||
|
PACKAGE_OBJ = @sim_pk_obj@
|
||||||
|
|
||||||
|
|
||||||
|
-psim: $(TARGETLIB) main.o $(LIBIBERTY_LIB) $(BFD_LIB) $(LIBS) $(LIBINTL_DEP)
|
||||||
|
+psim: $(TARGETLIB) main.o $(LIBIBERTY_LIB) $(BFD_LIB) $(LIBINTL_DEP)
|
||||||
|
$(CC) $(CFLAGS) $(SIM_CFLAGS) $(LDFLAGS) -o psim$(EXEEXT) main.o $(TARGETLIB) $(BFD_LIB) $(LIBINTL) $(LIBIBERTY_LIB) $(LIBS)
|
||||||
|
|
||||||
|
run: psim
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -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 $@
|
|
||||||
25
dkppc/scripts/build-gcc.sh
Executable file → Normal file
25
dkppc/scripts/build-gcc.sh
Executable file → Normal file
@@ -16,7 +16,7 @@ then
|
|||||||
--prefix=$prefix --target=$target --disable-nls --disable-shared --disable-debug \
|
--prefix=$prefix --target=$target --disable-nls --disable-shared --disable-debug \
|
||||||
--disable-werror \
|
--disable-werror \
|
||||||
--enable-poison-system-directories \
|
--enable-poison-system-directories \
|
||||||
--enable-plugins --enable-lto \
|
--enable-plugins --enable-lto --disable-dependency-tracking \
|
||||||
--disable-werror $CROSS_PARAMS \
|
--disable-werror $CROSS_PARAMS \
|
||||||
|| { echo "Error configuing ppc binutils"; exit 1; }
|
|| { echo "Error configuing ppc binutils"; exit 1; }
|
||||||
touch configured-binutils
|
touch configured-binutils
|
||||||
@@ -45,9 +45,9 @@ cd mn10200/binutils
|
|||||||
|
|
||||||
if [ ! -f configured-binutils ]
|
if [ ! -f configured-binutils ]
|
||||||
then
|
then
|
||||||
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$MN_BINUTILS_VER/configure \
|
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \
|
||||||
--prefix=$prefix --target=mn10200 --disable-nls --disable-debug \
|
--prefix=$prefix --target=mn10200 --disable-nls --disable-debug \
|
||||||
--disable-multilib \
|
--disable-dependency-tracking \
|
||||||
--disable-werror $CROSS_PARAMS \
|
--disable-werror $CROSS_PARAMS \
|
||||||
|| { echo "Error configuing mn10200 binutils"; exit 1; }
|
|| { echo "Error configuing mn10200 binutils"; exit 1; }
|
||||||
touch configured-binutils
|
touch configured-binutils
|
||||||
@@ -75,27 +75,19 @@ cd $target/gcc
|
|||||||
|
|
||||||
if [ ! -f configured-gcc ]
|
if [ ! -f configured-gcc ]
|
||||||
then
|
then
|
||||||
CFLAGS="$cflags" \
|
CFLAGS="$cflags" LDFLAGS="$ldflags" CFLAGS_FOR_TARGET="-O2" LDFLAGS_FOR_TARGET="" ../../gcc-$GCC_VER/configure \
|
||||||
CXXFLAGS="$cflags" \
|
|
||||||
LDFLAGS="$ldflags" \
|
|
||||||
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
|
||||||
CXXFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
|
||||||
LDFLAGS_FOR_TARGET="" \
|
|
||||||
../../gcc-$GCC_VER/configure \
|
|
||||||
--enable-languages=c,c++,objc \
|
--enable-languages=c,c++,objc \
|
||||||
--enable-lto $plugin_ld \
|
--enable-lto $plugin_ld \
|
||||||
--with-cpu=750 \
|
--with-cpu=750 \
|
||||||
--disable-nls --disable-shared --enable-threads --disable-multilib \
|
--disable-nls --disable-shared --enable-threads --disable-multilib \
|
||||||
--disable-win32-registry \
|
--disable-win32-registry \
|
||||||
--disable-libstdcxx-pch \
|
--disable-libstdcxx-pch \
|
||||||
--disable-libstdcxx-verbose \
|
|
||||||
--enable-cxx-flags='-ffunction-sections -fdata-sections' \
|
|
||||||
--target=$target \
|
--target=$target \
|
||||||
--with-newlib \
|
--with-newlib \
|
||||||
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
|
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
|
||||||
--prefix=$prefix\
|
--prefix=$prefix\
|
||||||
--with-system-zlib\
|
--disable-dependency-tracking \
|
||||||
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitPPC release 29-1" \
|
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitPPC release 26" \
|
||||||
$CROSS_PARAMS \
|
$CROSS_PARAMS \
|
||||||
|| { echo "Error configuring gcc stage 1"; exit 1; }
|
|| { echo "Error configuring gcc stage 1"; exit 1; }
|
||||||
touch configured-gcc
|
touch configured-gcc
|
||||||
@@ -125,7 +117,6 @@ unset LDFLAGS
|
|||||||
|
|
||||||
if [ ! -f configured-newlib ]
|
if [ ! -f configured-newlib ]
|
||||||
then
|
then
|
||||||
CFLAGS_FOR_TARGET="-O2 -ffunction-sections -fdata-sections" \
|
|
||||||
../../newlib-$NEWLIB_VER/configure \
|
../../newlib-$NEWLIB_VER/configure \
|
||||||
--target=$target \
|
--target=$target \
|
||||||
--prefix=$prefix \
|
--prefix=$prefix \
|
||||||
@@ -142,7 +133,7 @@ then
|
|||||||
fi
|
fi
|
||||||
if [ ! -f installed-newlib ]
|
if [ ! -f installed-newlib ]
|
||||||
then
|
then
|
||||||
$MAKE install -j1 || { echo "Error installing newlib"; exit 1; }
|
$MAKE install || { echo "Error installing newlib"; exit 1; }
|
||||||
touch installed-newlib
|
touch installed-newlib
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -179,7 +170,7 @@ cd $target/gdb
|
|||||||
if [ ! -f configured-gdb ]
|
if [ ! -f configured-gdb ]
|
||||||
then
|
then
|
||||||
CFLAGS="$cflags" LDFLAGS="$ldflags" ../../gdb-$GDB_VER/configure \
|
CFLAGS="$cflags" LDFLAGS="$ldflags" ../../gdb-$GDB_VER/configure \
|
||||||
--disable-nls --prefix=$prefix --target=$target --disable-werror \
|
--disable-nls --prefix=$prefix --target=$target --disable-werror --disable-dependency-tracking\
|
||||||
$CROSS_PARAMS || { echo "Error configuring gdb"; exit 1; }
|
$CROSS_PARAMS || { echo "Error configuring gdb"; exit 1; }
|
||||||
touch configured-gdb
|
touch configured-gdb
|
||||||
fi
|
fi
|
||||||
|
|||||||
4640
dkpsp/patches/binutils-2.22.patch
Normal file
4640
dkpsp/patches/binutils-2.22.patch
Normal file
File diff suppressed because it is too large
Load Diff
843
dkpsp/patches/gcc-4.6.3.patch
Normal file
843
dkpsp/patches/gcc-4.6.3.patch
Normal file
@@ -0,0 +1,843 @@
|
|||||||
|
diff -Nbaur gcc-4.6.3/config.sub gcc-4.6.3-psp/config.sub
|
||||||
|
--- gcc-4.6.3/config.sub 2010-05-25 14:22:07.000000000 +0100
|
||||||
|
+++ gcc-4.6.3-psp/config.sub 2012-04-04 22:37:30.000000000 +0100
|
||||||
|
@@ -279,6 +279,7 @@
|
||||||
|
| mipsisa64sb1 | mipsisa64sb1el \
|
||||||
|
| mipsisa64sr71k | mipsisa64sr71kel \
|
||||||
|
| mipstx39 | mipstx39el \
|
||||||
|
+ | mipsallegrex | mipsallegrexel \
|
||||||
|
| mn10200 | mn10300 \
|
||||||
|
| moxie \
|
||||||
|
| mt \
|
||||||
|
@@ -375,6 +376,7 @@
|
||||||
|
| mipsisa64sb1-* | mipsisa64sb1el-* \
|
||||||
|
| mipsisa64sr71k-* | mipsisa64sr71kel-* \
|
||||||
|
| mipstx39-* | mipstx39el-* \
|
||||||
|
+ | mipsallegrex-* | mipsallegrexel-* \
|
||||||
|
| mmix-* \
|
||||||
|
| mt-* \
|
||||||
|
| msp430-* \
|
||||||
|
@@ -771,6 +773,10 @@
|
||||||
|
basic_machine=m68k-atari
|
||||||
|
os=-mint
|
||||||
|
;;
|
||||||
|
+ psp)
|
||||||
|
+ basic_machine=mipsallegrexel-psp
|
||||||
|
+ os=-elf
|
||||||
|
+ ;;
|
||||||
|
mips3*-*)
|
||||||
|
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
|
||||||
|
;;
|
||||||
|
diff -Nbaur gcc-4.6.3/gcc/config/mips/allegrex.md gcc-4.6.3-psp/gcc/config/mips/allegrex.md
|
||||||
|
--- gcc-4.6.3/gcc/config/mips/allegrex.md 1970-01-01 01:00:00.000000000 +0100
|
||||||
|
+++ gcc-4.6.3-psp/gcc/config/mips/allegrex.md 2012-04-04 22:37:30.000000000 +0100
|
||||||
|
@@ -0,0 +1,191 @@
|
||||||
|
+;; Sony ALLEGREX instructions.
|
||||||
|
+;; Copyright (C) 2005 Free Software Foundation, Inc.
|
||||||
|
+;;
|
||||||
|
+;; This file is part of GCC.
|
||||||
|
+;;
|
||||||
|
+;; GCC is free software; you can redistribute it and/or modify
|
||||||
|
+;; it under the terms of the GNU General Public License as published by
|
||||||
|
+;; the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
+;; any later version.
|
||||||
|
+;;
|
||||||
|
+;; GCC is distributed in the hope that it will be useful,
|
||||||
|
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
+;; GNU General Public License for more details.
|
||||||
|
+;;
|
||||||
|
+;; You should have received a copy of the GNU General Public License
|
||||||
|
+;; along with GCC; see the file COPYING. If not, write to
|
||||||
|
+;; the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||||
|
+;; Boston, MA 02111-1307, USA.
|
||||||
|
+
|
||||||
|
+(define_c_enum "unspec" [
|
||||||
|
+ UNSPEC_WSBH
|
||||||
|
+ UNSPEC_CLO
|
||||||
|
+ UNSPEC_CTO
|
||||||
|
+ UNSPEC_CACHE
|
||||||
|
+ UNSPEC_CEIL_W_S
|
||||||
|
+ UNSPEC_FLOOR_W_S
|
||||||
|
+ UNSPEC_ROUND_W_S
|
||||||
|
+])
|
||||||
|
+
|
||||||
|
+;; Multiply Add and Subtract.
|
||||||
|
+;; Note: removed clobbering for madd and msub (testing needed)
|
||||||
|
+
|
||||||
|
+(define_insn "allegrex_madd"
|
||||||
|
+ [(set (match_operand:SI 0 "register_operand" "+l")
|
||||||
|
+ (plus:SI (mult:SI (match_operand:SI 1 "register_operand" "d")
|
||||||
|
+ (match_operand:SI 2 "register_operand" "d"))
|
||||||
|
+ (match_dup 0)))]
|
||||||
|
+ "TARGET_ALLEGREX"
|
||||||
|
+ "madd\t%1,%2"
|
||||||
|
+ [(set_attr "type" "imadd")
|
||||||
|
+ (set_attr "mode" "SI")])
|
||||||
|
+
|
||||||
|
+(define_insn "allegrex_msub"
|
||||||
|
+ [(set (match_operand:SI 0 "register_operand" "+l")
|
||||||
|
+ (minus:SI (match_dup 0)
|
||||||
|
+ (mult:SI (match_operand:SI 1 "register_operand" "d")
|
||||||
|
+ (match_operand:SI 2 "register_operand" "d"))))]
|
||||||
|
+ "TARGET_ALLEGREX"
|
||||||
|
+ "msub\t%1,%2"
|
||||||
|
+ [(set_attr "type" "imadd")
|
||||||
|
+ (set_attr "mode" "SI")])
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+;; Min and max.
|
||||||
|
+
|
||||||
|
+(define_insn "sminsi3"
|
||||||
|
+ [(set (match_operand:SI 0 "register_operand" "=d")
|
||||||
|
+ (smin:SI (match_operand:SI 1 "register_operand" "d")
|
||||||
|
+ (match_operand:SI 2 "register_operand" "d")))]
|
||||||
|
+ "TARGET_ALLEGREX"
|
||||||
|
+ "min\t%0,%1,%2"
|
||||||
|
+ [(set_attr "type" "arith")
|
||||||
|
+ (set_attr "mode" "SI")])
|
||||||
|
+
|
||||||
|
+(define_insn "smaxsi3"
|
||||||
|
+ [(set (match_operand:SI 0 "register_operand" "=d")
|
||||||
|
+ (smax:SI (match_operand:SI 1 "register_operand" "d")
|
||||||
|
+ (match_operand:SI 2 "register_operand" "d")))]
|
||||||
|
+ "TARGET_ALLEGREX"
|
||||||
|
+ "max\t%0,%1,%2"
|
||||||
|
+ [(set_attr "type" "arith")
|
||||||
|
+ (set_attr "mode" "SI")])
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+;; Extended shift instructions.
|
||||||
|
+
|
||||||
|
+(define_insn "allegrex_bitrev"
|
||||||
|
+ [(set (match_operand:SI 0 "register_operand" "=d")
|
||||||
|
+ (unspec:SI [(match_operand:SI 1 "register_operand" "d")]
|
||||||
|
+ UNSPEC_BITREV))]
|
||||||
|
+ "TARGET_ALLEGREX"
|
||||||
|
+ "bitrev\t%0,%1"
|
||||||
|
+ [(set_attr "type" "arith")
|
||||||
|
+ (set_attr "mode" "SI")])
|
||||||
|
+
|
||||||
|
+(define_insn "allegrex_wsbh"
|
||||||
|
+ [(set (match_operand:SI 0 "register_operand" "=d")
|
||||||
|
+ (unspec:SI [(match_operand:SI 1 "register_operand" "d")]
|
||||||
|
+ UNSPEC_WSBH))]
|
||||||
|
+ "TARGET_ALLEGREX"
|
||||||
|
+ "wsbh\t%0,%1"
|
||||||
|
+ [(set_attr "type" "arith")
|
||||||
|
+ (set_attr "mode" "SI")])
|
||||||
|
+
|
||||||
|
+(define_insn "bswapsi2"
|
||||||
|
+ [(set (match_operand:SI 0 "register_operand" "=d")
|
||||||
|
+ (bswap:SI (match_operand:SI 1 "register_operand" "d")))]
|
||||||
|
+ "TARGET_ALLEGREX"
|
||||||
|
+ "wsbw\t%0,%1"
|
||||||
|
+ [(set_attr "type" "shift")
|
||||||
|
+ (set_attr "mode" "SI")])
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+;; Count leading ones, count trailing zeros, and count trailing ones (clz is
|
||||||
|
+;; already defined).
|
||||||
|
+
|
||||||
|
+(define_insn "allegrex_clo"
|
||||||
|
+ [(set (match_operand:SI 0 "register_operand" "=d")
|
||||||
|
+ (unspec:SI [(match_operand:SI 1 "register_operand" "d")]
|
||||||
|
+ UNSPEC_CLO))]
|
||||||
|
+ "TARGET_ALLEGREX"
|
||||||
|
+ "clo\t%0,%1"
|
||||||
|
+ [(set_attr "type" "clz")
|
||||||
|
+ (set_attr "mode" "SI")])
|
||||||
|
+
|
||||||
|
+(define_expand "ctzsi2"
|
||||||
|
+ [(set (match_operand:SI 0 "register_operand")
|
||||||
|
+ (ctz:SI (match_operand:SI 1 "register_operand")))]
|
||||||
|
+ "TARGET_ALLEGREX"
|
||||||
|
+{
|
||||||
|
+ rtx r1;
|
||||||
|
+
|
||||||
|
+ r1 = gen_reg_rtx (SImode);
|
||||||
|
+ emit_insn (gen_allegrex_bitrev (r1, operands[1]));
|
||||||
|
+ emit_insn (gen_clzsi2 (operands[0], r1));
|
||||||
|
+ DONE;
|
||||||
|
+})
|
||||||
|
+
|
||||||
|
+(define_expand "allegrex_cto"
|
||||||
|
+ [(set (match_operand:SI 0 "register_operand")
|
||||||
|
+ (unspec:SI [(match_operand:SI 1 "register_operand")]
|
||||||
|
+ UNSPEC_CTO))]
|
||||||
|
+ "TARGET_ALLEGREX"
|
||||||
|
+{
|
||||||
|
+ rtx r1;
|
||||||
|
+
|
||||||
|
+ r1 = gen_reg_rtx (SImode);
|
||||||
|
+ emit_insn (gen_allegrex_bitrev (r1, operands[1]));
|
||||||
|
+ emit_insn (gen_allegrex_clo (operands[0], r1));
|
||||||
|
+ DONE;
|
||||||
|
+})
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+;; Misc.
|
||||||
|
+
|
||||||
|
+(define_insn "allegrex_sync"
|
||||||
|
+ [(unspec_volatile [(const_int 0)] UNSPEC_SYNC)]
|
||||||
|
+ "TARGET_ALLEGREX"
|
||||||
|
+ "sync"
|
||||||
|
+ [(set_attr "type" "unknown")
|
||||||
|
+ (set_attr "mode" "none")])
|
||||||
|
+
|
||||||
|
+(define_insn "allegrex_cache"
|
||||||
|
+ [(unspec_volatile [(match_operand:SI 0 "const_int_operand" "")
|
||||||
|
+ (match_operand:SI 1 "register_operand" "d")]
|
||||||
|
+ UNSPEC_CACHE)]
|
||||||
|
+ "TARGET_ALLEGREX"
|
||||||
|
+ "cache\t%0,0(%1)"
|
||||||
|
+ [(set_attr "type" "unknown")
|
||||||
|
+ (set_attr "mode" "none")])
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+;; Floating-point builtins.
|
||||||
|
+
|
||||||
|
+(define_insn "allegrex_ceil_w_s"
|
||||||
|
+ [(set (match_operand:SI 0 "register_operand" "=f")
|
||||||
|
+ (unspec:SI [(match_operand:SF 1 "register_operand" "f")]
|
||||||
|
+ UNSPEC_CEIL_W_S))]
|
||||||
|
+ "TARGET_ALLEGREX"
|
||||||
|
+ "ceil.w.s\t%0,%1"
|
||||||
|
+ [(set_attr "type" "fcvt")
|
||||||
|
+ (set_attr "mode" "SF")])
|
||||||
|
+
|
||||||
|
+(define_insn "allegrex_floor_w_s"
|
||||||
|
+ [(set (match_operand:SI 0 "register_operand" "=f")
|
||||||
|
+ (unspec:SI [(match_operand:SF 1 "register_operand" "f")]
|
||||||
|
+ UNSPEC_FLOOR_W_S))]
|
||||||
|
+ "TARGET_ALLEGREX"
|
||||||
|
+ "floor.w.s\t%0,%1"
|
||||||
|
+ [(set_attr "type" "fcvt")
|
||||||
|
+ (set_attr "mode" "SF")])
|
||||||
|
+
|
||||||
|
+(define_insn "allegrex_round_w_s"
|
||||||
|
+ [(set (match_operand:SI 0 "register_operand" "=f")
|
||||||
|
+ (unspec:SI [(match_operand:SF 1 "register_operand" "f")]
|
||||||
|
+ UNSPEC_ROUND_W_S))]
|
||||||
|
+ "TARGET_ALLEGREX"
|
||||||
|
+ "round.w.s\t%0,%1"
|
||||||
|
+ [(set_attr "type" "fcvt")
|
||||||
|
+ (set_attr "mode" "SF")])
|
||||||
|
diff -Nbaur gcc-4.6.3/gcc/config/mips/mips-ftypes.def gcc-4.6.3-psp/gcc/config/mips/mips-ftypes.def
|
||||||
|
--- gcc-4.6.3/gcc/config/mips/mips-ftypes.def 2009-02-20 15:20:38.000000000 +0000
|
||||||
|
+++ gcc-4.6.3-psp/gcc/config/mips/mips-ftypes.def 2012-04-04 22:37:31.000000000 +0100
|
||||||
|
@@ -53,9 +53,12 @@
|
||||||
|
|
||||||
|
DEF_MIPS_FTYPE (2, (SI, DI, SI))
|
||||||
|
DEF_MIPS_FTYPE (2, (SI, POINTER, SI))
|
||||||
|
+DEF_MIPS_FTYPE (1, (SI, HI))
|
||||||
|
+DEF_MIPS_FTYPE (1, (SI, SF))
|
||||||
|
DEF_MIPS_FTYPE (1, (SI, SI))
|
||||||
|
DEF_MIPS_FTYPE (2, (SI, SI, SI))
|
||||||
|
DEF_MIPS_FTYPE (3, (SI, SI, SI, SI))
|
||||||
|
+DEF_MIPS_FTYPE (1, (SI, QI))
|
||||||
|
DEF_MIPS_FTYPE (1, (SI, V2HI))
|
||||||
|
DEF_MIPS_FTYPE (2, (SI, V2HI, V2HI))
|
||||||
|
DEF_MIPS_FTYPE (1, (SI, V4QI))
|
||||||
|
@@ -124,3 +127,4 @@
|
||||||
|
DEF_MIPS_FTYPE (2, (VOID, SI, SI))
|
||||||
|
DEF_MIPS_FTYPE (2, (VOID, V2HI, V2HI))
|
||||||
|
DEF_MIPS_FTYPE (2, (VOID, V4QI, V4QI))
|
||||||
|
+DEF_MIPS_FTYPE (1, (VOID, VOID))
|
||||||
|
diff -Nbaur gcc-4.6.3/gcc/config/mips/mips.c gcc-4.6.3-psp/gcc/config/mips/mips.c
|
||||||
|
--- gcc-4.6.3/gcc/config/mips/mips.c 2011-05-29 18:48:14.000000000 +0100
|
||||||
|
+++ gcc-4.6.3-psp/gcc/config/mips/mips.c 2012-04-04 22:37:31.000000000 +0100
|
||||||
|
@@ -239,7 +239,12 @@
|
||||||
|
MIPS_BUILTIN_CMP_SINGLE,
|
||||||
|
|
||||||
|
/* For generating bposge32 branch instructions in MIPS32 DSP ASE. */
|
||||||
|
- MIPS_BUILTIN_BPOSGE32
|
||||||
|
+ MIPS_BUILTIN_BPOSGE32,
|
||||||
|
+
|
||||||
|
+ /* The builtin corresponds to the ALLEGREX cache instruction. Operand 0
|
||||||
|
+ is the function code (must be less than 32) and operand 1 is the base
|
||||||
|
+ address. */
|
||||||
|
+ MIPS_BUILTIN_CACHE
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Invoke MACRO (COND) for each C.cond.fmt condition. */
|
||||||
|
@@ -516,6 +521,10 @@
|
||||||
|
normal branch. */
|
||||||
|
static bool mips_branch_likely;
|
||||||
|
|
||||||
|
+/* Preferred stack boundary for proper stack vars alignment */
|
||||||
|
+unsigned int mips_preferred_stack_boundary;
|
||||||
|
+unsigned int mips_preferred_stack_align;
|
||||||
|
+
|
||||||
|
/* The current instruction-set architecture. */
|
||||||
|
enum processor mips_arch;
|
||||||
|
const struct mips_cpu_info *mips_arch_info;
|
||||||
|
@@ -691,6 +700,7 @@
|
||||||
|
|
||||||
|
/* MIPS II processors. */
|
||||||
|
{ "r6000", PROCESSOR_R6000, 2, 0 },
|
||||||
|
+ { "allegrex", PROCESSOR_ALLEGREX, 2, 0 },
|
||||||
|
|
||||||
|
/* MIPS III processors. */
|
||||||
|
{ "r4000", PROCESSOR_R4000, 3, 0 },
|
||||||
|
@@ -969,6 +979,9 @@
|
||||||
|
1, /* branch_cost */
|
||||||
|
4 /* memory_latency */
|
||||||
|
},
|
||||||
|
+ { /* Allegrex */
|
||||||
|
+ DEFAULT_COSTS
|
||||||
|
+ },
|
||||||
|
{ /* Loongson-2E */
|
||||||
|
DEFAULT_COSTS
|
||||||
|
},
|
||||||
|
@@ -12605,6 +12618,7 @@
|
||||||
|
AVAIL_NON_MIPS16 (dspr2_32, !TARGET_64BIT && TARGET_DSPR2)
|
||||||
|
AVAIL_NON_MIPS16 (loongson, TARGET_LOONGSON_VECTORS)
|
||||||
|
AVAIL_NON_MIPS16 (cache, TARGET_CACHE_BUILTIN)
|
||||||
|
+AVAIL_NON_MIPS16 (allegrex, TARGET_ALLEGREX)
|
||||||
|
|
||||||
|
/* Construct a mips_builtin_description from the given arguments.
|
||||||
|
|
||||||
|
@@ -12701,6 +12715,30 @@
|
||||||
|
MIPS_BUILTIN (bposge, f, "bposge" #VALUE, \
|
||||||
|
MIPS_BUILTIN_BPOSGE ## VALUE, MIPS_SI_FTYPE_VOID, AVAIL)
|
||||||
|
|
||||||
|
+/* Define a MIPS_BUILTIN_DIRECT function for instruction CODE_FOR_allegrex_<INSN>.
|
||||||
|
+ FUNCTION_TYPE and TARGET_FLAGS are builtin_description fields. */
|
||||||
|
+#define DIRECT_ALLEGREX_BUILTIN(INSN, FUNCTION_TYPE, TARGET_FLAGS) \
|
||||||
|
+ { CODE_FOR_allegrex_ ## INSN, MIPS_FP_COND_f, "__builtin_allegrex_" #INSN, \
|
||||||
|
+ MIPS_BUILTIN_DIRECT, FUNCTION_TYPE, mips_builtin_avail_allegrex }
|
||||||
|
+
|
||||||
|
+/* Same as the above, but mapped to an instruction that doesn't share the
|
||||||
|
+ NAME. NAME is the name of the builtin without the builtin prefix. */
|
||||||
|
+#define DIRECT_ALLEGREX_NAMED_BUILTIN(NAME, INSN, FUNCTION_TYPE, TARGET_FLAGS) \
|
||||||
|
+ { CODE_FOR_ ## INSN, MIPS_FP_COND_f, "__builtin_allegrex_" #NAME, \
|
||||||
|
+ MIPS_BUILTIN_DIRECT, FUNCTION_TYPE, mips_builtin_avail_allegrex }
|
||||||
|
+
|
||||||
|
+/* Define a MIPS_BUILTIN_DIRECT_NO_TARGET function for instruction
|
||||||
|
+ CODE_FOR_allegrex_<INSN>. FUNCTION_TYPE and TARGET_FLAGS are
|
||||||
|
+ builtin_description fields. */
|
||||||
|
+#define DIRECT_ALLEGREX_NO_TARGET_BUILTIN(INSN, FUNCTION_TYPE, TARGET_FLAGS) \
|
||||||
|
+ { CODE_FOR_allegrex_ ## INSN, MIPS_FP_COND_f, "__builtin_allegrex_" #INSN, \
|
||||||
|
+ MIPS_BUILTIN_DIRECT_NO_TARGET, FUNCTION_TYPE, mips_builtin_avail_allegrex }
|
||||||
|
+
|
||||||
|
+/* Define a builtin with a specific function TYPE. */
|
||||||
|
+#define SPECIAL_ALLEGREX_BUILTIN(TYPE, INSN, FUNCTION_TYPE, TARGET_FLAGS) \
|
||||||
|
+ { CODE_FOR_allegrex_ ## INSN, MIPS_FP_COND_f, "__builtin_allegrex_" #INSN, \
|
||||||
|
+ MIPS_BUILTIN_ ## TYPE, FUNCTION_TYPE, mips_builtin_avail_allegrex }
|
||||||
|
+
|
||||||
|
/* Define a Loongson MIPS_BUILTIN_DIRECT function __builtin_loongson_<FN_NAME>
|
||||||
|
for instruction CODE_FOR_loongson_<INSN>. FUNCTION_TYPE is a
|
||||||
|
builtin_description field. */
|
||||||
|
@@ -12945,6 +12983,40 @@
|
||||||
|
DIRECT_BUILTIN (dpsqx_s_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, dspr2_32),
|
||||||
|
DIRECT_BUILTIN (dpsqx_sa_w_ph, MIPS_DI_FTYPE_DI_V2HI_V2HI, dspr2_32),
|
||||||
|
|
||||||
|
+/* Builtin functions for the Sony ALLEGREX processor.
|
||||||
|
+
|
||||||
|
+ These have the `__builtin_allegrex_' prefix instead of `__builtin_mips_'
|
||||||
|
+ to maintain compatibility with Sony's ALLEGREX GCC port.
|
||||||
|
+
|
||||||
|
+ Some of the builtins may seem redundant, but they are the same as the
|
||||||
|
+ builtins defined in the Sony compiler. I chose to map redundant and
|
||||||
|
+ trivial builtins to the original instruction instead of creating
|
||||||
|
+ duplicate patterns specifically for the ALLEGREX (as Sony does). */
|
||||||
|
+
|
||||||
|
+ DIRECT_ALLEGREX_BUILTIN(bitrev, MIPS_SI_FTYPE_SI, 0),
|
||||||
|
+ DIRECT_ALLEGREX_BUILTIN(wsbh, MIPS_SI_FTYPE_SI, 0),
|
||||||
|
+ DIRECT_ALLEGREX_NAMED_BUILTIN(wsbw, bswapsi2, MIPS_SI_FTYPE_SI, 0),
|
||||||
|
+ DIRECT_ALLEGREX_NAMED_BUILTIN(clz, clzsi2, MIPS_SI_FTYPE_SI, 0),
|
||||||
|
+ DIRECT_ALLEGREX_BUILTIN(clo, MIPS_SI_FTYPE_SI, 0),
|
||||||
|
+ DIRECT_ALLEGREX_NAMED_BUILTIN(ctz, ctzsi2, MIPS_SI_FTYPE_SI, 0),
|
||||||
|
+ DIRECT_ALLEGREX_BUILTIN(cto, MIPS_SI_FTYPE_SI, 0),
|
||||||
|
+ DIRECT_ALLEGREX_NAMED_BUILTIN(rotr, rotrsi3, MIPS_SI_FTYPE_SI_SI, 0),
|
||||||
|
+ DIRECT_ALLEGREX_NAMED_BUILTIN(rotl, rotlsi3, MIPS_SI_FTYPE_SI_SI, 0),
|
||||||
|
+
|
||||||
|
+ DIRECT_ALLEGREX_NAMED_BUILTIN(seb, extendqisi2, MIPS_SI_FTYPE_QI, 0),
|
||||||
|
+ DIRECT_ALLEGREX_NAMED_BUILTIN(seh, extendhisi2, MIPS_SI_FTYPE_HI, 0),
|
||||||
|
+ DIRECT_ALLEGREX_NAMED_BUILTIN(max, smaxsi3, MIPS_SI_FTYPE_SI_SI, 0),
|
||||||
|
+ DIRECT_ALLEGREX_NAMED_BUILTIN(min, sminsi3, MIPS_SI_FTYPE_SI_SI, 0),
|
||||||
|
+
|
||||||
|
+ DIRECT_ALLEGREX_NO_TARGET_BUILTIN(sync, MIPS_VOID_FTYPE_VOID, 0),
|
||||||
|
+ SPECIAL_ALLEGREX_BUILTIN(CACHE, cache, MIPS_VOID_FTYPE_SI_SI, 0),
|
||||||
|
+
|
||||||
|
+ DIRECT_ALLEGREX_NAMED_BUILTIN(sqrt_s, sqrtsf2, MIPS_SF_FTYPE_SF, 0),
|
||||||
|
+ DIRECT_ALLEGREX_BUILTIN(ceil_w_s, MIPS_SI_FTYPE_SF, 0),
|
||||||
|
+ DIRECT_ALLEGREX_BUILTIN(floor_w_s, MIPS_SI_FTYPE_SF, 0),
|
||||||
|
+ DIRECT_ALLEGREX_BUILTIN(round_w_s, MIPS_SI_FTYPE_SF, 0),
|
||||||
|
+ DIRECT_ALLEGREX_NAMED_BUILTIN(trunc_w_s, fix_truncsfsi2_insn, MIPS_SI_FTYPE_SF, 0),
|
||||||
|
+
|
||||||
|
/* Builtin functions for ST Microelectronics Loongson-2E/2F cores. */
|
||||||
|
LOONGSON_BUILTIN (packsswh, MIPS_V4HI_FTYPE_V2SI_V2SI),
|
||||||
|
LOONGSON_BUILTIN (packsshb, MIPS_V8QI_FTYPE_V4HI_V4HI),
|
||||||
|
@@ -13096,6 +13168,8 @@
|
||||||
|
/* Standard mode-based argument types. */
|
||||||
|
#define MIPS_ATYPE_UQI unsigned_intQI_type_node
|
||||||
|
#define MIPS_ATYPE_SI intSI_type_node
|
||||||
|
+#define MIPS_ATYPE_HI intHI_type_node
|
||||||
|
+#define MIPS_ATYPE_QI intQI_type_node
|
||||||
|
#define MIPS_ATYPE_USI unsigned_intSI_type_node
|
||||||
|
#define MIPS_ATYPE_DI intDI_type_node
|
||||||
|
#define MIPS_ATYPE_UDI unsigned_intDI_type_node
|
||||||
|
@@ -13270,6 +13344,9 @@
|
||||||
|
|
||||||
|
switch (opno)
|
||||||
|
{
|
||||||
|
+ case 0:
|
||||||
|
+ emit_insn (GEN_FCN (icode) (0));
|
||||||
|
+ break;
|
||||||
|
case 2:
|
||||||
|
emit_insn (GEN_FCN (icode) (ops[0], ops[1]));
|
||||||
|
break;
|
||||||
|
@@ -13439,6 +13516,28 @@
|
||||||
|
const1_rtx, const0_rtx);
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* Expand a __builtin_allegrex_cache() function. Make sure the passed
|
||||||
|
+ cache function code is less than 32. */
|
||||||
|
+
|
||||||
|
+static rtx
|
||||||
|
+mips_expand_builtin_cache (enum insn_code icode, rtx target, tree exp)
|
||||||
|
+{
|
||||||
|
+ rtx op0, op1;
|
||||||
|
+
|
||||||
|
+ op0 = mips_prepare_builtin_arg (icode, 0, exp, 0);
|
||||||
|
+ op1 = mips_prepare_builtin_arg (icode, 1, exp, 1);
|
||||||
|
+
|
||||||
|
+ if (GET_CODE (op0) == CONST_INT)
|
||||||
|
+ if (INTVAL (op0) < 0 || INTVAL (op0) > 0x1f)
|
||||||
|
+ {
|
||||||
|
+ error ("invalid function code '%d'", INTVAL (op0));
|
||||||
|
+ return const0_rtx;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ emit_insn (GEN_FCN (icode) (op0, op1));
|
||||||
|
+ return target;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/* Implement TARGET_EXPAND_BUILTIN. */
|
||||||
|
|
||||||
|
static rtx
|
||||||
|
@@ -13484,6 +13583,9 @@
|
||||||
|
|
||||||
|
case MIPS_BUILTIN_BPOSGE32:
|
||||||
|
return mips_expand_builtin_bposge (d->builtin_type, target);
|
||||||
|
+
|
||||||
|
+ case MIPS_BUILTIN_CACHE:
|
||||||
|
+ return mips_expand_builtin_cache (d->icode, target, exp);
|
||||||
|
}
|
||||||
|
gcc_unreachable ();
|
||||||
|
}
|
||||||
|
@@ -15918,6 +16020,22 @@
|
||||||
|
Do all CPP-sensitive stuff in non-MIPS16 mode; we'll switch to
|
||||||
|
MIPS16 mode afterwards if need be. */
|
||||||
|
mips_set_mips16_mode (false);
|
||||||
|
+
|
||||||
|
+ /* Validate -mpreferred-stack-boundary= value, or provide default.
|
||||||
|
+ The default of 128-bit is for newABI else 64-bit. */
|
||||||
|
+ mips_preferred_stack_boundary = (TARGET_NEWABI ? 128 : 64);
|
||||||
|
+ mips_preferred_stack_align = (TARGET_NEWABI ? 16 : 8);
|
||||||
|
+ if (mips_preferred_stack_boundary_string)
|
||||||
|
+ {
|
||||||
|
+ i = atoi (mips_preferred_stack_boundary_string);
|
||||||
|
+ if (i < 2 || i > 12)
|
||||||
|
+ error ("-mpreferred-stack-boundary=%d is not between 2 and 12", i);
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ mips_preferred_stack_align = (1 << i);
|
||||||
|
+ mips_preferred_stack_boundary = mips_preferred_stack_align * 8;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Implement TARGET_OPTION_OPTIMIZATION_TABLE. */
|
||||||
|
diff -Nbaur gcc-4.6.3/gcc/config/mips/mips.h gcc-4.6.3-psp/gcc/config/mips/mips.h
|
||||||
|
--- gcc-4.6.3/gcc/config/mips/mips.h 2011-03-08 20:51:11.000000000 +0000
|
||||||
|
+++ gcc-4.6.3-psp/gcc/config/mips/mips.h 2012-04-04 22:37:31.000000000 +0100
|
||||||
|
@@ -231,6 +231,7 @@
|
||||||
|
#define TARGET_SB1 (mips_arch == PROCESSOR_SB1 \
|
||||||
|
|| mips_arch == PROCESSOR_SB1A)
|
||||||
|
#define TARGET_SR71K (mips_arch == PROCESSOR_SR71000)
|
||||||
|
+#define TARGET_ALLEGREX (mips_arch == PROCESSOR_ALLEGREX)
|
||||||
|
|
||||||
|
/* Scheduling target defines. */
|
||||||
|
#define TUNE_20KC (mips_tune == PROCESSOR_20KC)
|
||||||
|
@@ -258,6 +259,7 @@
|
||||||
|
#define TUNE_OCTEON (mips_tune == PROCESSOR_OCTEON)
|
||||||
|
#define TUNE_SB1 (mips_tune == PROCESSOR_SB1 \
|
||||||
|
|| mips_tune == PROCESSOR_SB1A)
|
||||||
|
+#define TUNE_ALLEGREX (mips_tune == PROCESSOR_ALLEGREX)
|
||||||
|
|
||||||
|
/* Whether vector modes and intrinsics for ST Microelectronics
|
||||||
|
Loongson-2E/2F processors should be enabled. In o32 pairs of
|
||||||
|
@@ -852,6 +854,9 @@
|
||||||
|
/* ISA has LDC1 and SDC1. */
|
||||||
|
#define ISA_HAS_LDC1_SDC1 (!ISA_MIPS1 && !TARGET_MIPS16)
|
||||||
|
|
||||||
|
+/* ISA has just the integer condition move instructions (movn,movz) */
|
||||||
|
+#define ISA_HAS_INT_CONDMOVE (TARGET_ALLEGREX)
|
||||||
|
+
|
||||||
|
/* ISA has the mips4 FP condition code instructions: FP-compare to CC,
|
||||||
|
branch on CC, and move (both FP and non-FP) on CC. */
|
||||||
|
#define ISA_HAS_8CC (ISA_MIPS4 \
|
||||||
|
@@ -874,6 +879,7 @@
|
||||||
|
|
||||||
|
/* ISA has conditional trap instructions. */
|
||||||
|
#define ISA_HAS_COND_TRAP (!ISA_MIPS1 \
|
||||||
|
+ && !TARGET_ALLEGREX \
|
||||||
|
&& !TARGET_MIPS16)
|
||||||
|
|
||||||
|
/* ISA has integer multiply-accumulate instructions, madd and msub. */
|
||||||
|
@@ -910,6 +916,7 @@
|
||||||
|
/* ISA has count leading zeroes/ones instruction (not implemented). */
|
||||||
|
#define ISA_HAS_CLZ_CLO ((ISA_MIPS32 \
|
||||||
|
|| ISA_MIPS32R2 \
|
||||||
|
+ || TARGET_ALLEGREX \
|
||||||
|
|| ISA_MIPS64 \
|
||||||
|
|| ISA_MIPS64R2) \
|
||||||
|
&& !TARGET_MIPS16)
|
||||||
|
@@ -955,6 +962,7 @@
|
||||||
|
|| TARGET_MIPS5400 \
|
||||||
|
|| TARGET_MIPS5500 \
|
||||||
|
|| TARGET_SR71K \
|
||||||
|
+ || TARGET_ALLEGREX \
|
||||||
|
|| TARGET_SMARTMIPS) \
|
||||||
|
&& !TARGET_MIPS16)
|
||||||
|
|
||||||
|
@@ -984,11 +992,13 @@
|
||||||
|
|
||||||
|
/* ISA includes the MIPS32r2 seb and seh instructions. */
|
||||||
|
#define ISA_HAS_SEB_SEH ((ISA_MIPS32R2 \
|
||||||
|
+ || TARGET_ALLEGREX \
|
||||||
|
|| ISA_MIPS64R2) \
|
||||||
|
&& !TARGET_MIPS16)
|
||||||
|
|
||||||
|
/* ISA includes the MIPS32/64 rev 2 ext and ins instructions. */
|
||||||
|
#define ISA_HAS_EXT_INS ((ISA_MIPS32R2 \
|
||||||
|
+ || TARGET_ALLEGREX \
|
||||||
|
|| ISA_MIPS64R2) \
|
||||||
|
&& !TARGET_MIPS16)
|
||||||
|
|
||||||
|
@@ -1038,7 +1048,8 @@
|
||||||
|
|| ISA_MIPS64 \
|
||||||
|
|| ISA_MIPS64R2 \
|
||||||
|
|| TARGET_MIPS5500 \
|
||||||
|
- || TARGET_LOONGSON_2EF)
|
||||||
|
+ || TARGET_LOONGSON_2EF \
|
||||||
|
+ || TARGET_ALLEGREX)
|
||||||
|
|
||||||
|
/* ISA includes synci, jr.hb and jalr.hb. */
|
||||||
|
#define ISA_HAS_SYNCI ((ISA_MIPS32R2 \
|
||||||
|
@@ -2133,7 +2144,7 @@
|
||||||
|
`crtl->outgoing_args_size'. */
|
||||||
|
#define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1
|
||||||
|
|
||||||
|
-#define STACK_BOUNDARY (TARGET_NEWABI ? 128 : 64)
|
||||||
|
+#define STACK_BOUNDARY (mips_preferred_stack_boundary)
|
||||||
|
|
||||||
|
/* Symbolic macros for the registers used to return integer and floating
|
||||||
|
point values. */
|
||||||
|
@@ -2259,7 +2270,7 @@
|
||||||
|
/* Treat LOC as a byte offset from the stack pointer and round it up
|
||||||
|
to the next fully-aligned offset. */
|
||||||
|
#define MIPS_STACK_ALIGN(LOC) \
|
||||||
|
- (TARGET_NEWABI ? ((LOC) + 15) & -16 : ((LOC) + 7) & -8)
|
||||||
|
+ (((LOC) + (mips_preferred_stack_align - 1)) & -(mips_preferred_stack_align))
|
||||||
|
|
||||||
|
|
||||||
|
/* Output assembler code to FILE to increment profiler label # LABELNO
|
||||||
|
@@ -2911,6 +2922,9 @@
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+extern unsigned int mips_preferred_stack_boundary;
|
||||||
|
+extern unsigned int mips_preferred_stack_align;
|
||||||
|
+
|
||||||
|
#ifndef HAVE_AS_TLS
|
||||||
|
#define HAVE_AS_TLS 0
|
||||||
|
#endif
|
||||||
|
diff -Nbaur gcc-4.6.3/gcc/config/mips/mips.md gcc-4.6.3-psp/gcc/config/mips/mips.md
|
||||||
|
--- gcc-4.6.3/gcc/config/mips/mips.md 2012-01-09 22:09:53.000000000 +0000
|
||||||
|
+++ gcc-4.6.3-psp/gcc/config/mips/mips.md 2012-04-04 22:37:31.000000000 +0100
|
||||||
|
@@ -37,6 +37,7 @@
|
||||||
|
74kf2_1
|
||||||
|
74kf1_1
|
||||||
|
74kf3_2
|
||||||
|
+ allegrex
|
||||||
|
loongson_2e
|
||||||
|
loongson_2f
|
||||||
|
loongson_3a
|
||||||
|
@@ -598,7 +599,7 @@
|
||||||
|
;; This mode iterator allows :MOVECC to be used anywhere that a
|
||||||
|
;; conditional-move-type condition is needed.
|
||||||
|
(define_mode_iterator MOVECC [SI (DI "TARGET_64BIT")
|
||||||
|
- (CC "TARGET_HARD_FLOAT && !TARGET_LOONGSON_2EF")])
|
||||||
|
+ (CC "TARGET_HARD_FLOAT && !TARGET_LOONGSON_2EF && !TARGET_ALLEGREX")])
|
||||||
|
|
||||||
|
;; 32-bit integer moves for which we provide move patterns.
|
||||||
|
(define_mode_iterator IMOVE32
|
||||||
|
@@ -1885,11 +1886,11 @@
|
||||||
|
(mult:DI
|
||||||
|
(any_extend:DI (match_operand:SI 1 "register_operand" "d"))
|
||||||
|
(any_extend:DI (match_operand:SI 2 "register_operand" "d")))))]
|
||||||
|
- "!TARGET_64BIT && (ISA_HAS_MSAC || GENERATE_MADD_MSUB || ISA_HAS_DSP)"
|
||||||
|
+ "!TARGET_64BIT && (ISA_HAS_MSAC || GENERATE_MADD_MSUB || ISA_HAS_DSP || TARGET_ALLEGREX)"
|
||||||
|
{
|
||||||
|
if (ISA_HAS_DSP_MULT)
|
||||||
|
return "msub<u>\t%q0,%1,%2";
|
||||||
|
- else if (TARGET_MIPS5500 || GENERATE_MADD_MSUB)
|
||||||
|
+ else if (TARGET_MIPS5500 || GENERATE_MADD_MSUB || TARGET_ALLEGREX)
|
||||||
|
return "msub<u>\t%1,%2";
|
||||||
|
else
|
||||||
|
return "msac<u>\t$0,%1,%2";
|
||||||
|
@@ -2066,14 +2067,14 @@
|
||||||
|
(mult:DI (any_extend:DI (match_operand:SI 1 "register_operand" "d"))
|
||||||
|
(any_extend:DI (match_operand:SI 2 "register_operand" "d")))
|
||||||
|
(match_operand:DI 3 "register_operand" "0")))]
|
||||||
|
- "(TARGET_MAD || ISA_HAS_MACC || GENERATE_MADD_MSUB || ISA_HAS_DSP)
|
||||||
|
+ "(TARGET_MAD || ISA_HAS_MACC || GENERATE_MADD_MSUB || ISA_HAS_DSP || TARGET_ALLEGREX)
|
||||||
|
&& !TARGET_64BIT"
|
||||||
|
{
|
||||||
|
if (TARGET_MAD)
|
||||||
|
return "mad<u>\t%1,%2";
|
||||||
|
else if (ISA_HAS_DSP_MULT)
|
||||||
|
return "madd<u>\t%q0,%1,%2";
|
||||||
|
- else if (GENERATE_MADD_MSUB || TARGET_MIPS5500)
|
||||||
|
+ else if (GENERATE_MADD_MSUB || TARGET_MIPS5500 || TARGET_ALLEGREX)
|
||||||
|
return "madd<u>\t%1,%2";
|
||||||
|
else
|
||||||
|
/* See comment in *macc. */
|
||||||
|
@@ -2500,6 +2501,33 @@
|
||||||
|
;;
|
||||||
|
;; ....................
|
||||||
|
;;
|
||||||
|
+;; FIND FIRST BIT INSTRUCTION
|
||||||
|
+;;
|
||||||
|
+;; ....................
|
||||||
|
+;;
|
||||||
|
+
|
||||||
|
+(define_expand "ffs<mode>2"
|
||||||
|
+ [(set (match_operand:GPR 0 "register_operand" "")
|
||||||
|
+ (ffs:GPR (match_operand:GPR 1 "register_operand" "")))]
|
||||||
|
+ "ISA_HAS_CLZ_CLO"
|
||||||
|
+{
|
||||||
|
+ rtx r1, r2, r3, r4;
|
||||||
|
+
|
||||||
|
+ r1 = gen_reg_rtx (<MODE>mode);
|
||||||
|
+ r2 = gen_reg_rtx (<MODE>mode);
|
||||||
|
+ r3 = gen_reg_rtx (<MODE>mode);
|
||||||
|
+ r4 = gen_reg_rtx (<MODE>mode);
|
||||||
|
+ emit_insn (gen_neg<mode>2 (r1, operands[1]));
|
||||||
|
+ emit_insn (gen_and<mode>3 (r2, operands[1], r1));
|
||||||
|
+ emit_insn (gen_clz<mode>2 (r3, r2));
|
||||||
|
+ emit_move_insn (r4, GEN_INT (GET_MODE_BITSIZE (<MODE>mode)));
|
||||||
|
+ emit_insn (gen_sub<mode>3 (operands[0], r4, r3));
|
||||||
|
+ DONE;
|
||||||
|
+})
|
||||||
|
+
|
||||||
|
+;;
|
||||||
|
+;; ....................
|
||||||
|
+;;
|
||||||
|
;; NEGATION and ONE'S COMPLEMENT
|
||||||
|
;;
|
||||||
|
;; ....................
|
||||||
|
@@ -2550,6 +2578,25 @@
|
||||||
|
[(set_attr "alu_type" "not")
|
||||||
|
(set_attr "mode" "<MODE>")])
|
||||||
|
|
||||||
|
+(define_expand "rotl<mode>3"
|
||||||
|
+ [(set (match_operand:GPR 0 "register_operand")
|
||||||
|
+ (rotate:GPR (match_operand:GPR 1 "register_operand")
|
||||||
|
+ (match_operand:SI 2 "arith_operand")))]
|
||||||
|
+ "ISA_HAS_ROR"
|
||||||
|
+{
|
||||||
|
+ rtx temp;
|
||||||
|
+
|
||||||
|
+ if (GET_CODE (operands[2]) == CONST_INT)
|
||||||
|
+ temp = GEN_INT (GET_MODE_BITSIZE (<MODE>mode) - INTVAL (operands[2]));
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ temp = gen_reg_rtx (<MODE>mode);
|
||||||
|
+ emit_insn (gen_neg<mode>2 (temp, operands[2]));
|
||||||
|
+ }
|
||||||
|
+ emit_insn (gen_rotr<mode>3 (operands[0], operands[1], temp));
|
||||||
|
+ DONE;
|
||||||
|
+})
|
||||||
|
+
|
||||||
|
;;
|
||||||
|
;; ....................
|
||||||
|
;;
|
||||||
|
@@ -6301,7 +6348,7 @@
|
||||||
|
(const_int 0)])
|
||||||
|
(match_operand:GPR 2 "reg_or_0_operand" "dJ,0")
|
||||||
|
(match_operand:GPR 3 "reg_or_0_operand" "0,dJ")))]
|
||||||
|
- "ISA_HAS_CONDMOVE"
|
||||||
|
+ "ISA_HAS_CONDMOVE || ISA_HAS_INT_CONDMOVE"
|
||||||
|
"@
|
||||||
|
mov%T4\t%0,%z2,%1
|
||||||
|
mov%t4\t%0,%z3,%1"
|
||||||
|
@@ -6331,8 +6378,12 @@
|
||||||
|
(if_then_else:GPR (match_dup 5)
|
||||||
|
(match_operand:GPR 2 "reg_or_0_operand")
|
||||||
|
(match_operand:GPR 3 "reg_or_0_operand")))]
|
||||||
|
- "ISA_HAS_CONDMOVE"
|
||||||
|
+ "ISA_HAS_CONDMOVE || ISA_HAS_INT_CONDMOVE"
|
||||||
|
{
|
||||||
|
+ if (ISA_HAS_INT_CONDMOVE
|
||||||
|
+ && GET_MODE_CLASS (GET_MODE (operands[0])) == MODE_FLOAT)
|
||||||
|
+ FAIL;
|
||||||
|
+
|
||||||
|
mips_expand_conditional_move (operands);
|
||||||
|
DONE;
|
||||||
|
})
|
||||||
|
@@ -6481,6 +6532,9 @@
|
||||||
|
; ST-Microelectronics Loongson-2E/2F-specific patterns.
|
||||||
|
(include "loongson.md")
|
||||||
|
|
||||||
|
+; Sony ALLEGREX instructions.
|
||||||
|
+(include "allegrex.md")
|
||||||
|
+
|
||||||
|
(define_c_enum "unspec" [
|
||||||
|
UNSPEC_ADDRESS_FIRST
|
||||||
|
])
|
||||||
|
diff -Nbaur gcc-4.6.3/gcc/config/mips/mips.opt gcc-4.6.3-psp/gcc/config/mips/mips.opt
|
||||||
|
--- gcc-4.6.3/gcc/config/mips/mips.opt 2011-02-17 01:59:04.000000000 +0000
|
||||||
|
+++ gcc-4.6.3-psp/gcc/config/mips/mips.opt 2012-04-04 22:37:31.000000000 +0100
|
||||||
|
@@ -306,5 +306,9 @@
|
||||||
|
Target Report Var(TARGET_XGOT)
|
||||||
|
Lift restrictions on GOT size
|
||||||
|
|
||||||
|
+mpreferred-stack-boundary=
|
||||||
|
+Target RejectNegative Joined Var(mips_preferred_stack_boundary_string)
|
||||||
|
+Attempt to keep stack aligned to this power of 2
|
||||||
|
+
|
||||||
|
noasmopt
|
||||||
|
Driver
|
||||||
|
diff -Nbaur gcc-4.6.3/gcc/config/mips/psp.h gcc-4.6.3-psp/gcc/config/mips/psp.h
|
||||||
|
--- gcc-4.6.3/gcc/config/mips/psp.h 1970-01-01 01:00:00.000000000 +0100
|
||||||
|
+++ gcc-4.6.3-psp/gcc/config/mips/psp.h 2012-04-04 22:37:31.000000000 +0100
|
||||||
|
@@ -0,0 +1,31 @@
|
||||||
|
+/* Support for Sony's Playstation Portable (PSP).
|
||||||
|
+ Copyright (C) 2005 Free Software Foundation, Inc.
|
||||||
|
+ Contributed by Marcus R. Brown <mrbrown@ocgnet.org>
|
||||||
|
+
|
||||||
|
+This file is part of GCC.
|
||||||
|
+
|
||||||
|
+GCC is free software; you can redistribute it and/or modify
|
||||||
|
+it under the terms of the GNU General Public License as published by
|
||||||
|
+the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
+any later version.
|
||||||
|
+
|
||||||
|
+GCC is distributed in the hope that it will be useful,
|
||||||
|
+but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
+GNU General Public License for more details.
|
||||||
|
+
|
||||||
|
+You should have received a copy of the GNU General Public License
|
||||||
|
+along with GCC; see the file COPYING. If not, write to
|
||||||
|
+the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||||
|
+Boston, MA 02111-1307, USA. */
|
||||||
|
+
|
||||||
|
+/* Override the startfile spec to include crt0.o. */
|
||||||
|
+#undef STARTFILE_SPEC
|
||||||
|
+#define STARTFILE_SPEC "crt0%O%s crti%O%s crtbegin%O%s"
|
||||||
|
+
|
||||||
|
+#undef SUBTARGET_CPP_SPEC
|
||||||
|
+#define SUBTARGET_CPP_SPEC "-DPSP=1 -D__psp__=1 -D_PSP=1"
|
||||||
|
+
|
||||||
|
+/* Get rid of the .pdr section. */
|
||||||
|
+#undef SUBTARGET_ASM_SPEC
|
||||||
|
+#define SUBTARGET_ASM_SPEC "-mno-pdr"
|
||||||
|
diff -Nbaur gcc-4.6.3/gcc/config/mips/t-allegrex gcc-4.6.3-psp/gcc/config/mips/t-allegrex
|
||||||
|
--- gcc-4.6.3/gcc/config/mips/t-allegrex 1970-01-01 01:00:00.000000000 +0100
|
||||||
|
+++ gcc-4.6.3-psp/gcc/config/mips/t-allegrex 2012-04-04 22:37:31.000000000 +0100
|
||||||
|
@@ -0,0 +1,29 @@
|
||||||
|
+# Suppress building libgcc1.a, since the MIPS compiler port is complete
|
||||||
|
+# and does not need anything from libgcc1.a.
|
||||||
|
+LIBGCC1 =
|
||||||
|
+CROSS_LIBGCC1 =
|
||||||
|
+
|
||||||
|
+EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o crti.o crtn.o
|
||||||
|
+# Don't let CTOR_LIST end up in sdata section.
|
||||||
|
+CRTSTUFF_T_CFLAGS = -G 0
|
||||||
|
+
|
||||||
|
+# Assemble startup files.
|
||||||
|
+$(T)crti.o: $(srcdir)/config/mips/crti.asm $(GCC_PASSES)
|
||||||
|
+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
|
||||||
|
+ -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/mips/crti.asm
|
||||||
|
+
|
||||||
|
+$(T)crtn.o: $(srcdir)/config/mips/crtn.asm $(GCC_PASSES)
|
||||||
|
+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
|
||||||
|
+ -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/mips/crtn.asm
|
||||||
|
+
|
||||||
|
+# We must build libgcc2.a with -G 0, in case the user wants to link
|
||||||
|
+# without the $gp register.
|
||||||
|
+TARGET_LIBGCC2_CFLAGS = -G 0
|
||||||
|
+
|
||||||
|
+# Build the libraries for both hard and soft floating point
|
||||||
|
+
|
||||||
|
+MULTILIB_OPTIONS =
|
||||||
|
+MULTILIB_DIRNAMES =
|
||||||
|
+
|
||||||
|
+LIBGCC = stmp-multilib
|
||||||
|
+INSTALL_LIBGCC = install-multilib
|
||||||
|
diff -Nbaur gcc-4.6.3/gcc/config.gcc gcc-4.6.3-psp/gcc/config.gcc
|
||||||
|
--- gcc-4.6.3/gcc/config.gcc 2011-07-22 17:44:50.000000000 +0100
|
||||||
|
+++ gcc-4.6.3-psp/gcc/config.gcc 2012-04-04 22:37:31.000000000 +0100
|
||||||
|
@@ -2033,6 +2033,18 @@
|
||||||
|
tm_file="elfos.h newlib-stdint.h ${tm_file} mips/r3900.h mips/elf.h"
|
||||||
|
tmake_file="mips/t-r3900 mips/t-libgcc-mips16"
|
||||||
|
;;
|
||||||
|
+mipsallegrex-*-elf* | mipsallegrexel-*-elf*)
|
||||||
|
+ tm_file="elfos.h ${tm_file} mips/elf.h"
|
||||||
|
+ tmake_file=mips/t-allegrex
|
||||||
|
+ target_cpu_default="MASK_SINGLE_FLOAT|MASK_DIVIDE_BREAKS"
|
||||||
|
+ tm_defines="MIPS_ISA_DEFAULT=2 MIPS_CPU_STRING_DEFAULT=\\\"allegrex\\\" MIPS_ABI_DEFAULT=ABI_EABI"
|
||||||
|
+ case ${target} in
|
||||||
|
+ mipsallegrex*-psp-elf*)
|
||||||
|
+ tm_file="${tm_file} mips/psp.h"
|
||||||
|
+ ;;
|
||||||
|
+ esac
|
||||||
|
+ use_fixproto=yes
|
||||||
|
+ ;;
|
||||||
|
mmix-knuth-mmixware)
|
||||||
|
tm_file="${tm_file} newlib-stdint.h"
|
||||||
|
need_64bit_hwint=yes
|
||||||
|
diff -Nbaur gcc-4.6.3/gcc/crtstuff.c gcc-4.6.3-psp/gcc/crtstuff.c
|
||||||
|
--- gcc-4.6.3/gcc/crtstuff.c 2010-12-23 12:08:21.000000000 +0000
|
||||||
|
+++ gcc-4.6.3-psp/gcc/crtstuff.c 2012-04-04 22:37:31.000000000 +0100
|
||||||
|
@@ -48,7 +48,7 @@
|
||||||
|
|
||||||
|
/* Target machine header files require this define. */
|
||||||
|
#define IN_LIBGCC2
|
||||||
|
-
|
||||||
|
+#define USED_FOR_TARGET
|
||||||
|
/* 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-4.6.3/libcpp/Makefile.in gcc-4.6.3-psp/libcpp/Makefile.in
|
||||||
|
--- gcc-4.6.3/libcpp/Makefile.in 2012-03-01 12:03:46.000000000 +0000
|
||||||
|
+++ gcc-4.6.3-psp/libcpp/Makefile.in 2012-04-05 09:32:31.000000000 +0100
|
||||||
|
@@ -212,8 +212,8 @@
|
||||||
|
# Note that we put the dependencies into a .Tpo file, then move them
|
||||||
|
# into place if the compile succeeds. We need this because gcc does
|
||||||
|
# not atomically write the dependency output file.
|
||||||
|
-COMPILE = $(COMPILE.base) -o $@ -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Tpo
|
||||||
|
-POSTCOMPILE = @mv $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
||||||
|
+COMPILE = $(COMPILE.base) -o $@
|
||||||
|
+POSTCOMPILE =
|
||||||
|
else
|
||||||
|
COMPILE = source='$<' object='$@' libtool=no DEPDIR=$(DEPDIR) $(DEPMODE) \
|
||||||
|
$(depcomp) $(COMPILE.base)
|
||||||
|
diff -Nbaur gcc-4.6.3/libgcc/config.host gcc-4.6.3-psp/libgcc/config.host
|
||||||
|
--- gcc-4.6.3/libgcc/config.host 2011-11-23 22:15:54.000000000 +0000
|
||||||
|
+++ gcc-4.6.3-psp/libgcc/config.host 2012-04-04 22:37:31.000000000 +0100
|
||||||
|
@@ -436,6 +436,8 @@
|
||||||
|
;;
|
||||||
|
mipstx39-*-elf* | mipstx39el-*-elf*)
|
||||||
|
;;
|
||||||
|
+mips*-psp-elf*)
|
||||||
|
+ ;;
|
||||||
|
mmix-knuth-mmixware)
|
||||||
|
extra_parts="crti.o crtn.o crtbegin.o crtend.o"
|
||||||
|
tmake_file="${tmake_file} ${cpu_type}/t-${cpu_type}"
|
||||||
1533
dkpsp/patches/gdb-7.4.patch
Normal file
1533
dkpsp/patches/gdb-7.4.patch
Normal file
File diff suppressed because it is too large
Load Diff
10985
dkpsp/patches/newlib-1.20.0.patch
Normal file
10985
dkpsp/patches/newlib-1.20.0.patch
Normal file
File diff suppressed because it is too large
Load Diff
205
dkpsp/scripts/build-gcc.sh
Normal file
205
dkpsp/scripts/build-gcc.sh
Normal file
@@ -0,0 +1,205 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# build and install binutils
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
mkdir -p $target/binutils
|
||||||
|
cd $target/binutils
|
||||||
|
|
||||||
|
if [ ! -f configured-binutils ]
|
||||||
|
then
|
||||||
|
CFLAGS=$cflags LDFLAGS=$ldflags ../../binutils-$BINUTILS_VER/configure \
|
||||||
|
--prefix=$prefix --target=$target --disable-nls --disable-debug \
|
||||||
|
--enable-lto --enable-plugins \
|
||||||
|
--enable-poison-system-directories \
|
||||||
|
--disable-dependency-tracking --disable-werror \
|
||||||
|
$CROSS_PARAMS \
|
||||||
|
|| { echo "Error configuring binutils"; exit 1; }
|
||||||
|
touch configured-binutils
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f built-binutils ]
|
||||||
|
then
|
||||||
|
$MAKE || { echo "Error building binutils"; exit 1; }
|
||||||
|
touch built-binutils
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ ! -f installed-binutils ]
|
||||||
|
then
|
||||||
|
$MAKE install || { echo "Error installing binutils"; exit 1; }
|
||||||
|
touch installed-binutils
|
||||||
|
fi
|
||||||
|
cd $BUILDDIR
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# build and install just the c compiler
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
mkdir -p $target/gcc
|
||||||
|
cd $target/gcc
|
||||||
|
|
||||||
|
|
||||||
|
if [ ! -f configured-gcc ]
|
||||||
|
then
|
||||||
|
CFLAGS="$cflags" LDFLAGS="$ldflags" CFLAGS_FOR_TARGET="-O2" LDFLAGS_FOR_TARGET="" ../../gcc-$GCC_VER/configure \
|
||||||
|
--enable-languages=c,c++,objc,obj-c++ \
|
||||||
|
--disable-multilib\
|
||||||
|
--disable-shared --disable-win32-registry --disable-nls\
|
||||||
|
--enable-cxx-flags="-G0" \
|
||||||
|
--disable-libstdcxx-pch \
|
||||||
|
--target=$target \
|
||||||
|
--with-newlib \
|
||||||
|
--with-headers=../../newlib-$NEWLIB_VER/newlib/libc/include \
|
||||||
|
--enable-lto $plugin_ld \
|
||||||
|
--prefix=$prefix \
|
||||||
|
--disable-dependency-tracking \
|
||||||
|
--with-bugurl="http://wiki.devkitpro.org/index.php/Bug_Reports" --with-pkgversion="devkitPSP release 17" \
|
||||||
|
$CROSS_PARAMS \
|
||||||
|
MAKEINFO=missing \
|
||||||
|
MISSING=texinfo \
|
||||||
|
|| { echo "Error configuring gcc"; exit 1; }
|
||||||
|
touch configured-gcc
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ ! -f built-gcc ]
|
||||||
|
then
|
||||||
|
$MAKE all-gcc || { echo "Error building gcc"; exit 1; }
|
||||||
|
touch built-gcc
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ ! -f installed-gcc ]
|
||||||
|
then
|
||||||
|
$MAKE install-gcc || { echo "Error installing gcc"; exit 1; }
|
||||||
|
touch installed-gcc
|
||||||
|
fi
|
||||||
|
|
||||||
|
unset CFLAGS
|
||||||
|
cd $BUILDDIR/pspsdk-$PSPSDK_VER
|
||||||
|
|
||||||
|
if [ ! -f bootstrap-sdk ]
|
||||||
|
then
|
||||||
|
./bootstrap || { echo "ERROR RUNNING PSPSDK BOOTSTRAP"; exit 1; }
|
||||||
|
touch bootstrap-sdk
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f configured-sdk ]
|
||||||
|
then
|
||||||
|
CFLAGS_FOR_HOST=$cflags LDFLAGS=$ldflags ./configure --with-pspdev="$prefix" --disable-dependency-tracking $CROSS_PARAMS || { echo "ERROR RUNNING PSPSDK CONFIGURE"; exit 1; }
|
||||||
|
touch configured-sdk
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f install-sdk-data ]
|
||||||
|
then
|
||||||
|
$MAKE install-data || { echo "ERROR INSTALLING PSPSDK HEADERS"; exit 1; }
|
||||||
|
touch install-sdk-data
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd $BUILDDIR
|
||||||
|
|
||||||
|
unset CFLAGS
|
||||||
|
unset CFLAGS_FOR_HOST
|
||||||
|
unset LDFLAGS
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# build and install newlib
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
mkdir -p $target/newlib
|
||||||
|
cd $target/newlib
|
||||||
|
|
||||||
|
if [ ! -f configured-newlib ]
|
||||||
|
then
|
||||||
|
../../newlib-$NEWLIB_VER/configure \
|
||||||
|
--target=$target \
|
||||||
|
--prefix=$prefix \
|
||||||
|
--disable-dependency-tracking \
|
||||||
|
|| { echo "Error configuring newlib"; exit 1; }
|
||||||
|
touch configured-newlib
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f built-newlib ]
|
||||||
|
then
|
||||||
|
$MAKE || { echo "Error building newlib"; exit 1; }
|
||||||
|
touch built-newlib
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f installed-newlib ]
|
||||||
|
then
|
||||||
|
$MAKE install || { echo "Error installing newlib"; exit 1; }
|
||||||
|
touch installed-newlib
|
||||||
|
fi
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# build and install the final compiler
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
cd $BUILDDIR
|
||||||
|
|
||||||
|
cd $target/gcc
|
||||||
|
|
||||||
|
if [ ! -f built-stage2 ]
|
||||||
|
then
|
||||||
|
$MAKE all || { echo "Error building gcc stage2"; exit 1; }
|
||||||
|
touch built-stage2
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f installed-stage2 ]
|
||||||
|
then
|
||||||
|
$MAKE install || { echo "Error installing gcc stage2"; exit 1; }
|
||||||
|
touch installed-stage2
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -fr $prefix/$target/sys-include
|
||||||
|
cd $BUILDDIR/pspsdk-$PSPSDK_VER
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# build and install the psp sdk
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
echo "building pspsdk ..."
|
||||||
|
|
||||||
|
if [ ! -f built-sdk ]
|
||||||
|
then
|
||||||
|
$MAKE || { echo "ERROR BUILDING PSPSDK"; exit 1; }
|
||||||
|
touch built-sdk
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f installed-sdk ]
|
||||||
|
then
|
||||||
|
$MAKE install || { echo "ERROR INSTALLING PSPSDK"; exit 1; }
|
||||||
|
touch installed-sdk
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd $BUILDDIR
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# build and install the debugger
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
#mkdir -p $target/gdb
|
||||||
|
#cd $target/gdb
|
||||||
|
#
|
||||||
|
#if [ ! -f configured-gdb ]
|
||||||
|
#then
|
||||||
|
# CFLAGS=$cflags LDFLAGS=$ldflags ../../gdb-$GDB_VER/configure \
|
||||||
|
# --disable-nls --prefix=$prefix --target=$target --disable-werror \
|
||||||
|
# --disable-dependency-tracking \
|
||||||
|
# $CROSS_PARAMS \
|
||||||
|
# MAKEINFO=missing \
|
||||||
|
# MISSING=texinfo \
|
||||||
|
# || { echo "Error configuring gdb"; exit 1; }
|
||||||
|
# touch configured-gdb
|
||||||
|
#fi
|
||||||
|
#
|
||||||
|
#if [ ! -f built-gdb ]
|
||||||
|
#then
|
||||||
|
# $MAKE || { echo "Error building gdb"; exit 1; }
|
||||||
|
# touch built-gdb
|
||||||
|
#fi
|
||||||
|
#
|
||||||
|
#if [ ! -f installed-gdb ]
|
||||||
|
#then
|
||||||
|
# $MAKE install || { echo "Error installing gdb"; exit 1; }
|
||||||
|
# touch installed-gdb
|
||||||
|
#fi
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
DATESTRING=$(date +%Y)$(date +%m)$(date +%d)
|
DATESTRING=$(date +%Y)$(date +%m)$(date +%d)
|
||||||
cd .. && tar --exclude=*CVS* --exclude=.svn --exclude=.git --exclude=*.log --exclude=*.bz2 \
|
cd .. && tar --exclude=*CVS* --exclude=.svn --exclude=.git --exclude=*.log --exclude=*.bz2 \
|
||||||
--exclude=*.gz --exclude=config.sh --exclude=.devkitARM* --exclude=.devkitPPC* \
|
--exclude=*.gz --exclude=config.sh --exclude=.devkitARM --exclude=.devkitPPC \
|
||||||
--exclude=.devkitA64* --exclude=.gitignore \
|
--exclude=.devkitPSP --exclude=.gitignore \
|
||||||
-cvjf buildscripts-$DATESTRING.tar.bz2 buildscripts
|
-cvjf buildscripts-$DATESTRING.tar.bz2 buildscripts
|
||||||
|
|||||||
51
select_toolchain.sh
Executable file → Normal file
51
select_toolchain.sh
Executable file → Normal file
@@ -1,17 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
VERSION=0
|
VERSION=0
|
||||||
case "$BUILD_DKPRO_PACKAGE" in
|
|
||||||
"1" )
|
|
||||||
VERSION=1
|
|
||||||
;;
|
|
||||||
"2" )
|
|
||||||
VERSION=2
|
|
||||||
;;
|
|
||||||
"3" )
|
|
||||||
VERSION=3
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
while [ $VERSION -eq 0 ]
|
while [ $VERSION -eq 0 ]
|
||||||
do
|
do
|
||||||
echo
|
echo
|
||||||
@@ -19,7 +7,7 @@ do
|
|||||||
echo
|
echo
|
||||||
echo "1: devkitARM (gba gp32 ds)"
|
echo "1: devkitARM (gba gp32 ds)"
|
||||||
echo "2: devkitPPC (gamecube wii)"
|
echo "2: devkitPPC (gamecube wii)"
|
||||||
echo "3: devkitA64 (switch)"
|
echo "3: devkitPSP (PSP)"
|
||||||
read VERSION
|
read VERSION
|
||||||
|
|
||||||
if [ "$VERSION" -ne 1 -a "$VERSION" -ne 2 -a "$VERSION" -ne 3 ]
|
if [ "$VERSION" -ne 1 -a "$VERSION" -ne 2 -a "$VERSION" -ne 3 ]
|
||||||
@@ -30,34 +18,33 @@ done
|
|||||||
|
|
||||||
case "$VERSION" in
|
case "$VERSION" in
|
||||||
"1" )
|
"1" )
|
||||||
GCC_VER=7.1.0
|
GCC_VER=4.7.0
|
||||||
BINUTILS_VER=2.28
|
BINUTILS_VER=2.22
|
||||||
NEWLIB_VER=2.5.0
|
NEWLIB_VER=1.20.0
|
||||||
GDB_VER=8.0
|
GDB_VER=7.4
|
||||||
basedir='dkarm-eabi'
|
basedir='dkarm-eabi'
|
||||||
package=devkitARM
|
package=devkitARM
|
||||||
target=arm-none-eabi
|
target=arm-eabi
|
||||||
toolchain=DEVKITARM
|
toolchain=DEVKITARM
|
||||||
;;
|
;;
|
||||||
"2" )
|
"2" )
|
||||||
GCC_VER=6.3.0
|
GCC_VER=4.6.3
|
||||||
BINUTILS_VER=2.27
|
BINUTILS_VER=2.22
|
||||||
MN_BINUTILS_VER=2.17
|
NEWLIB_VER=1.20.0
|
||||||
NEWLIB_VER=2.5.0
|
GDB_VER=7.4
|
||||||
GDB_VER=7.11
|
|
||||||
basedir='dkppc'
|
basedir='dkppc'
|
||||||
package=devkitPPC
|
package=devkitPPC
|
||||||
target=powerpc-eabi
|
target=powerpc-eabi
|
||||||
toolchain=DEVKITPPC
|
toolchain=DEVKITPPC
|
||||||
;;
|
;;
|
||||||
"3" )
|
"3" )
|
||||||
GCC_VER=7.3.0
|
GCC_VER=4.6.3
|
||||||
BINUTILS_VER=2.30
|
BINUTILS_VER=2.22
|
||||||
NEWLIB_VER=3.0.0
|
NEWLIB_VER=1.20.0
|
||||||
GDB_VER=8.0
|
GDB_VER=7.4
|
||||||
basedir='dka64'
|
basedir='dkpsp'
|
||||||
package=devkitA64
|
package=devkitPSP
|
||||||
target=aarch64-none-elf
|
target=psp
|
||||||
toolchain=DEVKITA64
|
toolchain=DEVKITPSP
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -19,10 +19,6 @@ do
|
|||||||
then
|
then
|
||||||
$HOST_STRIP $f
|
$HOST_STRIP $f
|
||||||
fi
|
fi
|
||||||
if [[ "$f" == *.dll ]]
|
|
||||||
then
|
|
||||||
$HOST_STRIP -d $f
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ $VERSION -eq 2 ]; then
|
if [ $VERSION -eq 2 ]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user