diff options
author | Fabian Groffen <grobian@gentoo.org> | 2020-06-13 12:58:21 +0200 |
---|---|---|
committer | Fabian Groffen <grobian@gentoo.org> | 2020-06-13 12:58:21 +0200 |
commit | 09b9a029c60fdc9d7e75c22761507204609e38c8 (patch) | |
tree | 63bcde6d134905cc640975f3692cc53ef629aef8 /sys-devel | |
parent | sys-devel/binutils-2.34-r1: sync with gx86, fixed for Solaris (diff) | |
download | prefix-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/Manifest | 4 | ||||
-rw-r--r-- | sys-devel/binutils/binutils-2.31.1-r1.ebuild | 449 | ||||
-rw-r--r-- | sys-devel/binutils/binutils-2.32-r1.ebuild | 449 | ||||
-rw-r--r-- | sys-devel/binutils/files/binutils-2.19.50.0.1-mint.patch | 66 | ||||
-rw-r--r-- | sys-devel/binutils/files/binutils-2.22-mint.patch | 2656 |
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 - ;; |