From 5c67d4bb595ec330107c1768dda0470459ccfc04 Mon Sep 17 00:00:00 2001
From: Alan Modra <amodra@gmail.com>
Date: Mon, 27 Aug 2001 10:45:55 +0000
Subject: [PATCH] 	* Makefile.am (ALL_EMULATIONS): Add eelf64ppc.o and
 eelf64lppc.o. 	(eelf64ppc.c, eelf64lppc.c): Add make targets. 	Run "make
 dep-am" 	* Makefile.in: Regenerate. 	* configure.tgt: Add powerpc64
 support.  Move pdp11, pjl, pj 	entries to correct alphabetical position. 
 * emulparams/elf64ppc.sh: New. 	* emulparams/elf64lppc.sh: New.

---
 ld/ChangeLog               | 12 ++++++++++++
 ld/Makefile.am             |  8 ++++++++
 ld/Makefile.in             |  8 ++++++++
 ld/configure.tgt           | 39 ++++++++++++++++++++++++++------------
 ld/emulparams/elf64lppc.sh |  3 +++
 ld/emulparams/elf64ppc.sh  | 28 +++++++++++++++++++++++++++
 6 files changed, 86 insertions(+), 12 deletions(-)
 create mode 100644 ld/emulparams/elf64lppc.sh
 create mode 100644 ld/emulparams/elf64ppc.sh

diff --git a/ld/ChangeLog b/ld/ChangeLog
index c59911efdf8..68a91a7bd46 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,15 @@
+2001-08-27  Linus Nordberg  <linus@swox.com>
+	    Alan Modra  <amodra@bigpond.net.au>
+
+	* Makefile.am (ALL_EMULATIONS): Add eelf64ppc.o and eelf64lppc.o.
+	(eelf64ppc.c, eelf64lppc.c): Add make targets.
+	Run "make dep-am"
+	* Makefile.in: Regenerate.
+	* configure.tgt: Add powerpc64 support.  Move pdp11, pjl, pj
+	entries to correct alphabetical position.
+	* emulparams/elf64ppc.sh: New.
+	* emulparams/elf64lppc.sh: New.
+
 2001-08-27  Nick Clifton  <nickc@cambridge.redhat.com>
 
 	* ldmain.c (main): Declare BSIZE as static.
diff --git a/ld/Makefile.am b/ld/Makefile.am
index fb0bfa8d8d7..9b04701fa79 100644
--- a/ld/Makefile.am
+++ b/ld/Makefile.am
@@ -159,6 +159,8 @@ ALL_EMULATIONS = \
 	eelf32ppc.o \
 	eelf32ppclinux.o \
 	eelf32ppcsim.o \
+	eelf64ppc.o \
+	eelf64lppc.o \
 	eelf_i386.o \
 	eelf_i386_be.o \
 	eelf_i386_chaos.o \
@@ -501,6 +503,12 @@ eelf32ppcsim.c: $(srcdir)/emulparams/elf32ppcsim.sh \
 eelf32ppclinux.c: $(srcdir)/emulparams/elf32ppclinux.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf32ppclinux "$(tdir_elf32ppclinux)"
+eelf64ppc.c: $(srcdir)/emulparams/elf64ppc.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} elf64ppc "$(tdir_elf64ppc)"
+eelf64lppc.c: $(srcdir)/emulparams/elf64lppc.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} elf64lppc "$(tdir_elf64lppc)"
 eelf32i370.c: $(srcdir)/emulparams/elf32i370.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfi370.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf32i370 "$(tdir_elf32i370)"
diff --git a/ld/Makefile.in b/ld/Makefile.in
index 6b50678e86b..024725a4872 100644
--- a/ld/Makefile.in
+++ b/ld/Makefile.in
@@ -267,6 +267,8 @@ ALL_EMULATIONS = \
 	eelf32ppc.o \
 	eelf32ppclinux.o \
 	eelf32ppcsim.o \
+	eelf64ppc.o \
+	eelf64lppc.o \
 	eelf_i386.o \
 	eelf_i386_be.o \
 	eelf_i386_chaos.o \
@@ -1215,6 +1217,12 @@ eelf32ppcsim.c: $(srcdir)/emulparams/elf32ppcsim.sh \
 eelf32ppclinux.c: $(srcdir)/emulparams/elf32ppclinux.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf32ppclinux "$(tdir_elf32ppclinux)"
+eelf64ppc.c: $(srcdir)/emulparams/elf64ppc.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} elf64ppc "$(tdir_elf64ppc)"
+eelf64lppc.c: $(srcdir)/emulparams/elf64lppc.sh \
+  $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
+	${GENSCRIPTS} elf64lppc "$(tdir_elf64lppc)"
 eelf32i370.c: $(srcdir)/emulparams/elf32i370.sh \
   $(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elfi370.sc ${GEN_DEPENDS}
 	${GENSCRIPTS} elf32i370 "$(tdir_elf32i370)"
diff --git a/ld/configure.tgt b/ld/configure.tgt
index 6922618d4a6..aa37e400e25 100644
--- a/ld/configure.tgt
+++ b/ld/configure.tgt
@@ -314,23 +314,38 @@ z8k-*-coff) 		targ_emul=z8002; targ_extra_emuls=z8001 ;;
 ns32k-pc532-mach* | ns32k-pc532-ux*)	targ_emul=pc532macha ;;
 ns32k-pc532-netbsd* | ns32k-pc532-lites*) targ_emul=ns32knbsd ;;
 openrisc-*-*)		targ_emul=elf32openrisc ;;
