Index: head/devel/binutils/Makefile =================================================================== --- head/devel/binutils/Makefile (revision 461069) +++ head/devel/binutils/Makefile (revision 461070) @@ -1,154 +1,156 @@ # Created by: Martin Matuska # $FreeBSD$ PORTNAME= binutils PORTVERSION= 2.30 -PORTREVISION= 1 +PORTREVISION= 2 PORTEPOCH?= 1 CATEGORIES?= devel MASTER_SITES= SOURCEWARE/binutils/releases MAINTAINER?= bapt@FreeBSD.org COMMENT?= GNU binary tools LICENSE= GPLv3 LGPL3 LICENSE_COMB= multi + +EXTRA_PATCHES= ${FILESDIR}/fix-aarch64.diff:-p1 .if !defined(CROSS_TOOLCHAIN) BUILD_DEPENDS= ${LOCALBASE}/lib/libgmp.so:math/gmp \ ${LOCALBASE}/lib/libmpfr.so:math/mpfr CONFLICTS= libbfd-[0-9]* .endif #TEST_DEPENDS+= runtest:misc/dejagnu TEST_TARGET= check OPTIONS_DEFINE= NLS RELRO STATIC STATIC_PREVENTS= NLS RELRO_DESC= enable -z relro in ELF linker by default LICENSE_FILE_GPLv3= ${WRKSRC}/COPYING3 LICENSE_FILE_LGPL3= ${WRKSRC}/COPYING3.LIB USES= bison cpe gmake libtool tar:bzip2 compiler:env CPE_VENDOR= gnu GNU_CONFIGURE= yes .if defined(PKGNAMEPREFIX) .if ${PKGNAMEPREFIX:M*-*-} BUTARGET?= ${PKGNAMEPREFIX}${OPSYS:tl}${OSREL} .else BUTARGET?= ${PKGNAMEPREFIX}unknown-${OPSYS:tl}${OSREL} .endif PLIST_SUB= BUTARGET=${BUTARGET} OPTIONS_EXCLUDE= NLS INFO_PATH= ${PKGNAMEPREFIX:S/-$//}/info CONFIGURE_ARGS+= --disable-shared \ --target=${BUTARGET} .else BUREMOVE= coffdump \ dlltool \ dllwrap \ nlmconv \ srconv \ sysdump \ windmc \ windres CFLAGS+= -I${LOCALBASE}/include LDFLAGS+= -L${LOCALBASE}/lib CONFIGURE_ARGS+= --with-system-zlib \ --with-gmp=${LOCALBASE} \ --with-mpfr=${LOCALBASE} \ --enable-targets=all INFO= as \ binutils \ gprof \ bfd \ ld .endif CONFIGURE_ARGS+= --disable-werror \ --enable-deterministic-archives \ --with-sysroot=/ \ --enable-x86-relax-relocations=no RELRO_CONFIGURE_ON= --enable-relro RELRO_CONFIGURE_OFF= --enable-relro=no MAKE_ENV+= ac_cv_func_sbrk=0 MAKE_ARGS+= LIBDL="" OPTIONS_SUB= yes NLS_USES= gettext NLS_CONFIGURE_ENABLE= nls STATIC_LDFLAGS+= -all-static .include # Actual earliest version may differ slightly .if ${ARCH} != i386 && ${ARCH} != mips && ${ARCH} != mips64 && ${ARCH} != powerpc && ${ARCH} != powerpc64 && !defined(PKGNAMEPREFIX) && (${COMPILER_TYPE} == clang && ${COMPILER_VERSION} >= 34 || ${COMPILER_TYPE} == gcc) CONFIGURE_ARGS+= --enable-gold --enable-plugins PLIST_SUB+= GOLD="" .else PLIST_SUB+= GOLD="@comment " .endif .if ${ARCH} == "amd64" CONFIGURE_TARGET= x86_64-portbld-freebsd${OSREL} .else CONFIGURE_TARGET= ${ARCH}-portbld-freebsd${OSREL} .endif post-patch: ${REINPLACE_CMD} -e "s/-ldl//g" ${WRKSRC}/gold/testsuite/Makefile.in post-install: .if !defined(PKGNAMEPREFIX) ${INSTALL_DATA} ${WRKSRC}/include/plugin-api.h ${STAGEDIR}${PREFIX}/include/ @${FIND} -ds ${STAGEDIR}${PREFIX}/${CONFIGURE_TARGET} ! -type d | \ ${SED} -e 's,^${STAGEDIR}${PREFIX}/,,' >> ${TMPPLIST} ${RM} ${STAGEDIR}${PREFIX}/include/ansidecl.h ${REINPLACE_CMD} '/#include "ansidecl.h"/d' ${STAGEDIR}${PREFIX}/include/bfd.h .else .if ${PKGNAMEPREFIX:S/-$//} != ${BUTARGET} ${RM} -r ${STAGEDIR}${PREFIX}/${PKGNAMEPREFIX:S/-$//} .endif @if [ -d ${STAGEDIR}${PREFIX}/${INFO_PATH} ] ; then rm -rf ${STAGEDIR}${PREFIX}/${INFO_PATH}; fi ${LN} -fs ../../bin/${BUTARGET}-size ${STAGEDIR}${PREFIX}/${BUTARGET}/bin/size .if defined(CROSS_TOOLCHAIN) ${MV} ${STAGEDIR}/usr/bin/as ${STAGEDIR}/usr/bin/${BUTARGET}-as ${LN} -fs /usr/bin/${BUTARGET}-as ${STAGEDIR}/usr/bin/as ${MV} ${STAGEDIR}/usr/bin/ld ${STAGEDIR}/usr/bin/${BUTARGET}-ld ${LN} -fs /usr/bin/${BUTARGET}-ld ${STAGEDIR}/usr/bin/ld ${MV} ${STAGEDIR}/usr/bin/ld.bfd ${STAGEDIR}/usr/bin/${BUTARGET}-ld.bfd ${LN} -fs /usr/bin/${BUTARGET}-ld.bfd ${STAGEDIR}/usr/bin/ld.bfd ${MV} ${STAGEDIR}/usr/bin/objcopy ${STAGEDIR}/usr/bin/${BUTARGET}-objcopy ${LN} -fs /usr/bin/${BUTARGET}-objcopy ${STAGEDIR}/usr/bin/objcopy ${MV} ${STAGEDIR}/usr/bin/objdump ${STAGEDIR}/usr/bin/${BUTARGET}-objdump ${LN} -fs /usr/bin/${BUTARGET}-objdump ${STAGEDIR}/usr/bin/objdump ${MV} ${STAGEDIR}/${MANDIR}1/as.1 ${STAGEDIR}/${MANDIR}1/${BUTARGET}-as.1 ${GZIP_CMD} ${STAGEDIR}/${MANDIR}1/${BUTARGET}-as.1 ${LN} -fs ${BUTARGET}-as.1.gz ${STAGEDIR}/${MANDIR}1/as.1.gz ${MV} ${STAGEDIR}/${MANDIR}1/ld.1 ${STAGEDIR}/${MANDIR}1/${BUTARGET}-ld.1 ${GZIP_CMD} ${STAGEDIR}/${MANDIR}1/${BUTARGET}-ld.1 ${LN} -fs ${BUTARGET}-ld.1.gz ${STAGEDIR}/${MANDIR}1/ld.1.gz ${MV} ${STAGEDIR}/${MANDIR}1/objcopy.1 ${STAGEDIR}/${MANDIR}1/${BUTARGET}-objcopy.1 ${GZIP_CMD} ${STAGEDIR}/${MANDIR}1/${BUTARGET}-objcopy.1 ${LN} -fs ${BUTARGET}-objcopy.1.gz ${STAGEDIR}/${MANDIR}1/objcopy.1.gz ${MV} ${STAGEDIR}/${MANDIR}1/objdump.1 ${STAGEDIR}/${MANDIR}1/${BUTARGET}-objdump.1 ${GZIP_CMD} ${STAGEDIR}/${MANDIR}1/${BUTARGET}-objdump.1 ${LN} -fs ${BUTARGET}-objdump.1.gz ${STAGEDIR}/${MANDIR}1/objdump.1.gz .endif .endif .for tool in ${BUREMOVE} @${RM} ${STAGEDIR}${PREFIX}/bin/${BUTARGET}-${tool} \ ${STAGEDIR}${PREFIX}/man/man1/${BUTARGET}-${tool}.1 \ ${STAGEDIR}${PREFIX}/${BUTARGET}/bin/${tool} .endfor .if defined(BUREMOVE) && ${BUREMOVE:Mld} @${RM} -r ${STAGEDIR}${PREFIX}/${BUTARGET}/lib/ldscripts .endif .include Index: head/devel/binutils/files/fix-aarch64.diff =================================================================== --- head/devel/binutils/files/fix-aarch64.diff (nonexistent) +++ head/devel/binutils/files/fix-aarch64.diff (revision 461070) @@ -0,0 +1,174 @@ +From b01452b1d44a586f4ecf5cf02ffc0643e4962324 Mon Sep 17 00:00:00 2001 +From: Renlin Li +Date: Sat, 3 Feb 2018 13:18:17 +0000 +Subject: [PATCH 1/1] [PR22764][LD][AARCH64]Allow R_AARCH64_ABS16 and + R_AARCH64_ABS32 against absolution symbol or undefine symbol in shared + object. + +backport from mainline + +bfd/ + +2018-02-05 Renlin Li + + PR ld/22764 + * elfnn-aarch64.c (elfNN_aarch64_check_relocs): Relax the + R_AARCH64_ABS32 and R_AARCH64_ABS16 for absolute symbol. Apply the + check for writeable section as well. + +ld/ + +2018-02-05 Renlin Li + + PR ld/22764 + * testsuite/ld-aarch64/emit-relocs-258.s: Define symbol as an address. + * testsuite/ld-aarch64/emit-relocs-259.s: Likewise. + * testsuite/ld-aarch64/aarch64-elf.exp: Run new test. + * testsuite/ld-aarch64/pr22764.s: New. + * testsuite/ld-aarch64/pr22764.d: New. +--- + bfd/ChangeLog | 7 +++++++ + bfd/elfnn-aarch64.c | 15 ++++++++++++--- + ld/ChangeLog | 8 ++++++++ + ld/testsuite/ld-aarch64/aarch64-elf.exp | 1 + + ld/testsuite/ld-aarch64/emit-relocs-258.s | 3 ++- + ld/testsuite/ld-aarch64/emit-relocs-259.s | 3 ++- + ld/testsuite/ld-aarch64/pr22764.d | 18 ++++++++++++++++++ + ld/testsuite/ld-aarch64/pr22764.s | 6 ++++++ + 8 files changed, 56 insertions(+), 5 deletions(-) + create mode 100644 ld/testsuite/ld-aarch64/pr22764.d + create mode 100644 ld/testsuite/ld-aarch64/pr22764.s + +diff --git a/bfd/ChangeLog b/bfd/ChangeLog +index 92e26a8..9fe447a 100644 +--- a/bfd/ChangeLog ++++ b/bfd/ChangeLog +@@ -1,3 +1,10 @@ ++2018-02-05 Renlin Li ++ ++ PR ld/22764 ++ * elfnn-aarch64.c (elfNN_aarch64_check_relocs): Relax the ++ R_AARCH64_ABS32 and R_AARCH64_ABS16 for absolute symbol. Apply the ++ check for writeable section as well. ++ + 2018-01-27 Nick Clifton + + Back to development. +diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c +index d5711e0..9731882 100644 +--- a/bfd/elfnn-aarch64.c ++++ b/bfd/elfnn-aarch64.c +@@ -7074,10 +7074,19 @@ elfNN_aarch64_check_relocs (bfd *abfd, struct bfd_link_info *info, + #if ARCH_SIZE == 64 + case BFD_RELOC_AARCH64_32: + #endif +- if (bfd_link_pic (info) +- && (sec->flags & SEC_ALLOC) != 0 +- && (sec->flags & SEC_READONLY) != 0) ++ if (bfd_link_pic (info) && (sec->flags & SEC_ALLOC) != 0) + { ++ if (h != NULL ++ /* This is an absolute symbol. It represents a value instead ++ of an address. */ ++ && ((h->root.type == bfd_link_hash_defined ++ && bfd_is_abs_section (h->root.u.def.section)) ++ /* This is an undefined symbol. */ ++ || h->root.type == bfd_link_hash_undefined)) ++ break; ++ ++ /* For local symbols, defined global symbols in a non-ABS section, ++ it is assumed that the value is an address. */ + int howto_index = bfd_r_type - BFD_RELOC_AARCH64_RELOC_START; + _bfd_error_handler + /* xgettext:c-format */ +diff --git a/ld/ChangeLog b/ld/ChangeLog +index ddc1d88..e871cef 100644 +--- a/ld/ChangeLog ++++ b/ld/ChangeLog +@@ -1,3 +1,11 @@ ++2018-02-05 Renlin Li ++ ++ PR ld/22764 ++ * testsuite/ld-aarch64/emit-relocs-258.s: Define symbol as an address. ++ * testsuite/ld-aarch64/emit-relocs-259.s: Likewise. ++ * testsuite/ld-aarch64/pr22764.s: New. ++ * testsuite/ld-aarch64/pr22764.d: New. ++ + 2018-02-05 Nick Clifton + + * po/pt_BR.po: Updated Brazilian Portuguese translation. +diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp +index f310893..d766f37 100644 +--- a/ld/testsuite/ld-aarch64/aarch64-elf.exp ++++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp +@@ -275,6 +275,7 @@ run_dump_test "pr17415" + run_dump_test_lp64 "tprel_g2_overflow" + run_dump_test "tprel_add_lo12_overflow" + run_dump_test "protected-data" ++run_dump_test_lp64 "pr22764" + + # ifunc tests + run_dump_test "ifunc-1" +diff --git a/ld/testsuite/ld-aarch64/emit-relocs-258.s b/ld/testsuite/ld-aarch64/emit-relocs-258.s +index f724776..87bb657 100644 +--- a/ld/testsuite/ld-aarch64/emit-relocs-258.s ++++ b/ld/testsuite/ld-aarch64/emit-relocs-258.s +@@ -1,5 +1,6 @@ ++.global dummy + .text +- ++dummy: + ldr x0, .L1 + + .L1: +diff --git a/ld/testsuite/ld-aarch64/emit-relocs-259.s b/ld/testsuite/ld-aarch64/emit-relocs-259.s +index 7e1ba3c..0977c9d 100644 +--- a/ld/testsuite/ld-aarch64/emit-relocs-259.s ++++ b/ld/testsuite/ld-aarch64/emit-relocs-259.s +@@ -1,5 +1,6 @@ ++.global dummy + .text +- ++dummy: + ldr x0, .L1 + + .L1: +diff --git a/ld/testsuite/ld-aarch64/pr22764.d b/ld/testsuite/ld-aarch64/pr22764.d +new file mode 100644 +index 0000000..997519f +--- /dev/null ++++ b/ld/testsuite/ld-aarch64/pr22764.d +@@ -0,0 +1,18 @@ ++#source: pr22764.s ++#ld: -shared -T relocs.ld -defsym sym_abs1=0x1 -defsym sym_abs2=0x2 -defsym sym_abs3=0x3 -e0 --emit-relocs ++#notarget: aarch64_be-*-* ++#objdump: -dr ++#... ++ ++Disassembly of section \.text: ++ ++0000000000010000 \<\.text\>: ++ 10000: d503201f nop ++ ... ++ 10004: R_AARCH64_ABS64 sym_abs1 ++ 1000c: 00000002 \.word 0x00000002 ++ 1000c: R_AARCH64_ABS32 sym_abs2 ++ 10010: 0003 \.short 0x0003 ++ 10010: R_AARCH64_ABS16 sym_abs3 ++ 10012: 0000 \.short 0x0000 ++ 10014: d503201f nop +diff --git a/ld/testsuite/ld-aarch64/pr22764.s b/ld/testsuite/ld-aarch64/pr22764.s +new file mode 100644 +index 0000000..25e36b4 +--- /dev/null ++++ b/ld/testsuite/ld-aarch64/pr22764.s +@@ -0,0 +1,6 @@ ++ .text ++ nop ++ .xword sym_abs1 ++ .word sym_abs2 ++ .short sym_abs3 ++ nop +-- +2.9.3 + Property changes on: head/devel/binutils/files/fix-aarch64.diff ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property