From a5123c5f6cd7685ac9f778b0b265dcd54516e185 Mon Sep 17 00:00:00 2001 From: Beat Gaetzi Date: Sat, 24 Dec 2011 14:20:41 +0000 Subject: [PATCH] - Backport changes from binutils-cvs needed to support 32- and 64-bit powerpc PR: ports/163041 Submitted by: andreast@ Approved by: maintainer timeouet (3 weeks) --- devel/binutils/files/patch-bfd__config.bfd | 26 ++++++++++++++ devel/binutils/files/patch-bfd__configure | 18 ++++++++++ devel/binutils/files/patch-bfd__elf32-ppc.c | 36 +++++++++++++++++++ devel/binutils/files/patch-bfd__elf64-ppc.c | 25 +++++++++++++ devel/binutils/files/patch-bfd__targets.c | 34 ++++++++++++++++++ .../files/patch-gas__config__tc-ppc.c | 13 +++++++ devel/binutils/files/patch-ld__Makefile.in | 29 +++++++++++++++ devel/binutils/files/patch-ld__configure.tgt | 22 ++++++++++++ .../patch-ld__emulparams__elf32ppc_fbsd.sh | 8 +++++ .../patch-ld__emulparams__elf64ppc_fbsd.sh | 9 +++++ .../files/patch-ld__emultempl__ppc64elf.em | 11 ++++++ 11 files changed, 231 insertions(+) create mode 100644 devel/binutils/files/patch-bfd__config.bfd create mode 100644 devel/binutils/files/patch-bfd__configure create mode 100644 devel/binutils/files/patch-bfd__elf32-ppc.c create mode 100644 devel/binutils/files/patch-bfd__elf64-ppc.c create mode 100644 devel/binutils/files/patch-bfd__targets.c create mode 100644 devel/binutils/files/patch-gas__config__tc-ppc.c create mode 100644 devel/binutils/files/patch-ld__Makefile.in create mode 100644 devel/binutils/files/patch-ld__configure.tgt create mode 100644 devel/binutils/files/patch-ld__emulparams__elf32ppc_fbsd.sh create mode 100644 devel/binutils/files/patch-ld__emulparams__elf64ppc_fbsd.sh create mode 100644 devel/binutils/files/patch-ld__emultempl__ppc64elf.em diff --git a/devel/binutils/files/patch-bfd__config.bfd b/devel/binutils/files/patch-bfd__config.bfd new file mode 100644 index 000000000000..d5c25bcf6c39 --- /dev/null +++ b/devel/binutils/files/patch-bfd__config.bfd @@ -0,0 +1,26 @@ +--- ./bfd/config.bfd.orig 2011-07-29 00:35:13.000000000 +0200 ++++ ./bfd/config.bfd 2011-12-21 09:44:40.000000000 +0100 +@@ -1128,6 +1128,11 @@ + targ_selvecs=rs6000coff_vec + want64=true + ;; ++ powerpc64-*-freebsd*) ++ targ_defvec=bfd_elf64_powerpc_freebsd_vec ++ targ_selvecs="bfd_elf64_powerpc_vec bfd_elf32_powerpc_vec bfd_elf32_powerpc_freebsd_vec bfd_elf32_powerpcle_vec rs6000coff_vec rs6000coff64_vec aix5coff64_vec" ++ want64=true ++ ;; + powerpc64-*-elf* | powerpc-*-elf64* | powerpc64-*-linux* | \ + powerpc64-*-*bsd*) + targ_defvec=bfd_elf64_powerpc_vec +@@ -1140,6 +1145,11 @@ + want64=true + ;; + #endif ++ powerpc-*-*freebsd*) ++ targ_defvec=bfd_elf32_powerpc_freebsd_vec ++ targ_selvecs="rs6000coff_vec bfd_elf32_powerpc_vec bfd_elf32_powerpcle_vec ppcboot_vec" ++ targ64_selvecs="bfd_elf64_powerpc_vec bfd_elf64_powerpcle_vec bfd_elf64_powerpc_freebsd_vec" ++ ;; + powerpc-*-*bsd* | powerpc-*-elf* | powerpc-*-sysv4* | powerpc-*-eabi* | \ + powerpc-*-solaris2* | powerpc-*-linux-* | powerpc-*-rtems* | \ + powerpc-*-chorus*) diff --git a/devel/binutils/files/patch-bfd__configure b/devel/binutils/files/patch-bfd__configure new file mode 100644 index 000000000000..21d187067b66 --- /dev/null +++ b/devel/binutils/files/patch-bfd__configure @@ -0,0 +1,18 @@ +--- ./bfd/configure.orig 2011-11-21 12:55:48.000000000 +0100 ++++ ./bfd/configure 2011-12-21 09:44:40.000000000 +0100 +@@ -15262,6 +15262,7 @@ + bfd_elf32_pjl_vec) tb="$tb elf32-pj.lo elf32.lo $elf";; + bfd_elf32_powerpc_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;; + bfd_elf32_powerpcle_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;; ++ bfd_elf32_powerpc_freebsd_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;; + bfd_elf32_powerpc_vxworks_vec) tb="$tb elf32-ppc.lo elf-vxworks.lo elf32.lo $elf" ;; + bfd_elf32_rx_le_vec) tb="$tb elf32-rx.lo elf32.lo $elf" ;; + bfd_elf32_rx_be_vec) tb="$tb elf32-rx.lo elf32.lo $elf" ;; +@@ -15327,6 +15328,7 @@ + bfd_elf64_mmix_vec) tb="$tb elf64-mmix.lo elf64.lo $elf" target_size=64 ;; + bfd_elf64_powerpc_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf"; target_size=64 ;; + bfd_elf64_powerpcle_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;; ++ bfd_elf64_powerpc_freebsd_vec) tb="$tb elf64-ppc.lo elf64-gen.lo elf64.lo $elf" target_size=64 ;; + bfd_elf64_s390_vec) tb="$tb elf64-s390.lo elf64.lo $elf"; target_size=64 ;; + bfd_elf64_sh64_vec) tb="$tb elf64-sh64.lo elf64.lo $elf" target_size=64 ;; + bfd_elf64_sh64l_vec) tb="$tb elf64-sh64.lo elf64.lo $elf" target_size=64 ;; diff --git a/devel/binutils/files/patch-bfd__elf32-ppc.c b/devel/binutils/files/patch-bfd__elf32-ppc.c new file mode 100644 index 000000000000..f48beae451cb --- /dev/null +++ b/devel/binutils/files/patch-bfd__elf32-ppc.c @@ -0,0 +1,36 @@ +--- ./bfd/elf32-ppc.c.orig 2011-11-21 10:29:21.000000000 +0100 ++++ ./bfd/elf32-ppc.c 2011-12-21 09:44:40.000000000 +0100 +@@ -9127,6 +9127,24 @@ + + #include "elf32-target.h" + ++/* FreeBSD Target */ ++ ++#undef TARGET_LITTLE_SYM ++#undef TARGET_LITTLE_NAME ++ ++#undef TARGET_BIG_SYM ++#define TARGET_BIG_SYM bfd_elf32_powerpc_freebsd_vec ++#undef TARGET_BIG_NAME ++#define TARGET_BIG_NAME "elf32-powerpc-freebsd" ++ ++#undef ELF_OSABI ++#define ELF_OSABI ELFOSABI_FREEBSD ++ ++#undef elf32_bed ++#define elf32_bed elf32_powerpc_fbsd_bed ++ ++#include "elf32-target.h" ++ + /* VxWorks Target */ + + #undef TARGET_LITTLE_SYM +@@ -9137,6 +9155,8 @@ + #undef TARGET_BIG_NAME + #define TARGET_BIG_NAME "elf32-powerpc-vxworks" + ++#undef ELF_OSABI ++ + /* VxWorks uses the elf default section flags for .plt. */ + static const struct bfd_elf_special_section * + ppc_elf_vxworks_get_sec_type_attr (bfd *abfd ATTRIBUTE_UNUSED, asection *sec) diff --git a/devel/binutils/files/patch-bfd__elf64-ppc.c b/devel/binutils/files/patch-bfd__elf64-ppc.c new file mode 100644 index 000000000000..f199ae44f5b0 --- /dev/null +++ b/devel/binutils/files/patch-bfd__elf64-ppc.c @@ -0,0 +1,25 @@ +--- ./bfd/elf64-ppc.c.orig 2011-11-21 10:29:24.000000000 +0100 ++++ ./bfd/elf64-ppc.c 2011-12-21 09:44:40.000000000 +0100 +@@ -13897,3 +13897,22 @@ + } + + #include "elf64-target.h" ++ ++/* FreeBSD support */ ++ ++#undef TARGET_LITTLE_SYM ++#undef TARGET_LITTLE_NAME ++ ++#undef TARGET_BIG_SYM ++#define TARGET_BIG_SYM bfd_elf64_powerpc_freebsd_vec ++#undef TARGET_BIG_NAME ++#define TARGET_BIG_NAME "elf64-powerpc-freebsd" ++ ++#undef ELF_OSABI ++#define ELF_OSABI ELFOSABI_FREEBSD ++ ++#undef elf64_bed ++#define elf64_bed elf64_powerpc_fbsd_bed ++ ++#include "elf64-target.h" ++ diff --git a/devel/binutils/files/patch-bfd__targets.c b/devel/binutils/files/patch-bfd__targets.c new file mode 100644 index 000000000000..0a08e9a2fe30 --- /dev/null +++ b/devel/binutils/files/patch-bfd__targets.c @@ -0,0 +1,34 @@ +--- ./bfd/targets.c.orig 2011-08-17 02:39:38.000000000 +0200 ++++ ./bfd/targets.c 2011-12-21 09:44:40.000000000 +0100 +@@ -667,6 +667,7 @@ + extern const bfd_target bfd_elf32_pjl_vec; + extern const bfd_target bfd_elf32_powerpc_vec; + extern const bfd_target bfd_elf32_powerpcle_vec; ++extern const bfd_target bfd_elf32_powerpc_freebsd_vec; + extern const bfd_target bfd_elf32_powerpc_vxworks_vec; + extern const bfd_target bfd_elf32_rx_le_vec; + extern const bfd_target bfd_elf32_rx_be_vec; +@@ -729,6 +730,7 @@ + extern const bfd_target bfd_elf64_mmix_vec; + extern const bfd_target bfd_elf64_powerpc_vec; + extern const bfd_target bfd_elf64_powerpcle_vec; ++extern const bfd_target bfd_elf64_powerpc_freebsd_vec; + extern const bfd_target bfd_elf64_s390_vec; + extern const bfd_target bfd_elf64_sh64_vec; + extern const bfd_target bfd_elf64_sh64l_vec; +@@ -1033,6 +1035,7 @@ + &bfd_elf32_powerpc_vec, + &bfd_elf32_powerpc_vxworks_vec, + &bfd_elf32_powerpcle_vec, ++ &bfd_elf32_powerpc_freebsd_vec, + &bfd_elf32_rx_be_vec, + &bfd_elf32_rx_be_ns_vec, + &bfd_elf32_rx_le_vec, +@@ -1095,6 +1098,7 @@ + &bfd_elf64_mmix_vec, + &bfd_elf64_powerpc_vec, + &bfd_elf64_powerpcle_vec, ++ &bfd_elf64_powerpc_freebsd_vec, + &bfd_elf64_s390_vec, + &bfd_elf64_sh64_vec, + &bfd_elf64_sh64l_vec, diff --git a/devel/binutils/files/patch-gas__config__tc-ppc.c b/devel/binutils/files/patch-gas__config__tc-ppc.c new file mode 100644 index 000000000000..12f52afcbb4b --- /dev/null +++ b/devel/binutils/files/patch-gas__config__tc-ppc.c @@ -0,0 +1,13 @@ +--- ./gas/config/tc-ppc.c.orig 2011-06-14 11:03:51.000000000 +0200 ++++ ./gas/config/tc-ppc.c 2011-12-21 09:44:40.000000000 +0100 +@@ -1370,7 +1370,9 @@ + #endif + #endif + #ifdef OBJ_ELF +-# ifdef TE_VXWORKS ++# ifdef TE_FreeBSD ++ return (ppc_obj64 ? "elf64-powerpc-freebsd" : "elf32-powerpc-freebsd"); ++# elif defined (TE_VXWORKS) + return "elf32-powerpc-vxworks"; + # else + return (target_big_endian diff --git a/devel/binutils/files/patch-ld__Makefile.in b/devel/binutils/files/patch-ld__Makefile.in new file mode 100644 index 000000000000..93f7fee27f40 --- /dev/null +++ b/devel/binutils/files/patch-ld__Makefile.in @@ -0,0 +1,29 @@ +--- ./ld/Makefile.in.orig 2011-07-22 22:22:37.000000000 +0200 ++++ ./ld/Makefile.in 2011-12-21 09:44:40.000000000 +0100 +@@ -783,6 +783,7 @@ + eelf64ltsmip_fbsd.c \ + eelf64mmix.c \ + eelf64ppc.c \ ++ eelf64ppc_fbsd.c \ + eelf64tilegx.c \ + eelf_l1om.c \ + eelf_l1om_fbsd.c \ +@@ -1180,6 +1181,7 @@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64ltsmip_fbsd.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64mmix.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64ppc.Po@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64ppc_fbsd.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf64tilegx.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386.Po@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eelf_i386_be.Po@am__quote@ +@@ -3425,6 +3427,10 @@ + ldemul-list.h \ + $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} elf64ppc "$(tdir_elf64ppc)" ++eelf64ppc_fbsd.c: $(srcdir)/emulparams/elf64ppc_fbsd.sh \ ++ $(srcdir)/emultempl/ppc64elf.em ldemul-list.h \ ++ $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} ++ ${GENSCRIPTS} elf64ppc_fbsd "$(tdir_elf64ppc_fbsd)" + eelf64tilegx.c: $(srcdir)/emulparams/elf64tilegx.sh \ + $(srcdir)/emultempl/elf32.em $(srcdir)/emultempl/needrelax.em \ + $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} diff --git a/devel/binutils/files/patch-ld__configure.tgt b/devel/binutils/files/patch-ld__configure.tgt new file mode 100644 index 000000000000..b3d1c2bdbc12 --- /dev/null +++ b/devel/binutils/files/patch-ld__configure.tgt @@ -0,0 +1,22 @@ +--- ./ld/configure.tgt.orig 2011-11-21 10:29:37.000000000 +0100 ++++ ./ld/configure.tgt 2011-12-21 09:44:40.000000000 +0100 +@@ -453,10 +453,17 @@ + pj*-*-*) targ_emul=pjelf + ;; + powerpc-*-freebsd* | powerpc-*-kfreebsd*-gnu) +- targ_emul=elf32ppc_fbsd; +- targ_extra_emuls="elf32ppc elf32ppcsim"; ++ targ_emul=elf32ppc_fbsd ++ targ_extra_emuls="elf32ppc elf32ppcsim" + targ_extra_libpath=elf32ppc; + tdir_elf32ppcsim=`echo ${targ_alias} | sed -e 's/ppc/ppcsim/'` ;; ++powerpc64-*-freebsd*) ++ targ_emul=elf64ppc_fbsd ++ targ_extra_emuls="elf64ppc elf32ppc_fbsd elf32ppc" ++ targ_extra_libpath="elf32ppc_fbsd elf32ppc" ++ tdir_elf32ppc=`echo "${targ_alias}" | sed -e 's/64//'` ++ tdir_elf32ppc_fbsd=$tdir_elf32ppc ++ ;; + powerpc*-*-linux*) case "${targ}" in + *64*) targ_emul=elf64ppc + targ_extra_emuls="elf32ppclinux elf32ppc elf32ppcsim" diff --git a/devel/binutils/files/patch-ld__emulparams__elf32ppc_fbsd.sh b/devel/binutils/files/patch-ld__emulparams__elf32ppc_fbsd.sh new file mode 100644 index 000000000000..d9d7dc2e91ef --- /dev/null +++ b/devel/binutils/files/patch-ld__emulparams__elf32ppc_fbsd.sh @@ -0,0 +1,8 @@ +--- ./ld/emulparams/elf32ppc_fbsd.sh.orig 2002-02-18 10:38:01.000000000 +0100 ++++ ./ld/emulparams/elf32ppc_fbsd.sh 2011-12-21 09:44:40.000000000 +0100 +@@ -1,2 +1,5 @@ + . ${srcdir}/emulparams/elf32ppc.sh + . ${srcdir}/emulparams/elf_fbsd.sh ++ ++OUTPUT_FORMAT="elf32-powerpc-freebsd" ++ diff --git a/devel/binutils/files/patch-ld__emulparams__elf64ppc_fbsd.sh b/devel/binutils/files/patch-ld__emulparams__elf64ppc_fbsd.sh new file mode 100644 index 000000000000..db0f24901157 --- /dev/null +++ b/devel/binutils/files/patch-ld__emulparams__elf64ppc_fbsd.sh @@ -0,0 +1,9 @@ +--- ./ld/emulparams/elf64ppc_fbsd.sh.orig 2011-12-21 09:44:40.000000000 +0100 ++++ ./ld/emulparams/elf64ppc_fbsd.sh 2011-12-21 09:44:40.000000000 +0100 +@@ -0,0 +1,6 @@ ++. ${srcdir}/emulparams/elf64ppc.sh ++. ${srcdir}/emulparams/elf_fbsd.sh ++ ++OUTPUT_FORMAT="elf64-powerpc-freebsd" ++DEFAULT_PLT_STATIC_CHAIN=1 ++ diff --git a/devel/binutils/files/patch-ld__emultempl__ppc64elf.em b/devel/binutils/files/patch-ld__emultempl__ppc64elf.em new file mode 100644 index 000000000000..f936d9419168 --- /dev/null +++ b/devel/binutils/files/patch-ld__emultempl__ppc64elf.em @@ -0,0 +1,11 @@ +--- ./ld/emultempl/ppc64elf.em.orig 2011-11-21 10:29:39.000000000 +0100 ++++ ./ld/emultempl/ppc64elf.em 2011-12-21 09:44:40.000000000 +0100 +@@ -62,7 +62,7 @@ + static int no_toc_sort = 0; + + /* Set if PLT call stubs should load r11. */ +-static int plt_static_chain = 0; ++static int plt_static_chain = ${DEFAULT_PLT_STATIC_CHAIN-0}; + + /* Whether to emit symbols for stubs. */ + static int emit_stub_syms = -1;