+pdp11-*-*)		targ_emul=pdp11 ;;
+pjl*-*-*)	        targ_emul=pjlelf ; targ_extra_emuls="elf_i386" ;;
+pj*-*-*)	        targ_emul=pjelf ;;
 powerpc-*-freebsd*)	targ_emul=elf32ppc;
 			targ_extra_emuls=elf32ppcsim;
 			targ_extra_libpath=elf32ppc;
 			tdir_elf32ppcsim=`echo ${targ_alias} | sed -e 's/ppc/ppcsim/'`
 			;;
-powerpc-*-linux-gnu*)	targ_emul=elf32ppclinux;
-			targ_extra_emuls="elf32ppc elf32ppcsim";
-			targ_extra_libpath=elf32ppc ;;
-pdp11-*-*)		targ_emul=pdp11 ;;
-pjl*-*-*)	        targ_emul=pjlelf ; targ_extra_emuls="elf_i386" ;;
-pj*-*-*)	        targ_emul=pjelf ;;
-powerpc-*-elf* | powerpc-*-eabi* | powerpc-*-sysv* \
-  | powerpc-*-netbsd* | powerpc-*-vxworks*)
-	targ_emul=elf32ppc targ_extra_emuls="elf32ppclinux elf32ppcsim";;
-powerpcle-*-elf* | powerpcle-*-eabi* | powerpcle-*-solaris* \
-  | powerpcle-*-sysv* | powerpcle-*-vxworks*)
-	targ_emul=elf32lppc targ_extra_emuls="elf32ppcsim";;
+powerpc*-*-linux*)
+	case "${targ}" in
+	*64*)	targ_emul=elf64ppc
+		targ_extra_emuls="elf32ppclinux elf32ppc elf32ppcsim" ;;
+	*)	targ_emul=elf32ppclinux
+		targ_extra_emuls="elf32ppc elf32ppcsim"
+		targ_extra_libpath=elf32ppc ;;
+	esac ;;
+powerpc*le-*-elf* | powerpc*le-*-eabi* | powerpc*le-*-solaris* \
+  | powerpc*le-*-sysv* | powerpc*le-*-vxworks*)
+	case "${targ}" in
+	*64*)	targ_emul=elf64lppc
+		targ_extra_emuls="elf32lppc elf32ppcsim" ;;
+	*)	targ_emul=elf32lppc
+		targ_extra_emuls="elf32ppcsim" ;;
+	esac ;;
+powerpc*-*-elf* | powerpc*-*-eabi* | powerpc*-*-sysv* \
+  | powerpc*-*-netbsd* | powerpc*-*-vxworks*)
+	case "${targ}" in
+	*64*)	targ_emul=elf64ppc
+		targ_extra_emuls="elf32ppc elf32ppclinux elf32ppcsim" ;;
+	*)	targ_emul=elf32ppc
+		targ_extra_emuls="elf32ppclinux elf32ppcsim" ;;
+	esac ;;
 powerpcle-*-rtems*)	targ_emul=elf32leppc ;;
 powerpc-*-rtems*)	targ_emul=elf32ppc ;;
 powerpc-*-macos*)	targ_emul=ppcmacos ;;
diff --git a/ld/emulparams/elf64lppc.sh b/ld/emulparams/elf64lppc.sh
new file mode 100644
index 00000000000..1c474935eb4
--- /dev/null
+++ b/ld/emulparams/elf64lppc.sh
@@ -0,0 +1,3 @@
+. ${srcdir}/emulparams/elf64ppc.sh
+OUTPUT_FORMAT="elf64-powerpcle"
+NOP=0x00000060
diff --git a/ld/emulparams/elf64ppc.sh b/ld/emulparams/elf64ppc.sh
new file mode 100644
index 00000000000..9384a1eec60
--- /dev/null
+++ b/ld/emulparams/elf64ppc.sh
@@ -0,0 +1,28 @@
+TEMPLATE_NAME=elf32
+ELFSIZE=64
+GENERATE_SHLIB_SCRIPT=yes
+SCRIPT_NAME=elf
+OUTPUT_FORMAT="elf64-powerpc"
+TEXT_START_ADDR=0x10000000
+MAXPAGESIZE=0x40000
+ARCH=powerpc
+MACHINE=
+NOP=0x60000000
+EXECUTABLE_SYMBOLS='PROVIDE (__stack = 0); PROVIDE (___stack = 0);'
+OTHER_BSS_END_SYMBOLS='__end = .;'
+CTOR_START='PROVIDE (__CTOR_LIST__ = .); PROVIDE (___CTOR_LIST__ = .);'
+CTOR_END='PROVIDE (__CTOR_END__ = .); PROVIDE (___CTOR_END__ = .);'
+DTOR_START='PROVIDE (__DTOR_LIST__ = .); PROVIDE (___DTOR_LIST__ = .);'
+DTOR_END='PROVIDE (__DTOR_END__ = .); PROVIDE (___DTOR_END__ = .);'
+BSS_PLT=
+OTHER_BSS_SYMBOLS="
+  .tocbss	${RELOCATING-0}${RELOCATING+ALIGN(8)} : { *(.tocbss)}"
+OTHER_PLT_RELOC_SECTIONS="
+  .rela.tocbss	${RELOCATING-0} : { *(.rela.tocbss) }"
+OTHER_GOT_SECTIONS="
+  .toc		${RELOCATING-0}${RELOCATING+ALIGN(8)} : { *(.toc) }"
+OTHER_GOT_RELOC_SECTIONS="
+  .rela.toc	${RELOCATING-0} : { *(.rela.toc) }"
+OTHER_READWRITE_SECTIONS="
+  .toc1		${RELOCATING-0}${RELOCATING+ALIGN(8)} : { *(.toc1) }
+  .opd		${RELOCATING-0}${RELOCATING+ALIGN(8)} : { *(.opd) }"