summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Groffen <grobian@gentoo.org>2020-06-13 12:58:21 +0200
committerFabian Groffen <grobian@gentoo.org>2020-06-13 12:58:21 +0200
commit09b9a029c60fdc9d7e75c22761507204609e38c8 (patch)
tree63bcde6d134905cc640975f3692cc53ef629aef8 /sys-devel
parentsys-devel/binutils-2.34-r1: sync with gx86, fixed for Solaris (diff)
downloadprefix-09b9a029c60fdc9d7e75c22761507204609e38c8.tar.gz
prefix-09b9a029c60fdc9d7e75c22761507204609e38c8.tar.bz2
prefix-09b9a029c60fdc9d7e75c22761507204609e38c8.zip
sys-devel/binutils: cleanup
Package-Manager: Portage-2.3.84-prefix, Repoman-2.3.22 Signed-off-by: Fabian Groffen <grobian@gentoo.org>
Diffstat (limited to 'sys-devel')
-rw-r--r--sys-devel/binutils/Manifest4
-rw-r--r--sys-devel/binutils/binutils-2.31.1-r1.ebuild449
-rw-r--r--sys-devel/binutils/binutils-2.32-r1.ebuild449
-rw-r--r--sys-devel/binutils/files/binutils-2.19.50.0.1-mint.patch66
-rw-r--r--sys-devel/binutils/files/binutils-2.22-mint.patch2656
5 files changed, 0 insertions, 3624 deletions
diff --git a/sys-devel/binutils/Manifest b/sys-devel/binutils/Manifest
index 580aa90e18..300ae6a9f4 100644
--- a/sys-devel/binutils/Manifest
+++ b/sys-devel/binutils/Manifest
@@ -1,7 +1,3 @@
DIST binutils-2.29.1.tar.xz 19886772 BLAKE2B e6e86fc148fe42b56c026aa62766b10acf1039c47106e55193ee7cb9cac0ed4414fed4a554624962c114e454261d9fc38843f3cd5b0c3cae9b5a36e09eefc0a5 SHA512 d748d22306477d60d921078804d21943248c23fca0707aac9b016a352c01c75ca69e82624ae37fb0bbd03af3b17088a94f60dfe1a86a7ff82e18ece3c24f0fd0
-DIST binutils-2.31.1-patches-3.tar.xz 12640 BLAKE2B 3444b219dd02ad513e6c36214d649a8a74638382103c88ec8de76a579be0ee13f8d1450e3b8d82dfddad55f2f851b32aee910a99230c7d8673f8426fc79a4cd9 SHA512 67b23c17518305561d190a15cba4a1af18a0a3cf1d7e62583ac7667d2fa40e7c7ec024cc981009d5d1caf1939633ab55fc0a198b69af02dc7841be43ff1acd13
-DIST binutils-2.31.1.tar.xz 20467996 BLAKE2B 6b914df1fbb7cf54f2159f71b2c2b09f3f6a569b7a3cb4cf9790d0a3733a7548bc0ea32334a178ed3b56e8b97656ae99c7abaf212601beeaeae9a0884c0f6051 SHA512 0fca326feb1d5f5fe505a827b20237fe3ec9c13eaf7ec7e35847fd71184f605ba1cefe1314b1b8f8a29c0aa9d88162849ee1c1a3e70c2f7407d88339b17edb30
-DIST binutils-2.32-patches-2.tar.xz 145672 BLAKE2B 8218e621f99cb4bcd1638c3011449b94480d207eaeb79cf75c0072e0f1a86bfd1603fc4515bc40d3ac1921a18b9a211b20568f59b11b13eb44e6cff1329c5af9 SHA512 55c25a603f6175af3ade6848e5c1faba06a147d72e9a4f53d44502d97db76499485a67b278a654d18884714a7bf7b360c77c9e42dba3cdc188f805bfe461f09f
-DIST binutils-2.32.tar.xz 20774880 BLAKE2B d1bdbd9c8487c091665c197974ce4bdf520b7a67ed6997a81b87e6a0af9514a091458244f583acec5ae580ac2ee5e908f67f483b8e5263cd18ced794cb235da6 SHA512 d326408f12a03d9a61a9de56584c2af12f81c2e50d2d7e835d51565df8314df01575724afa1e43bd0db45cfc9916b41519b67dfce03232aa4978704492a6994a
DIST binutils-2.34-patches-4.tar.xz 95232 BLAKE2B 0a355120ecaf447d863f6d0837028061968166c9024da36212ce7d172ee2060e4027be1fca0089e38ab9073b5332307ff1dc05b868603bd2aa0ec8e88af7cd0a SHA512 e593edbeddaf97ef23fa8eb25c5714c7f2dd2500d11422bd9dba42e119884fe71593adc98862f74c7d391ceb298556ed049eee3c504733c634faef236045876b
DIST binutils-2.34.tar.xz 21637796 BLAKE2B 07dd23916a7d27f71c3f160c8c16abe2bd4fce294c738c665a012a3be6a87dbe8160d0c38740524f9025e01d438e99b2a94bcf9f9f79ee214f5dd033de8aad3d SHA512 2c7976939dcf5e8c5b7374cccd39bfe803b1bec73c6abfa0eb17c24e1942574c6bdb874c66a092a82adc443182eacd8a5a8001c19a76101f0c7ba40c27de0bbd
diff --git a/sys-devel/binutils/binutils-2.31.1-r1.ebuild b/sys-devel/binutils/binutils-2.31.1-r1.ebuild
deleted file mode 100644
index ae9497d18b..0000000000
--- a/sys-devel/binutils/binutils-2.31.1-r1.ebuild
+++ /dev/null
@@ -1,449 +0,0 @@
-# Copyright 1999-2018 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=6
-
-inherit eutils libtool flag-o-matic gnuconfig multilib versionator
-
-DESCRIPTION="Tools necessary to build programs"
-HOMEPAGE="https://sourceware.org/binutils/"
-LICENSE="GPL-3+"
-IUSE="+cxx doc multitarget +nls static-libs test"
-
-# Variables that can be set here:
-# PATCH_VER - the patchset version
-# Default: empty, no patching
-# PATCH_BINUTILS_VER - the binutils version in the patchset name
-# - Default: PV
-# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/...
-# for the patchsets
-# Default: dilfridge :)
-
-PATCH_VER=3
-
-case ${PV} in
- 9999)
- EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git"
- inherit git-r3
- S=${WORKDIR}/binutils
- EGIT_CHECKOUT_DIR=${S}
- SLOT=${PV}
- ;;
- *.9999)
- EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git"
- inherit git-r3
- S=${WORKDIR}/binutils
- EGIT_CHECKOUT_DIR=${S}
- EGIT_BRANCH=$(get_version_component_range 1-2)
- EGIT_BRANCH="binutils-${EGIT_BRANCH/./_}-branch"
- SLOT=$(get_version_component_range 1-2)
- ;;
- *)
- SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz"
- SLOT=$(get_version_component_range 1-2)
- KEYWORDS="~x64-cygwin ~amd64-linux ~x86-linux ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
- ;;
-esac
-
-#
-# The Gentoo patchset
-#
-PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}}
-PATCH_DEV=${PATCH_DEV:-slyfox}
-
-[[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI}
- https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz"
-
-#
-# The cross-compile logic
-#
-export CTARGET=${CTARGET:-${CHOST}}
-if [[ ${CTARGET} == ${CHOST} ]] ; then
- if [[ ${CATEGORY} == cross-* ]] ; then
- export CTARGET=${CATEGORY#cross-}
- fi
-fi
-is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; }
-
-#
-# The dependencies
-#
-RDEPEND="
- >=sys-devel/binutils-config-3
- sys-libs/zlib
-"
-DEPEND="${RDEPEND}
- doc? ( sys-apps/texinfo )
- test? ( dev-util/dejagnu )
- nls? ( sys-devel/gettext )
- sys-devel/flex
- virtual/yacc
-"
-if is_cross ; then
- # The build assumes the host has libiberty and such when cross-compiling
- # its build tools. We should probably make binutils itself build a local
- # copy to use, but until then, be lazy.
- DEPEND+=" >=sys-libs/binutils-libs-${PV}"
-fi
-
-MY_BUILDDIR=${WORKDIR}/build
-
-# Additional patches to apply in default src_prepare
-PATCHES=(
- "${FILESDIR}"/${PN}-2.22-solaris-anonymous-version-script-fix.patch
- "${FILESDIR}"/${PN}-2.24-cygwin-nointl.patch
-)
-
-pkg_setup() {
- [[ ${CHOST} == *-mint* ]] && die "mint patches require rebasing to ${P}" # 609274
-}
-
-src_unpack() {
- case ${PV} in
- *9999)
- git-r3_src_unpack
- ;;
- *)
- ;;
- esac
- default
- mkdir -p "${MY_BUILDDIR}"
-}
-
-src_prepare() {
- if [[ ! -z ${PATCH_VER} ]] ; then
- einfo "Applying binutils-${PATCH_BINUTILS_VER} patchset ${PATCH_VER}"
- eapply "${WORKDIR}/patch"/*.patch
- fi
-
- # This check should probably go somewhere else, like pkg_pretend.
- if [[ ${CTARGET} == *-uclibc* ]] ; then
- if grep -qs 'linux-gnu' "${S}"/ltconfig ; then
- die "sorry, but this binutils doesn't yet support uClibc :("
- fi
- fi
-
- # Make sure our explicit libdir paths don't get clobbered. #562460
- sed -i \
- -e 's:@bfdlibdir@:@libdir@:g' \
- -e 's:@bfdincludedir@:@includedir@:g' \
- {bfd,opcodes}/Makefile.in || die
-
- # Fix locale issues if possible #122216
- if [[ -e ${FILESDIR}/binutils-configure-LANG.patch ]] ; then
- einfo "Fixing misc issues in configure files"
- for f in $(find "${S}" -name configure -exec grep -l 'autoconf version 2.13' {} +) ; do
- ebegin " Updating ${f/${S}\/}"
- patch "${f}" "${FILESDIR}"/binutils-configure-LANG.patch >& "${T}"/configure-patch.log \
- || eerror "Please file a bug about this"
- eend $?
- done
- fi
-
- # Fix conflicts with newer glibc #272594
- if [[ -e libiberty/testsuite/test-demangle.c ]] ; then
- sed -i 's:\<getline\>:get_line:g' libiberty/testsuite/test-demangle.c
- fi
-
- # Apply things from PATCHES and user dirs
- default
-
- # Run misc portage update scripts
- gnuconfig_update
- elibtoolize --portage --no-uclibc
-}
-
-toolchain-binutils_bugurl() {
- printf "https://bugs.gentoo.org/"
-}
-toolchain-binutils_pkgversion() {
- printf "Gentoo ${PV}"
- [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}"
-}
-
-src_configure() {
- # Setup some paths
- LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV}
- INCPATH=${LIBPATH}/include
- DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV}
- if is_cross ; then
- TOOLPATH=/usr/${CHOST}/${CTARGET}
- else
- TOOLPATH=/usr/${CTARGET}
- fi
- BINPATH=${TOOLPATH}/binutils-bin/${PV}
-
- # Make sure we filter $LINGUAS so that only ones that
- # actually work make it through #42033
- strip-linguas -u */po
-
- # Keep things sane
- strip-flags
-
- local x
- echo
- for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do
- einfo "$(printf '%10s' ${x}:) ${!x}"
- done
- echo
-
- cd "${MY_BUILDDIR}"
- local myconf=()
-
- # enable gold (installed as ld.gold) and ld's plugin architecture
- # PREFIX LOCAL: Linux only (fails to compile on Solaris, MiNT #353410)
- [[ ${CHOST} == *-linux* ]] &&
- if use cxx ; then
- myconf+=( --enable-gold )
- myconf+=( --enable-plugins )
- fi
-
- if use nls ; then
- myconf+=( --without-included-gettext )
- else
- myconf+=( --disable-nls )
- fi
-
- myconf+=( --with-system-zlib )
-
- # For bi-arch systems, enable a 64bit bfd. This matches
- # the bi-arch logic in toolchain.eclass. #446946
- # We used to do it for everyone, but it's slow on 32bit arches. #438522
- case $(tc-arch) in
- ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;;
- esac
-
- [[ ${CHOST} == *"-solaris"* ]] && use nls && append-libs -lintl
-
- use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd )
-
- [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} )
-
- is_cross && myconf+=(
- --with-sysroot="${EPREFIX}"/usr/${CTARGET}
- --enable-poison-system-directories
- )
-
- # glibc-2.3.6 lacks support for this ... so rather than force glibc-2.5+
- # on everyone in alpha (for now), we'll just enable it when possible
- has_version ">=${CATEGORY}/glibc-2.5" && myconf+=( --enable-secureplt )
- has_version ">=sys-libs/glibc-2.5" && myconf+=( --enable-secureplt )
-
- # mips can't do hash-style=gnu ...
- if [[ $(tc-arch) != mips ]] ; then
- myconf+=( --enable-default-hash-style=gnu )
- fi
-
- myconf+=(
- --prefix="${EPREFIX}"/usr
- --host=${CHOST}
- --target=${CTARGET}
- --datadir="${EPREFIX}"${DATAPATH}
- --datarootdir="${EPREFIX}"${DATAPATH}
- --infodir="${EPREFIX}"${DATAPATH}/info
- --mandir="${EPREFIX}"${DATAPATH}/man
- --bindir="${EPREFIX}"${BINPATH}
- --libdir="${EPREFIX}"${LIBPATH}
- --libexecdir="${EPREFIX}"${LIBPATH}
- --includedir="${EPREFIX}"${INCPATH}
- --enable-obsolete
- --enable-shared
- --enable-threads
- # Newer versions (>=2.27) offer a configure flag now.
- --enable-relro
- # Newer versions (>=2.24) make this an explicit option. #497268
- --enable-install-libiberty
- --disable-werror
- --with-bugurl="$(toolchain-binutils_bugurl)"
- --with-pkgversion="$(toolchain-binutils_pkgversion)"
- $(use_enable static-libs static)
- ${EXTRA_ECONF}
- # Disable modules that are in a combined binutils/gdb tree. #490566
- --disable-{gdb,libdecnumber,readline,sim}
- # Strip out broken static link flags.
- # https://gcc.gnu.org/PR56750
- --without-stage1-ldflags
- # Change SONAME to avoid conflict across
- # {native,cross}/binutils, binutils-libs. #666100
- --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st)
- )
- echo ./configure "${myconf[@]}"
- "${S}"/configure "${myconf[@]}" || die
-
- # Prevent makeinfo from running if doc is unset.
- if ! use doc ; then
- sed -i \
- -e '/^MAKEINFO/s:=.*:= true:' \
- Makefile || die
- fi
-}
-
-src_compile() {
- local makeargs=()
- if has noinfo "${FEATURES}" \
- || ! type -p makeinfo >/dev/null
- then
- # binutils >= 2.17 (accidentally?) requires 'makeinfo'
- makeargs+=("MAKEINFO=true")
- fi
-
- cd "${MY_BUILDDIR}"
- # see Note [tooldir hack for ldscripts]
- emake tooldir="${EPREFIX}${TOOLPATH}" all "${makeargs[@]}"
-
- # only build info pages if the user wants them
- if use doc ; then
- emake info
- fi
-
- # we nuke the manpages when we're left with junk
- # (like when we bootstrap, no perl -> no manpages)
- find . -name '*.1' -a -size 0 -delete
-}
-
-src_test() {
- cd "${MY_BUILDDIR}"
- emake -k check
-}
-
-src_install() {
- local x d
-
- cd "${MY_BUILDDIR}"
- # see Note [tooldir hack for ldscripts]
- emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install
- rm -rf "${ED}"/${LIBPATH}/bin
- use static-libs || find "${ED}" -name '*.la' -delete
-
- # Newer versions of binutils get fancy with ${LIBPATH} #171905
- cd "${ED}"/${LIBPATH}
- for d in ../* ; do
- [[ ${d} == ../${PV} ]] && continue
- mv ${d}/* . || die
- rmdir ${d} || die
- done
-
- # Now we collect everything intp the proper SLOT-ed dirs
- # When something is built to cross-compile, it installs into
- # /usr/$CHOST/ by default ... we have to 'fix' that :)
- if is_cross ; then
- cd "${ED}"/${BINPATH}
- for x in * ; do
- mv ${x} ${x/${CTARGET}-}
- done
-
- if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then
- mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH}
- mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/
- rm -r "${ED}"/usr/${CHOST}/{include,lib}
- fi
- fi
- insinto ${INCPATH}
- local libiberty_headers=(
- # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir.
- demangle.h
- dyn-string.h
- fibheap.h
- hashtab.h
- libiberty.h
- objalloc.h
- splay-tree.h
- )
- doins "${libiberty_headers[@]/#/${S}/include/}" || die
- if [[ -d ${ED}/${LIBPATH}/lib ]] ; then
- mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/
- rm -r "${ED}"/${LIBPATH}/lib
- fi
-
- # Generate an env.d entry for this binutils
- insinto /etc/env.d/binutils
- cat <<-EOF > "${T}"/env.d
- TARGET="${CTARGET}"
- VER="${PV}"
- LIBPATH="${EPREFIX}${LIBPATH}"
- EOF
- newins "${T}"/env.d ${CTARGET}-${PV}
-
- # Handle documentation
- if ! is_cross ; then
- cd "${S}"
- dodoc README
- docinto bfd
- dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO
- docinto binutils
- dodoc binutils/ChangeLog binutils/NEWS binutils/README
- docinto gas
- dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README*
- docinto gprof
- dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl
- docinto ld
- dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO
- docinto libiberty
- dodoc libiberty/ChangeLog* libiberty/README
- docinto opcodes
- dodoc opcodes/ChangeLog*
- fi
-
- # Remove shared info pages
- rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info}
-
- # Trim all empty dirs
- find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null
-}
-
-pkg_postinst() {
- # Make sure this ${CTARGET} has a binutils version selected
- [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0
- binutils-config ${CTARGET}-${PV}
-}
-
-pkg_postrm() {
- local current_profile=$(binutils-config -c ${CTARGET})
-
- # If no other versions exist, then uninstall for this
- # target ... otherwise, switch to the newest version
- # Note: only do this if this version is unmerged. We
- # rerun binutils-config if this is a remerge, as
- # we want the mtimes on the symlinks updated (if
- # it is the same as the current selected profile)
- if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then
- local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}')
- choice=${choice//$'\n'/ }
- choice=${choice/* }
- if [[ -z ${choice} ]] ; then
- env -i ROOT="${ROOT}" binutils-config -u ${CTARGET}
- else
- binutils-config ${choice}
- fi
- elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then
- binutils-config ${CTARGET}-${PV}
- fi
-}
-
-# Note [slotting support]
-# -----------------------
-# Gentoo's layout for binutils files is non-standard as Gentoo
-# supports slotted installation for binutils. Many tools
-# still expect binutils to reside in known locations.
-# binutils-config package restores symlinks into known locations,
-# like:
-# /usr/bin/${CTARGET}-<tool>
-# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips
-# /usr/include/
-#
-# Note [tooldir hack for ldscripts]
-# ---------------------------------
-# Build system does not allow ./configure to tweak every location
-# we need for slotting binutils hence all the shuffling in
-# src_install(). This note is about SCRIPTDIR define handling.
-#
-# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value
-# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib'
-# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time.
-# Thus we can't just move files around after compilation finished.
-#
-# Our goal is the following:
-# - at build-time set scriptdir to point to symlinked location:
-# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case)
-# - at install-time set scriptdir to point to slotted location:
-# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV}
diff --git a/sys-devel/binutils/binutils-2.32-r1.ebuild b/sys-devel/binutils/binutils-2.32-r1.ebuild
deleted file mode 100644
index 9ec2e77afe..0000000000
--- a/sys-devel/binutils/binutils-2.32-r1.ebuild
+++ /dev/null
@@ -1,449 +0,0 @@
-# Copyright 1999-2019 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=6
-
-inherit eutils libtool flag-o-matic gnuconfig multilib versionator
-
-DESCRIPTION="Tools necessary to build programs"
-HOMEPAGE="https://sourceware.org/binutils/"
-LICENSE="GPL-3+"
-# USE="+cxx" is a transitional flag until llvm migrates to new flags:
-# bug #677888
-IUSE="+cxx default-gold doc +gold multitarget +nls +plugins static-libs test"
-REQUIRED_USE="cxx? ( gold plugins ) default-gold? ( gold )"
-
-# Variables that can be set here:
-# PATCH_VER - the patchset version
-# Default: empty, no patching
-# PATCH_BINUTILS_VER - the binutils version in the patchset name
-# - Default: PV
-# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/...
-# for the patchsets
-# Default: dilfridge :)
-
-PATCH_VER=2
-PATCH_DEV=dilfridge
-
-case ${PV} in
- 9999)
- EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git"
- inherit git-r3
- S=${WORKDIR}/binutils
- EGIT_CHECKOUT_DIR=${S}
- SLOT=${PV}
- ;;
- *.9999)
- EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git"
- inherit git-r3
- S=${WORKDIR}/binutils
- EGIT_CHECKOUT_DIR=${S}
- EGIT_BRANCH=$(get_version_component_range 1-2)
- EGIT_BRANCH="binutils-${EGIT_BRANCH/./_}-branch"
- SLOT=$(get_version_component_range 1-2)
- ;;
- *)
- SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz"
- SLOT=$(get_version_component_range 1-2)
- KEYWORDS="~x64-cygwin ~amd64-linux ~x86-linux ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
- ;;
-esac
-
-#
-# The Gentoo patchset
-#
-PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}}
-PATCH_DEV=${PATCH_DEV:-slyfox}
-
-[[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI}
- https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz"
-
-#
-# The cross-compile logic
-#
-export CTARGET=${CTARGET:-${CHOST}}
-if [[ ${CTARGET} == ${CHOST} ]] ; then
- if [[ ${CATEGORY} == cross-* ]] ; then
- export CTARGET=${CATEGORY#cross-}
- fi
-fi
-is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; }
-
-#
-# The dependencies
-#
-RDEPEND="
- >=sys-devel/binutils-config-3
- sys-libs/zlib
-"
-DEPEND="${RDEPEND}
- doc? ( sys-apps/texinfo )
- test? ( dev-util/dejagnu )
- nls? ( sys-devel/gettext )
- sys-devel/flex
- virtual/yacc
-"
-
-MY_BUILDDIR=${WORKDIR}/build
-
-# Additional patches to apply in default src_prepare
-PATCHES=(
- "${FILESDIR}"/${PN}-2.22-solaris-anonymous-version-script-fix.patch
- "${FILESDIR}"/${PN}-2.24-cygwin-nointl.patch
-)
-
-pkg_setup() {
- [[ ${CHOST} == *-mint* ]] && die "mint patches require rebasing to ${P}" # 609274
-}
-
-src_unpack() {
- case ${PV} in
- *9999)
- git-r3_src_unpack
- ;;
- *)
- ;;
- esac
- default
- mkdir -p "${MY_BUILDDIR}"
-}
-
-src_prepare() {
- if [[ ! -z ${PATCH_VER} ]] ; then
- # Use upstream patch to enable development mode
- rm -v "${WORKDIR}/patch"/0000-Gentoo-Git-is-development.patch || die
-
- einfo "Applying binutils-${PATCH_BINUTILS_VER} patchset ${PATCH_VER}"
- eapply "${WORKDIR}/patch"/*.patch
- fi
-
- # This check should probably go somewhere else, like pkg_pretend.
- if [[ ${CTARGET} == *-uclibc* ]] ; then
- if grep -qs 'linux-gnu' "${S}"/ltconfig ; then
- die "sorry, but this binutils doesn't yet support uClibc :("
- fi
- fi
-
- # Make sure our explicit libdir paths don't get clobbered. #562460
- sed -i \
- -e 's:@bfdlibdir@:@libdir@:g' \
- -e 's:@bfdincludedir@:@includedir@:g' \
- {bfd,opcodes}/Makefile.in || die
-
- # Fix locale issues if possible #122216
- if [[ -e ${FILESDIR}/binutils-configure-LANG.patch ]] ; then
- einfo "Fixing misc issues in configure files"
- for f in $(find "${S}" -name configure -exec grep -l 'autoconf version 2.13' {} +) ; do
- ebegin " Updating ${f/${S}\/}"
- patch "${f}" "${FILESDIR}"/binutils-configure-LANG.patch >& "${T}"/configure-patch.log \
- || eerror "Please file a bug about this"
- eend $?
- done
- fi
-
- # Fix conflicts with newer glibc #272594
- if [[ -e libiberty/testsuite/test-demangle.c ]] ; then
- sed -i 's:\<getline\>:get_line:g' libiberty/testsuite/test-demangle.c
- fi
-
- # Apply things from PATCHES and user dirs
- default
-
- # Run misc portage update scripts
- gnuconfig_update
- elibtoolize --portage --no-uclibc
-}
-
-toolchain-binutils_bugurl() {
- printf "https://bugs.gentoo.org/"
-}
-toolchain-binutils_pkgversion() {
- printf "Gentoo ${PV}"
- [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}"
-}
-
-src_configure() {
- # Setup some paths
- LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV}
- INCPATH=${LIBPATH}/include
- DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV}
- if is_cross ; then
- TOOLPATH=/usr/${CHOST}/${CTARGET}
- else
- TOOLPATH=/usr/${CTARGET}
- fi
- BINPATH=${TOOLPATH}/binutils-bin/${PV}
-
- # Make sure we filter $LINGUAS so that only ones that
- # actually work make it through #42033
- strip-linguas -u */po
-
- # Keep things sane
- strip-flags
-
- local x
- echo
- for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do
- einfo "$(printf '%10s' ${x}:) ${!x}"
- done
- echo
-
- cd "${MY_BUILDDIR}"
- local myconf=()
-
- if use plugins ; then
- myconf+=( --enable-plugins )
- fi
- # enable gold (installed as ld.gold) and ld's plugin architecture
- if use gold ; then
- myconf+=( --enable-gold )
- if use default-gold; then
- myconf+=( --enable-gold=default )
- fi
- fi
-
- if use nls ; then
- myconf+=( --without-included-gettext )
- [[ ${CHOST} == *"-solaris"* ]] && append-libs -lintl
- else
- myconf+=( --disable-nls )
- fi
-
- myconf+=( --with-system-zlib )
-
- # For bi-arch systems, enable a 64bit bfd. This matches
- # the bi-arch logic in toolchain.eclass. #446946
- # We used to do it for everyone, but it's slow on 32bit arches. #438522
- case $(tc-arch) in
- ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;;
- esac
-
- use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd )
-
- [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} )
-
- is_cross && myconf+=(
- --with-sysroot="${EPREFIX}"/usr/${CTARGET}
- --enable-poison-system-directories
- )
-
- # glibc-2.3.6 lacks support for this ... so rather than force glibc-2.5+
- # on everyone in alpha (for now), we'll just enable it when possible
- has_version ">=${CATEGORY}/glibc-2.5" && myconf+=( --enable-secureplt )
- has_version ">=sys-libs/glibc-2.5" && myconf+=( --enable-secureplt )
-
- # mips can't do hash-style=gnu ...
- if [[ $(tc-arch) != mips ]] ; then
- myconf+=( --enable-default-hash-style=gnu )
- fi
-
- myconf+=(
- --prefix="${EPREFIX}"/usr
- --host=${CHOST}
- --target=${CTARGET}
- --datadir="${EPREFIX}"${DATAPATH}
- --datarootdir="${EPREFIX}"${DATAPATH}
- --infodir="${EPREFIX}"${DATAPATH}/info
- --mandir="${EPREFIX}"${DATAPATH}/man
- --bindir="${EPREFIX}"${BINPATH}
- --libdir="${EPREFIX}"${LIBPATH}
- --libexecdir="${EPREFIX}"${LIBPATH}
- --includedir="${EPREFIX}"${INCPATH}
- --enable-obsolete
- --enable-shared
- --enable-threads
- # Newer versions (>=2.27) offer a configure flag now.
- --enable-relro
- # Newer versions (>=2.24) make this an explicit option. #497268
- --enable-install-libiberty
- --disable-werror
- --with-bugurl="$(toolchain-binutils_bugurl)"
- --with-pkgversion="$(toolchain-binutils_pkgversion)"
- $(use_enable static-libs static)
- ${EXTRA_ECONF}
- # Disable modules that are in a combined binutils/gdb tree. #490566
- --disable-{gdb,libdecnumber,readline,sim}
- # Strip out broken static link flags.
- # https://gcc.gnu.org/PR56750
- --without-stage1-ldflags
- # Change SONAME to avoid conflict across
- # {native,cross}/binutils, binutils-libs. #666100
- --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st)
- )
- echo ./configure "${myconf[@]}"
- "${S}"/configure "${myconf[@]}" || die
-
- # Prevent makeinfo from running if doc is unset.
- if ! use doc ; then
- sed -i \
- -e '/^MAKEINFO/s:=.*:= true:' \
- Makefile || die
- fi
-}
-
-src_compile() {
- cd "${MY_BUILDDIR}"
- # see Note [tooldir hack for ldscripts]
- emake tooldir="${EPREFIX}${TOOLPATH}" all
-
- # only build info pages if the user wants them
- if use doc ; then
- emake info
- fi
-
- # we nuke the manpages when we're left with junk
- # (like when we bootstrap, no perl -> no manpages)
- find . -name '*.1' -a -size 0 -delete
-}
-
-src_test() {
- cd "${MY_BUILDDIR}"
-
- # bug 637066
- filter-flags -Wall -Wreturn-type
-
- # enable verbose test run and result logging
- emake -k check RUNTESTFLAGS='-a -v' VERBOSE=1
-}
-
-src_install() {
- local x d
-
- cd "${MY_BUILDDIR}"
- # see Note [tooldir hack for ldscripts]
- emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install
- rm -rf "${ED}"/${LIBPATH}/bin
- use static-libs || find "${ED}" -name '*.la' -delete
-
- # Newer versions of binutils get fancy with ${LIBPATH} #171905
- cd "${ED}"/${LIBPATH}
- for d in ../* ; do
- [[ ${d} == ../${PV} ]] && continue
- mv ${d}/* . || die
- rmdir ${d} || die
- done
-
- # Now we collect everything intp the proper SLOT-ed dirs
- # When something is built to cross-compile, it installs into
- # /usr/$CHOST/ by default ... we have to 'fix' that :)
- if is_cross ; then
- cd "${ED}"/${BINPATH}
- for x in * ; do
- mv ${x} ${x/${CTARGET}-}
- done
-
- if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then
- mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH}
- mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/
- rm -r "${ED}"/usr/${CHOST}/{include,lib}
- fi
- fi
- insinto ${INCPATH}
- local libiberty_headers=(
- # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir.
- demangle.h
- dyn-string.h
- fibheap.h
- hashtab.h
- libiberty.h
- objalloc.h
- splay-tree.h
- )
- doins "${libiberty_headers[@]/#/${S}/include/}" || die
- if [[ -d ${ED}/${LIBPATH}/lib ]] ; then
- mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/
- rm -r "${ED}"/${LIBPATH}/lib
- fi
-
- # Generate an env.d entry for this binutils
- insinto /etc/env.d/binutils
- cat <<-EOF > "${T}"/env.d
- TARGET="${CTARGET}"
- VER="${PV}"
- LIBPATH="${EPREFIX}${LIBPATH}"
- EOF
- newins "${T}"/env.d ${CTARGET}-${PV}
-
- # Handle documentation
- if ! is_cross ; then
- cd "${S}"
- dodoc README
- docinto bfd
- dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO
- docinto binutils
- dodoc binutils/ChangeLog binutils/NEWS binutils/README
- docinto gas
- dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README*
- docinto gprof
- dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl
- docinto ld
- dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO
- docinto libiberty
- dodoc libiberty/ChangeLog* libiberty/README
- docinto opcodes
- dodoc opcodes/ChangeLog*
- fi
-
- # Remove shared info pages
- rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info}
-
- # Trim all empty dirs
- find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null
-}
-
-pkg_postinst() {
- # Make sure this ${CTARGET} has a binutils version selected
- [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0
- binutils-config ${CTARGET}-${PV}
-}
-
-pkg_postrm() {
- local current_profile=$(binutils-config -c ${CTARGET})
-
- # If no other versions exist, then uninstall for this
- # target ... otherwise, switch to the newest version
- # Note: only do this if this version is unmerged. We
- # rerun binutils-config if this is a remerge, as
- # we want the mtimes on the symlinks updated (if
- # it is the same as the current selected profile)
- if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then
- local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}')
- choice=${choice//$'\n'/ }
- choice=${choice/* }
- if [[ -z ${choice} ]] ; then
- env -i ROOT="${ROOT}" binutils-config -u ${CTARGET}
- else
- binutils-config ${choice}
- fi
- elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then
- binutils-config ${CTARGET}-${PV}
- fi
-}
-
-# Note [slotting support]
-# -----------------------
-# Gentoo's layout for binutils files is non-standard as Gentoo
-# supports slotted installation for binutils. Many tools
-# still expect binutils to reside in known locations.
-# binutils-config package restores symlinks into known locations,
-# like:
-# /usr/bin/${CTARGET}-<tool>
-# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips
-# /usr/include/
-#
-# Note [tooldir hack for ldscripts]
-# ---------------------------------
-# Build system does not allow ./configure to tweak every location
-# we need for slotting binutils hence all the shuffling in
-# src_install(). This note is about SCRIPTDIR define handling.
-#
-# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value
-# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib'
-# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time.
-# Thus we can't just move files around after compilation finished.
-#
-# Our goal is the following:
-# - at build-time set scriptdir to point to symlinked location:
-# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case)
-# - at install-time set scriptdir to point to slotted location:
-# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV}
diff --git a/sys-devel/binutils/files/binutils-2.19.50.0.1-mint.patch b/sys-devel/binutils/files/binutils-2.19.50.0.1-mint.patch
deleted file mode 100644
index 419a3b9511..0000000000
--- a/sys-devel/binutils/files/binutils-2.19.50.0.1-mint.patch
+++ /dev/null
@@ -1,66 +0,0 @@
---- opcodes/configure.old 2008-11-03 14:11:02.000000000 +0000
-+++ opcodes/configure 2008-11-03 14:13:42.000000000 +0000
-@@ -5399,7 +5399,7 @@
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
-- amigaos*)
-+ mint* | amigaos*)
- # On AmigaOS with pdksh, this test takes hours, literally.
- # So we just punt and use a minimum line length of 8192.
- lt_cv_sys_max_cmd_len=8192;
---- bfd/configure.old 2008-11-03 17:51:45.000000000 +0000
-+++ bfd/configure 2008-11-03 17:52:00.000000000 +0000
-@@ -5768,7 +5768,7 @@
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
-- amigaos*)
-+ mint* | amigaos*)
- # On AmigaOS with pdksh, this test takes hours, literally.
- # So we just punt and use a minimum line length of 8192.
- lt_cv_sys_max_cmd_len=8192;
---- binutils/configure.old 2008-11-03 19:54:52.000000000 +0000
-+++ binutils/configure 2008-11-03 19:54:54.000000000 +0000
-@@ -5569,7 +5569,7 @@
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
-- amigaos*)
-+ mint* | amigaos*)
- # On AmigaOS with pdksh, this test takes hours, literally.
- # So we just punt and use a minimum line length of 8192.
- lt_cv_sys_max_cmd_len=8192;
---- gas/configure.old 2008-11-13 22:12:31.000000000 +0000
-+++ gas/configure 2008-11-13 22:13:57.000000000 +0000
-@@ -5567,7 +5567,7 @@
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
-- amigaos*)
-+ mint* | amigaos*)
- # On AmigaOS with pdksh, this test takes hours, literally.
- # So we just punt and use a minimum line length of 8192.
- lt_cv_sys_max_cmd_len=8192;
---- gprof/configure.old 2008-11-14 01:06:33.000000000 +0000
-+++ gprof/configure 2008-11-14 01:17:24.000000000 +0000
-@@ -5658,7 +5658,7 @@
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
-- amigaos*)
-+ mint* | amigaos*)
- # On AmigaOS with pdksh, this test takes hours, literally.
- # So we just punt and use a minimum line length of 8192.
- lt_cv_sys_max_cmd_len=8192;
---- ld/configure.old 2008-11-14 01:06:36.000000000 +0000
-+++ ld/configure 2008-11-14 01:16:21.000000000 +0000
-@@ -5858,7 +5858,7 @@
- lt_cv_sys_max_cmd_len=8192;
- ;;
-
-- amigaos*)
-+ mint* | amigaos*)
- # On AmigaOS with pdksh, this test takes hours, literally.
- # So we just punt and use a minimum line length of 8192.
- lt_cv_sys_max_cmd_len=8192;
diff --git a/sys-devel/binutils/files/binutils-2.22-mint.patch b/sys-devel/binutils/files/binutils-2.22-mint.patch
deleted file mode 100644
index 4c2442e6fc..0000000000
--- a/sys-devel/binutils/files/binutils-2.22-mint.patch
+++ /dev/null
@@ -1,2656 +0,0 @@
-http://bugs.gentoo.org/show_bug.cgi?id=362559
-
-diff -ur --new-file binutils-2.21.51.0.7/bfd/Makefile.am binutils-2.21.51.0.7-mint/bfd/Makefile.am
---- binutils-2.21.51.0.7/bfd/Makefile.am 2010-12-06 14:23:53.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/bfd/Makefile.am 2011-04-08 10:07:06.000000000 +0000
-@@ -379,6 +379,7 @@
- peigen.lo \
- plugin.lo \
- ppcboot.lo \
-+ prg-mint.lo \
- reloc16.lo \
- riscix.lo \
- som.lo \
-@@ -559,6 +560,7 @@
- pei-sh.c \
- plugin.c \
- ppcboot.c \
-+ prg-mint.c \
- reloc16.c \
- riscix.c \
- som.c \
-diff -ur --new-file binutils-2.21.51.0.7/bfd/Makefile.in binutils-2.21.51.0.7-mint/bfd/Makefile.in
---- binutils-2.21.51.0.7/bfd/Makefile.in 2010-12-06 14:23:53.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/bfd/Makefile.in 2011-04-08 10:07:06.000000000 +0000
-@@ -679,6 +679,7 @@
- peigen.lo \
- plugin.lo \
- ppcboot.lo \
-+ prg-mint.lo \
- reloc16.lo \
- riscix.lo \
- som.lo \
-@@ -859,6 +860,7 @@
- pei-sh.c \
- plugin.c \
- ppcboot.c \
-+ prg-mint.c \
- reloc16.c \
- riscix.c \
- som.c \
-diff -ur --new-file binutils-2.21.51.0.7/bfd/acinclude.m4 binutils-2.21.51.0.7-mint/bfd/acinclude.m4
---- binutils-2.21.51.0.7/bfd/acinclude.m4 2009-12-14 15:46:47.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/bfd/acinclude.m4 2011-04-08 10:07:06.000000000 +0000
-@@ -5,7 +5,7 @@
- [AC_REQUIRE([AC_CANONICAL_TARGET])
- case "${host}" in
- changequote(,)dnl
--*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
-+*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows* | *-*-mint*)
- changequote([,])dnl
- AC_DEFINE(USE_BINARY_FOPEN, 1, [Use b modifier when opening binary files?]) ;;
- esac])dnl
-diff -ur --new-file binutils-2.21.51.0.7/bfd/aoutx.h binutils-2.21.51.0.7-mint/bfd/aoutx.h
---- binutils-2.21.51.0.7/bfd/aoutx.h 2011-03-07 18:05:31.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/bfd/aoutx.h 2011-04-08 10:07:06.000000000 +0000
-@@ -1841,6 +1841,11 @@
- bfd_byte buffer[BYTES_IN_WORD];
- bfd_size_type amt = BYTES_IN_WORD;
-
-+ /* The MiNT backend writes past the string table. It therefore has to
-+ know about the table size. */
-+ obj_aout_external_string_size (abfd) = _bfd_stringtab_size (tab) +
-+ BYTES_IN_WORD;
-+
- /* The string table starts with the size. */
- PUT_WORD (abfd, _bfd_stringtab_size (tab) + BYTES_IN_WORD, buffer);
- if (bfd_bwrite ((void *) buffer, amt, abfd) != amt)
-@@ -4220,10 +4225,17 @@
- return FALSE;
- }
-
-+#ifdef MY_final_link_relocate_rel
-+ r = MY_final_link_relocate_rel (howto,
-+ input_bfd, input_section,
-+ contents, r_addr, relocation,
-+ (bfd_vma) 0, rel);
-+#else
- r = MY_final_link_relocate (howto,
- input_bfd, input_section,
- contents, r_addr, relocation,
- (bfd_vma) 0);
-+#endif
- }
-
- if (r != bfd_reloc_ok)
-diff -ur --new-file binutils-2.21.51.0.7/bfd/bfd-in.h binutils-2.21.51.0.7-mint/bfd/bfd-in.h
---- binutils-2.21.51.0.7/bfd/bfd-in.h 2010-11-12 17:32:58.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/bfd/bfd-in.h 2011-04-08 10:07:06.000000000 +0000
-@@ -742,6 +742,15 @@
- extern bfd_boolean bfd_sparclinux_size_dynamic_sections
- (bfd *, struct bfd_link_info *);
-
-+/* MiNT executable support routines for the linker. */
-+
-+extern bfd_boolean bfd_m68kmint_set_extended_flags
-+ (bfd *, flagword);
-+extern bfd_boolean bfd_m68kmint_set_stack_size
-+ (bfd *, bfd_signed_vma);
-+extern bfd_boolean bfd_m68kmint_add_tpa_relocation_entry
-+ (bfd *, bfd_vma);
-+
- /* mmap hacks */
-
- struct _bfd_window_internal;
-diff -ur --new-file binutils-2.21.51.0.7/bfd/bfd-in2.h binutils-2.21.51.0.7-mint/bfd/bfd-in2.h
---- binutils-2.21.51.0.7/bfd/bfd-in2.h 2011-03-07 18:05:57.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/bfd/bfd-in2.h 2011-04-08 10:07:06.000000000 +0000
-@@ -749,6 +749,15 @@
- extern bfd_boolean bfd_sparclinux_size_dynamic_sections
- (bfd *, struct bfd_link_info *);
-
-+/* MiNT executable support routines for the linker. */
-+
-+extern bfd_boolean bfd_m68kmint_set_extended_flags
-+ (bfd *, flagword);
-+extern bfd_boolean bfd_m68kmint_set_stack_size
-+ (bfd *, bfd_signed_vma);
-+extern bfd_boolean bfd_m68kmint_add_tpa_relocation_entry
-+ (bfd *, bfd_vma);
-+
- /* mmap hacks */
-
- struct _bfd_window_internal;
-diff -ur --new-file binutils-2.21.51.0.7/bfd/config.bfd binutils-2.21.51.0.7-mint/bfd/config.bfd
---- binutils-2.21.51.0.7/bfd/config.bfd 2011-01-04 17:51:04.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/bfd/config.bfd 2011-04-08 10:07:06.000000000 +0000
-@@ -823,6 +823,11 @@
- # targ_selvecs=m68kmach3_vec
- # targ_cflags=-DSTAT_FOR_EXEC
- ;;
-+ m68*-*-mint*)
-+ targ_defvec=aout0_big_vec
-+ targ_selvecs=m68kmint_prg_vec
-+ targ_underscore=yes
-+ ;;
- m68*-hp*-netbsd*)
- targ_defvec=m68k4knetbsd_vec
- targ_selvecs="m68knetbsd_vec hp300bsd_vec sunos_big_vec"
-diff -ur --new-file binutils-2.21.51.0.7/bfd/configure binutils-2.21.51.0.7-mint/bfd/configure
---- binutils-2.21.51.0.7/bfd/configure 2011-03-07 18:05:31.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/bfd/configure 2011-04-08 10:07:07.000000000 +0000
-@@ -13623,7 +13623,7 @@
-
-
- case "${host}" in
--*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
-+*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows* | *-*-mint*)
-
- $as_echo "#define USE_BINARY_FOPEN 1" >>confdefs.h
- ;;
-@@ -15237,6 +15237,7 @@
- m68kcoff_vec) tb="$tb coff-m68k.lo cofflink.lo" ;;
- m68kcoffun_vec) tb="$tb coff-u68k.lo coff-m68k.lo cofflink.lo" ;;
- m68klinux_vec) tb="$tb m68klinux.lo aout32.lo" ;;
-+ m68kmint_prg_vec) tb="$tb prg-mint.lo aout32.lo" ;;
- m68knetbsd_vec) tb="$tb m68knetbsd.lo aout32.lo" ;;
- m68ksysvcoff_vec) tb="$tb coff-svm68k.lo cofflink.lo" ;;
- m88kbcs_vec) tb="$tb coff-m88k.lo" ;;
-diff -ur --new-file binutils-2.21.51.0.7/bfd/configure.in binutils-2.21.51.0.7-mint/bfd/configure.in
---- binutils-2.21.51.0.7/bfd/configure.in 2011-03-07 18:05:31.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/bfd/configure.in 2011-04-08 10:07:07.000000000 +0000
-@@ -880,6 +880,7 @@
- m68kcoff_vec) tb="$tb coff-m68k.lo cofflink.lo" ;;
- m68kcoffun_vec) tb="$tb coff-u68k.lo coff-m68k.lo cofflink.lo" ;;
- m68klinux_vec) tb="$tb m68klinux.lo aout32.lo" ;;
-+ m68kmint_prg_vec) tb="$tb prg-mint.lo aout32.lo" ;;
- m68knetbsd_vec) tb="$tb m68knetbsd.lo aout32.lo" ;;
- m68ksysvcoff_vec) tb="$tb coff-svm68k.lo cofflink.lo" ;;
- m88kbcs_vec) tb="$tb coff-m88k.lo" ;;
-diff -ur --new-file binutils-2.21.51.0.7/bfd/libaout.h binutils-2.21.51.0.7-mint/bfd/libaout.h
---- binutils-2.21.51.0.7/bfd/libaout.h 2009-10-09 22:25:42.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/bfd/libaout.h 2011-04-08 10:07:08.000000000 +0000
-@@ -422,6 +422,10 @@
- table, used when linking on SunOS. This is indexed by the symbol
- index. */
- bfd_vma *local_got_offsets;
-+
-+ /* A pointer for data used by aout extensions. (Currently only used
-+ by MiNT executables (see prg-mint.c). */
-+ void *ext;
- };
-
- struct aout_data_struct
-@@ -449,6 +453,7 @@
- #define obj_aout_string_window(bfd) (adata (bfd).string_window)
- #define obj_aout_sym_hashes(bfd) (adata (bfd).sym_hashes)
- #define obj_aout_dynamic_info(bfd) (adata (bfd).dynamic_info)
-+#define obj_aout_ext(bfd) (adata (bfd).ext)
-
- /* We take the address of the first element of an asymbol to ensure that the
- macro is only ever applied to an asymbol. */
-diff -ur --new-file binutils-2.21.51.0.7/bfd/prg-mint.c binutils-2.21.51.0.7-mint/bfd/prg-mint.c
---- binutils-2.21.51.0.7/bfd/prg-mint.c 1970-01-01 00:00:00.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/bfd/prg-mint.c 2011-04-08 10:07:08.000000000 +0000
-@@ -0,0 +1,1732 @@
-+/* BFD backend for traditional MiNT executables.
-+ Copyright 1998, 2007, 2008, 2009 Free Software Foundation, Inc.
-+ Originally written by Guido Flohr (guido@freemint.de).
-+ Modified by Vincent Riviere (vincent.riviere@freesbee.fr).
-+
-+ This file is part of BFD, the Binary File Descriptor library.
-+
-+ 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, write to the Free Software
-+ Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-+ MA 02110-1301, USA. */
-+
-+/* The format of executables on Atari is actually not a.out, it is
-+ only chosen as an approach which comes close enough. The layout of a
-+ program image on disk looked like this:
-+
-+ +-----------------+
-+ | 28 Bytes Header |
-+ +-----------------+
-+ | Text segment |
-+ +-----------------+
-+ | Data segment |
-+ +-----------------+
-+ | BSS |
-+ +-----------------+
-+ | Symbol table |
-+ +-----------------+
-+ | TPA relocation |
-+ +-----------------+
-+
-+ The 28 byte exec header used to look like this:
-+
-+ struct old_exec_header
-+ {
-+ bfd_byte a_magic[2];
-+ bfd_byte a_text[4];
-+ bfd_byte a_data[4];
-+ bfd_byte a_bss[4];
-+ bfd_byte a_syms[4];
-+ bfd_byte a_resvd[4];
-+ bfd_byte a_abs[2];
-+ };
-+
-+ The first two bytes (A_MAGIC) contained an assembler branch
-+ instruction to the beginning of the text segment. Because the
-+ exec header had a fixed size and the text entry point was constant
-+ this assembler instruction also had a constant value (0x601a).
-+ In fact the operating system never really executed the branch
-+ instruction but used this value (0x601a) as a magic value.
-+
-+ TEXT, DATA and BSS were as one would expect them. The symbol
-+ table wasn't. Several different formats were in use, none of them
-+ very efficient, none of them powerful enough to support source
-+ level debugging. I've changed that and the GNU symbol table will
-+ now be used instead (unless the --traditional-format option was
-+ given to the linker).
-+
-+ If the last member A_ABS of the exec header is zero the program
-+ image contains an additional table with relocation information
-+ at the end of the image. The kernel can load program images at
-+ virtually any address in the address space. In fact it will load
-+ it at the start of the biggest block of free memory. This block
-+ is then called the Transient Program Area TPA and the image has
-+ to be relocated against the TPA at runtime. The relocation info
-+ itself is in a simply way compressed: It starts with a four-byte
-+ value, the first address within the image to be relocated. Now
-+ following are one-byte offsets to the last address. The special
-+ value of 1 (which is impossible as an offset) signifies that 254
-+ has to be added to the next offset. The table is finished with
-+ a zero-byte.
-+
-+ I now simply extended the header from its old 28 bytes to 256
-+ bytes. The first 28 bytes give home to a standard Atari header,
-+ the rest is for extensions. The extension header starts with
-+ a ``real'' assembler instruction, a far jump to the text entry
-+ point. The extension header gives home to a standard a.out
-+ exec header (currently NMAGIC) plus some extra
-+ more or less useful fields plus space to future extensions.
-+ For the OS the extension header will already belong to the text
-+ segment, for BFD backends the text segment is 228 (or 0xe4)
-+ bytes smaller than for the OS. This explains for example the
-+ funny TEXT_START_ADDR 0xe4.
-+
-+ The TARGET_PAGE_SIZE is 2 which is only fake. There is currently
-+ no such thing as memory paging on the Atari (and this is why
-+ ZMAGICs are disabled for now to allow for future enhancements).
-+
-+ If you think that this whole file looks quite like a big hack
-+ you're probably right. But the results (mainly the output of
-+ the linker) seem to work and they allow to use up-to-date
-+ binutils on the Atari until a better executable format (maybe
-+ ELF) has been established for this machine. */
-+
-+#include "sysdep.h"
-+#include "bfd.h"
-+
-+#define N_HEADER_IN_TEXT(x) 0
-+#define BYTES_IN_WORD 4
-+#define ENTRY_CAN_BE_ZERO
-+#define N_SHARED_LIB(x) 0
-+#define TEXT_START_ADDR 0xe4
-+#define TARGET_PAGE_SIZE 2
-+#define TARGET_IS_BIG_ENDIAN_P
-+#define DEFAULT_ARCH bfd_arch_m68k
-+#define N_TXTADDR(x) TEXT_START_ADDR
-+
-+/* Do not "beautify" the CONCAT* macro args. Traditional C will not
-+ remove whitespace added here, and thus will fail to concatenate
-+ the tokens. */
-+#define MY(OP) CONCAT2 (m68kmint_prg_,OP)
-+#define TARGETNAME "a.out-mintprg"
-+#define NAME(x,y) CONCAT3 (mintprg,_32_,y)
-+
-+/* We have to do quite a lot of magic to make the Atari format
-+ for GEMDOS executables fit into the standard a.out format.
-+ We start with the original header. */
-+#define external_exec mint_external_exec
-+struct mint_external_exec
-+{
-+ bfd_byte g_branch[2]; /* 0x601a. */
-+ bfd_byte g_text[4]; /* Length of text section. */
-+ bfd_byte g_data[4]; /* Length of data section. */
-+ bfd_byte g_bss[4]; /* Length of bss section. */
-+ bfd_byte g_syms[4]; /* Length of symbol table. */
-+ bfd_byte g_extmagic[4]; /* Always 0x4d694e54
-+ (in ASCII: ``MiNT''). */
-+ bfd_byte g_flags[4]; /* Atari special flags. */
-+ bfd_byte g_abs[2]; /* Non-zero if absolute (no relocation
-+ info. */
-+
-+ /* We extend this header now to provide the information that the
-+ binutils want to see. Everything following will actually be part
-+ of the text segment (from MiNT's point of view). As a
-+ consequence the text section has 228 bytes of redundancy.
-+
-+ The following eight bytes should be treated as opaque.
-+ If the word ``opaque'' always attracts your curiosity in
-+ typedefs and structs, here's the explanation: These eight bytes
-+ are really two assembler instructions. The first one moves
-+ the contents of e_entry into register d0, the second one
-+ jumps (pc-relative) to the entry point. See swap_exec_header_out
-+ for details. */
-+ bfd_byte g_jump_entry[8];
-+
-+ /* Now following a standard a.out header. Note that the values
-+ may differ from the one given on top. The traditional header
-+ contains the values that the OS wants to see, the values below
-+ are the values that make the binutils work. */
-+ bfd_byte e_info[4]; /* Magic number and stuff. */
-+ bfd_byte e_text[4]; /* Length of text section in bytes. */
-+ bfd_byte e_data[4]; /* Length of data section. */
-+ bfd_byte e_bss[4]; /* Length of standard symbol
-+ table. */
-+ bfd_byte e_syms[4]; /* Length of symbol table. */
-+ bfd_byte e_entry[4]; /* Start address. */
-+ bfd_byte e_trsize[4]; /* Length of text relocation
-+ info. */
-+ bfd_byte e_drsize[4]; /* Length of data relocation
-+ info. */
-+
-+ bfd_byte g_tparel_pos[4]; /* File position of TPA relative
-+ relocation info. */
-+ bfd_byte g_tparel_size[4]; /* Length of TPA relative relocation
-+ info. */
-+
-+ /* This is for extensions. */
-+ bfd_byte g_stkpos[4]; /* If stacksize is hardcoded into
-+ the executable you will find it
-+ at file offset g_stkpos. If
-+ not this is NULL. */
-+
-+ bfd_byte g_symbol_format[4]; /* Format of the symbol table. See
-+ definitions for _MINT_SYMBOL_FORMAT*
-+ above. */
-+
-+ /* Pad with zeros. */
-+ bfd_byte g_pad0[172];
-+};
-+#define EXEC_BYTES_SIZE 256
-+#define GEMDOS_HEADER_SIZE 28
-+
-+/* The following defines are required by aoutx.h.
-+ They are not automatically defined in aout/aout64.h
-+ if external_exec is defined. */
-+
-+#define OMAGIC 0407 /* Object file or impure executable. */
-+#define NMAGIC 0410 /* Code indicating pure executable. */
-+#define ZMAGIC 0413 /* Code indicating demand-paged executable. */
-+#define BMAGIC 0415 /* Used by a b.out object. */
-+#define QMAGIC 0314 /* Like ZMAGIC but with N_HEADER_IN_TEXT true. */
-+
-+/* Files using the following magic flags will not be loaded. */
-+#define N_BADMAG(x) (N_MAGIC(x) != NMAGIC)
-+
-+/* For DRI symbol table format. */
-+struct dri_symbol
-+{
-+ bfd_byte a_name[8]; /* Symbol name */
-+ bfd_byte a_type[2]; /* Type flag, i.e. A_TEXT etc; see below. */
-+ bfd_byte a_value[4]; /* value of this symbol (or sdb offset). */
-+};
-+#define DRI_SYMBOL_SIZE 14
-+
-+/* Simple values for a_type. */
-+#define A_UNDF 0
-+#define A_BSS 0x0100
-+#define A_TEXT 0x0200
-+#define A_DATA 0x0400
-+#define A_EXT 0x0800 /* External. */
-+#define A_EQREG 0x1000 /* Equated register. */
-+#define A_GLOBL 0x2000 /* Global. */
-+#define A_EQU 0x4000 /* Equated. */
-+#define A_DEF 0x8000 /* Defined. */
-+#define A_LNAM 0x0048 /* GST compatible long name. */
-+ /* File symbols ala aln. */
-+#define A_TFILE 0x0280 /* Text file corresponding to object module. */
-+#define A_TFARC 0x02C0 /* Text file archive. Unfortunately this
-+ conflicts with the bits in A_LNAM. */
-+
-+/* The following include contains the definitions for internal a.out structures
-+ as well as the prototypes for the NAME(...) functions defined in aoutx.h. */
-+
-+#include "libaout.h"
-+
-+/* The following function is similar to _bfd_final_link_relocate, except it
-+ adds the reloc structure as an additional parameter.
-+ It will be used int aoutx.h. */
-+
-+static bfd_reloc_status_type
-+m68kmint_prg_final_link_relocate_rel (reloc_howto_type *howto,
-+ bfd *input_bfd,
-+ asection *input_section,
-+ bfd_byte *contents,
-+ bfd_vma address,
-+ bfd_vma value,
-+ bfd_vma addend,
-+ struct reloc_std_external *rel);
-+
-+#define MY_final_link_relocate_rel m68kmint_prg_final_link_relocate_rel
-+
-+/* The following include contains the definitions for the NAME(...) functions. */
-+
-+#include "aoutx.h"
-+
-+/* Data structure that holds some private information for us. */
-+struct mint_internal_info
-+{
-+ struct bfd_link_info *linkinfo; /* Remembered from final_link. */
-+ bfd_boolean traditional_format; /* Saved from link info. */
-+ int symbol_format; /* Format of the symbol table. */
-+ void *tparel; /* Data for TPA relative relocation
-+ information. */
-+ file_ptr tparel_pos; /* File position of TPA relative
-+ relocation information. */
-+ bfd_size_type tparel_size; /* Size of TPA relative relocation
-+ information. */
-+ bfd_size_type dri_symtab_size; /* Size of traditional symbol table. */
-+
-+#define MINT_RELOC_CHUNKSIZE 0x1000
-+ bfd_vma *relocs; /* Array of address relocations. */
-+ unsigned long relocs_used; /* Number of relocation entries
-+ already used up. */
-+ unsigned long relocs_allocated; /* Number of relocation entries
-+ allocated. */
-+
-+ bfd_vma stkpos; /* File offset to value of _stksize. */
-+
-+ flagword prg_flags; /* Standard GEMDOS flags. */
-+
-+ bfd_boolean override_stack_size; /* TRUE if the executable stack size
-+ must be overriden with stack_size. */
-+ bfd_signed_vma stack_size;
-+
-+ bfd_boolean reloc_error; /* TRUE if an unhandled error during
-+ relocation occured. */
-+};
-+
-+/* If --traditional-format was given to the linker an old-style DRI
-+ symbol table is written into the executable. This is with respect
-+ to many old debugging tools or disassemblers which expect this format.
-+ Although created by the linker, these symbols will be ignored from
-+ input files. */
-+#define _MINT_SYMBOL_FORMAT_GNU 0
-+#define _MINT_SYMBOL_FORMAT_DRI 1
-+
-+/* Declarations for the variables and functions
-+ defined later in aout-target.h. */
-+
-+static const bfd_target *
-+m68kmint_prg_callback (bfd *abfd);
-+
-+static void
-+MY_final_link_callback (bfd *abfd,
-+ file_ptr *ptreloff,
-+ file_ptr *pdreloff,
-+ file_ptr *psymoff);
-+
-+extern const bfd_target m68kmint_prg_vec;
-+
-+/* Initialize a new BFD using our file format. */
-+
-+#define MY_mkobject m68kmint_prg_mkobject
-+
-+static bfd_boolean
-+m68kmint_prg_mkobject (bfd *abfd)
-+{
-+ struct mint_internal_info *myinfo;
-+
-+ if (!NAME (aout, mkobject (abfd)))
-+ return FALSE;
-+
-+ /* Allocate our private BFD data. */
-+ myinfo = bfd_zalloc (abfd, sizeof (*myinfo));
-+ if (myinfo == NULL)
-+ return FALSE;
-+ obj_aout_ext (abfd) = myinfo;
-+
-+ return TRUE;
-+}
-+
-+/* Finish up the reading of an a.out file header. */
-+
-+#define MY_object_p m68kmint_prg_object_p
-+
-+static const bfd_target *
-+m68kmint_prg_object_p (bfd *abfd)
-+{
-+ struct external_exec exec_bytes; /* Raw exec header from file. */
-+ struct internal_exec exec; /* Cleaned-up exec header. */
-+ const bfd_target *target;
-+ bfd_size_type amt = EXEC_BYTES_SIZE;
-+ struct mint_internal_info *myinfo;
-+
-+ /* Read the exec bytesd from the file. */
-+ if (bfd_bread (&exec_bytes, amt, abfd) != amt)
-+ {
-+ if (bfd_get_error () != bfd_error_system_call)
-+ bfd_set_error (bfd_error_wrong_format);
-+ return NULL;
-+ }
-+
-+ /* Instead of byte-swapping we compare bytes. */
-+ if (exec_bytes.g_branch[0] != 0x60
-+ || exec_bytes.g_branch[1] != 0x1a
-+ || exec_bytes.g_extmagic[0] != 'M'
-+ || exec_bytes.g_extmagic[1] != 'i'
-+ || exec_bytes.g_extmagic[2] != 'N'
-+ || exec_bytes.g_extmagic[3] != 'T')
-+ {
-+ bfd_set_error (bfd_error_wrong_format);
-+ return NULL;
-+ }
-+
-+ /* Swap the standard a.out fields. */
-+ NAME (aout, swap_exec_header_in) (abfd, &exec_bytes, &exec);
-+
-+ /* Check a.out magic value. */
-+ if (N_BADMAG (exec))
-+ {
-+ bfd_set_error (bfd_error_wrong_format);
-+ return NULL;
-+ }
-+
-+ /* Initialize this BFD with the exec values. */
-+ target = NAME (aout, some_aout_object_p) (abfd, &exec, m68kmint_prg_callback);
-+
-+ /* Allocate our private BFD data. */
-+ myinfo = bfd_zalloc (abfd, sizeof (*myinfo));
-+ if (myinfo == NULL)
-+ return NULL;
-+ obj_aout_ext (abfd) = myinfo;
-+
-+ /* Now get the missing information. */
-+ myinfo->prg_flags = bfd_h_get_32 (abfd, exec_bytes.g_flags);
-+ myinfo->stkpos = bfd_h_get_32 (abfd, exec_bytes.g_stkpos);
-+ myinfo->symbol_format = bfd_h_get_32 (abfd, exec_bytes.g_symbol_format);
-+
-+ /* TPA relocation information. */
-+ myinfo->tparel_pos = bfd_h_get_32 (abfd, exec_bytes.g_tparel_pos);
-+ myinfo->tparel_size = bfd_h_get_32 (abfd, exec_bytes.g_tparel_size);
-+
-+ /* FIXME: Currently we always read the TPA relative relocation
-+ information. This is suboptimal because often times there
-+ is no need for it. Read it only if need be! Maybe this should
-+ also depend on abfd->cacheable? */
-+ if (myinfo->tparel_size == 0)
-+ myinfo->tparel = bfd_zalloc (abfd, 4);
-+ else
-+ myinfo->tparel = bfd_alloc (abfd, myinfo->tparel_size);
-+
-+ if (myinfo->tparel == NULL)
-+ return NULL;
-+
-+ if (myinfo->tparel_size == 0)
-+ {
-+ myinfo->tparel_size = 4;
-+ }
-+ else
-+ {
-+ /* Read the information from the bfd. */
-+ if (bfd_seek (abfd, myinfo->tparel_pos, SEEK_SET) != 0
-+ || (bfd_bread (myinfo->tparel, myinfo->tparel_size, abfd)
-+ != myinfo->tparel_size))
-+ return NULL;
-+ }
-+
-+ return target;
-+}
-+
-+/* Free all information we have cached for this BFD. We can always
-+ read it again later if we need it. */
-+
-+#define MY_bfd_free_cached_info m68kmint_prg_bfd_free_cached_info
-+
-+static bfd_boolean
-+m68kmint_prg_bfd_free_cached_info (bfd *abfd)
-+{
-+ struct mint_internal_info *myinfo = obj_aout_ext (abfd);
-+
-+ if (myinfo != NULL && myinfo->relocs != NULL)
-+ {
-+ free (myinfo->relocs);
-+ myinfo->relocs = NULL;
-+ }
-+
-+ /* myinfo itself has been allocated by bfd_zalloc()
-+ so will be automatically freed along with the BFD.
-+ Same for myinfo->tparel. */
-+
-+ return NAME (aout, bfd_free_cached_info) (abfd);
-+}
-+
-+/* Write a DRI symbol with TYPE and VALUE. If the NAME of the
-+ symbol exceeds 8 characters write a long symbol. If it
-+ exceeds 22 characters truncate the name. */
-+
-+static int
-+write_dri_symbol (bfd *abfd, const char *name, int type, bfd_vma value)
-+{
-+ int written_bytes = 0;
-+ struct dri_symbol sym;
-+ int is_long_name = strlen (name) > sizeof (sym.a_name);
-+
-+ if (is_long_name)
-+ type |= A_LNAM;
-+
-+ strncpy ((char*)sym.a_name, name, sizeof (sym.a_name));
-+ bfd_put_16 (abfd, type, sym.a_type);
-+ bfd_put_32 (abfd, value, sym.a_value);
-+
-+ if (bfd_bwrite (&sym, DRI_SYMBOL_SIZE, abfd) != DRI_SYMBOL_SIZE)
-+ return -1;
-+ written_bytes += DRI_SYMBOL_SIZE;
-+
-+ if (is_long_name)
-+ {
-+ char more_name[DRI_SYMBOL_SIZE];
-+
-+ strncpy (more_name, name + sizeof (sym.a_name), DRI_SYMBOL_SIZE);
-+
-+ if (bfd_bwrite (more_name, DRI_SYMBOL_SIZE, abfd) != DRI_SYMBOL_SIZE)
-+ return -1;
-+ written_bytes += DRI_SYMBOL_SIZE;
-+ }
-+
-+ return written_bytes;
-+}
-+
-+/* Emit a traditional DRI symbol table while linking.
-+ Most of this code comes from aout_link_write_symbols() in aoutx.h. */
-+
-+static bfd_boolean
-+link_write_traditional_syms (bfd *abfd, struct bfd_link_info *info)
-+{
-+ bfd *input_bfd;
-+ enum bfd_link_strip strip = info->strip;
-+ enum bfd_link_discard discard = info->discard;
-+ struct mint_internal_info *myinfo = obj_aout_ext (abfd);
-+ bfd *last_archive = NULL;
-+
-+ /* Position file pointer. */
-+ if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0)
-+ return FALSE;
-+
-+ myinfo->dri_symtab_size = 0;
-+
-+ for (input_bfd = info->input_bfds; input_bfd != NULL; input_bfd = input_bfd->link_next)
-+ {
-+ bfd_size_type sym_count = obj_aout_external_sym_count (input_bfd);
-+ char *strings = obj_aout_external_strings (input_bfd);
-+ struct external_nlist *sym = obj_aout_external_syms (input_bfd);
-+ struct external_nlist *sym_end = sym + sym_count;
-+ struct aout_link_hash_entry **sym_hash = obj_aout_sym_hashes (input_bfd);
-+ bfd_boolean pass = FALSE;
-+ bfd_boolean skip = FALSE;
-+ bfd_boolean skip_next = FALSE;
-+ int written_bytes;
-+ int a_type;
-+ bfd_boolean write_archive_name = FALSE;
-+ bfd_vma val = 0;
-+
-+ /* First write out a symbol for the archive if we do not
-+ strip these symbols and if it differs from the last
-+ one. */
-+ if (input_bfd->my_archive != last_archive
-+ && input_bfd->my_archive != NULL)
-+ {
-+ write_archive_name = TRUE;
-+ last_archive = input_bfd->my_archive;
-+ }
-+
-+ if (write_archive_name
-+ && strip != strip_all
-+ && (strip != strip_some
-+ || bfd_hash_lookup (info->keep_hash,
-+ input_bfd->my_archive->filename,
-+ FALSE, FALSE) != NULL)
-+ && discard != discard_all)
-+ {
-+ val = bfd_get_section_vma (abfd,
-+ obj_textsec (input_bfd)->output_section)
-+ + obj_textsec (input_bfd)->output_offset;
-+
-+ written_bytes = write_dri_symbol (abfd,
-+ input_bfd->my_archive->filename,
-+ A_TFILE, val);
-+
-+ if (written_bytes < 0)
-+ return FALSE;
-+ else
-+ myinfo->dri_symtab_size += written_bytes;
-+ }
-+
-+ /* Now write out a symbol for the object file if we do not
-+ strip these symbols. */
-+ if (strip != strip_all
-+ && (strip != strip_some
-+ || bfd_hash_lookup (info->keep_hash, input_bfd->filename,
-+ FALSE, FALSE) != NULL)
-+ && discard != discard_all)
-+ {
-+ val = bfd_get_section_vma (abfd,
-+ obj_textsec (input_bfd)->output_section)
-+ + obj_textsec (input_bfd)->output_offset;
-+
-+ written_bytes = write_dri_symbol (abfd, input_bfd->filename,
-+ A_TFILE, val);
-+ if (written_bytes < 0)
-+ return FALSE;
-+ else
-+ myinfo->dri_symtab_size += written_bytes;
-+ }
-+
-+ /* Now we have a problem. All symbols that we see have already
-+ been marked written (because we write them a second time
-+ here. If we would do it the clean way we would have
-+ to traverse the entire symbol map and reset the written
-+ flag. We hack here instead... */
-+#define mark_written(h) (* (int *) &h->written = (int) TRUE + 1)
-+#define is_written(h) ((int) h->written == (int) TRUE + 1)
-+ for (; sym < sym_end; sym++, sym_hash++)
-+ {
-+ const char *name;
-+ int type;
-+ struct aout_link_hash_entry *h;
-+ asection *symsec;
-+ val = 0;
-+
-+ type = H_GET_8 (input_bfd, sym->e_type);
-+ name = strings + GET_WORD (input_bfd, sym->e_strx);
-+
-+ h = NULL;
-+
-+ if (pass)
-+ {
-+ /* Pass this symbol through. It is the target of an
-+ indirect or warning symbol. */
-+ val = GET_WORD (input_bfd, sym->e_value);
-+ pass = FALSE;
-+ }
-+ else if (skip_next)
-+ {
-+ /* Skip this symbol, which is the target of an indirect
-+ symbol that we have changed to no longer be an indirect
-+ symbol. */
-+ skip_next = FALSE;
-+ continue;
-+ }
-+ else
-+ {
-+ struct aout_link_hash_entry *hresolve = *sym_hash;
-+
-+ /* We have saved the hash table entry for this symbol, if
-+ there is one. Note that we could just look it up again
-+ in the hash table, provided we first check that it is an
-+ external symbol. */
-+ h = *sym_hash;
-+
-+ /* Use the name from the hash table, in case the symbol was
-+ wrapped. */
-+ if (h != NULL
-+ && h->root.type != bfd_link_hash_warning)
-+ name = h->root.root.string;
-+
-+ /* If this is an indirect or warning symbol, then change
-+ hresolve to the base symbol. */
-+ hresolve = h;
-+ if (h != (struct aout_link_hash_entry *) NULL
-+ && (h->root.type == bfd_link_hash_indirect
-+ || h->root.type == bfd_link_hash_warning))
-+ {
-+ hresolve = (struct aout_link_hash_entry*) h->root.u.i.link;
-+ while (hresolve->root.type == bfd_link_hash_indirect
-+ || hresolve->root.type == bfd_link_hash_warning)
-+ hresolve = ((struct aout_link_hash_entry*)
-+ hresolve->root.u.i.link);
-+ }
-+
-+ /* If the symbol has already been written out skip it. */
-+ if (h != NULL
-+ && is_written (h))
-+ {
-+ if ((type & N_TYPE) == N_INDR
-+ || type == N_WARNING)
-+ skip_next = TRUE;
-+ continue;
-+ }
-+
-+ /* See if we are stripping this symbol. */
-+ skip = FALSE;
-+
-+ /* Skip all debugger symbols. No way to output them in
-+ DRI format. This will also reduce a lot of headaches. */
-+ if ((type & N_STAB) != 0)
-+ skip = TRUE;
-+
-+ switch (strip)
-+ {
-+ case strip_none:
-+ case strip_debugger:
-+ break;
-+ case strip_some:
-+ if (bfd_hash_lookup (info->keep_hash, name, FALSE, FALSE)
-+ == NULL)
-+ skip = TRUE;
-+ break;
-+ case strip_all:
-+ skip = TRUE;
-+ break;
-+ }
-+
-+ if (skip)
-+ {
-+ if (h != NULL)
-+ mark_written (h);
-+ continue;
-+ }
-+
-+ /* Get the value of the symbol. */
-+ if ((type & N_TYPE) == N_TEXT
-+ || type == N_WEAKT)
-+ symsec = obj_textsec (input_bfd);
-+ else if ((type & N_TYPE) == N_DATA
-+ || type == N_WEAKD)
-+ symsec = obj_datasec (input_bfd);
-+ else if ((type & N_TYPE) == N_BSS
-+ || type == N_WEAKB)
-+ symsec = obj_bsssec (input_bfd);
-+ else if ((type & N_TYPE) == N_ABS
-+ || type == N_WEAKA)
-+ symsec = bfd_abs_section_ptr;
-+ else if (((type & N_TYPE) == N_INDR
-+ && (hresolve == NULL
-+ || (hresolve->root.type != bfd_link_hash_defined
-+ && hresolve->root.type != bfd_link_hash_defweak
-+ && hresolve->root.type != bfd_link_hash_common)))
-+ || type == N_WARNING)
-+ {
-+ /* Pass the next symbol through unchanged. The
-+ condition above for indirect symbols is so that if
-+ the indirect symbol was defined, we output it with
-+ the correct definition so the debugger will
-+ understand it. */
-+ pass = TRUE;
-+ val = GET_WORD (input_bfd, sym->e_value);
-+ symsec = NULL;
-+ }
-+ else
-+ {
-+ /* If we get here with an indirect symbol, it means that
-+ we are outputting it with a real definition. In such
-+ a case we do not want to output the next symbol,
-+ which is the target of the indirection. */
-+ if ((type & N_TYPE) == N_INDR)
-+ skip_next = TRUE;
-+
-+ symsec = NULL;
-+
-+ /* We need to get the value from the hash table. We use
-+ hresolve so that if we have defined an indirect
-+ symbol we output the final definition. */
-+ if (h == NULL)
-+ {
-+ switch (type & N_TYPE)
-+ {
-+ case N_SETT:
-+ symsec = obj_textsec (input_bfd);
-+ break;
-+ case N_SETD:
-+ symsec = obj_datasec (input_bfd);
-+ break;
-+ case N_SETB:
-+ symsec = obj_bsssec (input_bfd);
-+ break;
-+ case N_SETA:
-+ symsec = bfd_abs_section_ptr;
-+ break;
-+ default:
-+ val = 0;
-+ break;
-+ }
-+ }
-+ else if (hresolve->root.type == bfd_link_hash_defined
-+ || hresolve->root.type == bfd_link_hash_defweak)
-+ {
-+ asection *input_section;
-+ asection *output_section;
-+
-+ /* This case usually means a common symbol which was
-+ turned into a defined symbol. */
-+ input_section = hresolve->root.u.def.section;
-+ output_section = input_section->output_section;
-+ BFD_ASSERT (bfd_is_abs_section (output_section)
-+ || output_section->owner == abfd);
-+
-+ /* The following reference to the output section VMA
-+ is commented out because DRI symbols are relative
-+ to the beginning of the section. */
-+ val = (hresolve->root.u.def.value
-+ /*+ bfd_get_section_vma (abfd, output_section)*/
-+ + input_section->output_offset);
-+
-+ /* TEXT symbols values must be adjusted
-+ by adding the size of the extended header. */
-+ if (output_section == obj_textsec (abfd))
-+ val += TEXT_START_ADDR;
-+
-+ /* Get the correct type based on the section. If
-+ this is a constructed set, force it to be
-+ globally visible. */
-+ if (type == N_SETT
-+ || type == N_SETD
-+ || type == N_SETB
-+ || type == N_SETA)
-+ type |= N_EXT;
-+
-+ type &=~ N_TYPE;
-+
-+ if (output_section == obj_textsec (abfd))
-+ type |= N_TEXT;
-+ else if (output_section == obj_datasec (abfd))
-+ type |= N_DATA;
-+ else if (output_section == obj_bsssec (abfd))
-+ type |= N_BSS;
-+ else
-+ type |= N_ABS;
-+ }
-+ else if (hresolve->root.type == bfd_link_hash_common)
-+ val = hresolve->root.u.c.size;
-+ else if (hresolve->root.type == bfd_link_hash_undefweak)
-+ {
-+ val = 0;
-+ type = N_UNDF;
-+ }
-+ else
-+ val = 0;
-+ }
-+ if (symsec != NULL)
-+ {
-+ /* The following reference to the output section VMA
-+ is commented out because DRI symbols are relative
-+ to the beginning of the section. */
-+ val = (/*symsec->output_section->vma
-+ +*/ symsec->output_offset
-+ + (GET_WORD (input_bfd, sym->e_value)
-+ - symsec->vma));
-+
-+ /* TEXT symbols values must be adjusted
-+ by adding the size of the extended header. */
-+ if (symsec == obj_textsec (input_bfd))
-+ val += TEXT_START_ADDR;
-+ }
-+
-+ /* If this is a global symbol set the written flag, and if
-+ it is a local symbol see if we should discard it. */
-+ if (h != NULL)
-+ {
-+ mark_written (h);
-+ }
-+ else if ((type & N_TYPE) != N_SETT
-+ && (type & N_TYPE) != N_SETD
-+ && (type & N_TYPE) != N_SETB
-+ && (type & N_TYPE) != N_SETA)
-+ {
-+ switch (discard)
-+ {
-+ case discard_none:
-+ case discard_sec_merge:
-+ break;
-+ case discard_l:
-+ if (bfd_is_local_label_name (input_bfd, name))
-+ skip = TRUE;
-+ break;
-+ default:
-+ case discard_all:
-+ skip = TRUE;
-+ break;
-+ }
-+ if (skip)
-+ {
-+ pass = FALSE;
-+ continue;
-+ }
-+ }
-+ }
-+
-+ /* Now find the nearest type in DRI format. */
-+ switch (type)
-+ {
-+ case N_ABS:
-+ case N_ABS | N_EXT:
-+ case N_SETA:
-+ case N_SETA | N_EXT:
-+ case N_WEAKA:
-+ a_type = A_EQU | A_DEF | A_GLOBL;
-+ break;
-+ case N_TEXT:
-+ case N_TEXT | N_EXT:
-+ case N_SETT:
-+ case N_SETT | N_EXT:
-+ case N_WEAKT:
-+ a_type = A_TEXT | A_DEF | A_GLOBL;
-+ break;
-+ case N_DATA:
-+ case N_DATA | N_EXT:
-+ case N_SETD:
-+ case N_SETD | N_EXT:
-+ case N_WEAKD:
-+ a_type = A_DATA | A_DEF | A_GLOBL;
-+ break;
-+ case N_BSS:
-+ case N_BSS | N_EXT:
-+ case N_SETB:
-+ case N_SETB | N_EXT:
-+ case N_WEAKB:
-+ a_type = A_BSS | A_DEF | A_GLOBL;
-+ break;
-+ default:
-+ continue;
-+ }
-+
-+ written_bytes = write_dri_symbol (abfd, name, a_type, val);
-+ if (written_bytes < 0)
-+ return FALSE;
-+
-+ myinfo->dri_symtab_size += written_bytes;
-+ }
-+ }
-+
-+ obj_aout_external_string_size (abfd) = 0;
-+ return TRUE;
-+}
-+
-+/* This is used for qsort() to sort addresses
-+ for the TPA relocation table. */
-+
-+static int
-+vma_cmp (const void *v1, const void *v2)
-+{
-+ return (int) ((*((bfd_vma *) v1)) - (*((bfd_vma *) v2)));
-+}
-+
-+/* Alloc and fill the TPA relocation table. */
-+
-+static bfd_boolean
-+fill_tparel (bfd *abfd)
-+{
-+ struct mint_internal_info *myinfo = obj_aout_ext (abfd);
-+ unsigned long i;
-+ bfd_size_type bytes;
-+ unsigned char *ptr;
-+
-+ /* Sort the relocation info. */
-+ if (myinfo->relocs != NULL)
-+ qsort (myinfo->relocs, myinfo->relocs_used, sizeof (bfd_vma),
-+ vma_cmp);
-+
-+ /* Now calculate the number of bytes we need. The relocation info
-+ is encoded as follows: The first entry is a 32-bit value
-+ denoting the first offset to relocate. All following entries
-+ are relative to the preceding one. For relative offsets of
-+ more than 254 bytes a value of 1 is used. The OS will then
-+ add 254 bytes to the current offset. The list is then terminated
-+ with the byte 0. */
-+ bytes = 4; /* First entry is a long. */
-+ for (i = 1; i < myinfo->relocs_used; i++)
-+ {
-+ unsigned long diff = myinfo->relocs[i] - myinfo->relocs[i - 1];
-+ BFD_ASSERT(diff > 0);
-+ bytes += (diff + 253) / 254;
-+ }
-+ /* Last entry is (bfd_byte) 0 if there are some relocations. */
-+ if (myinfo->relocs_used > 0)
-+ bytes++;
-+
-+ myinfo->tparel_size = bytes;
-+ myinfo->tparel = bfd_alloc (abfd, bytes);
-+ if (myinfo->tparel == NULL)
-+ return FALSE;
-+
-+ /* Now fill the array. */
-+ ptr = (bfd_byte*) myinfo->tparel;
-+ if (myinfo->relocs != NULL)
-+ bfd_put_32 (abfd, myinfo->relocs[0], ptr);
-+ else
-+ bfd_put_32 (abfd, 0, ptr);
-+ ptr += 4;
-+
-+ for (i = 1; i < myinfo->relocs_used; i++)
-+ {
-+ unsigned long diff = myinfo->relocs[i] - myinfo->relocs[i - 1];
-+ while (diff > 254)
-+ {
-+ *ptr++ = 1;
-+ diff -= 254;
-+ }
-+ *ptr++ = (bfd_byte) diff;
-+ }
-+
-+ if (myinfo->relocs_used > 0)
-+ *ptr = 0;
-+
-+ return TRUE;
-+}
-+
-+/* Final link routine. We need to use a call back to get the correct
-+ offsets in the output file. And we need to malloc some internal
-+ buffers. */
-+
-+#define MY_bfd_final_link m68kmint_prg_bfd_final_link
-+
-+static bfd_boolean
-+m68kmint_prg_bfd_final_link (bfd *abfd, struct bfd_link_info *info)
-+{
-+ struct mint_internal_info *myinfo = obj_aout_ext (abfd);
-+ struct bfd_link_hash_table *hash = info->hash;
-+ enum bfd_link_strip original_strip = info->strip;
-+
-+ if (info->relocatable)
-+ {
-+ _bfd_error_handler ("%B: relocatable output is not supported by format %s",
-+ abfd, bfd_get_target (abfd));
-+ bfd_set_error (bfd_error_invalid_operation);
-+ return FALSE;
-+ }
-+
-+ myinfo->linkinfo = info;
-+
-+ /* Make sure that for now we never write zmagics. */
-+ abfd->flags &= ~D_PAGED;
-+
-+ /* Find the __stksize symbol. This symbol is used for a MiNT
-+ special kludge. The libc defines this symbol in an object file
-+ initialized to a default value to make sure it is defined in
-+ every output file. The start-up code in crtinit() then simply
-+ sets the stacksize accordingly. In your programs (if they need
-+ an unusual stacksize) you can then simply code:
-+
-+ long _stksize = 0x2000;
-+
-+ This will create a program stack of 2k. Since MiNT cannot detect
-+ a stack overflow this is the only way to prevent program crashes
-+ caused by a stack that is too small.
-+
-+ The ancient linker ignored this feature, the ancient strip
-+ program paid heed to it. By default, strip never stripped this
-+ special symbol from the binary.
-+
-+ Another program called ``printstk'' and its colleague ``fixstk''
-+ could be used to either print the current value of the stacksize
-+ or to modify it without recompiling and rebuilding. These
-+ programs traversed the symbol table and then took the appropriate
-+ measures if the symbol was found.
-+
-+ Here we do a different approach. Since we already expanded the
-+ standard executable header we now hardcode the address (as a file
-+ offset) that the __stksize symbol points to into the header. We
-+ can now let strip safely remove the entry from the symbol table
-+ and we're not dependent on a special format of the symbol table.
-+ Because the address is kept in the header we will always be able
-+ to manipulate the stacksize value later. */
-+ if (hash != NULL)
-+ {
-+ struct aout_link_hash_entry *h =
-+ aout_link_hash_lookup (aout_hash_table (info), "__stksize",
-+ FALSE, FALSE, FALSE);
-+ asection *sec;
-+
-+ if (h != NULL)
-+ {
-+ switch (h->root.type)
-+ {
-+ case bfd_link_hash_defined:
-+ case bfd_link_hash_defweak:
-+ sec = h->root.u.def.section->output_section;
-+ BFD_ASSERT (sec->owner == abfd);
-+
-+ myinfo->stkpos = (h->root.u.def.value + sec->vma
-+ + h->root.u.def.section->output_offset
-+ + GEMDOS_HEADER_SIZE);
-+ break;
-+ default: /* Ignore other types. */
-+ break;
-+ }
-+ }
-+ }
-+
-+ if ((abfd->flags & BFD_TRADITIONAL_FORMAT) != 0)
-+ {
-+ myinfo->traditional_format = TRUE;
-+ myinfo->symbol_format = _MINT_SYMBOL_FORMAT_DRI;
-+ }
-+
-+ /* Unconditionally unset the traditional flag. The only effect in
-+ the a.out code is to disable string hashing (with respect to
-+ SunOS gdx). This is not necessary for us. */
-+
-+ abfd->flags &= ~BFD_TRADITIONAL_FORMAT;
-+
-+ /* Do not write GNU symbols in traditional format. */
-+ if (myinfo->traditional_format)
-+ info->strip = strip_all;
-+
-+ if (NAME(aout,final_link) (abfd, info, MY_final_link_callback)
-+ != TRUE)
-+ return FALSE;
-+
-+ if (myinfo->reloc_error)
-+ return FALSE;
-+
-+ /* Restore the strip status for the traditional symbols. */
-+ info->strip = original_strip;
-+
-+ if (myinfo->traditional_format
-+ && link_write_traditional_syms (abfd, info) != TRUE)
-+ return FALSE;
-+
-+ if (fill_tparel (abfd) != TRUE)
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+/* Copy private BFD header information from the input BFD. */
-+
-+#define MY_bfd_copy_private_header_data m68kmint_prg_bfd_copy_private_header_data
-+
-+static bfd_boolean
-+m68kmint_prg_bfd_copy_private_header_data (bfd *ibfd, bfd *obfd)
-+{
-+ (void)obfd; /* Unused. */
-+
-+ /* We can only copy BFD files using our own file format. */
-+ if (ibfd->xvec != &m68kmint_prg_vec)
-+ {
-+ _bfd_error_handler ("%B: cannot convert from format %s to format %s",
-+ ibfd, bfd_get_target (ibfd), bfd_get_target (obfd));
-+ bfd_set_error (bfd_error_invalid_operation);
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+/* Copy backend specific data from one object module to another.
-+ This function is used by objcopy and strip. */
-+
-+#define MY_bfd_copy_private_bfd_data m68kmint_prg_bfd_copy_private_bfd_data
-+
-+static bfd_boolean
-+m68kmint_prg_bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd)
-+{
-+ struct mint_internal_info *myinfo_in;
-+ struct mint_internal_info *myinfo_out;
-+
-+ /* obfd uses our file format, ibfd may be foreign. */
-+ if (ibfd->xvec != &m68kmint_prg_vec)
-+ return TRUE;
-+
-+ myinfo_in = obj_aout_ext (ibfd);
-+ BFD_ASSERT (myinfo_in != NULL);
-+
-+ myinfo_out = obj_aout_ext (obfd);
-+ BFD_ASSERT (myinfo_out != NULL);
-+
-+ /* Copy myinfo. */
-+ memcpy (myinfo_out, myinfo_in, sizeof (*myinfo_out));
-+
-+ /* Copy tparel. */
-+ myinfo_out->tparel = bfd_alloc (obfd, myinfo_out->tparel_size);
-+ if (myinfo_out->tparel == NULL)
-+ return FALSE;
-+ memcpy (myinfo_out->tparel, myinfo_in->tparel, myinfo_out->tparel_size);
-+
-+ /* Normalize the type of empty symbols. */
-+ if (bfd_get_symcount (obfd) == 0)
-+ myinfo_out->symbol_format = _MINT_SYMBOL_FORMAT_GNU;
-+
-+ return TRUE; /* _bfd_generic_bfd_copy_private_bfd_data (ibfd, obfd); */
-+}
-+
-+/* Merge private BFD information from an input BFD to the output BFD when linking. */
-+
-+#define MY_bfd_merge_private_bfd_data m68kmint_prg_merge_private_bfd_data
-+
-+static bfd_boolean
-+m68kmint_prg_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
-+{
-+ (void)obfd; /* Unused. */
-+
-+ /* Our file format cannot be used as linker input. */
-+ if (ibfd->xvec == &m68kmint_prg_vec)
-+ {
-+ _bfd_error_handler ("%B: file format %s cannot be used as linker input",
-+ ibfd, bfd_get_target (ibfd));
-+ bfd_set_error (bfd_error_invalid_operation);
-+ return FALSE;
-+ }
-+
-+ return TRUE; /* _bfd_generic_bfd_merge_private_bfd_data (ibfd, obfd); */
-+}
-+
-+/* Find out the symbol name. */
-+
-+static const char *
-+find_symbol_name (reloc_howto_type *howto, bfd *input_bfd,
-+ bfd_byte *location, struct reloc_std_external *rel)
-+{
-+ struct external_nlist *syms = obj_aout_external_syms (input_bfd);
-+ char *strings = obj_aout_external_strings (input_bfd);
-+ struct aout_link_hash_entry **sym_hashes
-+ = obj_aout_sym_hashes (input_bfd);
-+ struct aout_link_hash_entry *h = NULL;
-+ const char *name;
-+ bfd_size_type r_index;
-+ int r_extern;
-+
-+ if (bfd_get_reloc_size (howto) != 4)
-+ return "(not a symbol)";
-+
-+ /* The input bfd is always big-endian. There is no need to
-+ call bfd_header_big_endian (input_bfd). */
-+ r_index = ((rel->r_index[0] << 16)
-+ | (rel->r_index[1] << 8)
-+ | (rel->r_index[2]));
-+ r_extern = (0 != (rel->r_type[0] & RELOC_STD_BITS_EXTERN_BIG));
-+
-+ if (sym_hashes != NULL)
-+ h = sym_hashes[r_index];
-+
-+ if (!r_extern)
-+ {
-+ bfd_size_type i;
-+ bfd_vma wanted_value = bfd_get_32 (input_bfd, location);
-+
-+ name = NULL;
-+ for (i = 0; i < obj_aout_external_sym_count (input_bfd); i++)
-+ {
-+ bfd_vma this_value = bfd_get_32 (input_bfd, syms[i].e_value);
-+
-+ if (this_value == wanted_value)
-+ {
-+ bfd_byte symtype = bfd_get_8 (input_bfd, syms[i].e_type);
-+
-+ /* Skip debug symbols and the like. */
-+ if ((symtype & N_STAB) != 0)
-+ continue;
-+
-+ /* This is dirty but preferable to a plethoria of
-+ single comparisons. */
-+ if (symtype <= (N_BSS | N_EXT)
-+ || (symtype >= N_WEAKU && symtype <= N_COMM))
-+ {
-+ name = strings + GET_WORD (input_bfd, syms[i].e_strx);
-+ break;
-+ }
-+ }
-+ }
-+
-+ /* FIXME: If the relocation is against a section there is
-+ probably a symbol for that section floating around somewhere
-+ in the bfd jungle. */
-+ if (name == NULL)
-+ {
-+ switch ((r_index & N_TYPE) & ~N_EXT)
-+ {
-+ case N_TEXT:
-+ name = "text section";
-+ break;
-+ case N_DATA:
-+ name = "data section";
-+ break;
-+ case N_BSS:
-+ name = "bss section";
-+ break;
-+ case N_ABS:
-+ name = "absolute section";
-+ break;
-+ default:
-+ name = "unknown section";
-+ break;
-+ }
-+ }
-+ }
-+ else if (h != NULL)
-+ name = h->root.root.string;
-+ else if (r_index >= obj_aout_external_sym_count (input_bfd))
-+ name = "(unknown symbol)"; /* Shouldn't happen. */
-+ else
-+ name = strings + GET_WORD (input_bfd, syms[r_index].e_strx);
-+
-+ return name;
-+}
-+
-+/* This relocation routine is used by some of the backend linkers.
-+ They do not construct asymbol or arelent structures, so there is no
-+ reason for them to use bfd_perform_relocation. Also,
-+ bfd_perform_relocation is so hacked up it is easier to write a new
-+ function than to try to deal with it.
-+
-+ This routine does a final relocation. Whether it is useful for a
-+ relocatable link depends upon how the object format defines
-+ relocations.
-+
-+ FIXME: This routine ignores any special_function in the HOWTO,
-+ since the existing special_function values have been written for
-+ bfd_perform_relocation.
-+
-+ HOWTO is the reloc howto information.
-+ INPUT_BFD is the BFD which the reloc applies to.
-+ INPUT_SECTION is the section which the reloc applies to.
-+ CONTENTS is the contents of the section.
-+ ADDRESS is the address of the reloc within INPUT_SECTION.
-+ VALUE is the value of the symbol the reloc refers to.
-+ ADDEND is the addend of the reloc. */
-+
-+/* The additional parameter REL is specific to this backend.
-+ This function is derived from _bfd_final_link_relocate()
-+ found in reloc.c. It adds additional checking for dangerous
-+ relocations in MiNT sharable text sections, then it records
-+ the relocated offset in myinfo->relocs[] for further processing. */
-+
-+static bfd_reloc_status_type
-+m68kmint_prg_final_link_relocate_rel (reloc_howto_type *howto,
-+ bfd *input_bfd,
-+ asection *input_section,
-+ bfd_byte *contents,
-+ bfd_vma address,
-+ bfd_vma value,
-+ bfd_vma addend,
-+ struct reloc_std_external *rel)
-+{
-+ bfd_vma relocation;
-+ bfd *output_bfd = input_section->output_section->owner;
-+ struct mint_internal_info *myinfo = obj_aout_ext (output_bfd);
-+ bfd_reloc_status_type retval;
-+ int r_index;
-+ int r_extern;
-+ bfd_boolean need_tpa_relocation;
-+
-+ /* The input bfd is always big-endian. There is no need to
-+ call bfd_header_big_endian (input_bfd). */
-+ r_index = ((rel->r_index[0] << 16)
-+ | (rel->r_index[1] << 8)
-+ | (rel->r_index[2]));
-+ r_extern = (0 != (rel->r_type[0] & RELOC_STD_BITS_EXTERN_BIG));
-+
-+#define _MINT_F_SHTEXT 0x800
-+
-+ /* Sanity check the address. */
-+ if (address > bfd_get_section_limit (input_bfd, input_section))
-+ return bfd_reloc_outofrange;
-+
-+ /* This function assumes that we are dealing with a basic relocation
-+ against a symbol. We want to compute the value of the symbol to
-+ relocate to. This is just VALUE, the value of the symbol, plus
-+ ADDEND, any addend associated with the reloc. */
-+ relocation = value + addend;
-+
-+ /* Check for dangerous relocations in images with a sharable
-+ text section. */
-+ if ((myinfo->prg_flags & _MINT_F_SHTEXT) != 0
-+ && bfd_get_reloc_size (howto) == 4)
-+ {
-+ bfd_boolean error_found = FALSE;
-+ const char *name = NULL;
-+
-+ if (input_section == obj_textsec (input_bfd))
-+ {
-+ if (!r_extern)
-+ {
-+ /* This is a relocation against another section. Only
-+ relocations against the text section are allowed. */
-+ if (r_index != N_TEXT && r_index != (N_TEXT | N_EXT))
-+ error_found = TRUE;
-+ }
-+ else if (relocation > (input_section->output_section->vma
-+ + input_section->output_section->size))
-+ {
-+ error_found = TRUE;
-+ }
-+ else if (relocation == (input_section->output_section->vma
-+ + input_section->output_section->size))
-+ {
-+ name = find_symbol_name (howto, input_bfd,
-+ contents + address,
-+ rel);
-+ if (strcmp (name, "_etext") == 0)
-+ error_found = FALSE;
-+ }
-+ }
-+
-+ if (error_found)
-+ {
-+ const struct bfd_link_callbacks *callbacks
-+ = myinfo->linkinfo->callbacks;
-+
-+ myinfo->reloc_error = TRUE;
-+
-+ if (callbacks->reloc_dangerous != NULL)
-+ {
-+ if (name == NULL)
-+ name = find_symbol_name (howto, input_bfd,
-+ contents + address,
-+ rel);
-+
-+ callbacks->reloc_dangerous (myinfo->linkinfo, name,
-+ input_bfd,
-+ input_section, address);
-+ }
-+ }
-+ }
-+
-+ /* If the relocation is PC relative, we want to set RELOCATION to
-+ the distance between the symbol (currently in RELOCATION) and the
-+ location we are relocating. Some targets (e.g., i386-aout)
-+ arrange for the contents of the section to be the negative of the
-+ offset of the location within the section; for such targets
-+ pcrel_offset is FALSE. Other targets (e.g., m88kbcs or ELF)
-+ simply leave the contents of the section as zero; for such
-+ targets pcrel_offset is TRUE. If pcrel_offset is FALSE we do not
-+ need to subtract out the offset of the location within the
-+ section (which is just ADDRESS). */
-+ if (howto->pc_relative)
-+ {
-+ relocation -= (input_section->output_section->vma
-+ + input_section->output_offset);
-+ if (howto->pcrel_offset)
-+ relocation -= address;
-+ }
-+
-+ retval = _bfd_relocate_contents (howto, input_bfd, relocation,
-+ contents + address);
-+
-+ /* The symbol has to be relocated again iff the length of the relocation
-+ is 2 words and it is not pc relative. */
-+ need_tpa_relocation = FALSE;
-+ if (!howto->pc_relative && bfd_get_reloc_size (howto) == 4)
-+ {
-+ if (r_extern)
-+ {
-+ struct aout_link_hash_entry **sym_hashes = obj_aout_sym_hashes (input_bfd);
-+ struct aout_link_hash_entry *h = sym_hashes[r_index];
-+ asection *output_section = h->root.u.def.section->output_section;
-+
-+ /* Do not relocate absolute symbols. */
-+ if (output_section == obj_textsec (output_bfd)
-+ || output_section == obj_datasec (output_bfd)
-+ || output_section == obj_bsssec (output_bfd))
-+ {
-+ need_tpa_relocation = TRUE;
-+ }
-+ }
-+ else
-+ {
-+ need_tpa_relocation = TRUE;
-+ }
-+ }
-+
-+ /* Here we add the TPA relocation entries for the address references
-+ located inside the input sections. Note that if some references
-+ to addresses are generated using data statements in the linker
-+ script, they will not be relocated here because they do not
-+ belong to any input section. */
-+ if (need_tpa_relocation)
-+ {
-+ bfd_vma tpa_address = input_section->output_section->vma
-+ + input_section->output_offset + address;
-+
-+ if (!bfd_m68kmint_add_tpa_relocation_entry(output_bfd, tpa_address))
-+ return bfd_reloc_other;
-+ }
-+
-+ return retval;
-+}
-+
-+/* Write out the TPA relocation table. */
-+
-+static bfd_boolean
-+write_tparel (bfd *abfd, struct internal_exec *execp)
-+{
-+ struct mint_internal_info* myinfo = obj_aout_ext (abfd);
-+
-+ if (myinfo->dri_symtab_size == 0)
-+ myinfo->tparel_pos = N_STROFF (*execp)
-+ + obj_aout_external_string_size (abfd);
-+ else
-+ myinfo->tparel_pos = N_SYMOFF (*execp)
-+ + myinfo->dri_symtab_size;
-+
-+ if (bfd_seek (abfd, myinfo->tparel_pos, SEEK_SET) != 0)
-+ return FALSE;
-+
-+ if (bfd_bwrite (myinfo->tparel, myinfo->tparel_size, abfd)
-+ != myinfo->tparel_size)
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+/* Write the full exec header.
-+ This function must be called last to ensure that we have all the
-+ information needed to fill the MiNT-specific header fields. */
-+
-+static bfd_boolean
-+write_exec_header (bfd *abfd, struct internal_exec *execp, struct external_exec *exec_bytes)
-+{
-+ struct mint_internal_info *myinfo = obj_aout_ext (abfd);
-+ bfd_size_type symtab_size;
-+
-+ bfd_h_put_16 (abfd, 0x601a, exec_bytes->g_branch);
-+
-+ /* The OS will load our extension header fields into the text segment. */
-+ bfd_h_put_32 (abfd, execp->a_text + (EXEC_BYTES_SIZE - GEMDOS_HEADER_SIZE),
-+ exec_bytes->g_text);
-+ bfd_h_put_32 (abfd, execp->a_data, exec_bytes->g_data);
-+ bfd_h_put_32 (abfd, execp->a_bss, exec_bytes->g_bss);
-+
-+ /* The OS' notion of the size of the symbol table is another than
-+ the bfd library's. We have to fill in the size of the table
-+ itself plus the size of the string table but only if we have not written
-+ a traditional symbol table. If we have written a traditional symbol
-+ table we know the size. */
-+ if (myinfo->dri_symtab_size != 0)
-+ symtab_size = myinfo->dri_symtab_size;
-+ else
-+ symtab_size = myinfo->tparel_pos - N_SYMOFF (*execp);
-+
-+ bfd_h_put_32 (abfd, symtab_size, exec_bytes->g_syms);
-+
-+ bfd_h_put_32 (abfd, 0x4d694e54, exec_bytes->g_extmagic);
-+ bfd_h_put_32 (abfd, myinfo->prg_flags, exec_bytes->g_flags);
-+ bfd_h_put_16 (abfd, 0, exec_bytes->g_abs);
-+
-+ /* Generate the jump instruction to the entry point. In m68k
-+ assembler mnemnonics it looks more or less like this:
-+
-+ move.l exec_bytes->e_entry(pc),d0
-+ jmp -6(pc,d0.l)
-+
-+ Sorry for the wrong syntax. As a real assembler addict I
-+ never actually use an assembler. I edit my binaries manually
-+ with a hex editor, looks much cooler and it strengthens your
-+ abstraction abilities. */
-+
-+ exec_bytes->g_jump_entry[0] = 0x20;
-+ exec_bytes->g_jump_entry[1] = 0x3a;
-+ exec_bytes->g_jump_entry[2] = 0x00;
-+ exec_bytes->g_jump_entry[3] = 0x1a;
-+ exec_bytes->g_jump_entry[4] = 0x4e;
-+ exec_bytes->g_jump_entry[5] = 0xfb;
-+ exec_bytes->g_jump_entry[6] = 0x08;
-+ exec_bytes->g_jump_entry[7] = 0xfa;
-+
-+ bfd_h_put_32 (abfd, myinfo->tparel_pos, exec_bytes->g_tparel_pos);
-+ bfd_h_put_32 (abfd, myinfo->tparel_size, exec_bytes->g_tparel_size);
-+ bfd_h_put_32 (abfd, myinfo->stkpos, exec_bytes->g_stkpos);
-+
-+ /* If there are no symbols, pretend they are in GNU format. */
-+ if (symtab_size == 0)
-+ myinfo->symbol_format = _MINT_SYMBOL_FORMAT_GNU;
-+
-+ bfd_h_put_32 (abfd, myinfo->symbol_format, exec_bytes->g_symbol_format);
-+
-+ memset (&exec_bytes->g_pad0, 0, sizeof (exec_bytes->g_pad0));
-+
-+ /* The standard stuff. */
-+ NAME(aout, swap_exec_header_out) (abfd, execp, exec_bytes);
-+ if (myinfo->symbol_format != _MINT_SYMBOL_FORMAT_GNU)
-+ PUT_WORD (abfd, 0, exec_bytes->e_syms);
-+
-+ if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
-+ return FALSE;
-+
-+ if (bfd_bwrite (exec_bytes, (bfd_size_type) EXEC_BYTES_SIZE, abfd)
-+ != EXEC_BYTES_SIZE)
-+ return FALSE;
-+
-+ /* Override the stack size. */
-+ if (myinfo->override_stack_size && myinfo->stkpos)
-+ {
-+ bfd_byte big_endian_stack_size[4];
-+
-+ bfd_put_32 (abfd, myinfo->stack_size, &big_endian_stack_size);
-+
-+ if (bfd_seek (abfd, (file_ptr) myinfo->stkpos, SEEK_SET) != 0)
-+ return FALSE;
-+
-+ if (bfd_bwrite (big_endian_stack_size, 4, abfd) != 4)
-+ return FALSE;
-+ }
-+
-+ return TRUE;
-+}
-+
-+/* Write an object file.
-+ Section contents have already been written. We write the
-+ file header, symbols, and relocation. */
-+
-+#define MY_write_object_contents m68kmint_prg_write_object_contents
-+
-+static bfd_boolean
-+m68kmint_prg_write_object_contents (bfd *abfd)
-+{
-+ struct external_exec exec_bytes;
-+ struct internal_exec *execp = exec_hdr (abfd);
-+ bfd_size_type text_size;
-+ file_ptr text_end;
-+
-+ BFD_ASSERT (obj_aout_ext (abfd) != NULL);
-+
-+ obj_reloc_entry_size (abfd) = RELOC_STD_SIZE;
-+
-+ /* Most of the following code come from the WRITE_HEADERS macro
-+ found in libaout.h. */
-+
-+ if (adata(abfd).magic == undecided_magic)
-+ NAME (aout, adjust_sizes_and_vmas) (abfd, & text_size, & text_end);
-+
-+ execp->a_syms = bfd_get_symcount (abfd) * EXTERNAL_NLIST_SIZE;
-+ execp->a_entry = bfd_get_start_address (abfd);
-+
-+ execp->a_trsize = ((obj_textsec (abfd)->reloc_count) *
-+ obj_reloc_entry_size (abfd));
-+ execp->a_drsize = ((obj_datasec (abfd)->reloc_count) *
-+ obj_reloc_entry_size (abfd));
-+
-+ /* Now write out reloc info, followed by syms and strings. */
-+
-+ if (bfd_get_outsymbols (abfd) != NULL
-+ && bfd_get_symcount (abfd) != 0)
-+ {
-+ if (bfd_seek (abfd, (file_ptr) (N_SYMOFF(*execp)), SEEK_SET) != 0)
-+ return FALSE;
-+
-+ if (! NAME (aout, write_syms) (abfd))
-+ return FALSE;
-+ }
-+
-+ if (bfd_seek (abfd, (file_ptr) (N_TRELOFF (*execp)), SEEK_SET) != 0)
-+ return FALSE;
-+ if (!NAME (aout, squirt_out_relocs) (abfd, obj_textsec (abfd)))
-+ return FALSE;
-+
-+ if (bfd_seek (abfd, (file_ptr) (N_DRELOFF (*execp)), SEEK_SET) != 0)
-+ return FALSE;
-+ if (!NAME (aout, squirt_out_relocs) (abfd, obj_datasec (abfd)))
-+ return FALSE;
-+
-+ if (write_tparel (abfd, execp) != TRUE)
-+ return FALSE;
-+
-+ if (write_exec_header (abfd, execp, &exec_bytes) != TRUE)
-+ return FALSE;
-+
-+ return TRUE;
-+}
-+
-+/* Print private BFD data. Used by objdump -p. */
-+
-+#define MY_bfd_print_private_bfd_data m68kmint_prg_print_private_bfd_data
-+
-+static bfd_boolean
-+m68kmint_prg_print_private_bfd_data (bfd *abfd, void *ptr)
-+{
-+ FILE *file = (FILE *) ptr;
-+ struct mint_internal_info *myinfo = obj_aout_ext (abfd);
-+ const char* symbol_format;
-+ long stksize = 0;
-+
-+ fprintf (file, "\n");
-+
-+ fprintf (file, " GEMDOS flags: 0x%08lx\n", (unsigned long) myinfo->prg_flags);
-+ fprintf (file, "Start address: 0x%08lx\n", bfd_get_start_address (abfd));
-+
-+ /* Stack size. */
-+ if (myinfo->stkpos != 0)
-+ {
-+ if (bfd_seek (abfd, myinfo->stkpos, SEEK_SET) != 0
-+ || (bfd_bread (&stksize, sizeof(long), abfd) != sizeof(long)))
-+ return FALSE;
-+
-+ stksize = bfd_get_signed_32 (abfd, &stksize);
-+ }
-+ fprintf (file, " Stack size: %ld\n", stksize);
-+
-+ /* Symbol format. */
-+ switch (myinfo->symbol_format)
-+ {
-+ case _MINT_SYMBOL_FORMAT_GNU: symbol_format = "stabs"; break;
-+ case _MINT_SYMBOL_FORMAT_DRI: symbol_format = "DRI"; break;
-+ default: symbol_format = "?"; break;
-+ }
-+ fprintf (file, "Symbol format: %s\n", symbol_format);
-+
-+ return TRUE;
-+}
-+
-+/* Special case for NAME (aout, get_section_contents)
-+ It is not declared in libaout.h, neither implemented in aoutx.h.
-+ Instead, a macro named aout_32_get_section_contents is defined in libaout.h.
-+ So the default value of MY_get_section_contents provided by aout-target.h
-+ is not correct, it has to be defined here with the right value. */
-+
-+#define MY_get_section_contents aout_32_get_section_contents
-+
-+/* The following include will define m68kmint_prg_vec
-+ and a default implementation for all the MY_ functions
-+ not overriden here. */
-+
-+#include "aout-target.h"
-+
-+/* Set the GEMDOS executable flags.
-+ It is called by the linker emulation script. */
-+
-+bfd_boolean
-+bfd_m68kmint_set_extended_flags (bfd *abfd, flagword prg_flags)
-+{
-+ struct mint_internal_info *myinfo;
-+
-+ BFD_ASSERT(abfd->xvec == &m68kmint_prg_vec);
-+ myinfo = obj_aout_ext (abfd);
-+ BFD_ASSERT(myinfo != NULL);
-+
-+ myinfo->prg_flags = prg_flags;
-+
-+ return TRUE;
-+}
-+
-+/* Override the stack size.
-+ It is called by the linker emulation script. */
-+
-+bfd_boolean
-+bfd_m68kmint_set_stack_size (bfd *abfd, bfd_signed_vma stack_size)
-+{
-+ struct mint_internal_info *myinfo;
-+
-+ BFD_ASSERT(abfd->xvec == &m68kmint_prg_vec);
-+ myinfo = obj_aout_ext (abfd);
-+ BFD_ASSERT(myinfo != NULL);
-+
-+ myinfo->stack_size = stack_size;
-+ myinfo->override_stack_size = TRUE;
-+
-+ return TRUE;
-+}
-+
-+/* Add a TPA relocation entry.
-+ It is called by BFD when linking the input sections, and by the
-+ linker when it generates a reference to an address (in particular,
-+ when building the constructors list). */
-+
-+bfd_boolean
-+bfd_m68kmint_add_tpa_relocation_entry (bfd *abfd, bfd_vma address)
-+{
-+ struct mint_internal_info *myinfo;
-+
-+ BFD_ASSERT(abfd->xvec == &m68kmint_prg_vec);
-+ myinfo = obj_aout_ext (abfd);
-+ BFD_ASSERT(myinfo != NULL);
-+
-+ /* Enlarge the buffer if necessary. */
-+ if (myinfo->relocs_used * sizeof (bfd_vma) >= myinfo->relocs_allocated)
-+ {
-+ bfd_vma *newbuf;
-+ myinfo->relocs_allocated += MINT_RELOC_CHUNKSIZE;
-+ newbuf = bfd_realloc (myinfo->relocs, myinfo->relocs_allocated);
-+ if (newbuf == NULL)
-+ return FALSE;
-+
-+ myinfo->relocs = newbuf;
-+ }
-+
-+ /* The TPA relative relocation actually just adds the address of
-+ the text segment (i. e. beginning of the executable in memory)
-+ to the addresses at the specified locations. This allows an
-+ executable to be loaded everywhere in the address space without
-+ memory management. */
-+ myinfo->relocs[myinfo->relocs_used++] = address;
-+
-+ return TRUE;
-+}
-diff -ur --new-file binutils-2.21.51.0.7/bfd/targets.c binutils-2.21.51.0.7-mint/bfd/targets.c
---- binutils-2.21.51.0.7/bfd/targets.c 2011-01-04 17:51:04.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/bfd/targets.c 2011-04-08 10:07:08.000000000 +0000
-@@ -770,6 +770,7 @@
- extern const bfd_target m68kcoff_vec;
- extern const bfd_target m68kcoffun_vec;
- extern const bfd_target m68klinux_vec;
-+extern const bfd_target m68kmint_prg_vec;
- extern const bfd_target m68knetbsd_vec;
- extern const bfd_target m68ksysvcoff_vec;
- extern const bfd_target m88kbcs_vec;
-diff -ur --new-file binutils-2.21.51.0.7/binutils/configure binutils-2.21.51.0.7-mint/binutils/configure
---- binutils-2.21.51.0.7/binutils/configure 2011-03-07 18:05:31.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/binutils/configure 2011-04-08 10:07:09.000000000 +0000
-@@ -13041,7 +13041,7 @@
-
-
- case "${host}" in
--*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
-+*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows* | *-*-mint*)
-
- $as_echo "#define USE_BINARY_FOPEN 1" >>confdefs.h
- ;;
-diff -ur --new-file binutils-2.21.51.0.7/binutils/dlltool.c binutils-2.21.51.0.7-mint/binutils/dlltool.c
---- binutils-2.21.51.0.7/binutils/dlltool.c 2010-12-06 14:23:54.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/binutils/dlltool.c 2011-04-08 10:07:09.000000000 +0000
-@@ -4360,7 +4360,7 @@
- if (*cp == '-')
- dash = cp;
- if (
--#if defined(__DJGPP__) || defined (__CYGWIN__) || defined(__WIN32__)
-+#if defined(__DJGPP__) || defined (__CYGWIN__) || defined(__WIN32__) || defined(__MINT__)
- *cp == ':' || *cp == '\\' ||
- #endif
- *cp == '/')
-diff -ur --new-file binutils-2.21.51.0.7/binutils/dllwrap.c binutils-2.21.51.0.7-mint/binutils/dllwrap.c
---- binutils-2.21.51.0.7/binutils/dllwrap.c 2010-08-11 21:51:51.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/binutils/dllwrap.c 2011-04-08 10:07:09.000000000 +0000
-@@ -263,7 +263,7 @@
- dash = cp;
-
- if (
--#if defined(__DJGPP__) || defined (__CYGWIN__) || defined(__WIN32__)
-+#if defined(__DJGPP__) || defined (__CYGWIN__) || defined(__WIN32__) || defined(__MINT__)
- *cp == ':' || *cp == '\\' ||
- #endif
- *cp == '/')
-diff -ur --new-file binutils-2.21.51.0.7/binutils/readelf.c binutils-2.21.51.0.7-mint/binutils/readelf.c
---- binutils-2.21.51.0.7/binutils/readelf.c 2011-04-08 09:37:05.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/binutils/readelf.c 2011-04-08 10:07:10.000000000 +0000
-@@ -9903,7 +9903,11 @@
- #ifndef __MSVCRT__
- /* PR 11128: Use two separate invocations in order to work
- around bugs in the Solaris 8 implementation of printf. */
-+#if GCC_VERSION < 3000
-+ printf (" [%6lx] ", (unsigned long) (data - start));
-+#else
- printf (" [%6tx] ", data - start);
-+#endif
- printf ("%s\n", data);
- #else
- printf (" [%6Ix] %s\n", (size_t) (data - start), data);
-diff -ur --new-file binutils-2.21.51.0.7/binutils/resrc.c binutils-2.21.51.0.7-mint/binutils/resrc.c
---- binutils-2.21.51.0.7/binutils/resrc.c 2010-12-06 14:23:55.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/binutils/resrc.c 2011-04-08 10:07:10.000000000 +0000
-@@ -396,7 +396,7 @@
- *space = 0;
-
- if (
--#if defined (__DJGPP__) || defined (__CYGWIN__) || defined (_WIN32)
-+#if defined (__DJGPP__) || defined (__CYGWIN__) || defined (_WIN32) || defined (__MINT__)
- strchr (cmd, '\\') ||
- #endif
- strchr (cmd, '/'))
-@@ -514,7 +514,7 @@
- if (*cp == '-')
- dash = cp;
- if (
--#if defined (__DJGPP__) || defined (__CYGWIN__) || defined(_WIN32)
-+#if defined (__DJGPP__) || defined (__CYGWIN__) || defined(_WIN32) || defined (__MINT__)
- *cp == ':' || *cp == '\\' ||
- #endif
- *cp == '/')
-diff -ur --new-file binutils-2.21.51.0.7/gas/config/te-mint.h binutils-2.21.51.0.7-mint/gas/config/te-mint.h
---- binutils-2.21.51.0.7/gas/config/te-mint.h 1970-01-01 00:00:00.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/gas/config/te-mint.h 2011-04-08 10:07:10.000000000 +0000
-@@ -0,0 +1,30 @@
-+/* Copyright 2008 Free Software Foundation, Inc.
-+
-+ This file is part of GAS, the GNU Assembler.
-+
-+ GAS 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,
-+ or (at your option) any later version.
-+
-+ GAS 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 GAS; see the file COPYING. If not, write to the Free
-+ Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
-+ 02110-1301, USA. */
-+
-+#define TE_MINT
-+
-+#define LOCAL_LABELS_DOLLAR 1
-+#define LOCAL_LABELS_FB 1
-+
-+/* These define interfaces. */
-+#ifdef OBJ_HEADER
-+#include OBJ_HEADER
-+#else
-+#include "obj-format.h"
-+#endif
-diff -ur --new-file binutils-2.21.51.0.7/gas/configure.tgt binutils-2.21.51.0.7-mint/gas/configure.tgt
---- binutils-2.21.51.0.7/gas/configure.tgt 2011-01-04 17:51:04.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/gas/configure.tgt 2011-04-08 10:07:10.000000000 +0000
-@@ -266,6 +266,7 @@
- m68k-*-linux-*) fmt=elf em=linux ;;
- m68k-*-uclinux*) fmt=elf em=uclinux ;;
- m68k-*-gnu*) fmt=elf ;;
-+ m68k-*-mint*) fmt=aout em=mint bfd_gas=yes ;;
- m68k-*-netbsdelf*) fmt=elf em=nbsd ;;
- m68k-*-netbsd*) fmt=aout em=nbsd bfd_gas=yes ;;
- m68k-*-openbsd*) fmt=aout em=nbsd bfd_gas=yes ;;
-diff -ur --new-file binutils-2.21.51.0.7/gas/testsuite/gas/all/weakref1u.d binutils-2.21.51.0.7-mint/gas/testsuite/gas/all/weakref1u.d
---- binutils-2.21.51.0.7/gas/testsuite/gas/all/weakref1u.d 2009-11-11 16:52:57.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/gas/testsuite/gas/all/weakref1u.d 2011-04-08 10:07:10.000000000 +0000
-@@ -3,7 +3,7 @@
- #source: weakref1.s
- # aout turns undefined into *ABS* symbols.
- # see weakref1.d for comments on the other not-targets
--#not-target: *-*-*aout m68k-*-netbsd m68k-*-openbsd* ns32k-*-netbsd alpha*-*-osf* *-*-ecoff
-+#not-target: *-*-*aout m68k-*-netbsd m68k-*-openbsd* m68k-*-mint* ns32k-*-netbsd alpha*-*-osf* *-*-ecoff
-
- # the rest of this file is generated with the following script:
- # # script begin
-diff -ur --new-file binutils-2.21.51.0.7/gas/testsuite/gas/m68k/all.exp binutils-2.21.51.0.7-mint/gas/testsuite/gas/m68k/all.exp
---- binutils-2.21.51.0.7/gas/testsuite/gas/m68k/all.exp 2011-03-07 18:05:32.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/gas/testsuite/gas/m68k/all.exp 2011-04-08 10:10:06.000000000 +0000
-@@ -71,7 +71,7 @@
-
- gas_test_error "p11673.s" "-march=isab" "movel immediate with offset unsupported on isab"
-
-- if { [istarget *-*-*aout] || [istarget *-*-netbsd] || [istarget *-*-openbsd*] } then {
-+ if { [istarget *-*-*aout] || [istarget *-*-netbsd] || [istarget *-*-openbsd*] || [istarget *-*-mint*] } then {
- run_dump_test p3041
- run_dump_test p3041data
- run_dump_test p3041pcrel
-diff -ur --new-file binutils-2.21.51.0.7/gas/testsuite/gas/m68k/br-isaa.d binutils-2.21.51.0.7-mint/gas/testsuite/gas/m68k/br-isaa.d
---- binutils-2.21.51.0.7/gas/testsuite/gas/m68k/br-isaa.d 2009-11-11 16:52:56.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/gas/testsuite/gas/m68k/br-isaa.d 2011-04-08 10:07:10.000000000 +0000
-@@ -1,7 +1,7 @@
- #name: br-isaa.d
- #objdump: -dr
- #as: -march=isaa -pcrel
--#not-target: *-*-*aout m68k-*-netbsd m68k-*-openbsd*
-+#not-target: *-*-*aout m68k-*-netbsd m68k-*-openbsd* m68k-*-mint*
-
- .*: file format .*
-
-diff -ur --new-file binutils-2.21.51.0.7/gas/testsuite/gas/m68k/br-isab.d binutils-2.21.51.0.7-mint/gas/testsuite/gas/m68k/br-isab.d
---- binutils-2.21.51.0.7/gas/testsuite/gas/m68k/br-isab.d 2009-11-11 16:52:56.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/gas/testsuite/gas/m68k/br-isab.d 2011-04-08 10:07:10.000000000 +0000
-@@ -1,7 +1,7 @@
- #name: br-isab.d
- #objdump: -dr
- #as: -march=isab -pcrel
--#not-target: *-*-*aout m68k-*-netbsd m68k-*-openbsd*
-+#not-target: *-*-*aout m68k-*-netbsd m68k-*-openbsd* m68k-*-mint*
-
- .*: file format .*
-
-diff -ur --new-file binutils-2.21.51.0.7/gas/testsuite/gas/m68k/br-isac.d binutils-2.21.51.0.7-mint/gas/testsuite/gas/m68k/br-isac.d
---- binutils-2.21.51.0.7/gas/testsuite/gas/m68k/br-isac.d 2009-11-11 16:52:56.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/gas/testsuite/gas/m68k/br-isac.d 2011-04-08 10:07:10.000000000 +0000
-@@ -1,7 +1,7 @@
- #name: br-isac.d
- #objdump: -dr
- #as: -march=isac -pcrel
--#not-target: *-*-*aout m68k-*-netbsd m68k-*-openbsd*
-+#not-target: *-*-*aout m68k-*-netbsd m68k-*-openbsd* m68k-*-mint*
-
- .*: file format .*
-
-diff -ur --new-file binutils-2.21.51.0.7/include/filenames.h binutils-2.21.51.0.7-mint/include/filenames.h
---- binutils-2.21.51.0.7/include/filenames.h 2011-03-07 18:05:32.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/include/filenames.h 2011-04-08 10:07:27.000000000 +0000
-@@ -30,7 +30,7 @@
- extern "C" {
- #endif
-
--#if defined(__MSDOS__) || defined(_WIN32) || defined(__OS2__) || defined (__CYGWIN__)
-+#if defined(__MSDOS__) || defined(_WIN32) || defined(__OS2__) || defined (__CYGWIN__) || defined (__MINT__)
- # ifndef HAVE_DOS_BASED_FILE_SYSTEM
- # define HAVE_DOS_BASED_FILE_SYSTEM 1
- # endif
-diff -ur --new-file binutils-2.21.51.0.7/include/getopt.h binutils-2.21.51.0.7-mint/include/getopt.h
---- binutils-2.21.51.0.7/include/getopt.h 2005-05-10 22:46:48.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/include/getopt.h 2011-04-08 10:07:27.000000000 +0000
-@@ -106,7 +106,7 @@
- to find the declaration so provide a fully prototyped one. If it
- is 1, we found it so don't provide any declaration at all. */
- #if !HAVE_DECL_GETOPT
--#if defined (__GNU_LIBRARY__) || defined (HAVE_DECL_GETOPT)
-+#if defined (__GNU_LIBRARY__) || defined (__MINT__) || defined (HAVE_DECL_GETOPT)
- /* Many other libraries have conflicting prototypes for getopt, with
- differences in the consts, in unistd.h. To avoid compilation
- errors, only prototype getopt for the GNU C library. */
-diff -ur --new-file binutils-2.21.51.0.7/ld/Makefile.am binutils-2.21.51.0.7-mint/ld/Makefile.am
---- binutils-2.21.51.0.7/ld/Makefile.am 2011-03-07 18:05:32.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/ld/Makefile.am 2011-04-08 10:07:27.000000000 +0000
-@@ -308,6 +308,7 @@
- em68kelf.c \
- em68kelfnbsd.c \
- em68klinux.c \
-+ em68kmint.c \
- em68knbsd.c \
- em68kpsos.c \
- em88kbcs.c \
-@@ -1319,6 +1320,10 @@
- em68klinux.c: $(srcdir)/emulparams/m68klinux.sh \
- $(srcdir)/emultempl/linux.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
- ${GENSCRIPTS} m68klinux "$(tdir_m68klinux)"
-+em68kmint.c: $(srcdir)/emulparams/m68kmint.sh \
-+ $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/mint.em \
-+ $(srcdir)/scripttempl/m68kmint.sc ${GEN_DEPENDS}
-+ ${GENSCRIPTS} m68kmint "$(tdir_m68kmint)"
- em68knbsd.c: $(srcdir)/emulparams/m68knbsd.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
- ${GENSCRIPTS} m68knbsd "$(tdir_m68knbsd)"
-diff -ur --new-file binutils-2.21.51.0.7/ld/Makefile.in binutils-2.21.51.0.7-mint/ld/Makefile.in
---- binutils-2.21.51.0.7/ld/Makefile.in 2011-03-07 18:05:32.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/ld/Makefile.in 2011-04-08 10:07:27.000000000 +0000
-@@ -614,6 +614,7 @@
- em68kelf.c \
- em68kelfnbsd.c \
- em68klinux.c \
-+ em68kmint.c \
- em68knbsd.c \
- em68kpsos.c \
- em88kbcs.c \
-@@ -1229,6 +1230,7 @@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68kelf.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68kelfnbsd.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68klinux.Po@am__quote@
-+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68kmint.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68knbsd.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em68kpsos.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/em88kbcs.Po@am__quote@
-@@ -2762,6 +2764,10 @@
- em68klinux.c: $(srcdir)/emulparams/m68klinux.sh \
- $(srcdir)/emultempl/linux.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
- ${GENSCRIPTS} m68klinux "$(tdir_m68klinux)"
-+em68kmint.c: $(srcdir)/emulparams/m68kmint.sh \
-+ $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/mint.em \
-+ $(srcdir)/scripttempl/m68kmint.sc ${GEN_DEPENDS}
-+ ${GENSCRIPTS} m68kmint "$(tdir_m68kmint)"
- em68knbsd.c: $(srcdir)/emulparams/m68knbsd.sh \
- $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
- ${GENSCRIPTS} m68knbsd "$(tdir_m68knbsd)"
-diff -ur --new-file binutils-2.21.51.0.7/ld/configure binutils-2.21.51.0.7-mint/ld/configure
---- binutils-2.21.51.0.7/ld/configure 2011-03-07 18:05:32.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/ld/configure 2011-04-08 10:07:28.000000000 +0000
-@@ -16557,7 +16557,7 @@
-
-
- case "${host}" in
--*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
-+*-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows* | *-*-mint*)
-
- $as_echo "#define USE_BINARY_FOPEN 1" >>confdefs.h
- ;;
-diff -ur --new-file binutils-2.21.51.0.7/ld/configure.tgt binutils-2.21.51.0.7-mint/ld/configure.tgt
---- binutils-2.21.51.0.7/ld/configure.tgt 2011-01-04 17:51:04.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/ld/configure.tgt 2011-04-08 10:07:28.000000000 +0000
-@@ -344,6 +344,7 @@
- tdir_m68klinux=`echo ${targ_alias} | sed -e 's/linux/linuxaout/'` ;;
- m68k-*-uclinux*) targ_emul=m68kelf ;;
- m68*-*-gnu*) targ_emul=m68kelf ;;
-+m68*-*-mint*) targ_emul=m68kmint ;;
- m68*-*-netbsd*4k*) targ_emul=m68k4knbsd
- targ_extra_emuls="m68knbsd m68kelfnbsd" ;;
- m68*-*-netbsdelf*) targ_emul=m68kelfnbsd
-diff -ur --new-file binutils-2.21.51.0.7/ld/emulparams/m68kmint.sh binutils-2.21.51.0.7-mint/ld/emulparams/m68kmint.sh
---- binutils-2.21.51.0.7/ld/emulparams/m68kmint.sh 1970-01-01 00:00:00.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/ld/emulparams/m68kmint.sh 2011-04-08 10:07:28.000000000 +0000
-@@ -0,0 +1,6 @@
-+SCRIPT_NAME=m68kmint
-+OUTPUT_FORMAT="a.out-mintprg"
-+RELOCATEABLE_OUTPUT_FORMAT="a.out-zero-big"
-+TEXT_START_ADDR=0xe4
-+ARCH=m68k
-+EXTRA_EM_FILE=mint
-diff -ur --new-file binutils-2.21.51.0.7/ld/emultempl/mint.em binutils-2.21.51.0.7-mint/ld/emultempl/mint.em
---- binutils-2.21.51.0.7/ld/emultempl/mint.em 1970-01-01 00:00:00.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/ld/emultempl/mint.em 2011-04-08 10:07:28.000000000 +0000
-@@ -0,0 +1,330 @@
-+# This shell script emits a C file. -*- C -*-
-+# Copyright 2006, 2007 Free Software Foundation, Inc.
-+#
-+# This file is part of the GNU Binutils.
-+#
-+# 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, write to the Free Software
-+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
-+# MA 02110-1301, USA.
-+#
-+
-+# This file is sourced from generic.em
-+#
-+fragment <<EOF
-+
-+#include "getopt.h"
-+#include "ldgram.h"
-+
-+/* Standard GEMDOS program flags. */
-+#define _MINT_F_FASTLOAD 0x01 /* Don't clear heap. */
-+#define _MINT_F_ALTLOAD 0x02 /* OK to load in alternate RAM. */
-+#define _MINT_F_ALTALLOC 0x04 /* OK to malloc from alt. RAM. */
-+#define _MINT_F_BESTFIT 0x08 /* Load with optimal heap size. */
-+/* The memory flags are mutually exclusive. */
-+#define _MINT_F_MEMPROTECTION 0xf0 /* Masks out protection bits. */
-+#define _MINT_F_MEMPRIVATE 0x00 /* Memory is private. */
-+#define _MINT_F_MEMGLOBAL 0x10 /* Read/write access to mem allowed. */
-+#define _MINT_F_MEMSUPER 0x20 /* Only supervisor access allowed. */
-+#define _MINT_F_MEMREADABLE 0x30 /* Any read access OK. */
-+#define _MINT_F_SHTEXT 0x800 /* Program's text may be shared */
-+
-+/* Option flags. */
-+static flagword prg_flags = (_MINT_F_FASTLOAD | _MINT_F_ALTLOAD
-+ | _MINT_F_ALTALLOC | _MINT_F_MEMPRIVATE);
-+
-+/* If override_stack_size is TRUE, then the executable stack size
-+ * must be overriden with the value of stack_size. */
-+static bfd_boolean override_stack_size = FALSE;
-+static bfd_signed_vma stack_size;
-+
-+/* MiNT format extra command line options. */
-+
-+/* Used for setting flags in the MiNT header. */
-+#define OPTION_FASTLOAD (300)
-+#define OPTION_NO_FASTLOAD (OPTION_FASTLOAD + 1)
-+#define OPTION_FASTRAM (OPTION_NO_FASTLOAD + 1)
-+#define OPTION_NO_FASTRAM (OPTION_FASTRAM + 1)
-+#define OPTION_FASTALLOC (OPTION_NO_FASTRAM + 1)
-+#define OPTION_NO_FASTALLOC (OPTION_FASTALLOC + 1)
-+#define OPTION_BESTFIT (OPTION_NO_FASTALLOC + 1)
-+#define OPTION_NO_BESTFIT (OPTION_BESTFIT + 1)
-+#define OPTION_BASEREL (OPTION_NO_BESTFIT + 1)
-+#define OPTION_NO_BASEREL (OPTION_BASEREL + 1)
-+#define OPTION_MEM_PRIVATE (OPTION_NO_BASEREL + 1)
-+#define OPTION_MEM_GLOBAL (OPTION_MEM_PRIVATE + 1)
-+#define OPTION_MEM_SUPER (OPTION_MEM_GLOBAL + 1)
-+#define OPTION_MEM_READONLY (OPTION_MEM_SUPER + 1)
-+#define OPTION_PRG_FLAGS (OPTION_MEM_READONLY + 1)
-+#define OPTION_STACK (OPTION_PRG_FLAGS + 1)
-+
-+static void
-+gld${EMULATION_NAME}_add_options
-+ (int ns ATTRIBUTE_UNUSED, char **shortopts ATTRIBUTE_UNUSED, int nl,
-+ struct option **longopts, int nrl ATTRIBUTE_UNUSED,
-+ struct option **really_longopts ATTRIBUTE_UNUSED)
-+{
-+ static const struct option xtra_long[] = {
-+ {"mfastload", no_argument, NULL, OPTION_FASTLOAD},
-+ {"mno-fastload", no_argument, NULL, OPTION_NO_FASTLOAD},
-+ {"mfastram", no_argument, NULL, OPTION_FASTRAM},
-+ {"mno-fastram", no_argument, NULL, OPTION_NO_FASTRAM},
-+ {"maltram", no_argument, NULL, OPTION_FASTRAM},
-+ {"mno-altram", no_argument, NULL, OPTION_NO_FASTRAM},
-+ {"mfastalloc", no_argument, NULL, OPTION_FASTALLOC},
-+ {"mno-fastalloc", no_argument, NULL, OPTION_NO_FASTALLOC},
-+ {"maltalloc", no_argument, NULL, OPTION_FASTALLOC},
-+ {"mno-altalloc", no_argument, NULL, OPTION_NO_FASTALLOC},
-+ {"mbest-fit", no_argument, NULL, OPTION_BESTFIT},
-+ {"mno-best-fit", no_argument, NULL, OPTION_NO_BESTFIT},
-+ {"mbaserel", no_argument, NULL, OPTION_BASEREL},
-+ {"mno-baserel", no_argument, NULL, OPTION_NO_BASEREL},
-+ {"mshared-text", no_argument, NULL, OPTION_BASEREL},
-+ {"mno-shared-text", no_argument, NULL, OPTION_NO_BASEREL},
-+ {"msharable-text", no_argument, NULL, OPTION_BASEREL},
-+ {"mno-sharable-text", no_argument, NULL, OPTION_NO_BASEREL},
-+ /* Memory protection bits. */
-+ {"mprivate-memory", no_argument, NULL, OPTION_MEM_PRIVATE },
-+ {"mglobal-memory", no_argument, NULL, OPTION_MEM_GLOBAL},
-+ {"msuper-memory", no_argument, NULL, OPTION_MEM_SUPER},
-+ {"mreadable-memory", no_argument, NULL, OPTION_MEM_READONLY},
-+ {"mreadonly-memory", no_argument, NULL, OPTION_MEM_READONLY},
-+ {"mprg-flags", required_argument, NULL, OPTION_PRG_FLAGS},
-+ {"stack", required_argument, NULL, OPTION_STACK},
-+ {NULL, no_argument, NULL, 0}
-+ };
-+
-+ *longopts = (struct option *)
-+ xrealloc (*longopts, nl * sizeof (struct option) + sizeof (xtra_long));
-+ memcpy (*longopts + nl, &xtra_long, sizeof (xtra_long));
-+}
-+
-+static bfd_boolean
-+gld${EMULATION_NAME}_handle_option (int optc)
-+{
-+ switch (optc)
-+ {
-+ default:
-+ return FALSE;
-+
-+ case OPTION_FASTLOAD:
-+ prg_flags |= _MINT_F_FASTLOAD;
-+ break;
-+
-+ case OPTION_NO_FASTLOAD:
-+ prg_flags &= ~_MINT_F_FASTLOAD;
-+ break;
-+
-+ case OPTION_FASTRAM:
-+ prg_flags |= _MINT_F_ALTLOAD;
-+ break;
-+
-+ case OPTION_NO_FASTRAM:
-+ prg_flags &= ~_MINT_F_ALTLOAD;
-+ break;
-+
-+ case OPTION_FASTALLOC:
-+ prg_flags |= _MINT_F_ALTALLOC;
-+ break;
-+
-+ case OPTION_NO_FASTALLOC:
-+ prg_flags &= ~_MINT_F_ALTALLOC;
-+ break;
-+
-+ case OPTION_BESTFIT:
-+ prg_flags |= _MINT_F_BESTFIT;
-+ break;
-+
-+ case OPTION_NO_BESTFIT:
-+ prg_flags &= ~_MINT_F_BESTFIT;
-+ break;
-+
-+ case OPTION_BASEREL:
-+ prg_flags |= _MINT_F_SHTEXT;
-+ break;
-+
-+ case OPTION_NO_BASEREL:
-+ prg_flags &= ~_MINT_F_SHTEXT;
-+ break;
-+
-+ case OPTION_MEM_PRIVATE:
-+ prg_flags &= ~_MINT_F_MEMPROTECTION;
-+ break;
-+
-+ case OPTION_MEM_GLOBAL:
-+ prg_flags &= ~_MINT_F_MEMPROTECTION;
-+ prg_flags |= _MINT_F_MEMPRIVATE;
-+ break;
-+
-+ case OPTION_MEM_SUPER:
-+ prg_flags &= ~_MINT_F_MEMPROTECTION;
-+ prg_flags |= _MINT_F_MEMSUPER;
-+ break;
-+
-+ case OPTION_MEM_READONLY:
-+ prg_flags &= ~_MINT_F_MEMPROTECTION;
-+ prg_flags |= _MINT_F_MEMREADABLE;
-+ break;
-+
-+ case OPTION_PRG_FLAGS:
-+ {
-+ char* tail;
-+ unsigned long flag_value = strtoul (optarg, &tail, 0);
-+
-+ if (*tail != '\0')
-+ einfo (_("%P: warning: ignoring invalid program flags %s\n"), optarg);
-+ else
-+ prg_flags = flag_value;
-+
-+ break;
-+ }
-+ case OPTION_STACK:
-+ {
-+ char* tail;
-+ long size = strtol (optarg, &tail, 0);
-+
-+ if (*tail == 'K' || *tail == 'k')
-+ {
-+ size *= 1024;
-+ ++tail;
-+ }
-+ else if (*tail == 'M' || *tail == 'm')
-+ {
-+ size *= 1024*1024;
-+ ++tail;
-+ }
-+
-+ if (*tail != '\0')
-+ einfo (_("%P: warning: ignoring invalid stack size %s\n"), optarg);
-+ else
-+ {
-+ stack_size = (bfd_signed_vma) size;
-+ override_stack_size = TRUE;
-+ }
-+
-+ break;
-+ }
-+ }
-+ return TRUE;
-+}
-+
-+/* This callback is called when ld is invoked
-+ with the --help and --target-help options. */
-+
-+static void
-+gld_${EMULATION_NAME}_list_options (FILE *file)
-+{
-+ fprintf (file, _(" --m[no-]fastload Enable/Disable not cleaning the heap on startup\n"));
-+ fprintf (file, _(" --m[no-]altram, --m[no-]fastram\n"));
-+ fprintf (file, _(" Enable/Disable loading into alternate RAM\n"));
-+ fprintf (file, _(" --m[no-]altalloc, --m[no-]fastalloc\n"));
-+ fprintf (file, _(" Enable/Disable malloc from alternate RAM\n"));
-+ fprintf (file, _(" --m[no-]best-fit Enable/Disable loading with optimal heap size\n"));
-+ fprintf (file, _(" --m[no-]sharable-text, --m[no-]shared-text, --m[no-]baserel\n"));
-+ fprintf (file, _(" Enable/Disable sharing the text segment\n"));
-+ fprintf (file, "\n");
-+ fprintf (file, _("The following memory options are mutually exclusive:\n"));
-+ fprintf (file, _(" --mprivate-memory Process memory is not accessible\n"));
-+ fprintf (file, _(" --mglobal-memory Process memory is readable and writable\n"));
-+ fprintf (file, _(" --msuper-memory Process memory is accessible in supervisor mode\n"));
-+ fprintf (file, _(" --mreadonly-memory, --mreadable-memory\n"));
-+ fprintf (file, _(" Process memory is readable but not writable\n"));
-+ fprintf (file, "\n");
-+ fprintf (file, _(" --mprg-flags <value> Set all the flags with an integer raw value\n"));
-+ fprintf (file, _(" --stack <size> Override the stack size (suffix k or M allowed)\n"));
-+}
-+
-+/* This callback is called by lang_for_each_statement. It checks that the
-+ output sections speficied in the linker script are compatible with the MiNT
-+ executable format. */
-+
-+static void
-+gld${EMULATION_NAME}_check_output_sections (lang_statement_union_type *s)
-+{
-+ if (s->header.type == lang_output_section_statement_enum)
-+ {
-+ lang_output_section_statement_type *oss = &s->output_section_statement;
-+
-+ if (strcmp(oss->name, ".text") == 0 && oss->bfd_section->vma != ${TEXT_START_ADDR})
-+ einfo (_("%F%P: the VMA of section %A must be 0x%V, but actual value is 0x%V\n"),
-+ oss->bfd_section, ${TEXT_START_ADDR}, oss->bfd_section->vma);
-+ else if (strcmp(oss->name, ".data") == 0 && oss->addr_tree != NULL)
-+ einfo (_("%F%P: the VMA of section %A must not be specified\n"),
-+ oss->bfd_section);
-+ else if (strcmp(oss->name, ".bss") == 0 && oss->addr_tree != NULL)
-+ einfo (_("%F%P: the VMA of section %A must not be specified\n"),
-+ oss->bfd_section);
-+ }
-+}
-+
-+/* This callback is called by lang_for_each_statement. It looks for the data
-+ statements of type REL generated by the linker, and adds a TPA relocation
-+ entry for them. This is used by the CONSTRUCTORS list. */
-+
-+static void
-+gld${EMULATION_NAME}_add_tpa_relocs (lang_statement_union_type *s)
-+{
-+ if (s->header.type == lang_data_statement_enum)
-+ {
-+ lang_data_statement_type *ds = &s->data_statement;
-+
-+ if (ds->exp->type.node_code == REL)
-+ {
-+ if (ds->type == LONG)
-+ {
-+ bfd_vma tpa_address = ds->output_section->vma + ds->output_offset;
-+ if (!bfd_m68kmint_add_tpa_relocation_entry(link_info.output_bfd, tpa_address))
-+ einfo (_("%F%P:%B: unable to add a relocation entry\n"), link_info.output_bfd);
-+ }
-+ else
-+ {
-+ einfo (_("%F%P:%B: invalid size for TPA relocation entry in section %A, offset 0x%V\n"),
-+ link_info.output_bfd, ds->output_section, ds->output_offset);
-+ }
-+ }
-+ }
-+}
-+
-+/* Final emulation specific call. */
-+
-+static void
-+gld${EMULATION_NAME}_finish (void)
-+{
-+ /* Do nothing if we are not generating a MiNT executable (ex: binary). */
-+ if (strcmp (bfd_get_target (link_info.output_bfd), "${OUTPUT_FORMAT}") != 0)
-+ return;
-+
-+ /* Check the output sections. */
-+ lang_for_each_statement (gld${EMULATION_NAME}_check_output_sections);
-+
-+ /* Set the GEMDOS executable header flags. */
-+ if (!bfd_m68kmint_set_extended_flags (link_info.output_bfd, prg_flags))
-+ einfo (_("%F%P:%B: unable to set the header flags\n"), link_info.output_bfd);
-+
-+ /* Override the stack size. */
-+ if (override_stack_size)
-+ if (!bfd_m68kmint_set_stack_size (link_info.output_bfd, stack_size))
-+ einfo (_("%F%P:%B: unable to set the stack size\n"), link_info.output_bfd);
-+
-+ /* Generate TPA relocation entries for the data statements. */
-+ lang_for_each_statement (gld${EMULATION_NAME}_add_tpa_relocs);
-+}
-+
-+EOF
-+
-+# Put these extra routines in ld_${EMULATION_NAME}_emulation
-+#
-+LDEMUL_ADD_OPTIONS=gld${EMULATION_NAME}_add_options
-+LDEMUL_HANDLE_OPTION=gld${EMULATION_NAME}_handle_option
-+LDEMUL_LIST_OPTIONS=gld_${EMULATION_NAME}_list_options
-+LDEMUL_FINISH=gld${EMULATION_NAME}_finish
-diff -ur --new-file binutils-2.21.51.0.7/ld/scripttempl/m68kmint.sc binutils-2.21.51.0.7-mint/ld/scripttempl/m68kmint.sc
---- binutils-2.21.51.0.7/ld/scripttempl/m68kmint.sc 1970-01-01 00:00:00.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/ld/scripttempl/m68kmint.sc 2011-04-08 10:07:28.000000000 +0000
-@@ -0,0 +1,35 @@
-+cat <<EOF
-+${RELOCATING+OUTPUT_FORMAT(${OUTPUT_FORMAT})}
-+${RELOCATING-OUTPUT_FORMAT(${RELOCATEABLE_OUTPUT_FORMAT})}
-+${RELOCATING+${LIB_SEARCH_DIRS}}
-+SECTIONS
-+{
-+ ${RELOCATING+/* The VMA of the .text section is ${TEXT_START_ADDR} instead of 0
-+ because the extended MiNT header is just before,
-+ at the beginning of the TEXT segment. */}
-+ .text ${RELOCATING+${TEXT_START_ADDR}}:
-+ {
-+ CREATE_OBJECT_SYMBOLS
-+ *(.text)
-+ ${CONSTRUCTING+CONSTRUCTORS}
-+ ${RELOCATING+_etext = .;}
-+ ${RELOCATING+__etext = .;}
-+ }
-+
-+ .data :
-+ {
-+ *(.data)
-+ ${RELOCATING+_edata = .;}
-+ ${RELOCATING+__edata = .;}
-+ }
-+
-+ .bss :
-+ {
-+ ${RELOCATING+__bss_start = .;}
-+ *(.bss)
-+ *(COMMON)
-+ ${RELOCATING+_end = .;}
-+ ${RELOCATING+__end = .;}
-+ }
-+}
-+EOF
-diff -ur --new-file binutils-2.21.51.0.7/libiberty/hex.c binutils-2.21.51.0.7-mint/libiberty/hex.c
---- binutils-2.21.51.0.7/libiberty/hex.c 2007-03-16 15:48:30.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/libiberty/hex.c 2011-04-08 10:07:28.000000000 +0000
-@@ -24,7 +24,7 @@
- #include "libiberty.h"
- #include "safe-ctype.h" /* for HOST_CHARSET_ASCII */
-
--#if EOF != -1
-+#if !(EOF == -1) /* gcc 2.95.3 has bug in '!=' operator for negative constants */
- #error "hex.c requires EOF == -1"
- #endif
-
-diff -ur --new-file binutils-2.21.51.0.7/libiberty/safe-ctype.c binutils-2.21.51.0.7-mint/libiberty/safe-ctype.c
---- binutils-2.21.51.0.7/libiberty/safe-ctype.c 2005-06-22 20:53:36.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/libiberty/safe-ctype.c 2011-04-08 10:07:28.000000000 +0000
-@@ -119,7 +119,7 @@
- #include <safe-ctype.h>
- #include <stdio.h> /* for EOF */
-
--#if EOF != -1
-+#if !(EOF == -1) /* gcc 2.95.3 has bug in '!=' operator for negative constants */
- #error "<safe-ctype.h> requires EOF == -1"
- #endif
-
---- binutils-2.21.51.0.7/ld/lexsup.c 2011-04-08 15:39:47.000000000 +0000
-+++ binutils-2.21.51.0.7-mint/ld/lexsup.c 2011-04-08 15:39:25.000000000 +0000
-@@ -57,6 +57,9 @@
- #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
- #endif
-
-+/* Report plugin symbols. */
-+bfd_boolean report_plugin_symbols;
-+
- static void set_default_dirlist (char *);
- static void set_section_start (char *, char *);
- static void set_segment_start (const char *, char *);
---- binutils-2.22/ld/plugin.c 2011-11-21 09:29:39.000000000 +0000
-+++ binutils-2.22-mint/ld/plugin.c 2011-12-07 21:24:05.000000000 +0000
-@@ -36,9 +36,6 @@
- #include <windows.h>
- #endif
-
--/* Report plugin symbols. */
--bfd_boolean report_plugin_symbols;
--
- /* The suffix to append to the name of the real (claimed) object file
- when generating a dummy BFD to hold the IR symbols sent from the
- plugin. For cosmetic use only; appears in maps, crefs etc. */
---- binutils-2.22/libiberty/configure 2011-12-08 00:17:02.000000000 +0000
-+++ binutils-2.22-mint/libiberty/configure 2011-12-08 00:17:39.000000000 +0000
-@@ -4888,6 +4888,8 @@
- i[34567]86-*-* | x86_64-*-*)
- PICFLAG=-fpic
- ;;
-+ *-*-mint*)
-+ ;;
- m68k-*-*)
- PICFLAG=-fpic
- ;;