Toolchains

Toolchains for all supported devices.

343 Commits   8 Branches   37 Tags   |
Index: GNU/binutils/create-2.28-libiberty-bugfixes-patch/file.list
===================================================================
--- GNU/binutils/create-2.28-libiberty-bugfixes-patch/file.list	(revision 257)
+++ GNU/binutils/create-2.28-libiberty-bugfixes-patch/file.list	(nonexistent)
@@ -1,5 +0,0 @@
-binutils-2.28/libiberty/Makefile.in
-binutils-2.28/libiberty/cp-demangle.c
-binutils-2.28/libiberty/strndup.c
-binutils-2.28/libiberty/testsuite/demangle-expected
-binutils-2.28/libiberty/xstrndup.c
Index: GNU/binutils/create-2.28-libiberty-bugfixes-patch/create.patch.sh
===================================================================
--- GNU/binutils/create-2.28-libiberty-bugfixes-patch/create.patch.sh	(revision 257)
+++ GNU/binutils/create-2.28-libiberty-bugfixes-patch/create.patch.sh	(nonexistent)
@@ -1,15 +0,0 @@
-#!/bin/sh
-
-VERSION=2.28
-
-tar --files-from=file.list -xjvf ../binutils-$VERSION.tar.bz2
-mv binutils-$VERSION binutils-$VERSION-orig
-
-cp -rf ./binutils-$VERSION-new ./binutils-$VERSION
-
-diff -b --unified -Nr  binutils-$VERSION-orig  binutils-$VERSION > binutils-$VERSION-libiberty-bugfixes.patch
-
-mv binutils-$VERSION-libiberty-bugfixes.patch ../patches
-
-rm -rf ./binutils-$VERSION
-rm -rf ./binutils-$VERSION-orig

Property changes on: GNU/binutils/create-2.28-libiberty-bugfixes-patch/create.patch.sh
___________________________________________________________________
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: GNU/binutils/create-2.28-libiberty-bugfixes-patch/binutils-2.28-new/libiberty/Makefile.in
===================================================================
--- GNU/binutils/create-2.28-libiberty-bugfixes-patch/binutils-2.28-new/libiberty/Makefile.in	(revision 257)
+++ GNU/binutils/create-2.28-libiberty-bugfixes-patch/binutils-2.28-new/libiberty/Makefile.in	(nonexistent)
@@ -1,1723 +0,0 @@
-# Makefile for the libiberty library.
-# Originally written by K. Richard Pixley <rich@cygnus.com>.
-#
-# Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
-# 2012, 2014, 2015 Free Software Foundation
-#
-# This file is part of the libiberty library.
-# Libiberty is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# Libiberty 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
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with libiberty; see the file COPYING.LIB.  If not,
-# write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-# Boston, MA 02110-1301, USA.
-
-libiberty_topdir = @libiberty_topdir@
-srcdir = @srcdir@
-
-prefix = @prefix@
-
-exec_prefix = @exec_prefix@
-bindir = @bindir@
-libdir = @libdir@
-includedir = @includedir@
-target_header_dir = @target_header_dir@
-objext = @OBJEXT@
-
-SHELL = @SHELL@
-
-# Multilib support variables.
-MULTISRCTOP =
-MULTIBUILDTOP =
-MULTIDIRS =
-MULTISUBDIR =
-MULTIDO = true
-MULTICLEAN = true
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-mkinstalldirs = $(SHELL) $(libiberty_topdir)/mkinstalldirs
-
-# Some compilers can't handle cc -c blah.c -o foo/blah.o.
-OUTPUT_OPTION = @OUTPUT_OPTION@
-
-AR = @AR@
-AR_FLAGS = rc
-
-CC = @CC@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-RANLIB = @RANLIB@
-MAKEINFO = @MAKEINFO@
-PERL = @PERL@
-
-PICFLAG = @PICFLAG@
-NOASANFLAG = @NOASANFLAG@
-
-MAKEOVERRIDES =
-
-TARGETLIB = ./libiberty.a
-TESTLIB = ./testlib.a
-
-LIBOBJS = @LIBOBJS@
-
-# A configuration can specify extra .o files that should be included,
-# even if they are in libc. (Perhaps the libc version is buggy.)
-EXTRA_OFILES = 
-
-# Flags to pass to a recursive make.
-FLAGS_TO_PASS = \
-	"AR=$(AR)" \
-	"AR_FLAGS=$(AR_FLAGS)" \
-	"CC=$(CC)" \
-	"CFLAGS=$(CFLAGS)" \
-	"CPPFLAGS=$(CPPFLAGS)" \
-	"DESTDIR=$(DESTDIR)" \
-	"EXTRA_OFILES=$(EXTRA_OFILES)" \
-	"HDEFINES=$(HDEFINES)" \
-	"INSTALL=$(INSTALL)" \
-	"INSTALL_DATA=$(INSTALL_DATA)" \
-	"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
-	"LDFLAGS=$(LDFLAGS)" \
-	"LOADLIBES=$(LOADLIBES)" \
-	"RANLIB=$(RANLIB)" \
-	"SHELL=$(SHELL)" \
-	"prefix=$(prefix)" \
-	"exec_prefix=$(exec_prefix)" \
-	"libdir=$(libdir)" \
-	"libsubdir=$(libsubdir)" \
-	"tooldir=$(tooldir)"
-
-# Subdirectories to recurse into. We need to override this during cleaning
-SUBDIRS = testsuite
-
-# FIXME: add @BUILD_INFO@ once we're sure it works for everyone.
-all: stamp-picdir stamp-noasandir $(TARGETLIB) required-list all-subdir
-	@: $(MAKE) ; $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
-
-.PHONY: check installcheck
-check: check-subdir
-installcheck: installcheck-subdir
-
-@host_makefile_frag@
-
-INCDIR=$(srcdir)/$(MULTISRCTOP)../include
-
-COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) \
-               $(HDEFINES) @ac_libiberty_warn_cflags@ -D_GNU_SOURCE
-
-# Just to make sure we don't use a built-in rule with VPATH
-.c.$(objext):
-	false
-
-# NOTE: If you add new files to the library, add them to this list
-# (alphabetical), and add them to REQUIRED_OFILES, or
-# CONFIGURED_OFILES and funcs in configure.ac.  Also run "make maint-deps"
-# to build the new rules.
-CFILES = alloca.c argv.c asprintf.c atexit.c				\
-	basename.c bcmp.c bcopy.c bsearch.c bzero.c			\
-	calloc.c choose-temp.c clock.c concat.c cp-demangle.c		\
-	 cp-demint.c cplus-dem.c crc32.c				\
-	d-demangle.c dwarfnames.c dyn-string.c				\
-	fdmatch.c ffs.c fibheap.c filename_cmp.c floatformat.c		\
-	fnmatch.c fopen_unlocked.c					\
-	getcwd.c getopt.c getopt1.c getpagesize.c getpwd.c getruntime.c	\
-         gettimeofday.c                                                 \
-	hashtab.c hex.c							\
-	index.c insque.c						\
-	lbasename.c							\
-	lrealpath.c							\
-	make-relative-prefix.c						\
-	make-temp-file.c md5.c memchr.c memcmp.c memcpy.c memmem.c	\
-	 memmove.c mempcpy.c memset.c mkstemps.c			\
-	objalloc.c obstack.c						\
-	partition.c pexecute.c						\
-	 pex-common.c pex-djgpp.c pex-msdos.c pex-one.c			\
-	 pex-unix.c pex-win32.c						\
-         physmem.c putenv.c						\
-	random.c regex.c rename.c rindex.c				\
-	rust-demangle.c							\
-	safe-ctype.c setenv.c setproctitle.c sha1.c sigsetmask.c        \
-	 simple-object.c simple-object-coff.c simple-object-elf.c	\
-	 simple-object-mach-o.c simple-object-xcoff.c			\
-         snprintf.c sort.c						\
-	 spaces.c splay-tree.c stack-limit.c stpcpy.c stpncpy.c		\
-	 strcasecmp.c strchr.c strdup.c strerror.c strncasecmp.c	\
-	 strncmp.c strrchr.c strsignal.c strstr.c strtod.c strtol.c	\
-	 strtoll.c strtoul.c strtoull.c strndup.c strnlen.c             \
-	 strverscmp.c timeval-utils.c tmpnam.c				\
-	unlink-if-ordinary.c						\
-	vasprintf.c vfork.c vfprintf.c vprintf.c vprintf-support.c	\
-	 vsnprintf.c vsprintf.c						\
-	waitpid.c							\
-	xasprintf.c xatexit.c xexit.c xmalloc.c xmemdup.c xstrdup.c	\
-	 xstrerror.c xstrndup.c xvasprintf.c
-
-# These are always included in the library.  The first four are listed
-# first and by compile time to optimize parallel builds.
-REQUIRED_OFILES =							\
-	./regex.$(objext) ./cplus-dem.$(objext) ./cp-demangle.$(objext) \
-	./md5.$(objext) ./sha1.$(objext) ./alloca.$(objext)		\
-	./argv.$(objext)						\
-	./choose-temp.$(objext) ./concat.$(objext)			\
-	./cp-demint.$(objext) ./crc32.$(objext) ./d-demangle.$(objext)	\
-	./dwarfnames.$(objext) ./dyn-string.$(objext)			\
-	./fdmatch.$(objext) ./fibheap.$(objext)				\
-	./filename_cmp.$(objext) ./floatformat.$(objext)		\
-	./fnmatch.$(objext) ./fopen_unlocked.$(objext)			\
-	./getopt.$(objext) ./getopt1.$(objext) ./getpwd.$(objext)	\
-	./getruntime.$(objext) ./hashtab.$(objext) ./hex.$(objext)	\
-	./lbasename.$(objext) ./lrealpath.$(objext)			\
-	./make-relative-prefix.$(objext) ./make-temp-file.$(objext)	\
-	./objalloc.$(objext)						\
-	./obstack.$(objext)						\
-	./partition.$(objext) ./pexecute.$(objext) ./physmem.$(objext)	\
-	./pex-common.$(objext) ./pex-one.$(objext)			\
-	./@pexecute@.$(objext) ./vprintf-support.$(objext)		\
-	./rust-demangle.$(objext)					\
-	./safe-ctype.$(objext)						\
-	./simple-object.$(objext) ./simple-object-coff.$(objext)	\
-	./simple-object-elf.$(objext) ./simple-object-mach-o.$(objext)	\
-	./simple-object-xcoff.$(objext)					\
-	./sort.$(objext) ./spaces.$(objext)				\
-	./splay-tree.$(objext) ./stack-limit.$(objext)			\
-	./strerror.$(objext) ./strsignal.$(objext)			\
-	./timeval-utils.$(objext) ./unlink-if-ordinary.$(objext)	\
-	./xasprintf.$(objext) ./xatexit.$(objext) ./xexit.$(objext)	\
-	./xmalloc.$(objext) ./xmemdup.$(objext) ./xstrdup.$(objext)	\
-	./xstrerror.$(objext) ./xstrndup.$(objext)			\
-	./xvasprintf.$(objext)
-
-# These are all the objects that configure may add to the library via
-# $funcs or EXTRA_OFILES.  This list exists here only for "make
-# maint-missing" and "make check".
-CONFIGURED_OFILES = ./asprintf.$(objext) ./atexit.$(objext)		\
-	./basename.$(objext) ./bcmp.$(objext) ./bcopy.$(objext)		\
-	./bsearch.$(objext) ./bzero.$(objext)				\
-	./calloc.$(objext) ./clock.$(objext) ./copysign.$(objext)	\
-	./_doprnt.$(objext)						\
-	 ./ffs.$(objext)						\
-	./getcwd.$(objext) ./getpagesize.$(objext)			\
-	 ./gettimeofday.$(objext)					\
-	./index.$(objext) ./insque.$(objext)				\
-	./memchr.$(objext) ./memcmp.$(objext) ./memcpy.$(objext) 	\
-	./memmem.$(objext) ./memmove.$(objext)				\
-	 ./mempcpy.$(objext) ./memset.$(objext) ./mkstemps.$(objext)	\
-	./pex-djgpp.$(objext) ./pex-msdos.$(objext)			\
-	 ./pex-unix.$(objext) ./pex-win32.$(objext)			\
-	 ./putenv.$(objext)						\
-	./random.$(objext) ./rename.$(objext) ./rindex.$(objext)	\
-	./setenv.$(objext) 						\
-	 ./setproctitle.$(objext)					\
-	 ./sigsetmask.$(objext) ./snprintf.$(objext)			\
-	 ./stpcpy.$(objext) ./stpncpy.$(objext) ./strcasecmp.$(objext)	\
-	 ./strchr.$(objext) ./strdup.$(objext) ./strncasecmp.$(objext)	\
-	 ./strncmp.$(objext) ./strndup.$(objext) ./strnlen.$(objext)	\
-	 ./strrchr.$(objext) ./strstr.$(objext) ./strtod.$(objext)	\
-	 ./strtol.$(objext) ./strtoul.$(objext) strtoll.$(objext)	\
-	./strtoull.$(objext) ./tmpnam.$(objext) ./strverscmp.$(objext)	\
-	./vasprintf.$(objext) ./vfork.$(objext) ./vfprintf.$(objext)	\
-	 ./vprintf.$(objext) ./vsnprintf.$(objext) ./vsprintf.$(objext)	\
-	./waitpid.$(objext)
-
-# These files are installed if the library has been configured to do so.
-INSTALLED_HEADERS =                                                     \
-	$(INCDIR)/ansidecl.h                                            \
-	$(INCDIR)/demangle.h                                            \
-	$(INCDIR)/dyn-string.h                                          \
-	$(INCDIR)/fibheap.h                                             \
-	$(INCDIR)/floatformat.h                                         \
-	$(INCDIR)/hashtab.h                                             \
-	$(INCDIR)/libiberty.h                                           \
-	$(INCDIR)/objalloc.h                                            \
-	$(INCDIR)/partition.h                                           \
-	$(INCDIR)/safe-ctype.h                                          \
-	$(INCDIR)/sort.h                                                \
-	$(INCDIR)/splay-tree.h \
-	$(INCDIR)/timeval-utils.h
-
-$(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS)
-	-rm -f $(TARGETLIB) pic/$(TARGETLIB) noasan/$(TARGETLIB)
-	$(AR) $(AR_FLAGS) $(TARGETLIB) \
-	  $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS)
-	$(RANLIB) $(TARGETLIB)
-	if [ x"$(PICFLAG)" != x ]; then \
-	  cd pic; \
-	  $(AR) $(AR_FLAGS) $(TARGETLIB) \
-	    $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \
-	  $(RANLIB) $(TARGETLIB); \
-	  cd ..; \
-	else true; fi; \
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  cd noasan; \
-	  $(AR) $(AR_FLAGS) $(TARGETLIB) \
-	    $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \
-	  $(RANLIB) $(TARGETLIB); \
-	  cd ..; \
-	else true; fi
-
-$(TESTLIB): $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
-	-rm -f $(TESTLIB)
-	$(AR) $(AR_FLAGS) $(TESTLIB) \
-	  $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
-	$(RANLIB) $(TESTLIB)
-
-info: libiberty.info info-subdir
-install-info: install-info-subdir
-clean-info: clean-info-subdir
-dvi: libiberty.dvi dvi-subdir
-
-LIBIBERTY_PDFFILES = libiberty.pdf
-
-pdf: $(LIBIBERTY_PDFFILES) pdf-subdir
-
-.PHONY: install-pdf
-
-pdf__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-
-install-pdf: $(LIBIBERTY_PDFFILES)
-	@$(NORMAL_INSTALL)
-	test -z "$(pdfdir)" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)"
-	@list='$(LIBIBERTY_PDFFILES)'; for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  f=$(pdf__strip_dir) \
-	  echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \
-	  $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \
-	done
-
-# html, install-html targets
-HTMLS = libiberty.html
-
-html: $(HTMLS)
-
-.PHONY: install-html install-html-am
-
-NORMAL_INSTALL = :
-mkdir_p = mkdir -p --
-
-html__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-
-install-html: install-html-am
-
-install-html-am: $(HTMLS)
-	@$(NORMAL_INSTALL)
-	test -z "$(htmldir)" || $(mkdir_p) "$(DESTDIR)$(htmldir)"
-	@list='$(HTMLS)'; for p in $$list; do \
-	  if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \
-	  f=$(html__strip_dir) \
-	  if test -d "$$d$$p"; then \
-	    echo " $(mkdir_p) '$(DESTDIR)$(htmldir)/$$f'"; \
-	    $(mkdir_p) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
-	    echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
-	    $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \
-	  else \
-	    echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
-	    $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
-	  fi; \
-	done
-
-TEXISRC = \
-	$(srcdir)/libiberty.texi \
-	$(srcdir)/copying-lib.texi \
-	$(srcdir)/obstacks.texi \
-	$(srcdir)/functions.texi
-
-# Additional files that have texi snippets that need to be collected
-# and sorted.  Some are here because the sources are imported from
-# elsewhere.  Others represent headers in ../include.
-TEXIFILES = fnmatch.txh pexecute.txh simple-object.txh
-
-libiberty.info : $(srcdir)/libiberty.texi $(TEXISRC)
-	$(MAKEINFO) -I$(srcdir) $(srcdir)/libiberty.texi
-
-libiberty.dvi : $(srcdir)/libiberty.texi $(TEXISRC)
-	texi2dvi $(srcdir)/libiberty.texi
-
-libiberty.pdf : $(srcdir)/libiberty.texi $(TEXISRC)
-	texi2pdf $(srcdir)/libiberty.texi
-
-libiberty.html : $(srcdir)/libiberty.texi $(TEXISRC)
-	$(MAKEINFO) --no-split --html -I$(srcdir) -o $@ $<
-
-@MAINT@$(srcdir)/functions.texi : stamp-functions
-@MAINT@	@true
-
-@MAINT@stamp-functions : $(CFILES:%=$(srcdir)/%) $(TEXIFILES:%=$(srcdir)/%) $(srcdir)/gather-docs Makefile
-@MAINT@@HAVE_PERL@	$(PERL) $(srcdir)/gather-docs $(srcdir) $(srcdir)/functions.texi $(CFILES) $(TEXIFILES)
-@MAINT@	echo stamp > stamp-functions
-
-INSTALL_DEST = @INSTALL_DEST@
-install: install_to_$(INSTALL_DEST) install-subdir
-install-strip: install
-
-.PHONY: install install-strip
-
-# This is tricky.  Even though CC in the Makefile contains
-# multilib-specific flags, it's overridden by FLAGS_TO_PASS from the
-# default multilib, so we have to take CFLAGS into account as well,
-# since it will be passed the multilib flags.
-MULTIOSDIR = `$(CC) $(CFLAGS) -print-multi-os-directory`
-install_to_libdir: all
-	if test -n "${target_header_dir}"; then \
-		${mkinstalldirs} $(DESTDIR)$(libdir)/$(MULTIOSDIR); \
-		$(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n; \
-		( cd $(DESTDIR)$(libdir)/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n ;$(RANLIB) $(TARGETLIB)n ); \
-		mv -f $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB); \
-		case "${target_header_dir}" in \
-		  /*)    thd=${target_header_dir};; \
-		  *)     thd=${includedir}/${target_header_dir};; \
-		esac; \
-		${mkinstalldirs} $(DESTDIR)$${thd}; \
-		for h in ${INSTALLED_HEADERS}; do \
-		  ${INSTALL_DATA} $$h $(DESTDIR)$${thd}; \
-		done; \
-	fi
-	@$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
-
-install_to_tooldir: all
-	${mkinstalldirs} $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)
-	$(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n
-	( cd $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n; $(RANLIB) $(TARGETLIB)n )
-	mv -f $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)
-	@$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
-
-# required-list was used when building a shared bfd/opcodes/libiberty
-# library.  I don't know if it used by anything currently.
-required-list: Makefile
-	echo $(REQUIRED_OFILES) > required-list
-
-stamp-picdir:
-	if [ x"$(PICFLAG)" != x ] && [ ! -d pic ]; then \
-	  mkdir pic; \
-	else true; fi
-	touch stamp-picdir
-
-stamp-noasandir:
-	if [ x"$(NOASANFLAG)" != x ] && [ ! -d noasan ]; then \
-	  mkdir noasan; \
-	else true; fi
-	touch stamp-noasandir
-
-.PHONY: all etags tags TAGS ls clean stage1 stage2
-
-etags tags TAGS: etags-subdir
-	cd $(srcdir) && etags $(CFILES)
-
-# The standalone demangler (c++filt) has been moved to binutils.
-# But make this target work anyway for demangler hacking.
-demangle: $(ALL) $(srcdir)/cp-demangle.c
-	@echo "The standalone demangler, now named c++filt, is now"
-	@echo "a part of binutils."
-	$(CC) @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) $(HDEFINES) \
-	  $(srcdir)/cp-demangle.c -DSTANDALONE_DEMANGLER $(TARGETLIB) -o $@
-
-ls:
-	@echo Makefile $(CFILES)
-
-# Various targets for maintainers.
-
-maint-missing :
-	@$(PERL) $(srcdir)/maint-tool -s $(srcdir) missing $(CFILES) $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
-
-maint-buildall : $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
-	@true
-
-maint-undoc : $(srcdir)/functions.texi
-	@$(PERL) $(srcdir)/maint-tool -s $(srcdir) undoc
-
-maint-deps :
-	@$(PERL) $(srcdir)/maint-tool -s $(srcdir) deps $(INCDIR)
-
-# Need to deal with profiled libraries, too.
-
-# Cleaning has to be done carefully to ensure that we don't clean our SUBDIRS
-# multiple times, hence our explicit recursion with an empty SUBDIRS.
-mostlyclean: mostlyclean-subdir
-	-rm -rf *.$(objext) pic noasan core errs \#* *.E a.out
-	-rm -f errors dummy config.h stamp-*
-	-rm -f $(CONFIG_H) stamp-picdir stamp-noasandir
-	-rm -f libiberty.aux libiberty.cp libiberty.cps libiberty.fn libiberty.ky
-	-rm -f libiberty.log libiberty.tmp libiberty.tps libiberty.pg
-	-rm -f libiberty.pgs libiberty.toc libiberty.tp libiberty.tpl libiberty.vr
-	-rm -f libtexi.stamp
-	@$(MULTICLEAN) multi-clean DO=mostlyclean
-clean: clean-subdir
-	$(MAKE) SUBDIRS="" mostlyclean
-	-rm -f *.a required-list tmpmulti.out
-	-rm -f libiberty.dvi libiberty.pdf libiberty.info* libiberty.html
-	@$(MULTICLEAN) multi-clean DO=clean
-distclean: distclean-subdir
-	$(MAKE) SUBDIRS="" clean
-	@$(MULTICLEAN) multi-clean DO=distclean
-	-rm -f *~ Makefile config.cache config.status xhost-mkfrag TAGS multilib.out
-	-rm -f config.log
-	-rmdir testsuite 2>/dev/null
-maintainer-clean realclean: maintainer-clean-subdir
-	$(MAKE) SUBDIRS="" distclean
-
-force:
-
-Makefile: $(srcdir)/Makefile.in config.status
-	CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status
-
-# Depending on Makefile makes sure that config.status has been re-run
-# if needed.  This prevents problems with parallel builds.
-config.h: stamp-h ; @true
-stamp-h: $(srcdir)/config.in config.status Makefile
-	CONFIG_FILES= CONFIG_HEADERS=config.h:$(srcdir)/config.in $(SHELL) ./config.status
-
-config.status: $(srcdir)/configure
-	$(SHELL) ./config.status --recheck
-
-AUTOCONF = autoconf
-configure_deps = $(srcdir)/aclocal.m4 \
-	$(srcdir)/../config/acx.m4 \
-	$(srcdir)/../config/no-executables.m4 \
-	$(srcdir)/../config/override.m4 \
-	$(srcdir)/../config/picflag.m4 \
-	$(srcdir)/../config/warnings.m4
-
-$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(configure_deps)
-	cd $(srcdir) && $(AUTOCONF)
-
-# Depending on config.h makes sure that config.status has been re-run
-# if needed.  This prevents problems with parallel builds, in case
-# subdirectories need to run config.status also.
-all-subdir check-subdir installcheck-subdir info-subdir	\
-install-info-subdir clean-info-subdir dvi-subdir pdf-subdir install-subdir	\
-etags-subdir mostlyclean-subdir clean-subdir distclean-subdir \
-maintainer-clean-subdir: config.h
-	@subdirs='$(SUBDIRS)'; \
-	target=`echo $@ | sed -e 's/-subdir//'`; \
-	for dir in $$subdirs ; do \
-	  cd $$dir && $(MAKE) $(FLAGS_TO_PASS) $$target; \
-	done
-
-$(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS): stamp-picdir stamp-noasandir
-$(CONFIGURED_OFILES): stamp-picdir stamp-noasandir
-
-# Don't export variables to the environment, in order to not confuse
-# configure.
-.NOEXPORT:
-
-# The dependencies in the remainder of this file are automatically
-# generated by "make maint-deps".  Manual edits will be lost.
-
-./_doprnt.$(objext): $(srcdir)/_doprnt.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/_doprnt.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/_doprnt.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/_doprnt.c $(OUTPUT_OPTION)
-
-./alloca.$(objext): $(srcdir)/alloca.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/alloca.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/alloca.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/alloca.c $(OUTPUT_OPTION)
-
-./argv.$(objext): $(srcdir)/argv.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/argv.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/argv.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/argv.c $(OUTPUT_OPTION)
-
-./asprintf.$(objext): $(srcdir)/asprintf.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/asprintf.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/asprintf.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/asprintf.c $(OUTPUT_OPTION)
-
-./atexit.$(objext): $(srcdir)/atexit.c config.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/atexit.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/atexit.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/atexit.c $(OUTPUT_OPTION)
-
-./basename.$(objext): $(srcdir)/basename.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/basename.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/basename.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/basename.c $(OUTPUT_OPTION)
-
-./bcmp.$(objext): $(srcdir)/bcmp.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/bcmp.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/bcmp.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/bcmp.c $(OUTPUT_OPTION)
-
-./bcopy.$(objext): $(srcdir)/bcopy.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/bcopy.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/bcopy.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/bcopy.c $(OUTPUT_OPTION)
-
-./bsearch.$(objext): $(srcdir)/bsearch.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/bsearch.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/bsearch.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/bsearch.c $(OUTPUT_OPTION)
-
-./bzero.$(objext): $(srcdir)/bzero.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/bzero.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/bzero.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/bzero.c $(OUTPUT_OPTION)
-
-./calloc.$(objext): $(srcdir)/calloc.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/calloc.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/calloc.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/calloc.c $(OUTPUT_OPTION)
-
-./choose-temp.$(objext): $(srcdir)/choose-temp.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/choose-temp.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/choose-temp.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/choose-temp.c $(OUTPUT_OPTION)
-
-./clock.$(objext): $(srcdir)/clock.c config.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/clock.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/clock.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/clock.c $(OUTPUT_OPTION)
-
-./concat.$(objext): $(srcdir)/concat.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/concat.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/concat.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/concat.c $(OUTPUT_OPTION)
-
-./copysign.$(objext): $(srcdir)/copysign.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/copysign.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/copysign.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/copysign.c $(OUTPUT_OPTION)
-
-./cp-demangle.$(objext): $(srcdir)/cp-demangle.c config.h $(INCDIR)/ansidecl.h \
-	$(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \
-	$(INCDIR)/dyn-string.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demangle.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/cp-demangle.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/cp-demangle.c $(OUTPUT_OPTION)
-
-./cp-demint.$(objext): $(srcdir)/cp-demint.c config.h $(INCDIR)/ansidecl.h \
-	$(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demint.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/cp-demint.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/cp-demint.c $(OUTPUT_OPTION)
-
-./cplus-dem.$(objext): $(srcdir)/cplus-dem.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
-	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/cplus-dem.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/cplus-dem.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/cplus-dem.c $(OUTPUT_OPTION)
-
-./crc32.$(objext): $(srcdir)/crc32.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/crc32.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/crc32.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/crc32.c $(OUTPUT_OPTION)
-
-./d-demangle.$(objext): $(srcdir)/d-demangle.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
-	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/d-demangle.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/d-demangle.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/d-demangle.c $(OUTPUT_OPTION)
-
-./dwarfnames.$(objext): $(srcdir)/dwarfnames.c $(INCDIR)/dwarf2.def \
-	$(INCDIR)/dwarf2.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/dwarfnames.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/dwarfnames.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/dwarfnames.c $(OUTPUT_OPTION)
-
-./dyn-string.$(objext): $(srcdir)/dyn-string.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/dyn-string.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/dyn-string.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/dyn-string.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/dyn-string.c $(OUTPUT_OPTION)
-
-./fdmatch.$(objext): $(srcdir)/fdmatch.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/fdmatch.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/fdmatch.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/fdmatch.c $(OUTPUT_OPTION)
-
-./ffs.$(objext): $(srcdir)/ffs.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/ffs.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/ffs.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/ffs.c $(OUTPUT_OPTION)
-
-./fibheap.$(objext): $(srcdir)/fibheap.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/fibheap.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/fibheap.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/fibheap.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/fibheap.c $(OUTPUT_OPTION)
-
-./filename_cmp.$(objext): $(srcdir)/filename_cmp.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/filenames.h $(INCDIR)/hashtab.h \
-	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/filename_cmp.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/filename_cmp.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/filename_cmp.c $(OUTPUT_OPTION)
-
-./floatformat.$(objext): $(srcdir)/floatformat.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/floatformat.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/floatformat.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/floatformat.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/floatformat.c $(OUTPUT_OPTION)
-
-./fnmatch.$(objext): $(srcdir)/fnmatch.c config.h $(INCDIR)/fnmatch.h \
-	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/fnmatch.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/fnmatch.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/fnmatch.c $(OUTPUT_OPTION)
-
-./fopen_unlocked.$(objext): $(srcdir)/fopen_unlocked.c config.h \
-	$(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/fopen_unlocked.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/fopen_unlocked.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/fopen_unlocked.c $(OUTPUT_OPTION)
-
-./getcwd.$(objext): $(srcdir)/getcwd.c config.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getcwd.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/getcwd.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getcwd.c $(OUTPUT_OPTION)
-
-./getopt.$(objext): $(srcdir)/getopt.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/getopt.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/getopt.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getopt.c $(OUTPUT_OPTION)
-
-./getopt1.$(objext): $(srcdir)/getopt1.c config.h $(INCDIR)/getopt.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt1.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/getopt1.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getopt1.c $(OUTPUT_OPTION)
-
-./getpagesize.$(objext): $(srcdir)/getpagesize.c config.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getpagesize.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/getpagesize.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getpagesize.c $(OUTPUT_OPTION)
-
-./getpwd.$(objext): $(srcdir)/getpwd.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getpwd.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/getpwd.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getpwd.c $(OUTPUT_OPTION)
-
-./getruntime.$(objext): $(srcdir)/getruntime.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/getruntime.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/getruntime.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/getruntime.c $(OUTPUT_OPTION)
-
-./gettimeofday.$(objext): $(srcdir)/gettimeofday.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/gettimeofday.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/gettimeofday.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/gettimeofday.c $(OUTPUT_OPTION)
-
-./hashtab.$(objext): $(srcdir)/hashtab.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/hashtab.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/hashtab.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/hashtab.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/hashtab.c $(OUTPUT_OPTION)
-
-./hex.$(objext): $(srcdir)/hex.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/hex.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/hex.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/hex.c $(OUTPUT_OPTION)
-
-./index.$(objext): $(srcdir)/index.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/index.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/index.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/index.c $(OUTPUT_OPTION)
-
-./insque.$(objext): $(srcdir)/insque.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/insque.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/insque.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/insque.c $(OUTPUT_OPTION)
-
-./lbasename.$(objext): $(srcdir)/lbasename.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/filenames.h $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h \
-	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/lbasename.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/lbasename.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/lbasename.c $(OUTPUT_OPTION)
-
-./lrealpath.$(objext): $(srcdir)/lrealpath.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/lrealpath.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/lrealpath.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/lrealpath.c $(OUTPUT_OPTION)
-
-./make-relative-prefix.$(objext): $(srcdir)/make-relative-prefix.c config.h \
-	$(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/make-relative-prefix.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/make-relative-prefix.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/make-relative-prefix.c $(OUTPUT_OPTION)
-
-./make-temp-file.$(objext): $(srcdir)/make-temp-file.c config.h \
-	$(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/make-temp-file.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/make-temp-file.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/make-temp-file.c $(OUTPUT_OPTION)
-
-./md5.$(objext): $(srcdir)/md5.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/md5.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/md5.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/md5.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/md5.c $(OUTPUT_OPTION)
-
-./memchr.$(objext): $(srcdir)/memchr.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/memchr.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/memchr.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/memchr.c $(OUTPUT_OPTION)
-
-./memcmp.$(objext): $(srcdir)/memcmp.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/memcmp.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/memcmp.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/memcmp.c $(OUTPUT_OPTION)
-
-./memcpy.$(objext): $(srcdir)/memcpy.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/memcpy.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/memcpy.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/memcpy.c $(OUTPUT_OPTION)
-
-./memmem.$(objext): $(srcdir)/memmem.c config.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/memmem.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/memmem.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/memmem.c $(OUTPUT_OPTION)
-
-./memmove.$(objext): $(srcdir)/memmove.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/memmove.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/memmove.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/memmove.c $(OUTPUT_OPTION)
-
-./mempcpy.$(objext): $(srcdir)/mempcpy.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/mempcpy.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/mempcpy.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/mempcpy.c $(OUTPUT_OPTION)
-
-./memset.$(objext): $(srcdir)/memset.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/memset.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/memset.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/memset.c $(OUTPUT_OPTION)
-
-./mkstemps.$(objext): $(srcdir)/mkstemps.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/mkstemps.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/mkstemps.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/mkstemps.c $(OUTPUT_OPTION)
-
-./msdos.$(objext): $(srcdir)/msdos.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/msdos.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/msdos.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/msdos.c $(OUTPUT_OPTION)
-
-./objalloc.$(objext): $(srcdir)/objalloc.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/objalloc.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/objalloc.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/objalloc.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/objalloc.c $(OUTPUT_OPTION)
-
-./obstack.$(objext): $(srcdir)/obstack.c config.h $(INCDIR)/obstack.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/obstack.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/obstack.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/obstack.c $(OUTPUT_OPTION)
-
-./partition.$(objext): $(srcdir)/partition.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h $(INCDIR)/partition.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/partition.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/partition.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/partition.c $(OUTPUT_OPTION)
-
-./pex-common.$(objext): $(srcdir)/pex-common.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-common.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/pex-common.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-common.c $(OUTPUT_OPTION)
-
-./pex-djgpp.$(objext): $(srcdir)/pex-djgpp.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-djgpp.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/pex-djgpp.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-djgpp.c $(OUTPUT_OPTION)
-
-./pex-msdos.$(objext): $(srcdir)/pex-msdos.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h \
-	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-msdos.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/pex-msdos.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-msdos.c $(OUTPUT_OPTION)
-
-./pex-one.$(objext): $(srcdir)/pex-one.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-one.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/pex-one.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-one.c $(OUTPUT_OPTION)
-
-./pex-unix.$(objext): $(srcdir)/pex-unix.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-unix.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/pex-unix.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-unix.c $(OUTPUT_OPTION)
-
-./pex-win32.$(objext): $(srcdir)/pex-win32.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h $(srcdir)/pex-common.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-win32.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/pex-win32.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pex-win32.c $(OUTPUT_OPTION)
-
-./pexecute.$(objext): $(srcdir)/pexecute.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/pexecute.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/pexecute.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/pexecute.c $(OUTPUT_OPTION)
-
-./physmem.$(objext): $(srcdir)/physmem.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/physmem.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/physmem.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/physmem.c $(OUTPUT_OPTION)
-
-./putenv.$(objext): $(srcdir)/putenv.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/putenv.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/putenv.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/putenv.c $(OUTPUT_OPTION)
-
-./random.$(objext): $(srcdir)/random.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/random.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/random.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/random.c $(OUTPUT_OPTION)
-
-./regex.$(objext): $(srcdir)/regex.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/xregex.h $(INCDIR)/xregex2.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/regex.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/regex.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/regex.c $(OUTPUT_OPTION)
-
-./rename.$(objext): $(srcdir)/rename.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/rename.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/rename.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/rename.c $(OUTPUT_OPTION)
-
-./rindex.$(objext): $(srcdir)/rindex.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/rindex.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/rindex.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/rindex.c $(OUTPUT_OPTION)
-
-./rust-demangle.$(objext): $(srcdir)/rust-demangle.c config.h \
-	$(INCDIR)/ansidecl.h $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
-	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/rust-demangle.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/rust-demangle.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/rust-demangle.c $(OUTPUT_OPTION)
-
-./safe-ctype.$(objext): $(srcdir)/safe-ctype.c $(INCDIR)/ansidecl.h \
-	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/safe-ctype.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/safe-ctype.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/safe-ctype.c $(OUTPUT_OPTION)
-
-./setenv.$(objext): $(srcdir)/setenv.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/setenv.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/setenv.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/setenv.c $(OUTPUT_OPTION)
-
-./setproctitle.$(objext): $(srcdir)/setproctitle.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/setproctitle.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/setproctitle.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/setproctitle.c $(OUTPUT_OPTION)
-
-./sha1.$(objext): $(srcdir)/sha1.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/sha1.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/sha1.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/sha1.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/sha1.c $(OUTPUT_OPTION)
-
-./sigsetmask.$(objext): $(srcdir)/sigsetmask.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/sigsetmask.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/sigsetmask.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/sigsetmask.c $(OUTPUT_OPTION)
-
-./simple-object-coff.$(objext): $(srcdir)/simple-object-coff.c config.h \
-	$(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
-	$(srcdir)/simple-object-common.h $(INCDIR)/simple-object.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/simple-object-coff.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/simple-object-coff.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/simple-object-coff.c $(OUTPUT_OPTION)
-
-./simple-object-elf.$(objext): $(srcdir)/simple-object-elf.c config.h \
-	$(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
-	$(srcdir)/simple-object-common.h $(INCDIR)/simple-object.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/simple-object-elf.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/simple-object-elf.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/simple-object-elf.c $(OUTPUT_OPTION)
-
-./simple-object-mach-o.$(objext): $(srcdir)/simple-object-mach-o.c config.h \
-	$(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
-	$(srcdir)/simple-object-common.h $(INCDIR)/simple-object.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/simple-object-mach-o.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/simple-object-mach-o.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/simple-object-mach-o.c $(OUTPUT_OPTION)
-
-./simple-object-xcoff.$(objext): $(srcdir)/simple-object-xcoff.c config.h \
-	$(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
-	$(srcdir)/simple-object-common.h $(INCDIR)/simple-object.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/simple-object-xcoff.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/simple-object-xcoff.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/simple-object-xcoff.c $(OUTPUT_OPTION)
-
-./simple-object.$(objext): $(srcdir)/simple-object.c config.h \
-	$(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
-	$(srcdir)/simple-object-common.h $(INCDIR)/simple-object.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/simple-object.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/simple-object.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/simple-object.c $(OUTPUT_OPTION)
-
-./snprintf.$(objext): $(srcdir)/snprintf.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/snprintf.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/snprintf.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/snprintf.c $(OUTPUT_OPTION)
-
-./sort.$(objext): $(srcdir)/sort.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h $(INCDIR)/sort.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/sort.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/sort.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/sort.c $(OUTPUT_OPTION)
-
-./spaces.$(objext): $(srcdir)/spaces.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/spaces.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/spaces.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/spaces.c $(OUTPUT_OPTION)
-
-./splay-tree.$(objext): $(srcdir)/splay-tree.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h $(INCDIR)/splay-tree.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/splay-tree.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/splay-tree.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/splay-tree.c $(OUTPUT_OPTION)
-
-./stack-limit.$(objext): $(srcdir)/stack-limit.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/stack-limit.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/stack-limit.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/stack-limit.c $(OUTPUT_OPTION)
-
-./stpcpy.$(objext): $(srcdir)/stpcpy.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/stpcpy.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/stpcpy.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/stpcpy.c $(OUTPUT_OPTION)
-
-./stpncpy.$(objext): $(srcdir)/stpncpy.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/stpncpy.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/stpncpy.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/stpncpy.c $(OUTPUT_OPTION)
-
-./strcasecmp.$(objext): $(srcdir)/strcasecmp.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strcasecmp.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strcasecmp.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strcasecmp.c $(OUTPUT_OPTION)
-
-./strchr.$(objext): $(srcdir)/strchr.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strchr.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strchr.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strchr.c $(OUTPUT_OPTION)
-
-./strdup.$(objext): $(srcdir)/strdup.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strdup.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strdup.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strdup.c $(OUTPUT_OPTION)
-
-./strerror.$(objext): $(srcdir)/strerror.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strerror.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strerror.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strerror.c $(OUTPUT_OPTION)
-
-./strncasecmp.$(objext): $(srcdir)/strncasecmp.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strncasecmp.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strncasecmp.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strncasecmp.c $(OUTPUT_OPTION)
-
-./strncmp.$(objext): $(srcdir)/strncmp.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strncmp.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strncmp.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strncmp.c $(OUTPUT_OPTION)
-
-./strndup.$(objext): $(srcdir)/strndup.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strndup.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strndup.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strndup.c $(OUTPUT_OPTION)
-
-./strnlen.$(objext): $(srcdir)/strnlen.c config.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strnlen.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strnlen.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strnlen.c $(OUTPUT_OPTION)
-
-./strrchr.$(objext): $(srcdir)/strrchr.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strrchr.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strrchr.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strrchr.c $(OUTPUT_OPTION)
-
-./strsignal.$(objext): $(srcdir)/strsignal.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strsignal.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strsignal.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strsignal.c $(OUTPUT_OPTION)
-
-./strstr.$(objext): $(srcdir)/strstr.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strstr.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strstr.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strstr.c $(OUTPUT_OPTION)
-
-./strtod.$(objext): $(srcdir)/strtod.c $(INCDIR)/ansidecl.h \
-	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strtod.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strtod.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strtod.c $(OUTPUT_OPTION)
-
-./strtol.$(objext): $(srcdir)/strtol.c config.h $(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strtol.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strtol.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strtol.c $(OUTPUT_OPTION)
-
-./strtoll.$(objext): $(srcdir)/strtoll.c config.h $(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strtoll.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strtoll.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strtoll.c $(OUTPUT_OPTION)
-
-./strtoul.$(objext): $(srcdir)/strtoul.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strtoul.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strtoul.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strtoul.c $(OUTPUT_OPTION)
-
-./strtoull.$(objext): $(srcdir)/strtoull.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strtoull.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strtoull.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strtoull.c $(OUTPUT_OPTION)
-
-./strverscmp.$(objext): $(srcdir)/strverscmp.c $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/strverscmp.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/strverscmp.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/strverscmp.c $(OUTPUT_OPTION)
-
-./timeval-utils.$(objext): $(srcdir)/timeval-utils.c config.h \
-	$(INCDIR)/timeval-utils.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/timeval-utils.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/timeval-utils.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/timeval-utils.c $(OUTPUT_OPTION)
-
-./tmpnam.$(objext): $(srcdir)/tmpnam.c
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/tmpnam.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/tmpnam.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/tmpnam.c $(OUTPUT_OPTION)
-
-./unlink-if-ordinary.$(objext): $(srcdir)/unlink-if-ordinary.c config.h \
-	$(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/unlink-if-ordinary.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/unlink-if-ordinary.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/unlink-if-ordinary.c $(OUTPUT_OPTION)
-
-./vasprintf.$(objext): $(srcdir)/vasprintf.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h $(srcdir)/vprintf-support.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vasprintf.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/vasprintf.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vasprintf.c $(OUTPUT_OPTION)
-
-./vfork.$(objext): $(srcdir)/vfork.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vfork.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/vfork.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vfork.c $(OUTPUT_OPTION)
-
-./vfprintf.$(objext): $(srcdir)/vfprintf.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vfprintf.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/vfprintf.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vfprintf.c $(OUTPUT_OPTION)
-
-./vprintf-support.$(objext): $(srcdir)/vprintf-support.c config.h \
-	$(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vprintf-support.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/vprintf-support.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vprintf-support.c $(OUTPUT_OPTION)
-
-./vprintf.$(objext): $(srcdir)/vprintf.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vprintf.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/vprintf.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vprintf.c $(OUTPUT_OPTION)
-
-./vsnprintf.$(objext): $(srcdir)/vsnprintf.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vsnprintf.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/vsnprintf.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vsnprintf.c $(OUTPUT_OPTION)
-
-./vsprintf.$(objext): $(srcdir)/vsprintf.c $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/vsprintf.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/vsprintf.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/vsprintf.c $(OUTPUT_OPTION)
-
-./waitpid.$(objext): $(srcdir)/waitpid.c config.h $(INCDIR)/ansidecl.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/waitpid.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/waitpid.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/waitpid.c $(OUTPUT_OPTION)
-
-./xasprintf.$(objext): $(srcdir)/xasprintf.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xasprintf.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/xasprintf.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xasprintf.c $(OUTPUT_OPTION)
-
-./xatexit.$(objext): $(srcdir)/xatexit.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xatexit.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/xatexit.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xatexit.c $(OUTPUT_OPTION)
-
-./xexit.$(objext): $(srcdir)/xexit.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xexit.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/xexit.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xexit.c $(OUTPUT_OPTION)
-
-./xmalloc.$(objext): $(srcdir)/xmalloc.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xmalloc.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/xmalloc.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xmalloc.c $(OUTPUT_OPTION)
-
-./xmemdup.$(objext): $(srcdir)/xmemdup.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xmemdup.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/xmemdup.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xmemdup.c $(OUTPUT_OPTION)
-
-./xstrdup.$(objext): $(srcdir)/xstrdup.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrdup.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/xstrdup.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xstrdup.c $(OUTPUT_OPTION)
-
-./xstrerror.$(objext): $(srcdir)/xstrerror.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrerror.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/xstrerror.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xstrerror.c $(OUTPUT_OPTION)
-
-./xstrndup.$(objext): $(srcdir)/xstrndup.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrndup.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/xstrndup.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xstrndup.c $(OUTPUT_OPTION)
-
-./xvasprintf.$(objext): $(srcdir)/xvasprintf.c config.h $(INCDIR)/ansidecl.h \
-	$(INCDIR)/libiberty.h $(srcdir)/vprintf-support.h
-	if [ x"$(PICFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(srcdir)/xvasprintf.c -o pic/$@; \
-	else true; fi
-	if [ x"$(NOASANFLAG)" != x ]; then \
-	  $(COMPILE.c) $(PICFLAG) $(NOASANFLAG) $(srcdir)/xvasprintf.c -o noasan/$@; \
-	else true; fi
-	$(COMPILE.c) $(srcdir)/xvasprintf.c $(OUTPUT_OPTION)
Index: GNU/binutils/create-2.28-libiberty-bugfixes-patch/binutils-2.28-new/libiberty/testsuite/demangle-expected
===================================================================
--- GNU/binutils/create-2.28-libiberty-bugfixes-patch/binutils-2.28-new/libiberty/testsuite/demangle-expected	(revision 257)
+++ GNU/binutils/create-2.28-libiberty-bugfixes-patch/binutils-2.28-new/libiberty/testsuite/demangle-expected	(nonexistent)
@@ -1,4691 +0,0 @@
-# This file holds test cases for the demangler.
-# Each test case looks like this:
-#  options
-#  input to be demangled
-#  expected output
-#
-#  Supported options:
-#    --format=<name>     Sets the demangling style.
-#    --no-params         There are two lines of expected output; the first
-#                        is with DMGL_PARAMS, the second is without it.
-#    --is-v3-ctor        Calls is_gnu_v3_mangled_ctor on input; expected
-#                        output is an integer representing ctor_kind.
-#    --is-v3-dtor        Likewise, but for dtors.
-#    --ret-postfix       Passes the DMGL_RET_POSTFIX option
-#
-#  For compatibility, just in case it matters, the options line may be
-#  empty, to mean --format=auto.  If it doesn't start with --, then it
-#  may contain only a format name.
-#
-# A line starting with `#' is ignored.
-# However, blank lines in this file are NOT ignored.
-#
---format=gnu --no-params
-AddAlignment__9ivTSolverUiP12ivInteractorP7ivTGlue
-ivTSolver::AddAlignment(unsigned int, ivInteractor *, ivTGlue *)
-ivTSolver::AddAlignment
-#
---format=gnu --no-params
-ArrowheadIntersects__9ArrowLineP9ArrowheadR6BoxObjP7Graphic
-ArrowLine::ArrowheadIntersects(Arrowhead *, BoxObj &, Graphic *)
-ArrowLine::ArrowheadIntersects
-#
---format=gnu --no-params
-ArrowheadIntersects__9ArrowLineP9ArrowheadO6BoxObjP7Graphic
-ArrowLine::ArrowheadIntersects(Arrowhead *, BoxObj &&, Graphic *)
-ArrowLine::ArrowheadIntersects
-#
---format=gnu --no-params
-AtEnd__13ivRubberGroup
-ivRubberGroup::AtEnd(void)
-ivRubberGroup::AtEnd
-#
---format=gnu --no-params
-BgFilter__9ivTSolverP12ivInteractor
-ivTSolver::BgFilter(ivInteractor *)
-ivTSolver::BgFilter
-#
---format=gnu --no-params
-Check__6UArrayi
-UArray::Check(int)
-UArray::Check
-#
---format=gnu --no-params
-CoreConstDecls__8TextCodeR7ostream
-TextCode::CoreConstDecls(ostream &)
-TextCode::CoreConstDecls
-#
---format=gnu --no-params
-CoreConstDecls__8TextCodeO7ostream
-TextCode::CoreConstDecls(ostream &&)
-TextCode::CoreConstDecls
-#
---format=gnu --no-params
-Detach__8StateVarP12StateVarView
-StateVar::Detach(StateVarView *)
-StateVar::Detach
-#
---format=gnu --no-params
-Done__9ComponentG8Iterator
-Component::Done(Iterator)
-Component::Done
-#
---format=gnu --no-params
-Effect__11RelateManipR7ivEvent
-RelateManip::Effect(ivEvent &)
-RelateManip::Effect
-#
---format=gnu --no-params
-Effect__11RelateManipO7ivEvent
-RelateManip::Effect(ivEvent &&)
-RelateManip::Effect
-#
---format=gnu --no-params
-FindFixed__FRP4CNetP4CNet
-FindFixed(CNet *&, CNet *)
-FindFixed
-#
---format=gnu --no-params
-FindFixed__FOP4CNetP4CNet
-FindFixed(CNet *&&, CNet *)
-FindFixed
-#
---format=gnu --no-params
-Fix48_abort__FR8twolongs
-Fix48_abort(twolongs &)
-Fix48_abort
-#
---format=gnu --no-params
-Fix48_abort__FO8twolongs
-Fix48_abort(twolongs &&)
-Fix48_abort
-#
---format=gnu --no-params
-GetBarInfo__15iv2_6_VScrollerP13ivPerspectiveRiT2
-iv2_6_VScroller::GetBarInfo(ivPerspective *, int &, int &)
-iv2_6_VScroller::GetBarInfo
-#
---format=gnu --no-params
-GetBarInfo__15iv2_6_VScrollerP13ivPerspectiveOiT2
-iv2_6_VScroller::GetBarInfo(ivPerspective *, int &&, int &&)
-iv2_6_VScroller::GetBarInfo
-#
---format=gnu --no-params
-GetBgColor__C9ivPainter
-ivPainter::GetBgColor(void) const
-ivPainter::GetBgColor
-#
---format=gnu --no-params
-InsertBody__15H_PullrightMenuii
-H_PullrightMenu::InsertBody(int, int)
-H_PullrightMenu::InsertBody
-#
---format=gnu --no-params
-InsertCharacter__9TextManipc
-TextManip::InsertCharacter(char)
-TextManip::InsertCharacter
-#
---format=gnu --no-params
-InsertToplevel__7ivWorldP12ivInteractorT1
-ivWorld::InsertToplevel(ivInteractor *, ivInteractor *)
-ivWorld::InsertToplevel
-#
---format=gnu --no-params
-InsertToplevel__7ivWorldP12ivInteractorT1iiUi
-ivWorld::InsertToplevel(ivInteractor *, ivInteractor *, int, int, unsigned int)
-ivWorld::InsertToplevel
-#
---format=gnu --no-params
-IsAGroup__FP11GraphicViewP11GraphicComp
-IsAGroup(GraphicView *, GraphicComp *)
-IsAGroup
-#
---format=gnu --no-params
-IsA__10ButtonCodeUl
-ButtonCode::IsA(unsigned long)
-ButtonCode::IsA
-#
---format=gnu --no-params
-ReadName__FR7istreamPc
-ReadName(istream &, char *)
-ReadName
-#
---format=gnu --no-params
-Redraw__13StringBrowseriiii
-StringBrowser::Redraw(int, int, int, int)
-StringBrowser::Redraw
-#
---format=gnu --no-params
-Rotate__13ivTransformerf
-ivTransformer::Rotate(float)
-ivTransformer::Rotate
-#
---format=gnu --no-params
-Rotated__C13ivTransformerf
-ivTransformer::Rotated(float) const
-ivTransformer::Rotated
-#
---format=gnu --no-params
-Round__Ff
-Round(float)
-Round
-#
---format=gnu --no-params
-SetExport__16MemberSharedNameUi
-MemberSharedName::SetExport(unsigned int)
-MemberSharedName::SetExport
-#
---format=gnu --no-params
-Set__14ivControlState13ControlStatusUi
-ivControlState::Set(ControlStatus, unsigned int)
-ivControlState::Set
-#
---format=gnu --no-params
-Set__5DFacePcii
-DFace::Set(char *, int, int)
-DFace::Set
-#
---format=gnu --no-params
-VConvert__9ivTSolverP12ivInteractorRP8TElementT2
-ivTSolver::VConvert(ivInteractor *, TElement *&, TElement *&)
-ivTSolver::VConvert
-#
---format=gnu --no-params
-VConvert__9ivTSolverP7ivTGlueRP8TElement
-ivTSolver::VConvert(ivTGlue *, TElement *&)
-ivTSolver::VConvert
-#
---format=gnu --no-params
-VOrder__9ivTSolverUiRP12ivInteractorT2
-ivTSolver::VOrder(unsigned int, ivInteractor *&, ivInteractor *&)
-ivTSolver::VOrder
-#
---format=gnu --no-params
-_10PageButton$__both
-PageButton::__both
-PageButton::__both
-#
---format=gnu --no-params
-_3RNG$singleMantissa
-RNG::singleMantissa
-RNG::singleMantissa
-#
---format=gnu --no-params
-_5IComp$_release
-IComp::_release
-IComp::_release
-#
---format=gnu --no-params
-_$_10BitmapComp
-BitmapComp::~BitmapComp(void)
-BitmapComp::~BitmapComp
-#
---format=gnu --no-params
-_$_9__io_defs
-__io_defs::~__io_defs(void)
-__io_defs::~__io_defs
-#
---format=gnu --no-params
-_$_Q23foo3bar
-foo::bar::~bar(void)
-foo::bar::~bar
-#
---format=gnu --no-params
-_$_Q33foo3bar4bell
-foo::bar::bell::~bell(void)
-foo::bar::bell::~bell
-#
---format=gnu --no-params
-__10ivTelltaleiP7ivGlyph
-ivTelltale::ivTelltale(int, ivGlyph *)
-ivTelltale::ivTelltale
-#
---format=gnu --no-params
-__10ivViewportiP12ivInteractorUi
-ivViewport::ivViewport(int, ivInteractor *, unsigned int)
-ivViewport::ivViewport
-#
---format=gnu --no-params
-__10ostrstream
-ostrstream::ostrstream(void)
-ostrstream::ostrstream
-#
---format=gnu --no-params
-__10ostrstreamPcii
-ostrstream::ostrstream(char *, int, int)
-ostrstream::ostrstream
-#
---format=gnu --no-params
-__11BitmapTablei
-BitmapTable::BitmapTable(int)
-BitmapTable::BitmapTable
-#
---format=gnu --no-params
-__12ViewportCodeP12ViewportComp
-ViewportCode::ViewportCode(ViewportComp *)
-ViewportCode::ViewportCode
-#
---format=gnu --no-params
-__12iv2_6_Borderii
-iv2_6_Border::iv2_6_Border(int, int)
-iv2_6_Border::iv2_6_Border
-#
---format=gnu --no-params
-__12ivBreak_Listl
-ivBreak_List::ivBreak_List(long)
-ivBreak_List::ivBreak_List
-#
---format=gnu --no-params
-__14iv2_6_MenuItemiP12ivInteractor
-iv2_6_MenuItem::iv2_6_MenuItem(int, ivInteractor *)
-iv2_6_MenuItem::iv2_6_MenuItem
-#
---format=gnu --no-params
-__20DisplayList_IteratorR11DisplayList
-DisplayList_Iterator::DisplayList_Iterator(DisplayList &)
-DisplayList_Iterator::DisplayList_Iterator
-#
---format=gnu --no-params
-__3fooRT0
-foo::foo(foo &)
-foo::foo
-#
---format=gnu --no-params
-__3fooiN31
-foo::foo(int, int, int, int)
-foo::foo
-#
---format=gnu --no-params
-__3fooiRT0iT2iT2
-foo::foo(int, foo &, int, foo &, int, foo &)
-foo::foo
-#
---format=gnu --no-params
-__6KeyMapPT0
-KeyMap::KeyMap(KeyMap *)
-KeyMap::KeyMap
-#
---format=gnu --no-params
-__8ArrowCmdP6EditorUiUi
-ArrowCmd::ArrowCmd(Editor *, unsigned int, unsigned int)
-ArrowCmd::ArrowCmd
-#
---format=gnu --no-params
-__9F_EllipseiiiiP7Graphic
-F_Ellipse::F_Ellipse(int, int, int, int, Graphic *)
-F_Ellipse::F_Ellipse
-#
---format=gnu --no-params
-__9FrameDataP9FrameCompi
-FrameData::FrameData(FrameComp *, int)
-FrameData::FrameData
-#
---format=gnu --no-params
-__9HVGraphicP9CanvasVarP7Graphic
-HVGraphic::HVGraphic(CanvasVar *, Graphic *)
-HVGraphic::HVGraphic
-#
---format=gnu --no-params
-__Q23foo3bar
-foo::bar::bar(void)
-foo::bar::bar
-#
---format=gnu --no-params
-__Q33foo3bar4bell
-foo::bar::bell::bell(void)
-foo::bar::bell::bell
-#
---format=gnu --no-params
-__aa__3fooRT0
-foo::operator&&(foo &)
-foo::operator&&
-#
---format=gnu --no-params
-__aad__3fooRT0
-foo::operator&=(foo &)
-foo::operator&=
-#
---format=gnu --no-params
-__ad__3fooRT0
-foo::operator&(foo &)
-foo::operator&
-#
---format=gnu --no-params
-__adv__3fooRT0
-foo::operator/=(foo &)
-foo::operator/=
-#
---format=gnu --no-params
-__aer__3fooRT0
-foo::operator^=(foo &)
-foo::operator^=
-#
---format=gnu --no-params
-__als__3fooRT0
-foo::operator<<=(foo &)
-foo::operator<<=
-#
---format=gnu --no-params
-__amd__3fooRT0
-foo::operator%=(foo &)
-foo::operator%=
-#
---format=gnu --no-params
-__ami__3fooRT0
-foo::operator-=(foo &)
-foo::operator-=
-#
---format=gnu --no-params
-__aml__3FixRT0
-Fix::operator*=(Fix &)
-Fix::operator*=
-#
---format=gnu --no-params
-__aml__5Fix16i
-Fix16::operator*=(int)
-Fix16::operator*=
-#
---format=gnu --no-params
-__aml__5Fix32RT0
-Fix32::operator*=(Fix32 &)
-Fix32::operator*=
-#
---format=gnu --no-params
-__aor__3fooRT0
-foo::operator|=(foo &)
-foo::operator|=
-#
---format=gnu --no-params
-__apl__3fooRT0
-foo::operator+=(foo &)
-foo::operator+=
-#
---format=gnu --no-params
-__ars__3fooRT0
-foo::operator>>=(foo &)
-foo::operator>>=
-#
---format=gnu --no-params
-__as__3fooRT0
-foo::operator=(foo &)
-foo::operator=
-#
---format=gnu --no-params
-__cl__3fooRT0
-foo::operator()(foo &)
-foo::operator()
-#
---format=gnu --no-params
-__cl__6Normal
-Normal::operator()(void)
-Normal::operator()
-#
---format=gnu --no-params
-__cl__6Stringii
-String::operator()(int, int)
-String::operator()
-#
---format=gnu --no-params
-__cm__3fooRT0
-foo::operator, (foo &)
-foo::operator, 
-#
---format=gnu --no-params
-__co__3foo
-foo::operator~(void)
-foo::operator~
-#
---format=gnu --no-params
-__dl__3fooPv
-foo::operator delete(void *)
-foo::operator delete
-#
---format=gnu --no-params
-__dv__3fooRT0
-foo::operator/(foo &)
-foo::operator/
-#
---format=gnu --no-params
-__eq__3fooRT0
-foo::operator==(foo &)
-foo::operator==
-#
---format=gnu --no-params
-__er__3fooRT0
-foo::operator^(foo &)
-foo::operator^
-#
---format=gnu --no-params
-__ge__3fooRT0
-foo::operator>=(foo &)
-foo::operator>=
-#
---format=gnu --no-params
-__gt__3fooRT0
-foo::operator>(foo &)
-foo::operator>
-#
---format=gnu --no-params
-__le__3fooRT0
-foo::operator<=(foo &)
-foo::operator<=
-#
---format=gnu --no-params
-__ls__3fooRT0
-foo::operator<<(foo &)
-foo::operator<<
-#
---format=gnu --no-params
-__ls__FR7ostreamPFR3ios_R3ios
-operator<<(ostream &, ios &(*)(ios &))
-operator<<
-#
---format=gnu --no-params
-__ls__FR7ostreamR3Fix
-operator<<(ostream &, Fix &)
-operator<<
-#
---format=gnu --no-params
-__lt__3fooRT0
-foo::operator<(foo &)
-foo::operator<
-#
---format=gnu --no-params
-__md__3fooRT0
-foo::operator%(foo &)
-foo::operator%
-#
---format=gnu --no-params
-__mi__3fooRT0
-foo::operator-(foo &)
-foo::operator-
-#
---format=gnu --no-params
-__ml__3fooRT0
-foo::operator*(foo &)
-foo::operator*
-#
---format=gnu --no-params
-__mm__3fooi
-foo::operator--(int)
-foo::operator--
-#
---format=gnu --no-params
-__ne__3fooRT0
-foo::operator!=(foo &)
-foo::operator!=
-#
---format=gnu --no-params
-__nt__3foo
-foo::operator!(void)
-foo::operator!
-#
---format=gnu --no-params
-__nw__3fooi
-foo::operator new(int)
-foo::operator new
-#
---format=gnu --no-params
-__oo__3fooRT0
-foo::operator||(foo &)
-foo::operator||
-#
---format=gnu --no-params
-__opPc__3foo
-foo::operator char *(void)
-foo::operator char *
-#
---format=gnu --no-params
-__opi__3foo
-foo::operator int(void)
-foo::operator int
-#
---format=gnu --no-params
-__or__3fooRT0
-foo::operator|(foo &)
-foo::operator|
-#
---format=gnu --no-params
-__pl__3fooRT0
-foo::operator+(foo &)
-foo::operator+
-#
---format=gnu --no-params
-__pp__3fooi
-foo::operator++(int)
-foo::operator++
-#
---format=gnu --no-params
-__rf__3foo
-foo::operator->(void)
-foo::operator->
-#
---format=gnu --no-params
-__rm__3fooRT0
-foo::operator->*(foo &)
-foo::operator->*
-#
---format=gnu --no-params
-__rs__3fooRT0
-foo::operator>>(foo &)
-foo::operator>>
-#
---format=gnu --no-params
-_new_Fix__FUs
-_new_Fix(unsigned short)
-_new_Fix
-#
---format=gnu --no-params
-_vt.foo
-foo virtual table
-foo virtual table
-#
---format=gnu --no-params
-_vt.foo.bar
-foo::bar virtual table
-foo::bar virtual table
-#
---format=gnu --no-params
-_vt$foo
-foo virtual table
-foo virtual table
-#
---format=gnu --no-params
-_vt$foo$bar
-foo::bar virtual table
-foo::bar virtual table
-#
---format=gnu --no-params
-append__7ivGlyphPT0
-ivGlyph::append(ivGlyph *)
-ivGlyph::append
-#
---format=gnu --no-params
-clearok__FP7_win_sti
-clearok(_win_st *, int)
-clearok
-#
---format=gnu --no-params
-complexfunc2__FPFPc_i
-complexfunc2(int (*)(char *))
-complexfunc2
-#
---format=gnu --no-params
-complexfunc3__FPFPFPl_s_i
-complexfunc3(int (*)(short (*)(long *)))
-complexfunc3
-#
---format=gnu --no-params
-complexfunc4__FPFPFPc_s_i
-complexfunc4(int (*)(short (*)(char *)))
-complexfunc4
-#
---format=gnu --no-params
-complexfunc5__FPFPc_PFl_i
-complexfunc5(int (*(*)(char *))(long))
-complexfunc5
-#
---format=gnu --no-params
-complexfunc6__FPFPi_PFl_i
-complexfunc6(int (*(*)(int *))(long))
-complexfunc6
-#
---format=gnu --no-params
-complexfunc7__FPFPFPc_i_PFl_i
-complexfunc7(int (*(*)(int (*)(char *)))(long))
-complexfunc7
-#
---format=gnu --no-params
-foo__FiN30
-foo(int, int, int, int)
-foo
-#
---format=gnu --no-params
-foo__FiR3fooiT1iT1
-foo(int, foo &, int, foo &, int, foo &)
-foo
-#
---format=gnu --no-params
-foo___3barl
-bar::foo_(long)
-bar::foo_
-#
---format=gnu --no-params
-insert__15ivClippingStacklRP8_XRegion
-ivClippingStack::insert(long, _XRegion *&)
-ivClippingStack::insert
-#
---format=gnu --no-params
-insert__16ChooserInfo_ListlR11ChooserInfo
-ChooserInfo_List::insert(long, ChooserInfo &)
-ChooserInfo_List::insert
-#
---format=gnu --no-params
-insert__17FontFamilyRepListlRP15ivFontFamilyRep
-FontFamilyRepList::insert(long, ivFontFamilyRep *&)
-FontFamilyRepList::insert
-#
---format=gnu --no-params
-leaveok__FP7_win_stc
-leaveok(_win_st *, char)
-leaveok
-#
---format=gnu --no-params
-left_mover__C7ivMFKitP12ivAdjustableP7ivStyle
-ivMFKit::left_mover(ivAdjustable *, ivStyle *) const
-ivMFKit::left_mover
-#
---format=gnu --no-params
-overload1arg__FSc
-overload1arg(signed char)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__FUc
-overload1arg(unsigned char)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__FUi
-overload1arg(unsigned int)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__FUl
-overload1arg(unsigned long)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__FUs
-overload1arg(unsigned short)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__Fc
-overload1arg(char)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__Fd
-overload1arg(double)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__Ff
-overload1arg(float)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__Fi
-overload1arg(int)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__Fl
-overload1arg(long)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__Fs
-overload1arg(short)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__Fv
-overload1arg(void)
-overload1arg
-#
---format=gnu --no-params
-overloadargs__Fi
-overloadargs(int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fii
-overloadargs(int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiii
-overloadargs(int, int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiiii
-overloadargs(int, int, int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiiiii
-overloadargs(int, int, int, int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiiiiii
-overloadargs(int, int, int, int, int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiiiiiii
-overloadargs(int, int, int, int, int, int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiiiiiiii
-overloadargs(int, int, int, int, int, int, int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiiiiiiiii
-overloadargs(int, int, int, int, int, int, int, int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiiiiiiiiii
-overloadargs(int, int, int, int, int, int, int, int, int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiiiiiiiiiii
-overloadargs(int, int, int, int, int, int, int, int, int, int, int)
-overloadargs
-#
---format=gnu --no-params
-poke__8ivRasterUlUlffff
-ivRaster::poke(unsigned long, unsigned long, float, float, float, float)
-ivRaster::poke
-#
---format=gnu --no-params
-polar__Fdd
-polar(double, double)
-polar
-#
---format=gnu --no-params
-scale__13ivTransformerff
-ivTransformer::scale(float, float)
-ivTransformer::scale
-#
---format=gnu --no-params
-sgetn__7filebufPci
-filebuf::sgetn(char *, int)
-filebuf::sgetn
-#
---format=gnu --no-params
-shift__FP5_FrepiT0
-shift(_Frep *, int, _Frep *)
-shift
-#
---format=gnu --no-params
-test__C6BitSeti
-BitSet::test(int) const
-BitSet::test
-#
---format=gnu --no-params
-test__C6BitSetii
-BitSet::test(int, int) const
-BitSet::test
-#
---format=gnu --no-params
-text_source__8Documentl
-Document::text_source(long)
-Document::text_source
-#
---format=gnu --no-params
-variance__6Erlangd
-Erlang::variance(double)
-Erlang::variance
-#
---format=gnu --no-params
-view__14DocumentViewerP8ItemViewP11TabularItem
-DocumentViewer::view(ItemView *, TabularItem *)
-DocumentViewer::view
-#
---format=gnu --no-params
-xy_extents__11ivExtensionffff
-ivExtension::xy_extents(float, float, float, float)
-ivExtension::xy_extents
-#
---format=gnu --no-params
-zero__8osMemoryPvUi
-osMemory::zero(void *, unsigned int)
-osMemory::zero
-#
---format=gnu --no-params
-_2T4$N
-T4::N
-T4::N
-#
---format=gnu --no-params
-_Q22T42t1$N
-T4::t1::N
-T4::t1::N
-#
---format=gnu --no-params
-get__2T1
-T1::get(void)
-T1::get
-#
---format=gnu --no-params
-get__Q22T11a
-T1::a::get(void)
-T1::a::get
-#
---format=gnu --no-params
-get__Q32T11a1b
-T1::a::b::get(void)
-T1::a::b::get
-#
---format=gnu --no-params
-get__Q42T11a1b1c
-T1::a::b::c::get(void)
-T1::a::b::c::get
-#
---format=gnu --no-params
-get__Q52T11a1b1c1d
-T1::a::b::c::d::get(void)
-T1::a::b::c::d::get
-#
---format=gnu --no-params
-put__2T1i
-T1::put(int)
-T1::put
-#
---format=gnu --no-params
-put__Q22T11ai
-T1::a::put(int)
-T1::a::put
-#
---format=gnu --no-params
-put__Q32T11a1bi
-T1::a::b::put(int)
-T1::a::b::put
-#
---format=gnu --no-params
-put__Q42T11a1b1ci
-T1::a::b::c::put(int)
-T1::a::b::c::put
-#
---format=gnu --no-params
-put__Q52T11a1b1c1di
-T1::a::b::c::d::put(int)
-T1::a::b::c::d::put
-#
---format=gnu --no-params
-bar__3fooPv
-foo::bar(void *)
-foo::bar
-#
---format=gnu --no-params
-bar__C3fooPv
-foo::bar(void *) const
-foo::bar
-#
---format=gnu --no-params
-__eq__3fooRT0
-foo::operator==(foo &)
-foo::operator==
-#
---format=gnu --no-params
-__eq__C3fooR3foo
-foo::operator==(foo &) const
-foo::operator==
-#
---format=gnu --no-params
-elem__t6vector1Zdi
-vector<double>::elem(int)
-vector<double>::elem
-#
---format=gnu --no-params
-elem__t6vector1Zii
-vector<int>::elem(int)
-vector<int>::elem
-#
---format=gnu --no-params
-__t6vector1Zdi
-vector<double>::vector(int)
-vector<double>::vector
-#
---format=gnu --no-params
-__t6vector1Zii
-vector<int>::vector(int)
-vector<int>::vector
-#
---format=gnu --no-params
-_$_t6vector1Zdi
-vector<double>::~vector(int)
-vector<double>::~vector
-#
---format=gnu --no-params
-_$_t6vector1Zii
-vector<int>::~vector(int)
-vector<int>::~vector
-#
---format=gnu --no-params
-__nw__t2T11ZcUi
-T1<char>::operator new(unsigned int)
-T1<char>::operator new
-#
---format=gnu --no-params
-__nw__t2T11Z1tUi
-T1<t>::operator new(unsigned int)
-T1<t>::operator new
-#
---format=gnu --no-params
-__dl__t2T11ZcPv
-T1<char>::operator delete(void *)
-T1<char>::operator delete
-#
---format=gnu --no-params
-__dl__t2T11Z1tPv
-T1<t>::operator delete(void *)
-T1<t>::operator delete
-#
---format=gnu --no-params
-__t2T11Zci
-T1<char>::T1(int)
-T1<char>::T1
-#
---format=gnu --no-params
-__t2T11Zc
-T1<char>::T1(void)
-T1<char>::T1
-#
---format=gnu --no-params
-__t2T11Z1ti
-T1<t>::T1(int)
-T1<t>::T1
-#
---format=gnu --no-params
-__t2T11Z1t
-T1<t>::T1(void)
-T1<t>::T1
-#
---format=gnu --no-params
-__Q2t4List1Z10VHDLEntity3Pix
-List<VHDLEntity>::Pix::Pix(void)
-List<VHDLEntity>::Pix::Pix
-#
---format=gnu --no-params
-__Q2t4List1Z10VHDLEntity3PixPQ2t4List1Z10VHDLEntity7element
-List<VHDLEntity>::Pix::Pix(List<VHDLEntity>::element *)
-List<VHDLEntity>::Pix::Pix
-#
---format=gnu --no-params
-__Q2t4List1Z10VHDLEntity3PixRCQ2t4List1Z10VHDLEntity3Pix
-List<VHDLEntity>::Pix::Pix(List<VHDLEntity>::Pix const &)
-List<VHDLEntity>::Pix::Pix
-#
---format=gnu --no-params
-__Q2t4List1Z10VHDLEntity3PixOCQ2t4List1Z10VHDLEntity3Pix
-List<VHDLEntity>::Pix::Pix(List<VHDLEntity>::Pix const &&)
-List<VHDLEntity>::Pix::Pix
-#
---format=gnu --no-params
-__Q2t4List1Z10VHDLEntity7elementRC10VHDLEntityPT0
-List<VHDLEntity>::element::element(VHDLEntity const &, List<VHDLEntity>::element *)
-List<VHDLEntity>::element::element
-#
---format=gnu --no-params
-__Q2t4List1Z10VHDLEntity7elementOC10VHDLEntityPT0
-List<VHDLEntity>::element::element(VHDLEntity const &&, List<VHDLEntity>::element *)
-List<VHDLEntity>::element::element
-#
---format=gnu --no-params
-__Q2t4List1Z10VHDLEntity7elementRCQ2t4List1Z10VHDLEntity7element
-List<VHDLEntity>::element::element(List<VHDLEntity>::element const &)
-List<VHDLEntity>::element::element
-#
---format=gnu --no-params
-__cl__C11VHDLLibraryGt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
-VHDLLibrary::operator()(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >) const
-VHDLLibrary::operator()
-#
---format=gnu --no-params
-__cl__Ct4List1Z10VHDLEntityRCQ2t4List1Z10VHDLEntity3Pix
-List<VHDLEntity>::operator()(List<VHDLEntity>::Pix const &) const
-List<VHDLEntity>::operator()
-#
---format=gnu --no-params
-__ne__FPvRCQ2t4List1Z10VHDLEntity3Pix
-operator!=(void *, List<VHDLEntity>::Pix const &)
-operator!=
-#
---format=gnu --no-params
-__ne__FPvRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
-operator!=(void *, PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > const &)
-operator!=
-#
---format=gnu --no-params
-__t4List1Z10VHDLEntityRCt4List1Z10VHDLEntity
-List<VHDLEntity>::List(List<VHDLEntity> const &)
-List<VHDLEntity>::List
-#
---format=gnu --no-params
-__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
-PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(void)
-PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX
-#
---format=gnu --no-params
-__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityP14VHDLLibraryRepGQ2t4List1Z10VHDLEntity3Pix
-PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(VHDLLibraryRep *, List<VHDLEntity>::Pix)
-PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX
-#
---format=gnu --no-params
-__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
-PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > const &)
-PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX
-#
---format=gnu --no-params
-__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityOCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
-PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > const &&)
-PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX
-#
---format=gnu --no-params
-nextE__C11VHDLLibraryRt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
-VHDLLibrary::nextE(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > &) const
-VHDLLibrary::nextE
-#
---format=gnu --no-params
-next__Ct4List1Z10VHDLEntityRQ2t4List1Z10VHDLEntity3Pix
-List<VHDLEntity>::next(List<VHDLEntity>::Pix &) const
-List<VHDLEntity>::next
-#
---format=gnu --no-params
-_GLOBAL_$D$set
-global destructors keyed to set
-global destructors keyed to set
-#
---format=gnu --no-params
-_GLOBAL_$I$set
-global constructors keyed to set
-global constructors keyed to set
-#
---format=gnu --no-params
-__as__t5ListS1ZUiRCt5ListS1ZUi
-ListS<unsigned int>::operator=(ListS<unsigned int> const &)
-ListS<unsigned int>::operator=
-#
---format=gnu --no-params
-__cl__Ct5ListS1ZUiRCQ2t5ListS1ZUi3Vix
-ListS<unsigned int>::operator()(ListS<unsigned int>::Vix const &) const
-ListS<unsigned int>::operator()
-#
---format=gnu --no-params
-__cl__Ct5SetLS1ZUiRCQ2t5SetLS1ZUi3Vix
-SetLS<unsigned int>::operator()(SetLS<unsigned int>::Vix const &) const
-SetLS<unsigned int>::operator()
-#
---format=gnu --no-params
-__t10ListS_link1ZUiRCUiPT0
-ListS_link<unsigned int>::ListS_link(unsigned int const &, ListS_link<unsigned int> *)
-ListS_link<unsigned int>::ListS_link
-#
---format=gnu --no-params
-__t10ListS_link1ZUiRCt10ListS_link1ZUi
-ListS_link<unsigned int>::ListS_link(ListS_link<unsigned int> const &)
-ListS_link<unsigned int>::ListS_link
-#
---format=gnu --no-params
-__t5ListS1ZUiRCt5ListS1ZUi
-ListS<unsigned int>::ListS(ListS<unsigned int> const &)
-ListS<unsigned int>::ListS
-#
---format=gnu --no-params
-next__Ct5ListS1ZUiRQ2t5ListS1ZUi3Vix
-ListS<unsigned int>::next(ListS<unsigned int>::Vix &) const
-ListS<unsigned int>::next
-#
---format=gnu --no-params
-__ne__FPvRCQ2t5SetLS1ZUi3Vix
-operator!=(void *, SetLS<unsigned int>::Vix const &)
-operator!=
-#
---format=gnu --no-params
-__t8ListElem1Z5LabelRt4List1Z5Label
-ListElem<Label>::ListElem(List<Label> &)
-ListElem<Label>::ListElem
-#
---format=gnu --no-params
-__t8BDDHookV1ZPcRCPc
-BDDHookV<char *>::BDDHookV(char *const &)
-BDDHookV<char *>::BDDHookV
-#
---format=gnu --no-params
-_vt$t8BDDHookV1ZPc
-BDDHookV<char *> virtual table
-BDDHookV<char *> virtual table
-#
---format=gnu --no-params
-__ne__FPvRCQ211BDDFunction4VixB
-operator!=(void *, BDDFunction::VixB const &)
-operator!=
-#
---format=gnu --no-params
-__eq__FPvRCQ211BDDFunction4VixB
-operator==(void *, BDDFunction::VixB const &)
-operator==
-#
---format=gnu --no-params
-relativeId__CQ36T_phi210T_preserve8FPC_nextRCQ26T_phi210T_preserveRC10Parameters
-T_phi2::T_preserve::FPC_next::relativeId(T_phi2::T_preserve const &, Parameters const &) const
-T_phi2::T_preserve::FPC_next::relativeId
-#
---format=lucid --no-params
-WS__FR7istream
-WS(istream &)
-WS
-#
---format=lucid --no-params
-__aa__3fooFR3foo
-foo::operator&&(foo &)
-foo::operator&&
-#
---format=lucid --no-params
-__aad__3fooFR3foo
-foo::operator&=(foo &)
-foo::operator&=
-#
---format=lucid --no-params
-__ad__3fooFR3foo
-foo::operator&(foo &)
-foo::operator&
-#
---format=lucid --no-params
-__adv__3fooFR3foo
-foo::operator/=(foo &)
-foo::operator/=
-#
---format=lucid --no-params
-__adv__7complexF7complex
-complex::operator/=(complex)
-complex::operator/=
-#
---format=lucid --no-params
-__aer__3fooFR3foo
-foo::operator^=(foo &)
-foo::operator^=
-#
---format=lucid --no-params
-__als__3fooFR3foo
-foo::operator<<=(foo &)
-foo::operator<<=
-#
---format=lucid --no-params
-__amd__3fooFR3foo
-foo::operator%=(foo &)
-foo::operator%=
-#
---format=lucid --no-params
-__ami__3fooFR3foo
-foo::operator-=(foo &)
-foo::operator-=
-#
---format=lucid --no-params
-__amu__3fooFR3foo
-foo::operator*=(foo &)
-foo::operator*=
-#
---format=lucid --no-params
-__amu__7complexF7complex
-complex::operator*=(complex)
-complex::operator*=
-#
---format=lucid --no-params
-__aor__3fooFR3foo
-foo::operator|=(foo &)
-foo::operator|=
-#
---format=lucid --no-params
-__apl__3fooFR3foo
-foo::operator+=(foo &)
-foo::operator+=
-#
---format=lucid --no-params
-__ars__3fooFR3foo
-foo::operator>>=(foo &)
-foo::operator>>=
-#
---format=lucid --no-params
-__as__18istream_withassignFP9streambuf
-istream_withassign::operator=(streambuf *)
-istream_withassign::operator=
-#
---format=lucid --no-params
-__as__18istream_withassignFR7istream
-istream_withassign::operator=(istream &)
-istream_withassign::operator=
-#
---format=lucid --no-params
-__as__3fooFR3foo
-foo::operator=(foo &)
-foo::operator=
-#
---format=lucid --no-params
-__as__3iosFR3ios
-ios::operator=(ios &)
-ios::operator=
-#
---format=lucid --no-params
-__cl__3fooFR3foo
-foo::operator()(foo &)
-foo::operator()
-#
---format=lucid --no-params
-__cm__3fooFR3foo
-foo::operator, (foo &)
-foo::operator, 
-#
---format=lucid --no-params
-__co__3fooFv
-foo::operator~(void)
-foo::operator~
-#
---format=lucid --no-params
-__ct__10istrstreamFPc
-istrstream::istrstream(char *)
-istrstream::istrstream
-#
---format=lucid --no-params
-__ct__10istrstreamFPci
-istrstream::istrstream(char *, int)
-istrstream::istrstream
-#
---format=lucid --no-params
-__ct__10ostrstreamFPciT2
-ostrstream::ostrstream(char *, int, int)
-ostrstream::ostrstream
-#
---format=lucid --no-params
-__ct__10ostrstreamFv
-ostrstream::ostrstream(void)
-ostrstream::ostrstream
-#
---format=lucid --no-params
-__ct__10smanip_intFPFR3iosi_R3iosi
-smanip_int::smanip_int(ios &(*)(ios &, int), int)
-smanip_int::smanip_int
-#
---format=lucid --no-params
-__ct__10smanip_intFPFO3iosi_O3iosi
-smanip_int::smanip_int(ios &&(*)(ios &&, int), int)
-smanip_int::smanip_int
-#
---format=lucid --no-params
-__ct__11fstreambaseFi
-fstreambase::fstreambase(int)
-fstreambase::fstreambase
-#
---format=lucid --no-params
-__ct__11fstreambaseFiPcT1
-fstreambase::fstreambase(int, char *, int)
-fstreambase::fstreambase
-#
---format=lucid --no-params
-__ct__11fstreambaseFv
-fstreambase::fstreambase(void)
-fstreambase::fstreambase
-#
---format=lucid --no-params
-__ct__11smanip_longFPFR3iosl_R3iosl
-smanip_long::smanip_long(ios &(*)(ios &, long), long)
-smanip_long::smanip_long
-#
---format=lucid --no-params
-__ct__11smanip_longFPFO3iosl_O3iosl
-smanip_long::smanip_long(ios &&(*)(ios &&, long), long)
-smanip_long::smanip_long
-#
---format=lucid --no-params
-__ct__11stdiostreamFP4FILE
-stdiostream::stdiostream(FILE *)
-stdiostream::stdiostream
-#
---format=lucid --no-params
-__ct__12strstreambufFPFl_PvPFPv_v
-strstreambuf::strstreambuf(void *(*)(long), void (*)(void *))
-strstreambuf::strstreambuf
-#
---format=lucid --no-params
-__ct__12strstreambufFPUciT1
-strstreambuf::strstreambuf(unsigned char *, int, unsigned char *)
-strstreambuf::strstreambuf
-#
---format=lucid --no-params
-__ct__12strstreambufFPciT1
-strstreambuf::strstreambuf(char *, int, char *)
-strstreambuf::strstreambuf
-#
---format=lucid --no-params
-__ct__12strstreambufFi
-strstreambuf::strstreambuf(int)
-strstreambuf::strstreambuf
-#
---format=lucid --no-params
-__ct__12strstreambufFv
-strstreambuf::strstreambuf(void)
-strstreambuf::strstreambuf
-#
---format=lucid --no-params
-__ct__13strstreambaseFPciT1
-strstreambase::strstreambase(char *, int, char *)
-strstreambase::strstreambase
-#
---format=lucid --no-params
-__ct__3fooFR3foo
-foo::foo(foo &)
-foo::foo
-#
---format=lucid --no-params
-__ct__3fooFO3foo
-foo::foo(foo &&)
-foo::foo
-#
---format=lucid --no-params
-__ct__3fooFi
-foo::foo(int)
-foo::foo
-#
---format=lucid --no-params
-__ct__3fooFiN31
-foo::foo(int, int, int, int)
-foo::foo
-#
---format=lucid --no-params
-__ct__3fooFiR3fooT1T2T1T2
-foo::foo(int, foo &, int, foo &, int, foo &)
-foo::foo
-#
---format=lucid --no-params
-__ct__3fooFiO3fooT1T2T1T2
-foo::foo(int, foo &&, int, foo &&, int, foo &&)
-foo::foo
-#
---format=lucid --no-params
-__ct__3iosFP9streambuf
-ios::ios(streambuf *)
-ios::ios
-#
---format=lucid --no-params
-__ct__7filebufFiPcT1
-filebuf::filebuf(int, char *, int)
-filebuf::filebuf
-#
---format=lucid --no-params
-__ct__7fstreamFiPcT1
-fstream::fstream(int, char *, int)
-fstream::fstream
-#
---format=lucid --no-params
-__ct__7istreamFP9streambuf
-istream::istream(streambuf *)
-istream::istream
-#
---format=lucid --no-params
-__ct__7istreamFP9streambufiP7ostream
-istream::istream(streambuf *, int, ostream *)
-istream::istream
-#
---format=lucid --no-params
-__ct__7istreamFiPcT1
-istream::istream(int, char *, int)
-istream::istream
-#
---format=lucid --no-params
-__ct__7istreamFiT1P7ostream
-istream::istream(int, int, ostream *)
-istream::istream
-#
---format=lucid --no-params
-__ct__7ostreamFP9streambuf
-ostream::ostream(streambuf *)
-ostream::ostream
-#
---format=lucid --no-params
-__ct__7ostreamFiPc
-ostream::ostream(int, char *)
-ostream::ostream
-#
---format=lucid --no-params
-__ct__8ifstreamFiPcT1
-ifstream::ifstream(int, char *, int)
-ifstream::ifstream
-#
---format=lucid --no-params
-__ct__Q23foo3barFv
-foo::bar::bar(void)
-foo::bar::bar
-#
---format=lucid --no-params
-__ct__Q33foo3bar4bellFv
-foo::bar::bell::bell(void)
-foo::bar::bell::bell
-#
---format=lucid --no-params
-__dl__3fooSFPv
-foo::operator delete(void *) static
-foo::operator delete
-#
---format=lucid --no-params
-__dl__FPv
-operator delete(void *)
-operator delete
-#
---format=lucid --no-params
-__dt__10istrstreamFv
-istrstream::~istrstream(void)
-istrstream::~istrstream
-#
---format=lucid --no-params
-__dt__Q23foo3barFv
-foo::bar::~bar(void)
-foo::bar::~bar
-#
---format=lucid --no-params
-__dt__Q33foo3bar4bellFv
-foo::bar::bell::~bell(void)
-foo::bar::bell::~bell
-#
---format=lucid --no-params
-__dv__3fooFR3foo
-foo::operator/(foo &)
-foo::operator/
-#
---format=lucid --no-params
-__dv__F7complexT1
-operator/(complex, complex)
-operator/
-#
---format=lucid --no-params
-__eq__3fooFR3foo
-foo::operator==(foo &)
-foo::operator==
-#
---format=lucid --no-params
-__er__3fooFR3foo
-foo::operator^(foo &)
-foo::operator^
-#
---format=lucid --no-params
-__ge__3fooFR3foo
-foo::operator>=(foo &)
-foo::operator>=
-#
---format=lucid --no-params
-__gt__3fooFR3foo
-foo::operator>(foo &)
-foo::operator>
-#
---format=lucid --no-params
-__le__3fooFR3foo
-foo::operator<=(foo &)
-foo::operator<=
-#
---format=lucid --no-params
-__ls__3fooFR3foo
-foo::operator<<(foo &)
-foo::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFP9streambuf
-ostream::operator<<(streambuf *)
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFPFR3ios_R3ios
-ostream::operator<<(ios &(*)(ios &))
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFPv
-ostream::operator<<(void *)
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFUi
-ostream::operator<<(unsigned int)
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFUl
-ostream::operator<<(unsigned long)
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFd
-ostream::operator<<(double)
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFf
-ostream::operator<<(float)
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFi
-ostream::operator<<(int)
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFl
-ostream::operator<<(long)
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__FR7ostream7complex
-operator<<(ostream &, complex)
-operator<<
-#
---format=lucid --no-params
-__lt__3fooFR3foo
-foo::operator<(foo &)
-foo::operator<
-#
---format=lucid --no-params
-__md__3fooFR3foo
-foo::operator%(foo &)
-foo::operator%
-#
---format=lucid --no-params
-__mi__3fooFR3foo
-foo::operator-(foo &)
-foo::operator-
-#
---format=lucid --no-params
-__ml__3fooFR3foo
-foo::operator*(foo &)
-foo::operator*
-#
---format=lucid --no-params
-__ml__F7complexT1
-operator*(complex, complex)
-operator*
-#
---format=lucid --no-params
-__mm__3fooFi
-foo::operator--(int)
-foo::operator--
-#
---format=lucid --no-params
-__ne__3fooFR3foo
-foo::operator!=(foo &)
-foo::operator!=
-#
---format=lucid --no-params
-__nt__3fooFv
-foo::operator!(void)
-foo::operator!
-#
---format=lucid --no-params
-__nw__3fooSFi
-foo::operator new(int) static
-foo::operator new
-#
---format=lucid --no-params
-__nw__FUi
-operator new(unsigned int)
-operator new
-#
---format=lucid --no-params
-__nw__FUiPv
-operator new(unsigned int, void *)
-operator new
-#
---format=lucid --no-params
-__oo__3fooFR3foo
-foo::operator||(foo &)
-foo::operator||
-#
---format=lucid --no-params
-__opPc__3fooFv
-foo::operator char *(void)
-foo::operator char *
-#
---format=lucid --no-params
-__opi__3fooFv
-foo::operator int(void)
-foo::operator int
-#
---format=lucid --no-params
-__or__3fooFR3foo
-foo::operator|(foo &)
-foo::operator|
-#
---format=lucid --no-params
-__pl__3fooFR3foo
-foo::operator+(foo &)
-foo::operator+
-#
---format=lucid --no-params
-__pp__3fooFi
-foo::operator++(int)
-foo::operator++
-#
---format=lucid --no-params
-__pt__3fooFv
-foo::operator->(void)
-foo::operator->
-#
---format=lucid --no-params
-__rm__3fooFR3foo
-foo::operator->*(foo &)
-foo::operator->*
-#
---format=lucid --no-params
-__rs__3fooFR3foo
-foo::operator>>(foo &)
-foo::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFP9streambuf
-istream::operator>>(streambuf *)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFPFR3ios_R3ios
-istream::operator>>(ios &(*)(ios &))
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFPFR7istream_R7istream
-istream::operator>>(istream &(*)(istream &))
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFPUc
-istream::operator>>(unsigned char *)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFPc
-istream::operator>>(char *)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFRUi
-istream::operator>>(unsigned int &)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFRUl
-istream::operator>>(unsigned long &)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFRUs
-istream::operator>>(unsigned short &)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFRd
-istream::operator>>(double &)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFRf
-istream::operator>>(float &)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFRi
-istream::operator>>(int &)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFRl
-istream::operator>>(long &)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFRs
-istream::operator>>(short &)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__FR7istreamR7complex
-operator>>(istream &, complex &)
-operator>>
-#
---format=lucid --no-params
-__vtbl__10istrstream
-istrstream virtual table
-istrstream virtual table
-#
---format=lucid --no-params
-__vtbl__17ostream__iostream__19iostream_withassign
-iostream_withassign::ostream__iostream virtual table
-iostream_withassign::ostream__iostream virtual table
-#
---format=lucid --no-params
-__vtbl__3ios
-ios virtual table
-ios virtual table
-#
---format=lucid --no-params
-__vtbl__3ios__13strstreambase
-strstreambase::ios virtual table
-strstreambase::ios virtual table
-#
---format=lucid --no-params
-abs__F7complex
-abs(complex)
-abs
-#
---format=lucid --no-params
-allocate__9streambufFv
-streambuf::allocate(void)
-streambuf::allocate
-#
---format=lucid --no-params
-attach__11fstreambaseFi
-fstreambase::attach(int)
-fstreambase::attach
-#
---format=lucid --no-params
-bitalloc__3iosSFv
-ios::bitalloc(void) static
-ios::bitalloc
-#
---format=lucid --no-params
-chr__FiT1
-chr(int, int)
-chr
-#
---format=lucid --no-params
-complex_error__FR11c_exception
-complex_error(c_exception &)
-complex_error
-#
---format=lucid --no-params
-complexfunc2__FPFPc_i
-complexfunc2(int (*)(char *))
-complexfunc2
-#
---format=lucid --no-params
-complexfunc3__FPFPFPl_s_i
-complexfunc3(int (*)(short (*)(long *)))
-complexfunc3
-#
---format=lucid --no-params
-complexfunc4__FPFPFPc_s_i
-complexfunc4(int (*)(short (*)(char *)))
-complexfunc4
-#
---format=lucid --no-params
-complexfunc5__FPFPc_PFl_i
-complexfunc5(int (*(*)(char *))(long))
-complexfunc5
-#
---format=lucid --no-params
-complexfunc6__FPFPi_PFl_i
-complexfunc6(int (*(*)(int *))(long))
-complexfunc6
-#
---format=lucid --no-params
-complexfunc7__FPFPFPc_i_PFl_i
-complexfunc7(int (*(*)(int (*)(char *)))(long))
-complexfunc7
-#
---format=lucid --no-params
-complicated_put__7ostreamFc
-ostream::complicated_put(char)
-ostream::complicated_put
-#
---format=lucid --no-params
-conv10__FlPc
-conv10(long, char *)
-conv10
-#
---format=lucid --no-params
-conv16__FUlPc
-conv16(unsigned long, char *)
-conv16
-#
---format=lucid --no-params
-dec__FR3ios
-dec(ios &)
-dec
-#
---format=lucid --no-params
-dec__Fli
-dec(long, int)
-dec
-#
---format=lucid --no-params
-dofield__FP7ostreamPciT2T3
-dofield(ostream *, char *, int, char *, int)
-dofield
-#
---format=lucid --no-params
-flags__3iosFl
-ios::flags(long)
-ios::flags
-#
---format=lucid --no-params
-flags__3iosFv
-ios::flags(void)
-ios::flags
-#
---format=lucid --no-params
-foo__FiN31
-foo(int, int, int, int)
-foo
-#
---format=lucid --no-params
-foo__FiR3fooT1T2T1T2
-foo(int, foo &, int, foo &, int, foo &)
-foo
-#
---format=lucid --no-params
-foo__FiO3fooT1T2T1T2
-foo(int, foo &&, int, foo &&, int, foo &&)
-foo
-#
---format=lucid --no-params
-foo___3barFl
-bar::foo_(long)
-bar::foo_
-#
---format=lucid --no-params
-get__7istreamFPcic
-istream::get(char *, int, char)
-istream::get
-#
---format=lucid --no-params
-get__7istreamFR9streambufc
-istream::get(streambuf &, char)
-istream::get
-#
---format=lucid --no-params
-get_complicated__7istreamFRUc
-istream::get_complicated(unsigned char &)
-istream::get_complicated
-#
---format=lucid --no-params
-get_complicated__7istreamFRc
-istream::get_complicated(char &)
-istream::get_complicated
-#
---format=lucid --no-params
-getline__7istreamFPUcic
-istream::getline(unsigned char *, int, char)
-istream::getline
-#
---format=lucid --no-params
-getline__7istreamFPcic
-istream::getline(char *, int, char)
-istream::getline
-#
---format=lucid --no-params
-ignore__7istreamFiT1
-istream::ignore(int, int)
-istream::ignore
-#
---format=lucid --no-params
-init__12strstreambufFPciT1
-strstreambuf::init(char *, int, char *)
-strstreambuf::init
-#
---format=lucid --no-params
-init__3iosFP9streambuf
-ios::init(streambuf *)
-ios::init
-#
---format=lucid --no-params
-initcount__13Iostream_init
-Iostream_init::initcount
-Iostream_init::initcount
-#
---format=lucid --no-params
-ipfx__7istreamFi
-istream::ipfx(int)
-istream::ipfx
-#
---format=lucid --no-params
-ls_complicated__7ostreamFUc
-ostream::ls_complicated(unsigned char)
-ostream::ls_complicated
-#
---format=lucid --no-params
-ls_complicated__7ostreamFc
-ostream::ls_complicated(char)
-ostream::ls_complicated
-#
---format=lucid --no-params
-overload1arg__FSc
-overload1arg(signed char)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__FUc
-overload1arg(unsigned char)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__FUi
-overload1arg(unsigned int)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__FUl
-overload1arg(unsigned long)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__FUs
-overload1arg(unsigned short)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__Fc
-overload1arg(char)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__Fd
-overload1arg(double)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__Ff
-overload1arg(float)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__Fi
-overload1arg(int)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__Fl
-overload1arg(long)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__Fs
-overload1arg(short)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__Fv
-overload1arg(void)
-overload1arg
-#
---format=lucid --no-params
-overloadargs__FiN21
-overloadargs(int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiN31
-overloadargs(int, int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiN41
-overloadargs(int, int, int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiN51
-overloadargs(int, int, int, int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiN61
-overloadargs(int, int, int, int, int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiN71
-overloadargs(int, int, int, int, int, int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiN81
-overloadargs(int, int, int, int, int, int, int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiN91
-overloadargs(int, int, int, int, int, int, int, int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiN91N11
-overloadargs(int, int, int, int, int, int, int, int, int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiT1
-overloadargs(int, int)
-overloadargs
-#
---format=lucid --no-params
-polar__FdT1
-polar(double, double)
-polar
-#
---format=lucid --no-params
-pow__F7complexT1
-pow(complex, complex)
-pow
-#
---format=lucid --no-params
-pow__F7complexd
-pow(complex, double)
-pow
-#
---format=lucid --no-params
-pow__F7complexi
-pow(complex, int)
-pow
-#
---format=lucid --no-params
-pow__Fd7complex
-pow(double, complex)
-pow
-#
---format=lucid --no-params
-pstart__FPciT2
-pstart(char *, int, int)
-pstart
-#
---format=lucid --no-params
-put__7ostreamFc
-ostream::put(char)
-ostream::put
-#
---format=lucid --no-params
-read__7istreamFPci
-istream::read(char *, int)
-istream::read
-#
---format=lucid --no-params
-resetiosflags__FR3iosl
-resetiosflags(ios &, long)
-resetiosflags
-#
---format=lucid --no-params
-restore_errno__FRi
-restore_errno(int &)
-restore_errno
-#
---format=lucid --no-params
-rs_complicated__7istreamFRUc
-istream::rs_complicated(unsigned char &)
-istream::rs_complicated
-#
---format=lucid --no-params
-rs_complicated__7istreamFRc
-istream::rs_complicated(char &)
-istream::rs_complicated
-#
---format=lucid --no-params
-seekg__7istreamFl8seek_dir
-istream::seekg(long, seek_dir)
-istream::seekg
-#
---format=lucid --no-params
-seekoff__12strstreambufFl8seek_diri
-strstreambuf::seekoff(long, seek_dir, int)
-strstreambuf::seekoff
-#
---format=lucid --no-params
-seekoff__9streambufFlQ2_3ios12ios_seek_diri
-streambuf::seekoff(long, ios::ios_seek_dir, int)
-streambuf::seekoff
-#
---format=lucid --no-params
-seekpos__9streambufFli
-streambuf::seekpos(long, int)
-streambuf::seekpos
-#
---format=lucid --no-params
-set_new_handler__FPFv_v
-set_new_handler(void (*)(void))
-set_new_handler
-#
---format=lucid --no-params
-setb__9streambufFPcT1i
-streambuf::setb(char *, char *, int)
-streambuf::setb
-#
---format=lucid --no-params
-setb__FR3iosi
-setb(ios &, int)
-setb
-#
---format=lucid --no-params
-setbuf__11fstreambaseFPci
-fstreambase::setbuf(char *, int)
-fstreambase::setbuf
-#
---format=lucid --no-params
-setbuf__9streambufFPUci
-streambuf::setbuf(unsigned char *, int)
-streambuf::setbuf
-#
---format=lucid --no-params
-setbuf__9streambufFPciT2
-streambuf::setbuf(char *, int, int)
-streambuf::setbuf
-#
---format=lucid --no-params
-setf__3iosFlT1
-ios::setf(long, long)
-ios::setf
-#
---format=lucid --no-params
-setfill__FR3iosi
-setfill(ios &, int)
-setfill
-#
---format=lucid --no-params
-setg__9streambufFPcN21
-streambuf::setg(char *, char *, char *)
-streambuf::setg
-#
---format=lucid --no-params
-setp__9streambufFPcT1
-streambuf::setp(char *, char *)
-streambuf::setp
-#
---format=lucid --no-params
-tie__3iosFP7ostream
-ios::tie(ostream *)
-ios::tie
-#
---format=lucid --no-params
-uconv10__FUlPc
-uconv10(unsigned long, char *)
-uconv10
-#
---format=lucid --no-params
-xget__7istreamFPc
-istream::xget(char *)
-istream::xget
-#
---format=lucid --no-params
-xsgetn__9streambufFPci
-streambuf::xsgetn(char *, int)
-streambuf::xsgetn
-#
---format=arm --no-params
-__dt__21T5__pt__11_PFiPPdPv_iFv
-T5<int (*)(int, double **, void *)>::~T5(void)
-T5<int (*)(int, double **, void *)>::~T5
-#
---format=arm --no-params
-__ct__1cFi
-c::c(int)
-c::c
-#
---format=arm --no-params
-__dt__11T5__pt__2_iFv
-T5<int>::~T5(void)
-T5<int>::~T5
-#
---format=arm --no-params
-__dt__11T5__pt__2_cFv
-T5<char>::~T5(void)
-T5<char>::~T5
-#
---format=arm --no-params
-__ct__2T2Fi
-T2::T2(int)
-T2::T2
-#
---format=arm --no-params
-__dt__2T1Fv
-T1::~T1(void)
-T1::~T1
-#
---format=arm --no-params
-__dt__12T5__pt__3_1xFv
-T5<x>::~T5(void)
-T5<x>::~T5
-#
---format=arm --no-params
-__dt__17T5__pt__8_PFcPv_iFv
-T5<int (*)(char, void *)>::~T5(void)
-T5<int (*)(char, void *)>::~T5
-#
---format=arm --no-params
-__ct__21T5__pt__11_PFiPPdPv_iFi
-T5<int (*)(int, double **, void *)>::T5(int)
-T5<int (*)(int, double **, void *)>::T5
-#
---format=arm --no-params
-__amd__FR2T2i
-operator%=(T2 &, int)
-operator%=
-#
---format=arm --no-params
-__adv__FR2T2i
-operator/=(T2 &, int)
-operator/=
-#
---format=arm --no-params
-__amu__FR2T2i
-operator*=(T2 &, int)
-operator*=
-#
---format=arm --no-params
-__ami__FR2T2i
-operator-=(T2 &, int)
-operator-=
-#
---format=arm --no-params
-__apl__FR2T2i
-operator+=(T2 &, int)
-operator+=
-#
---format=arm --no-params
-__nw__2T1SFUi
-T1::operator new(unsigned int) static
-T1::operator new
-#
---format=arm --no-params
-__dl__2T1SFPv
-T1::operator delete(void *) static
-T1::operator delete
-#
---format=arm --no-params
-put__2T7SFi
-T7::put(int) static
-T7::put
-#
---format=arm --no-params
-__dl__12T5__pt__3_1xSFPv
-T5<x>::operator delete(void *) static
-T5<x>::operator delete
-#
---format=arm --no-params
-h__FUc
-h(unsigned char)
-h
-#
---format=arm --no-params
-f__Fic
-f(int, char)
-f
-#
---format=arm --no-params
-h__FUi
-h(unsigned int)
-h
-#
---format=arm --no-params
-h__Fci
-h(char, int)
-h
-#
---format=arm --no-params
-h__FUl
-h(unsigned long)
-h
-#
---format=arm --no-params
-h__Fcl
-h(char, long)
-h
-#
---format=arm --no-params
-h__FUs
-h(unsigned short)
-h
-#
---format=arm --no-params
-h__Fcs
-h(char, short)
-h
-#
---format=arm --no-params
-X__12T5__pt__3_1x
-T5<x>::X
-T5<x>::X
-#
---format=arm --no-params
-__ct__11T5__pt__2_iFi
-T5<int>::T5(int)
-T5<int>::T5
-#
---format=arm --no-params
-__ct__11T5__pt__2_cFi
-T5<char>::T5(int)
-T5<char>::T5
-#
---format=arm --no-params
-h__FcT1
-h(char, char)
-h
-#
---format=arm --no-params
-f__Ficd
-f(int, char, double)
-f
-#
---format=arm --no-params
-__dl__17T5__pt__8_PFcPv_iSFPv
-T5<int (*)(char, void *)>::operator delete(void *) static
-T5<int (*)(char, void *)>::operator delete
-#
---format=arm --no-params
-X__17T5__pt__8_PFcPv_i
-T5<int (*)(char, void *)>::X
-T5<int (*)(char, void *)>::X
-#
---format=arm --no-params
-__ct__12T5__pt__3_1xFi
-T5<x>::T5(int)
-T5<x>::T5
-#
---format=arm --no-params
-__dl__21T5__pt__11_PFiPPdPv_iSFPv
-T5<int (*)(int, double **, void *)>::operator delete(void *) static
-T5<int (*)(int, double **, void *)>::operator delete
-#
---format=arm --no-params
-__std__foo
-global destructors keyed to foo
-global destructors keyed to foo
-#
---format=arm --no-params
-__sti__bar
-global constructors keyed to bar
-global constructors keyed to bar
-#
---format=arm --no-params
-f__FicdPcPFci_v
-f(int, char, double, char *, void (*)(char, int))
-f
-#
---format=arm --no-params
-f__FicdPcPFic_v
-f(int, char, double, char *, void (*)(int, char))
-f
-#
---format=arm --no-params
-get__2T7SFv
-T7::get(void) static
-T7::get
-#
---format=arm --no-params
-X__21T5__pt__11_PFiPPdPv_i
-T5<int (*)(int, double **, void *)>::X
-T5<int (*)(int, double **, void *)>::X
-#
---format=arm --no-params
-__dl__11T5__pt__2_iSFPv
-T5<int>::operator delete(void *) static
-T5<int>::operator delete
-#
---format=arm --no-params
-__dl__11T5__pt__2_cSFPv
-T5<char>::operator delete(void *) static
-T5<char>::operator delete
-#
---format=arm --no-params
-h__Fc
-h(char)
-h
-#
---format=arm --no-params
-h__Fd
-h(double)
-h
-#
---format=arm --no-params
-h__Ff
-h(float)
-h
-#
---format=arm --no-params
-h__Fi
-h(int)
-h
-#
---format=arm --no-params
-f__Fi
-f(int)
-f
-#
---format=arm --no-params
-h__Fl
-h(long)
-h
-#
---format=arm --no-params
-h__Fs
-h(short)
-h
-#
---format=arm --no-params
-X__11T5__pt__2_c
-T5<char>::X
-T5<char>::X
-#
---format=arm --no-params
-X__11T5__pt__2_i
-T5<int>::X
-T5<int>::X
-#
---format=arm --no-params
-__ct__17T5__pt__8_PFcPv_iFi
-T5<int (*)(char, void *)>::T5(int)
-T5<int (*)(char, void *)>::T5
-#
---format=arm --no-params
-f__FicdPc
-f(int, char, double, char *)
-f
-#
---format=arm --no-params
-__nw__FUi
-operator new(unsigned int)
-operator new
-#
---format=arm --no-params
-__ct__Q3_2T11a1bSFi
-T1::a::b::b(int) static
-T1::a::b::b
-#
---format=arm --no-params
-__dt__Q3_2T11a1bSFi
-T1::a::b::~b(int) static
-T1::a::b::~b
-#
---format=arm --no-params
-put__Q3_2T11a1bSFi
-T1::a::b::put(int) static
-T1::a::b::put
-#
---format=arm --no-params
-get__Q2_2T11aSFv
-T1::a::get(void) static
-T1::a::get
-#
---format=arm --no-params
-put__2T1SFi
-T1::put(int) static
-T1::put
-#
---format=arm --no-params
-put__Q5_2T11a1b1c1dSFi
-T1::a::b::c::d::put(int) static
-T1::a::b::c::d::put
-#
---format=arm --no-params
-get__Q4_2T11a1b1cSFv
-T1::a::b::c::get(void) static
-T1::a::b::c::get
-#
---format=arm --no-params
-put__Q2_2T11aSFi
-T1::a::put(int) static
-T1::a::put
-#
---format=arm --no-params
-put__Q4_2T11a1b1cSFi
-T1::a::b::c::put(int) static
-T1::a::b::c::put
-#
---format=arm --no-params
-get__Q3_2T11a1bSFv
-T1::a::b::get(void) static
-T1::a::b::get
-#
---format=arm --no-params
-get__2T1SFv
-T1::get(void) static
-T1::get
-#
---format=arm --no-params
-get__Q5_2T11a1b1c1dSFv
-T1::a::b::c::d::get(void) static
-T1::a::b::c::d::get
-#
---format=arm --no-params
-__dt__11T1__pt__2_cFv
-T1<char>::~T1(void)
-T1<char>::~T1
-#
---format=arm --no-params
-__dt__12T1__pt__3_1tFv
-T1<t>::~T1(void)
-T1<t>::~T1
-#
---format=arm --no-params
-__dl__12T1__pt__3_1tSFPv
-T1<t>::operator delete(void *) static
-T1<t>::operator delete
-#
---format=arm --no-params
-__ct__11T1__pt__2_cFi
-T1<char>::T1(int)
-T1<char>::T1
-#
---format=arm --no-params
-__ct__11T1__pt__2_cFv
-T1<char>::T1(void)
-T1<char>::T1
-#
---format=arm --no-params
-__ct__12T1__pt__3_1tFi
-T1<t>::T1(int)
-T1<t>::T1
-#
---format=arm --no-params
-__ct__12T1__pt__3_1tFv
-T1<t>::T1(void)
-T1<t>::T1
-#
---format=arm --no-params
-__dl__11T1__pt__2_cSFPv
-T1<char>::operator delete(void *) static
-T1<char>::operator delete
-#
---format=arm --no-params
-bar__3fooFPv
-foo::bar(void *)
-foo::bar
-#
---format=arm --no-params
-bar__3fooCFPv
-foo::bar(void *) const
-foo::bar
-#
---format=arm --no-params
-__eq__3fooFR3foo
-foo::operator==(foo &)
-foo::operator==
-#
---format=arm --no-params
-__eq__3fooCFR3foo
-foo::operator==(foo &) const
-foo::operator==
-#
---format=arm --no-params
-elem__15vector__pt__2_dFi
-vector<double>::elem(int)
-vector<double>::elem
-#
---format=arm --no-params
-elem__15vector__pt__2_iFi
-vector<int>::elem(int)
-vector<int>::elem
-#
---format=arm --no-params
-__ct__15vector__pt__2_dFi
-vector<double>::vector(int)
-vector<double>::vector
-#
---format=arm --no-params
-__ct__15vector__pt__2_iFi
-vector<int>::vector(int)
-vector<int>::vector
-#
---format=arm --no-params
-__ct__25DListNode__pt__9_R6RLabelFR6RLabelP25DListNode__pt__9_R6RLabelT2
-DListNode<RLabel &>::DListNode(RLabel &, DListNode<RLabel &> *, DListNode<RLabel &> *)
-DListNode<RLabel &>::DListNode
-#
---format=arm --no-params
-__ct__25DListNode__pt__9_O6RLabelFO6RLabelP25DListNode__pt__9_O6RLabelT2
-DListNode<RLabel &&>::DListNode(RLabel &&, DListNode<RLabel &&> *, DListNode<RLabel &&> *)
-DListNode<RLabel &&>::DListNode
-#
---format=arm --no-params
-bar__3fooFiT16FooBar
-foo::bar(int, int, FooBar)
-foo::bar
-#
---format=arm --no-params
-bar__3fooFPiN51PdN37PcN211T1iN215
-foo::bar(int *, int *, int *, int *, int *, int *, double *, double *, double *, double *, char *, char *, char *, int *, int, int, int)
-foo::bar
-#
---format=hp --no-params
-__amd__FR2T2i
-operator%=(T2 &, int)
-operator%=
-#
---format=hp --no-params
-__adv__FR2T2i
-operator/=(T2 &, int)
-operator/=
-#
---format=hp --no-params
-__amu__FR2T2i
-operator*=(T2 &, int)
-operator*=
-#
---format=hp --no-params
-__ami__FR2T2i
-operator-=(T2 &, int)
-operator-=
-#
---format=hp --no-params
-__apl__FR2T2i
-operator+=(T2 &, int)
-operator+=
-#
---format=hp --no-params
-__nw__2T1SFUi
-T1::operator new(unsigned int) static
-T1::operator new
-#
---format=hp --no-params
-__dl__2T1SFPv
-T1::operator delete(void *) static
-T1::operator delete
-#
---format=hp --no-params
-put__2T7SFi
-T7::put(int) static
-T7::put
-#
---format=hp --no-params
-h__FUc
-h(unsigned char)
-h
-#
---format=hp --no-params
-f__Fic
-f(int, char)
-f
-#
---format=hp --no-params
-h__FUi
-h(unsigned int)
-h
-#
---format=hp --no-params
-h__Fci
-h(char, int)
-h
-#
---format=hp --no-params
-h__FUl
-h(unsigned long)
-h
-#
---format=hp --no-params
-h__Fcl
-h(char, long)
-h
-#
---format=hp --no-params
-h__FUs
-h(unsigned short)
-h
-#
---format=hp --no-params
-h__Fcs
-h(char, short)
-h
-#
---format=hp --no-params
-h__FcT1
-h(char, char)
-h
-#
---format=hp --no-params
-f__Ficd
-f(int, char, double)
-f
-#
---format=hp --no-params
-f__FicdPcPFci_v
-f(int, char, double, char *, void (*)(char, int))
-f
-#
---format=hp --no-params
-f__FicdPcPFic_v
-f(int, char, double, char *, void (*)(int, char))
-f
-#
---format=hp --no-params
-get__2T7SFv
-T7::get(void) static
-T7::get
-#
---format=hp --no-params
-h__Fc
-h(char)
-h
-#
---format=hp --no-params
-h__Fd
-h(double)
-h
-#
---format=hp --no-params
-h__Ff
-h(float)
-h
-#
---format=hp --no-params
-h__Fi
-h(int)
-h
-#
---format=hp --no-params
-f__Fi
-f(int)
-f
-#
---format=hp --no-params
-h__Fl
-h(long)
-h
-#
---format=hp --no-params
-h__Fs
-h(short)
-h
-#
---format=hp --no-params
-f__FicdPc
-f(int, char, double, char *)
-f
-#
---format=hp --no-params
-__nw__FUi
-operator new(unsigned int)
-operator new
-#
---format=hp --no-params
-__ct__Q3_2T11a1bSFi
-T1::a::b::b(int) static
-T1::a::b::b
-#
---format=hp --no-params
-__dt__Q3_2T11a1bSFi
-T1::a::b::~b(int) static
-T1::a::b::~b
-#
---format=hp --no-params
-put__Q3_2T11a1bSFi
-T1::a::b::put(int) static
-T1::a::b::put
-#
---format=hp --no-params
-get__Q2_2T11aSFv
-T1::a::get(void) static
-T1::a::get
-#
---format=hp --no-params
-put__2T1SFi
-T1::put(int) static
-T1::put
-#
---format=hp --no-params
-put__Q5_2T11a1b1c1dSFi
-T1::a::b::c::d::put(int) static
-T1::a::b::c::d::put
-#
---format=hp --no-params
-get__Q4_2T11a1b1cSFv
-T1::a::b::c::get(void) static
-T1::a::b::c::get
-#
---format=hp --no-params
-put__Q2_2T11aSFi
-T1::a::put(int) static
-T1::a::put
-#
---format=hp --no-params
-put__Q4_2T11a1b1cSFi
-T1::a::b::c::put(int) static
-T1::a::b::c::put
-#
---format=hp --no-params
-get__Q3_2T11a1bSFv
-T1::a::b::get(void) static
-T1::a::b::get
-#
---format=hp --no-params
-get__2T1SFv
-T1::get(void) static
-T1::get
-#
---format=hp --no-params
-get__Q5_2T11a1b1c1dSFv
-T1::a::b::c::d::get(void) static
-T1::a::b::c::d::get
-#
---format=hp --no-params
-bar__3fooFPv
-foo::bar(void *)
-foo::bar
-#
---format=hp --no-params
-bar__3fooCFPv
-foo::bar(void *) const
-foo::bar
-#
---format=hp --no-params
-__eq__3fooFR3foo
-foo::operator==(foo &)
-foo::operator==
-#
---format=hp --no-params
-__eq__3fooCFR3foo
-foo::operator==(foo &) const
-foo::operator==
-#
---format=hp --no-params
-bar__3fooFiT16FooBar
-foo::bar(int, int, FooBar)
-foo::bar
-#
---format=hp --no-params
-bar__3fooFPiN51PdN37PcN211T1iN215
-foo::bar(int *, int *, int *, int *, int *, int *, double *, double *, double *, double *, char *, char *, char *, int *, int, int, int)
-foo::bar
-#
---format=hp --no-params
-__dt__2T5XTPFiPPdPv_i__Fv
-T5<int (*)(int, double **, void *)>::~T5(void)
-T5<int (*)(int, double **, void *)>::~T5
-#
---format=hp --no-params
-__ct__1cFi
-c::c(int)
-c::c
-#
---format=hp --no-params
-__dt__2T5XTi__Fv
-T5<int>::~T5(void)
-T5<int>::~T5
-#
---format=hp --no-params
-__dt__2T5XTc__Fv
-T5<char>::~T5(void)
-T5<char>::~T5
-#
---format=hp --no-params
-__ct__2T2Fi
-T2::T2(int)
-T2::T2
-#
---format=hp --no-params
-__dt__2T1Fv
-T1::~T1(void)
-T1::~T1
-#
---format=hp --no-params
-__dt__2T5XT1x__Fv
-T5<x>::~T5(void)
-T5<x>::~T5
-#
---format=hp --no-params
-__dt__2T5XTPFcPv_i__Fv
-T5<int (*)(char, void *)>::~T5(void)
-T5<int (*)(char, void *)>::~T5
-#
---format=hp --no-params
-__ct__2T5XTPFiPPdPv_i__Fi
-T5<int (*)(int, double **, void *)>::T5(int)
-T5<int (*)(int, double **, void *)>::T5
-#
---format=hp --no-params
-__dl__2T5XT1x__SFPv
-T5<x>::operator delete(void *) static
-T5<x>::operator delete
-#
---format=hp --no-params
-X__2T5XT1x
-T5<x>::X
-T5<x>::X
-#
---format=hp --no-params
-__ct__2T5XTi__Fi
-T5<int>::T5(int)
-T5<int>::T5
-#
---format=hp --no-params
-__ct__2T5XTc__Fi
-T5<char>::T5(int)
-T5<char>::T5
-#
---format=hp --no-params
-__dl__2T5XTPFcPv_i__SFPv
-T5<int (*)(char, void *)>::operator delete(void *) static
-T5<int (*)(char, void *)>::operator delete
-#
---format=hp --no-params
-X__2T5XTPFcPv_i
-T5<int (*)(char, void *)>::X
-T5<int (*)(char, void *)>::X
-#
---format=hp --no-params
-__ct__2T5XT1x__Fi
-T5<x>::T5(int)
-T5<x>::T5
-#
---format=hp --no-params
-__dl__2T5XTPFiPPdPv_i__SFPv
-T5<int (*)(int, double **, void *)>::operator delete(void *) static
-T5<int (*)(int, double **, void *)>::operator delete
-#
---format=hp --no-params
-X__2T5XTPFiPPdPv_i
-T5<int (*)(int, double **, void *)>::X
-T5<int (*)(int, double **, void *)>::X
-#
---format=hp --no-params
-__dl__2T5XTi__SFPv
-T5<int>::operator delete(void *) static
-T5<int>::operator delete
-#
---format=hp --no-params
-__dl__2T5XTc__SFPv
-T5<char>::operator delete(void *) static
-T5<char>::operator delete
-#
---format=hp --no-params
-X__2T5XTc
-T5<char>::X
-T5<char>::X
-#
---format=hp --no-params
-X__2T5XTi
-T5<int>::X
-T5<int>::X
-#
---format=hp --no-params
-__ct__2T5XTPFcPv_i__Fi
-T5<int (*)(char, void *)>::T5(int)
-T5<int (*)(char, void *)>::T5
-#
---format=hp --no-params
-__dt__2T1XTc__Fv
-T1<char>::~T1(void)
-T1<char>::~T1
-#
---format=hp --no-params
-__dt__2T1XT1t__Fv
-T1<t>::~T1(void)
-T1<t>::~T1
-#
---format=hp --no-params
-__dl__2T1XT1t__SFPv
-T1<t>::operator delete(void *) static
-T1<t>::operator delete
-#
---format=hp --no-params
-__ct__2T1XTc__Fi
-T1<char>::T1(int)
-T1<char>::T1
-#
---format=hp --no-params
-__ct__2T1XTc__Fv
-T1<char>::T1(void)
-T1<char>::T1
-#
---format=hp --no-params
-__ct__2T1XT1t__Fi
-T1<t>::T1(int)
-T1<t>::T1
-#
---format=hp --no-params
-__ct__2T1XT1t__Fv
-T1<t>::T1(void)
-T1<t>::T1
-#
---format=hp --no-params
-__dl__2T1XTc__SFPv
-T1<char>::operator delete(void *) static
-T1<char>::operator delete
-#
---format=hp --no-params
-elem__6vectorXTd__Fi
-vector<double>::elem(int)
-vector<double>::elem
-#
---format=hp --no-params
-elem__6vectorXTi__Fi
-vector<int>::elem(int)
-vector<int>::elem
-#
---format=hp --no-params
-__ct__6vectorXTd__Fi
-vector<double>::vector(int)
-vector<double>::vector
-#
---format=hp --no-params
-__ct__6vectorXTi__Fi
-vector<int>::vector(int)
-vector<int>::vector
-#
---format=hp --no-params
-__ct__9DListNodeXTR6RLabel__FR6RLabelP9DListNodeXTR6RLabel_T2
-DListNode<RLabel &>::DListNode(RLabel &, DListNode<RLabel &> *, DListNode<RLabel &> *)
-DListNode<RLabel &>::DListNode
-#
---format=hp --no-params
-__ct__9DListNodeXTO6RLabel__FO6RLabelP9DListNodeXTO6RLabel_T2
-DListNode<RLabel &&>::DListNode(RLabel &&, DListNode<RLabel &&> *, DListNode<RLabel &&> *)
-DListNode<RLabel &&>::DListNode
-#
---format=hp --no-params
-elem__6vectorXTiUP34__Fi
-vector<int,34U>::elem(int)
-vector<int,34U>::elem
-#
---format=hp --no-params
-elem__6vectorXUP2701Td__Fi
-vector<2701U,double>::elem(int)
-vector<2701U,double>::elem
-#
---format=hp --no-params
-elem__6vectorXTiSP334__Fi
-vector<int,334>::elem(int)
-vector<int,334>::elem
-#
---format=hp --no-params
-elem__6vectorXTiSN67__Fi
-vector<int,-67>::elem(int)
-vector<int,-67>::elem
-#
---format=hp --no-params
-elem__6vectorXTiSM__SCFPPd
-vector<int,-2147483648>::elem(double **) static const
-vector<int,-2147483648>::elem
-#
---format=hp --no-params
-elem__6vectorXTiSN67UP4000TRs__Fi
-vector<int,-67,4000U,short &>::elem(int)
-vector<int,-67,4000U,short &>::elem
-#
---format=hp --no-params
-elem__6vectorXTiSN67UP4000TOs__Fi
-vector<int,-67,4000U,short &&>::elem(int)
-vector<int,-67,4000U,short &&>::elem
-#
---format=hp --no-params
-elem__6vectorXTiSN67TRdTFPv_i__Fi
-vector<int,-67,double &,int (void *)>::elem(int)
-vector<int,-67,double &,int (void *)>::elem
-#
---format=hp --no-params
-elem__6vectorXTiSN67TOdTFPv_i__Fi
-vector<int,-67,double &&,int (void *)>::elem(int)
-vector<int,-67,double &&,int (void *)>::elem
-#
---format=hp --no-params
-X__6vectorXTiSN67TdTPvUP5TRs
-vector<int,-67,double,void *,5U,short &>::X
-vector<int,-67,double,void *,5U,short &>::X
-#
---format=hp --no-params
-X__6vectorXTiSN67TdTPvUP5TOs
-vector<int,-67,double,void *,5U,short &&>::X
-vector<int,-67,double,void *,5U,short &&>::X
-#
---format=hp --no-params
-elem__6vectorXTiA3foo__Fi
-vector<int,&foo>::elem(int)
-vector<int,&foo>::elem
-#
---format=hp --no-params
-elem__6vectorXTiA3fooTPvA5Label__FiPPvT2
-vector<int,&foo,void *,&Label>::elem(int, void **, void **)
-vector<int,&foo,void *,&Label>::elem
-#
---format=hp --no-params
-elem__6vectorXTiSN42A3foo__Fi
-vector<int,-42,&foo>::elem(int)
-vector<int,-42,&foo>::elem
-#
---format=hp --no-params
-__ct__2T5XTPFcPv_i__Fi_2
-T5<int (*)(char, void *)>::T5(int)
-T5<int (*)(char, void *)>::T5
-#
---format=hp --no-params
-__ct__2T5XTPFcPv_i__Fi_19
-T5<int (*)(char, void *)>::T5(int)
-T5<int (*)(char, void *)>::T5
-#
---format=hp --no-params
-f__FicdPcPFci_v_34
-f(int, char, double, char *, void (*)(char, int))
-f
-#
---format=hp --no-params
-spec__13Spec<#1,#1.*>XTiTPi_FPi
-Spec<int,int *>::spec(int *)
-Spec<int,int *>::spec
-#
---format=hp --no-params
-spec__16Spec<#1,#1.&,#1>XTiTRiTi_FPi
-Spec<int,int &,int>::spec(int *)
-Spec<int,int &,int>::spec
-#
---format=hp --no-params
-spec__17Spec<#1,#1.&&,#1>XTiTOiTi_FPi
-Spec<int,int &&,int>::spec(int *)
-Spec<int,int &&,int>::spec
-#
---format=hp --no-params
-add__XTc_FcT1
-add<char>(char, char)
-add<char>
-#
---format=hp --no-params
-add__XTcSP9A5label_FcPPlT1
-add<char,9,&label>(char, long **, char)
-add<char,9,&label>
-#
---format=hp --no-params
-add__XTPfTFPd_f_FcT1
-add<float *,float (double *)>(char, char)
-add<float *,float (double *)>
-#
---format=hp --no-params
-unLink__12basic_stringXTcT18string_char_traitsXTc_T9allocator_Fv
-basic_string<char,string_char_traits<char>,allocator>::unLink(void)
-basic_string<char,string_char_traits<char>,allocator>::unLink
-#
-# A regression test with no args.  This used to cause a segv.
-
-_Utf390_1__1_9223372036854775807__9223372036854775
-_Utf390_1__1_9223372036854775807__9223372036854775
-#
---format=gnu --no-params
-call__H1Z4Test_RX01_t1C2ZX01PMX01FPX01i_vQ2X016output
-C<Test, Test::output> call<Test>(Test &)
-C<Test, Test::output> call<Test>
-#
---format=gnu --no-params
-call__H1Z4Test_OX01_t1C2ZX01PMX01FPX01i_vQ2X016output
-C<Test, Test::output> call<Test>(Test &&)
-C<Test, Test::output> call<Test>
-#
---format=gnu --no-params
-fn__FPQ21n1cPMQ21n1cFPQ21n1c_i
-fn(n::c *, int (n::c::*)(n::c *))
-fn
-#
---format=gnu --no-params
-f__FGt3Bar1i2G1i
-f(Bar<2>, i)
-f
-#
---format=gnu --no-params
-f__FGt3Bar1i21i
-f(Bar<21>, int)
-f
-#
---format=gnu --no-params
-f__FGt3Bar1i2G4XY_t
-f(Bar<2>, XY_t)
-f
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZRCiZt2NA1Ui9_X01_i
-int foo<TA<int const &, NA<9> > >(TA<int const &, NA<9> >)
-int foo<TA<int const &, NA<9> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZOCiZt2NA1Ui9_X01_i
-int foo<TA<int const &&, NA<9> > >(TA<int const &&, NA<9> >)
-int foo<TA<int const &&, NA<9> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZcZt2NA1Ui20_X01_i
-int foo<TA<char, NA<20> > >(TA<char, NA<20> >)
-int foo<TA<char, NA<20> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZiZt8N___A___1Ui99_X01_i
-int foo<TA<int, N___A___<99> > >(TA<int, N___A___<99> >)
-int foo<TA<int, N___A___<99> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZRCiZt2NA1im1_X01_i
-int foo<TA<int const &, NA<-1> > >(TA<int const &, NA<-1> >)
-int foo<TA<int const &, NA<-1> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZRCiZt2NA1im9_X01_i
-int foo<TA<int const &, NA<-9> > >(TA<int const &, NA<-9> >)
-int foo<TA<int const &, NA<-9> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZcZt2NA1i_m20__X01_i
-int foo<TA<char, NA<-20> > >(TA<char, NA<-20> >)
-int foo<TA<char, NA<-20> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZcZt2NA1im1_X01_i
-int foo<TA<char, NA<-1> > >(TA<char, NA<-1> >)
-int foo<TA<char, NA<-1> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZiZt4N__A1im9_X01_i
-int foo<TA<int, N__A<-9> > >(TA<int, N__A<-9> >)
-int foo<TA<int, N__A<-9> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZiZt4N__A1i_m99__X01_i
-int foo<TA<int, N__A<-99> > >(TA<int, N__A<-99> >)
-int foo<TA<int, N__A<-99> > >
-#
---format=gnu --no-params
-__opi__t2TA2ZiZt4N__A1i9
-TA<int, N__A<9> >::operator int(void)
-TA<int, N__A<9> >::operator int
-#
---format=gnu --no-params
-__opi__t2TA2ZiZt8N___A___1i_m99_
-TA<int, N___A___<-99> >::operator int(void)
-TA<int, N___A___<-99> >::operator int
-#
---format=gnu --no-params
-foo___bar__baz_____H1Zt2TA2ZiZt8N___A___1i99_X01_i
-int foo___bar__baz___<TA<int, N___A___<99> > >(TA<int, N___A___<99> >)
-int foo___bar__baz___<TA<int, N___A___<99> > >
-#
---format=gnu --no-params
-foo__bar___foobar_____t2TA2ZiZt8N___A___1i_m99_
-TA<int, N___A___<-99> >::foo__bar___foobar___(void)
-TA<int, N___A___<-99> >::foo__bar___foobar___
-#
---format=gnu --no-params
-foo__bar___foobar_____t2TA2ZiZt4N__A1i9
-TA<int, N__A<9> >::foo__bar___foobar___(void)
-TA<int, N__A<9> >::foo__bar___foobar___
-#
---format=gnu --no-params
-__tfP8sockaddr
-sockaddr * type_info function
-sockaddr * type_info function
-#
---format=gnu --no-params
-__tfPQ25libcwt16option_event_tct1Z12burst_app_ct
-libcw::option_event_tct<burst_app_ct> * type_info function
-libcw::option_event_tct<burst_app_ct> * type_info function
-#
---format=gnu --no-params
-__tiP8sockaddr
-sockaddr * type_info node
-sockaddr * type_info node
-#
---format=gnu --no-params
-__tiPQ25libcwt16option_event_tct1Z12burst_app_ct
-libcw::option_event_tct<burst_app_ct> * type_info node
-libcw::option_event_tct<burst_app_ct> * type_info node
-#
---format=gnu --no-params
-_27_GLOBAL_.N.__12burst_app_ct.app_instance
-{anonymous}::app_instance
-{anonymous}::app_instance
-#
---format=gnu --no-params
-_26_GLOBAL_$N$_tmp_n.iilg4Gya$app_instance
-{anonymous}::app_instance
-{anonymous}::app_instance
-#
---format=gnu-v3 --no-params
-_Z3fo5n
-fo5(__int128)
-fo5
-#
---format=gnu-v3 --no-params
-_Z3fo5o
-fo5(unsigned __int128)
-fo5
-#
---format=java
-_ZN4java3awt10ScrollPane7addImplEPNS0_9ComponentEPNS_4lang6ObjectEi
-java.awt.ScrollPane.addImpl(java.awt.Component, java.lang.Object, int)
-#
---format=java
-_ZN4java3awt4geom15AffineTransform9getMatrixEP6JArrayIdE
-java.awt.geom.AffineTransform.getMatrix(double[])
-#
---format=java
-_ZN23Mangle$Inner$InnerInner3fooEP6JArrayIPS0_IiEEdPS0_IPS0_IPS0_IPS0_IPN4java4lang6StringEEEEEPS0_IPS0_IPN6MangleEEE
-Mangle$Inner$InnerInner.foo(int[][], double, java.lang.String[][][][], Mangle[][])
-#
---format=java
-_ZN6JArray1tEP6JArrayIPS_E
-JArray.t(JArray[])
-#
---format=java
-_ZN4Prim1iEibcdfwPN4java4lang6StringEsx
-Prim.i(int, boolean, byte, double, float, char, java.lang.String, short, long)
-#
---format=java
-_ZN4java4util14Map__U24_Entry11class__U24_E
-java.util.Map$Entry.class$
-#
---format=java
-_ZN3org7eclipse3cdt5debug8internal4core5model9CVariable6sizeof$Ev
-org.eclipse.cdt.debug.internal.core.model.CVariable.sizeof()
-#
---format=hp --no-params
-_Utf58_0_1__1_2147483647__2147483648
-_Utf58_0_1__1_2147483647__2147483648
-_Utf58_0_1__1_2147483647__2147483648
-#
---format=gnu-v3 --no-params
-St9bad_alloc
-std::bad_alloc
-std::bad_alloc
-#
---format=gnu-v3 --no-params
-_ZN1f1fE
-f::f
-f::f
-#
---format=gnu-v3 --no-params
-_Z1fv
-f()
-f
-#
---format=gnu-v3 --no-params
-_Z1fi
-f(int)
-f
-#
---format=gnu-v3 --no-params
-_Z3foo3bar
-foo(bar)
-foo
-#
---format=gnu-v3 --no-params
-_Zrm1XS_
-operator%(X, X)
-operator%
-#
---format=gnu-v3 --no-params
-_ZplR1XS0_
-operator+(X&, X&)
-operator+
-#
---format=gnu-v3 --no-params
-_ZlsRK1XS1_
-operator<<(X const&, X const&)
-operator<<
-#
---format=gnu-v3 --no-params
-_ZN3FooIA4_iE3barE
-Foo<int [4]>::bar
-Foo<int [4]>::bar
-#
---format=gnu-v3 --no-params
-_Z1fIiEvi
-void f<int>(int)
-f<int>
-#
---format=gnu-v3 --no-params
-_Z5firstI3DuoEvS0_
-void first<Duo>(Duo)
-first<Duo>
-#
---format=gnu-v3 --no-params
-_Z5firstI3DuoEvT_
-void first<Duo>(Duo)
-first<Duo>
-#
---format=gnu-v3 --no-params
-_Z3fooIiFvdEiEvv
-void foo<int, void (double), int>()
-foo<int, void (double), int>
-#
---format=gnu-v3 --no-params
-_Z1fIFvvEEvv
-void f<void ()>()
-f<void ()>
-#
---format=gnu-v3 --no-params
-_ZN1N1fE
-N::f
-N::f
-#
---format=gnu-v3 --no-params
-_ZN6System5Sound4beepEv
-System::Sound::beep()
-System::Sound::beep
-#
---format=gnu-v3 --no-params
-_ZN5Arena5levelE
-Arena::level
-Arena::level
-#
---format=gnu-v3 --no-params
-_ZN5StackIiiE5levelE
-Stack<int, int>::level
-Stack<int, int>::level
-#
---format=gnu-v3 --no-params
-_Z1fI1XEvPVN1AIT_E1TE
-void f<X>(A<X>::T volatile*)
-f<X>
-#
---format=gnu-v3 --no-params
-_ZngILi42EEvN1AIXplT_Li2EEE1TE
-void operator-<42>(A<(42)+(2)>::T)
-operator-<42>
-#
---format=gnu-v3 --no-params
-_Z4makeI7FactoryiET_IT0_Ev
-Factory<int> make<Factory, int>()
-make<Factory, int>
-#
---format=gnu-v3 --no-params
-_Z4makeI7FactoryiET_IT0_Ev
-Factory<int> make<Factory, int>()
-make<Factory, int>
-#
---format=gnu-v3 --no-params
-_Z3foo5Hello5WorldS0_S_
-foo(Hello, World, World, Hello)
-foo
-#
---format=gnu-v3 --no-params
-_Z3fooPM2ABi
-foo(int AB::**)
-foo
-#
---format=gnu-v3 --no-params
-_ZlsRSoRKSs
-operator<<(std::ostream&, std::string const&)
-operator<<
-#
---format=gnu-v3 --no-params
-_ZTI7a_class
-typeinfo for a_class
-typeinfo for a_class
-#
---format=gnu-v3 --no-params
-U4_farrVKPi
-int* const volatile restrict _far
-int* const volatile restrict _far
-# 
---format=gnu-v3 --no-params
-_Z3fooILi2EEvRAplT_Li1E_i
-void foo<2>(int (&) [(2)+(1)])
-foo<2>
-#
---format=gnu-v3 --no-params
-_Z3fooILi2EEvOAplT_Li1E_i
-void foo<2>(int (&&) [(2)+(1)])
-foo<2>
-# 
---format=gnu-v3 --no-params
-_Z1fM1AKFvvE
-f(void (A::*)() const)
-f
-#
---format=gnu-v3 --no-params
-_Z3fooc
-foo(char)
-foo
-#
---format=gnu-v3 --no-params
-_Z2f0u8char16_t
-f0(char16_t)
-f0
-#
---format=gnu-v3 --no-params
-_Z2f0Pu8char16_t
-f0(char16_t*)
-f0
-#
---format=gnu-v3 --no-params
-_Z2f0u8char32_t
-f0(char32_t)
-f0
-#
---format=gnu-v3 --no-params
-_Z2f0Pu8char32_t
-f0(char32_t*)
-f0
-#
---format=gnu-v3 --no-params
-2CBIL_Z3foocEE
-CB<foo(char)>
-CB<foo(char)>
-#
---format=gnu-v3 --no-params
-2CBIL_Z7IsEmptyEE
-CB<IsEmpty>
-CB<IsEmpty>
-#
---format=gnu-v3 --no-params
-_ZZN1N1fEiE1p
-N::f(int)::p
-N::f(int)::p
-#
---format=gnu-v3 --no-params
-_ZZN1N1fEiEs
-N::f(int)::string literal
-N::f(int)::string literal
-# 
---format=gnu-v3 --no-params
-_Z1fPFvvEM1SFvvE
-f(void (*)(), void (S::*)())
-f
-#
---format=gnu-v3 --no-params
-_ZN1N1TIiiE2mfES0_IddE
-N::T<int, int>::mf(N::T<double, double>)
-N::T<int, int>::mf
-# 
---format=gnu-v3 --no-params
-_ZSt5state
-std::state
-std::state
-# 
---format=gnu-v3 --no-params
-_ZNSt3_In4wardE
-std::_In::ward
-std::_In::ward
-#
---format=gnu-v3 --no-params
-_Z1fKPFiiE
-f(int (* const)(int))
-f
-#
---format=gnu-v3 --no-params
-_Z1fAszL_ZZNK1N1A1fEvE3foo_0E_i
-f(int [sizeof (N::A::f() const::foo)])
-f
-#
---format=gnu-v3 --no-params
-_Z1fA37_iPS_
-f(int [37], int (*) [37])
-f
-#
---format=gnu-v3 --no-params
-_Z1fM1AFivEPS0_
-f(int (A::*)(), int (*)())
-f
-#
---format=gnu-v3 --no-params
-_Z1fPFPA1_ivE
-f(int (*(*)()) [1])
-f
-#
---format=gnu-v3 --no-params
-_Z1fPKM1AFivE
-f(int (A::* const*)())
-f
-#
---format=gnu-v3 --no-params
-_Z1jM1AFivEPS1_
-j(int (A::*)(), int (A::**)())
-j
-#
---format=gnu-v3 --no-params
-_Z1sPA37_iPS0_
-s(int (*) [37], int (**) [37])
-s
-#
---format=gnu-v3 --no-params
-_Z3fooA30_A_i
-foo(int [30][])
-foo
-#
---format=gnu-v3 --no-params
-_Z3kooPA28_A30_i
-koo(int (*) [28][30])
-koo
-#
---format=gnu-v3 --no-params
-_ZlsRKU3fooU4bart1XS0_
-operator<<(X bart foo const&, X bart)
-operator<<
-#
---format=gnu-v3 --no-params
-_ZlsRKU3fooU4bart1XS2_
-operator<<(X bart foo const&, X bart foo const)
-operator<<
-#
---format=gnu-v3 --no-params
-_Z1fM1AKFivE
-f(int (A::*)() const)
-f
-#
---format=gnu-v3 --no-params
-_Z3absILi11EEvv
-void abs<11>()
-abs<11>
-#
---format=gnu-v3 --no-params
-_ZN1AIfEcvT_IiEEv
-A<float>::operator int<int>()
-A<float>::operator int<int>
-#
---format=gnu-v3 --no-params
-_ZN12libcw_app_ct10add_optionIS_EEvMT_FvPKcES3_cS3_S3_
-void libcw_app_ct::add_option<libcw_app_ct>(void (libcw_app_ct::*)(char const*), char const*, char, char const*, char const*)
-libcw_app_ct::add_option<libcw_app_ct>
-#
---format=gnu-v3 --no-params
-_ZGVN5libcw24_GLOBAL__N_cbll.cc0ZhUKa23compiler_bug_workaroundISt6vectorINS_13omanip_id_tctINS_5debug32memblk_types_manipulator_data_ctEEESaIS6_EEE3idsE
-guard variable for libcw::(anonymous namespace)::compiler_bug_workaround<std::vector<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct>, std::allocator<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct> > > >::ids
-guard variable for libcw::(anonymous namespace)::compiler_bug_workaround<std::vector<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct>, std::allocator<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct> > > >::ids
-#
---format=gnu-v3 --no-params
-_ZN5libcw5debug13cwprint_usingINS_9_private_12GlobalObjectEEENS0_17cwprint_using_tctIT_EERKS5_MS5_KFvRSt7ostreamE
-libcw::debug::cwprint_using_tct<libcw::_private_::GlobalObject> libcw::debug::cwprint_using<libcw::_private_::GlobalObject>(libcw::_private_::GlobalObject const&, void (libcw::_private_::GlobalObject::*)(std::ostream&) const)
-libcw::debug::cwprint_using<libcw::_private_::GlobalObject>
-#
---format=gnu-v3 --no-params
-_ZNKSt14priority_queueIP27timer_event_request_base_ctSt5dequeIS1_SaIS1_EE13timer_greaterE3topEv
-std::priority_queue<timer_event_request_base_ct*, std::deque<timer_event_request_base_ct*, std::allocator<timer_event_request_base_ct*> >, timer_greater>::top() const
-std::priority_queue<timer_event_request_base_ct*, std::deque<timer_event_request_base_ct*, std::allocator<timer_event_request_base_ct*> >, timer_greater>::top
-#
---format=gnu-v3 --no-params
-_ZNKSt15_Deque_iteratorIP15memory_block_stRKS1_PS2_EeqERKS5_
-std::_Deque_iterator<memory_block_st*, memory_block_st* const&, memory_block_st* const*>::operator==(std::_Deque_iterator<memory_block_st*, memory_block_st* const&, memory_block_st* const*> const&) const
-std::_Deque_iterator<memory_block_st*, memory_block_st* const&, memory_block_st* const*>::operator==
-#
---format=gnu-v3 --no-params
-_ZNKSt17__normal_iteratorIPK6optionSt6vectorIS0_SaIS0_EEEmiERKS6_
-std::__normal_iterator<option const*, std::vector<option, std::allocator<option> > >::operator-(std::__normal_iterator<option const*, std::vector<option, std::allocator<option> > > const&) const
-std::__normal_iterator<option const*, std::vector<option, std::allocator<option> > >::operator-
-#
---format=gnu-v3 --no-params
-_ZNSbIcSt11char_traitsIcEN5libcw5debug27no_alloc_checking_allocatorEE12_S_constructIPcEES6_T_S7_RKS3_
-char* std::basic_string<char, std::char_traits<char>, libcw::debug::no_alloc_checking_allocator>::_S_construct<char*>(char*, char*, libcw::debug::no_alloc_checking_allocator const&)
-std::basic_string<char, std::char_traits<char>, libcw::debug::no_alloc_checking_allocator>::_S_construct<char*>
-#
---format=gnu-v3 --no-params
-_Z1fI1APS0_PKS0_EvT_T0_T1_PA4_S3_M1CS8_
-void f<A, A*, A const*>(A, A*, A const*, A const* (*) [4], A const* (* C::*) [4])
-f<A, A*, A const*>
-#
---format=gnu-v3 --no-params
-_Z3fooiPiPS_PS0_PS1_PS2_PS3_PS4_PS5_PS6_PS7_PS8_PS9_PSA_PSB_PSC_
-foo(int, int*, int**, int***, int****, int*****, int******, int*******, int********, int*********, int**********, int***********, int************, int*************, int**************, int***************)
-foo
-#
---format=gnu-v3 --no-params
-_ZSt1BISt1DIP1ARKS2_PS3_ES0_IS2_RS2_PS2_ES2_ET0_T_SB_SA_PT1_
-std::D<A*, A*&, A**> std::B<std::D<A*, A* const&, A* const*>, std::D<A*, A*&, A**>, A*>(std::D<A*, A* const&, A* const*>, std::D<A*, A* const&, A* const*>, std::D<A*, A*&, A**>, A**)
-std::B<std::D<A*, A* const&, A* const*>, std::D<A*, A*&, A**>, A*>
-#
---format=gnu-v3 --no-params
-_X11TransParseAddress
-_X11TransParseAddress
-_X11TransParseAddress
-#
---format=gnu-v3 --no-params
-_ZNSt13_Alloc_traitsISbIcSt18string_char_traitsIcEN5libcw5debug9_private_17allocator_adaptorIcSt24__default_alloc_templateILb0ELi327664EELb1EEEENS5_IS9_S7_Lb1EEEE15_S_instancelessE
-std::_Alloc_traits<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, libcw::debug::_private_::allocator_adaptor<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, std::__default_alloc_template<false, 327664>, true> >::_S_instanceless
-std::_Alloc_traits<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, libcw::debug::_private_::allocator_adaptor<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, std::__default_alloc_template<false, 327664>, true> >::_S_instanceless
-#
---format=gnu-v3 --no-params
-_GLOBAL__I__Z2fnv
-global constructors keyed to fn()
-global constructors keyed to fn()
-#
---format=gnu-v3 --no-params
-_Z1rM1GFivEMS_KFivES_M1HFivES1_4whatIKS_E5what2IS8_ES3_
-r(int (G::*)(), int (G::*)() const, G, int (H::*)(), int (G::*)(), what<G const>, what2<G const>, int (G::*)() const)
-r
-#
-# This is from the gdb testsuite gdb.cp/cplusfuncs.exp.
---format=gnu-v3 --no-params
-_Z10hairyfunc5PFPFilEPcE
-hairyfunc5(int (*(*)(char*))(long))
-hairyfunc5
-#
-# This is from gcc PR 8861
---format=gnu-v3 --no-params
-_Z1fILi1ELc120EEv1AIXplT_cviLd810000000000000000703DAD7A370C5EEE
-void f<1, (char)120>(A<(1)+((int)((double)[810000000000000000703DAD7A370C5]))>)
-f<1, (char)120>
-#
-# This is also from gcc PR 8861
---format=gnu-v3 --no-params
-_Z1fILi1EEv1AIXplT_cvingLf3f800000EEE
-void f<1>(A<(1)+((int)(-((float)[3f800000])))>)
-f<1>
-#
-# This is from a libstdc++ debug mode patch.
---format=gnu-v3 --no-params
-_ZNK11__gnu_debug16_Error_formatter14_M_format_wordImEEvPciPKcT_
-void __gnu_debug::_Error_formatter::_M_format_word<unsigned long>(char*, int, char const*, unsigned long) const
-__gnu_debug::_Error_formatter::_M_format_word<unsigned long>
-#
-# The new demangler used to core dump on this.
---format=gnu-v3 --no-params
-_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPSt4pairISsPFbP6sqlitePPcEESt6vectorIS9_SaIS9_EEEESE_ET0_T_SG_SF_
-__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > > std::uninitialized_copy<__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > > >(__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >)
-std::uninitialized_copy<__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > > >
-#
-# The new demangler used to fail on this.
---format=gnu-v3 --no-params
-_Z1fP1cIPFiiEE
-f(c<int (*)(int)>*)
-f
-#
-# Wrap expressions using '>' in an extra layer of parens to avoid
-# confusion with the '>' which ends the template parameters.
---format=gnu-v3 --no-params
-_Z4dep9ILi3EEvP3fooIXgtT_Li2EEE
-void dep9<3>(foo<((3)>(2))>*)
-dep9<3>
-#
-# Watch out for templated version of `operator<'--it needs an extra
-# space.
---format=gnu-v3 --no-params
-_ZStltI9file_pathSsEbRKSt4pairIT_T0_ES6_
-bool std::operator< <file_path, std::string>(std::pair<file_path, std::string> const&, std::pair<file_path, std::string> const&)
-std::operator< <file_path, std::string>
-#
-# More hairy qualifier handling.
---format=gnu-v3 --no-params
-_Z9hairyfuncM1YKFPVPFrPA2_PM1XKFKPA3_ilEPcEiE
-hairyfunc(int (* const (X::** (* restrict (* volatile* (Y::*)(int) const)(char*)) [2])(long) const) [3])
-hairyfunc
-#
-# Check that negative numbers are handled correctly.
---format=gnu-v3 --no-params
-_Z1fILin1EEvv
-void f<-1>()
-f<-1>
-#
-# Check a destructor of a standard substitution.
---format=gnu-v3 --no-params
-_ZNSdD0Ev
-std::basic_iostream<char, std::char_traits<char> >::~basic_iostream()
-std::basic_iostream<char, std::char_traits<char> >::~basic_iostream
-#
-# Another case where we got member function qualifiers wrong.
---format=gnu-v3 --no-params
-_ZNK15nsBaseHashtableI15nsUint32HashKey8nsCOMPtrI4IFooEPS2_E13EnumerateReadEPF15PLDHashOperatorRKjS4_PvES9_
-nsBaseHashtable<nsUint32HashKey, nsCOMPtr<IFoo>, IFoo*>::EnumerateRead(PLDHashOperator (*)(unsigned int const&, IFoo*, void*), void*) const
-nsBaseHashtable<nsUint32HashKey, nsCOMPtr<IFoo>, IFoo*>::EnumerateRead
-#
-# Another member function qualifier test case, when the member function
-# returns a pointer to function.
---format=gnu-v3 --no-params
-_ZNK1C1fIiEEPFivEv
-int (*C::f<int>() const)()
-C::f<int>
-#
-# Another case where we got member function qualifiers wrong.
---format=gnu-v3 --no-params
-_ZZ3BBdI3FooEvvENK3Fob3FabEv
-void BBd<Foo>()::Fob::Fab() const
-void BBd<Foo>()::Fob::Fab
-#
-# The same idea one level deeper.
---format=gnu-v3 --no-params
-_ZZZ3BBdI3FooEvvENK3Fob3FabEvENK3Gob3GabEv
-void BBd<Foo>()::Fob::Fab() const::Gob::Gab() const
-void BBd<Foo>()::Fob::Fab() const::Gob::Gab
-#
-# Yet another member function qualifier problem.
---format=gnu-v3 --no-params
-_ZNK5boost6spirit5matchI13rcs_deltatextEcvMNS0_4impl5dummyEFvvEEv
-boost::spirit::match<rcs_deltatext>::operator void (boost::spirit::impl::dummy::*)()() const
-boost::spirit::match<rcs_deltatext>::operator void (boost::spirit::impl::dummy::*)()
-#
-# Multi-dimensional arrays with qualifiers on the inner dimensions.
---format=gnu-v3 --no-params
-_Z3fooIA6_KiEvA9_KT_rVPrS4_
-void foo<int const [6]>(int const [9][6], int restrict const (* volatile restrict) [9][6])
-foo<int const [6]>
-#
-# From PR libstdc++/12736
---format=gnu-v3 --no-params
-_Z3fooIA3_iEvRKT_
-void foo<int [3]>(int const (&) [3])
-foo<int [3]>
-#
-# Related to PR libstdc++/12736
---format=gnu-v3 --no-params
-_Z3fooIPA3_iEvRKT_
-void foo<int (*) [3]>(int (* const&) [3])
-foo<int (*) [3]>
-#
-# This used to crash the demangler--PR 16240
---format=gnu-v3 --no-params
-_ZN13PatternDriver23StringScalarDeleteValueC1ERKNS_25ConflateStringScalarValueERKNS_25AbstractStringScalarValueERKNS_12TemplateEnumINS_12pdcomplementELZNS_16complement_namesEELZNS_14COMPLEMENTENUMEEEE
-PatternDriver::StringScalarDeleteValue::StringScalarDeleteValue(PatternDriver::ConflateStringScalarValue const&, PatternDriver::AbstractStringScalarValue const&, PatternDriver::TemplateEnum<PatternDriver::pdcomplement, PatternDriver::complement_names, PatternDriver::COMPLEMENTENUM> const&)
-PatternDriver::StringScalarDeleteValue::StringScalarDeleteValue
-#
-# This used to cause the demangler to walk into undefined memory--PR 22268
---format=gnu-v3 --no-params
-ALsetchannels
-ALsetchannels
-ALsetchannels
-# Test GNU V3 constructor and destructor identification.
-# 0 means it is not a constructor/destructor.
-# Other integers correspond to enum gnu_v3_{c,d}tor_kinds in demangle.h.
---is-v3-ctor
-_GLOBAL__I__Z2fnv
-0
-#
---is-v3-dtor
-_GLOBAL__I__Z2fnv
-0
-#
---is-v3-ctor
-_ZNSdC1Ev
-1
-#
---is-v3-dtor
-_ZNSdC1Ev
-0
-#
---is-v3-ctor
-_ZNSdD0Ev
-0
-#
---is-v3-dtor
-_ZNSdD0Ev
-1
-#
---is-v3-ctor
-_ZNSdC2Ev
-2
-#
---is-v3-dtor
-_ZNSdC2Ev
-0
-#
---is-v3-ctor
-_ZNSdD1Ev
-0
-#
---is-v3-dtor
-_ZNSdD1Ev
-2
-#
-# This caused an infinite loop.
-#
-# This is generated by an EDG compiler (kcc 4.0).  To demangle it
-# correctly, I believe that we have to understand that the J37J deep
-# in the string somehow refers back to the type starting 37 characters
-# in from some starting point, so that it winds up being the type
-# starting with 41THandle....  However, lacking a spec for EDG
-# demangling, it's hard to implement this.
-#
-# In the meantime, this symbol can be successfully demangled in GNU
-# mode.  Of course the result is more or less nonsense, but an older
-# version of g++ would indeed generate this mangled name given the
-# appropriate input, so the demangling is correct.
---format=auto --no-params
-__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm__7_Z1ZZ2Z8iterator
-_Z1ZZ2Z::__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm(iterator)
-_Z1ZZ2Z::__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm
-#
-# This used to cause a crash. It doesn't follow the C++ encoding so
-# the demangled name should be identical to the original symbol name.
---format=auto --no-params
-_test_array__L_1__B23b___clean.6
-_test_array__L_1__B23b___clean.6
-_test_array__L_1__B23b___clean.6
-#
---format=java
-_ZGAN4java4lang5Class7forNameEPNS0_6StringE
-hidden alias for java.lang.Class.forName(java.lang.String)
-#
-# Test cases to verify encoding that determines if a return type is present
-# Related to PR9861
---format=java
-_ZN4java4lang4Math4acosEJdd
-java.lang.Math.acos(double)double
-#
---format=auto
-_ZN4java4lang4Math4acosEJdd
-double java::lang::Math::acos(double)
-#
---format=auto
-_ZN4java4lang4Math4acosEJvd
-void java::lang::Math::acos(double)
-#
---format=auto --ret-postfix
-_ZN4java4lang4Math4acosEJdd
-java::lang::Math::acos(double)double
-#
---format=gnu-v3 --no-params --ret-postfix
-_Z4makeI7FactoryiET_IT0_Ev
-make<Factory, int>()Factory<int>
-make<Factory, int>
-#
-# From PR 28797
---format=auto --no-params
-_Z1fM1AKiPKS1_
-f(int const A::*, int const A::* const*)
-f
-# This used to cause a core dump in the demangler -- PR 29176
---format=auto --no-params
-SASDASDFASDF_sdfsdf
-SASDASDFASDF_sdfsdf
-SASDASDFASDF_sdfsdf
-# These are all cases of invalid manglings where the demangler would read
-# past the end of the string.
-# d_name wasn't honouring a NULL from d_substitution
---format=gnu-v3
-_ZSA
-_ZSA
-# d_expr_primary wasn't honouring NULL from cplus_demangle_mangled_name
---format=gnu-v3
-_ZN1fIL_
-_ZN1fIL_
-# d_operator_name was taking two characters in a row
---format=gnu-v3
-_Za
-_Za
-# d_prefix wasn't honouring NULL from d_substitution
---format=gnu-v3
-_ZNSA
-_ZNSA
-# d_prefix wasn't honouring NULL from d_template_param
---format=gnu-v3
-_ZNT
-_ZNT
-# Dereferencing NULL in d_pointer_to_member_type
---format=gnu-v3
-_Z1aMark
-_Z1aMark
-# <local-source-name> test 1
---format=gnu-v3
-_ZL3foo_2
-foo
-# <local-source-name> test 2
---format=gnu-v3
-_ZZL3foo_2vE4var1
-foo()::var1
-# <local-source-name> test 3
---format=gnu-v3
-_ZZL3foo_2vE4var1_0
-foo()::var1
-# <local-source-name> test 4
---format=gnu-v3
-_ZZN7myspaceL3foo_1EvEN11localstruct1fEZNS_3fooEvE16otherlocalstruct
-myspace::foo()::localstruct::f(myspace::foo()::otherlocalstruct)
-# Java resource name
---format=gnu-v3
-_ZGr32_java$Sutil$Siso4217$_properties
-java resource java/util/iso4217.properties
-# decltype/param placeholder test
---format=gnu-v3
-_Z3addIidEDTplfp_fp0_ET_T0_
-decltype ({parm#1}+{parm#2}) add<int, double>(int, double)
-# decltype scope test
---format=gnu-v3
-_Z1fI1SENDtfp_E4typeET_
-decltype ({parm#1})::type f<S>(S)
-# decltype/fn call test
---format=gnu-v3
-_Z4add3IidEDTclL_Z1gEfp_fp0_EET_T0_
-decltype (g({parm#1}, {parm#2})) add3<int, double>(int, double)
-# 'this' test
---format=gnu-v3
-_ZN1A1fIiEEDTcldtdtdefpT1b1fIT_EEEv
-decltype ((((*this).b).(f<int>))()) A::f<int>()
-# new (2008) built in types test
---format=gnu-v3
-_Z1fDfDdDeDhDsDi
-f(decimal32, decimal64, decimal128, half, char16_t, char32_t)
-# pack expansion test
---format=gnu-v3
-_Z1fIIPiPfPdEEvDpT_
-void f<int*, float*, double*>(int*, float*, double*)
-# '.' test
---format=gnu-v3
-_Z1hI1AIiEdEDTcldtfp_1gIT0_EEET_S2_
-decltype (({parm#1}.(g<double>))()) h<A<int>, double>(A<int>, double)
-# test for typed function in decltype
---format=gnu-v3
-_ZN1AIiE1jIiEEDTplfp_clL_Z1xvEEET_
-decltype ({parm#1}+(x())) A<int>::j<int>(int)
-# typed function in decltype with an argument list
---format=gnu-v3
-_Z1tIlEDTplcvT_Li5EclL_Z1qsELi6EEEv
-decltype (((long)(5))+(q(6))) t<long>()
-# test for expansion of function parameter pack
---format=gnu-v3
-_Z1gIJidEEDTclL_Z1fEspplfp_Li1EEEDpT_
-decltype (f(({parm#1}+(1))...)) g<int, double>(int, double)
-# lambda tests
---format=gnu-v3
-_ZZ1giENKUlvE_clEv
-g(int)::{lambda()#1}::operator()() const
---format=gnu-v3
-_Z4algoIZ1giEUlvE0_EiT_
-int algo<g(int)::{lambda()#2}>(g(int)::{lambda()#2})
---format=gnu-v3
-_ZZN1S1fEiiEd0_NKUlvE0_clEv
-S::f(int, int)::{default arg#2}::{lambda()#2}::operator()() const
---format=gnu-v3
-_ZNK1SIiE1xMUlvE1_clEv
-S<int>::x::{lambda()#3}::operator()() const
---format=gnu-v3
-_ZN8functionC1IZN1CIiE4testES_Ed_UliE_EET_
-function::function<C<int>::test(function)::{default arg#1}::{lambda(int)#1}>(C<int>::test(function)::{default arg#1}::{lambda(int)#1})
---format=gnu-v3
-_Z1fN1SUt_E
-f(S::{unnamed type#1})
---format=gnu-v3
-_Z1fDv32_f
-f(float __vector(32))
---format=gnu-v3
-_Z1fIfLi4EEvDv_T0__T_
-void f<float, 4>(float __vector(4))
---format=gnu-v3
-_Z1fI1AEDTclonplfp_fp_EET_
-decltype ((operator+)({parm#1}, {parm#1})) f<A>(A)
---format=gnu-v3
-_Z1hI1AEDTcldtfp_miEET_
-decltype (({parm#1}.(operator-))()) h<A>(A)
---format=gnu-v3
-_Z1fDn
-f(decltype(nullptr))
---format=gnu-v3
-_Z1fIRiEvOT_b
-void f<int&>(int&, bool)
---format=gnu-v3
-_ZN5aaaaa6bbbbbb5cccccIN23ddddddddddddddddddddddd3eeeENS2_4ffff16ggggggggggggggggENS0_9hhhhhhhhhES6_S6_S6_S6_S6_S6_S6_EE
-aaaaa::bbbbbb::ccccc<ddddddddddddddddddddddd::eee, ddddddddddddddddddddddd::ffff::gggggggggggggggg, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh>
---format=gnu-v3
-_Z5outerIsEcPFilE
-char outer<short>(int (*)(long))
---format=gnu-v3
-_Z5outerPFsiEl
-outer(short (*)(int), long)
---format=gnu-v3
-_Z6outer2IsEPFilES1_
-int (*outer2<short>(int (*)(long)))(long)
---format=gnu-v3 --ret-postfix
-_Z5outerIsEcPFilE
-outer<short>(int (*)(long))char
---format=gnu-v3 --ret-postfix
-_Z5outerPFsiEl
-outer(short (*)(int), long)
---format=gnu-v3 --ret-postfix
-_Z6outer2IsEPFilES1_
-outer2<short>(int (*)(long))int (*)(long)
---format=gnu-v3 --ret-drop
-_Z5outerIsEcPFilE
-outer<short>(int (*)(long))
---format=gnu-v3 --ret-drop
-_Z5outerPFsiEl
-outer(short (*)(int), long)
---format=gnu-v3 --ret-drop
-_Z6outer2IsEPFilES1_
-outer2<short>(int (*)(long))
-#
---format=gnu-v3 --no-params
-_ZN1KIXadL_ZN1S1mEiEEE1fEv
-K<&S::m>::f()
-K<&S::m>::f
---format=gnu-v3
-_ZN1KILi1EXadL_ZN1S1mEiEEE1fEv
-K<1, &S::m>::f()
-# Here the `(int)' argument list of `S::m' is already removed.
---format=gnu-v3
-_ZN1KILi1EXadL_ZN1S1mEEEE1fEv
-K<1, &S::m>::f()
-#
-# Used to crash -- binutils PR 13030.
---format=gnu-v3
-_ZSt10_ConstructI10CellBorderIS0_EEvPT_DpOT0_
-_ZSt10_ConstructI10CellBorderIS0_EEvPT_DpOT0_
-# A pack expansion is substitutable.
---format=gnu-v3
-_Z1fIJiEiEv1AIJDpT_EET0_S4_
-void f<int, int>(A<int>, int, int)
-# So is decltype.
---format=gnu-v3
-_Z1fIiiEDTcvT__EET0_S2_
-decltype ((int)()) f<int, int>(int, int)
-# And vector.
---format=gnu-v3
-_Z1fDv4_iS_
-f(int __vector(4), int __vector(4))
---format=gnu-v3
-_Z2f1Ii1AEDTdsfp_fp0_ET0_MS2_T_
-decltype ({parm#1}.*{parm#2}) f1<int, A>(A, int A::*)
---format=gnu-v3
-_Z2f2IiEDTquL_Z1bEfp_trET_
-decltype (b?{parm#1} : (throw)) f2<int>(int)
---format=gnu-v3
-_Z6check1IiEvP6helperIXsznw_T_EEE
-void check1<int>(helper<sizeof (new int)>*)
---format=gnu-v3
-_Z6check2IiEvP6helperIXszgsnw_T_piEEE
-void check2<int>(helper<sizeof (::new int())>*)
---format=gnu-v3
-_Z6check3IiEvP6helperIXsznwadL_Z1iE_T_piLi1EEEE
-void check3<int>(helper<sizeof (new (&i) int(1))>*)
---format=gnu-v3
-_Z6check4IiEvP6helperIXszna_A1_T_EEE
-void check4<int>(helper<sizeof (new int [1])>*)
---format=gnu-v3
-_Z6check5IiEvP6helperIXszna_A1_T_piEEE
-void check5<int>(helper<sizeof (new int [1]())>*)
---format=gnu-v3
-_Z1fIiEDTcmgsdlfp_psfp_EPT_
-decltype ((::delete {parm#1}),(+{parm#1})) f<int>(int*)
---format=gnu-v3
-_Z1fIiEDTcmdafp_psfp_EPT_
-decltype ((delete[] {parm#1}),(+{parm#1})) f<int>(int*)
---format=gnu-v3
-_ZN1AdlEPv
-A::operator delete(void*)
---format=gnu-v3
-_Z2f1IiEDTppfp_ET_
-decltype ({parm#1}++) f1<int>(int)
---format=gnu-v3
-_Z2f1IiEDTpp_fp_ET_
-decltype (++{parm#1}) f1<int>(int)
---format=gnu-v3
-_Z2f1IiEDTcl1gfp_ilEEET_
-decltype (g({parm#1}, {})) f1<int>(int)
---format=gnu-v3
-_Z2f1IiEDTnw_T_ilEES0_
-decltype (new int{}) f1<int>(int)
---format=gnu-v3
-_Zli2_wPKc
-operator"" _w(char const*)
---format=gnu-v3
-_Z1fIiEDTnw_Dapifp_EET_
-decltype (new auto({parm#1})) f<int>(int)
---format=gnu-v3
-_Z1fIiERDaRKT_S1_
-auto& f<int>(int const&, int)
---format=gnu-v3
-_Z1gIiEDcRKT_S0_
-decltype(auto) g<int>(int const&, int)
---format=gnu-v3
-_Z1gILi1EEvR1AIXT_EER1BIXscbT_EE
-void g<1>(A<1>&, B<static_cast<bool>(1)>&)
---format=gnu-v3
-_ZNKSt7complexIiE4realB5cxx11Ev
-std::complex<int>::real[abi:cxx11]() const
-#
-# Some more crashes revealed by fuzz-testing:
-# Check for NULL pointer when demangling trinary operators
---format=gnu-v3
-_Z1fAv32_f
-_Z1fAv32_f
-# Do not overflow when decoding identifier length
---format=gnu-v3
-_Z11111111111
-_Z11111111111
-# Check out-of-bounds access when decoding braced initializer list
---format=gnu-v3
-_ZDTtl
-_ZDTtl
-# Check for NULL pointer when demangling DEMANGLE_COMPONENT_LOCAL_NAME
---format=gnu-v3
-_ZZN1fEEd_lEv
-_ZZN1fEEd_lEv
-# Handle DEMANGLE_COMPONENT_FIXED_TYPE in d_find_pack
---format=gnu-v3
-_Z1fDpDFT_
-_Z1fDpDFT_
-# Likewise, DEMANGLE_COMPONENT_DEFAULT_ARG
---format=gnu-v3
-_Z1fIDpZ1fEd_E
-_Z1fIDpZ1fEd_E
-# Likewise, DEMANGLE_COMPONENT_NUMBER
---format=gnu-v3
-_Z1fDpDv1_c
-f((char __vector(1))...)
-#
-# Ada (GNAT) tests.
-#
-# Simple test.
---format=gnat
-yz__qrs
-yz.qrs
-# Operator
---format=gnat
-oper__Oadd
-oper."+"
-# Overloaded subprogram.
---format=gnat
-yz__qrs__2
-yz.qrs
-# Nested subprogram.
---format=gnat
-yz__qrs__tuv.1661
-yz.qrs.tuv
-# Nested and overloaded subprograms.
---format=gnat
-yz__qrs__tuv__2_1.1667
-yz.qrs.tuv
---format=gnat
-yz__qrs__tuv__2_2.1670
-yz.qrs.tuv
---format=gnat
-yz__qrs__tuv__2_3.1674
-yz.qrs.tuv
-# Elaborated flag (not demangled)
---format=gnat
-x_E
-<x_E>
-# Nested package
---format=gnat
-x__m1
-x.m1
---format=gnat
-x__m3
-x.m3
---format=gnat
-x__y__m2X
-x.y.m2
---format=gnat
-x__y__z__rXb
-x.y.z.r
-# Child package
---format=gnat
-x__y__j
-x.y.j
-# Library level
---format=gnat
-_ada_x__m3
-x.m3
-# Package body elaborator
---format=gnat
-p___elabb
-p'Elab_Body
-# Package spec elaborator
---format=gnat
-p___elabs
-p'Elab_Spec
-# Task body
---format=gnat
-p__taskobjTKB
-p.taskobj
-# Task subprogram
---format=gnat
-p__taskobjTK__f1.2330
-p.taskobj.f1
-# Protected types subprograms
---format=gnat
-prot__lock__getN
-prot.lock.get
---format=gnat
-prot__lock__getP
-prot.lock.get
---format=gnat
-prot__lock__get__sub.2590
-prot.lock.get.sub
---format=gnat
-prot__lock__setN
-prot.lock.set
---format=gnat
-prot__lock__setP
-prot.lock.set
-# Protected type entries
---format=gnat
-prot__lock__update_B7s
-prot.lock.update
---format=gnat
-prot__lock__update_E6s
-prot.lock.update
-# Controlled types
---format=gnat
-gnat__sockets__sockets_library_controllerDF__2
-gnat.sockets.sockets_library_controller.Finalize
---format=gnat
-system__partition_interface__racw_stub_typeDA
-system.partition_interface.racw_stub_type.Adjust
-# Stream operations
---format=gnat
-gnat__wide_wide_string_split__slice_setSR__2
-gnat.wide_wide_string_split.slice_set'Read
---format=gnat
-ada__real_time__timing_events__events__listSW__2Xnn
-ada.real_time.timing_events.events.list'Write
---format=gnat
-system__finalization_root__root_controlledSI
-system.finalization_root.root_controlled'Input
---format=gnat
-ada__finalization__limited_controlledSO__2
-ada.finalization.limited_controlled'Output
-# Tagged types
---format=gnat
-ada__synchronous_task_control___size__2
-ada.synchronous_task_control'Size
---format=gnat
-ada__real_time__timing_events__events___alignment__2Xnn
-ada.real_time.timing_events.events'Alignment
---format=gnat
-system__finalization_root___assign__2
-system.finalization_root.":="
-#
-# Used to crash the demangler.
---format=gnu-v3
-DFA
-DFA
-#
-# http://sourceware.org/bugzilla/show_bug.cgi?id=11572
---format=auto
-_ZN3Psi7VariantIIcPKcEE5visitIIRZN11VariantTest9TestVisit11test_methodEvEUlS2_E0_RZNS6_11test_methodEvEUlcE1_RZNS6_11test_methodEvEUlNS_4NoneEE_EEENS_13VariantDetail19SelectVisitorResultIIDpT_EE4typeEDpOSG_
-Psi::VariantDetail::SelectVisitorResult<VariantTest::TestVisit::test_method()::{lambda(char const*)#2}&, VariantTest::TestVisit::test_method()::{lambda(char)#3}&, VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&>::type Psi::Variant<char, char const*>::visit<VariantTest::TestVisit::test_method()::{lambda(char const*)#2}&, VariantTest::TestVisit::test_method()::{lambda(char)#3}&, VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&>((VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&)...)
-#
-# Clone suffix tests
-#
---format=gnu-v3 --no-params
-_Z3fo5n.clone.1
-fo5(__int128) [clone .clone.1]
-fo5
-#
---format=gnu-v3 --no-params
-_Z3fo5n.constprop.2
-fo5(__int128) [clone .constprop.2]
-fo5
-#
---format=gnu-v3 --no-params
-_Z3fo5n.isra.3
-fo5(__int128) [clone .isra.3]
-fo5
-#
---format=gnu-v3 --no-params
-_Z3fo5n.part.4
-fo5(__int128) [clone .part.4]
-fo5
-#
---format=gnu-v3 --no-params
-_Z12to_be_clonediPv.clone.0
-to_be_cloned(int, void*) [clone .clone.0]
-to_be_cloned
-#
---format=gnu-v3 --no-params
-_Z3fooi.1988
-foo(int) [clone .1988]
-foo
-#
---format=gnu-v3 --no-params
-_Z3fooi.part.9.165493.constprop.775.31805
-foo(int) [clone .part.9.165493] [clone .constprop.775.31805]
-foo
-#
---format=gnu-v3 --no-params
-_Z2f1IiEvT_S0_S0_._omp_fn.2
-void f1<int>(int, int, int) [clone ._omp_fn.2]
-f1<int>
-#
---format=gnu-v3 --no-params
-_Z3fooi._omp_cpyfn.6
-foo(int) [clone ._omp_cpyfn.6]
-foo
-#
---format=gnu-v3 --no-params
-_Z1fIKFvvES0_Evv
-void f<void () const, void () const>()
-f<void () const, void () const>
-#
---format=gnu-v3
-_ZN4modc6parser8sequenceINS_9astParser13LocatedParserINS0_9ParserRefINS2_UlRNS2_16TokenParserInputEE_EEEEEINS0_14OptionalParserINS2_18ListParserTemplateILNS_6tokens5Token4TypeE4EXadL_ZNSD_Ut_13parenthesizedEEEE6ParserINS4_INS0_6ParserIS5_NS_3ast10ExpressionEEEEEEEEENSA_INS4_INS2_22OneOfKeywordsToTParserINSJ_5StyleEEEEEEENS0_14SequenceParserIS5_INS0_18ExactElementParserIS5_EENSA_ISM_EEEEENS0_14RepeatedParserINS4_INS0_15TransformParserINSU_IS5_INS4_INSP_INSJ_10Annotation12RelationshipEEEEESX_EEENS2_UlNS2_3LocES12_ONS_5MaybeISK_EEE19_EEEEELb0EEEEEENSU_INS0_17ExtractParserTypeIT_E9InputTypeEINS0_8MaybeRefIS1F_E4TypeEDpNS1I_IT0_E4TypeEEEEOS1F_DpOS1L_
-modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::parser::ExtractParserType<modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> > >::InputType, modc::parser::MaybeRef<modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}>::Type, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false><modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > > >::Type, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false><modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> > > >::Type, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false><modc::parser::SequenceParser<modc::astParser::TokenParserInput<modc::parser::ExactElementParser<modc::astParser::TokenParserInput>, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::ast::Expression> > > >::Type, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false><modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false> >::Type> modc::parser::sequence<modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> >, modc::parser::OptionalParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > > >, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> > >, modc::parser::SequenceParser<modc::astParser::TokenParserInput<modc::parser::ExactElementParser<modc::astParser::TokenParserInput>, modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> ><modc::ast::Expression> > >, modc::parser::RepeatedParser<modc::parser::ParserRef<modc::parser::TransformParser<modc::parser::ParserRef<modc::astParser::OneOfKeywordsToTParser<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Style> ><modc::astParser::TokenParserInput<modc::parser::ParserRef<modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser<modc::parser::ParserRef<modc::parser::Parser<modc::astParser::TokenParserInput, modc::ast::Expression> > ><modc::astParser::ListParserTemplate<(modc::tokens::Token::Type)4, &modc::tokens::{unnamed type#1}::parenthesized>::Parser::Annotation::Relationship> >, modc::parser::ExactElementParser> >, modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}> >, false> >(modc::astParser::{lambda(modc::astParser::Loc, modc::parser::RepeatedParser, modc::Maybe<modc::parser::Parser>&&)#21}&&, (modc::parser::ExtractParserType<modc::astParser::LocatedParser<modc::parser::ParserRef<modc::astParser::{lambda(modc::astParser::TokenParserInput&)#1}> > >&&)...)
---format=gnu-v3
-_ZNKR1A1hEv
-A::h() const &
---format=gnu-v3
-_Z1lM1AKFvvRE
-l(void (A::*)() const &)
---format=gnu-v3
-_Z1mIFvvOEEvM1AT_
-void m<void () &&>(void (A::*)() &&)
---format=gnu-v3
-_Z1nIM1AKFvvREEvT_
-void n<void (A::*)() const &>(void (A::*)() const &)
---format=gnu-v3
-_ZL1fIiEvv
-void f<int>()
-# https://sourceware.org/bugzilla/show_bug.cgi?id=14963#c3
---format=gnu-v3
-_ZSt7forwardIRN1x14refobjiteratorINS0_3refINS0_4mime30multipart_section_processorObjIZ15get_body_parserIZZN14mime_processor21make_section_iteratorERKNS2_INS3_10sectionObjENS0_10ptrrefBaseEEEbENKUlvE_clEvEUlSB_bE_ZZNS6_21make_section_iteratorESB_bENKSC_clEvEUlSB_E0_ENS1_INS2_INS0_20outputrefiteratorObjIiEES8_EEEERKSsSB_OT_OT0_EUlmE_NS3_32make_multipart_default_discarderISP_EEEES8_EEEEEOT_RNSt16remove_referenceISW_E4typeE
-x::refobjiterator<x::ref<x::mime::multipart_section_processorObj<x::refobjiterator<x::ref<x::outputrefiteratorObj<int>, x::ptrrefBase> > get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}>(std::string const&, x::ref<x::mime::sectionObj, x::ptrrefBase> const&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}&&)::{lambda(unsigned long)#1}, x::mime::make_multipart_default_discarder<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&> >, x::ptrrefBase> >& std::forward<x::refobjiterator<x::ref<x::mime::multipart_section_processorObj<x::refobjiterator<x::ref<x::outputrefiteratorObj<int>, x::ptrrefBase> > get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}>(std::string const&, x::ref<x::mime::sectionObj, x::ptrrefBase> const&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}&&)::{lambda(unsigned long)#1}, x::mime::make_multipart_default_discarder<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&> >, x::ptrrefBase> >&>(std::remove_reference<x::mime::multipart_section_processorObj<x::refobjiterator<x::ref<x::outputrefiteratorObj<int>, x::ptrrefBase> > get_body_parser<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}>(std::string const&, x::ref<x::mime::sectionObj, x::ptrrefBase> const&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&, mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&)#2}&&)::{lambda(unsigned long)#1}, x::mime::make_multipart_default_discarder<mime_processor::make_section_iterator(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)::{lambda()#1}::operator()() const::{lambda(x::ref<x::mime::sectionObj, x::ptrrefBase> const&, bool)#1}&&> > >::type&)
-#
---format=gnu-v3 --no-params
-_ZNK7strings8internal8SplitterINS_9delimiter5AnyOfENS_9SkipEmptyEEcvT_ISt6vectorI12basic_stringIcSt11char_traitsIcESaIcEESaISD_EEvEEv
-strings::internal::Splitter<strings::delimiter::AnyOf, strings::SkipEmpty>::operator std::vector<basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<basic_string<char, std::char_traits<char>, std::allocator<char> > > ><std::vector<basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<basic_string<char, std::char_traits<char>, std::allocator<char> > > >, void>() const
-strings::internal::Splitter<strings::delimiter::AnyOf, strings::SkipEmpty>::operator std::vector<basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<basic_string<char, std::char_traits<char>, std::allocator<char> > > ><std::vector<basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<basic_string<char, std::char_traits<char>, std::allocator<char> > > >, void>
-#
---format=gnu-v3 --no-params
-_ZN1AcvT_I1CEEv
-A::operator C<C>()
-A::operator C<C>
-#
---format=gnu-v3 --no-params
-_ZN1AcvPT_I1CEEv
-A::operator C*<C>()
-A::operator C*<C>
-#
---format=gnu-v3 --no-params
-_ZN1AcvT_IiEI1CEEv
-A::operator C<int><C>()
-A::operator C<int><C>
-# https://sourceware.org/bugzilla/show_bug.cgi?id=14963#c16
---format=gnu-v3
-_ZN3mdr16in_cached_threadIRZNK4cudr6GPUSet17parallel_for_eachIZN5tns3d20shape_representation7compute7GPUImpl7executeERKNS_1AINS_7ptr_refIKjEELl3ELl3ENS_8c_strideILl1ELl0EEEEERKNS8_INS9_IjEELl4ELl1ESD_EEEUliRKNS1_7ContextERNS7_5StateEE_JSt6vectorISO_SaISO_EEEEEvOT_DpRT0_EUlSP_E_JSt17reference_wrapperISO_EEEENS_12ScopedFutureIDTclfp_spcl7forwardISW_Efp0_EEEEESV_DpOSW_
-mdr::ScopedFuture<decltype ({parm#1}(((forward<void cudr::GPUSet::parallel_for_each<tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> > >(tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}&&, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&>)({parm#2}))...))> mdr::in_cached_thread<void cudr::GPUSet::parallel_for_each<tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> > >(void cudr::GPUSet::parallel_for_each<tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> > >(tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}&&, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&, std::reference_wrapper<tns3d::shape_representation::compute::GPUImpl::State> >(void cudr::GPUSet::parallel_for_each<tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> > >(tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}&&, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&, (void cudr::GPUSet::parallel_for_each<tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> > >(tns3d::shape_representation::compute::GPUImpl::execute(mdr::A<mdr::ptr_ref<unsigned int const>, 3l, 3l, mdr::c_stride<1l, 0l> > const&, mdr::A<mdr::ptr_ref<unsigned int>, 4l, 1l, mdr::c_stride<1l, 0l> > const&)::{lambda(int, cudr::Context const&, tns3d::shape_representation::compute::GPUImpl::State&)#1}&&, std::vector<tns3d::shape_representation::compute::GPUImpl::State, std::allocator<tns3d::shape_representation::compute::GPUImpl::State> >&) const::{lambda(tns3d::shape_representation::compute::GPUImpl::State&)#1}&&&)...)
-# https://sourceware.org/bugzilla/show_bug.cgi?id=14963#c18
---format=gnu-v3
-_ZNSt9_Any_data9_M_accessIPZN13ThreadManager10futureTaskISt5_BindIFSt7_Mem_fnIM6RunnerFvvEEPS5_EEEEvOT_EUlvE_EERSC_v
-void ThreadManager::futureTask<std::_Bind<std::_Mem_fn<void (Runner::*)()> (Runner*)> >(std::_Bind<std::_Mem_fn<void (Runner::*)()> (Runner*)>&&)::{lambda()#1}*& std::_Any_data::_M_access<void ThreadManager::futureTask<std::_Bind<std::_Mem_fn<void (Runner::*)()> (Runner*)> >(void ThreadManager::futureTask<std::_Bind<std::_Mem_fn<void (Runner::*)()> (Runner*)> >(std::_Bind<std::_Mem_fn<void (Runner::*)()> (Runner*)>&&)::{lambda()#1}*&&)::{lambda()#1}*>()
-# https://sourceware.org/bugzilla/show_bug.cgi?id=14963#c24
-# aka https://sourceware.org/bugzilla/show_bug.cgi?id=16593
---format=gnu-v3
-_ZNSt9_Any_data9_M_accessIPZN3sel8Selector6SetObjI3FooJPKcMS4_FviEEEEvRT_DpT0_EUlvE_EESA_v
-void sel::Selector::SetObj<Foo, char const*, void (Foo::*)(int)>(Foo&, char const*, void (Foo::*)(int))::{lambda()#1}*& std::_Any_data::_M_access<void sel::Selector::SetObj<Foo, char const*, void (Foo::*)(int)>(void sel::Selector::SetObj<Foo, char const*, void (Foo::*)(int)>(Foo&, char const*, void (Foo::*)(int))::{lambda()#1}*&, char const*, void (Foo::*)(int))::{lambda()#1}*>()
-# https://sourceware.org/bugzilla/show_bug.cgi?id=16752#c1
---format=gnu-v3
-_ZNSt9_Any_data9_M_accessIPZN13ThreadManager7newTaskIRSt5_BindIFSt7_Mem_fnIM5DiaryFivEEPS5_EEIEEESt6futureINSt9result_ofIFT_DpT0_EE4typeEEOSF_DpOSG_EUlvE_EERSF_v
-std::future<std::result_of<std::_Bind<std::_Mem_fn<int (Diary::*)()> (Diary*)>& ()>::type> ThreadManager::newTask<std::_Bind<std::_Mem_fn<int (Diary::*)()> (Diary*)>&>(std::_Bind<std::_Mem_fn<int (Diary::*)()> (Diary*)>&)::{lambda()#1}*& std::_Any_data::_M_access<std::future<std::result_of<std::_Bind<std::_Mem_fn<int (Diary::*)()> (Diary*)>& ()>::type> ThreadManager::newTask<std::_Bind<std::_Mem_fn<int (Diary::*)()> (Diary*)>&>(std::future<std::result_of<std::_Bind<std::_Mem_fn<int (Diary::*)()> (Diary*)>& ()>::type> ThreadManager::newTask<std::_Bind<std::_Mem_fn<int (Diary::*)()> (Diary*)>&>(std::_Bind<std::_Mem_fn<int (Diary::*)()> (Diary*)>&)::{lambda()#1}*&&)::{lambda()#1}*>()
-# https://sourceware.org/bugzilla/show_bug.cgi?id=16752#c6
---format=gnu-v3
-_ZNSt9_Any_data9_M_accessIPZN6cereal18polymorphic_detail15getInputBindingINS1_16JSONInputArchiveEEENS1_6detail15InputBindingMapIT_E11SerializersERS7_jEUlPvRSt10unique_ptrIvNS5_12EmptyDeleterIvEEEE0_EESA_v
-cereal::detail::InputBindingMap<cereal::JSONInputArchive>::Serializers cereal::polymorphic_detail::getInputBinding<cereal::JSONInputArchive>(cereal::JSONInputArchive&, unsigned int)::{lambda(void*, std::unique_ptr<void, cereal::detail::EmptyDeleter<void> >&)#2}*& std::_Any_data::_M_access<cereal::detail::InputBindingMap<cereal::JSONInputArchive>::Serializers cereal::polymorphic_detail::getInputBinding<cereal::JSONInputArchive>(cereal::detail::InputBindingMap<cereal::JSONInputArchive>::Serializers cereal::polymorphic_detail::getInputBinding<cereal::JSONInputArchive>(cereal::JSONInputArchive&, unsigned int)::{lambda(void*, std::unique_ptr<void, cereal::detail::EmptyDeleter<void> >&)#2}*&, unsigned int)::{lambda(void*, std::unique_ptr<void, cereal::detail::EmptyDeleter<void> >&)#2}*>()
-# https://sourceware.org/bugzilla/show_bug.cgi?id=16845#c2
---format=gnu-v3
-_ZNSt9_Any_data9_M_accessIPZ4postISt8functionIFvvEEEvOT_EUlvE_EERS5_v
-void post<std::function<void ()> >(std::function<void ()>&&)::{lambda()#1}*& std::_Any_data::_M_access<void post<std::function<void ()> >(void post<std::function<void ()> >(std::function<void ()>&&)::{lambda()#1}*&&)::{lambda()#1}*>()
-#
---format=auto --no-params
-_Z3xxxDFyuVb
-xxx(unsigned long long _Fract, bool volatile)
-xxx
-# https://sourceware.org/bugzilla/show_bug.cgi?id=16817
---format=auto --no-params
-_QueueNotification_QueueController__$4PPPPPPPM_A_INotice___Z
-_QueueNotification_QueueController__$4PPPPPPPM_A_INotice___Z
-_QueueNotification_QueueController__$4PPPPPPPM_A_INotice___Z
---format=gnu-v3
-_Z1fSsB3fooS_
-f(std::string[abi:foo], std::string[abi:foo])
---format=gnu-v3
-_Z18IndirectExternCallIPU7stdcallU7regparmILi3EEFviiEiEvT_T0_S3_
-void IndirectExternCall<void ( regparm<3> stdcall*)(int, int), int>(void ( regparm<3> stdcall*)(int, int), int, void ( regparm<3> stdcall*)(int, int))
-# 
-# ABI tags used to confuse the constructor name calculation.
---format=gnu-v3 --no-params
-_ZNSt8ios_base7failureB5cxx11C1EPKcRKSt10error_code
-std::ios_base::failure[abi:cxx11]::failure(char const*, std::error_code const&)
-std::ios_base::failure[abi:cxx11]::failure
---format=gnu-v3
-_Z1fPDxFvvES0_
-f(void (*)() transaction_safe, void (*)() transaction_safe)
-#
-# These two are from gcc PR61321, and gcc PR61233 / gdb PR16957
-#
---format=gnu-v3
-_Z13function_tempIiEv1AIXszcvT_Li999EEE
-void function_temp<int>(A<sizeof ((int)(999))>)
-#
---format=gnu-v3
-_Z7ZipWithI7QStringS0_5QListZN4oral6detail16AdaptCreateTableI7AccountEES0_RKNS3_16CachedFieldsDataEEUlRKS0_SA_E_ET1_IDTclfp1_cvT__EcvT0__EEEERKT1_ISC_ERKT1_ISD_ET2_
-QList<decltype ({parm#3}((QString)(), (QString)()))> ZipWith<QString, QString, QList, QString oral::detail::AdaptCreateTable<Account>(oral::detail::CachedFieldsData const&)::{lambda(QString const&, QString const&)#1}>(QList<QString oral::detail::AdaptCreateTable<Account>(oral::detail::CachedFieldsData const&)::{lambda(QString const&, QString const&)#1}> const&, QList<QList> const&, QString oral::detail::AdaptCreateTable<Account>(oral::detail::CachedFieldsData const&)::{lambda(QString const&, QString const&)#1})
-#
-# These three are symbols generated by g++'s testsuite, which triggered the same bug as above.
---format=gnu-v3
-_Z14int_if_addableI1YERiP1AIXszpldecvPT_Li0EdecvS4_Li0EEE
-int& int_if_addable<Y>(A<sizeof ((*((Y*)(0)))+(*((Y*)(0))))>*)
-#
---format=gnu-v3
-_Z3bazIiEvP1AIXszcl3foocvT__ELCf00000000_00000000EEEE
-void baz<int>(A<sizeof (foo((int)(), (floatcomplex )00000000_00000000))>*)
-#
---format=gnu-v3
-_Z3fooI1FEN1XIXszdtcl1PclcvT__EEE5arrayEE4TypeEv
-X<sizeof ((P(((F)())())).array)>::Type foo<F>()
-
-_Z1fIJidEEv1AIXsZT_EE
-void f<int, double>(A<2>)
-
-_ZN1A1fIJiiEiJiiiEEEvRAsPDpT_T0_DpT1_E_iS3_S5_
-void A::f<int, int, int, int, int, int>(int (&) [6], int, int, int, int)
-
-_Z10unary_leftIJLi1ELi2ELi3EEEv1AIXflplT_EE
-void unary_left<1, 2, 3>(A<(...+(1, 2, 3))>)
-
-_Z11unary_rightIJLi1ELi2ELi3EEEv1AIXfrplT_EE
-void unary_right<1, 2, 3>(A<((1, 2, 3)+...)>)
-
-_Z11binary_leftIJLi1ELi2ELi3EEEv1AIXfLplLi42ET_EE
-void binary_left<1, 2, 3>(A<((42)+...+(1, 2, 3))>)
-
-_Z12binary_rightIJLi1ELi2ELi3EEEv1AIXfRplT_Li42EEE
-void binary_right<1, 2, 3>(A<((1, 2, 3)+...+(42))>)
-#
-# Tests a use-after-free problem PR70481
-
-_Q.__0
-::Q.(void)
-#
-# Tests a use-after-free problem PR70481
-
-_Q10-__9cafebabe.
-cafebabe.::-(void)
-#
-# Tests integer overflow problem PR70492
-
-__vt_90000000000cafebabe
-__vt_90000000000cafebabe
-#
-# Tests write access violation PR70498
-
-_Z80800000000000000000000
-_Z80800000000000000000000
-#
-# Tests write access violation PR70926
-
-0__Ot2m02R5T0000500000
-0__Ot2m02R5T0000500000
-#
-
-0__GT50000000000_
-0__GT50000000000_
-#
-
-__t2m05B500000000000000000_
-__t2m05B500000000000000000_
-#
-# Tests stack overflow PR71696
-
-__10%0__S4_0T0T0
-%0<>::%0(%0<>)
-
-# Inheriting constructor
-_ZN1DCI11BEi
-D::B(int)
-
-# exception-specification (C++17)
-_Z1fIvJiELb0EEvPDOT1_EFT_DpT0_E
-void f<void, int, false>(void (*)(int) noexcept(false))
-
-_Z1fIvJiELb0EEvPDoFT_DpT0_E
-void f<void, int, false>(void (*)(int) noexcept)
-
-_Z1fIvJiELb0EEvPDwiEFT_DpT0_E
-void f<void, int, false>(void (*)(int) throw(int))
-
-# Could crash
-_
-_
-
-# Could crash
-_vt
-_vt
-
-# Could crash
-_$_1Acitz
-_$_1Acitz
-
-# Could crash
-_$_H1R
-_$_H1R
-
-# Could crash
-_Q8ccQ4M2e.
-_Q8ccQ4M2e.
-
-# fold-expression with missing third component could crash.
-_Z12binary_rightIJLi1ELi2ELi3EEEv1AIXfRplT_LiEEE
-_Z12binary_rightIJLi1ELi2ELi3EEEv1AIXfRplT_LiEEE
-
-# ?: expression with missing third component could crash.
-AquT_quT_4mxautouT_4mxxx
-AquT_quT_4mxautouT_4mxxx
-
-# pr c++/78252 generic lambda mangling uses template parms, and leads
-# to unbounded recursion if not dealt with properly
-_Z7forwardIRZ3FoovEUlRT_E_EOS0_S1_
-Foo()::{lambda(auto:1&)#1}& forward<Foo()::{lambda(auto:1&)#1}&>(Foo()::{lambda(auto:1&)#1}&)
-
-_Z7forwardIZ3FoovEUlRiRT_E_EOS1_S2_
-Foo()::{lambda(int&, auto:1&)#1}&& forward<Foo()::{lambda(int&, auto:1&)#1}>(Foo()::{lambda(int&, auto:1&)#1}&)
-
-_Z7forwardIZ3FoovEUlRT_R1XIiEE0_EOS0_S1_
-Foo()::{lambda(auto:1&, X<int>&)#2}&& forward<Foo()::{lambda(auto:1&, X<int>&)#2}>(Foo()::{lambda(auto:1&, X<int>&)#2}&)
-
-_Z7forwardIZ3FoovEUlPA5_T_E1_EOS0_RS0_
-Foo()::{lambda(auto:1 (*&&forward<Foo()::{lambda(auto:1 (*) [5])#3}>(auto:1&)) [5])#3}
-
-_Z3eatIZ3FoovEUlRiRT_E_EvS2_
-void eat<Foo()::{lambda(int&, auto:1&)#1}>(Foo()::{lambda(int&, auto:1&)#1}&)
-
-_Z3eatIZ3FoovEUlRT_R1XIiEE0_EvS1_
-void eat<Foo()::{lambda(auto:1&, X<int>&)#2}>(Foo()::{lambda(auto:1&, X<int>&)#2}&)
-
-_Z3eatIZ3FoovEUlPA5_T_E1_EvRS0_
-void eat<Foo()::{lambda(auto:1 (*) [5])#3}>(Foo()::{lambda(auto:1 (*&) [5])#3})
-
-_Z3eatIPiZ3FoovEUlPT_PT0_E4_EvRS1_RS3_
-void eat<int*, Foo()::{lambda(auto:1*, auto:2*)#6}>(int*&, Foo()::{lambda(auto:1*, auto:2*)#6}&)
-
-_Z3eatIPiZ3BarIsEvvEUlPsPT_PT0_E0_EvRS3_RS5_
-void eat<int*, void Bar<short>()::{lambda(short*, auto:1*, auto:2*)#2}>(int*&, void Bar<short>()::{lambda(short*, auto:1*, auto:2*)#2}&)
-
-# PR 77489
-_ZZ3foovE8localVar_9
-foo()::localVar
-
-_ZZ3foovE8localVar_10
-foo()::localVar
-
-_ZZ3foovE8localVar__10_
-foo()::localVar
-
-_ZZ3foovE8localVar__9_
-_ZZ3foovE8localVar__9_
-
-_ZZ3foovE8localVar__12
-_ZZ3foovE8localVar__12
-
-# PR 70182
-_Z1gI1AEv1SIXadsrT_onplEE
-void g<A>(S<&A::operator+>)
-
-_Z1gI1AEv1SIXadsrT_plEE
-void g<A>(S<&A::operator+>)
Index: GNU/binutils/create-2.28-libiberty-bugfixes-patch/binutils-2.28-new/libiberty/cp-demangle.c
===================================================================
--- GNU/binutils/create-2.28-libiberty-bugfixes-patch/binutils-2.28-new/libiberty/cp-demangle.c	(revision 257)
+++ GNU/binutils/create-2.28-libiberty-bugfixes-patch/binutils-2.28-new/libiberty/cp-demangle.c	(nonexistent)
@@ -1,6739 +0,0 @@
-/* Demangler for g++ V3 ABI.
-   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2014
-   Free Software Foundation, Inc.
-   Written by Ian Lance Taylor <ian@wasabisystems.com>.
-
-   This file is part of the libiberty library, which is part of GCC.
-
-   This file 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 2 of the License, or
-   (at your option) any later version.
-
-   In addition to the permissions in the GNU General Public License, the
-   Free Software Foundation gives you unlimited permission to link the
-   compiled version of this file into combinations with other programs,
-   and to distribute those combinations without any restriction coming
-   from the use of this file.  (The General Public License restrictions
-   do apply in other respects; for example, they cover modification of
-   the file, and distribution when not linked into a combined
-   executable.)
-
-   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 code implements a demangler for the g++ V3 ABI.  The ABI is
-   described on this web page:
-       http://www.codesourcery.com/cxx-abi/abi.html#mangling
-
-   This code was written while looking at the demangler written by
-   Alex Samuel <samuel@codesourcery.com>.
-
-   This code first pulls the mangled name apart into a list of
-   components, and then walks the list generating the demangled
-   name.
-
-   This file will normally define the following functions, q.v.:
-      char *cplus_demangle_v3(const char *mangled, int options)
-      char *java_demangle_v3(const char *mangled)
-      int cplus_demangle_v3_callback(const char *mangled, int options,
-                                     demangle_callbackref callback)
-      int java_demangle_v3_callback(const char *mangled,
-                                    demangle_callbackref callback)
-      enum gnu_v3_ctor_kinds is_gnu_v3_mangled_ctor (const char *name)
-      enum gnu_v3_dtor_kinds is_gnu_v3_mangled_dtor (const char *name)
-
-   Also, the interface to the component list is public, and defined in
-   demangle.h.  The interface consists of these types, which are
-   defined in demangle.h:
-      enum demangle_component_type
-      struct demangle_component
-      demangle_callbackref
-   and these functions defined in this file:
-      cplus_demangle_fill_name
-      cplus_demangle_fill_extended_operator
-      cplus_demangle_fill_ctor
-      cplus_demangle_fill_dtor
-      cplus_demangle_print
-      cplus_demangle_print_callback
-   and other functions defined in the file cp-demint.c.
-
-   This file also defines some other functions and variables which are
-   only to be used by the file cp-demint.c.
-
-   Preprocessor macros you can define while compiling this file:
-
-   IN_LIBGCC2
-      If defined, this file defines the following functions, q.v.:
-         char *__cxa_demangle (const char *mangled, char *buf, size_t *len,
-                               int *status)
-         int __gcclibcxx_demangle_callback (const char *,
-                                            void (*)
-                                              (const char *, size_t, void *),
-                                            void *)
-      instead of cplus_demangle_v3[_callback]() and
-      java_demangle_v3[_callback]().
-
-   IN_GLIBCPP_V3
-      If defined, this file defines only __cxa_demangle() and
-      __gcclibcxx_demangle_callback(), and no other publically visible
-      functions or variables.
-
-   STANDALONE_DEMANGLER
-      If defined, this file defines a main() function which demangles
-      any arguments, or, if none, demangles stdin.
-
-   CP_DEMANGLE_DEBUG
-      If defined, turns on debugging mode, which prints information on
-      stdout about the mangled string.  This is not generally useful.
-
-   CHECK_DEMANGLER
-      If defined, additional sanity checks will be performed.  It will
-      cause some slowdown, but will allow to catch out-of-bound access
-      errors earlier.  This macro is intended for testing and debugging.  */
-
-#if defined (_AIX) && !defined (__GNUC__)
- #pragma alloca
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifdef HAVE_ALLOCA_H
-# include <alloca.h>
-#else
-# ifndef alloca
-#  ifdef __GNUC__
-#   define alloca __builtin_alloca
-#  else
-extern char *alloca ();
-#  endif /* __GNUC__ */
-# endif /* alloca */
-#endif /* HAVE_ALLOCA_H */
-
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifndef INT_MAX
-# define INT_MAX       (int)(((unsigned int) ~0) >> 1)          /* 0x7FFFFFFF */ 
-#endif
-
-#include "ansidecl.h"
-#include "libiberty.h"
-#include "demangle.h"
-#include "cp-demangle.h"
-
-/* If IN_GLIBCPP_V3 is defined, some functions are made static.  We
-   also rename them via #define to avoid compiler errors when the
-   static definition conflicts with the extern declaration in a header
-   file.  */
-#ifdef IN_GLIBCPP_V3
-
-#define CP_STATIC_IF_GLIBCPP_V3 static
-
-#define cplus_demangle_fill_name d_fill_name
-static int d_fill_name (struct demangle_component *, const char *, int);
-
-#define cplus_demangle_fill_extended_operator d_fill_extended_operator
-static int
-d_fill_extended_operator (struct demangle_component *, int,
-                          struct demangle_component *);
-
-#define cplus_demangle_fill_ctor d_fill_ctor
-static int
-d_fill_ctor (struct demangle_component *, enum gnu_v3_ctor_kinds,
-             struct demangle_component *);
-
-#define cplus_demangle_fill_dtor d_fill_dtor
-static int
-d_fill_dtor (struct demangle_component *, enum gnu_v3_dtor_kinds,
-             struct demangle_component *);
-
-#define cplus_demangle_mangled_name d_mangled_name
-static struct demangle_component *d_mangled_name (struct d_info *, int);
-
-#define cplus_demangle_type d_type
-static struct demangle_component *d_type (struct d_info *);
-
-#define cplus_demangle_print d_print
-static char *d_print (int, const struct demangle_component *, int, size_t *);
-
-#define cplus_demangle_print_callback d_print_callback
-static int d_print_callback (int, const struct demangle_component *,
-                             demangle_callbackref, void *);
-
-#define cplus_demangle_init_info d_init_info
-static void d_init_info (const char *, int, size_t, struct d_info *);
-
-#else /* ! defined(IN_GLIBCPP_V3) */
-#define CP_STATIC_IF_GLIBCPP_V3
-#endif /* ! defined(IN_GLIBCPP_V3) */
-
-/* See if the compiler supports dynamic arrays.  */
-
-#ifdef __GNUC__
-#define CP_DYNAMIC_ARRAYS
-#else
-#ifdef __STDC__
-#ifdef __STDC_VERSION__
-#if __STDC_VERSION__ >= 199901L
-#define CP_DYNAMIC_ARRAYS
-#endif /* __STDC__VERSION >= 199901L */
-#endif /* defined (__STDC_VERSION__) */
-#endif /* defined (__STDC__) */
-#endif /* ! defined (__GNUC__) */
-
-/* We avoid pulling in the ctype tables, to prevent pulling in
-   additional unresolved symbols when this code is used in a library.
-   FIXME: Is this really a valid reason?  This comes from the original
-   V3 demangler code.
-
-   As of this writing this file has the following undefined references
-   when compiled with -DIN_GLIBCPP_V3: realloc, free, memcpy, strcpy,
-   strcat, strlen.  */
-
-#define IS_DIGIT(c) ((c) >= '0' && (c) <= '9')
-#define IS_UPPER(c) ((c) >= 'A' && (c) <= 'Z')
-#define IS_LOWER(c) ((c) >= 'a' && (c) <= 'z')
-
-/* The prefix prepended by GCC to an identifier represnting the
-   anonymous namespace.  */
-#define ANONYMOUS_NAMESPACE_PREFIX "_GLOBAL_"
-#define ANONYMOUS_NAMESPACE_PREFIX_LEN \
-  (sizeof (ANONYMOUS_NAMESPACE_PREFIX) - 1)
-
-/* Information we keep for the standard substitutions.  */
-
-struct d_standard_sub_info
-{
-  /* The code for this substitution.  */
-  char code;
-  /* The simple string it expands to.  */
-  const char *simple_expansion;
-  /* The length of the simple expansion.  */
-  int simple_len;
-  /* The results of a full, verbose, expansion.  This is used when
-     qualifying a constructor/destructor, or when in verbose mode.  */
-  const char *full_expansion;
-  /* The length of the full expansion.  */
-  int full_len;
-  /* What to set the last_name field of d_info to; NULL if we should
-     not set it.  This is only relevant when qualifying a
-     constructor/destructor.  */
-  const char *set_last_name;
-  /* The length of set_last_name.  */
-  int set_last_name_len;
-};
-
-/* Accessors for subtrees of struct demangle_component.  */
-
-#define d_left(dc) ((dc)->u.s_binary.left)
-#define d_right(dc) ((dc)->u.s_binary.right)
-
-/* A list of templates.  This is used while printing.  */
-
-struct d_print_template
-{
-  /* Next template on the list.  */
-  struct d_print_template *next;
-  /* This template.  */
-  const struct demangle_component *template_decl;
-};
-
-/* A list of type modifiers.  This is used while printing.  */
-
-struct d_print_mod
-{
-  /* Next modifier on the list.  These are in the reverse of the order
-     in which they appeared in the mangled string.  */
-  struct d_print_mod *next;
-  /* The modifier.  */
-  const struct demangle_component *mod;
-  /* Whether this modifier was printed.  */
-  int printed;
-  /* The list of templates which applies to this modifier.  */
-  struct d_print_template *templates;
-};
-
-/* We use these structures to hold information during printing.  */
-
-struct d_growable_string
-{
-  /* Buffer holding the result.  */
-  char *buf;
-  /* Current length of data in buffer.  */
-  size_t len;
-  /* Allocated size of buffer.  */
-  size_t alc;
-  /* Set to 1 if we had a memory allocation failure.  */
-  int allocation_failure;
-};
-
-/* Stack of components, innermost first, used to avoid loops.  */
-
-struct d_component_stack
-{
-  /* This component.  */
-  const struct demangle_component *dc;
-  /* This component's parent.  */
-  const struct d_component_stack *parent;
-};
-
-/* A demangle component and some scope captured when it was first
-   traversed.  */
-
-struct d_saved_scope
-{
-  /* The component whose scope this is.  */
-  const struct demangle_component *container;
-  /* The list of templates, if any, that was current when this
-     scope was captured.  */
-  struct d_print_template *templates;
-};
-
-/* Checkpoint structure to allow backtracking.  This holds copies
-   of the fields of struct d_info that need to be restored
-   if a trial parse needs to be backtracked over.  */
-
-struct d_info_checkpoint
-{
-  const char *n;
-  int next_comp;
-  int next_sub;
-  int did_subs;
-  int expansion;
-};
-
-enum { D_PRINT_BUFFER_LENGTH = 256 };
-struct d_print_info
-{
-  /* Fixed-length allocated buffer for demangled data, flushed to the
-     callback with a NUL termination once full.  */
-  char buf[D_PRINT_BUFFER_LENGTH];
-  /* Current length of data in buffer.  */
-  size_t len;
-  /* The last character printed, saved individually so that it survives
-     any buffer flush.  */
-  char last_char;
-  /* Callback function to handle demangled buffer flush.  */
-  demangle_callbackref callback;
-  /* Opaque callback argument.  */
-  void *opaque;
-  /* The current list of templates, if any.  */
-  struct d_print_template *templates;
-  /* The current list of modifiers (e.g., pointer, reference, etc.),
-     if any.  */
-  struct d_print_mod *modifiers;
-  /* Set to 1 if we saw a demangling error.  */
-  int demangle_failure;
-  /* Non-zero if we're printing a lambda argument.  A template
-     parameter reference actually means 'auto'.  */
-  int is_lambda_arg;
-  /* The current index into any template argument packs we are using
-     for printing, or -1 to print the whole pack.  */
-  int pack_index;
-  /* Number of d_print_flush calls so far.  */
-  unsigned long int flush_count;
-  /* Stack of components, innermost first, used to avoid loops.  */
-  const struct d_component_stack *component_stack;
-  /* Array of saved scopes for evaluating substitutions.  */
-  struct d_saved_scope *saved_scopes;
-  /* Index of the next unused saved scope in the above array.  */
-  int next_saved_scope;
-  /* Number of saved scopes in the above array.  */
-  int num_saved_scopes;
-  /* Array of templates for saving into scopes.  */
-  struct d_print_template *copy_templates;
-  /* Index of the next unused copy template in the above array.  */
-  int next_copy_template;
-  /* Number of copy templates in the above array.  */
-  int num_copy_templates;
-  /* The nearest enclosing template, if any.  */
-  const struct demangle_component *current_template;
-};
-
-#ifdef CP_DEMANGLE_DEBUG
-static void d_dump (struct demangle_component *, int);
-#endif
-
-static struct demangle_component *
-d_make_empty (struct d_info *);
-
-static struct demangle_component *
-d_make_comp (struct d_info *, enum demangle_component_type,
-             struct demangle_component *,
-             struct demangle_component *);
-
-static struct demangle_component *
-d_make_name (struct d_info *, const char *, int);
-
-static struct demangle_component *
-d_make_demangle_mangled_name (struct d_info *, const char *);
-
-static struct demangle_component *
-d_make_builtin_type (struct d_info *,
-                     const struct demangle_builtin_type_info *);
-
-static struct demangle_component *
-d_make_operator (struct d_info *,
-                 const struct demangle_operator_info *);
-
-static struct demangle_component *
-d_make_extended_operator (struct d_info *, int,
-                          struct demangle_component *);
-
-static struct demangle_component *
-d_make_ctor (struct d_info *, enum gnu_v3_ctor_kinds,
-             struct demangle_component *);
-
-static struct demangle_component *
-d_make_dtor (struct d_info *, enum gnu_v3_dtor_kinds,
-             struct demangle_component *);
-
-static struct demangle_component *
-d_make_template_param (struct d_info *, int);
-
-static struct demangle_component *
-d_make_sub (struct d_info *, const char *, int);
-
-static int
-has_return_type (struct demangle_component *);
-
-static int
-is_ctor_dtor_or_conversion (struct demangle_component *);
-
-static struct demangle_component *d_encoding (struct d_info *, int);
-
-static struct demangle_component *d_name (struct d_info *);
-
-static struct demangle_component *d_nested_name (struct d_info *);
-
-static struct demangle_component *d_prefix (struct d_info *);
-
-static struct demangle_component *d_unqualified_name (struct d_info *);
-
-static struct demangle_component *d_source_name (struct d_info *);
-
-static int d_number (struct d_info *);
-
-static struct demangle_component *d_identifier (struct d_info *, int);
-
-static struct demangle_component *d_operator_name (struct d_info *);
-
-static struct demangle_component *d_special_name (struct d_info *);
-
-static struct demangle_component *d_parmlist (struct d_info *);
-
-static int d_call_offset (struct d_info *, int);
-
-static struct demangle_component *d_ctor_dtor_name (struct d_info *);
-
-static struct demangle_component **
-d_cv_qualifiers (struct d_info *, struct demangle_component **, int);
-
-static struct demangle_component *
-d_ref_qualifier (struct d_info *, struct demangle_component *);
-
-static struct demangle_component *
-d_function_type (struct d_info *);
-
-static struct demangle_component *
-d_bare_function_type (struct d_info *, int);
-
-static struct demangle_component *
-d_class_enum_type (struct d_info *);
-
-static struct demangle_component *d_array_type (struct d_info *);
-
-static struct demangle_component *d_vector_type (struct d_info *);
-
-static struct demangle_component *
-d_pointer_to_member_type (struct d_info *);
-
-static struct demangle_component *
-d_template_param (struct d_info *);
-
-static struct demangle_component *d_template_args (struct d_info *);
-static struct demangle_component *d_template_args_1 (struct d_info *);
-
-static struct demangle_component *
-d_template_arg (struct d_info *);
-
-static struct demangle_component *d_expression (struct d_info *);
-
-static struct demangle_component *d_expr_primary (struct d_info *);
-
-static struct demangle_component *d_local_name (struct d_info *);
-
-static int d_discriminator (struct d_info *);
-
-static struct demangle_component *d_lambda (struct d_info *);
-
-static struct demangle_component *d_unnamed_type (struct d_info *);
-
-static struct demangle_component *
-d_clone_suffix (struct d_info *, struct demangle_component *);
-
-static int
-d_add_substitution (struct d_info *, struct demangle_component *);
-
-static struct demangle_component *d_substitution (struct d_info *, int);
-
-static void d_checkpoint (struct d_info *, struct d_info_checkpoint *);
-
-static void d_backtrack (struct d_info *, struct d_info_checkpoint *);
-
-static void d_growable_string_init (struct d_growable_string *, size_t);
-
-static inline void
-d_growable_string_resize (struct d_growable_string *, size_t);
-
-static inline void
-d_growable_string_append_buffer (struct d_growable_string *,
-                                 const char *, size_t);
-static void
-d_growable_string_callback_adapter (const char *, size_t, void *);
-
-static void
-d_print_init (struct d_print_info *, demangle_callbackref, void *,
-	      const struct demangle_component *);
-
-static inline void d_print_error (struct d_print_info *);
-
-static inline int d_print_saw_error (struct d_print_info *);
-
-static inline void d_print_flush (struct d_print_info *);
-
-static inline void d_append_char (struct d_print_info *, char);
-
-static inline void d_append_buffer (struct d_print_info *,
-                                    const char *, size_t);
-
-static inline void d_append_string (struct d_print_info *, const char *);
-
-static inline char d_last_char (struct d_print_info *);
-
-static void
-d_print_comp (struct d_print_info *, int, const struct demangle_component *);
-
-static void
-d_print_java_identifier (struct d_print_info *, const char *, int);
-
-static void
-d_print_mod_list (struct d_print_info *, int, struct d_print_mod *, int);
-
-static void
-d_print_mod (struct d_print_info *, int, const struct demangle_component *);
-
-static void
-d_print_function_type (struct d_print_info *, int,
-                       const struct demangle_component *,
-                       struct d_print_mod *);
-
-static void
-d_print_array_type (struct d_print_info *, int,
-                    const struct demangle_component *,
-                    struct d_print_mod *);
-
-static void
-d_print_expr_op (struct d_print_info *, int, const struct demangle_component *);
-
-static void d_print_cast (struct d_print_info *, int,
-			  const struct demangle_component *);
-static void d_print_conversion (struct d_print_info *, int,
-				const struct demangle_component *);
-
-static int d_demangle_callback (const char *, int,
-                                demangle_callbackref, void *);
-static char *d_demangle (const char *, int, size_t *);
-
-/* True iff TYPE is a demangling component representing a
-   function-type-qualifier.  */
-
-static int
-is_fnqual_component_type (enum demangle_component_type type)
-{
-  return (type == DEMANGLE_COMPONENT_RESTRICT_THIS
-	  || type == DEMANGLE_COMPONENT_VOLATILE_THIS
-	  || type == DEMANGLE_COMPONENT_CONST_THIS
-	  || type == DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS
-	  || type == DEMANGLE_COMPONENT_TRANSACTION_SAFE
-	  || type == DEMANGLE_COMPONENT_NOEXCEPT
-	  || type == DEMANGLE_COMPONENT_THROW_SPEC
-	  || type == DEMANGLE_COMPONENT_REFERENCE_THIS);
-}
-
-#define FNQUAL_COMPONENT_CASE				\
-    case DEMANGLE_COMPONENT_RESTRICT_THIS:		\
-    case DEMANGLE_COMPONENT_VOLATILE_THIS:		\
-    case DEMANGLE_COMPONENT_CONST_THIS:			\
-    case DEMANGLE_COMPONENT_REFERENCE_THIS:		\
-    case DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS:	\
-    case DEMANGLE_COMPONENT_TRANSACTION_SAFE:		\
-    case DEMANGLE_COMPONENT_NOEXCEPT:			\
-    case DEMANGLE_COMPONENT_THROW_SPEC
-
-#ifdef CP_DEMANGLE_DEBUG
-
-static void
-d_dump (struct demangle_component *dc, int indent)
-{
-  int i;
-
-  if (dc == NULL)
-    {
-      if (indent == 0)
-        printf ("failed demangling\n");
-      return;
-    }
-
-  for (i = 0; i < indent; ++i)
-    putchar (' ');
-
-  switch (dc->type)
-    {
-    case DEMANGLE_COMPONENT_NAME:
-      printf ("name '%.*s'\n", dc->u.s_name.len, dc->u.s_name.s);
-      return;
-    case DEMANGLE_COMPONENT_TAGGED_NAME:
-      printf ("tagged name\n");
-      d_dump (dc->u.s_binary.left, indent + 2);
-      d_dump (dc->u.s_binary.right, indent + 2);
-      return;
-    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
-      printf ("template parameter %ld\n", dc->u.s_number.number);
-      return;
-    case DEMANGLE_COMPONENT_FUNCTION_PARAM:
-      printf ("function parameter %ld\n", dc->u.s_number.number);
-      return;
-    case DEMANGLE_COMPONENT_CTOR:
-      printf ("constructor %d\n", (int) dc->u.s_ctor.kind);
-      d_dump (dc->u.s_ctor.name, indent + 2);
-      return;
-    case DEMANGLE_COMPONENT_DTOR:
-      printf ("destructor %d\n", (int) dc->u.s_dtor.kind);
-      d_dump (dc->u.s_dtor.name, indent + 2);
-      return;
-    case DEMANGLE_COMPONENT_SUB_STD:
-      printf ("standard substitution %s\n", dc->u.s_string.string);
-      return;
-    case DEMANGLE_COMPONENT_BUILTIN_TYPE:
-      printf ("builtin type %s\n", dc->u.s_builtin.type->name);
-      return;
-    case DEMANGLE_COMPONENT_OPERATOR:
-      printf ("operator %s\n", dc->u.s_operator.op->name);
-      return;
-    case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
-      printf ("extended operator with %d args\n",
-	      dc->u.s_extended_operator.args);
-      d_dump (dc->u.s_extended_operator.name, indent + 2);
-      return;
-
-    case DEMANGLE_COMPONENT_QUAL_NAME:
-      printf ("qualified name\n");
-      break;
-    case DEMANGLE_COMPONENT_LOCAL_NAME:
-      printf ("local name\n");
-      break;
-    case DEMANGLE_COMPONENT_TYPED_NAME:
-      printf ("typed name\n");
-      break;
-    case DEMANGLE_COMPONENT_TEMPLATE:
-      printf ("template\n");
-      break;
-    case DEMANGLE_COMPONENT_VTABLE:
-      printf ("vtable\n");
-      break;
-    case DEMANGLE_COMPONENT_VTT:
-      printf ("VTT\n");
-      break;
-    case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
-      printf ("construction vtable\n");
-      break;
-    case DEMANGLE_COMPONENT_TYPEINFO:
-      printf ("typeinfo\n");
-      break;
-    case DEMANGLE_COMPONENT_TYPEINFO_NAME:
-      printf ("typeinfo name\n");
-      break;
-    case DEMANGLE_COMPONENT_TYPEINFO_FN:
-      printf ("typeinfo function\n");
-      break;
-    case DEMANGLE_COMPONENT_THUNK:
-      printf ("thunk\n");
-      break;
-    case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
-      printf ("virtual thunk\n");
-      break;
-    case DEMANGLE_COMPONENT_COVARIANT_THUNK:
-      printf ("covariant thunk\n");
-      break;
-    case DEMANGLE_COMPONENT_JAVA_CLASS:
-      printf ("java class\n");
-      break;
-    case DEMANGLE_COMPONENT_GUARD:
-      printf ("guard\n");
-      break;
-    case DEMANGLE_COMPONENT_REFTEMP:
-      printf ("reference temporary\n");
-      break;
-    case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
-      printf ("hidden alias\n");
-      break;
-    case DEMANGLE_COMPONENT_TRANSACTION_CLONE:
-      printf ("transaction clone\n");
-      break;
-    case DEMANGLE_COMPONENT_NONTRANSACTION_CLONE:
-      printf ("non-transaction clone\n");
-      break;
-    case DEMANGLE_COMPONENT_RESTRICT:
-      printf ("restrict\n");
-      break;
-    case DEMANGLE_COMPONENT_VOLATILE:
-      printf ("volatile\n");
-      break;
-    case DEMANGLE_COMPONENT_CONST:
-      printf ("const\n");
-      break;
-    case DEMANGLE_COMPONENT_RESTRICT_THIS:
-      printf ("restrict this\n");
-      break;
-    case DEMANGLE_COMPONENT_VOLATILE_THIS:
-      printf ("volatile this\n");
-      break;
-    case DEMANGLE_COMPONENT_CONST_THIS:
-      printf ("const this\n");
-      break;
-    case DEMANGLE_COMPONENT_REFERENCE_THIS:
-      printf ("reference this\n");
-      break;
-    case DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS:
-      printf ("rvalue reference this\n");
-      break;
-    case DEMANGLE_COMPONENT_TRANSACTION_SAFE:
-      printf ("transaction_safe this\n");
-      break;
-    case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
-      printf ("vendor type qualifier\n");
-      break;
-    case DEMANGLE_COMPONENT_POINTER:
-      printf ("pointer\n");
-      break;
-    case DEMANGLE_COMPONENT_REFERENCE:
-      printf ("reference\n");
-      break;
-    case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
-      printf ("rvalue reference\n");
-      break;
-    case DEMANGLE_COMPONENT_COMPLEX:
-      printf ("complex\n");
-      break;
-    case DEMANGLE_COMPONENT_IMAGINARY:
-      printf ("imaginary\n");
-      break;
-    case DEMANGLE_COMPONENT_VENDOR_TYPE:
-      printf ("vendor type\n");
-      break;
-    case DEMANGLE_COMPONENT_FUNCTION_TYPE:
-      printf ("function type\n");
-      break;
-    case DEMANGLE_COMPONENT_ARRAY_TYPE:
-      printf ("array type\n");
-      break;
-    case DEMANGLE_COMPONENT_PTRMEM_TYPE:
-      printf ("pointer to member type\n");
-      break;
-    case DEMANGLE_COMPONENT_FIXED_TYPE:
-      printf ("fixed-point type, accum? %d, sat? %d\n",
-              dc->u.s_fixed.accum, dc->u.s_fixed.sat);
-      d_dump (dc->u.s_fixed.length, indent + 2);
-      break;
-    case DEMANGLE_COMPONENT_ARGLIST:
-      printf ("argument list\n");
-      break;
-    case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
-      printf ("template argument list\n");
-      break;
-    case DEMANGLE_COMPONENT_INITIALIZER_LIST:
-      printf ("initializer list\n");
-      break;
-    case DEMANGLE_COMPONENT_CAST:
-      printf ("cast\n");
-      break;
-    case DEMANGLE_COMPONENT_CONVERSION:
-      printf ("conversion operator\n");
-      break;
-    case DEMANGLE_COMPONENT_NULLARY:
-      printf ("nullary operator\n");
-      break;
-    case DEMANGLE_COMPONENT_UNARY:
-      printf ("unary operator\n");
-      break;
-    case DEMANGLE_COMPONENT_BINARY:
-      printf ("binary operator\n");
-      break;
-    case DEMANGLE_COMPONENT_BINARY_ARGS:
-      printf ("binary operator arguments\n");
-      break;
-    case DEMANGLE_COMPONENT_TRINARY:
-      printf ("trinary operator\n");
-      break;
-    case DEMANGLE_COMPONENT_TRINARY_ARG1:
-      printf ("trinary operator arguments 1\n");
-      break;
-    case DEMANGLE_COMPONENT_TRINARY_ARG2:
-      printf ("trinary operator arguments 1\n");
-      break;
-    case DEMANGLE_COMPONENT_LITERAL:
-      printf ("literal\n");
-      break;
-    case DEMANGLE_COMPONENT_LITERAL_NEG:
-      printf ("negative literal\n");
-      break;
-    case DEMANGLE_COMPONENT_JAVA_RESOURCE:
-      printf ("java resource\n");
-      break;
-    case DEMANGLE_COMPONENT_COMPOUND_NAME:
-      printf ("compound name\n");
-      break;
-    case DEMANGLE_COMPONENT_CHARACTER:
-      printf ("character '%c'\n",  dc->u.s_character.character);
-      return;
-    case DEMANGLE_COMPONENT_NUMBER:
-      printf ("number %ld\n", dc->u.s_number.number);
-      return;
-    case DEMANGLE_COMPONENT_DECLTYPE:
-      printf ("decltype\n");
-      break;
-    case DEMANGLE_COMPONENT_PACK_EXPANSION:
-      printf ("pack expansion\n");
-      break;
-    case DEMANGLE_COMPONENT_TLS_INIT:
-      printf ("tls init function\n");
-      break;
-    case DEMANGLE_COMPONENT_TLS_WRAPPER:
-      printf ("tls wrapper function\n");
-      break;
-    case DEMANGLE_COMPONENT_DEFAULT_ARG:
-      printf ("default argument %d\n", dc->u.s_unary_num.num);
-      d_dump (dc->u.s_unary_num.sub, indent+2);
-      return;
-    case DEMANGLE_COMPONENT_LAMBDA:
-      printf ("lambda %d\n", dc->u.s_unary_num.num);
-      d_dump (dc->u.s_unary_num.sub, indent+2);
-      return;
-    }
-
-  d_dump (d_left (dc), indent + 2);
-  d_dump (d_right (dc), indent + 2);
-}
-
-#endif /* CP_DEMANGLE_DEBUG */
-
-/* Fill in a DEMANGLE_COMPONENT_NAME.  */
-
-CP_STATIC_IF_GLIBCPP_V3
-int
-cplus_demangle_fill_name (struct demangle_component *p, const char *s, int len)
-{
-  if (p == NULL || s == NULL || len == 0)
-    return 0;
-  p->type = DEMANGLE_COMPONENT_NAME;
-  p->u.s_name.s = s;
-  p->u.s_name.len = len;
-  return 1;
-}
-
-/* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR.  */
-
-CP_STATIC_IF_GLIBCPP_V3
-int
-cplus_demangle_fill_extended_operator (struct demangle_component *p, int args,
-                                       struct demangle_component *name)
-{
-  if (p == NULL || args < 0 || name == NULL)
-    return 0;
-  p->type = DEMANGLE_COMPONENT_EXTENDED_OPERATOR;
-  p->u.s_extended_operator.args = args;
-  p->u.s_extended_operator.name = name;
-  return 1;
-}
-
-/* Fill in a DEMANGLE_COMPONENT_CTOR.  */
-
-CP_STATIC_IF_GLIBCPP_V3
-int
-cplus_demangle_fill_ctor (struct demangle_component *p,
-                          enum gnu_v3_ctor_kinds kind,
-                          struct demangle_component *name)
-{
-  if (p == NULL
-      || name == NULL
-      || (int) kind < gnu_v3_complete_object_ctor
-      || (int) kind > gnu_v3_object_ctor_group)
-    return 0;
-  p->type = DEMANGLE_COMPONENT_CTOR;
-  p->u.s_ctor.kind = kind;
-  p->u.s_ctor.name = name;
-  return 1;
-}
-
-/* Fill in a DEMANGLE_COMPONENT_DTOR.  */
-
-CP_STATIC_IF_GLIBCPP_V3
-int
-cplus_demangle_fill_dtor (struct demangle_component *p,
-                          enum gnu_v3_dtor_kinds kind,
-                          struct demangle_component *name)
-{
-  if (p == NULL
-      || name == NULL
-      || (int) kind < gnu_v3_deleting_dtor
-      || (int) kind > gnu_v3_object_dtor_group)
-    return 0;
-  p->type = DEMANGLE_COMPONENT_DTOR;
-  p->u.s_dtor.kind = kind;
-  p->u.s_dtor.name = name;
-  return 1;
-}
-
-/* Add a new component.  */
-
-static struct demangle_component *
-d_make_empty (struct d_info *di)
-{
-  struct demangle_component *p;
-
-  if (di->next_comp >= di->num_comps)
-    return NULL;
-  p = &di->comps[di->next_comp];
-  ++di->next_comp;
-  return p;
-}
-
-/* Add a new generic component.  */
-
-static struct demangle_component *
-d_make_comp (struct d_info *di, enum demangle_component_type type,
-             struct demangle_component *left,
-             struct demangle_component *right)
-{
-  struct demangle_component *p;
-
-  /* We check for errors here.  A typical error would be a NULL return
-     from a subroutine.  We catch those here, and return NULL
-     upward.  */
-  switch (type)
-    {
-      /* These types require two parameters.  */
-    case DEMANGLE_COMPONENT_QUAL_NAME:
-    case DEMANGLE_COMPONENT_LOCAL_NAME:
-    case DEMANGLE_COMPONENT_TYPED_NAME:
-    case DEMANGLE_COMPONENT_TAGGED_NAME:
-    case DEMANGLE_COMPONENT_TEMPLATE:
-    case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
-    case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
-    case DEMANGLE_COMPONENT_PTRMEM_TYPE:
-    case DEMANGLE_COMPONENT_UNARY:
-    case DEMANGLE_COMPONENT_BINARY:
-    case DEMANGLE_COMPONENT_BINARY_ARGS:
-    case DEMANGLE_COMPONENT_TRINARY:
-    case DEMANGLE_COMPONENT_TRINARY_ARG1:
-    case DEMANGLE_COMPONENT_LITERAL:
-    case DEMANGLE_COMPONENT_LITERAL_NEG:
-    case DEMANGLE_COMPONENT_COMPOUND_NAME:
-    case DEMANGLE_COMPONENT_VECTOR_TYPE:
-    case DEMANGLE_COMPONENT_CLONE:
-      if (left == NULL || right == NULL)
-	return NULL;
-      break;
-
-      /* These types only require one parameter.  */
-    case DEMANGLE_COMPONENT_VTABLE:
-    case DEMANGLE_COMPONENT_VTT:
-    case DEMANGLE_COMPONENT_TYPEINFO:
-    case DEMANGLE_COMPONENT_TYPEINFO_NAME:
-    case DEMANGLE_COMPONENT_TYPEINFO_FN:
-    case DEMANGLE_COMPONENT_THUNK:
-    case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
-    case DEMANGLE_COMPONENT_COVARIANT_THUNK:
-    case DEMANGLE_COMPONENT_JAVA_CLASS:
-    case DEMANGLE_COMPONENT_GUARD:
-    case DEMANGLE_COMPONENT_TLS_INIT:
-    case DEMANGLE_COMPONENT_TLS_WRAPPER:
-    case DEMANGLE_COMPONENT_REFTEMP:
-    case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
-    case DEMANGLE_COMPONENT_TRANSACTION_CLONE:
-    case DEMANGLE_COMPONENT_NONTRANSACTION_CLONE:
-    case DEMANGLE_COMPONENT_POINTER:
-    case DEMANGLE_COMPONENT_REFERENCE:
-    case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
-    case DEMANGLE_COMPONENT_COMPLEX:
-    case DEMANGLE_COMPONENT_IMAGINARY:
-    case DEMANGLE_COMPONENT_VENDOR_TYPE:
-    case DEMANGLE_COMPONENT_CAST:
-    case DEMANGLE_COMPONENT_CONVERSION:
-    case DEMANGLE_COMPONENT_JAVA_RESOURCE:
-    case DEMANGLE_COMPONENT_DECLTYPE:
-    case DEMANGLE_COMPONENT_PACK_EXPANSION:
-    case DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS:
-    case DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS:
-    case DEMANGLE_COMPONENT_NULLARY:
-    case DEMANGLE_COMPONENT_TRINARY_ARG2:
-      if (left == NULL)
-	return NULL;
-      break;
-
-      /* This needs a right parameter, but the left parameter can be
-	 empty.  */
-    case DEMANGLE_COMPONENT_ARRAY_TYPE:
-    case DEMANGLE_COMPONENT_INITIALIZER_LIST:
-      if (right == NULL)
-	return NULL;
-      break;
-
-      /* These are allowed to have no parameters--in some cases they
-	 will be filled in later.  */
-    case DEMANGLE_COMPONENT_FUNCTION_TYPE:
-    case DEMANGLE_COMPONENT_RESTRICT:
-    case DEMANGLE_COMPONENT_VOLATILE:
-    case DEMANGLE_COMPONENT_CONST:
-    case DEMANGLE_COMPONENT_ARGLIST:
-    case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
-    FNQUAL_COMPONENT_CASE:
-      break;
-
-      /* Other types should not be seen here.  */
-    default:
-      return NULL;
-    }
-
-  p = d_make_empty (di);
-  if (p != NULL)
-    {
-      p->type = type;
-      p->u.s_binary.left = left;
-      p->u.s_binary.right = right;
-    }
-  return p;
-}
-
-/* Add a new demangle mangled name component.  */
-
-static struct demangle_component *
-d_make_demangle_mangled_name (struct d_info *di, const char *s)
-{
-  if (d_peek_char (di) != '_' || d_peek_next_char (di) != 'Z')
-    return d_make_name (di, s, strlen (s));
-  d_advance (di, 2);
-  return d_encoding (di, 0);
-}
-
-/* Add a new name component.  */
-
-static struct demangle_component *
-d_make_name (struct d_info *di, const char *s, int len)
-{
-  struct demangle_component *p;
-
-  p = d_make_empty (di);
-  if (! cplus_demangle_fill_name (p, s, len))
-    return NULL;
-  return p;
-}
-
-/* Add a new builtin type component.  */
-
-static struct demangle_component *
-d_make_builtin_type (struct d_info *di,
-                     const struct demangle_builtin_type_info *type)
-{
-  struct demangle_component *p;
-
-  if (type == NULL)
-    return NULL;
-  p = d_make_empty (di);
-  if (p != NULL)
-    {
-      p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE;
-      p->u.s_builtin.type = type;
-    }
-  return p;
-}
-
-/* Add a new operator component.  */
-
-static struct demangle_component *
-d_make_operator (struct d_info *di, const struct demangle_operator_info *op)
-{
-  struct demangle_component *p;
-
-  p = d_make_empty (di);
-  if (p != NULL)
-    {
-      p->type = DEMANGLE_COMPONENT_OPERATOR;
-      p->u.s_operator.op = op;
-    }
-  return p;
-}
-
-/* Add a new extended operator component.  */
-
-static struct demangle_component *
-d_make_extended_operator (struct d_info *di, int args,
-                          struct demangle_component *name)
-{
-  struct demangle_component *p;
-
-  p = d_make_empty (di);
-  if (! cplus_demangle_fill_extended_operator (p, args, name))
-    return NULL;
-  return p;
-}
-
-static struct demangle_component *
-d_make_default_arg (struct d_info *di, int num,
-		    struct demangle_component *sub)
-{
-  struct demangle_component *p = d_make_empty (di);
-  if (p)
-    {
-      p->type = DEMANGLE_COMPONENT_DEFAULT_ARG;
-      p->u.s_unary_num.num = num;
-      p->u.s_unary_num.sub = sub;
-    }
-  return p;
-}
-
-/* Add a new constructor component.  */
-
-static struct demangle_component *
-d_make_ctor (struct d_info *di, enum gnu_v3_ctor_kinds kind,
-             struct demangle_component *name)
-{
-  struct demangle_component *p;
-
-  p = d_make_empty (di);
-  if (! cplus_demangle_fill_ctor (p, kind, name))
-    return NULL;
-  return p;
-}
-
-/* Add a new destructor component.  */
-
-static struct demangle_component *
-d_make_dtor (struct d_info *di, enum gnu_v3_dtor_kinds kind,
-             struct demangle_component *name)
-{
-  struct demangle_component *p;
-
-  p = d_make_empty (di);
-  if (! cplus_demangle_fill_dtor (p, kind, name))
-    return NULL;
-  return p;
-}
-
-/* Add a new template parameter.  */
-
-static struct demangle_component *
-d_make_template_param (struct d_info *di, int i)
-{
-  struct demangle_component *p;
-
-  p = d_make_empty (di);
-  if (p != NULL)
-    {
-      p->type = DEMANGLE_COMPONENT_TEMPLATE_PARAM;
-      p->u.s_number.number = i;
-    }
-  return p;
-}
-
-/* Add a new function parameter.  */
-
-static struct demangle_component *
-d_make_function_param (struct d_info *di, int i)
-{
-  struct demangle_component *p;
-
-  p = d_make_empty (di);
-  if (p != NULL)
-    {
-      p->type = DEMANGLE_COMPONENT_FUNCTION_PARAM;
-      p->u.s_number.number = i;
-    }
-  return p;
-}
-
-/* Add a new standard substitution component.  */
-
-static struct demangle_component *
-d_make_sub (struct d_info *di, const char *name, int len)
-{
-  struct demangle_component *p;
-
-  p = d_make_empty (di);
-  if (p != NULL)
-    {
-      p->type = DEMANGLE_COMPONENT_SUB_STD;
-      p->u.s_string.string = name;
-      p->u.s_string.len = len;
-    }
-  return p;
-}
-
-/* <mangled-name> ::= _Z <encoding> [<clone-suffix>]*
-
-   TOP_LEVEL is non-zero when called at the top level.  */
-
-CP_STATIC_IF_GLIBCPP_V3
-struct demangle_component *
-cplus_demangle_mangled_name (struct d_info *di, int top_level)
-{
-  struct demangle_component *p;
-
-  if (! d_check_char (di, '_')
-      /* Allow missing _ if not at toplevel to work around a
-	 bug in G++ abi-version=2 mangling; see the comment in
-	 write_template_arg.  */
-      && top_level)
-    return NULL;
-  if (! d_check_char (di, 'Z'))
-    return NULL;
-  p = d_encoding (di, top_level);
-
-  /* If at top level and parsing parameters, check for a clone
-     suffix.  */
-  if (top_level && (di->options & DMGL_PARAMS) != 0)
-    while (d_peek_char (di) == '.'
-	   && (IS_LOWER (d_peek_next_char (di))
-	       || d_peek_next_char (di) == '_'
-	       || IS_DIGIT (d_peek_next_char (di))))
-      p = d_clone_suffix (di, p);
-
-  return p;
-}
-
-/* Return whether a function should have a return type.  The argument
-   is the function name, which may be qualified in various ways.  The
-   rules are that template functions have return types with some
-   exceptions, function types which are not part of a function name
-   mangling have return types with some exceptions, and non-template
-   function names do not have return types.  The exceptions are that
-   constructors, destructors, and conversion operators do not have
-   return types.  */
-
-static int
-has_return_type (struct demangle_component *dc)
-{
-  if (dc == NULL)
-    return 0;
-  switch (dc->type)
-    {
-    default:
-      return 0;
-    case DEMANGLE_COMPONENT_TEMPLATE:
-      return ! is_ctor_dtor_or_conversion (d_left (dc));
-    FNQUAL_COMPONENT_CASE:
-      return has_return_type (d_left (dc));
-    }
-}
-
-/* Return whether a name is a constructor, a destructor, or a
-   conversion operator.  */
-
-static int
-is_ctor_dtor_or_conversion (struct demangle_component *dc)
-{
-  if (dc == NULL)
-    return 0;
-  switch (dc->type)
-    {
-    default:
-      return 0;
-    case DEMANGLE_COMPONENT_QUAL_NAME:
-    case DEMANGLE_COMPONENT_LOCAL_NAME:
-      return is_ctor_dtor_or_conversion (d_right (dc));
-    case DEMANGLE_COMPONENT_CTOR:
-    case DEMANGLE_COMPONENT_DTOR:
-    case DEMANGLE_COMPONENT_CONVERSION:
-      return 1;
-    }
-}
-
-/* <encoding> ::= <(function) name> <bare-function-type>
-              ::= <(data) name>
-              ::= <special-name>
-
-   TOP_LEVEL is non-zero when called at the top level, in which case
-   if DMGL_PARAMS is not set we do not demangle the function
-   parameters.  We only set this at the top level, because otherwise
-   we would not correctly demangle names in local scopes.  */
-
-static struct demangle_component *
-d_encoding (struct d_info *di, int top_level)
-{
-  char peek = d_peek_char (di);
-
-  if (peek == 'G' || peek == 'T')
-    return d_special_name (di);
-  else
-    {
-      struct demangle_component *dc;
-
-      dc = d_name (di);
-
-      if (dc != NULL && top_level && (di->options & DMGL_PARAMS) == 0)
-	{
-	  /* Strip off any initial CV-qualifiers, as they really apply
-	     to the `this' parameter, and they were not output by the
-	     v2 demangler without DMGL_PARAMS.  */
-	  while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS
-		 || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS
-		 || dc->type == DEMANGLE_COMPONENT_CONST_THIS
-		 || dc->type == DEMANGLE_COMPONENT_REFERENCE_THIS
-		 || dc->type == DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS)
-	    dc = d_left (dc);
-
-	  /* If the top level is a DEMANGLE_COMPONENT_LOCAL_NAME, then
-	     there may be function-qualifiers on its right argument which
-	     really apply here; this happens when parsing a class
-	     which is local to a function.  */
-	  if (dc->type == DEMANGLE_COMPONENT_LOCAL_NAME)
-	    {
-	      struct demangle_component *dcr;
-
-	      dcr = d_right (dc);
-	      while (is_fnqual_component_type (dcr->type))
-		dcr = d_left (dcr);
-	      dc->u.s_binary.right = dcr;
-	    }
-
-	  return dc;
-	}
-
-      peek = d_peek_char (di);
-      if (dc == NULL || peek == '\0' || peek == 'E')
-	return dc;
-      return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc,
-			  d_bare_function_type (di, has_return_type (dc)));
-    }
-}
-
-/* <tagged-name> ::= <name> B <source-name> */
-
-static struct demangle_component *
-d_abi_tags (struct d_info *di, struct demangle_component *dc)
-{
-  struct demangle_component *hold_last_name;
-  char peek;
-
-  /* Preserve the last name, so the ABI tag doesn't clobber it.  */
-  hold_last_name = di->last_name;
-
-  while (peek = d_peek_char (di),
-	 peek == 'B')
-    {
-      struct demangle_component *tag;
-      d_advance (di, 1);
-      tag = d_source_name (di);
-      dc = d_make_comp (di, DEMANGLE_COMPONENT_TAGGED_NAME, dc, tag);
-    }
-
-  di->last_name = hold_last_name;
-
-  return dc;
-}
-
-/* <name> ::= <nested-name>
-          ::= <unscoped-name>
-          ::= <unscoped-template-name> <template-args>
-          ::= <local-name>
-
-   <unscoped-name> ::= <unqualified-name>
-                   ::= St <unqualified-name>
-
-   <unscoped-template-name> ::= <unscoped-name>
-                            ::= <substitution>
-*/
-
-static struct demangle_component *
-d_name (struct d_info *di)
-{
-  char peek = d_peek_char (di);
-  struct demangle_component *dc;
-
-  switch (peek)
-    {
-    case 'N':
-      return d_nested_name (di);
-
-    case 'Z':
-      return d_local_name (di);
-
-    case 'U':
-      return d_unqualified_name (di);
-
-    case 'S':
-      {
-	int subst;
-
-	if (d_peek_next_char (di) != 't')
-	  {
-	    dc = d_substitution (di, 0);
-	    subst = 1;
-	  }
-	else
-	  {
-	    d_advance (di, 2);
-	    dc = d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME,
-			      d_make_name (di, "std", 3),
-			      d_unqualified_name (di));
-	    di->expansion += 3;
-	    subst = 0;
-	  }
-
-	if (d_peek_char (di) != 'I')
-	  {
-	    /* The grammar does not permit this case to occur if we
-	       called d_substitution() above (i.e., subst == 1).  We
-	       don't bother to check.  */
-	  }
-	else
-	  {
-	    /* This is <template-args>, which means that we just saw
-	       <unscoped-template-name>, which is a substitution
-	       candidate if we didn't just get it from a
-	       substitution.  */
-	    if (! subst)
-	      {
-		if (! d_add_substitution (di, dc))
-		  return NULL;
-	      }
-	    dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc,
-			      d_template_args (di));
-	  }
-
-	return dc;
-      }
-
-    case 'L':
-    default:
-      dc = d_unqualified_name (di);
-      if (d_peek_char (di) == 'I')
-	{
-	  /* This is <template-args>, which means that we just saw
-	     <unscoped-template-name>, which is a substitution
-	     candidate.  */
-	  if (! d_add_substitution (di, dc))
-	    return NULL;
-	  dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc,
-			    d_template_args (di));
-	}
-      return dc;
-    }
-}
-
-/* <nested-name> ::= N [<CV-qualifiers>] [<ref-qualifier>] <prefix> <unqualified-name> E
-                 ::= N [<CV-qualifiers>] [<ref-qualifier>] <template-prefix> <template-args> E
-*/
-
-static struct demangle_component *
-d_nested_name (struct d_info *di)
-{
-  struct demangle_component *ret;
-  struct demangle_component **pret;
-  struct demangle_component *rqual;
-
-  if (! d_check_char (di, 'N'))
-    return NULL;
-
-  pret = d_cv_qualifiers (di, &ret, 1);
-  if (pret == NULL)
-    return NULL;
-
-  /* Parse the ref-qualifier now and then attach it
-     once we have something to attach it to.  */
-  rqual = d_ref_qualifier (di, NULL);
-
-  *pret = d_prefix (di);
-  if (*pret == NULL)
-    return NULL;
-
-  if (rqual)
-    {
-      d_left (rqual) = ret;
-      ret = rqual;
-    }
-
-  if (! d_check_char (di, 'E'))
-    return NULL;
-
-  return ret;
-}
-
-/* <prefix> ::= <prefix> <unqualified-name>
-            ::= <template-prefix> <template-args>
-            ::= <template-param>
-            ::= <decltype>
-            ::=
-            ::= <substitution>
-
-   <template-prefix> ::= <prefix> <(template) unqualified-name>
-                     ::= <template-param>
-                     ::= <substitution>
-*/
-
-static struct demangle_component *
-d_prefix (struct d_info *di)
-{
-  struct demangle_component *ret = NULL;
-
-  while (1)
-    {
-      char peek;
-      enum demangle_component_type comb_type;
-      struct demangle_component *dc;
-
-      peek = d_peek_char (di);
-      if (peek == '\0')
-	return NULL;
-
-      /* The older code accepts a <local-name> here, but I don't see
-	 that in the grammar.  The older code does not accept a
-	 <template-param> here.  */
-
-      comb_type = DEMANGLE_COMPONENT_QUAL_NAME;
-      if (peek == 'D')
-	{
-	  char peek2 = d_peek_next_char (di);
-	  if (peek2 == 'T' || peek2 == 't')
-	    /* Decltype.  */
-	    dc = cplus_demangle_type (di);
-	  else
-	    /* Destructor name.  */
-	    dc = d_unqualified_name (di);
-	}
-      else if (IS_DIGIT (peek)
-	  || IS_LOWER (peek)
-	  || peek == 'C'
-	  || peek == 'U'
-	  || peek == 'L')
-	dc = d_unqualified_name (di);
-      else if (peek == 'S')
-	dc = d_substitution (di, 1);
-      else if (peek == 'I')
-	{
-	  if (ret == NULL)
-	    return NULL;
-	  comb_type = DEMANGLE_COMPONENT_TEMPLATE;
-	  dc = d_template_args (di);
-	}
-      else if (peek == 'T')
-	dc = d_template_param (di);
-      else if (peek == 'E')
-	return ret;
-      else if (peek == 'M')
-	{
-	  /* Initializer scope for a lambda.  We don't need to represent
-	     this; the normal code will just treat the variable as a type
-	     scope, which gives appropriate output.  */
-	  if (ret == NULL)
-	    return NULL;
-	  d_advance (di, 1);
-	  continue;
-	}
-      else
-	return NULL;
-
-      if (ret == NULL)
-	ret = dc;
-      else
-	ret = d_make_comp (di, comb_type, ret, dc);
-
-      if (peek != 'S' && d_peek_char (di) != 'E')
-	{
-	  if (! d_add_substitution (di, ret))
-	    return NULL;
-	}
-    }
-}
-
-/* <unqualified-name> ::= <operator-name>
-                      ::= <ctor-dtor-name>
-                      ::= <source-name>
-		      ::= <local-source-name> 
-
-    <local-source-name>	::= L <source-name> <discriminator>
-*/
-
-static struct demangle_component *
-d_unqualified_name (struct d_info *di)
-{
-  struct demangle_component *ret;
-  char peek;
-
-  peek = d_peek_char (di);
-  if (IS_DIGIT (peek))
-    ret = d_source_name (di);
-  else if (IS_LOWER (peek))
-    {
-      if (peek == 'o' && d_peek_next_char (di) == 'n')
-	d_advance (di, 2);
-      ret = d_operator_name (di);
-      if (ret != NULL && ret->type == DEMANGLE_COMPONENT_OPERATOR)
-	{
-	  di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2;
-	  if (!strcmp (ret->u.s_operator.op->code, "li"))
-	    ret = d_make_comp (di, DEMANGLE_COMPONENT_UNARY, ret,
-			       d_source_name (di));
-	}
-    }
-  else if (peek == 'C' || peek == 'D')
-    ret = d_ctor_dtor_name (di);
-  else if (peek == 'L')
-    {
-      d_advance (di, 1);
-
-      ret = d_source_name (di);
-      if (ret == NULL)
-	return NULL;
-      if (! d_discriminator (di))
-	return NULL;
-    }
-  else if (peek == 'U')
-    {
-      switch (d_peek_next_char (di))
-	{
-	case 'l':
-	  ret = d_lambda (di);
-	  break;
-	case 't':
-	  ret = d_unnamed_type (di);
-	  break;
-	default:
-	  return NULL;
-	}
-    }
-  else
-    return NULL;
-
-  if (d_peek_char (di) == 'B')
-    ret = d_abi_tags (di, ret);
-  return ret;
-}
-
-/* <source-name> ::= <(positive length) number> <identifier>  */
-
-static struct demangle_component *
-d_source_name (struct d_info *di)
-{
-  int len;
-  struct demangle_component *ret;
-
-  len = d_number (di);
-  if (len <= 0)
-    return NULL;
-  ret = d_identifier (di, len);
-  di->last_name = ret;
-  return ret;
-}
-
-/* number ::= [n] <(non-negative decimal integer)>  */
-
-static int
-d_number (struct d_info *di)
-{
-  int negative;
-  char peek;
-  int ret;
-
-  negative = 0;
-  peek = d_peek_char (di);
-  if (peek == 'n')
-    {
-      negative = 1;
-      d_advance (di, 1);
-      peek = d_peek_char (di);
-    }
-
-  ret = 0;
-  while (1)
-    {
-      if (! IS_DIGIT (peek))
-	{
-	  if (negative)
-	    ret = - ret;
-	  return ret;
-	}
-      ret = ret * 10 + peek - '0';
-      d_advance (di, 1);
-      peek = d_peek_char (di);
-    }
-}
-
-/* Like d_number, but returns a demangle_component.  */
-
-static struct demangle_component *
-d_number_component (struct d_info *di)
-{
-  struct demangle_component *ret = d_make_empty (di);
-  if (ret)
-    {
-      ret->type = DEMANGLE_COMPONENT_NUMBER;
-      ret->u.s_number.number = d_number (di);
-    }
-  return ret;
-}
-
-/* identifier ::= <(unqualified source code identifier)>  */
-
-static struct demangle_component *
-d_identifier (struct d_info *di, int len)
-{
-  const char *name;
-
-  name = d_str (di);
-
-  if (di->send - name < len)
-    return NULL;
-
-  d_advance (di, len);
-
-  /* A Java mangled name may have a trailing '$' if it is a C++
-     keyword.  This '$' is not included in the length count.  We just
-     ignore the '$'.  */
-  if ((di->options & DMGL_JAVA) != 0
-      && d_peek_char (di) == '$')
-    d_advance (di, 1);
-
-  /* Look for something which looks like a gcc encoding of an
-     anonymous namespace, and replace it with a more user friendly
-     name.  */
-  if (len >= (int) ANONYMOUS_NAMESPACE_PREFIX_LEN + 2
-      && memcmp (name, ANONYMOUS_NAMESPACE_PREFIX,
-		 ANONYMOUS_NAMESPACE_PREFIX_LEN) == 0)
-    {
-      const char *s;
-
-      s = name + ANONYMOUS_NAMESPACE_PREFIX_LEN;
-      if ((*s == '.' || *s == '_' || *s == '$')
-	  && s[1] == 'N')
-	{
-	  di->expansion -= len - sizeof "(anonymous namespace)";
-	  return d_make_name (di, "(anonymous namespace)",
-			      sizeof "(anonymous namespace)" - 1);
-	}
-    }
-
-  return d_make_name (di, name, len);
-}
-
-/* operator_name ::= many different two character encodings.
-                 ::= cv <type>
-                 ::= v <digit> <source-name>
-
-   This list is sorted for binary search.  */
-
-#define NL(s) s, (sizeof s) - 1
-
-CP_STATIC_IF_GLIBCPP_V3
-const struct demangle_operator_info cplus_demangle_operators[] =
-{
-  { "aN", NL ("&="),        2 },
-  { "aS", NL ("="),         2 },
-  { "aa", NL ("&&"),        2 },
-  { "ad", NL ("&"),         1 },
-  { "an", NL ("&"),         2 },
-  { "at", NL ("alignof "),   1 },
-  { "az", NL ("alignof "),   1 },
-  { "cc", NL ("const_cast"), 2 },
-  { "cl", NL ("()"),        2 },
-  { "cm", NL (","),         2 },
-  { "co", NL ("~"),         1 },
-  { "dV", NL ("/="),        2 },
-  { "da", NL ("delete[] "), 1 },
-  { "dc", NL ("dynamic_cast"), 2 },
-  { "de", NL ("*"),         1 },
-  { "dl", NL ("delete "),   1 },
-  { "ds", NL (".*"),        2 },
-  { "dt", NL ("."),         2 },
-  { "dv", NL ("/"),         2 },
-  { "eO", NL ("^="),        2 },
-  { "eo", NL ("^"),         2 },
-  { "eq", NL ("=="),        2 },
-  { "fL", NL ("..."),       3 },
-  { "fR", NL ("..."),       3 },
-  { "fl", NL ("..."),       2 },
-  { "fr", NL ("..."),       2 },
-  { "ge", NL (">="),        2 },
-  { "gs", NL ("::"),	    1 },
-  { "gt", NL (">"),         2 },
-  { "ix", NL ("[]"),        2 },
-  { "lS", NL ("<<="),       2 },
-  { "le", NL ("<="),        2 },
-  { "li", NL ("operator\"\" "), 1 },
-  { "ls", NL ("<<"),        2 },
-  { "lt", NL ("<"),         2 },
-  { "mI", NL ("-="),        2 },
-  { "mL", NL ("*="),        2 },
-  { "mi", NL ("-"),         2 },
-  { "ml", NL ("*"),         2 },
-  { "mm", NL ("--"),        1 },
-  { "na", NL ("new[]"),     3 },
-  { "ne", NL ("!="),        2 },
-  { "ng", NL ("-"),         1 },
-  { "nt", NL ("!"),         1 },
-  { "nw", NL ("new"),       3 },
-  { "oR", NL ("|="),        2 },
-  { "oo", NL ("||"),        2 },
-  { "or", NL ("|"),         2 },
-  { "pL", NL ("+="),        2 },
-  { "pl", NL ("+"),         2 },
-  { "pm", NL ("->*"),       2 },
-  { "pp", NL ("++"),        1 },
-  { "ps", NL ("+"),         1 },
-  { "pt", NL ("->"),        2 },
-  { "qu", NL ("?"),         3 },
-  { "rM", NL ("%="),        2 },
-  { "rS", NL (">>="),       2 },
-  { "rc", NL ("reinterpret_cast"), 2 },
-  { "rm", NL ("%"),         2 },
-  { "rs", NL (">>"),        2 },
-  { "sP", NL ("sizeof..."), 1 },
-  { "sZ", NL ("sizeof..."), 1 },
-  { "sc", NL ("static_cast"), 2 },
-  { "st", NL ("sizeof "),   1 },
-  { "sz", NL ("sizeof "),   1 },
-  { "tr", NL ("throw"),     0 },
-  { "tw", NL ("throw "),    1 },
-  { NULL, NULL, 0,          0 }
-};
-
-static struct demangle_component *
-d_operator_name (struct d_info *di)
-{
-  char c1;
-  char c2;
-
-  c1 = d_next_char (di);
-  c2 = d_next_char (di);
-  if (c1 == 'v' && IS_DIGIT (c2))
-    return d_make_extended_operator (di, c2 - '0', d_source_name (di));
-  else if (c1 == 'c' && c2 == 'v')
-    {
-      struct demangle_component *type;
-      int was_conversion = di->is_conversion;
-      struct demangle_component *res;
-
-      di->is_conversion = ! di->is_expression;
-      type = cplus_demangle_type (di);
-      if (di->is_conversion)
-	res = d_make_comp (di, DEMANGLE_COMPONENT_CONVERSION, type, NULL);
-      else
-	res = d_make_comp (di, DEMANGLE_COMPONENT_CAST, type, NULL);
-      di->is_conversion = was_conversion;
-      return res;
-    }
-  else
-    {
-      /* LOW is the inclusive lower bound.  */
-      int low = 0;
-      /* HIGH is the exclusive upper bound.  We subtract one to ignore
-	 the sentinel at the end of the array.  */
-      int high = ((sizeof (cplus_demangle_operators)
-		   / sizeof (cplus_demangle_operators[0]))
-		  - 1);
-
-      while (1)
-	{
-	  int i;
-	  const struct demangle_operator_info *p;
-
-	  i = low + (high - low) / 2;
-	  p = cplus_demangle_operators + i;
-
-	  if (c1 == p->code[0] && c2 == p->code[1])
-	    return d_make_operator (di, p);
-
-	  if (c1 < p->code[0] || (c1 == p->code[0] && c2 < p->code[1]))
-	    high = i;
-	  else
-	    low = i + 1;
-	  if (low == high)
-	    return NULL;
-	}
-    }
-}
-
-static struct demangle_component *
-d_make_character (struct d_info *di, int c)
-{
-  struct demangle_component *p;
-  p = d_make_empty (di);
-  if (p != NULL)
-    {
-      p->type = DEMANGLE_COMPONENT_CHARACTER;
-      p->u.s_character.character = c;
-    }
-  return p;
-}
-
-static struct demangle_component *
-d_java_resource (struct d_info *di)
-{
-  struct demangle_component *p = NULL;
-  struct demangle_component *next = NULL;
-  int len, i;
-  char c;
-  const char *str;
-
-  len = d_number (di);
-  if (len <= 1)
-    return NULL;
-
-  /* Eat the leading '_'.  */
-  if (d_next_char (di) != '_')
-    return NULL;
-  len--;
-
-  str = d_str (di);
-  i = 0;
-
-  while (len > 0)
-    {
-      c = str[i];
-      if (!c)
-	return NULL;
-
-      /* Each chunk is either a '$' escape...  */
-      if (c == '$')
-	{
-	  i++;
-	  switch (str[i++])
-	    {
-	    case 'S':
-	      c = '/';
-	      break;
-	    case '_':
-	      c = '.';
-	      break;
-	    case '$':
-	      c = '$';
-	      break;
-	    default:
-	      return NULL;
-	    }
-	  next = d_make_character (di, c);
-	  d_advance (di, i);
-	  str = d_str (di);
-	  len -= i;
-	  i = 0;
-	  if (next == NULL)
-	    return NULL;
-	}
-      /* ... or a sequence of characters.  */
-      else
-	{
-	  while (i < len && str[i] && str[i] != '$')
-	    i++;
-
-	  next = d_make_name (di, str, i);
-	  d_advance (di, i);
-	  str = d_str (di);
-	  len -= i;
-	  i = 0;
-	  if (next == NULL)
-	    return NULL;
-	}
-
-      if (p == NULL)
-	p = next;
-      else
-	{
-	  p = d_make_comp (di, DEMANGLE_COMPONENT_COMPOUND_NAME, p, next);
-	  if (p == NULL)
-	    return NULL;
-	}
-    }
-
-  p = d_make_comp (di, DEMANGLE_COMPONENT_JAVA_RESOURCE, p, NULL);
-
-  return p;
-}
-
-/* <special-name> ::= TV <type>
-                  ::= TT <type>
-                  ::= TI <type>
-                  ::= TS <type>
-                  ::= GV <(object) name>
-                  ::= T <call-offset> <(base) encoding>
-                  ::= Tc <call-offset> <call-offset> <(base) encoding>
-   Also g++ extensions:
-                  ::= TC <type> <(offset) number> _ <(base) type>
-                  ::= TF <type>
-                  ::= TJ <type>
-                  ::= GR <name>
-		  ::= GA <encoding>
-		  ::= Gr <resource name>
-		  ::= GTt <encoding>
-		  ::= GTn <encoding>
-*/
-
-static struct demangle_component *
-d_special_name (struct d_info *di)
-{
-  di->expansion += 20;
-  if (d_check_char (di, 'T'))
-    {
-      switch (d_next_char (di))
-	{
-	case 'V':
-	  di->expansion -= 5;
-	  return d_make_comp (di, DEMANGLE_COMPONENT_VTABLE,
-			      cplus_demangle_type (di), NULL);
-	case 'T':
-	  di->expansion -= 10;
-	  return d_make_comp (di, DEMANGLE_COMPONENT_VTT,
-			      cplus_demangle_type (di), NULL);
-	case 'I':
-	  return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO,
-			      cplus_demangle_type (di), NULL);
-	case 'S':
-	  return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_NAME,
-			      cplus_demangle_type (di), NULL);
-
-	case 'h':
-	  if (! d_call_offset (di, 'h'))
-	    return NULL;
-	  return d_make_comp (di, DEMANGLE_COMPONENT_THUNK,
-			      d_encoding (di, 0), NULL);
-
-	case 'v':
-	  if (! d_call_offset (di, 'v'))
-	    return NULL;
-	  return d_make_comp (di, DEMANGLE_COMPONENT_VIRTUAL_THUNK,
-			      d_encoding (di, 0), NULL);
-
-	case 'c':
-	  if (! d_call_offset (di, '\0'))
-	    return NULL;
-	  if (! d_call_offset (di, '\0'))
-	    return NULL;
-	  return d_make_comp (di, DEMANGLE_COMPONENT_COVARIANT_THUNK,
-			      d_encoding (di, 0), NULL);
-
-	case 'C':
-	  {
-	    struct demangle_component *derived_type;
-	    int offset;
-	    struct demangle_component *base_type;
-
-	    derived_type = cplus_demangle_type (di);
-	    offset = d_number (di);
-	    if (offset < 0)
-	      return NULL;
-	    if (! d_check_char (di, '_'))
-	      return NULL;
-	    base_type = cplus_demangle_type (di);
-	    /* We don't display the offset.  FIXME: We should display
-	       it in verbose mode.  */
-	    di->expansion += 5;
-	    return d_make_comp (di, DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE,
-				base_type, derived_type);
-	  }
-
-	case 'F':
-	  return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_FN,
-			      cplus_demangle_type (di), NULL);
-	case 'J':
-	  return d_make_comp (di, DEMANGLE_COMPONENT_JAVA_CLASS,
-			      cplus_demangle_type (di), NULL);
-
-	case 'H':
-	  return d_make_comp (di, DEMANGLE_COMPONENT_TLS_INIT,
-			      d_name (di), NULL);
-
-	case 'W':
-	  return d_make_comp (di, DEMANGLE_COMPONENT_TLS_WRAPPER,
-			      d_name (di), NULL);
-
-	default:
-	  return NULL;
-	}
-    }
-  else if (d_check_char (di, 'G'))
-    {
-      switch (d_next_char (di))
-	{
-	case 'V':
-	  return d_make_comp (di, DEMANGLE_COMPONENT_GUARD, d_name (di), NULL);
-
-	case 'R':
-	  {
-	    struct demangle_component *name = d_name (di);
-	    return d_make_comp (di, DEMANGLE_COMPONENT_REFTEMP, name,
-				d_number_component (di));
-	  }
-
-	case 'A':
-	  return d_make_comp (di, DEMANGLE_COMPONENT_HIDDEN_ALIAS,
-			      d_encoding (di, 0), NULL);
-
-	case 'T':
-	  switch (d_next_char (di))
-	    {
-	    case 'n':
-	      return d_make_comp (di, DEMANGLE_COMPONENT_NONTRANSACTION_CLONE,
-				  d_encoding (di, 0), NULL);
-	    default:
-	      /* ??? The proposal is that other letters (such as 'h') stand
-		 for different variants of transaction cloning, such as
-		 compiling directly for hardware transaction support.  But
-		 they still should all be transactional clones of some sort
-		 so go ahead and call them that.  */
-	    case 't':
-	      return d_make_comp (di, DEMANGLE_COMPONENT_TRANSACTION_CLONE,
-				  d_encoding (di, 0), NULL);
-	    }
-
-	case 'r':
-	  return d_java_resource (di);
-
-	default:
-	  return NULL;
-	}
-    }
-  else
-    return NULL;
-}
-
-/* <call-offset> ::= h <nv-offset> _
-                 ::= v <v-offset> _
-
-   <nv-offset> ::= <(offset) number>
-
-   <v-offset> ::= <(offset) number> _ <(virtual offset) number>
-
-   The C parameter, if not '\0', is a character we just read which is
-   the start of the <call-offset>.
-
-   We don't display the offset information anywhere.  FIXME: We should
-   display it in verbose mode.  */
-
-static int
-d_call_offset (struct d_info *di, int c)
-{
-  if (c == '\0')
-    c = d_next_char (di);
-
-  if (c == 'h')
-    d_number (di);
-  else if (c == 'v')
-    {
-      d_number (di);
-      if (! d_check_char (di, '_'))
-	return 0;
-      d_number (di);
-    }
-  else
-    return 0;
-
-  if (! d_check_char (di, '_'))
-    return 0;
-
-  return 1;
-}
-
-/* <ctor-dtor-name> ::= C1
-                    ::= C2
-                    ::= C3
-                    ::= D0
-                    ::= D1
-                    ::= D2
-*/
-
-static struct demangle_component *
-d_ctor_dtor_name (struct d_info *di)
-{
-  if (di->last_name != NULL)
-    {
-      if (di->last_name->type == DEMANGLE_COMPONENT_NAME)
-	di->expansion += di->last_name->u.s_name.len;
-      else if (di->last_name->type == DEMANGLE_COMPONENT_SUB_STD)
-	di->expansion += di->last_name->u.s_string.len;
-    }
-  switch (d_peek_char (di))
-    {
-    case 'C':
-      {
-	enum gnu_v3_ctor_kinds kind;
-	int inheriting = 0;
-
-	if (d_peek_next_char (di) == 'I')
-	  {
-	    inheriting = 1;
-	    d_advance (di, 1);
-	  }
-
-	switch (d_peek_next_char (di))
-	  {
-	  case '1':
-	    kind = gnu_v3_complete_object_ctor;
-	    break;
-	  case '2':
-	    kind = gnu_v3_base_object_ctor;
-	    break;
-	  case '3':
-	    kind = gnu_v3_complete_object_allocating_ctor;
-	    break;
-          case '4':
-	    kind = gnu_v3_unified_ctor;
-	    break;
-	  case '5':
-	    kind = gnu_v3_object_ctor_group;
-	    break;
-	  default:
-	    return NULL;
-	  }
-
-	d_advance (di, 2);
-
-	if (inheriting)
-	  cplus_demangle_type (di);
-
-	return d_make_ctor (di, kind, di->last_name);
-      }
-
-    case 'D':
-      {
-	enum gnu_v3_dtor_kinds kind;
-
-	switch (d_peek_next_char (di))
-	  {
-	  case '0':
-	    kind = gnu_v3_deleting_dtor;
-	    break;
-	  case '1':
-	    kind = gnu_v3_complete_object_dtor;
-	    break;
-	  case '2':
-	    kind = gnu_v3_base_object_dtor;
-	    break;
-          /*  digit '3' is not used */
-	  case '4':
-	    kind = gnu_v3_unified_dtor;
-	    break;
-	  case '5':
-	    kind = gnu_v3_object_dtor_group;
-	    break;
-	  default:
-	    return NULL;
-	  }
-	d_advance (di, 2);
-	return d_make_dtor (di, kind, di->last_name);
-      }
-
-    default:
-      return NULL;
-    }
-}
-
-/* True iff we're looking at an order-insensitive type-qualifier, including
-   function-type-qualifiers.  */
-
-static int
-next_is_type_qual (struct d_info *di)
-{
-  char peek = d_peek_char (di);
-  if (peek == 'r' || peek == 'V' || peek == 'K')
-    return 1;
-  if (peek == 'D')
-    {
-      peek = d_peek_next_char (di);
-      if (peek == 'x' || peek == 'o' || peek == 'O' || peek == 'w')
-	return 1;
-    }
-  return 0;
-}
-
-/* <type> ::= <builtin-type>
-          ::= <function-type>
-          ::= <class-enum-type>
-          ::= <array-type>
-          ::= <pointer-to-member-type>
-          ::= <template-param>
-          ::= <template-template-param> <template-args>
-          ::= <substitution>
-          ::= <CV-qualifiers> <type>
-          ::= P <type>
-          ::= R <type>
-          ::= O <type> (C++0x)
-          ::= C <type>
-          ::= G <type>
-          ::= U <source-name> <type>
-
-   <builtin-type> ::= various one letter codes
-                  ::= u <source-name>
-*/
-
-CP_STATIC_IF_GLIBCPP_V3
-const struct demangle_builtin_type_info
-cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT] =
-{
-  /* a */ { NL ("signed char"),	NL ("signed char"),	D_PRINT_DEFAULT },
-  /* b */ { NL ("bool"),	NL ("boolean"),		D_PRINT_BOOL },
-  /* c */ { NL ("char"),	NL ("byte"),		D_PRINT_DEFAULT },
-  /* d */ { NL ("double"),	NL ("double"),		D_PRINT_FLOAT },
-  /* e */ { NL ("long double"),	NL ("long double"),	D_PRINT_FLOAT },
-  /* f */ { NL ("float"),	NL ("float"),		D_PRINT_FLOAT },
-  /* g */ { NL ("__float128"),	NL ("__float128"),	D_PRINT_FLOAT },
-  /* h */ { NL ("unsigned char"), NL ("unsigned char"),	D_PRINT_DEFAULT },
-  /* i */ { NL ("int"),		NL ("int"),		D_PRINT_INT },
-  /* j */ { NL ("unsigned int"), NL ("unsigned"),	D_PRINT_UNSIGNED },
-  /* k */ { NULL, 0,		NULL, 0,		D_PRINT_DEFAULT },
-  /* l */ { NL ("long"),	NL ("long"),		D_PRINT_LONG },
-  /* m */ { NL ("unsigned long"), NL ("unsigned long"),	D_PRINT_UNSIGNED_LONG },
-  /* n */ { NL ("__int128"),	NL ("__int128"),	D_PRINT_DEFAULT },
-  /* o */ { NL ("unsigned __int128"), NL ("unsigned __int128"),
-	    D_PRINT_DEFAULT },
-  /* p */ { NULL, 0,		NULL, 0,		D_PRINT_DEFAULT },
-  /* q */ { NULL, 0,		NULL, 0,		D_PRINT_DEFAULT },
-  /* r */ { NULL, 0,		NULL, 0,		D_PRINT_DEFAULT },
-  /* s */ { NL ("short"),	NL ("short"),		D_PRINT_DEFAULT },
-  /* t */ { NL ("unsigned short"), NL ("unsigned short"), D_PRINT_DEFAULT },
-  /* u */ { NULL, 0,		NULL, 0,		D_PRINT_DEFAULT },
-  /* v */ { NL ("void"),	NL ("void"),		D_PRINT_VOID },
-  /* w */ { NL ("wchar_t"),	NL ("char"),		D_PRINT_DEFAULT },
-  /* x */ { NL ("long long"),	NL ("long"),		D_PRINT_LONG_LONG },
-  /* y */ { NL ("unsigned long long"), NL ("unsigned long long"),
-	    D_PRINT_UNSIGNED_LONG_LONG },
-  /* z */ { NL ("..."),		NL ("..."),		D_PRINT_DEFAULT },
-  /* 26 */ { NL ("decimal32"),	NL ("decimal32"),	D_PRINT_DEFAULT },
-  /* 27 */ { NL ("decimal64"),	NL ("decimal64"),	D_PRINT_DEFAULT },
-  /* 28 */ { NL ("decimal128"),	NL ("decimal128"),	D_PRINT_DEFAULT },
-  /* 29 */ { NL ("half"),	NL ("half"),		D_PRINT_FLOAT },
-  /* 30 */ { NL ("char16_t"),	NL ("char16_t"),	D_PRINT_DEFAULT },
-  /* 31 */ { NL ("char32_t"),	NL ("char32_t"),	D_PRINT_DEFAULT },
-  /* 32 */ { NL ("decltype(nullptr)"),	NL ("decltype(nullptr)"),
-	     D_PRINT_DEFAULT },
-};
-
-CP_STATIC_IF_GLIBCPP_V3
-struct demangle_component *
-cplus_demangle_type (struct d_info *di)
-{
-  char peek;
-  struct demangle_component *ret;
-  int can_subst;
-
-  /* The ABI specifies that when CV-qualifiers are used, the base type
-     is substitutable, and the fully qualified type is substitutable,
-     but the base type with a strict subset of the CV-qualifiers is
-     not substitutable.  The natural recursive implementation of the
-     CV-qualifiers would cause subsets to be substitutable, so instead
-     we pull them all off now.
-
-     FIXME: The ABI says that order-insensitive vendor qualifiers
-     should be handled in the same way, but we have no way to tell
-     which vendor qualifiers are order-insensitive and which are
-     order-sensitive.  So we just assume that they are all
-     order-sensitive.  g++ 3.4 supports only one vendor qualifier,
-     __vector, and it treats it as order-sensitive when mangling
-     names.  */
-
-  if (next_is_type_qual (di))
-    {
-      struct demangle_component **pret;
-
-      pret = d_cv_qualifiers (di, &ret, 0);
-      if (pret == NULL)
-	return NULL;
-      if (d_peek_char (di) == 'F')
-	{
-	  /* cv-qualifiers before a function type apply to 'this',
-	     so avoid adding the unqualified function type to
-	     the substitution list.  */
-	  *pret = d_function_type (di);
-	}
-      else
-	*pret = cplus_demangle_type (di);
-      if (!*pret)
-	return NULL;
-      if ((*pret)->type == DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS
-	  || (*pret)->type == DEMANGLE_COMPONENT_REFERENCE_THIS)
-	{
-	  /* Move the ref-qualifier outside the cv-qualifiers so that
-	     they are printed in the right order.  */
-	  struct demangle_component *fn = d_left (*pret);
-	  d_left (*pret) = ret;
-	  ret = *pret;
-	  *pret = fn;
-	}
-      if (! d_add_substitution (di, ret))
-	return NULL;
-      return ret;
-    }
-
-  can_subst = 1;
-
-  peek = d_peek_char (di);
-  switch (peek)
-    {
-    case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g':
-    case 'h': case 'i': case 'j':           case 'l': case 'm': case 'n':
-    case 'o':                               case 's': case 't':
-    case 'v': case 'w': case 'x': case 'y': case 'z':
-      ret = d_make_builtin_type (di,
-				 &cplus_demangle_builtin_types[peek - 'a']);
-      di->expansion += ret->u.s_builtin.type->len;
-      can_subst = 0;
-      d_advance (di, 1);
-      break;
-
-    case 'u':
-      d_advance (di, 1);
-      ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE,
-			 d_source_name (di), NULL);
-      break;
-
-    case 'F':
-      ret = d_function_type (di);
-      break;
-
-    case '0': case '1': case '2': case '3': case '4':
-    case '5': case '6': case '7': case '8': case '9':
-    case 'N':
-    case 'Z':
-      ret = d_class_enum_type (di);
-      break;
-
-    case 'A':
-      ret = d_array_type (di);
-      break;
-
-    case 'M':
-      ret = d_pointer_to_member_type (di);
-      break;
-
-    case 'T':
-      ret = d_template_param (di);
-      if (d_peek_char (di) == 'I')
-	{
-	  /* This may be <template-template-param> <template-args>.
-	     If this is the type for a conversion operator, we can
-	     have a <template-template-param> here only by following
-	     a derivation like this:
-
-	     <nested-name>
-	     -> <template-prefix> <template-args>
-	     -> <prefix> <template-unqualified-name> <template-args>
-	     -> <unqualified-name> <template-unqualified-name> <template-args>
-	     -> <source-name> <template-unqualified-name> <template-args>
-	     -> <source-name> <operator-name> <template-args>
-	     -> <source-name> cv <type> <template-args>
-	     -> <source-name> cv <template-template-param> <template-args> <template-args>
-
-	     where the <template-args> is followed by another.
-	     Otherwise, we must have a derivation like this:
-
-	     <nested-name>
-	     -> <template-prefix> <template-args>
-	     -> <prefix> <template-unqualified-name> <template-args>
-	     -> <unqualified-name> <template-unqualified-name> <template-args>
-	     -> <source-name> <template-unqualified-name> <template-args>
-	     -> <source-name> <operator-name> <template-args>
-	     -> <source-name> cv <type> <template-args>
-	     -> <source-name> cv <template-param> <template-args>
-
-	     where we need to leave the <template-args> to be processed
-	     by d_prefix (following the <template-prefix>).
-
-	     The <template-template-param> part is a substitution
-	     candidate.  */
-	  if (! di->is_conversion)
-	    {
-	      if (! d_add_substitution (di, ret))
-		return NULL;
-	      ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
-				 d_template_args (di));
-	    }
-	  else
-	    {
-	      struct demangle_component *args;
-	      struct d_info_checkpoint checkpoint;
-
-	      d_checkpoint (di, &checkpoint);
-	      args = d_template_args (di);
-	      if (d_peek_char (di) == 'I')
-		{
-		  if (! d_add_substitution (di, ret))
-		    return NULL;
-		  ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
-				     args);
-		}
-	      else
-		d_backtrack (di, &checkpoint);
-	    }
-	}
-      break;
-
-    case 'S':
-      /* If this is a special substitution, then it is the start of
-	 <class-enum-type>.  */
-      {
-	char peek_next;
-
-	peek_next = d_peek_next_char (di);
-	if (IS_DIGIT (peek_next)
-	    || peek_next == '_'
-	    || IS_UPPER (peek_next))
-	  {
-	    ret = d_substitution (di, 0);
-	    /* The substituted name may have been a template name and
-	       may be followed by tepmlate args.  */
-	    if (d_peek_char (di) == 'I')
-	      ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
-				 d_template_args (di));
-	    else
-	      can_subst = 0;
-	  }
-	else
-	  {
-	    ret = d_class_enum_type (di);
-	    /* If the substitution was a complete type, then it is not
-	       a new substitution candidate.  However, if the
-	       substitution was followed by template arguments, then
-	       the whole thing is a substitution candidate.  */
-	    if (ret != NULL && ret->type == DEMANGLE_COMPONENT_SUB_STD)
-	      can_subst = 0;
-	  }
-      }
-      break;
-
-    case 'O':
-      d_advance (di, 1);
-      ret = d_make_comp (di, DEMANGLE_COMPONENT_RVALUE_REFERENCE,
-                         cplus_demangle_type (di), NULL);
-      break;
-
-    case 'P':
-      d_advance (di, 1);
-      ret = d_make_comp (di, DEMANGLE_COMPONENT_POINTER,
-			 cplus_demangle_type (di), NULL);
-      break;
-
-    case 'R':
-      d_advance (di, 1);
-      ret = d_make_comp (di, DEMANGLE_COMPONENT_REFERENCE,
-                         cplus_demangle_type (di), NULL);
-      break;
-
-    case 'C':
-      d_advance (di, 1);
-      ret = d_make_comp (di, DEMANGLE_COMPONENT_COMPLEX,
-			 cplus_demangle_type (di), NULL);
-      break;
-
-    case 'G':
-      d_advance (di, 1);
-      ret = d_make_comp (di, DEMANGLE_COMPONENT_IMAGINARY,
-			 cplus_demangle_type (di), NULL);
-      break;
-
-    case 'U':
-      d_advance (di, 1);
-      ret = d_source_name (di);
-      if (d_peek_char (di) == 'I')
-	ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
-			   d_template_args (di));
-      ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL,
-			 cplus_demangle_type (di), ret);
-      break;
-
-    case 'D':
-      can_subst = 0;
-      d_advance (di, 1);
-      peek = d_next_char (di);
-      switch (peek)
-	{
-	case 'T':
-	case 't':
-	  /* decltype (expression) */
-	  ret = d_make_comp (di, DEMANGLE_COMPONENT_DECLTYPE,
-			     d_expression (di), NULL);
-	  if (ret && d_next_char (di) != 'E')
-	    ret = NULL;
-	  can_subst = 1;
-	  break;
-	  
-	case 'p':
-	  /* Pack expansion.  */
-	  ret = d_make_comp (di, DEMANGLE_COMPONENT_PACK_EXPANSION,
-			     cplus_demangle_type (di), NULL);
-	  can_subst = 1;
-	  break;
-
-	case 'a':
-	  /* auto */
-	  ret = d_make_name (di, "auto", 4);
-	  break;
-
-	case 'c':
-	  /* decltype(auto) */
-	  ret = d_make_name (di, "decltype(auto)", 14);
-	  break;
-
-	case 'f':
-	  /* 32-bit decimal floating point */
-	  ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[26]);
-	  di->expansion += ret->u.s_builtin.type->len;
-	  break;
-	case 'd':
-	  /* 64-bit DFP */
-	  ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[27]);
-	  di->expansion += ret->u.s_builtin.type->len;
-	  break;
-	case 'e':
-	  /* 128-bit DFP */
-	  ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[28]);
-	  di->expansion += ret->u.s_builtin.type->len;
-	  break;
-	case 'h':
-	  /* 16-bit half-precision FP */
-	  ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[29]);
-	  di->expansion += ret->u.s_builtin.type->len;
-	  break;
-	case 's':
-	  /* char16_t */
-	  ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[30]);
-	  di->expansion += ret->u.s_builtin.type->len;
-	  break;
-	case 'i':
-	  /* char32_t */
-	  ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[31]);
-	  di->expansion += ret->u.s_builtin.type->len;
-	  break;
-
-	case 'F':
-	  /* Fixed point types. DF<int bits><length><fract bits><sat>  */
-	  ret = d_make_empty (di);
-	  ret->type = DEMANGLE_COMPONENT_FIXED_TYPE;
-	  if ((ret->u.s_fixed.accum = IS_DIGIT (d_peek_char (di))))
-	    /* For demangling we don't care about the bits.  */
-	    d_number (di);
-	  ret->u.s_fixed.length = cplus_demangle_type (di);
-	  if (ret->u.s_fixed.length == NULL)
-	    return NULL;
-	  d_number (di);
-	  peek = d_next_char (di);
-	  ret->u.s_fixed.sat = (peek == 's');
-	  break;
-
-	case 'v':
-	  ret = d_vector_type (di);
-	  can_subst = 1;
-	  break;
-
-        case 'n':
-          /* decltype(nullptr) */
-	  ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[32]);
-	  di->expansion += ret->u.s_builtin.type->len;
-	  break;
-
-	default:
-	  return NULL;
-	}
-      break;
-
-    default:
-      return NULL;
-    }
-
-  if (can_subst)
-    {
-      if (! d_add_substitution (di, ret))
-	return NULL;
-    }
-
-  return ret;
-}
-
-/* <CV-qualifiers> ::= [r] [V] [K] [Dx] */
-
-static struct demangle_component **
-d_cv_qualifiers (struct d_info *di,
-                 struct demangle_component **pret, int member_fn)
-{
-  struct demangle_component **pstart;
-  char peek;
-
-  pstart = pret;
-  peek = d_peek_char (di);
-  while (next_is_type_qual (di))
-    {
-      enum demangle_component_type t;
-      struct demangle_component *right = NULL;
-
-      d_advance (di, 1);
-      if (peek == 'r')
-	{
-	  t = (member_fn
-	       ? DEMANGLE_COMPONENT_RESTRICT_THIS
-	       : DEMANGLE_COMPONENT_RESTRICT);
-	  di->expansion += sizeof "restrict";
-	}
-      else if (peek == 'V')
-	{
-	  t = (member_fn
-	       ? DEMANGLE_COMPONENT_VOLATILE_THIS
-	       : DEMANGLE_COMPONENT_VOLATILE);
-	  di->expansion += sizeof "volatile";
-	}
-      else if (peek == 'K')
-	{
-	  t = (member_fn
-	       ? DEMANGLE_COMPONENT_CONST_THIS
-	       : DEMANGLE_COMPONENT_CONST);
-	  di->expansion += sizeof "const";
-	}
-      else
-	{
-	  peek = d_next_char (di);
-	  if (peek == 'x')
-	    {
-	      t = DEMANGLE_COMPONENT_TRANSACTION_SAFE;
-	      di->expansion += sizeof "transaction_safe";
-	    }
-	  else if (peek == 'o'
-		   || peek == 'O')
-	    {
-	      t = DEMANGLE_COMPONENT_NOEXCEPT;
-	      di->expansion += sizeof "noexcept";
-	      if (peek == 'O')
-		{
-		  right = d_expression (di);
-		  if (right == NULL)
-		    return NULL;
-		  if (! d_check_char (di, 'E'))
-		    return NULL;
-		}
-	    }
-	  else if (peek == 'w')
-	    {
-	      t = DEMANGLE_COMPONENT_THROW_SPEC;
-	      di->expansion += sizeof "throw";
-	      right = d_parmlist (di);
-	      if (right == NULL)
-		return NULL;
-	      if (! d_check_char (di, 'E'))
-		return NULL;
-	    }
-	  else
-	    return NULL;
-	}
-
-      *pret = d_make_comp (di, t, NULL, right);
-      if (*pret == NULL)
-	return NULL;
-      pret = &d_left (*pret);
-
-      peek = d_peek_char (di);
-    }
-
-  if (!member_fn && peek == 'F')
-    {
-      while (pstart != pret)
-	{
-	  switch ((*pstart)->type)
-	    {
-	    case DEMANGLE_COMPONENT_RESTRICT:
-	      (*pstart)->type = DEMANGLE_COMPONENT_RESTRICT_THIS;
-	      break;
-	    case DEMANGLE_COMPONENT_VOLATILE:
-	      (*pstart)->type = DEMANGLE_COMPONENT_VOLATILE_THIS;
-	      break;
-	    case DEMANGLE_COMPONENT_CONST:
-	      (*pstart)->type = DEMANGLE_COMPONENT_CONST_THIS;
-	      break;
-	    default:
-	      break;
-	    }
-	  pstart = &d_left (*pstart);
-	}
-    }
-
-  return pret;
-}
-
-/* <ref-qualifier> ::= R
-                   ::= O */
-
-static struct demangle_component *
-d_ref_qualifier (struct d_info *di, struct demangle_component *sub)
-{
-  struct demangle_component *ret = sub;
-  char peek;
-
-  peek = d_peek_char (di);
-  if (peek == 'R' || peek == 'O')
-    {
-      enum demangle_component_type t;
-      if (peek == 'R')
-	{
-	  t = DEMANGLE_COMPONENT_REFERENCE_THIS;
-	  di->expansion += sizeof "&";
-	}
-      else
-	{
-	  t = DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS;
-	  di->expansion += sizeof "&&";
-	}
-      d_advance (di, 1);
-
-      ret = d_make_comp (di, t, ret, NULL);
-    }
-
-  return ret;
-}
-
-/* <function-type> ::= F [Y] <bare-function-type> [<ref-qualifier>] [T] E  */
-
-static struct demangle_component *
-d_function_type (struct d_info *di)
-{
-  struct demangle_component *ret;
-
-  if (! d_check_char (di, 'F'))
-    return NULL;
-  if (d_peek_char (di) == 'Y')
-    {
-      /* Function has C linkage.  We don't print this information.
-	 FIXME: We should print it in verbose mode.  */
-      d_advance (di, 1);
-    }
-  ret = d_bare_function_type (di, 1);
-  ret = d_ref_qualifier (di, ret);
-
-  if (! d_check_char (di, 'E'))
-    return NULL;
-  return ret;
-}
-
-/* <type>+ */
-
-static struct demangle_component *
-d_parmlist (struct d_info *di)
-{
-  struct demangle_component *tl;
-  struct demangle_component **ptl;
-
-  tl = NULL;
-  ptl = &tl;
-  while (1)
-    {
-      struct demangle_component *type;
-
-      char peek = d_peek_char (di);
-      if (peek == '\0' || peek == 'E' || peek == '.')
-	break;
-      if ((peek == 'R' || peek == 'O')
-	  && d_peek_next_char (di) == 'E')
-	/* Function ref-qualifier, not a ref prefix for a parameter type.  */
-	break;
-      type = cplus_demangle_type (di);
-      if (type == NULL)
-	return NULL;
-      *ptl = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, type, NULL);
-      if (*ptl == NULL)
-	return NULL;
-      ptl = &d_right (*ptl);
-    }
-
-  /* There should be at least one parameter type besides the optional
-     return type.  A function which takes no arguments will have a
-     single parameter type void.  */
-  if (tl == NULL)
-    return NULL;
-
-  /* If we have a single parameter type void, omit it.  */
-  if (d_right (tl) == NULL
-      && d_left (tl)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE
-      && d_left (tl)->u.s_builtin.type->print == D_PRINT_VOID)
-    {
-      di->expansion -= d_left (tl)->u.s_builtin.type->len;
-      d_left (tl) = NULL;
-    }
-
-  return tl;
-}
-
-/* <bare-function-type> ::= [J]<type>+  */
-
-static struct demangle_component *
-d_bare_function_type (struct d_info *di, int has_return_type)
-{
-  struct demangle_component *return_type;
-  struct demangle_component *tl;
-  char peek;
-
-  /* Detect special qualifier indicating that the first argument
-     is the return type.  */
-  peek = d_peek_char (di);
-  if (peek == 'J')
-    {
-      d_advance (di, 1);
-      has_return_type = 1;
-    }
-
-  if (has_return_type)
-    {
-      return_type = cplus_demangle_type (di);
-      if (return_type == NULL)
-	return NULL;
-    }
-  else
-    return_type = NULL;
-
-  tl = d_parmlist (di);
-  if (tl == NULL)
-    return NULL;
-
-  return d_make_comp (di, DEMANGLE_COMPONENT_FUNCTION_TYPE,
-		      return_type, tl);
-}
-
-/* <class-enum-type> ::= <name>  */
-
-static struct demangle_component *
-d_class_enum_type (struct d_info *di)
-{
-  return d_name (di);
-}
-
-/* <array-type> ::= A <(positive dimension) number> _ <(element) type>
-                ::= A [<(dimension) expression>] _ <(element) type>
-*/
-
-static struct demangle_component *
-d_array_type (struct d_info *di)
-{
-  char peek;
-  struct demangle_component *dim;
-
-  if (! d_check_char (di, 'A'))
-    return NULL;
-
-  peek = d_peek_char (di);
-  if (peek == '_')
-    dim = NULL;
-  else if (IS_DIGIT (peek))
-    {
-      const char *s;
-
-      s = d_str (di);
-      do
-	{
-	  d_advance (di, 1);
-	  peek = d_peek_char (di);
-	}
-      while (IS_DIGIT (peek));
-      dim = d_make_name (di, s, d_str (di) - s);
-      if (dim == NULL)
-	return NULL;
-    }
-  else
-    {
-      dim = d_expression (di);
-      if (dim == NULL)
-	return NULL;
-    }
-
-  if (! d_check_char (di, '_'))
-    return NULL;
-
-  return d_make_comp (di, DEMANGLE_COMPONENT_ARRAY_TYPE, dim,
-		      cplus_demangle_type (di));
-}
-
-/* <vector-type> ::= Dv <number> _ <type>
-                 ::= Dv _ <expression> _ <type> */
-
-static struct demangle_component *
-d_vector_type (struct d_info *di)
-{
-  char peek;
-  struct demangle_component *dim;
-
-  peek = d_peek_char (di);
-  if (peek == '_')
-    {
-      d_advance (di, 1);
-      dim = d_expression (di);
-    }
-  else
-    dim = d_number_component (di);
-
-  if (dim == NULL)
-    return NULL;
-
-  if (! d_check_char (di, '_'))
-    return NULL;
-
-  return d_make_comp (di, DEMANGLE_COMPONENT_VECTOR_TYPE, dim,
-		      cplus_demangle_type (di));
-}
-
-/* <pointer-to-member-type> ::= M <(class) type> <(member) type>  */
-
-static struct demangle_component *
-d_pointer_to_member_type (struct d_info *di)
-{
-  struct demangle_component *cl;
-  struct demangle_component *mem;
-
-  if (! d_check_char (di, 'M'))
-    return NULL;
-
-  cl = cplus_demangle_type (di);
-  if (cl == NULL)
-    return NULL;
-
-  /* The ABI says, "The type of a non-static member function is considered
-     to be different, for the purposes of substitution, from the type of a
-     namespace-scope or static member function whose type appears
-     similar. The types of two non-static member functions are considered
-     to be different, for the purposes of substitution, if the functions
-     are members of different classes. In other words, for the purposes of
-     substitution, the class of which the function is a member is
-     considered part of the type of function."
-
-     For a pointer to member function, this call to cplus_demangle_type
-     will end up adding a (possibly qualified) non-member function type to
-     the substitution table, which is not correct; however, the member
-     function type will never be used in a substitution, so putting the
-     wrong type in the substitution table is harmless.  */
-
-  mem = cplus_demangle_type (di);
-  if (mem == NULL)
-    return NULL;
-
-  return d_make_comp (di, DEMANGLE_COMPONENT_PTRMEM_TYPE, cl, mem);
-}
-
-/* <non-negative number> _ */
-
-static int
-d_compact_number (struct d_info *di)
-{
-  int num;
-  if (d_peek_char (di) == '_')
-    num = 0;
-  else if (d_peek_char (di) == 'n')
-    return -1;
-  else
-    num = d_number (di) + 1;
-
-  if (num < 0 || ! d_check_char (di, '_'))
-    return -1;
-  return num;
-}
-
-/* <template-param> ::= T_
-                    ::= T <(parameter-2 non-negative) number> _
-*/
-
-static struct demangle_component *
-d_template_param (struct d_info *di)
-{
-  int param;
-
-  if (! d_check_char (di, 'T'))
-    return NULL;
-
-  param = d_compact_number (di);
-  if (param < 0)
-    return NULL;
-
-  ++di->did_subs;
-
-  return d_make_template_param (di, param);
-}
-
-/* <template-args> ::= I <template-arg>+ E  */
-
-static struct demangle_component *
-d_template_args (struct d_info *di)
-{
-  if (d_peek_char (di) != 'I'
-      && d_peek_char (di) != 'J')
-    return NULL;
-  d_advance (di, 1);
-
-  return d_template_args_1 (di);
-}
-
-/* <template-arg>* E  */
-
-static struct demangle_component *
-d_template_args_1 (struct d_info *di)
-{
-  struct demangle_component *hold_last_name;
-  struct demangle_component *al;
-  struct demangle_component **pal;
-
-  /* Preserve the last name we saw--don't let the template arguments
-     clobber it, as that would give us the wrong name for a subsequent
-     constructor or destructor.  */
-  hold_last_name = di->last_name;
-
-  if (d_peek_char (di) == 'E')
-    {
-      /* An argument pack can be empty.  */
-      d_advance (di, 1);
-      return d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, NULL, NULL);
-    }
-
-  al = NULL;
-  pal = &al;
-  while (1)
-    {
-      struct demangle_component *a;
-
-      a = d_template_arg (di);
-      if (a == NULL)
-	return NULL;
-
-      *pal = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, a, NULL);
-      if (*pal == NULL)
-	return NULL;
-      pal = &d_right (*pal);
-
-      if (d_peek_char (di) == 'E')
-	{
-	  d_advance (di, 1);
-	  break;
-	}
-    }
-
-  di->last_name = hold_last_name;
-
-  return al;
-}
-
-/* <template-arg> ::= <type>
-                  ::= X <expression> E
-                  ::= <expr-primary>
-*/
-
-static struct demangle_component *
-d_template_arg (struct d_info *di)
-{
-  struct demangle_component *ret;
-
-  switch (d_peek_char (di))
-    {
-    case 'X':
-      d_advance (di, 1);
-      ret = d_expression (di);
-      if (! d_check_char (di, 'E'))
-	return NULL;
-      return ret;
-
-    case 'L':
-      return d_expr_primary (di);
-
-    case 'I':
-    case 'J':
-      /* An argument pack.  */
-      return d_template_args (di);
-
-    default:
-      return cplus_demangle_type (di);
-    }
-}
-
-/* Parse a sequence of expressions until we hit the terminator
-   character.  */
-
-static struct demangle_component *
-d_exprlist (struct d_info *di, char terminator)
-{
-  struct demangle_component *list = NULL;
-  struct demangle_component **p = &list;
-
-  if (d_peek_char (di) == terminator)
-    {
-      d_advance (di, 1);
-      return d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, NULL, NULL);
-    }
-
-  while (1)
-    {
-      struct demangle_component *arg = d_expression (di);
-      if (arg == NULL)
-	return NULL;
-
-      *p = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, arg, NULL);
-      if (*p == NULL)
-	return NULL;
-      p = &d_right (*p);
-
-      if (d_peek_char (di) == terminator)
-	{
-	  d_advance (di, 1);
-	  break;
-	}
-    }
-
-  return list;
-}
-
-/* Returns nonzero iff OP is an operator for a C++ cast: const_cast,
-   dynamic_cast, static_cast or reinterpret_cast.  */
-
-static int
-op_is_new_cast (struct demangle_component *op)
-{
-  const char *code = op->u.s_operator.op->code;
-  return (code[1] == 'c'
-	  && (code[0] == 's' || code[0] == 'd'
-	      || code[0] == 'c' || code[0] == 'r'));
-}
-
-/* <expression> ::= <(unary) operator-name> <expression>
-                ::= <(binary) operator-name> <expression> <expression>
-                ::= <(trinary) operator-name> <expression> <expression> <expression>
-		::= cl <expression>+ E
-                ::= st <type>
-                ::= <template-param>
-                ::= sr <type> <unqualified-name>
-                ::= sr <type> <unqualified-name> <template-args>
-                ::= <expr-primary>
-*/
-
-static inline struct demangle_component *
-d_expression_1 (struct d_info *di)
-{
-  char peek;
-
-  peek = d_peek_char (di);
-  if (peek == 'L')
-    return d_expr_primary (di);
-  else if (peek == 'T')
-    return d_template_param (di);
-  else if (peek == 's' && d_peek_next_char (di) == 'r')
-    {
-      struct demangle_component *type;
-      struct demangle_component *name;
-
-      d_advance (di, 2);
-      type = cplus_demangle_type (di);
-      name = d_unqualified_name (di);
-      if (d_peek_char (di) != 'I')
-	return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type, name);
-      else
-	return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type,
-			    d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name,
-					 d_template_args (di)));
-    }
-  else if (peek == 's' && d_peek_next_char (di) == 'p')
-    {
-      d_advance (di, 2);
-      return d_make_comp (di, DEMANGLE_COMPONENT_PACK_EXPANSION,
-			  d_expression_1 (di), NULL);
-    }
-  else if (peek == 'f' && d_peek_next_char (di) == 'p')
-    {
-      /* Function parameter used in a late-specified return type.  */
-      int index;
-      d_advance (di, 2);
-      if (d_peek_char (di) == 'T')
-	{
-	  /* 'this' parameter.  */
-	  d_advance (di, 1);
-	  index = 0;
-	}
-      else
-	{
-	  index = d_compact_number (di);
-	  if (index == INT_MAX || index == -1)
-	    return NULL;
-	  index++;
-	}
-      return d_make_function_param (di, index);
-    }
-  else if (IS_DIGIT (peek)
-	   || (peek == 'o' && d_peek_next_char (di) == 'n'))
-    {
-      /* We can get an unqualified name as an expression in the case of
-         a dependent function call, i.e. decltype(f(t)).  */
-      struct demangle_component *name;
-
-      if (peek == 'o')
-	/* operator-function-id, i.e. operator+(t).  */
-	d_advance (di, 2);
-
-      name = d_unqualified_name (di);
-      if (name == NULL)
-	return NULL;
-      if (d_peek_char (di) == 'I')
-	return d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name,
-			    d_template_args (di));
-      else
-	return name;
-    }
-  else if ((peek == 'i' || peek == 't')
-	   && d_peek_next_char (di) == 'l')
-    {
-      /* Brace-enclosed initializer list, untyped or typed.  */
-      struct demangle_component *type = NULL;
-      if (peek == 't')
-	type = cplus_demangle_type (di);
-      if (!d_peek_next_char (di))
-	return NULL;
-      d_advance (di, 2);
-      return d_make_comp (di, DEMANGLE_COMPONENT_INITIALIZER_LIST,
-			  type, d_exprlist (di, 'E'));
-    }
-  else
-    {
-      struct demangle_component *op;
-      const char *code = NULL;
-      int args;
-
-      op = d_operator_name (di);
-      if (op == NULL)
-	return NULL;
-
-      if (op->type == DEMANGLE_COMPONENT_OPERATOR)
-	{
-	  code = op->u.s_operator.op->code;
-	  di->expansion += op->u.s_operator.op->len - 2;
-	  if (strcmp (code, "st") == 0)
-	    return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
-				cplus_demangle_type (di));
-	}
-
-      switch (op->type)
-	{
-	default:
-	  return NULL;
-	case DEMANGLE_COMPONENT_OPERATOR:
-	  args = op->u.s_operator.op->args;
-	  break;
-	case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
-	  args = op->u.s_extended_operator.args;
-	  break;
-	case DEMANGLE_COMPONENT_CAST:
-	  args = 1;
-	  break;
-	}
-
-      switch (args)
-	{
-	case 0:
-	  return d_make_comp (di, DEMANGLE_COMPONENT_NULLARY, op, NULL);
-
-	case 1:
-	  {
-	    struct demangle_component *operand;
-	    int suffix = 0;
-
-	    if (code && (code[0] == 'p' || code[0] == 'm')
-		&& code[1] == code[0])
-	      /* pp_ and mm_ are the prefix variants.  */
-	      suffix = !d_check_char (di, '_');
-
-	    if (op->type == DEMANGLE_COMPONENT_CAST
-		&& d_check_char (di, '_'))
-	      operand = d_exprlist (di, 'E');
-	    else if (code && !strcmp (code, "sP"))
-	      operand = d_template_args_1 (di);
-	    else
-	      operand = d_expression_1 (di);
-
-	    if (suffix)
-	      /* Indicate the suffix variant for d_print_comp.  */
-	      return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
-				  d_make_comp (di,
-					       DEMANGLE_COMPONENT_BINARY_ARGS,
-					       operand, operand));
-	    else
-	      return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
-				  operand);
-	  }
-	case 2:
-	  {
-	    struct demangle_component *left;
-	    struct demangle_component *right;
-
-	    if (code == NULL)
-	      return NULL;
-	    if (op_is_new_cast (op))
-	      left = cplus_demangle_type (di);
-	    else if (code[0] == 'f')
-	      /* fold-expression.  */
-	      left = d_operator_name (di);
-	    else
-	      left = d_expression_1 (di);
-	    if (!strcmp (code, "cl"))
-	      right = d_exprlist (di, 'E');
-	    else if (!strcmp (code, "dt") || !strcmp (code, "pt"))
-	      {
-		right = d_unqualified_name (di);
-		if (d_peek_char (di) == 'I')
-		  right = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE,
-				       right, d_template_args (di));
-	      }
-	    else
-	      right = d_expression_1 (di);
-
-	    return d_make_comp (di, DEMANGLE_COMPONENT_BINARY, op,
-				d_make_comp (di,
-					     DEMANGLE_COMPONENT_BINARY_ARGS,
-					     left, right));
-	  }
-	case 3:
-	  {
-	    struct demangle_component *first;
-	    struct demangle_component *second;
-	    struct demangle_component *third;
-
-	    if (code == NULL)
-	      return NULL;
-	    else if (!strcmp (code, "qu"))
-	      {
-		/* ?: expression.  */
-		first = d_expression_1 (di);
-		second = d_expression_1 (di);
-		third = d_expression_1 (di);
-		if (third == NULL)
-		  return NULL;
-	      }
-	    else if (code[0] == 'f')
-	      {
-		/* fold-expression.  */
-		first = d_operator_name (di);
-		second = d_expression_1 (di);
-		third = d_expression_1 (di);
-		if (third == NULL)
-		  return NULL;
-	      }
-	    else if (code[0] == 'n')
-	      {
-		/* new-expression.  */
-		if (code[1] != 'w' && code[1] != 'a')
-		  return NULL;
-		first = d_exprlist (di, '_');
-		second = cplus_demangle_type (di);
-		if (d_peek_char (di) == 'E')
-		  {
-		    d_advance (di, 1);
-		    third = NULL;
-		  }
-		else if (d_peek_char (di) == 'p'
-			 && d_peek_next_char (di) == 'i')
-		  {
-		    /* Parenthesized initializer.  */
-		    d_advance (di, 2);
-		    third = d_exprlist (di, 'E');
-		  }
-		else if (d_peek_char (di) == 'i'
-			 && d_peek_next_char (di) == 'l')
-		  /* initializer-list.  */
-		  third = d_expression_1 (di);
-		else
-		  return NULL;
-	      }
-	    else
-	      return NULL;
-	    return d_make_comp (di, DEMANGLE_COMPONENT_TRINARY, op,
-				d_make_comp (di,
-					     DEMANGLE_COMPONENT_TRINARY_ARG1,
-					     first,
-					     d_make_comp (di,
-							  DEMANGLE_COMPONENT_TRINARY_ARG2,
-							  second, third)));
-	  }
-	default:
-	  return NULL;
-	}
-    }
-}
-
-static struct demangle_component *
-d_expression (struct d_info *di)
-{
-  struct demangle_component *ret;
-  int was_expression = di->is_expression;
-
-  di->is_expression = 1;
-  ret = d_expression_1 (di);
-  di->is_expression = was_expression;
-  return ret;
-}
-
-/* <expr-primary> ::= L <type> <(value) number> E
-                  ::= L <type> <(value) float> E
-                  ::= L <mangled-name> E
-*/
-
-static struct demangle_component *
-d_expr_primary (struct d_info *di)
-{
-  struct demangle_component *ret;
-
-  if (! d_check_char (di, 'L'))
-    return NULL;
-  if (d_peek_char (di) == '_'
-      /* Workaround for G++ bug; see comment in write_template_arg.  */
-      || d_peek_char (di) == 'Z')
-    ret = cplus_demangle_mangled_name (di, 0);
-  else
-    {
-      struct demangle_component *type;
-      enum demangle_component_type t;
-      const char *s;
-
-      type = cplus_demangle_type (di);
-      if (type == NULL)
-	return NULL;
-
-      /* If we have a type we know how to print, we aren't going to
-	 print the type name itself.  */
-      if (type->type == DEMANGLE_COMPONENT_BUILTIN_TYPE
-	  && type->u.s_builtin.type->print != D_PRINT_DEFAULT)
-	di->expansion -= type->u.s_builtin.type->len;
-
-      /* Rather than try to interpret the literal value, we just
-	 collect it as a string.  Note that it's possible to have a
-	 floating point literal here.  The ABI specifies that the
-	 format of such literals is machine independent.  That's fine,
-	 but what's not fine is that versions of g++ up to 3.2 with
-	 -fabi-version=1 used upper case letters in the hex constant,
-	 and dumped out gcc's internal representation.  That makes it
-	 hard to tell where the constant ends, and hard to dump the
-	 constant in any readable form anyhow.  We don't attempt to
-	 handle these cases.  */
-
-      t = DEMANGLE_COMPONENT_LITERAL;
-      if (d_peek_char (di) == 'n')
-	{
-	  t = DEMANGLE_COMPONENT_LITERAL_NEG;
-	  d_advance (di, 1);
-	}
-      s = d_str (di);
-      while (d_peek_char (di) != 'E')
-	{
-	  if (d_peek_char (di) == '\0')
-	    return NULL;
-	  d_advance (di, 1);
-	}
-      ret = d_make_comp (di, t, type, d_make_name (di, s, d_str (di) - s));
-    }
-  if (! d_check_char (di, 'E'))
-    return NULL;
-  return ret;
-}
-
-/* <local-name> ::= Z <(function) encoding> E <(entity) name> [<discriminator>]
-                ::= Z <(function) encoding> E s [<discriminator>]
-                ::= Z <(function) encoding> E d [<parameter> number>] _ <entity name>
-*/
-
-static struct demangle_component *
-d_local_name (struct d_info *di)
-{
-  struct demangle_component *function;
-
-  if (! d_check_char (di, 'Z'))
-    return NULL;
-
-  function = d_encoding (di, 0);
-
-  if (! d_check_char (di, 'E'))
-    return NULL;
-
-  if (d_peek_char (di) == 's')
-    {
-      d_advance (di, 1);
-      if (! d_discriminator (di))
-	return NULL;
-      return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function,
-			  d_make_name (di, "string literal",
-				       sizeof "string literal" - 1));
-    }
-  else
-    {
-      struct demangle_component *name;
-      int num = -1;
-
-      if (d_peek_char (di) == 'd')
-	{
-	  /* Default argument scope: d <number> _.  */
-	  d_advance (di, 1);
-	  num = d_compact_number (di);
-	  if (num < 0)
-	    return NULL;
-	}
-
-      name = d_name (di);
-      if (name)
-	switch (name->type)
-	  {
-	    /* Lambdas and unnamed types have internal discriminators.  */
-	  case DEMANGLE_COMPONENT_LAMBDA:
-	  case DEMANGLE_COMPONENT_UNNAMED_TYPE:
-	    break;
-	  default:
-	    if (! d_discriminator (di))
-	      return NULL;
-	  }
-      if (num >= 0)
-	name = d_make_default_arg (di, num, name);
-      return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name);
-    }
-}
-
-/* <discriminator> ::= _ <number>    # when number < 10
-                   ::= __ <number> _ # when number >= 10
-
-   <discriminator> ::= _ <number>    # when number >=10
-   is also accepted to support gcc versions that wrongly mangled that way.
-
-   We demangle the discriminator, but we don't print it out.  FIXME:
-   We should print it out in verbose mode.  */
-
-static int
-d_discriminator (struct d_info *di)
-{
-  int discrim, num_underscores = 1;
-
-  if (d_peek_char (di) != '_')
-    return 1;
-  d_advance (di, 1);
-  if (d_peek_char (di) == '_')
-    {
-      ++num_underscores;
-      d_advance (di, 1);
-    }
-
-  discrim = d_number (di);
-  if (discrim < 0)
-    return 0;
-  if (num_underscores > 1 && discrim >= 10)
-    {
-      if (d_peek_char (di) == '_')
-	d_advance (di, 1);
-      else
-	return 0;
-    }
-
-  return 1;
-}
-
-/* <closure-type-name> ::= Ul <lambda-sig> E [ <nonnegative number> ] _ */
-
-static struct demangle_component *
-d_lambda (struct d_info *di)
-{
-  struct demangle_component *tl;
-  struct demangle_component *ret;
-  int num;
-
-  if (! d_check_char (di, 'U'))
-    return NULL;
-  if (! d_check_char (di, 'l'))
-    return NULL;
-
-  tl = d_parmlist (di);
-  if (tl == NULL)
-    return NULL;
-
-  if (! d_check_char (di, 'E'))
-    return NULL;
-
-  num = d_compact_number (di);
-  if (num < 0)
-    return NULL;
-
-  ret = d_make_empty (di);
-  if (ret)
-    {
-      ret->type = DEMANGLE_COMPONENT_LAMBDA;
-      ret->u.s_unary_num.sub = tl;
-      ret->u.s_unary_num.num = num;
-    }
-
-  if (! d_add_substitution (di, ret))
-    return NULL;
-
-  return ret;
-}
-
-/* <unnamed-type-name> ::= Ut [ <nonnegative number> ] _ */
-
-static struct demangle_component *
-d_unnamed_type (struct d_info *di)
-{
-  struct demangle_component *ret;
-  int num;
-
-  if (! d_check_char (di, 'U'))
-    return NULL;
-  if (! d_check_char (di, 't'))
-    return NULL;
-
-  num = d_compact_number (di);
-  if (num < 0)
-    return NULL;
-
-  ret = d_make_empty (di);
-  if (ret)
-    {
-      ret->type = DEMANGLE_COMPONENT_UNNAMED_TYPE;
-      ret->u.s_number.number = num;
-    }
-
-  if (! d_add_substitution (di, ret))
-    return NULL;
-
-  return ret;
-}
-
-/* <clone-suffix> ::= [ . <clone-type-identifier> ] [ . <nonnegative number> ]*
-*/
-
-static struct demangle_component *
-d_clone_suffix (struct d_info *di, struct demangle_component *encoding)
-{
-  const char *suffix = d_str (di);
-  const char *pend = suffix;
-  struct demangle_component *n;
-
-  if (*pend == '.' && (IS_LOWER (pend[1]) || pend[1] == '_'))
-    {
-      pend += 2;
-      while (IS_LOWER (*pend) || *pend == '_')
-	++pend;
-    }
-  while (*pend == '.' && IS_DIGIT (pend[1]))
-    {
-      pend += 2;
-      while (IS_DIGIT (*pend))
-	++pend;
-    }
-  d_advance (di, pend - suffix);
-  n = d_make_name (di, suffix, pend - suffix);
-  return d_make_comp (di, DEMANGLE_COMPONENT_CLONE, encoding, n);
-}
-
-/* Add a new substitution.  */
-
-static int
-d_add_substitution (struct d_info *di, struct demangle_component *dc)
-{
-  if (dc == NULL)
-    return 0;
-  if (di->next_sub >= di->num_subs)
-    return 0;
-  di->subs[di->next_sub] = dc;
-  ++di->next_sub;
-  return 1;
-}
-
-/* <substitution> ::= S <seq-id> _
-                  ::= S_
-                  ::= St
-                  ::= Sa
-                  ::= Sb
-                  ::= Ss
-                  ::= Si
-                  ::= So
-                  ::= Sd
-
-   If PREFIX is non-zero, then this type is being used as a prefix in
-   a qualified name.  In this case, for the standard substitutions, we
-   need to check whether we are being used as a prefix for a
-   constructor or destructor, and return a full template name.
-   Otherwise we will get something like std::iostream::~iostream()
-   which does not correspond particularly well to any function which
-   actually appears in the source.
-*/
-
-static const struct d_standard_sub_info standard_subs[] =
-{
-  { 't', NL ("std"),
-    NL ("std"),
-    NULL, 0 },
-  { 'a', NL ("std::allocator"),
-    NL ("std::allocator"),
-    NL ("allocator") },
-  { 'b', NL ("std::basic_string"),
-    NL ("std::basic_string"),
-    NL ("basic_string") },
-  { 's', NL ("std::string"),
-    NL ("std::basic_string<char, std::char_traits<char>, std::allocator<char> >"),
-    NL ("basic_string") },
-  { 'i', NL ("std::istream"),
-    NL ("std::basic_istream<char, std::char_traits<char> >"),
-    NL ("basic_istream") },
-  { 'o', NL ("std::ostream"),
-    NL ("std::basic_ostream<char, std::char_traits<char> >"),
-    NL ("basic_ostream") },
-  { 'd', NL ("std::iostream"),
-    NL ("std::basic_iostream<char, std::char_traits<char> >"),
-    NL ("basic_iostream") }
-};
-
-static struct demangle_component *
-d_substitution (struct d_info *di, int prefix)
-{
-  char c;
-
-  if (! d_check_char (di, 'S'))
-    return NULL;
-
-  c = d_next_char (di);
-  if (c == '_' || IS_DIGIT (c) || IS_UPPER (c))
-    {
-      unsigned int id;
-
-      id = 0;
-      if (c != '_')
-	{
-	  do
-	    {
-	      unsigned int new_id;
-
-	      if (IS_DIGIT (c))
-		new_id = id * 36 + c - '0';
-	      else if (IS_UPPER (c))
-		new_id = id * 36 + c - 'A' + 10;
-	      else
-		return NULL;
-	      if (new_id < id)
-		return NULL;
-	      id = new_id;
-	      c = d_next_char (di);
-	    }
-	  while (c != '_');
-
-	  ++id;
-	}
-
-      if (id >= (unsigned int) di->next_sub)
-	return NULL;
-
-      ++di->did_subs;
-
-      return di->subs[id];
-    }
-  else
-    {
-      int verbose;
-      const struct d_standard_sub_info *p;
-      const struct d_standard_sub_info *pend;
-
-      verbose = (di->options & DMGL_VERBOSE) != 0;
-      if (! verbose && prefix)
-	{
-	  char peek;
-
-	  peek = d_peek_char (di);
-	  if (peek == 'C' || peek == 'D')
-	    verbose = 1;
-	}
-
-      pend = (&standard_subs[0]
-	      + sizeof standard_subs / sizeof standard_subs[0]);
-      for (p = &standard_subs[0]; p < pend; ++p)
-	{
-	  if (c == p->code)
-	    {
-	      const char *s;
-	      int len;
-	      struct demangle_component *dc;
-
-	      if (p->set_last_name != NULL)
-		di->last_name = d_make_sub (di, p->set_last_name,
-					    p->set_last_name_len);
-	      if (verbose)
-		{
-		  s = p->full_expansion;
-		  len = p->full_len;
-		}
-	      else
-		{
-		  s = p->simple_expansion;
-		  len = p->simple_len;
-		}
-	      di->expansion += len;
-	      dc = d_make_sub (di, s, len);
-	      if (d_peek_char (di) == 'B')
-		{
-		  /* If there are ABI tags on the abbreviation, it becomes
-		     a substitution candidate.  */
-		  dc = d_abi_tags (di, dc);
-		  d_add_substitution (di, dc);
-		}
-	      return dc;
-	    }
-	}
-
-      return NULL;
-    }
-}
-
-static void
-d_checkpoint (struct d_info *di, struct d_info_checkpoint *checkpoint)
-{
-  checkpoint->n = di->n;
-  checkpoint->next_comp = di->next_comp;
-  checkpoint->next_sub = di->next_sub;
-  checkpoint->did_subs = di->did_subs;
-  checkpoint->expansion = di->expansion;
-}
-
-static void
-d_backtrack (struct d_info *di, struct d_info_checkpoint *checkpoint)
-{
-  di->n = checkpoint->n;
-  di->next_comp = checkpoint->next_comp;
-  di->next_sub = checkpoint->next_sub;
-  di->did_subs = checkpoint->did_subs;
-  di->expansion = checkpoint->expansion;
-}
-
-/* Initialize a growable string.  */
-
-static void
-d_growable_string_init (struct d_growable_string *dgs, size_t estimate)
-{
-  dgs->buf = NULL;
-  dgs->len = 0;
-  dgs->alc = 0;
-  dgs->allocation_failure = 0;
-
-  if (estimate > 0)
-    d_growable_string_resize (dgs, estimate);
-}
-
-/* Grow a growable string to a given size.  */
-
-static inline void
-d_growable_string_resize (struct d_growable_string *dgs, size_t need)
-{
-  size_t newalc;
-  char *newbuf;
-
-  if (dgs->allocation_failure)
-    return;
-
-  /* Start allocation at two bytes to avoid any possibility of confusion
-     with the special value of 1 used as a return in *palc to indicate
-     allocation failures.  */
-  newalc = dgs->alc > 0 ? dgs->alc : 2;
-  while (newalc < need)
-    newalc <<= 1;
-
-  newbuf = (char *) realloc (dgs->buf, newalc);
-  if (newbuf == NULL)
-    {
-      free (dgs->buf);
-      dgs->buf = NULL;
-      dgs->len = 0;
-      dgs->alc = 0;
-      dgs->allocation_failure = 1;
-      return;
-    }
-  dgs->buf = newbuf;
-  dgs->alc = newalc;
-}
-
-/* Append a buffer to a growable string.  */
-
-static inline void
-d_growable_string_append_buffer (struct d_growable_string *dgs,
-                                 const char *s, size_t l)
-{
-  size_t need;
-
-  need = dgs->len + l + 1;
-  if (need > dgs->alc)
-    d_growable_string_resize (dgs, need);
-
-  if (dgs->allocation_failure)
-    return;
-
-  memcpy (dgs->buf + dgs->len, s, l);
-  dgs->buf[dgs->len + l] = '\0';
-  dgs->len += l;
-}
-
-/* Bridge growable strings to the callback mechanism.  */
-
-static void
-d_growable_string_callback_adapter (const char *s, size_t l, void *opaque)
-{
-  struct d_growable_string *dgs = (struct d_growable_string*) opaque;
-
-  d_growable_string_append_buffer (dgs, s, l);
-}
-
-/* Walk the tree, counting the number of templates encountered, and
-   the number of times a scope might be saved.  These counts will be
-   used to allocate data structures for d_print_comp, so the logic
-   here must mirror the logic d_print_comp will use.  It is not
-   important that the resulting numbers are exact, so long as they
-   are larger than the actual numbers encountered.  */
-
-static void
-d_count_templates_scopes (int *num_templates, int *num_scopes,
-			  const struct demangle_component *dc)
-{
-  if (dc == NULL)
-    return;
-
-  switch (dc->type)
-    {
-    case DEMANGLE_COMPONENT_NAME:
-    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
-    case DEMANGLE_COMPONENT_FUNCTION_PARAM:
-    case DEMANGLE_COMPONENT_SUB_STD:
-    case DEMANGLE_COMPONENT_BUILTIN_TYPE:
-    case DEMANGLE_COMPONENT_OPERATOR:
-    case DEMANGLE_COMPONENT_CHARACTER:
-    case DEMANGLE_COMPONENT_NUMBER:
-    case DEMANGLE_COMPONENT_UNNAMED_TYPE:
-      break;
-
-    case DEMANGLE_COMPONENT_TEMPLATE:
-      (*num_templates)++;
-      goto recurse_left_right;
-
-    case DEMANGLE_COMPONENT_REFERENCE:
-    case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
-      if (d_left (dc)->type == DEMANGLE_COMPONENT_TEMPLATE_PARAM)
-	(*num_scopes)++;
-      goto recurse_left_right;
-
-    case DEMANGLE_COMPONENT_QUAL_NAME:
-    case DEMANGLE_COMPONENT_LOCAL_NAME:
-    case DEMANGLE_COMPONENT_TYPED_NAME:
-    case DEMANGLE_COMPONENT_VTABLE:
-    case DEMANGLE_COMPONENT_VTT:
-    case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
-    case DEMANGLE_COMPONENT_TYPEINFO:
-    case DEMANGLE_COMPONENT_TYPEINFO_NAME:
-    case DEMANGLE_COMPONENT_TYPEINFO_FN:
-    case DEMANGLE_COMPONENT_THUNK:
-    case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
-    case DEMANGLE_COMPONENT_COVARIANT_THUNK:
-    case DEMANGLE_COMPONENT_JAVA_CLASS:
-    case DEMANGLE_COMPONENT_GUARD:
-    case DEMANGLE_COMPONENT_TLS_INIT:
-    case DEMANGLE_COMPONENT_TLS_WRAPPER:
-    case DEMANGLE_COMPONENT_REFTEMP:
-    case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
-    case DEMANGLE_COMPONENT_RESTRICT:
-    case DEMANGLE_COMPONENT_VOLATILE:
-    case DEMANGLE_COMPONENT_CONST:
-    case DEMANGLE_COMPONENT_RESTRICT_THIS:
-    case DEMANGLE_COMPONENT_VOLATILE_THIS:
-    case DEMANGLE_COMPONENT_CONST_THIS:
-    case DEMANGLE_COMPONENT_REFERENCE_THIS:
-    case DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS:
-    case DEMANGLE_COMPONENT_TRANSACTION_SAFE:
-    case DEMANGLE_COMPONENT_NOEXCEPT:
-    case DEMANGLE_COMPONENT_THROW_SPEC:
-    case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
-    case DEMANGLE_COMPONENT_POINTER:
-    case DEMANGLE_COMPONENT_COMPLEX:
-    case DEMANGLE_COMPONENT_IMAGINARY:
-    case DEMANGLE_COMPONENT_VENDOR_TYPE:
-    case DEMANGLE_COMPONENT_FUNCTION_TYPE:
-    case DEMANGLE_COMPONENT_ARRAY_TYPE:
-    case DEMANGLE_COMPONENT_PTRMEM_TYPE:
-    case DEMANGLE_COMPONENT_VECTOR_TYPE:
-    case DEMANGLE_COMPONENT_ARGLIST:
-    case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
-    case DEMANGLE_COMPONENT_INITIALIZER_LIST:
-    case DEMANGLE_COMPONENT_CAST:
-    case DEMANGLE_COMPONENT_CONVERSION:
-    case DEMANGLE_COMPONENT_NULLARY:
-    case DEMANGLE_COMPONENT_UNARY:
-    case DEMANGLE_COMPONENT_BINARY:
-    case DEMANGLE_COMPONENT_BINARY_ARGS:
-    case DEMANGLE_COMPONENT_TRINARY:
-    case DEMANGLE_COMPONENT_TRINARY_ARG1:
-    case DEMANGLE_COMPONENT_TRINARY_ARG2:
-    case DEMANGLE_COMPONENT_LITERAL:
-    case DEMANGLE_COMPONENT_LITERAL_NEG:
-    case DEMANGLE_COMPONENT_JAVA_RESOURCE:
-    case DEMANGLE_COMPONENT_COMPOUND_NAME:
-    case DEMANGLE_COMPONENT_DECLTYPE:
-    case DEMANGLE_COMPONENT_TRANSACTION_CLONE:
-    case DEMANGLE_COMPONENT_NONTRANSACTION_CLONE:
-    case DEMANGLE_COMPONENT_PACK_EXPANSION:
-    case DEMANGLE_COMPONENT_TAGGED_NAME:
-    case DEMANGLE_COMPONENT_CLONE:
-    recurse_left_right:
-      d_count_templates_scopes (num_templates, num_scopes,
-				d_left (dc));
-      d_count_templates_scopes (num_templates, num_scopes,
-				d_right (dc));
-      break;
-
-    case DEMANGLE_COMPONENT_CTOR:
-      d_count_templates_scopes (num_templates, num_scopes,
-				dc->u.s_ctor.name);
-      break;
-
-    case DEMANGLE_COMPONENT_DTOR:
-      d_count_templates_scopes (num_templates, num_scopes,
-				dc->u.s_dtor.name);
-      break;
-
-    case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
-      d_count_templates_scopes (num_templates, num_scopes,
-				dc->u.s_extended_operator.name);
-      break;
-
-    case DEMANGLE_COMPONENT_FIXED_TYPE:
-      d_count_templates_scopes (num_templates, num_scopes,
-                                dc->u.s_fixed.length);
-      break;
-
-    case DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS:
-    case DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS:
-      d_count_templates_scopes (num_templates, num_scopes,
-				d_left (dc));
-      break;
-
-    case DEMANGLE_COMPONENT_LAMBDA:
-    case DEMANGLE_COMPONENT_DEFAULT_ARG:
-      d_count_templates_scopes (num_templates, num_scopes,
-				dc->u.s_unary_num.sub);
-      break;
-    }
-}
-
-/* Initialize a print information structure.  */
-
-static void
-d_print_init (struct d_print_info *dpi, demangle_callbackref callback,
-	      void *opaque, const struct demangle_component *dc)
-{
-  dpi->len = 0;
-  dpi->last_char = '\0';
-  dpi->templates = NULL;
-  dpi->modifiers = NULL;
-  dpi->pack_index = 0;
-  dpi->flush_count = 0;
-
-  dpi->callback = callback;
-  dpi->opaque = opaque;
-
-  dpi->demangle_failure = 0;
-  dpi->is_lambda_arg = 0;
-
-  dpi->component_stack = NULL;
-
-  dpi->saved_scopes = NULL;
-  dpi->next_saved_scope = 0;
-  dpi->num_saved_scopes = 0;
-
-  dpi->copy_templates = NULL;
-  dpi->next_copy_template = 0;
-  dpi->num_copy_templates = 0;
-
-  d_count_templates_scopes (&dpi->num_copy_templates,
-			    &dpi->num_saved_scopes, dc);
-  dpi->num_copy_templates *= dpi->num_saved_scopes;
-
-  dpi->current_template = NULL;
-}
-
-/* Indicate that an error occurred during printing, and test for error.  */
-
-static inline void
-d_print_error (struct d_print_info *dpi)
-{
-  dpi->demangle_failure = 1;
-}
-
-static inline int
-d_print_saw_error (struct d_print_info *dpi)
-{
-  return dpi->demangle_failure != 0;
-}
-
-/* Flush buffered characters to the callback.  */
-
-static inline void
-d_print_flush (struct d_print_info *dpi)
-{
-  dpi->buf[dpi->len] = '\0';
-  dpi->callback (dpi->buf, dpi->len, dpi->opaque);
-  dpi->len = 0;
-  dpi->flush_count++;
-}
-
-/* Append characters and buffers for printing.  */
-
-static inline void
-d_append_char (struct d_print_info *dpi, char c)
-{
-  if (dpi->len == sizeof (dpi->buf) - 1)
-    d_print_flush (dpi);
-
-  dpi->buf[dpi->len++] = c;
-  dpi->last_char = c;
-}
-
-static inline void
-d_append_buffer (struct d_print_info *dpi, const char *s, size_t l)
-{
-  size_t i;
-
-  for (i = 0; i < l; i++)
-    d_append_char (dpi, s[i]);
-}
-
-static inline void
-d_append_string (struct d_print_info *dpi, const char *s)
-{
-  d_append_buffer (dpi, s, strlen (s));
-}
-
-static inline void
-d_append_num (struct d_print_info *dpi, int l)
-{
-  char buf[25];
-  sprintf (buf,"%d", l);
-  d_append_string (dpi, buf);
-}
-
-static inline char
-d_last_char (struct d_print_info *dpi)
-{
-  return dpi->last_char;
-}
-
-/* Turn components into a human readable string.  OPTIONS is the
-   options bits passed to the demangler.  DC is the tree to print.
-   CALLBACK is a function to call to flush demangled string segments
-   as they fill the intermediate buffer, and OPAQUE is a generalized
-   callback argument.  On success, this returns 1.  On failure,
-   it returns 0, indicating a bad parse.  It does not use heap
-   memory to build an output string, so cannot encounter memory
-   allocation failure.  */
-
-CP_STATIC_IF_GLIBCPP_V3
-int
-cplus_demangle_print_callback (int options,
-                               const struct demangle_component *dc,
-                               demangle_callbackref callback, void *opaque)
-{
-  struct d_print_info dpi;
-
-  d_print_init (&dpi, callback, opaque, dc);
-
-  {
-#ifdef CP_DYNAMIC_ARRAYS
-    /* Avoid zero-length VLAs, which are prohibited by the C99 standard
-       and flagged as errors by Address Sanitizer.  */
-    __extension__ struct d_saved_scope scopes[(dpi.num_saved_scopes > 0)
-                                              ? dpi.num_saved_scopes : 1];
-    __extension__ struct d_print_template temps[(dpi.num_copy_templates > 0)
-                                                ? dpi.num_copy_templates : 1];
-
-    dpi.saved_scopes = scopes;
-    dpi.copy_templates = temps;
-#else
-    dpi.saved_scopes = alloca (dpi.num_saved_scopes
-			       * sizeof (*dpi.saved_scopes));
-    dpi.copy_templates = alloca (dpi.num_copy_templates
-				 * sizeof (*dpi.copy_templates));
-#endif
-
-    d_print_comp (&dpi, options, dc);
-  }
-
-  d_print_flush (&dpi);
-
-  return ! d_print_saw_error (&dpi);
-}
-
-/* Turn components into a human readable string.  OPTIONS is the
-   options bits passed to the demangler.  DC is the tree to print.
-   ESTIMATE is a guess at the length of the result.  This returns a
-   string allocated by malloc, or NULL on error.  On success, this
-   sets *PALC to the size of the allocated buffer.  On failure, this
-   sets *PALC to 0 for a bad parse, or to 1 for a memory allocation
-   failure.  */
-
-CP_STATIC_IF_GLIBCPP_V3
-char *
-cplus_demangle_print (int options, const struct demangle_component *dc,
-                      int estimate, size_t *palc)
-{
-  struct d_growable_string dgs;
-
-  d_growable_string_init (&dgs, estimate);
-
-  if (! cplus_demangle_print_callback (options, dc,
-                                       d_growable_string_callback_adapter,
-                                       &dgs))
-    {
-      free (dgs.buf);
-      *palc = 0;
-      return NULL;
-    }
-
-  *palc = dgs.allocation_failure ? 1 : dgs.alc;
-  return dgs.buf;
-}
-
-/* Returns the I'th element of the template arglist ARGS, or NULL on
-   failure.  If I is negative, return the entire arglist.  */
-
-static struct demangle_component *
-d_index_template_argument (struct demangle_component *args, int i)
-{
-  struct demangle_component *a;
-
-  if (i < 0)
-    /* Print the whole argument pack.  */
-    return args;
-
-  for (a = args;
-       a != NULL;
-       a = d_right (a))
-    {
-      if (a->type != DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
-	return NULL;
-      if (i <= 0)
-	break;
-      --i;
-    }
-  if (i != 0 || a == NULL)
-    return NULL;
-
-  return d_left (a);
-}
-
-/* Returns the template argument from the current context indicated by DC,
-   which is a DEMANGLE_COMPONENT_TEMPLATE_PARAM, or NULL.  */
-
-static struct demangle_component *
-d_lookup_template_argument (struct d_print_info *dpi,
-			    const struct demangle_component *dc)
-{
-  if (dpi->templates == NULL)
-    {
-      d_print_error (dpi);
-      return NULL;
-    }
-	
-  return d_index_template_argument
-    (d_right (dpi->templates->template_decl),
-     dc->u.s_number.number);
-}
-
-/* Returns a template argument pack used in DC (any will do), or NULL.  */
-
-static struct demangle_component *
-d_find_pack (struct d_print_info *dpi,
-	     const struct demangle_component *dc)
-{
-  struct demangle_component *a;
-  if (dc == NULL)
-    return NULL;
-
-  switch (dc->type)
-    {
-    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
-      a = d_lookup_template_argument (dpi, dc);
-      if (a && a->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
-	return a;
-      return NULL;
-
-    case DEMANGLE_COMPONENT_PACK_EXPANSION:
-      return NULL;
-      
-    case DEMANGLE_COMPONENT_LAMBDA:
-    case DEMANGLE_COMPONENT_NAME:
-    case DEMANGLE_COMPONENT_TAGGED_NAME:
-    case DEMANGLE_COMPONENT_OPERATOR:
-    case DEMANGLE_COMPONENT_BUILTIN_TYPE:
-    case DEMANGLE_COMPONENT_SUB_STD:
-    case DEMANGLE_COMPONENT_CHARACTER:
-    case DEMANGLE_COMPONENT_FUNCTION_PARAM:
-    case DEMANGLE_COMPONENT_UNNAMED_TYPE:
-    case DEMANGLE_COMPONENT_FIXED_TYPE:
-    case DEMANGLE_COMPONENT_DEFAULT_ARG:
-    case DEMANGLE_COMPONENT_NUMBER:
-      return NULL;
-
-    case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
-      return d_find_pack (dpi, dc->u.s_extended_operator.name);
-    case DEMANGLE_COMPONENT_CTOR:
-      return d_find_pack (dpi, dc->u.s_ctor.name);
-    case DEMANGLE_COMPONENT_DTOR:
-      return d_find_pack (dpi, dc->u.s_dtor.name);
-
-    default:
-      a = d_find_pack (dpi, d_left (dc));
-      if (a)
-	return a;
-      return d_find_pack (dpi, d_right (dc));
-    }
-}
-
-/* Returns the length of the template argument pack DC.  */
-
-static int
-d_pack_length (const struct demangle_component *dc)
-{
-  int count = 0;
-  while (dc && dc->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST
-	 && d_left (dc) != NULL)
-    {
-      ++count;
-      dc = d_right (dc);
-    }
-  return count;
-}
-
-/* Returns the number of template args in DC, expanding any pack expansions
-   found there.  */
-
-static int
-d_args_length (struct d_print_info *dpi, const struct demangle_component *dc)
-{
-  int count = 0;
-  for (; dc && dc->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST;
-       dc = d_right (dc))
-    {
-      struct demangle_component *elt = d_left (dc);
-      if (elt == NULL)
-	break;
-      if (elt->type == DEMANGLE_COMPONENT_PACK_EXPANSION)
-	{
-	  struct demangle_component *a = d_find_pack (dpi, d_left (elt));
-	  count += d_pack_length (a);
-	}
-      else
-	++count;
-    }
-  return count;
-}
-
-/* DC is a component of a mangled expression.  Print it, wrapped in parens
-   if needed.  */
-
-static void
-d_print_subexpr (struct d_print_info *dpi, int options,
-		 const struct demangle_component *dc)
-{
-  int simple = 0;
-  if (dc->type == DEMANGLE_COMPONENT_NAME
-      || dc->type == DEMANGLE_COMPONENT_QUAL_NAME
-      || dc->type == DEMANGLE_COMPONENT_INITIALIZER_LIST
-      || dc->type == DEMANGLE_COMPONENT_FUNCTION_PARAM)
-    simple = 1;
-  if (!simple)
-    d_append_char (dpi, '(');
-  d_print_comp (dpi, options, dc);
-  if (!simple)
-    d_append_char (dpi, ')');
-}
-
-/* Save the current scope.  */
-
-static void
-d_save_scope (struct d_print_info *dpi,
-	      const struct demangle_component *container)
-{
-  struct d_saved_scope *scope;
-  struct d_print_template *src, **link;
-
-  if (dpi->next_saved_scope >= dpi->num_saved_scopes)
-    {
-      d_print_error (dpi);
-      return;
-    }
-  scope = &dpi->saved_scopes[dpi->next_saved_scope];
-  dpi->next_saved_scope++;
-
-  scope->container = container;
-  link = &scope->templates;
-
-  for (src = dpi->templates; src != NULL; src = src->next)
-    {
-      struct d_print_template *dst;
-
-      if (dpi->next_copy_template >= dpi->num_copy_templates)
-	{
-	  d_print_error (dpi);
-	  return;
-	}
-      dst = &dpi->copy_templates[dpi->next_copy_template];
-      dpi->next_copy_template++;
-
-      dst->template_decl = src->template_decl;
-      *link = dst;
-      link = &dst->next;
-    }
-
-  *link = NULL;
-}
-
-/* Attempt to locate a previously saved scope.  Returns NULL if no
-   corresponding saved scope was found.  */
-
-static struct d_saved_scope *
-d_get_saved_scope (struct d_print_info *dpi,
-		   const struct demangle_component *container)
-{
-  int i;
-
-  for (i = 0; i < dpi->next_saved_scope; i++)
-    if (dpi->saved_scopes[i].container == container)
-      return &dpi->saved_scopes[i];
-
-  return NULL;
-}
-
-/* If DC is a C++17 fold-expression, print it and return true; otherwise
-   return false.  */
-
-static int
-d_maybe_print_fold_expression (struct d_print_info *dpi, int options,
-			       const struct demangle_component *dc)
-{
-  const struct demangle_component *ops, *operator_, *op1, *op2;
-  int save_idx;
-
-  const char *fold_code = d_left (dc)->u.s_operator.op->code;
-  if (fold_code[0] != 'f')
-    return 0;
-
-  ops = d_right (dc);
-  operator_ = d_left (ops);
-  op1 = d_right (ops);
-  op2 = 0;
-  if (op1->type == DEMANGLE_COMPONENT_TRINARY_ARG2)
-    {
-      op2 = d_right (op1);
-      op1 = d_left (op1);
-    }
-
-  /* Print the whole pack.  */
-  save_idx = dpi->pack_index;
-  dpi->pack_index = -1;
-
-  switch (fold_code[1])
-    {
-      /* Unary left fold, (... + X).  */
-    case 'l':
-      d_append_string (dpi, "(...");
-      d_print_expr_op (dpi, options, operator_);
-      d_print_subexpr (dpi, options, op1);
-      d_append_char (dpi, ')');
-      break;
-
-      /* Unary right fold, (X + ...).  */
-    case 'r':
-      d_append_char (dpi, '(');
-      d_print_subexpr (dpi, options, op1);
-      d_print_expr_op (dpi, options, operator_);
-      d_append_string (dpi, "...)");
-      break;
-
-      /* Binary left fold, (42 + ... + X).  */
-    case 'L':
-      /* Binary right fold, (X + ... + 42).  */
-    case 'R':
-      d_append_char (dpi, '(');
-      d_print_subexpr (dpi, options, op1);
-      d_print_expr_op (dpi, options, operator_);
-      d_append_string (dpi, "...");
-      d_print_expr_op (dpi, options, operator_);
-      d_print_subexpr (dpi, options, op2);
-      d_append_char (dpi, ')');
-      break;
-    }
-
-  dpi->pack_index = save_idx;
-  return 1;
-}
-
-/* Subroutine to handle components.  */
-
-static void
-d_print_comp_inner (struct d_print_info *dpi, int options,
-		  const struct demangle_component *dc)
-{
-  /* Magic variable to let reference smashing skip over the next modifier
-     without needing to modify *dc.  */
-  const struct demangle_component *mod_inner = NULL;
-
-  /* Variable used to store the current templates while a previously
-     captured scope is used.  */
-  struct d_print_template *saved_templates;
-
-  /* Nonzero if templates have been stored in the above variable.  */
-  int need_template_restore = 0;
-
-  if (dc == NULL)
-    {
-      d_print_error (dpi);
-      return;
-    }
-  if (d_print_saw_error (dpi))
-    return;
-
-  switch (dc->type)
-    {
-    case DEMANGLE_COMPONENT_NAME:
-      if ((options & DMGL_JAVA) == 0)
-	d_append_buffer (dpi, dc->u.s_name.s, dc->u.s_name.len);
-      else
-	d_print_java_identifier (dpi, dc->u.s_name.s, dc->u.s_name.len);
-      return;
-
-    case DEMANGLE_COMPONENT_TAGGED_NAME:
-      d_print_comp (dpi, options, d_left (dc));
-      d_append_string (dpi, "[abi:");
-      d_print_comp (dpi, options, d_right (dc));
-      d_append_char (dpi, ']');
-      return;
-
-    case DEMANGLE_COMPONENT_QUAL_NAME:
-    case DEMANGLE_COMPONENT_LOCAL_NAME:
-      d_print_comp (dpi, options, d_left (dc));
-      if ((options & DMGL_JAVA) == 0)
-	d_append_string (dpi, "::");
-      else
-	d_append_char (dpi, '.');
-      {
-	struct demangle_component *local_name = d_right (dc);
-	if (local_name->type == DEMANGLE_COMPONENT_DEFAULT_ARG)
-	  {
-	    d_append_string (dpi, "{default arg#");
-	    d_append_num (dpi, local_name->u.s_unary_num.num + 1);
-	    d_append_string (dpi, "}::");
-	    local_name = local_name->u.s_unary_num.sub;
-	  }
-	d_print_comp (dpi, options, local_name);
-      }
-      return;
-
-    case DEMANGLE_COMPONENT_TYPED_NAME:
-      {
-	struct d_print_mod *hold_modifiers;
-	struct demangle_component *typed_name;
-	struct d_print_mod adpm[4];
-	unsigned int i;
-	struct d_print_template dpt;
-
-	/* Pass the name down to the type so that it can be printed in
-	   the right place for the type.  We also have to pass down
-	   any CV-qualifiers, which apply to the this parameter.  */
-	hold_modifiers = dpi->modifiers;
-	dpi->modifiers = 0;
-	i = 0;
-	typed_name = d_left (dc);
-	while (typed_name != NULL)
-	  {
-	    if (i >= sizeof adpm / sizeof adpm[0])
-	      {
-		d_print_error (dpi);
-		return;
-	      }
-
-	    adpm[i].next = dpi->modifiers;
-	    dpi->modifiers = &adpm[i];
-	    adpm[i].mod = typed_name;
-	    adpm[i].printed = 0;
-	    adpm[i].templates = dpi->templates;
-	    ++i;
-
-	    if (!is_fnqual_component_type (typed_name->type))
-	      break;
-
-	    typed_name = d_left (typed_name);
-	  }
-
-	if (typed_name == NULL)
-	  {
-	    d_print_error (dpi);
-	    return;
-	  }
-
-	/* If typed_name is a template, then it applies to the
-	   function type as well.  */
-	if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
-	  {
-	    dpt.next = dpi->templates;
-	    dpi->templates = &dpt;
-	    dpt.template_decl = typed_name;
-	  }
-
-	/* If typed_name is a DEMANGLE_COMPONENT_LOCAL_NAME, then
-	   there may be CV-qualifiers on its right argument which
-	   really apply here; this happens when parsing a class which
-	   is local to a function.  */
-	if (typed_name->type == DEMANGLE_COMPONENT_LOCAL_NAME)
-	  {
-	    struct demangle_component *local_name;
-
-	    local_name = d_right (typed_name);
-	    if (local_name->type == DEMANGLE_COMPONENT_DEFAULT_ARG)
-	      local_name = local_name->u.s_unary_num.sub;
-	    if (local_name == NULL)
-	      {
-		d_print_error (dpi);
-		return;
-	      }
-	    while (is_fnqual_component_type (local_name->type))
-	      {
-		if (i >= sizeof adpm / sizeof adpm[0])
-		  {
-		    d_print_error (dpi);
-		    return;
-		  }
-
-		adpm[i] = adpm[i - 1];
-		adpm[i].next = &adpm[i - 1];
-		dpi->modifiers = &adpm[i];
-
-		adpm[i - 1].mod = local_name;
-		adpm[i - 1].printed = 0;
-		adpm[i - 1].templates = dpi->templates;
-		++i;
-
-		local_name = d_left (local_name);
-	      }
-	  }
-
-	d_print_comp (dpi, options, d_right (dc));
-
-	if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
-	  dpi->templates = dpt.next;
-
-	/* If the modifiers didn't get printed by the type, print them
-	   now.  */
-	while (i > 0)
-	  {
-	    --i;
-	    if (! adpm[i].printed)
-	      {
-		d_append_char (dpi, ' ');
-		d_print_mod (dpi, options, adpm[i].mod);
-	      }
-	  }
-
-	dpi->modifiers = hold_modifiers;
-
-	return;
-      }
-
-    case DEMANGLE_COMPONENT_TEMPLATE:
-      {
-	struct d_print_mod *hold_dpm;
-	struct demangle_component *dcl;
-	const struct demangle_component *hold_current;
-
-	/* This template may need to be referenced by a cast operator
-	   contained in its subtree.  */
-	hold_current = dpi->current_template;
-	dpi->current_template = dc;
-
-	/* Don't push modifiers into a template definition.  Doing so
-	   could give the wrong definition for a template argument.
-	   Instead, treat the template essentially as a name.  */
-
-	hold_dpm = dpi->modifiers;
-	dpi->modifiers = NULL;
-
-        dcl = d_left (dc);
-
-        if ((options & DMGL_JAVA) != 0
-            && dcl->type == DEMANGLE_COMPONENT_NAME
-            && dcl->u.s_name.len == 6
-            && strncmp (dcl->u.s_name.s, "JArray", 6) == 0)
-          {
-            /* Special-case Java arrays, so that JArray<TYPE> appears
-               instead as TYPE[].  */
-
-            d_print_comp (dpi, options, d_right (dc));
-            d_append_string (dpi, "[]");
-          }
-        else
-          {
-	    d_print_comp (dpi, options, dcl);
-	    if (d_last_char (dpi) == '<')
-	      d_append_char (dpi, ' ');
-	    d_append_char (dpi, '<');
-	    d_print_comp (dpi, options, d_right (dc));
-	    /* Avoid generating two consecutive '>' characters, to avoid
-	       the C++ syntactic ambiguity.  */
-	    if (d_last_char (dpi) == '>')
-	      d_append_char (dpi, ' ');
-	    d_append_char (dpi, '>');
-          }
-
-	dpi->modifiers = hold_dpm;
-	dpi->current_template = hold_current;
-
-	return;
-      }
-
-    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
-      if (dpi->is_lambda_arg)
-	{
-	  /* Show the template parm index, as that's how g++ displays
-	     these, and future proofs us against potential
-	     '[]<typename T> (T *a, T *b) {...}'.  */
-	  d_append_buffer (dpi, "auto:", 5);
-	  d_append_num (dpi, dc->u.s_number.number + 1);
-	}
-      else
-	{
-	  struct d_print_template *hold_dpt;
-	  struct demangle_component *a = d_lookup_template_argument (dpi, dc);
-
-	  if (a && a->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
-	    a = d_index_template_argument (a, dpi->pack_index);
-
-	  if (a == NULL)
-	    {
-	      d_print_error (dpi);
-	      return;
-	    }
-
-	  /* While processing this parameter, we need to pop the list
-	     of templates.  This is because the template parameter may
-	     itself be a reference to a parameter of an outer
-	     template.  */
-
-	  hold_dpt = dpi->templates;
-	  dpi->templates = hold_dpt->next;
-
-	  d_print_comp (dpi, options, a);
-
-	  dpi->templates = hold_dpt;
-	}
-      return;
-
-    case DEMANGLE_COMPONENT_CTOR:
-      d_print_comp (dpi, options, dc->u.s_ctor.name);
-      return;
-
-    case DEMANGLE_COMPONENT_DTOR:
-      d_append_char (dpi, '~');
-      d_print_comp (dpi, options, dc->u.s_dtor.name);
-      return;
-
-    case DEMANGLE_COMPONENT_VTABLE:
-      d_append_string (dpi, "vtable for ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_VTT:
-      d_append_string (dpi, "VTT for ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
-      d_append_string (dpi, "construction vtable for ");
-      d_print_comp (dpi, options, d_left (dc));
-      d_append_string (dpi, "-in-");
-      d_print_comp (dpi, options, d_right (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_TYPEINFO:
-      d_append_string (dpi, "typeinfo for ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_TYPEINFO_NAME:
-      d_append_string (dpi, "typeinfo name for ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_TYPEINFO_FN:
-      d_append_string (dpi, "typeinfo fn for ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_THUNK:
-      d_append_string (dpi, "non-virtual thunk to ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
-      d_append_string (dpi, "virtual thunk to ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_COVARIANT_THUNK:
-      d_append_string (dpi, "covariant return thunk to ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_JAVA_CLASS:
-      d_append_string (dpi, "java Class for ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_GUARD:
-      d_append_string (dpi, "guard variable for ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_TLS_INIT:
-      d_append_string (dpi, "TLS init function for ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_TLS_WRAPPER:
-      d_append_string (dpi, "TLS wrapper function for ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_REFTEMP:
-      d_append_string (dpi, "reference temporary #");
-      d_print_comp (dpi, options, d_right (dc));
-      d_append_string (dpi, " for ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
-      d_append_string (dpi, "hidden alias for ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_TRANSACTION_CLONE:
-      d_append_string (dpi, "transaction clone for ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_NONTRANSACTION_CLONE:
-      d_append_string (dpi, "non-transaction clone for ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_SUB_STD:
-      d_append_buffer (dpi, dc->u.s_string.string, dc->u.s_string.len);
-      return;
-
-    case DEMANGLE_COMPONENT_RESTRICT:
-    case DEMANGLE_COMPONENT_VOLATILE:
-    case DEMANGLE_COMPONENT_CONST:
-      {
-	struct d_print_mod *pdpm;
-
-	/* When printing arrays, it's possible to have cases where the
-	   same CV-qualifier gets pushed on the stack multiple times.
-	   We only need to print it once.  */
-
-	for (pdpm = dpi->modifiers; pdpm != NULL; pdpm = pdpm->next)
-	  {
-	    if (! pdpm->printed)
-	      {
-		if (pdpm->mod->type != DEMANGLE_COMPONENT_RESTRICT
-		    && pdpm->mod->type != DEMANGLE_COMPONENT_VOLATILE
-		    && pdpm->mod->type != DEMANGLE_COMPONENT_CONST)
-		  break;
-		if (pdpm->mod->type == dc->type)
-		  {
-		    d_print_comp (dpi, options, d_left (dc));
-		    return;
-		  }
-	      }
-	  }
-      }
-      goto modifier;
-
-    case DEMANGLE_COMPONENT_REFERENCE:
-    case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
-      {
-	/* Handle reference smashing: & + && = &.  */
-	const struct demangle_component *sub = d_left (dc);
-	if (!dpi->is_lambda_arg
-	    && sub->type == DEMANGLE_COMPONENT_TEMPLATE_PARAM)
-	  {
-	    struct d_saved_scope *scope = d_get_saved_scope (dpi, sub);
-	    struct demangle_component *a;
-
-	    if (scope == NULL)
-	      {
-		/* This is the first time SUB has been traversed.
-		   We need to capture the current templates so
-		   they can be restored if SUB is reentered as a
-		   substitution.  */
-		d_save_scope (dpi, sub);
-		if (d_print_saw_error (dpi))
-		  return;
-	      }
-	    else
-	      {
-		const struct d_component_stack *dcse;
-		int found_self_or_parent = 0;
-
-		/* This traversal is reentering SUB as a substition.
-		   If we are not beneath SUB or DC in the tree then we
-		   need to restore SUB's template stack temporarily.  */
-		for (dcse = dpi->component_stack; dcse != NULL;
-		     dcse = dcse->parent)
-		  {
-		    if (dcse->dc == sub
-			|| (dcse->dc == dc
-			    && dcse != dpi->component_stack))
-		      {
-			found_self_or_parent = 1;
-			break;
-		      }
-		  }
-
-		if (!found_self_or_parent)
-		  {
-		    saved_templates = dpi->templates;
-		    dpi->templates = scope->templates;
-		    need_template_restore = 1;
-		  }
-	      }
-
-	    a = d_lookup_template_argument (dpi, sub);
-	    if (a && a->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
-	      a = d_index_template_argument (a, dpi->pack_index);
-
-	    if (a == NULL)
-	      {
-		if (need_template_restore)
-		  dpi->templates = saved_templates;
-
-		d_print_error (dpi);
-		return;
-	      }
-
-	    sub = a;
-	  }
-
-	if (sub->type == DEMANGLE_COMPONENT_REFERENCE
-	    || sub->type == dc->type)
-	  dc = sub;
-	else if (sub->type == DEMANGLE_COMPONENT_RVALUE_REFERENCE)
-	  mod_inner = d_left (sub);
-      }
-      /* Fall through.  */
-
-    case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
-    case DEMANGLE_COMPONENT_POINTER:
-    case DEMANGLE_COMPONENT_COMPLEX:
-    case DEMANGLE_COMPONENT_IMAGINARY:
-    FNQUAL_COMPONENT_CASE:
-    modifier:
-      {
-	/* We keep a list of modifiers on the stack.  */
-	struct d_print_mod dpm;
-
-	dpm.next = dpi->modifiers;
-	dpi->modifiers = &dpm;
-	dpm.mod = dc;
-	dpm.printed = 0;
-	dpm.templates = dpi->templates;
-
-	if (!mod_inner)
-	  mod_inner = d_left (dc);
-
-	d_print_comp (dpi, options, mod_inner);
-
-	/* If the modifier didn't get printed by the type, print it
-	   now.  */
-	if (! dpm.printed)
-	  d_print_mod (dpi, options, dc);
-
-	dpi->modifiers = dpm.next;
-
-	if (need_template_restore)
-	  dpi->templates = saved_templates;
-
-	return;
-      }
-
-    case DEMANGLE_COMPONENT_BUILTIN_TYPE:
-      if ((options & DMGL_JAVA) == 0)
-	d_append_buffer (dpi, dc->u.s_builtin.type->name,
-			 dc->u.s_builtin.type->len);
-      else
-	d_append_buffer (dpi, dc->u.s_builtin.type->java_name,
-			 dc->u.s_builtin.type->java_len);
-      return;
-
-    case DEMANGLE_COMPONENT_VENDOR_TYPE:
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_FUNCTION_TYPE:
-      {
-	if ((options & DMGL_RET_POSTFIX) != 0)
-	  d_print_function_type (dpi,
-				 options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP),
-				 dc, dpi->modifiers);
-
-	/* Print return type if present */
-	if (d_left (dc) != NULL && (options & DMGL_RET_POSTFIX) != 0)
-	  d_print_comp (dpi, options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP),
-			d_left (dc));
-	else if (d_left (dc) != NULL && (options & DMGL_RET_DROP) == 0)
-	  {
-	    struct d_print_mod dpm;
-
-	    /* We must pass this type down as a modifier in order to
-	       print it in the right location.  */
-	    dpm.next = dpi->modifiers;
-	    dpi->modifiers = &dpm;
-	    dpm.mod = dc;
-	    dpm.printed = 0;
-	    dpm.templates = dpi->templates;
-
-	    d_print_comp (dpi, options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP),
-			  d_left (dc));
-
-	    dpi->modifiers = dpm.next;
-
-	    if (dpm.printed)
-	      return;
-
-	    /* In standard prefix notation, there is a space between the
-	       return type and the function signature.  */
-	    if ((options & DMGL_RET_POSTFIX) == 0)
-	      d_append_char (dpi, ' ');
-	  }
-
-	if ((options & DMGL_RET_POSTFIX) == 0)
-	  d_print_function_type (dpi,
-				 options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP),
-				 dc, dpi->modifiers);
-
-	return;
-      }
-
-    case DEMANGLE_COMPONENT_ARRAY_TYPE:
-      {
-	struct d_print_mod *hold_modifiers;
-	struct d_print_mod adpm[4];
-	unsigned int i;
-	struct d_print_mod *pdpm;
-
-	/* We must pass this type down as a modifier in order to print
-	   multi-dimensional arrays correctly.  If the array itself is
-	   CV-qualified, we act as though the element type were
-	   CV-qualified.  We do this by copying the modifiers down
-	   rather than fiddling pointers, so that we don't wind up
-	   with a d_print_mod higher on the stack pointing into our
-	   stack frame after we return.  */
-
-	hold_modifiers = dpi->modifiers;
-
-	adpm[0].next = hold_modifiers;
-	dpi->modifiers = &adpm[0];
-	adpm[0].mod = dc;
-	adpm[0].printed = 0;
-	adpm[0].templates = dpi->templates;
-
-	i = 1;
-	pdpm = hold_modifiers;
-	while (pdpm != NULL
-	       && (pdpm->mod->type == DEMANGLE_COMPONENT_RESTRICT
-		   || pdpm->mod->type == DEMANGLE_COMPONENT_VOLATILE
-		   || pdpm->mod->type == DEMANGLE_COMPONENT_CONST))
-	  {
-	    if (! pdpm->printed)
-	      {
-		if (i >= sizeof adpm / sizeof adpm[0])
-		  {
-		    d_print_error (dpi);
-		    return;
-		  }
-
-		adpm[i] = *pdpm;
-		adpm[i].next = dpi->modifiers;
-		dpi->modifiers = &adpm[i];
-		pdpm->printed = 1;
-		++i;
-	      }
-
-	    pdpm = pdpm->next;
-	  }
-
-	d_print_comp (dpi, options, d_right (dc));
-
-	dpi->modifiers = hold_modifiers;
-
-	if (adpm[0].printed)
-	  return;
-
-	while (i > 1)
-	  {
-	    --i;
-	    d_print_mod (dpi, options, adpm[i].mod);
-	  }
-
-	d_print_array_type (dpi, options, dc, dpi->modifiers);
-
-	return;
-      }
-
-    case DEMANGLE_COMPONENT_PTRMEM_TYPE:
-    case DEMANGLE_COMPONENT_VECTOR_TYPE:
-      {
-	struct d_print_mod dpm;
-
-	dpm.next = dpi->modifiers;
-	dpi->modifiers = &dpm;
-	dpm.mod = dc;
-	dpm.printed = 0;
-	dpm.templates = dpi->templates;
-
-	d_print_comp (dpi, options, d_right (dc));
-
-	/* If the modifier didn't get printed by the type, print it
-	   now.  */
-	if (! dpm.printed)
-	  d_print_mod (dpi, options, dc);
-
-	dpi->modifiers = dpm.next;
-
-	return;
-      }
-
-    case DEMANGLE_COMPONENT_FIXED_TYPE:
-      if (dc->u.s_fixed.sat)
-	d_append_string (dpi, "_Sat ");
-      /* Don't print "int _Accum".  */
-      if (dc->u.s_fixed.length->u.s_builtin.type
-	  != &cplus_demangle_builtin_types['i'-'a'])
-	{
-	  d_print_comp (dpi, options, dc->u.s_fixed.length);
-	  d_append_char (dpi, ' ');
-	}
-      if (dc->u.s_fixed.accum)
-	d_append_string (dpi, "_Accum");
-      else
-	d_append_string (dpi, "_Fract");
-      return;
-
-    case DEMANGLE_COMPONENT_ARGLIST:
-    case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
-      if (d_left (dc) != NULL)
-	d_print_comp (dpi, options, d_left (dc));
-      if (d_right (dc) != NULL)
-	{
-	  size_t len;
-	  unsigned long int flush_count;
-	  /* Make sure ", " isn't flushed by d_append_string, otherwise
-	     dpi->len -= 2 wouldn't work.  */
-	  if (dpi->len >= sizeof (dpi->buf) - 2)
-	    d_print_flush (dpi);
-	  d_append_string (dpi, ", ");
-	  len = dpi->len;
-	  flush_count = dpi->flush_count;
-	  d_print_comp (dpi, options, d_right (dc));
-	  /* If that didn't print anything (which can happen with empty
-	     template argument packs), remove the comma and space.  */
-	  if (dpi->flush_count == flush_count && dpi->len == len)
-	    dpi->len -= 2;
-	}
-      return;
-
-    case DEMANGLE_COMPONENT_INITIALIZER_LIST:
-      {
-	struct demangle_component *type = d_left (dc);
-	struct demangle_component *list = d_right (dc);
-
-	if (type)
-	  d_print_comp (dpi, options, type);
-	d_append_char (dpi, '{');
-	d_print_comp (dpi, options, list);
-	d_append_char (dpi, '}');
-      }
-      return;
-
-    case DEMANGLE_COMPONENT_OPERATOR:
-      {
-	const struct demangle_operator_info *op = dc->u.s_operator.op;
-	int len = op->len;
-
-	d_append_string (dpi, "operator");
-	/* Add a space before new/delete.  */
-	if (IS_LOWER (op->name[0]))
-	  d_append_char (dpi, ' ');
-	/* Omit a trailing space.  */
-	if (op->name[len-1] == ' ')
-	  --len;
-	d_append_buffer (dpi, op->name, len);
-	return;
-      }
-
-    case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
-      d_append_string (dpi, "operator ");
-      d_print_comp (dpi, options, dc->u.s_extended_operator.name);
-      return;
-
-    case DEMANGLE_COMPONENT_CONVERSION:
-      d_append_string (dpi, "operator ");
-      d_print_conversion (dpi, options, dc);
-      return;
-
-    case DEMANGLE_COMPONENT_NULLARY:
-      d_print_expr_op (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_UNARY:
-      {
-	struct demangle_component *op = d_left (dc);
-	struct demangle_component *operand = d_right (dc);
-	const char *code = NULL;
-
-	if (op->type == DEMANGLE_COMPONENT_OPERATOR)
-	  {
-	    code = op->u.s_operator.op->code;
-	    if (!strcmp (code, "ad"))
-	      {
-		/* Don't print the argument list for the address of a
-		   function.  */
-		if (operand->type == DEMANGLE_COMPONENT_TYPED_NAME
-		    && d_left (operand)->type == DEMANGLE_COMPONENT_QUAL_NAME
-		    && d_right (operand)->type == DEMANGLE_COMPONENT_FUNCTION_TYPE)
-		  operand = d_left (operand);
-	      }
-	    if (operand->type == DEMANGLE_COMPONENT_BINARY_ARGS)
-	      {
-		/* This indicates a suffix operator.  */
-		operand = d_left (operand);
-		d_print_subexpr (dpi, options, operand);
-		d_print_expr_op (dpi, options, op);
-		return;
-	      }
-	  }
-
-	/* For sizeof..., just print the pack length.  */
-	if (code && !strcmp (code, "sZ"))
-	  {
-	    struct demangle_component *a = d_find_pack (dpi, operand);
-	    int len = d_pack_length (a);
-	    d_append_num (dpi, len);
-	    return;
-	  }
-	else if (code && !strcmp (code, "sP"))
-	  {
-	    int len = d_args_length (dpi, operand);
-	    d_append_num (dpi, len);
-	    return;
-	  }
-
-	if (op->type != DEMANGLE_COMPONENT_CAST)
-	  d_print_expr_op (dpi, options, op);
-	else
-	  {
-	    d_append_char (dpi, '(');
-	    d_print_cast (dpi, options, op);
-	    d_append_char (dpi, ')');
-	  }
-	if (code && !strcmp (code, "gs"))
-	  /* Avoid parens after '::'.  */
-	  d_print_comp (dpi, options, operand);
-	else if (code && !strcmp (code, "st"))
-	  /* Always print parens for sizeof (type).  */
-	  {
-	    d_append_char (dpi, '(');
-	    d_print_comp (dpi, options, operand);
-	    d_append_char (dpi, ')');
-	  }
-	else
-	  d_print_subexpr (dpi, options, operand);
-      }
-      return;
-
-    case DEMANGLE_COMPONENT_BINARY:
-      if (d_right (dc)->type != DEMANGLE_COMPONENT_BINARY_ARGS)
-	{
-	  d_print_error (dpi);
-	  return;
-	}
-
-      if (op_is_new_cast (d_left (dc)))
-	{
-	  d_print_expr_op (dpi, options, d_left (dc));
-	  d_append_char (dpi, '<');
-	  d_print_comp (dpi, options, d_left (d_right (dc)));
-	  d_append_string (dpi, ">(");
-	  d_print_comp (dpi, options, d_right (d_right (dc)));
-	  d_append_char (dpi, ')');
-	  return;
-	}
-
-      if (d_maybe_print_fold_expression (dpi, options, dc))
-	return;
-
-      /* We wrap an expression which uses the greater-than operator in
-	 an extra layer of parens so that it does not get confused
-	 with the '>' which ends the template parameters.  */
-      if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
-	  && d_left (dc)->u.s_operator.op->len == 1
-	  && d_left (dc)->u.s_operator.op->name[0] == '>')
-	d_append_char (dpi, '(');
-
-      if (strcmp (d_left (dc)->u.s_operator.op->code, "cl") == 0
-          && d_left (d_right (dc))->type == DEMANGLE_COMPONENT_TYPED_NAME)
-	{
-	  /* Function call used in an expression should not have printed types
-	     of the function arguments.  Values of the function arguments still
-	     get printed below.  */
-
-	  const struct demangle_component *func = d_left (d_right (dc));
-
-	  if (d_right (func)->type != DEMANGLE_COMPONENT_FUNCTION_TYPE)
-	    d_print_error (dpi);
-	  d_print_subexpr (dpi, options, d_left (func));
-	}
-      else
-	d_print_subexpr (dpi, options, d_left (d_right (dc)));
-      if (strcmp (d_left (dc)->u.s_operator.op->code, "ix") == 0)
-	{
-	  d_append_char (dpi, '[');
-	  d_print_comp (dpi, options, d_right (d_right (dc)));
-	  d_append_char (dpi, ']');
-	}
-      else
-	{
-	  if (strcmp (d_left (dc)->u.s_operator.op->code, "cl") != 0)
-	    d_print_expr_op (dpi, options, d_left (dc));
-	  d_print_subexpr (dpi, options, d_right (d_right (dc)));
-	}
-
-      if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
-	  && d_left (dc)->u.s_operator.op->len == 1
-	  && d_left (dc)->u.s_operator.op->name[0] == '>')
-	d_append_char (dpi, ')');
-
-      return;
-
-    case DEMANGLE_COMPONENT_BINARY_ARGS:
-      /* We should only see this as part of DEMANGLE_COMPONENT_BINARY.  */
-      d_print_error (dpi);
-      return;
-
-    case DEMANGLE_COMPONENT_TRINARY:
-      if (d_right (dc)->type != DEMANGLE_COMPONENT_TRINARY_ARG1
-	  || d_right (d_right (dc))->type != DEMANGLE_COMPONENT_TRINARY_ARG2)
-	{
-	  d_print_error (dpi);
-	  return;
-	}
-      if (d_maybe_print_fold_expression (dpi, options, dc))
-	return;
-      {
-	struct demangle_component *op = d_left (dc);
-	struct demangle_component *first = d_left (d_right (dc));
-	struct demangle_component *second = d_left (d_right (d_right (dc)));
-	struct demangle_component *third = d_right (d_right (d_right (dc)));
-
-	if (!strcmp (op->u.s_operator.op->code, "qu"))
-	  {
-	    d_print_subexpr (dpi, options, first);
-	    d_print_expr_op (dpi, options, op);
-	    d_print_subexpr (dpi, options, second);
-	    d_append_string (dpi, " : ");
-	    d_print_subexpr (dpi, options, third);
-	  }
-	else
-	  {
-	    d_append_string (dpi, "new ");
-	    if (d_left (first) != NULL)
-	      {
-		d_print_subexpr (dpi, options, first);
-		d_append_char (dpi, ' ');
-	      }
-	    d_print_comp (dpi, options, second);
-	    if (third)
-	      d_print_subexpr (dpi, options, third);
-	  }
-      }
-      return;
-
-    case DEMANGLE_COMPONENT_TRINARY_ARG1:
-    case DEMANGLE_COMPONENT_TRINARY_ARG2:
-      /* We should only see these are part of DEMANGLE_COMPONENT_TRINARY.  */
-      d_print_error (dpi);
-      return;
-
-    case DEMANGLE_COMPONENT_LITERAL:
-    case DEMANGLE_COMPONENT_LITERAL_NEG:
-      {
-	enum d_builtin_type_print tp;
-
-	/* For some builtin types, produce simpler output.  */
-	tp = D_PRINT_DEFAULT;
-	if (d_left (dc)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE)
-	  {
-	    tp = d_left (dc)->u.s_builtin.type->print;
-	    switch (tp)
-	      {
-	      case D_PRINT_INT:
-	      case D_PRINT_UNSIGNED:
-	      case D_PRINT_LONG:
-	      case D_PRINT_UNSIGNED_LONG:
-	      case D_PRINT_LONG_LONG:
-	      case D_PRINT_UNSIGNED_LONG_LONG:
-		if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME)
-		  {
-		    if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
-		      d_append_char (dpi, '-');
-		    d_print_comp (dpi, options, d_right (dc));
-		    switch (tp)
-		      {
-		      default:
-			break;
-		      case D_PRINT_UNSIGNED:
-			d_append_char (dpi, 'u');
-			break;
-		      case D_PRINT_LONG:
-			d_append_char (dpi, 'l');
-			break;
-		      case D_PRINT_UNSIGNED_LONG:
-			d_append_string (dpi, "ul");
-			break;
-		      case D_PRINT_LONG_LONG:
-			d_append_string (dpi, "ll");
-			break;
-		      case D_PRINT_UNSIGNED_LONG_LONG:
-			d_append_string (dpi, "ull");
-			break;
-		      }
-		    return;
-		  }
-		break;
-
-	      case D_PRINT_BOOL:
-		if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME
-		    && d_right (dc)->u.s_name.len == 1
-		    && dc->type == DEMANGLE_COMPONENT_LITERAL)
-		  {
-		    switch (d_right (dc)->u.s_name.s[0])
-		      {
-		      case '0':
-			d_append_string (dpi, "false");
-			return;
-		      case '1':
-			d_append_string (dpi, "true");
-			return;
-		      default:
-			break;
-		      }
-		  }
-		break;
-
-	      default:
-		break;
-	      }
-	  }
-
-	d_append_char (dpi, '(');
-	d_print_comp (dpi, options, d_left (dc));
-	d_append_char (dpi, ')');
-	if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
-	  d_append_char (dpi, '-');
-	if (tp == D_PRINT_FLOAT)
-	  d_append_char (dpi, '[');
-	d_print_comp (dpi, options, d_right (dc));
-	if (tp == D_PRINT_FLOAT)
-	  d_append_char (dpi, ']');
-      }
-      return;
-
-    case DEMANGLE_COMPONENT_NUMBER:
-      d_append_num (dpi, dc->u.s_number.number);
-      return;
-
-    case DEMANGLE_COMPONENT_JAVA_RESOURCE:
-      d_append_string (dpi, "java resource ");
-      d_print_comp (dpi, options, d_left (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_COMPOUND_NAME:
-      d_print_comp (dpi, options, d_left (dc));
-      d_print_comp (dpi, options, d_right (dc));
-      return;
-
-    case DEMANGLE_COMPONENT_CHARACTER:
-      d_append_char (dpi, dc->u.s_character.character);
-      return;
-
-    case DEMANGLE_COMPONENT_DECLTYPE:
-      d_append_string (dpi, "decltype (");
-      d_print_comp (dpi, options, d_left (dc));
-      d_append_char (dpi, ')');
-      return;
-
-    case DEMANGLE_COMPONENT_PACK_EXPANSION:
-      {
-	int len;
-	int i;
-	struct demangle_component *a = d_find_pack (dpi, d_left (dc));
-	if (a == NULL)
-	  {
-	    /* d_find_pack won't find anything if the only packs involved
-	       in this expansion are function parameter packs; in that
-	       case, just print the pattern and "...".  */
-	    d_print_subexpr (dpi, options, d_left (dc));
-	    d_append_string (dpi, "...");
-	    return;
-	  }
-
-	len = d_pack_length (a);
-	dc = d_left (dc);
-	for (i = 0; i < len; ++i)
-	  {
-	    dpi->pack_index = i;
-	    d_print_comp (dpi, options, dc);
-	    if (i < len-1)
-	      d_append_string (dpi, ", ");
-	  }
-      }
-      return;
-
-    case DEMANGLE_COMPONENT_FUNCTION_PARAM:
-      {
-	long num = dc->u.s_number.number;
-	if (num == 0)
-	  d_append_string (dpi, "this");
-	else
-	  {
-	    d_append_string (dpi, "{parm#");
-	    d_append_num (dpi, num);
-	    d_append_char (dpi, '}');
-	  }
-      }
-      return;
-
-    case DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS:
-      d_append_string (dpi, "global constructors keyed to ");
-      d_print_comp (dpi, options, dc->u.s_binary.left);
-      return;
-
-    case DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS:
-      d_append_string (dpi, "global destructors keyed to ");
-      d_print_comp (dpi, options, dc->u.s_binary.left);
-      return;
-
-    case DEMANGLE_COMPONENT_LAMBDA:
-      d_append_string (dpi, "{lambda(");
-      /* Generic lambda auto parms are mangled as the template type
-	 parm they are.  */
-      dpi->is_lambda_arg++;
-      d_print_comp (dpi, options, dc->u.s_unary_num.sub);
-      dpi->is_lambda_arg--;
-      d_append_string (dpi, ")#");
-      d_append_num (dpi, dc->u.s_unary_num.num + 1);
-      d_append_char (dpi, '}');
-      return;
-
-    case DEMANGLE_COMPONENT_UNNAMED_TYPE:
-      d_append_string (dpi, "{unnamed type#");
-      d_append_num (dpi, dc->u.s_number.number + 1);
-      d_append_char (dpi, '}');
-      return;
-
-    case DEMANGLE_COMPONENT_CLONE:
-      d_print_comp (dpi, options, d_left (dc));
-      d_append_string (dpi, " [clone ");
-      d_print_comp (dpi, options, d_right (dc));
-      d_append_char (dpi, ']');
-      return;
-
-    default:
-      d_print_error (dpi);
-      return;
-    }
-}
-
-static void
-d_print_comp (struct d_print_info *dpi, int options,
-	      const struct demangle_component *dc)
-{
-  struct d_component_stack self;
-
-  self.dc = dc;
-  self.parent = dpi->component_stack;
-  dpi->component_stack = &self;
-
-  d_print_comp_inner (dpi, options, dc);
-
-  dpi->component_stack = self.parent;
-}
-
-/* Print a Java dentifier.  For Java we try to handle encoded extended
-   Unicode characters.  The C++ ABI doesn't mention Unicode encoding,
-   so we don't it for C++.  Characters are encoded as
-   __U<hex-char>+_.  */
-
-static void
-d_print_java_identifier (struct d_print_info *dpi, const char *name, int len)
-{
-  const char *p;
-  const char *end;
-
-  end = name + len;
-  for (p = name; p < end; ++p)
-    {
-      if (end - p > 3
-	  && p[0] == '_'
-	  && p[1] == '_'
-	  && p[2] == 'U')
-	{
-	  unsigned long c;
-	  const char *q;
-
-	  c = 0;
-	  for (q = p + 3; q < end; ++q)
-	    {
-	      int dig;
-
-	      if (IS_DIGIT (*q))
-		dig = *q - '0';
-	      else if (*q >= 'A' && *q <= 'F')
-		dig = *q - 'A' + 10;
-	      else if (*q >= 'a' && *q <= 'f')
-		dig = *q - 'a' + 10;
-	      else
-		break;
-
-	      c = c * 16 + dig;
-	    }
-	  /* If the Unicode character is larger than 256, we don't try
-	     to deal with it here.  FIXME.  */
-	  if (q < end && *q == '_' && c < 256)
-	    {
-	      d_append_char (dpi, c);
-	      p = q;
-	      continue;
-	    }
-	}
-
-      d_append_char (dpi, *p);
-    }
-}
-
-/* Print a list of modifiers.  SUFFIX is 1 if we are printing
-   qualifiers on this after printing a function.  */
-
-static void
-d_print_mod_list (struct d_print_info *dpi, int options,
-                  struct d_print_mod *mods, int suffix)
-{
-  struct d_print_template *hold_dpt;
-
-  if (mods == NULL || d_print_saw_error (dpi))
-    return;
-
-  if (mods->printed
-      || (! suffix
-	  && (is_fnqual_component_type (mods->mod->type))))
-    {
-      d_print_mod_list (dpi, options, mods->next, suffix);
-      return;
-    }
-
-  mods->printed = 1;
-
-  hold_dpt = dpi->templates;
-  dpi->templates = mods->templates;
-
-  if (mods->mod->type == DEMANGLE_COMPONENT_FUNCTION_TYPE)
-    {
-      d_print_function_type (dpi, options, mods->mod, mods->next);
-      dpi->templates = hold_dpt;
-      return;
-    }
-  else if (mods->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
-    {
-      d_print_array_type (dpi, options, mods->mod, mods->next);
-      dpi->templates = hold_dpt;
-      return;
-    }
-  else if (mods->mod->type == DEMANGLE_COMPONENT_LOCAL_NAME)
-    {
-      struct d_print_mod *hold_modifiers;
-      struct demangle_component *dc;
-
-      /* When this is on the modifier stack, we have pulled any
-	 qualifiers off the right argument already.  Otherwise, we
-	 print it as usual, but don't let the left argument see any
-	 modifiers.  */
-
-      hold_modifiers = dpi->modifiers;
-      dpi->modifiers = NULL;
-      d_print_comp (dpi, options, d_left (mods->mod));
-      dpi->modifiers = hold_modifiers;
-
-      if ((options & DMGL_JAVA) == 0)
-	d_append_string (dpi, "::");
-      else
-	d_append_char (dpi, '.');
-
-      dc = d_right (mods->mod);
-
-      if (dc->type == DEMANGLE_COMPONENT_DEFAULT_ARG)
-	{
-	  d_append_string (dpi, "{default arg#");
-	  d_append_num (dpi, dc->u.s_unary_num.num + 1);
-	  d_append_string (dpi, "}::");
-	  dc = dc->u.s_unary_num.sub;
-	}
-
-      while (is_fnqual_component_type (dc->type))
-	dc = d_left (dc);
-
-      d_print_comp (dpi, options, dc);
-
-      dpi->templates = hold_dpt;
-      return;
-    }
-
-  d_print_mod (dpi, options, mods->mod);
-
-  dpi->templates = hold_dpt;
-
-  d_print_mod_list (dpi, options, mods->next, suffix);
-}
-
-/* Print a modifier.  */
-
-static void
-d_print_mod (struct d_print_info *dpi, int options,
-             const struct demangle_component *mod)
-{
-  switch (mod->type)
-    {
-    case DEMANGLE_COMPONENT_RESTRICT:
-    case DEMANGLE_COMPONENT_RESTRICT_THIS:
-      d_append_string (dpi, " restrict");
-      return;
-    case DEMANGLE_COMPONENT_VOLATILE:
-    case DEMANGLE_COMPONENT_VOLATILE_THIS:
-      d_append_string (dpi, " volatile");
-      return;
-    case DEMANGLE_COMPONENT_CONST:
-    case DEMANGLE_COMPONENT_CONST_THIS:
-      d_append_string (dpi, " const");
-      return;
-    case DEMANGLE_COMPONENT_TRANSACTION_SAFE:
-      d_append_string (dpi, " transaction_safe");
-      return;
-    case DEMANGLE_COMPONENT_NOEXCEPT:
-      d_append_string (dpi, " noexcept");
-      if (d_right (mod))
-	{
-	  d_append_char (dpi, '(');
-	  d_print_comp (dpi, options, d_right (mod));
-	  d_append_char (dpi, ')');
-	}
-      return;
-    case DEMANGLE_COMPONENT_THROW_SPEC:
-      d_append_string (dpi, " throw");
-      if (d_right (mod))
-	{
-	  d_append_char (dpi, '(');
-	  d_print_comp (dpi, options, d_right (mod));
-	  d_append_char (dpi, ')');
-	}
-      return;
-    case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
-      d_append_char (dpi, ' ');
-      d_print_comp (dpi, options, d_right (mod));
-      return;
-    case DEMANGLE_COMPONENT_POINTER:
-      /* There is no pointer symbol in Java.  */
-      if ((options & DMGL_JAVA) == 0)
-	d_append_char (dpi, '*');
-      return;
-    case DEMANGLE_COMPONENT_REFERENCE_THIS:
-      /* For the ref-qualifier, put a space before the &.  */
-      d_append_char (dpi, ' ');
-      /* FALLTHRU */
-    case DEMANGLE_COMPONENT_REFERENCE:
-      d_append_char (dpi, '&');
-      return;
-    case DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS:
-      d_append_char (dpi, ' ');
-      /* FALLTHRU */
-    case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
-      d_append_string (dpi, "&&");
-      return;
-    case DEMANGLE_COMPONENT_COMPLEX:
-      d_append_string (dpi, "complex ");
-      return;
-    case DEMANGLE_COMPONENT_IMAGINARY:
-      d_append_string (dpi, "imaginary ");
-      return;
-    case DEMANGLE_COMPONENT_PTRMEM_TYPE:
-      if (d_last_char (dpi) != '(')
-	d_append_char (dpi, ' ');
-      d_print_comp (dpi, options, d_left (mod));
-      d_append_string (dpi, "::*");
-      return;
-    case DEMANGLE_COMPONENT_TYPED_NAME:
-      d_print_comp (dpi, options, d_left (mod));
-      return;
-    case DEMANGLE_COMPONENT_VECTOR_TYPE:
-      d_append_string (dpi, " __vector(");
-      d_print_comp (dpi, options, d_left (mod));
-      d_append_char (dpi, ')');
-      return;
-
-    default:
-      /* Otherwise, we have something that won't go back on the
-	 modifier stack, so we can just print it.  */
-      d_print_comp (dpi, options, mod);
-      return;
-    }
-}
-
-/* Print a function type, except for the return type.  */
-
-static void
-d_print_function_type (struct d_print_info *dpi, int options,
-                       const struct demangle_component *dc,
-                       struct d_print_mod *mods)
-{
-  int need_paren;
-  int need_space;
-  struct d_print_mod *p;
-  struct d_print_mod *hold_modifiers;
-
-  need_paren = 0;
-  need_space = 0;
-  for (p = mods; p != NULL; p = p->next)
-    {
-      if (p->printed)
-	break;
-
-      switch (p->mod->type)
-	{
-	case DEMANGLE_COMPONENT_POINTER:
-	case DEMANGLE_COMPONENT_REFERENCE:
-	case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
-	  need_paren = 1;
-	  break;
-	case DEMANGLE_COMPONENT_RESTRICT:
-	case DEMANGLE_COMPONENT_VOLATILE:
-	case DEMANGLE_COMPONENT_CONST:
-	case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
-	case DEMANGLE_COMPONENT_COMPLEX:
-	case DEMANGLE_COMPONENT_IMAGINARY:
-	case DEMANGLE_COMPONENT_PTRMEM_TYPE:
-	  need_space = 1;
-	  need_paren = 1;
-	  break;
-	FNQUAL_COMPONENT_CASE:
-	  break;
-	default:
-	  break;
-	}
-      if (need_paren)
-	break;
-    }
-
-  if (need_paren)
-    {
-      if (! need_space)
-	{
-	  if (d_last_char (dpi) != '('
-	      && d_last_char (dpi) != '*')
-	    need_space = 1;
-	}
-      if (need_space && d_last_char (dpi) != ' ')
-	d_append_char (dpi, ' ');
-      d_append_char (dpi, '(');
-    }
-
-  hold_modifiers = dpi->modifiers;
-  dpi->modifiers = NULL;
-
-  d_print_mod_list (dpi, options, mods, 0);
-
-  if (need_paren)
-    d_append_char (dpi, ')');
-
-  d_append_char (dpi, '(');
-
-  if (d_right (dc) != NULL)
-    d_print_comp (dpi, options, d_right (dc));
-
-  d_append_char (dpi, ')');
-
-  d_print_mod_list (dpi, options, mods, 1);
-
-  dpi->modifiers = hold_modifiers;
-}
-
-/* Print an array type, except for the element type.  */
-
-static void
-d_print_array_type (struct d_print_info *dpi, int options,
-                    const struct demangle_component *dc,
-                    struct d_print_mod *mods)
-{
-  int need_space;
-
-  need_space = 1;
-  if (mods != NULL)
-    {
-      int need_paren;
-      struct d_print_mod *p;
-
-      need_paren = 0;
-      for (p = mods; p != NULL; p = p->next)
-	{
-	  if (! p->printed)
-	    {
-	      if (p->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
-		{
-		  need_space = 0;
-		  break;
-		}
-	      else
-		{
-		  need_paren = 1;
-		  need_space = 1;
-		  break;
-		}
-	    }
-	}
-
-      if (need_paren)
-	d_append_string (dpi, " (");
-
-      d_print_mod_list (dpi, options, mods, 0);
-
-      if (need_paren)
-	d_append_char (dpi, ')');
-    }
-
-  if (need_space)
-    d_append_char (dpi, ' ');
-
-  d_append_char (dpi, '[');
-
-  if (d_left (dc) != NULL)
-    d_print_comp (dpi, options, d_left (dc));
-
-  d_append_char (dpi, ']');
-}
-
-/* Print an operator in an expression.  */
-
-static void
-d_print_expr_op (struct d_print_info *dpi, int options,
-                 const struct demangle_component *dc)
-{
-  if (dc->type == DEMANGLE_COMPONENT_OPERATOR)
-    d_append_buffer (dpi, dc->u.s_operator.op->name,
-		     dc->u.s_operator.op->len);
-  else
-    d_print_comp (dpi, options, dc);
-}
-
-/* Print a cast.  */
-
-static void
-d_print_cast (struct d_print_info *dpi, int options,
-		    const struct demangle_component *dc)
-{
-  d_print_comp (dpi, options, d_left (dc));
-}
-
-/* Print a conversion operator.  */
-
-static void
-d_print_conversion (struct d_print_info *dpi, int options,
-		    const struct demangle_component *dc)
-{
-  struct d_print_template dpt;
-
-  /* For a conversion operator, we need the template parameters from
-     the enclosing template in scope for processing the type.  */
-  if (dpi->current_template != NULL)
-    {
-      dpt.next = dpi->templates;
-      dpi->templates = &dpt;
-      dpt.template_decl = dpi->current_template;
-    }
-
-  if (d_left (dc)->type != DEMANGLE_COMPONENT_TEMPLATE)
-    {
-      d_print_comp (dpi, options, d_left (dc));
-      if (dpi->current_template != NULL)
-	dpi->templates = dpt.next;
-    }
-  else
-    {
-      d_print_comp (dpi, options, d_left (d_left (dc)));
-
-      /* For a templated cast operator, we need to remove the template
-	 parameters from scope after printing the operator name,
-	 so we need to handle the template printing here.  */
-      if (dpi->current_template != NULL)
-	dpi->templates = dpt.next;
-
-      if (d_last_char (dpi) == '<')
-	d_append_char (dpi, ' ');
-      d_append_char (dpi, '<');
-      d_print_comp (dpi, options, d_right (d_left (dc)));
-      /* Avoid generating two consecutive '>' characters, to avoid
-	 the C++ syntactic ambiguity.  */
-      if (d_last_char (dpi) == '>')
-	d_append_char (dpi, ' ');
-      d_append_char (dpi, '>');
-    }
-}
-
-/* Initialize the information structure we use to pass around
-   information.  */
-
-CP_STATIC_IF_GLIBCPP_V3
-void
-cplus_demangle_init_info (const char *mangled, int options, size_t len,
-                          struct d_info *di)
-{
-  di->s = mangled;
-  di->send = mangled + len;
-  di->options = options;
-
-  di->n = mangled;
-
-  /* We can not need more components than twice the number of chars in
-     the mangled string.  Most components correspond directly to
-     chars, but the ARGLIST types are exceptions.  */
-  di->num_comps = 2 * len;
-  di->next_comp = 0;
-
-  /* Similarly, we can not need more substitutions than there are
-     chars in the mangled string.  */
-  di->num_subs = len;
-  di->next_sub = 0;
-  di->did_subs = 0;
-
-  di->last_name = NULL;
-
-  di->expansion = 0;
-  di->is_expression = 0;
-  di->is_conversion = 0;
-}
-
-/* Internal implementation for the demangler.  If MANGLED is a g++ v3 ABI
-   mangled name, return strings in repeated callback giving the demangled
-   name.  OPTIONS is the usual libiberty demangler options.  On success,
-   this returns 1.  On failure, returns 0.  */
-
-static int
-d_demangle_callback (const char *mangled, int options,
-                     demangle_callbackref callback, void *opaque)
-{
-  enum
-    {
-      DCT_TYPE,
-      DCT_MANGLED,
-      DCT_GLOBAL_CTORS,
-      DCT_GLOBAL_DTORS
-    }
-  type;
-  struct d_info di;
-  struct demangle_component *dc;
-  int status;
-
-  if (mangled[0] == '_' && mangled[1] == 'Z')
-    type = DCT_MANGLED;
-  else if (strncmp (mangled, "_GLOBAL_", 8) == 0
-	   && (mangled[8] == '.' || mangled[8] == '_' || mangled[8] == '$')
-	   && (mangled[9] == 'D' || mangled[9] == 'I')
-	   && mangled[10] == '_')
-    type = mangled[9] == 'I' ? DCT_GLOBAL_CTORS : DCT_GLOBAL_DTORS;
-  else
-    {
-      if ((options & DMGL_TYPES) == 0)
-	return 0;
-      type = DCT_TYPE;
-    }
-
-  cplus_demangle_init_info (mangled, options, strlen (mangled), &di);
-
-  {
-#ifdef CP_DYNAMIC_ARRAYS
-    __extension__ struct demangle_component comps[di.num_comps];
-    __extension__ struct demangle_component *subs[di.num_subs];
-
-    di.comps = comps;
-    di.subs = subs;
-#else
-    di.comps = alloca (di.num_comps * sizeof (*di.comps));
-    di.subs = alloca (di.num_subs * sizeof (*di.subs));
-#endif
-
-    switch (type)
-      {
-      case DCT_TYPE:
-	dc = cplus_demangle_type (&di);
-	break;
-      case DCT_MANGLED:
-	dc = cplus_demangle_mangled_name (&di, 1);
-	break;
-      case DCT_GLOBAL_CTORS:
-      case DCT_GLOBAL_DTORS:
-	d_advance (&di, 11);
-	dc = d_make_comp (&di,
-			  (type == DCT_GLOBAL_CTORS
-			   ? DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS
-			   : DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS),
-			  d_make_demangle_mangled_name (&di, d_str (&di)),
-			  NULL);
-	d_advance (&di, strlen (d_str (&di)));
-	break;
-      default:
-	abort (); /* We have listed all the cases.  */
-      }
-
-    /* If DMGL_PARAMS is set, then if we didn't consume the entire
-       mangled string, then we didn't successfully demangle it.  If
-       DMGL_PARAMS is not set, we didn't look at the trailing
-       parameters.  */
-    if (((options & DMGL_PARAMS) != 0) && d_peek_char (&di) != '\0')
-      dc = NULL;
-
-#ifdef CP_DEMANGLE_DEBUG
-    d_dump (dc, 0);
-#endif
-
-    status = (dc != NULL)
-             ? cplus_demangle_print_callback (options, dc, callback, opaque)
-             : 0;
-  }
-
-  return status;
-}
-
-/* Entry point for the demangler.  If MANGLED is a g++ v3 ABI mangled
-   name, return a buffer allocated with malloc holding the demangled
-   name.  OPTIONS is the usual libiberty demangler options.  On
-   success, this sets *PALC to the allocated size of the returned
-   buffer.  On failure, this sets *PALC to 0 for a bad name, or 1 for
-   a memory allocation failure, and returns NULL.  */
-
-static char *
-d_demangle (const char *mangled, int options, size_t *palc)
-{
-  struct d_growable_string dgs;
-  int status;
-
-  d_growable_string_init (&dgs, 0);
-
-  status = d_demangle_callback (mangled, options,
-                                d_growable_string_callback_adapter, &dgs);
-  if (status == 0)
-    {
-      free (dgs.buf);
-      *palc = 0;
-      return NULL;
-    }
-
-  *palc = dgs.allocation_failure ? 1 : dgs.alc;
-  return dgs.buf;
-}
-
-#if defined(IN_LIBGCC2) || defined(IN_GLIBCPP_V3)
-
-extern char *__cxa_demangle (const char *, char *, size_t *, int *);
-
-/* ia64 ABI-mandated entry point in the C++ runtime library for
-   performing demangling.  MANGLED_NAME is a NUL-terminated character
-   string containing the name to be demangled.
-
-   OUTPUT_BUFFER is a region of memory, allocated with malloc, of
-   *LENGTH bytes, into which the demangled name is stored.  If
-   OUTPUT_BUFFER is not long enough, it is expanded using realloc.
-   OUTPUT_BUFFER may instead be NULL; in that case, the demangled name
-   is placed in a region of memory allocated with malloc.
-
-   If LENGTH is non-NULL, the length of the buffer containing the
-   demangled name, is placed in *LENGTH.
-
-   The return value is a pointer to the start of the NUL-terminated
-   demangled name, or NULL if the demangling fails.  The caller is
-   responsible for deallocating this memory using free.
-
-   *STATUS is set to one of the following values:
-      0: The demangling operation succeeded.
-     -1: A memory allocation failure occurred.
-     -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules.
-     -3: One of the arguments is invalid.
-
-   The demangling is performed using the C++ ABI mangling rules, with
-   GNU extensions.  */
-
-char *
-__cxa_demangle (const char *mangled_name, char *output_buffer,
-                size_t *length, int *status)
-{
-  char *demangled;
-  size_t alc;
-
-  if (mangled_name == NULL)
-    {
-      if (status != NULL)
-	*status = -3;
-      return NULL;
-    }
-
-  if (output_buffer != NULL && length == NULL)
-    {
-      if (status != NULL)
-	*status = -3;
-      return NULL;
-    }
-
-  demangled = d_demangle (mangled_name, DMGL_PARAMS | DMGL_TYPES, &alc);
-
-  if (demangled == NULL)
-    {
-      if (status != NULL)
-	{
-	  if (alc == 1)
-	    *status = -1;
-	  else
-	    *status = -2;
-	}
-      return NULL;
-    }
-
-  if (output_buffer == NULL)
-    {
-      if (length != NULL)
-	*length = alc;
-    }
-  else
-    {
-      if (strlen (demangled) < *length)
-	{
-	  strcpy (output_buffer, demangled);
-	  free (demangled);
-	  demangled = output_buffer;
-	}
-      else
-	{
-	  free (output_buffer);
-	  *length = alc;
-	}
-    }
-
-  if (status != NULL)
-    *status = 0;
-
-  return demangled;
-}
-
-extern int __gcclibcxx_demangle_callback (const char *,
-                                          void (*)
-                                            (const char *, size_t, void *),
-                                          void *);
-
-/* Alternative, allocationless entry point in the C++ runtime library
-   for performing demangling.  MANGLED_NAME is a NUL-terminated character
-   string containing the name to be demangled.
-
-   CALLBACK is a callback function, called with demangled string
-   segments as demangling progresses; it is called at least once,
-   but may be called more than once.  OPAQUE is a generalized pointer
-   used as a callback argument.
-
-   The return code is one of the following values, equivalent to
-   the STATUS values of __cxa_demangle() (excluding -1, since this
-   function performs no memory allocations):
-      0: The demangling operation succeeded.
-     -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules.
-     -3: One of the arguments is invalid.
-
-   The demangling is performed using the C++ ABI mangling rules, with
-   GNU extensions.  */
-
-int
-__gcclibcxx_demangle_callback (const char *mangled_name,
-                               void (*callback) (const char *, size_t, void *),
-                               void *opaque)
-{
-  int status;
-
-  if (mangled_name == NULL || callback == NULL)
-    return -3;
-
-  status = d_demangle_callback (mangled_name, DMGL_PARAMS | DMGL_TYPES,
-                                callback, opaque);
-  if (status == 0)
-    return -2;
-
-  return 0;
-}
-
-#else /* ! (IN_LIBGCC2 || IN_GLIBCPP_V3) */
-
-/* Entry point for libiberty demangler.  If MANGLED is a g++ v3 ABI
-   mangled name, return a buffer allocated with malloc holding the
-   demangled name.  Otherwise, return NULL.  */
-
-char *
-cplus_demangle_v3 (const char *mangled, int options)
-{
-  size_t alc;
-
-  return d_demangle (mangled, options, &alc);
-}
-
-int
-cplus_demangle_v3_callback (const char *mangled, int options,
-                            demangle_callbackref callback, void *opaque)
-{
-  return d_demangle_callback (mangled, options, callback, opaque);
-}
-
-/* Demangle a Java symbol.  Java uses a subset of the V3 ABI C++ mangling 
-   conventions, but the output formatting is a little different.
-   This instructs the C++ demangler not to emit pointer characters ("*"), to
-   use Java's namespace separator symbol ("." instead of "::"), and to output
-   JArray<TYPE> as TYPE[].  */
-
-char *
-java_demangle_v3 (const char *mangled)
-{
-  size_t alc;
-
-  return d_demangle (mangled, DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX, &alc);
-}
-
-int
-java_demangle_v3_callback (const char *mangled,
-                           demangle_callbackref callback, void *opaque)
-{
-  return d_demangle_callback (mangled,
-                              DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX,
-                              callback, opaque);
-}
-
-#endif /* IN_LIBGCC2 || IN_GLIBCPP_V3 */
-
-#ifndef IN_GLIBCPP_V3
-
-/* Demangle a string in order to find out whether it is a constructor
-   or destructor.  Return non-zero on success.  Set *CTOR_KIND and
-   *DTOR_KIND appropriately.  */
-
-static int
-is_ctor_or_dtor (const char *mangled,
-                 enum gnu_v3_ctor_kinds *ctor_kind,
-                 enum gnu_v3_dtor_kinds *dtor_kind)
-{
-  struct d_info di;
-  struct demangle_component *dc;
-  int ret;
-
-  *ctor_kind = (enum gnu_v3_ctor_kinds) 0;
-  *dtor_kind = (enum gnu_v3_dtor_kinds) 0;
-
-  cplus_demangle_init_info (mangled, DMGL_GNU_V3, strlen (mangled), &di);
-
-  {
-#ifdef CP_DYNAMIC_ARRAYS
-    __extension__ struct demangle_component comps[di.num_comps];
-    __extension__ struct demangle_component *subs[di.num_subs];
-
-    di.comps = comps;
-    di.subs = subs;
-#else
-    di.comps = alloca (di.num_comps * sizeof (*di.comps));
-    di.subs = alloca (di.num_subs * sizeof (*di.subs));
-#endif
-
-    dc = cplus_demangle_mangled_name (&di, 1);
-
-    /* Note that because we did not pass DMGL_PARAMS, we don't expect
-       to demangle the entire string.  */
-
-    ret = 0;
-    while (dc != NULL)
-      {
-	switch (dc->type)
-	  {
-	    /* These cannot appear on a constructor or destructor.  */
-	  case DEMANGLE_COMPONENT_RESTRICT_THIS:
-	  case DEMANGLE_COMPONENT_VOLATILE_THIS:
-	  case DEMANGLE_COMPONENT_CONST_THIS:
-	  case DEMANGLE_COMPONENT_REFERENCE_THIS:
-	  case DEMANGLE_COMPONENT_RVALUE_REFERENCE_THIS:
-	  default:
-	    dc = NULL;
-	    break;
-	  case DEMANGLE_COMPONENT_TYPED_NAME:
-	  case DEMANGLE_COMPONENT_TEMPLATE:
-	    dc = d_left (dc);
-	    break;
-	  case DEMANGLE_COMPONENT_QUAL_NAME:
-	  case DEMANGLE_COMPONENT_LOCAL_NAME:
-	    dc = d_right (dc);
-	    break;
-	  case DEMANGLE_COMPONENT_CTOR:
-	    *ctor_kind = dc->u.s_ctor.kind;
-	    ret = 1;
-	    dc = NULL;
-	    break;
-	  case DEMANGLE_COMPONENT_DTOR:
-	    *dtor_kind = dc->u.s_dtor.kind;
-	    ret = 1;
-	    dc = NULL;
-	    break;
-	  }
-      }
-  }
-
-  return ret;
-}
-
-/* Return whether NAME is the mangled form of a g++ V3 ABI constructor
-   name.  A non-zero return indicates the type of constructor.  */
-
-enum gnu_v3_ctor_kinds
-is_gnu_v3_mangled_ctor (const char *name)
-{
-  enum gnu_v3_ctor_kinds ctor_kind;
-  enum gnu_v3_dtor_kinds dtor_kind;
-
-  if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind))
-    return (enum gnu_v3_ctor_kinds) 0;
-  return ctor_kind;
-}
-
-
-/* Return whether NAME is the mangled form of a g++ V3 ABI destructor
-   name.  A non-zero return indicates the type of destructor.  */
-
-enum gnu_v3_dtor_kinds
-is_gnu_v3_mangled_dtor (const char *name)
-{
-  enum gnu_v3_ctor_kinds ctor_kind;
-  enum gnu_v3_dtor_kinds dtor_kind;
-
-  if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind))
-    return (enum gnu_v3_dtor_kinds) 0;
-  return dtor_kind;
-}
-
-#endif /* IN_GLIBCPP_V3 */
-
-#ifdef STANDALONE_DEMANGLER
-
-#include "getopt.h"
-#include "dyn-string.h"
-
-static void print_usage (FILE* fp, int exit_value);
-
-#define IS_ALPHA(CHAR)                                                  \
-  (((CHAR) >= 'a' && (CHAR) <= 'z')                                     \
-   || ((CHAR) >= 'A' && (CHAR) <= 'Z'))
-
-/* Non-zero if CHAR is a character than can occur in a mangled name.  */
-#define is_mangled_char(CHAR)                                           \
-  (IS_ALPHA (CHAR) || IS_DIGIT (CHAR)                                   \
-   || (CHAR) == '_' || (CHAR) == '.' || (CHAR) == '$')
-
-/* The name of this program, as invoked.  */
-const char* program_name;
-
-/* Prints usage summary to FP and then exits with EXIT_VALUE.  */
-
-static void
-print_usage (FILE* fp, int exit_value)
-{
-  fprintf (fp, "Usage: %s [options] [names ...]\n", program_name);
-  fprintf (fp, "Options:\n");
-  fprintf (fp, "  -h,--help       Display this message.\n");
-  fprintf (fp, "  -p,--no-params  Don't display function parameters\n");
-  fprintf (fp, "  -v,--verbose    Produce verbose demanglings.\n");
-  fprintf (fp, "If names are provided, they are demangled.  Otherwise filters standard input.\n");
-
-  exit (exit_value);
-}
-
-/* Option specification for getopt_long.  */
-static const struct option long_options[] = 
-{
-  { "help",	 no_argument, NULL, 'h' },
-  { "no-params", no_argument, NULL, 'p' },
-  { "verbose",   no_argument, NULL, 'v' },
-  { NULL,        no_argument, NULL, 0   },
-};
-
-/* Main entry for a demangling filter executable.  It will demangle
-   its command line arguments, if any.  If none are provided, it will
-   filter stdin to stdout, replacing any recognized mangled C++ names
-   with their demangled equivalents.  */
-
-int
-main (int argc, char *argv[])
-{
-  int i;
-  int opt_char;
-  int options = DMGL_PARAMS | DMGL_ANSI | DMGL_TYPES;
-
-  /* Use the program name of this program, as invoked.  */
-  program_name = argv[0];
-
-  /* Parse options.  */
-  do 
-    {
-      opt_char = getopt_long (argc, argv, "hpv", long_options, NULL);
-      switch (opt_char)
-	{
-	case '?':  /* Unrecognized option.  */
-	  print_usage (stderr, 1);
-	  break;
-
-	case 'h':
-	  print_usage (stdout, 0);
-	  break;
-
-	case 'p':
-	  options &= ~ DMGL_PARAMS;
-	  break;
-
-	case 'v':
-	  options |= DMGL_VERBOSE;
-	  break;
-	}
-    }
-  while (opt_char != -1);
-
-  if (optind == argc) 
-    /* No command line arguments were provided.  Filter stdin.  */
-    {
-      dyn_string_t mangled = dyn_string_new (3);
-      char *s;
-
-      /* Read all of input.  */
-      while (!feof (stdin))
-	{
-	  char c;
-
-	  /* Pile characters into mangled until we hit one that can't
-	     occur in a mangled name.  */
-	  c = getchar ();
-	  while (!feof (stdin) && is_mangled_char (c))
-	    {
-	      dyn_string_append_char (mangled, c);
-	      if (feof (stdin))
-		break;
-	      c = getchar ();
-	    }
-
-	  if (dyn_string_length (mangled) > 0)
-	    {
-#ifdef IN_GLIBCPP_V3
-	      s = __cxa_demangle (dyn_string_buf (mangled), NULL, NULL, NULL);
-#else
-	      s = cplus_demangle_v3 (dyn_string_buf (mangled), options);
-#endif
-
-	      if (s != NULL)
-		{
-		  fputs (s, stdout);
-		  free (s);
-		}
-	      else
-		{
-		  /* It might not have been a mangled name.  Print the
-		     original text.  */
-		  fputs (dyn_string_buf (mangled), stdout);
-		}
-
-	      dyn_string_clear (mangled);
-	    }
-
-	  /* If we haven't hit EOF yet, we've read one character that
-	     can't occur in a mangled name, so print it out.  */
-	  if (!feof (stdin))
-	    putchar (c);
-	}
-
-      dyn_string_delete (mangled);
-    }
-  else
-    /* Demangle command line arguments.  */
-    {
-      /* Loop over command line arguments.  */
-      for (i = optind; i < argc; ++i)
-	{
-	  char *s;
-#ifdef IN_GLIBCPP_V3
-	  int status;
-#endif
-
-	  /* Attempt to demangle.  */
-#ifdef IN_GLIBCPP_V3
-	  s = __cxa_demangle (argv[i], NULL, NULL, &status);
-#else
-	  s = cplus_demangle_v3 (argv[i], options);
-#endif
-
-	  /* If it worked, print the demangled name.  */
-	  if (s != NULL)
-	    {
-	      printf ("%s\n", s);
-	      free (s);
-	    }
-	  else
-	    {
-#ifdef IN_GLIBCPP_V3
-	      fprintf (stderr, "Failed: %s (status %d)\n", argv[i], status);
-#else
-	      fprintf (stderr, "Failed: %s\n", argv[i]);
-#endif
-	    }
-	}
-    }
-
-  return 0;
-}
-
-#endif /* STANDALONE_DEMANGLER */
Index: GNU/binutils/create-2.28-libiberty-bugfixes-patch/binutils-2.28-new/libiberty/strndup.c
===================================================================
--- GNU/binutils/create-2.28-libiberty-bugfixes-patch/binutils-2.28-new/libiberty/strndup.c	(revision 257)
+++ GNU/binutils/create-2.28-libiberty-bugfixes-patch/binutils-2.28-new/libiberty/strndup.c	(nonexistent)
@@ -1,52 +0,0 @@
-/* Implement the strndup function.
-   Copyright (C) 2005 Free Software Foundation, Inc.
-   Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA.  */
-
-/*
-
-@deftypefn Extension char* strndup (const char *@var{s}, size_t @var{n})
-
-Returns a pointer to a copy of @var{s} with at most @var{n} characters
-in memory obtained from @code{malloc}, or @code{NULL} if insufficient
-memory was available.  The result is always NUL terminated.
-
-@end deftypefn
-
-*/
-
-#include "ansidecl.h"
-#include <stddef.h>
-
-extern size_t	strnlen (const char *s, size_t maxlen);
-extern PTR	malloc (size_t);
-extern PTR	memcpy (PTR, const PTR, size_t);
-
-char *
-strndup (const char *s, size_t n)
-{
-  char *result;
-  size_t len = strnlen (s, n);
-
-  result = (char *) malloc (len + 1);
-  if (!result)
-    return 0;
-
-  result[len] = '\0';
-  return (char *) memcpy (result, s, len);
-}
Index: GNU/binutils/create-2.28-libiberty-bugfixes-patch/binutils-2.28-new/libiberty/xstrndup.c
===================================================================
--- GNU/binutils/create-2.28-libiberty-bugfixes-patch/binutils-2.28-new/libiberty/xstrndup.c	(revision 257)
+++ GNU/binutils/create-2.28-libiberty-bugfixes-patch/binutils-2.28-new/libiberty/xstrndup.c	(nonexistent)
@@ -1,57 +0,0 @@
-/* Implement the xstrndup function.
-   Copyright (C) 2005 Free Software Foundation, Inc.
-   Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA.  */
-
-/*
-
-@deftypefn Replacement char* xstrndup (const char *@var{s}, size_t @var{n})
-
-Returns a pointer to a copy of @var{s} with at most @var{n} characters
-without fail, using @code{xmalloc} to obtain memory.  The result is
-always NUL terminated.
-
-@end deftypefn
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <sys/types.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-# ifdef HAVE_STRINGS_H
-#  include <strings.h>
-# endif
-#endif
-#include "ansidecl.h"
-#include "libiberty.h"
-
-char *
-xstrndup (const char *s, size_t n)
-{
-  char *result;
-  size_t len = strnlen (s, n);
-
-  result = XNEWVEC (char, len + 1);
-
-  result[len] = '\0';
-  return (char *) memcpy (result, s, len);
-}
Index: GNU/binutils/create-2.28-no-config-check-patch/file.list
===================================================================
--- GNU/binutils/create-2.28-no-config-check-patch/file.list	(revision 257)
+++ GNU/binutils/create-2.28-no-config-check-patch/file.list	(nonexistent)
@@ -1,2 +0,0 @@
-binutils-2.28/bfd/bfd-in.h
-binutils-2.28/bfd/bfd-in2.h
Index: GNU/binutils/create-2.28-no-config-check-patch/create.patch.sh
===================================================================
--- GNU/binutils/create-2.28-no-config-check-patch/create.patch.sh	(revision 257)
+++ GNU/binutils/create-2.28-no-config-check-patch/create.patch.sh	(nonexistent)
@@ -1,15 +0,0 @@
-#!/bin/sh
-
-VERSION=2.28
-
-tar --files-from=file.list -xjvf ../binutils-$VERSION.tar.bz2
-mv binutils-$VERSION binutils-$VERSION-orig
-
-cp -rf ./binutils-$VERSION-new ./binutils-$VERSION
-
-diff -b --unified -Nr  binutils-$VERSION-orig  binutils-$VERSION > binutils-$VERSION-no-config-check.patch
-
-mv binutils-$VERSION-no-config-check.patch ../patches
-
-rm -rf ./binutils-$VERSION
-rm -rf ./binutils-$VERSION-orig

Property changes on: GNU/binutils/create-2.28-no-config-check-patch/create.patch.sh
___________________________________________________________________
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: GNU/binutils/create-2.28-no-config-check-patch/binutils-2.28-new/bfd/bfd-in.h
===================================================================
--- GNU/binutils/create-2.28-no-config-check-patch/binutils-2.28-new/bfd/bfd-in.h	(revision 257)
+++ GNU/binutils/create-2.28-no-config-check-patch/binutils-2.28-new/bfd/bfd-in.h	(nonexistent)
@@ -1,1046 +0,0 @@
-/* Main header file for the bfd library -- portable access to object files.
-
-   Copyright (C) 1990-2017 Free Software Foundation, Inc.
-
-   Contributed by Cygnus Support.
-
-   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.  */
-
-#ifndef __BFD_H_SEEN__
-#define __BFD_H_SEEN__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "ansidecl.h"
-#include "symcat.h"
-#include <stdarg.h>
-#include <sys/stat.h>
-
-#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
-#ifndef SABER
-/* This hack is to avoid a problem with some strict ANSI C preprocessors.
-   The problem is, "32_" is not a valid preprocessing token, and we don't
-   want extra underscores (e.g., "nlm_32_").  The XCONCAT2 macro will
-   cause the inner CONCAT2 macros to be evaluated first, producing
-   still-valid pp-tokens.  Then the final concatenation can be done.  */
-#undef CONCAT4
-#define CONCAT4(a,b,c,d) XCONCAT2(CONCAT2(a,b),CONCAT2(c,d))
-#endif
-#endif
-
-/* This is a utility macro to handle the situation where the code
-   wants to place a constant string into the code, followed by a
-   comma and then the length of the string.  Doing this by hand
-   is error prone, so using this macro is safer.  */
-#define STRING_COMMA_LEN(STR) (STR), (sizeof (STR) - 1)
-/* Unfortunately it is not possible to use the STRING_COMMA_LEN macro
-   to create the arguments to another macro, since the preprocessor
-   will mis-count the number of arguments to the outer macro (by not
-   evaluating STRING_COMMA_LEN and so missing the comma).  This is a
-   problem for example when trying to use STRING_COMMA_LEN to build
-   the arguments to the strncmp() macro.  Hence this alternative
-   definition of strncmp is provided here.
-
-   Note - these macros do NOT work if STR2 is not a constant string.  */
-#define CONST_STRNEQ(STR1,STR2) (strncmp ((STR1), (STR2), sizeof (STR2) - 1) == 0)
-  /* strcpy() can have a similar problem, but since we know we are
-     copying a constant string, we can use memcpy which will be faster
-     since there is no need to check for a NUL byte inside STR.  We
-     can also save time if we do not need to copy the terminating NUL.  */
-#define LITMEMCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2) - 1)
-#define LITSTRCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2))
-
-
-#define BFD_SUPPORTS_PLUGINS @supports_plugins@
-
-/* The word size used by BFD on the host.  This may be 64 with a 32
-   bit target if the host is 64 bit, or if other 64 bit targets have
-   been selected with --enable-targets, or if --enable-64-bit-bfd.  */
-#define BFD_ARCH_SIZE @wordsize@
-
-/* The word size of the default bfd target.  */
-#define BFD_DEFAULT_TARGET_SIZE @bfd_default_target_size@
-
-#define BFD_HOST_64BIT_LONG @BFD_HOST_64BIT_LONG@
-#define BFD_HOST_64BIT_LONG_LONG @BFD_HOST_64BIT_LONG_LONG@
-#if @BFD_HOST_64_BIT_DEFINED@
-#define BFD_HOST_64_BIT @BFD_HOST_64_BIT@
-#define BFD_HOST_U_64_BIT @BFD_HOST_U_64_BIT@
-typedef BFD_HOST_64_BIT bfd_int64_t;
-typedef BFD_HOST_U_64_BIT bfd_uint64_t;
-#endif
-
-#if BFD_ARCH_SIZE >= 64
-#define BFD64
-#endif
-
-#ifndef INLINE
-#if __GNUC__ >= 2
-#define INLINE __inline__
-#else
-#define INLINE
-#endif
-#endif
-
-/* Declaring a type wide enough to hold a host long and a host pointer.  */
-#define BFD_HOSTPTR_T	@BFD_HOSTPTR_T@
-typedef BFD_HOSTPTR_T bfd_hostptr_t;
-
-/* Forward declaration.  */
-typedef struct bfd bfd;
-
-/* Boolean type used in bfd.  Too many systems define their own
-   versions of "boolean" for us to safely typedef a "boolean" of
-   our own.  Using an enum for "bfd_boolean" has its own set of
-   problems, with strange looking casts required to avoid warnings
-   on some older compilers.  Thus we just use an int.
-
-   General rule: Functions which are bfd_boolean return TRUE on
-   success and FALSE on failure (unless they're a predicate).  */
-
-typedef int bfd_boolean;
-#undef FALSE
-#undef TRUE
-#define FALSE 0
-#define TRUE 1
-
-#ifdef BFD64
-
-#ifndef BFD_HOST_64_BIT
- #error No 64 bit integer type available
-#endif /* ! defined (BFD_HOST_64_BIT) */
-
-typedef BFD_HOST_U_64_BIT bfd_vma;
-typedef BFD_HOST_64_BIT bfd_signed_vma;
-typedef BFD_HOST_U_64_BIT bfd_size_type;
-typedef BFD_HOST_U_64_BIT symvalue;
-
-#if BFD_HOST_64BIT_LONG
-#define BFD_VMA_FMT "l"
-#elif defined (__MSVCRT__)
-#define BFD_VMA_FMT "I64"
-#else
-#define BFD_VMA_FMT "ll"
-#endif
-
-#ifndef fprintf_vma
-#define sprintf_vma(s,x) sprintf (s, "%016" BFD_VMA_FMT "x", x)
-#define fprintf_vma(f,x) fprintf (f, "%016" BFD_VMA_FMT "x", x)
-#endif
-
-#else /* not BFD64  */
-
-/* Represent a target address.  Also used as a generic unsigned type
-   which is guaranteed to be big enough to hold any arithmetic types
-   we need to deal with.  */
-typedef unsigned long bfd_vma;
-
-/* A generic signed type which is guaranteed to be big enough to hold any
-   arithmetic types we need to deal with.  Can be assumed to be compatible
-   with bfd_vma in the same way that signed and unsigned ints are compatible
-   (as parameters, in assignment, etc).  */
-typedef long bfd_signed_vma;
-
-typedef unsigned long symvalue;
-typedef unsigned long bfd_size_type;
-
-/* Print a bfd_vma x on stream s.  */
-#define BFD_VMA_FMT "l"
-#define fprintf_vma(s,x) fprintf (s, "%08" BFD_VMA_FMT "x", x)
-#define sprintf_vma(s,x) sprintf (s, "%08" BFD_VMA_FMT "x", x)
-
-#endif /* not BFD64  */
-
-#define HALF_BFD_SIZE_TYPE \
-  (((bfd_size_type) 1) << (8 * sizeof (bfd_size_type) / 2))
-
-#ifndef BFD_HOST_64_BIT
-/* Fall back on a 32 bit type.  The idea is to make these types always
-   available for function return types, but in the case that
-   BFD_HOST_64_BIT is undefined such a function should abort or
-   otherwise signal an error.  */
-typedef bfd_signed_vma bfd_int64_t;
-typedef bfd_vma bfd_uint64_t;
-#endif
-
-/* An offset into a file.  BFD always uses the largest possible offset
-   based on the build time availability of fseek, fseeko, or fseeko64.  */
-typedef @bfd_file_ptr@ file_ptr;
-typedef unsigned @bfd_file_ptr@ ufile_ptr;
-
-extern void bfd_sprintf_vma (bfd *, char *, bfd_vma);
-extern void bfd_fprintf_vma (bfd *, void *, bfd_vma);
-
-#define printf_vma(x) fprintf_vma(stdout,x)
-#define bfd_printf_vma(abfd,x) bfd_fprintf_vma (abfd,stdout,x)
-
-typedef unsigned int flagword;	/* 32 bits of flags */
-typedef unsigned char bfd_byte;
-
-/* File formats.  */
-
-typedef enum bfd_format
-{
-  bfd_unknown = 0,	/* File format is unknown.  */
-  bfd_object,		/* Linker/assembler/compiler output.  */
-  bfd_archive,		/* Object archive file.  */
-  bfd_core,		/* Core dump.  */
-  bfd_type_end		/* Marks the end; don't use it!  */
-}
-bfd_format;
-
-/* Symbols and relocation.  */
-
-/* A count of carsyms (canonical archive symbols).  */
-typedef unsigned long symindex;
-
-/* How to perform a relocation.  */
-typedef const struct reloc_howto_struct reloc_howto_type;
-
-#define BFD_NO_MORE_SYMBOLS ((symindex) ~0)
-
-/* General purpose part of a symbol X;
-   target specific parts are in libcoff.h, libaout.h, etc.  */
-
-#define bfd_get_section(x) ((x)->section)
-#define bfd_get_output_section(x) ((x)->section->output_section)
-#define bfd_set_section(x,y) ((x)->section) = (y)
-#define bfd_asymbol_base(x) ((x)->section->vma)
-#define bfd_asymbol_value(x) (bfd_asymbol_base(x) + (x)->value)
-#define bfd_asymbol_name(x) ((x)->name)
-/*Perhaps future: #define bfd_asymbol_bfd(x) ((x)->section->owner)*/
-#define bfd_asymbol_bfd(x) ((x)->the_bfd)
-#define bfd_asymbol_flavour(x)			\
-  (((x)->flags & BSF_SYNTHETIC) != 0		\
-   ? bfd_target_unknown_flavour			\
-   : bfd_asymbol_bfd (x)->xvec->flavour)
-
-/* A canonical archive symbol.  */
-/* This is a type pun with struct ranlib on purpose!  */
-typedef struct carsym
-{
-  char *name;
-  file_ptr file_offset;	/* Look here to find the file.  */
-}
-carsym;			/* To make these you call a carsymogen.  */
-
-/* Used in generating armaps (archive tables of contents).
-   Perhaps just a forward definition would do?  */
-struct orl 			/* Output ranlib.  */
-{
-  char **name;		/* Symbol name.  */
-  union
-  {
-    file_ptr pos;
-    bfd *abfd;
-  } u;			/* bfd* or file position.  */
-  int namidx;		/* Index into string table.  */
-};
-
-/* Linenumber stuff.  */
-typedef struct lineno_cache_entry
-{
-  unsigned int line_number;	/* Linenumber from start of function.  */
-  union
-  {
-    struct bfd_symbol *sym;	/* Function name.  */
-    bfd_vma offset;	    		/* Offset into section.  */
-  } u;
-}
-alent;
-
-/* Object and core file sections.  */
-typedef struct bfd_section *sec_ptr;
-
-#define	align_power(addr, align)	\
-  (((addr) + ((bfd_vma) 1 << (align)) - 1) & (-((bfd_vma) 1 << (align))))
-
-/* Align an address upward to a boundary, expressed as a number of bytes.
-   E.g. align to an 8-byte boundary with argument of 8.  Take care never
-   to wrap around if the address is within boundary-1 of the end of the
-   address space.  */
-#define BFD_ALIGN(this, boundary)					  \
-  ((((bfd_vma) (this) + (boundary) - 1) >= (bfd_vma) (this))		  \
-   ? (((bfd_vma) (this) + ((boundary) - 1)) & ~ (bfd_vma) ((boundary)-1)) \
-   : ~ (bfd_vma) 0)
-
-#define bfd_get_section_name(bfd, ptr) ((void) bfd, (ptr)->name)
-#define bfd_get_section_vma(bfd, ptr) ((void) bfd, (ptr)->vma)
-#define bfd_get_section_lma(bfd, ptr) ((void) bfd, (ptr)->lma)
-#define bfd_get_section_alignment(bfd, ptr) ((void) bfd, \
-					     (ptr)->alignment_power)
-#define bfd_section_name(bfd, ptr) ((ptr)->name)
-#define bfd_section_size(bfd, ptr) ((ptr)->size)
-#define bfd_get_section_size(ptr) ((ptr)->size)
-#define bfd_section_vma(bfd, ptr) ((ptr)->vma)
-#define bfd_section_lma(bfd, ptr) ((ptr)->lma)
-#define bfd_section_alignment(bfd, ptr) ((ptr)->alignment_power)
-#define bfd_get_section_flags(bfd, ptr) ((void) bfd, (ptr)->flags)
-#define bfd_get_section_userdata(bfd, ptr) ((void) bfd, (ptr)->userdata)
-
-#define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0)
-
-#define bfd_get_section_limit_octets(bfd, sec)			\
-  ((bfd)->direction != write_direction && (sec)->rawsize != 0	\
-   ? (sec)->rawsize : (sec)->size)
-
-/* Find the address one past the end of SEC.  */
-#define bfd_get_section_limit(bfd, sec) \
-  (bfd_get_section_limit_octets(bfd, sec) / bfd_octets_per_byte (bfd))
-
-/* Return TRUE if input section SEC has been discarded.  */
-#define discarded_section(sec)				\
-  (!bfd_is_abs_section (sec)					\
-   && bfd_is_abs_section ((sec)->output_section)		\
-   && (sec)->sec_info_type != SEC_INFO_TYPE_MERGE		\
-   && (sec)->sec_info_type != SEC_INFO_TYPE_JUST_SYMS)
-
-typedef enum bfd_print_symbol
-{
-  bfd_print_symbol_name,
-  bfd_print_symbol_more,
-  bfd_print_symbol_all
-} bfd_print_symbol_type;
-
-/* Information about a symbol that nm needs.  */
-
-typedef struct _symbol_info
-{
-  symvalue value;
-  char type;
-  const char *name;            /* Symbol name.  */
-  unsigned char stab_type;     /* Stab type.  */
-  char stab_other;             /* Stab other.  */
-  short stab_desc;             /* Stab desc.  */
-  const char *stab_name;       /* String for stab type.  */
-} symbol_info;
-
-/* Get the name of a stabs type code.  */
-
-extern const char *bfd_get_stab_name (int);
-
-/* Hash table routines.  There is no way to free up a hash table.  */
-
-/* An element in the hash table.  Most uses will actually use a larger
-   structure, and an instance of this will be the first field.  */
-
-struct bfd_hash_entry
-{
-  /* Next entry for this hash code.  */
-  struct bfd_hash_entry *next;
-  /* String being hashed.  */
-  const char *string;
-  /* Hash code.  This is the full hash code, not the index into the
-     table.  */
-  unsigned long hash;
-};
-
-/* A hash table.  */
-
-struct bfd_hash_table
-{
-  /* The hash array.  */
-  struct bfd_hash_entry **table;
-  /* A function used to create new elements in the hash table.  The
-     first entry is itself a pointer to an element.  When this
-     function is first invoked, this pointer will be NULL.  However,
-     having the pointer permits a hierarchy of method functions to be
-     built each of which calls the function in the superclass.  Thus
-     each function should be written to allocate a new block of memory
-     only if the argument is NULL.  */
-  struct bfd_hash_entry *(*newfunc)
-    (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
-   /* An objalloc for this hash table.  This is a struct objalloc *,
-     but we use void * to avoid requiring the inclusion of objalloc.h.  */
-  void *memory;
-  /* The number of slots in the hash table.  */
-  unsigned int size;
-  /* The number of entries in the hash table.  */
-  unsigned int count;
-  /* The size of elements.  */
-  unsigned int entsize;
-  /* If non-zero, don't grow the hash table.  */
-  unsigned int frozen:1;
-};
-
-/* Initialize a hash table.  */
-extern bfd_boolean bfd_hash_table_init
-  (struct bfd_hash_table *,
-   struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
-			       struct bfd_hash_table *,
-			       const char *),
-   unsigned int);
-
-/* Initialize a hash table specifying a size.  */
-extern bfd_boolean bfd_hash_table_init_n
-  (struct bfd_hash_table *,
-   struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
-			       struct bfd_hash_table *,
-			       const char *),
-   unsigned int, unsigned int);
-
-/* Free up a hash table.  */
-extern void bfd_hash_table_free
-  (struct bfd_hash_table *);
-
-/* Look up a string in a hash table.  If CREATE is TRUE, a new entry
-   will be created for this string if one does not already exist.  The
-   COPY argument must be TRUE if this routine should copy the string
-   into newly allocated memory when adding an entry.  */
-extern struct bfd_hash_entry *bfd_hash_lookup
-  (struct bfd_hash_table *, const char *, bfd_boolean create,
-   bfd_boolean copy);
-
-/* Insert an entry in a hash table.  */
-extern struct bfd_hash_entry *bfd_hash_insert
-  (struct bfd_hash_table *, const char *, unsigned long);
-
-/* Rename an entry in a hash table.  */
-extern void bfd_hash_rename
-  (struct bfd_hash_table *, const char *, struct bfd_hash_entry *);
-
-/* Replace an entry in a hash table.  */
-extern void bfd_hash_replace
-  (struct bfd_hash_table *, struct bfd_hash_entry *old,
-   struct bfd_hash_entry *nw);
-
-/* Base method for creating a hash table entry.  */
-extern struct bfd_hash_entry *bfd_hash_newfunc
-  (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
-
-/* Grab some space for a hash table entry.  */
-extern void *bfd_hash_allocate
-  (struct bfd_hash_table *, unsigned int);
-
-/* Traverse a hash table in a random order, calling a function on each
-   element.  If the function returns FALSE, the traversal stops.  The
-   INFO argument is passed to the function.  */
-extern void bfd_hash_traverse
-  (struct bfd_hash_table *,
-   bfd_boolean (*) (struct bfd_hash_entry *, void *),
-   void *info);
-
-/* Allows the default size of a hash table to be configured. New hash
-   tables allocated using bfd_hash_table_init will be created with
-   this size.  */
-extern unsigned long bfd_hash_set_default_size (unsigned long);
-
-/* Types of compressed DWARF debug sections.  We currently support
-   zlib.  */
-enum compressed_debug_section_type
-{
-  COMPRESS_DEBUG_NONE = 0,
-  COMPRESS_DEBUG = 1 << 0,
-  COMPRESS_DEBUG_GNU_ZLIB = COMPRESS_DEBUG | 1 << 1,
-  COMPRESS_DEBUG_GABI_ZLIB = COMPRESS_DEBUG | 1 << 2
-};
-
-/* This structure is used to keep track of stabs in sections
-   information while linking.  */
-
-struct stab_info
-{
-  /* A hash table used to hold stabs strings.  */
-  struct bfd_strtab_hash *strings;
-  /* The header file hash table.  */
-  struct bfd_hash_table includes;
-  /* The first .stabstr section.  */
-  struct bfd_section *stabstr;
-};
-
-#define COFF_SWAP_TABLE (void *) &bfd_coff_std_swap_table
-
-/* User program access to BFD facilities.  */
-
-/* Direct I/O routines, for programs which know more about the object
-   file than BFD does.  Use higher level routines if possible.  */
-
-extern bfd_size_type bfd_bread (void *, bfd_size_type, bfd *);
-extern bfd_size_type bfd_bwrite (const void *, bfd_size_type, bfd *);
-extern int bfd_seek (bfd *, file_ptr, int);
-extern file_ptr bfd_tell (bfd *);
-extern int bfd_flush (bfd *);
-extern int bfd_stat (bfd *, struct stat *);
-
-/* Deprecated old routines.  */
-#if __GNUC__
-#define bfd_read(BUF, ELTSIZE, NITEMS, ABFD)				\
-  (warn_deprecated ("bfd_read", __FILE__, __LINE__, __FUNCTION__),	\
-   bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
-#define bfd_write(BUF, ELTSIZE, NITEMS, ABFD)				\
-  (warn_deprecated ("bfd_write", __FILE__, __LINE__, __FUNCTION__),	\
-   bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
-#else
-#define bfd_read(BUF, ELTSIZE, NITEMS, ABFD)				\
-  (warn_deprecated ("bfd_read", (const char *) 0, 0, (const char *) 0), \
-   bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
-#define bfd_write(BUF, ELTSIZE, NITEMS, ABFD)				\
-  (warn_deprecated ("bfd_write", (const char *) 0, 0, (const char *) 0),\
-   bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
-#endif
-extern void warn_deprecated (const char *, const char *, int, const char *);
-
-/* Cast from const char * to char * so that caller can assign to
-   a char * without a warning.  */
-#define bfd_get_filename(abfd) ((char *) (abfd)->filename)
-#define bfd_get_cacheable(abfd) ((abfd)->cacheable)
-#define bfd_get_format(abfd) ((abfd)->format)
-#define bfd_get_target(abfd) ((abfd)->xvec->name)
-#define bfd_get_flavour(abfd) ((abfd)->xvec->flavour)
-#define bfd_family_coff(abfd) \
-  (bfd_get_flavour (abfd) == bfd_target_coff_flavour || \
-   bfd_get_flavour (abfd) == bfd_target_xcoff_flavour)
-#define bfd_big_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_BIG)
-#define bfd_little_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_LITTLE)
-#define bfd_header_big_endian(abfd) \
-  ((abfd)->xvec->header_byteorder == BFD_ENDIAN_BIG)
-#define bfd_header_little_endian(abfd) \
-  ((abfd)->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
-#define bfd_get_file_flags(abfd) ((abfd)->flags)
-#define bfd_applicable_file_flags(abfd) ((abfd)->xvec->object_flags)
-#define bfd_applicable_section_flags(abfd) ((abfd)->xvec->section_flags)
-#define bfd_has_map(abfd) ((abfd)->has_armap)
-#define bfd_is_thin_archive(abfd) ((abfd)->is_thin_archive)
-
-#define bfd_valid_reloc_types(abfd) ((abfd)->xvec->valid_reloc_types)
-#define bfd_usrdata(abfd) ((abfd)->usrdata)
-
-#define bfd_get_start_address(abfd) ((abfd)->start_address)
-#define bfd_get_symcount(abfd) ((abfd)->symcount)
-#define bfd_get_outsymbols(abfd) ((abfd)->outsymbols)
-#define bfd_count_sections(abfd) ((abfd)->section_count)
-
-#define bfd_get_dynamic_symcount(abfd) ((abfd)->dynsymcount)
-
-#define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char)
-
-extern bfd_boolean bfd_cache_close
-  (bfd *abfd);
-/* NB: This declaration should match the autogenerated one in libbfd.h.  */
-
-extern bfd_boolean bfd_cache_close_all (void);
-
-extern bfd_boolean bfd_record_phdr
-  (bfd *, unsigned long, bfd_boolean, flagword, bfd_boolean, bfd_vma,
-   bfd_boolean, bfd_boolean, unsigned int, struct bfd_section **);
-
-/* Byte swapping routines.  */
-
-bfd_uint64_t bfd_getb64 (const void *);
-bfd_uint64_t bfd_getl64 (const void *);
-bfd_int64_t bfd_getb_signed_64 (const void *);
-bfd_int64_t bfd_getl_signed_64 (const void *);
-bfd_vma bfd_getb32 (const void *);
-bfd_vma bfd_getl32 (const void *);
-bfd_signed_vma bfd_getb_signed_32 (const void *);
-bfd_signed_vma bfd_getl_signed_32 (const void *);
-bfd_vma bfd_getb16 (const void *);
-bfd_vma bfd_getl16 (const void *);
-bfd_signed_vma bfd_getb_signed_16 (const void *);
-bfd_signed_vma bfd_getl_signed_16 (const void *);
-void bfd_putb64 (bfd_uint64_t, void *);
-void bfd_putl64 (bfd_uint64_t, void *);
-void bfd_putb32 (bfd_vma, void *);
-void bfd_putl32 (bfd_vma, void *);
-void bfd_putb16 (bfd_vma, void *);
-void bfd_putl16 (bfd_vma, void *);
-
-/* Byte swapping routines which take size and endiannes as arguments.  */
-
-bfd_uint64_t bfd_get_bits (const void *, int, bfd_boolean);
-void bfd_put_bits (bfd_uint64_t, void *, int, bfd_boolean);
-
-#if defined(__STDC__) || defined(ALMOST_STDC)
-struct ecoff_debug_info;
-struct ecoff_debug_swap;
-struct ecoff_extr;
-struct bfd_symbol;
-struct bfd_link_info;
-struct bfd_link_hash_entry;
-struct bfd_section_already_linked;
-struct bfd_elf_version_tree;
-#endif
-
-extern bfd_boolean bfd_section_already_linked_table_init (void);
-extern void bfd_section_already_linked_table_free (void);
-extern bfd_boolean _bfd_handle_already_linked
-  (struct bfd_section *, struct bfd_section_already_linked *,
-   struct bfd_link_info *);
-
-/* Externally visible ECOFF routines.  */
-
-extern bfd_vma bfd_ecoff_get_gp_value
-  (bfd * abfd);
-extern bfd_boolean bfd_ecoff_set_gp_value
-  (bfd *abfd, bfd_vma gp_value);
-extern bfd_boolean bfd_ecoff_set_regmasks
-  (bfd *abfd, unsigned long gprmask, unsigned long fprmask,
-   unsigned long *cprmask);
-extern void *bfd_ecoff_debug_init
-  (bfd *output_bfd, struct ecoff_debug_info *output_debug,
-   const struct ecoff_debug_swap *output_swap, struct bfd_link_info *);
-extern void bfd_ecoff_debug_free
-  (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
-   const struct ecoff_debug_swap *output_swap, struct bfd_link_info *);
-extern bfd_boolean bfd_ecoff_debug_accumulate
-  (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
-   const struct ecoff_debug_swap *output_swap, bfd *input_bfd,
-   struct ecoff_debug_info *input_debug,
-   const struct ecoff_debug_swap *input_swap, struct bfd_link_info *);
-extern bfd_boolean bfd_ecoff_debug_accumulate_other
-  (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
-   const struct ecoff_debug_swap *output_swap, bfd *input_bfd,
-   struct bfd_link_info *);
-extern bfd_boolean bfd_ecoff_debug_externals
-  (bfd *abfd, struct ecoff_debug_info *debug,
-   const struct ecoff_debug_swap *swap, bfd_boolean relocatable,
-   bfd_boolean (*get_extr) (struct bfd_symbol *, struct ecoff_extr *),
-   void (*set_index) (struct bfd_symbol *, bfd_size_type));
-extern bfd_boolean bfd_ecoff_debug_one_external
-  (bfd *abfd, struct ecoff_debug_info *debug,
-   const struct ecoff_debug_swap *swap, const char *name,
-   struct ecoff_extr *esym);
-extern bfd_size_type bfd_ecoff_debug_size
-  (bfd *abfd, struct ecoff_debug_info *debug,
-   const struct ecoff_debug_swap *swap);
-extern bfd_boolean bfd_ecoff_write_debug
-  (bfd *abfd, struct ecoff_debug_info *debug,
-   const struct ecoff_debug_swap *swap, file_ptr where);
-extern bfd_boolean bfd_ecoff_write_accumulated_debug
-  (void *handle, bfd *abfd, struct ecoff_debug_info *debug,
-   const struct ecoff_debug_swap *swap,
-   struct bfd_link_info *info, file_ptr where);
-
-/* Externally visible ELF routines.  */
-
-struct bfd_link_needed_list
-{
-  struct bfd_link_needed_list *next;
-  bfd *by;
-  const char *name;
-};
-
-enum dynamic_lib_link_class {
-  DYN_NORMAL = 0,
-  DYN_AS_NEEDED = 1,
-  DYN_DT_NEEDED = 2,
-  DYN_NO_ADD_NEEDED = 4,
-  DYN_NO_NEEDED = 8
-};
-
-enum notice_asneeded_action {
-  notice_as_needed,
-  notice_not_needed,
-  notice_needed
-};
-
-extern bfd_boolean bfd_elf_record_link_assignment
-  (bfd *, struct bfd_link_info *, const char *, bfd_boolean,
-   bfd_boolean);
-extern struct bfd_link_needed_list *bfd_elf_get_needed_list
-  (bfd *, struct bfd_link_info *);
-extern bfd_boolean bfd_elf_get_bfd_needed_list
-  (bfd *, struct bfd_link_needed_list **);
-extern bfd_boolean bfd_elf_stack_segment_size (bfd *, struct bfd_link_info *,
-					       const char *, bfd_vma);
-extern bfd_boolean bfd_elf_size_dynamic_sections
-  (bfd *, const char *, const char *, const char *, const char *, const char *,
-   const char * const *, struct bfd_link_info *, struct bfd_section **);
-extern bfd_boolean bfd_elf_size_dynsym_hash_dynstr
-  (bfd *, struct bfd_link_info *);
-extern void bfd_elf_set_dt_needed_name
-  (bfd *, const char *);
-extern const char *bfd_elf_get_dt_soname
-  (bfd *);
-extern void bfd_elf_set_dyn_lib_class
-  (bfd *, enum dynamic_lib_link_class);
-extern int bfd_elf_get_dyn_lib_class
-  (bfd *);
-extern struct bfd_link_needed_list *bfd_elf_get_runpath_list
-  (bfd *, struct bfd_link_info *);
-extern int bfd_elf_discard_info
-  (bfd *, struct bfd_link_info *);
-extern unsigned int _bfd_elf_default_action_discarded
-  (struct bfd_section *);
-
-/* Return an upper bound on the number of bytes required to store a
-   copy of ABFD's program header table entries.  Return -1 if an error
-   occurs; bfd_get_error will return an appropriate code.  */
-extern long bfd_get_elf_phdr_upper_bound
-  (bfd *abfd);
-
-/* Copy ABFD's program header table entries to *PHDRS.  The entries
-   will be stored as an array of Elf_Internal_Phdr structures, as
-   defined in include/elf/internal.h.  To find out how large the
-   buffer needs to be, call bfd_get_elf_phdr_upper_bound.
-
-   Return the number of program header table entries read, or -1 if an
-   error occurs; bfd_get_error will return an appropriate code.  */
-extern int bfd_get_elf_phdrs
-  (bfd *abfd, void *phdrs);
-
-/* Create a new BFD as if by bfd_openr.  Rather than opening a file,
-   reconstruct an ELF file by reading the segments out of remote
-   memory based on the ELF file header at EHDR_VMA and the ELF program
-   headers it points to.  If non-zero, SIZE is the known extent of the
-   object.  If not null, *LOADBASEP is filled in with the difference
-   between the VMAs from which the segments were read, and the VMAs
-   the file headers (and hence BFD's idea of each section's VMA) put
-   them at.
-
-   The function TARGET_READ_MEMORY is called to copy LEN bytes from
-   the remote memory at target address VMA into the local buffer at
-   MYADDR; it should return zero on success or an `errno' code on
-   failure.  TEMPL must be a BFD for a target with the word size and
-   byte order found in the remote memory.  */
-extern bfd *bfd_elf_bfd_from_remote_memory
-  (bfd *templ, bfd_vma ehdr_vma, bfd_size_type size, bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr,
-			      bfd_size_type len));
-
-extern struct bfd_section *_bfd_elf_tls_setup
-  (bfd *, struct bfd_link_info *);
-
-extern struct bfd_section *
-_bfd_nearby_section (bfd *, struct bfd_section *, bfd_vma);
-
-extern void _bfd_fix_excluded_sec_syms
-  (bfd *, struct bfd_link_info *);
-
-extern unsigned bfd_m68k_mach_to_features (int);
-
-extern int bfd_m68k_features_to_mach (unsigned);
-
-extern bfd_boolean bfd_m68k_elf32_create_embedded_relocs
-  (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *,
-   char **);
-
-extern void bfd_elf_m68k_set_target_options (struct bfd_link_info *, int);
-
-extern bfd_boolean bfd_bfin_elf32_create_embedded_relocs
-  (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *,
-   char **);
-
-extern bfd_boolean bfd_cr16_elf32_create_embedded_relocs
-  (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *,
-   char **);
-
-/* SunOS shared library support routines for the linker.  */
-
-extern struct bfd_link_needed_list *bfd_sunos_get_needed_list
-  (bfd *, struct bfd_link_info *);
-extern bfd_boolean bfd_sunos_record_link_assignment
-  (bfd *, struct bfd_link_info *, const char *);
-extern bfd_boolean bfd_sunos_size_dynamic_sections
-  (bfd *, struct bfd_link_info *, struct bfd_section **,
-   struct bfd_section **, struct bfd_section **);
-
-/* Linux shared library support routines for the linker.  */
-
-extern bfd_boolean bfd_i386linux_size_dynamic_sections
-  (bfd *, struct bfd_link_info *);
-extern bfd_boolean bfd_m68klinux_size_dynamic_sections
-  (bfd *, struct bfd_link_info *);
-extern bfd_boolean bfd_sparclinux_size_dynamic_sections
-  (bfd *, struct bfd_link_info *);
-
-/* mmap hacks */
-
-struct _bfd_window_internal;
-typedef struct _bfd_window_internal bfd_window_internal;
-
-typedef struct _bfd_window
-{
-  /* What the user asked for.  */
-  void *data;
-  bfd_size_type size;
-  /* The actual window used by BFD.  Small user-requested read-only
-     regions sharing a page may share a single window into the object
-     file.  Read-write versions shouldn't until I've fixed things to
-     keep track of which portions have been claimed by the
-     application; don't want to give the same region back when the
-     application wants two writable copies!  */
-  struct _bfd_window_internal *i;
-}
-bfd_window;
-
-extern void bfd_init_window
-  (bfd_window *);
-extern void bfd_free_window
-  (bfd_window *);
-extern bfd_boolean bfd_get_file_window
-  (bfd *, file_ptr, bfd_size_type, bfd_window *, bfd_boolean);
-
-/* XCOFF support routines for the linker.  */
-
-extern bfd_boolean bfd_xcoff_split_import_path
-  (bfd *, const char *, const char **, const char **);
-extern bfd_boolean bfd_xcoff_set_archive_import_path
-  (struct bfd_link_info *, bfd *, const char *);
-extern bfd_boolean bfd_xcoff_link_record_set
-  (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_size_type);
-extern bfd_boolean bfd_xcoff_import_symbol
-  (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_vma,
-   const char *, const char *, const char *, unsigned int);
-extern bfd_boolean bfd_xcoff_export_symbol
-  (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *);
-extern bfd_boolean bfd_xcoff_link_count_reloc
-  (bfd *, struct bfd_link_info *, const char *);
-extern bfd_boolean bfd_xcoff_record_link_assignment
-  (bfd *, struct bfd_link_info *, const char *);
-extern bfd_boolean bfd_xcoff_size_dynamic_sections
-  (bfd *, struct bfd_link_info *, const char *, const char *,
-   unsigned long, unsigned long, unsigned long, bfd_boolean,
-   int, bfd_boolean, unsigned int, struct bfd_section **, bfd_boolean);
-extern bfd_boolean bfd_xcoff_link_generate_rtinit
-  (bfd *, const char *, const char *, bfd_boolean);
-
-/* XCOFF support routines for ar.  */
-extern bfd_boolean bfd_xcoff_ar_archive_set_magic
-  (bfd *, char *);
-
-/* Externally visible COFF routines.  */
-
-#if defined(__STDC__) || defined(ALMOST_STDC)
-struct internal_syment;
-union internal_auxent;
-#endif
-
-extern bfd_boolean bfd_coff_set_symbol_class
-  (bfd *, struct bfd_symbol *, unsigned int);
-
-extern bfd_boolean bfd_m68k_coff_create_embedded_relocs
-  (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, char **);
-
-/* ARM VFP11 erratum workaround support.  */
-typedef enum
-{
-  BFD_ARM_VFP11_FIX_DEFAULT,
-  BFD_ARM_VFP11_FIX_NONE,
-  BFD_ARM_VFP11_FIX_SCALAR,
-  BFD_ARM_VFP11_FIX_VECTOR
-} bfd_arm_vfp11_fix;
-
-extern void bfd_elf32_arm_init_maps
-  (bfd *);
-
-extern void bfd_elf32_arm_set_vfp11_fix
-  (bfd *, struct bfd_link_info *);
-
-extern void bfd_elf32_arm_set_cortex_a8_fix
-  (bfd *, struct bfd_link_info *);
-
-extern bfd_boolean bfd_elf32_arm_vfp11_erratum_scan
-  (bfd *, struct bfd_link_info *);
-
-extern void bfd_elf32_arm_vfp11_fix_veneer_locations
-  (bfd *, struct bfd_link_info *);
-
-/* ARM STM STM32L4XX erratum workaround support.  */
-typedef enum
-{
-  BFD_ARM_STM32L4XX_FIX_NONE,
-  BFD_ARM_STM32L4XX_FIX_DEFAULT,
-  BFD_ARM_STM32L4XX_FIX_ALL
-} bfd_arm_stm32l4xx_fix;
-
-extern void bfd_elf32_arm_set_stm32l4xx_fix
-  (bfd *, struct bfd_link_info *);
-
-extern bfd_boolean bfd_elf32_arm_stm32l4xx_erratum_scan
-  (bfd *, struct bfd_link_info *);
-
-extern void bfd_elf32_arm_stm32l4xx_fix_veneer_locations
-  (bfd *, struct bfd_link_info *);
-
-/* ARM Interworking support.  Called from linker.  */
-extern bfd_boolean bfd_arm_allocate_interworking_sections
-  (struct bfd_link_info *);
-
-extern bfd_boolean bfd_arm_process_before_allocation
-  (bfd *, struct bfd_link_info *, int);
-
-extern bfd_boolean bfd_arm_get_bfd_for_interworking
-  (bfd *, struct bfd_link_info *);
-
-/* PE ARM Interworking support.  Called from linker.  */
-extern bfd_boolean bfd_arm_pe_allocate_interworking_sections
-  (struct bfd_link_info *);
-
-extern bfd_boolean bfd_arm_pe_process_before_allocation
-  (bfd *, struct bfd_link_info *, int);
-
-extern bfd_boolean bfd_arm_pe_get_bfd_for_interworking
-  (bfd *, struct bfd_link_info *);
-
-/* ELF ARM Interworking support.  Called from linker.  */
-extern bfd_boolean bfd_elf32_arm_allocate_interworking_sections
-  (struct bfd_link_info *);
-
-extern bfd_boolean bfd_elf32_arm_process_before_allocation
-  (bfd *, struct bfd_link_info *);
-
-struct elf32_arm_params {
-  char *thumb_entry_symbol;
-  int byteswap_code;
-  int target1_is_rel;
-  char * target2_type;
-  int fix_v4bx;
-  int use_blx;
-  bfd_arm_vfp11_fix vfp11_denorm_fix;
-  bfd_arm_stm32l4xx_fix stm32l4xx_fix;
-  int no_enum_size_warning;
-  int no_wchar_size_warning;
-  int pic_veneer;
-  int fix_cortex_a8;
-  int fix_arm1176;
-  int merge_exidx_entries;
-  int cmse_implib;
-  bfd *in_implib_bfd;
-};
-
-void bfd_elf32_arm_set_target_params
-  (bfd *, struct bfd_link_info *, struct elf32_arm_params *);
-
-extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking
-  (bfd *, struct bfd_link_info *);
-
-extern bfd_boolean bfd_elf32_arm_add_glue_sections_to_bfd
-  (bfd *, struct bfd_link_info *);
-
-extern void bfd_elf32_arm_keep_private_stub_output_sections
-  (struct bfd_link_info *);
-
-/* ELF ARM mapping symbol support.  */
-#define BFD_ARM_SPECIAL_SYM_TYPE_MAP	(1 << 0)
-#define BFD_ARM_SPECIAL_SYM_TYPE_TAG	(1 << 1)
-#define BFD_ARM_SPECIAL_SYM_TYPE_OTHER  (1 << 2)
-#define BFD_ARM_SPECIAL_SYM_TYPE_ANY	(~0)
-
-extern bfd_boolean bfd_is_arm_special_symbol_name
-  (const char *, int);
-
-extern void bfd_elf32_arm_set_byteswap_code
-  (struct bfd_link_info *, int);
-
-extern void bfd_elf32_arm_use_long_plt (void);
-
-/* ARM Note section processing.  */
-extern bfd_boolean bfd_arm_merge_machines
-  (bfd *, bfd *);
-
-extern bfd_boolean bfd_arm_update_notes
-  (bfd *, const char *);
-
-extern unsigned int bfd_arm_get_mach_from_notes
-  (bfd *, const char *);
-
-/* ARM stub generation support.  Called from the linker.  */
-extern int elf32_arm_setup_section_lists
-  (bfd *, struct bfd_link_info *);
-extern void elf32_arm_next_input_section
-  (struct bfd_link_info *, struct bfd_section *);
-extern bfd_boolean elf32_arm_size_stubs
-  (bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
-   struct bfd_section * (*) (const char *, struct bfd_section *,
-			     struct bfd_section *, unsigned int),
-   void (*) (void));
-extern bfd_boolean elf32_arm_build_stubs
-  (struct bfd_link_info *);
-
-/* ARM unwind section editing support.  */
-extern bfd_boolean elf32_arm_fix_exidx_coverage
-(struct bfd_section **, unsigned int, struct bfd_link_info *, bfd_boolean);
-
-/* C6x unwind section editing support.  */
-extern bfd_boolean elf32_tic6x_fix_exidx_coverage
-(struct bfd_section **, unsigned int, struct bfd_link_info *, bfd_boolean);
-
-extern void bfd_elf64_aarch64_init_maps
-  (bfd *);
-
-extern void bfd_elf32_aarch64_init_maps
-  (bfd *);
-
-extern void bfd_elf64_aarch64_set_options
-  (bfd *, struct bfd_link_info *, int, int, int, int, int, int);
-
-extern void bfd_elf32_aarch64_set_options
-  (bfd *, struct bfd_link_info *, int, int, int, int, int, int);
-
-/* ELF AArch64 mapping symbol support.  */
-#define BFD_AARCH64_SPECIAL_SYM_TYPE_MAP	(1 << 0)
-#define BFD_AARCH64_SPECIAL_SYM_TYPE_TAG	(1 << 1)
-#define BFD_AARCH64_SPECIAL_SYM_TYPE_OTHER	(1 << 2)
-#define BFD_AARCH64_SPECIAL_SYM_TYPE_ANY	(~0)
-extern bfd_boolean bfd_is_aarch64_special_symbol_name
-  (const char * name, int type);
-
-/* AArch64 stub generation support for ELF64.  Called from the linker.  */
-extern int elf64_aarch64_setup_section_lists
-  (bfd *, struct bfd_link_info *);
-extern void elf64_aarch64_next_input_section
-  (struct bfd_link_info *, struct bfd_section *);
-extern bfd_boolean elf64_aarch64_size_stubs
-  (bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
-   struct bfd_section * (*) (const char *, struct bfd_section *),
-   void (*) (void));
-extern bfd_boolean elf64_aarch64_build_stubs
-  (struct bfd_link_info *);
-/* AArch64 stub generation support for ELF32.  Called from the linker.  */
-extern int elf32_aarch64_setup_section_lists
-  (bfd *, struct bfd_link_info *);
-extern void elf32_aarch64_next_input_section
-  (struct bfd_link_info *, struct bfd_section *);
-extern bfd_boolean elf32_aarch64_size_stubs
-  (bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
-   struct bfd_section * (*) (const char *, struct bfd_section *),
-   void (*) (void));
-extern bfd_boolean elf32_aarch64_build_stubs
-  (struct bfd_link_info *);
-
-
-/* TI COFF load page support.  */
-extern void bfd_ticoff_set_section_load_page
-  (struct bfd_section *, int);
-
-extern int bfd_ticoff_get_section_load_page
-  (struct bfd_section *);
-
-/* H8/300 functions.  */
-extern bfd_vma bfd_h8300_pad_address
-  (bfd *, bfd_vma);
-
-/* IA64 Itanium code generation.  Called from linker.  */
-extern void bfd_elf32_ia64_after_parse
-  (int);
-
-extern void bfd_elf64_ia64_after_parse
-  (int);
-
-/* V850 Note manipulation routines.  */
-extern bfd_boolean v850_elf_create_sections
-  (struct bfd_link_info *);
-
-extern bfd_boolean v850_elf_set_note
-  (bfd *, unsigned int, unsigned int);
-
-/* MIPS ABI flags data access.  For the disassembler.  */
-struct elf_internal_abiflags_v0;
-extern struct elf_internal_abiflags_v0 *bfd_mips_elf_get_abiflags (bfd *);
Index: GNU/binutils/create-2.28-no-config-check-patch/binutils-2.28-new/bfd/bfd-in2.h
===================================================================
--- GNU/binutils/create-2.28-no-config-check-patch/binutils-2.28-new/bfd/bfd-in2.h	(revision 257)
+++ GNU/binutils/create-2.28-no-config-check-patch/binutils-2.28-new/bfd/bfd-in2.h	(nonexistent)
@@ -1,7709 +0,0 @@
-/* DO NOT EDIT!  -*- buffer-read-only: t -*-  This file is automatically 
-   generated from "bfd-in.h", "init.c", "opncls.c", "libbfd.c", 
-   "bfdio.c", "bfdwin.c", "section.c", "archures.c", "reloc.c", 
-   "syms.c", "bfd.c", "archive.c", "corefile.c", "targets.c", "format.c", 
-   "linker.c", "simple.c" and "compress.c".
-   Run "make headers" in your build bfd/ to regenerate.  */
-
-/* Main header file for the bfd library -- portable access to object files.
-
-   Copyright (C) 1990-2017 Free Software Foundation, Inc.
-
-   Contributed by Cygnus Support.
-
-   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.  */
-
-#ifndef __BFD_H_SEEN__
-#define __BFD_H_SEEN__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "ansidecl.h"
-#include "symcat.h"
-#include <stdarg.h>
-#include <sys/stat.h>
-
-#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
-#ifndef SABER
-/* This hack is to avoid a problem with some strict ANSI C preprocessors.
-   The problem is, "32_" is not a valid preprocessing token, and we don't
-   want extra underscores (e.g., "nlm_32_").  The XCONCAT2 macro will
-   cause the inner CONCAT2 macros to be evaluated first, producing
-   still-valid pp-tokens.  Then the final concatenation can be done.  */
-#undef CONCAT4
-#define CONCAT4(a,b,c,d) XCONCAT2(CONCAT2(a,b),CONCAT2(c,d))
-#endif
-#endif
-
-/* This is a utility macro to handle the situation where the code
-   wants to place a constant string into the code, followed by a
-   comma and then the length of the string.  Doing this by hand
-   is error prone, so using this macro is safer.  */
-#define STRING_COMMA_LEN(STR) (STR), (sizeof (STR) - 1)
-/* Unfortunately it is not possible to use the STRING_COMMA_LEN macro
-   to create the arguments to another macro, since the preprocessor
-   will mis-count the number of arguments to the outer macro (by not
-   evaluating STRING_COMMA_LEN and so missing the comma).  This is a
-   problem for example when trying to use STRING_COMMA_LEN to build
-   the arguments to the strncmp() macro.  Hence this alternative
-   definition of strncmp is provided here.
-
-   Note - these macros do NOT work if STR2 is not a constant string.  */
-#define CONST_STRNEQ(STR1,STR2) (strncmp ((STR1), (STR2), sizeof (STR2) - 1) == 0)
-  /* strcpy() can have a similar problem, but since we know we are
-     copying a constant string, we can use memcpy which will be faster
-     since there is no need to check for a NUL byte inside STR.  We
-     can also save time if we do not need to copy the terminating NUL.  */
-#define LITMEMCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2) - 1)
-#define LITSTRCPY(DEST,STR2) memcpy ((DEST), (STR2), sizeof (STR2))
-
-
-#define BFD_SUPPORTS_PLUGINS @supports_plugins@
-
-/* The word size used by BFD on the host.  This may be 64 with a 32
-   bit target if the host is 64 bit, or if other 64 bit targets have
-   been selected with --enable-targets, or if --enable-64-bit-bfd.  */
-#define BFD_ARCH_SIZE @wordsize@
-
-/* The word size of the default bfd target.  */
-#define BFD_DEFAULT_TARGET_SIZE @bfd_default_target_size@
-
-#define BFD_HOST_64BIT_LONG @BFD_HOST_64BIT_LONG@
-#define BFD_HOST_64BIT_LONG_LONG @BFD_HOST_64BIT_LONG_LONG@
-#if @BFD_HOST_64_BIT_DEFINED@
-#define BFD_HOST_64_BIT @BFD_HOST_64_BIT@
-#define BFD_HOST_U_64_BIT @BFD_HOST_U_64_BIT@
-typedef BFD_HOST_64_BIT bfd_int64_t;
-typedef BFD_HOST_U_64_BIT bfd_uint64_t;
-#endif
-
-#if BFD_ARCH_SIZE >= 64
-#define BFD64
-#endif
-
-#ifndef INLINE
-#if __GNUC__ >= 2
-#define INLINE __inline__
-#else
-#define INLINE
-#endif
-#endif
-
-/* Declaring a type wide enough to hold a host long and a host pointer.  */
-#define BFD_HOSTPTR_T	@BFD_HOSTPTR_T@
-typedef BFD_HOSTPTR_T bfd_hostptr_t;
-
-/* Forward declaration.  */
-typedef struct bfd bfd;
-
-/* Boolean type used in bfd.  Too many systems define their own
-   versions of "boolean" for us to safely typedef a "boolean" of
-   our own.  Using an enum for "bfd_boolean" has its own set of
-   problems, with strange looking casts required to avoid warnings
-   on some older compilers.  Thus we just use an int.
-
-   General rule: Functions which are bfd_boolean return TRUE on
-   success and FALSE on failure (unless they're a predicate).  */
-
-typedef int bfd_boolean;
-#undef FALSE
-#undef TRUE
-#define FALSE 0
-#define TRUE 1
-
-#ifdef BFD64
-
-#ifndef BFD_HOST_64_BIT
- #error No 64 bit integer type available
-#endif /* ! defined (BFD_HOST_64_BIT) */
-
-typedef BFD_HOST_U_64_BIT bfd_vma;
-typedef BFD_HOST_64_BIT bfd_signed_vma;
-typedef BFD_HOST_U_64_BIT bfd_size_type;
-typedef BFD_HOST_U_64_BIT symvalue;
-
-#if BFD_HOST_64BIT_LONG
-#define BFD_VMA_FMT "l"
-#elif defined (__MSVCRT__)
-#define BFD_VMA_FMT "I64"
-#else
-#define BFD_VMA_FMT "ll"
-#endif
-
-#ifndef fprintf_vma
-#define sprintf_vma(s,x) sprintf (s, "%016" BFD_VMA_FMT "x", x)
-#define fprintf_vma(f,x) fprintf (f, "%016" BFD_VMA_FMT "x", x)
-#endif
-
-#else /* not BFD64  */
-
-/* Represent a target address.  Also used as a generic unsigned type
-   which is guaranteed to be big enough to hold any arithmetic types
-   we need to deal with.  */
-typedef unsigned long bfd_vma;
-
-/* A generic signed type which is guaranteed to be big enough to hold any
-   arithmetic types we need to deal with.  Can be assumed to be compatible
-   with bfd_vma in the same way that signed and unsigned ints are compatible
-   (as parameters, in assignment, etc).  */
-typedef long bfd_signed_vma;
-
-typedef unsigned long symvalue;
-typedef unsigned long bfd_size_type;
-
-/* Print a bfd_vma x on stream s.  */
-#define BFD_VMA_FMT "l"
-#define fprintf_vma(s,x) fprintf (s, "%08" BFD_VMA_FMT "x", x)
-#define sprintf_vma(s,x) sprintf (s, "%08" BFD_VMA_FMT "x", x)
-
-#endif /* not BFD64  */
-
-#define HALF_BFD_SIZE_TYPE \
-  (((bfd_size_type) 1) << (8 * sizeof (bfd_size_type) / 2))
-
-#ifndef BFD_HOST_64_BIT
-/* Fall back on a 32 bit type.  The idea is to make these types always
-   available for function return types, but in the case that
-   BFD_HOST_64_BIT is undefined such a function should abort or
-   otherwise signal an error.  */
-typedef bfd_signed_vma bfd_int64_t;
-typedef bfd_vma bfd_uint64_t;
-#endif
-
-/* An offset into a file.  BFD always uses the largest possible offset
-   based on the build time availability of fseek, fseeko, or fseeko64.  */
-typedef @bfd_file_ptr@ file_ptr;
-typedef unsigned @bfd_file_ptr@ ufile_ptr;
-
-extern void bfd_sprintf_vma (bfd *, char *, bfd_vma);
-extern void bfd_fprintf_vma (bfd *, void *, bfd_vma);
-
-#define printf_vma(x) fprintf_vma(stdout,x)
-#define bfd_printf_vma(abfd,x) bfd_fprintf_vma (abfd,stdout,x)
-
-typedef unsigned int flagword;	/* 32 bits of flags */
-typedef unsigned char bfd_byte;
-
-/* File formats.  */
-
-typedef enum bfd_format
-{
-  bfd_unknown = 0,	/* File format is unknown.  */
-  bfd_object,		/* Linker/assembler/compiler output.  */
-  bfd_archive,		/* Object archive file.  */
-  bfd_core,		/* Core dump.  */
-  bfd_type_end		/* Marks the end; don't use it!  */
-}
-bfd_format;
-
-/* Symbols and relocation.  */
-
-/* A count of carsyms (canonical archive symbols).  */
-typedef unsigned long symindex;
-
-/* How to perform a relocation.  */
-typedef const struct reloc_howto_struct reloc_howto_type;
-
-#define BFD_NO_MORE_SYMBOLS ((symindex) ~0)
-
-/* General purpose part of a symbol X;
-   target specific parts are in libcoff.h, libaout.h, etc.  */
-
-#define bfd_get_section(x) ((x)->section)
-#define bfd_get_output_section(x) ((x)->section->output_section)
-#define bfd_set_section(x,y) ((x)->section) = (y)
-#define bfd_asymbol_base(x) ((x)->section->vma)
-#define bfd_asymbol_value(x) (bfd_asymbol_base(x) + (x)->value)
-#define bfd_asymbol_name(x) ((x)->name)
-/*Perhaps future: #define bfd_asymbol_bfd(x) ((x)->section->owner)*/
-#define bfd_asymbol_bfd(x) ((x)->the_bfd)
-#define bfd_asymbol_flavour(x)			\
-  (((x)->flags & BSF_SYNTHETIC) != 0		\
-   ? bfd_target_unknown_flavour			\
-   : bfd_asymbol_bfd (x)->xvec->flavour)
-
-/* A canonical archive symbol.  */
-/* This is a type pun with struct ranlib on purpose!  */
-typedef struct carsym
-{
-  char *name;
-  file_ptr file_offset;	/* Look here to find the file.  */
-}
-carsym;			/* To make these you call a carsymogen.  */
-
-/* Used in generating armaps (archive tables of contents).
-   Perhaps just a forward definition would do?  */
-struct orl 			/* Output ranlib.  */
-{
-  char **name;		/* Symbol name.  */
-  union
-  {
-    file_ptr pos;
-    bfd *abfd;
-  } u;			/* bfd* or file position.  */
-  int namidx;		/* Index into string table.  */
-};
-
-/* Linenumber stuff.  */
-typedef struct lineno_cache_entry
-{
-  unsigned int line_number;	/* Linenumber from start of function.  */
-  union
-  {
-    struct bfd_symbol *sym;	/* Function name.  */
-    bfd_vma offset;	    		/* Offset into section.  */
-  } u;
-}
-alent;
-
-/* Object and core file sections.  */
-typedef struct bfd_section *sec_ptr;
-
-#define	align_power(addr, align)	\
-  (((addr) + ((bfd_vma) 1 << (align)) - 1) & (-((bfd_vma) 1 << (align))))
-
-/* Align an address upward to a boundary, expressed as a number of bytes.
-   E.g. align to an 8-byte boundary with argument of 8.  Take care never
-   to wrap around if the address is within boundary-1 of the end of the
-   address space.  */
-#define BFD_ALIGN(this, boundary)					  \
-  ((((bfd_vma) (this) + (boundary) - 1) >= (bfd_vma) (this))		  \
-   ? (((bfd_vma) (this) + ((boundary) - 1)) & ~ (bfd_vma) ((boundary)-1)) \
-   : ~ (bfd_vma) 0)
-
-#define bfd_get_section_name(bfd, ptr) ((void) bfd, (ptr)->name)
-#define bfd_get_section_vma(bfd, ptr) ((void) bfd, (ptr)->vma)
-#define bfd_get_section_lma(bfd, ptr) ((void) bfd, (ptr)->lma)
-#define bfd_get_section_alignment(bfd, ptr) ((void) bfd, \
-					     (ptr)->alignment_power)
-#define bfd_section_name(bfd, ptr) ((ptr)->name)
-#define bfd_section_size(bfd, ptr) ((ptr)->size)
-#define bfd_get_section_size(ptr) ((ptr)->size)
-#define bfd_section_vma(bfd, ptr) ((ptr)->vma)
-#define bfd_section_lma(bfd, ptr) ((ptr)->lma)
-#define bfd_section_alignment(bfd, ptr) ((ptr)->alignment_power)
-#define bfd_get_section_flags(bfd, ptr) ((void) bfd, (ptr)->flags)
-#define bfd_get_section_userdata(bfd, ptr) ((void) bfd, (ptr)->userdata)
-
-#define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0)
-
-#define bfd_get_section_limit_octets(bfd, sec)			\
-  ((bfd)->direction != write_direction && (sec)->rawsize != 0	\
-   ? (sec)->rawsize : (sec)->size)
-
-/* Find the address one past the end of SEC.  */
-#define bfd_get_section_limit(bfd, sec) \
-  (bfd_get_section_limit_octets(bfd, sec) / bfd_octets_per_byte (bfd))
-
-/* Return TRUE if input section SEC has been discarded.  */
-#define discarded_section(sec)				\
-  (!bfd_is_abs_section (sec)					\
-   && bfd_is_abs_section ((sec)->output_section)		\
-   && (sec)->sec_info_type != SEC_INFO_TYPE_MERGE		\
-   && (sec)->sec_info_type != SEC_INFO_TYPE_JUST_SYMS)
-
-typedef enum bfd_print_symbol
-{
-  bfd_print_symbol_name,
-  bfd_print_symbol_more,
-  bfd_print_symbol_all
-} bfd_print_symbol_type;
-
-/* Information about a symbol that nm needs.  */
-
-typedef struct _symbol_info
-{
-  symvalue value;
-  char type;
-  const char *name;            /* Symbol name.  */
-  unsigned char stab_type;     /* Stab type.  */
-  char stab_other;             /* Stab other.  */
-  short stab_desc;             /* Stab desc.  */
-  const char *stab_name;       /* String for stab type.  */
-} symbol_info;
-
-/* Get the name of a stabs type code.  */
-
-extern const char *bfd_get_stab_name (int);
-
-/* Hash table routines.  There is no way to free up a hash table.  */
-
-/* An element in the hash table.  Most uses will actually use a larger
-   structure, and an instance of this will be the first field.  */
-
-struct bfd_hash_entry
-{
-  /* Next entry for this hash code.  */
-  struct bfd_hash_entry *next;
-  /* String being hashed.  */
-  const char *string;
-  /* Hash code.  This is the full hash code, not the index into the
-     table.  */
-  unsigned long hash;
-};
-
-/* A hash table.  */
-
-struct bfd_hash_table
-{
-  /* The hash array.  */
-  struct bfd_hash_entry **table;
-  /* A function used to create new elements in the hash table.  The
-     first entry is itself a pointer to an element.  When this
-     function is first invoked, this pointer will be NULL.  However,
-     having the pointer permits a hierarchy of method functions to be
-     built each of which calls the function in the superclass.  Thus
-     each function should be written to allocate a new block of memory
-     only if the argument is NULL.  */
-  struct bfd_hash_entry *(*newfunc)
-    (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
-   /* An objalloc for this hash table.  This is a struct objalloc *,
-     but we use void * to avoid requiring the inclusion of objalloc.h.  */
-  void *memory;
-  /* The number of slots in the hash table.  */
-  unsigned int size;
-  /* The number of entries in the hash table.  */
-  unsigned int count;
-  /* The size of elements.  */
-  unsigned int entsize;
-  /* If non-zero, don't grow the hash table.  */
-  unsigned int frozen:1;
-};
-
-/* Initialize a hash table.  */
-extern bfd_boolean bfd_hash_table_init
-  (struct bfd_hash_table *,
-   struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
-			       struct bfd_hash_table *,
-			       const char *),
-   unsigned int);
-
-/* Initialize a hash table specifying a size.  */
-extern bfd_boolean bfd_hash_table_init_n
-  (struct bfd_hash_table *,
-   struct bfd_hash_entry *(*) (struct bfd_hash_entry *,
-			       struct bfd_hash_table *,
-			       const char *),
-   unsigned int, unsigned int);
-
-/* Free up a hash table.  */
-extern void bfd_hash_table_free
-  (struct bfd_hash_table *);
-
-/* Look up a string in a hash table.  If CREATE is TRUE, a new entry
-   will be created for this string if one does not already exist.  The
-   COPY argument must be TRUE if this routine should copy the string
-   into newly allocated memory when adding an entry.  */
-extern struct bfd_hash_entry *bfd_hash_lookup
-  (struct bfd_hash_table *, const char *, bfd_boolean create,
-   bfd_boolean copy);
-
-/* Insert an entry in a hash table.  */
-extern struct bfd_hash_entry *bfd_hash_insert
-  (struct bfd_hash_table *, const char *, unsigned long);
-
-/* Rename an entry in a hash table.  */
-extern void bfd_hash_rename
-  (struct bfd_hash_table *, const char *, struct bfd_hash_entry *);
-
-/* Replace an entry in a hash table.  */
-extern void bfd_hash_replace
-  (struct bfd_hash_table *, struct bfd_hash_entry *old,
-   struct bfd_hash_entry *nw);
-
-/* Base method for creating a hash table entry.  */
-extern struct bfd_hash_entry *bfd_hash_newfunc
-  (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
-
-/* Grab some space for a hash table entry.  */
-extern void *bfd_hash_allocate
-  (struct bfd_hash_table *, unsigned int);
-
-/* Traverse a hash table in a random order, calling a function on each
-   element.  If the function returns FALSE, the traversal stops.  The
-   INFO argument is passed to the function.  */
-extern void bfd_hash_traverse
-  (struct bfd_hash_table *,
-   bfd_boolean (*) (struct bfd_hash_entry *, void *),
-   void *info);
-
-/* Allows the default size of a hash table to be configured. New hash
-   tables allocated using bfd_hash_table_init will be created with
-   this size.  */
-extern unsigned long bfd_hash_set_default_size (unsigned long);
-
-/* Types of compressed DWARF debug sections.  We currently support
-   zlib.  */
-enum compressed_debug_section_type
-{
-  COMPRESS_DEBUG_NONE = 0,
-  COMPRESS_DEBUG = 1 << 0,
-  COMPRESS_DEBUG_GNU_ZLIB = COMPRESS_DEBUG | 1 << 1,
-  COMPRESS_DEBUG_GABI_ZLIB = COMPRESS_DEBUG | 1 << 2
-};
-
-/* This structure is used to keep track of stabs in sections
-   information while linking.  */
-
-struct stab_info
-{
-  /* A hash table used to hold stabs strings.  */
-  struct bfd_strtab_hash *strings;
-  /* The header file hash table.  */
-  struct bfd_hash_table includes;
-  /* The first .stabstr section.  */
-  struct bfd_section *stabstr;
-};
-
-#define COFF_SWAP_TABLE (void *) &bfd_coff_std_swap_table
-
-/* User program access to BFD facilities.  */
-
-/* Direct I/O routines, for programs which know more about the object
-   file than BFD does.  Use higher level routines if possible.  */
-
-extern bfd_size_type bfd_bread (void *, bfd_size_type, bfd *);
-extern bfd_size_type bfd_bwrite (const void *, bfd_size_type, bfd *);
-extern int bfd_seek (bfd *, file_ptr, int);
-extern file_ptr bfd_tell (bfd *);
-extern int bfd_flush (bfd *);
-extern int bfd_stat (bfd *, struct stat *);
-
-/* Deprecated old routines.  */
-#if __GNUC__
-#define bfd_read(BUF, ELTSIZE, NITEMS, ABFD)				\
-  (warn_deprecated ("bfd_read", __FILE__, __LINE__, __FUNCTION__),	\
-   bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
-#define bfd_write(BUF, ELTSIZE, NITEMS, ABFD)				\
-  (warn_deprecated ("bfd_write", __FILE__, __LINE__, __FUNCTION__),	\
-   bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
-#else
-#define bfd_read(BUF, ELTSIZE, NITEMS, ABFD)				\
-  (warn_deprecated ("bfd_read", (const char *) 0, 0, (const char *) 0), \
-   bfd_bread ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
-#define bfd_write(BUF, ELTSIZE, NITEMS, ABFD)				\
-  (warn_deprecated ("bfd_write", (const char *) 0, 0, (const char *) 0),\
-   bfd_bwrite ((BUF), (ELTSIZE) * (NITEMS), (ABFD)))
-#endif
-extern void warn_deprecated (const char *, const char *, int, const char *);
-
-/* Cast from const char * to char * so that caller can assign to
-   a char * without a warning.  */
-#define bfd_get_filename(abfd) ((char *) (abfd)->filename)
-#define bfd_get_cacheable(abfd) ((abfd)->cacheable)
-#define bfd_get_format(abfd) ((abfd)->format)
-#define bfd_get_target(abfd) ((abfd)->xvec->name)
-#define bfd_get_flavour(abfd) ((abfd)->xvec->flavour)
-#define bfd_family_coff(abfd) \
-  (bfd_get_flavour (abfd) == bfd_target_coff_flavour || \
-   bfd_get_flavour (abfd) == bfd_target_xcoff_flavour)
-#define bfd_big_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_BIG)
-#define bfd_little_endian(abfd) ((abfd)->xvec->byteorder == BFD_ENDIAN_LITTLE)
-#define bfd_header_big_endian(abfd) \
-  ((abfd)->xvec->header_byteorder == BFD_ENDIAN_BIG)
-#define bfd_header_little_endian(abfd) \
-  ((abfd)->xvec->header_byteorder == BFD_ENDIAN_LITTLE)
-#define bfd_get_file_flags(abfd) ((abfd)->flags)
-#define bfd_applicable_file_flags(abfd) ((abfd)->xvec->object_flags)
-#define bfd_applicable_section_flags(abfd) ((abfd)->xvec->section_flags)
-#define bfd_has_map(abfd) ((abfd)->has_armap)
-#define bfd_is_thin_archive(abfd) ((abfd)->is_thin_archive)
-
-#define bfd_valid_reloc_types(abfd) ((abfd)->xvec->valid_reloc_types)
-#define bfd_usrdata(abfd) ((abfd)->usrdata)
-
-#define bfd_get_start_address(abfd) ((abfd)->start_address)
-#define bfd_get_symcount(abfd) ((abfd)->symcount)
-#define bfd_get_outsymbols(abfd) ((abfd)->outsymbols)
-#define bfd_count_sections(abfd) ((abfd)->section_count)
-
-#define bfd_get_dynamic_symcount(abfd) ((abfd)->dynsymcount)
-
-#define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char)
-
-extern bfd_boolean bfd_cache_close
-  (bfd *abfd);
-/* NB: This declaration should match the autogenerated one in libbfd.h.  */
-
-extern bfd_boolean bfd_cache_close_all (void);
-
-extern bfd_boolean bfd_record_phdr
-  (bfd *, unsigned long, bfd_boolean, flagword, bfd_boolean, bfd_vma,
-   bfd_boolean, bfd_boolean, unsigned int, struct bfd_section **);
-
-/* Byte swapping routines.  */
-
-bfd_uint64_t bfd_getb64 (const void *);
-bfd_uint64_t bfd_getl64 (const void *);
-bfd_int64_t bfd_getb_signed_64 (const void *);
-bfd_int64_t bfd_getl_signed_64 (const void *);
-bfd_vma bfd_getb32 (const void *);
-bfd_vma bfd_getl32 (const void *);
-bfd_signed_vma bfd_getb_signed_32 (const void *);
-bfd_signed_vma bfd_getl_signed_32 (const void *);
-bfd_vma bfd_getb16 (const void *);
-bfd_vma bfd_getl16 (const void *);
-bfd_signed_vma bfd_getb_signed_16 (const void *);
-bfd_signed_vma bfd_getl_signed_16 (const void *);
-void bfd_putb64 (bfd_uint64_t, void *);
-void bfd_putl64 (bfd_uint64_t, void *);
-void bfd_putb32 (bfd_vma, void *);
-void bfd_putl32 (bfd_vma, void *);
-void bfd_putb16 (bfd_vma, void *);
-void bfd_putl16 (bfd_vma, void *);
-
-/* Byte swapping routines which take size and endiannes as arguments.  */
-
-bfd_uint64_t bfd_get_bits (const void *, int, bfd_boolean);
-void bfd_put_bits (bfd_uint64_t, void *, int, bfd_boolean);
-
-#if defined(__STDC__) || defined(ALMOST_STDC)
-struct ecoff_debug_info;
-struct ecoff_debug_swap;
-struct ecoff_extr;
-struct bfd_symbol;
-struct bfd_link_info;
-struct bfd_link_hash_entry;
-struct bfd_section_already_linked;
-struct bfd_elf_version_tree;
-#endif
-
-extern bfd_boolean bfd_section_already_linked_table_init (void);
-extern void bfd_section_already_linked_table_free (void);
-extern bfd_boolean _bfd_handle_already_linked
-  (struct bfd_section *, struct bfd_section_already_linked *,
-   struct bfd_link_info *);
-
-/* Externally visible ECOFF routines.  */
-
-extern bfd_vma bfd_ecoff_get_gp_value
-  (bfd * abfd);
-extern bfd_boolean bfd_ecoff_set_gp_value
-  (bfd *abfd, bfd_vma gp_value);
-extern bfd_boolean bfd_ecoff_set_regmasks
-  (bfd *abfd, unsigned long gprmask, unsigned long fprmask,
-   unsigned long *cprmask);
-extern void *bfd_ecoff_debug_init
-  (bfd *output_bfd, struct ecoff_debug_info *output_debug,
-   const struct ecoff_debug_swap *output_swap, struct bfd_link_info *);
-extern void bfd_ecoff_debug_free
-  (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
-   const struct ecoff_debug_swap *output_swap, struct bfd_link_info *);
-extern bfd_boolean bfd_ecoff_debug_accumulate
-  (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
-   const struct ecoff_debug_swap *output_swap, bfd *input_bfd,
-   struct ecoff_debug_info *input_debug,
-   const struct ecoff_debug_swap *input_swap, struct bfd_link_info *);
-extern bfd_boolean bfd_ecoff_debug_accumulate_other
-  (void *handle, bfd *output_bfd, struct ecoff_debug_info *output_debug,
-   const struct ecoff_debug_swap *output_swap, bfd *input_bfd,
-   struct bfd_link_info *);
-extern bfd_boolean bfd_ecoff_debug_externals
-  (bfd *abfd, struct ecoff_debug_info *debug,
-   const struct ecoff_debug_swap *swap, bfd_boolean relocatable,
-   bfd_boolean (*get_extr) (struct bfd_symbol *, struct ecoff_extr *),
-   void (*set_index) (struct bfd_symbol *, bfd_size_type));
-extern bfd_boolean bfd_ecoff_debug_one_external
-  (bfd *abfd, struct ecoff_debug_info *debug,
-   const struct ecoff_debug_swap *swap, const char *name,
-   struct ecoff_extr *esym);
-extern bfd_size_type bfd_ecoff_debug_size
-  (bfd *abfd, struct ecoff_debug_info *debug,
-   const struct ecoff_debug_swap *swap);
-extern bfd_boolean bfd_ecoff_write_debug
-  (bfd *abfd, struct ecoff_debug_info *debug,
-   const struct ecoff_debug_swap *swap, file_ptr where);
-extern bfd_boolean bfd_ecoff_write_accumulated_debug
-  (void *handle, bfd *abfd, struct ecoff_debug_info *debug,
-   const struct ecoff_debug_swap *swap,
-   struct bfd_link_info *info, file_ptr where);
-
-/* Externally visible ELF routines.  */
-
-struct bfd_link_needed_list
-{
-  struct bfd_link_needed_list *next;
-  bfd *by;
-  const char *name;
-};
-
-enum dynamic_lib_link_class {
-  DYN_NORMAL = 0,
-  DYN_AS_NEEDED = 1,
-  DYN_DT_NEEDED = 2,
-  DYN_NO_ADD_NEEDED = 4,
-  DYN_NO_NEEDED = 8
-};
-
-enum notice_asneeded_action {
-  notice_as_needed,
-  notice_not_needed,
-  notice_needed
-};
-
-extern bfd_boolean bfd_elf_record_link_assignment
-  (bfd *, struct bfd_link_info *, const char *, bfd_boolean,
-   bfd_boolean);
-extern struct bfd_link_needed_list *bfd_elf_get_needed_list
-  (bfd *, struct bfd_link_info *);
-extern bfd_boolean bfd_elf_get_bfd_needed_list
-  (bfd *, struct bfd_link_needed_list **);
-extern bfd_boolean bfd_elf_stack_segment_size (bfd *, struct bfd_link_info *,
-					       const char *, bfd_vma);
-extern bfd_boolean bfd_elf_size_dynamic_sections
-  (bfd *, const char *, const char *, const char *, const char *, const char *,
-   const char * const *, struct bfd_link_info *, struct bfd_section **);
-extern bfd_boolean bfd_elf_size_dynsym_hash_dynstr
-  (bfd *, struct bfd_link_info *);
-extern void bfd_elf_set_dt_needed_name
-  (bfd *, const char *);
-extern const char *bfd_elf_get_dt_soname
-  (bfd *);
-extern void bfd_elf_set_dyn_lib_class
-  (bfd *, enum dynamic_lib_link_class);
-extern int bfd_elf_get_dyn_lib_class
-  (bfd *);
-extern struct bfd_link_needed_list *bfd_elf_get_runpath_list
-  (bfd *, struct bfd_link_info *);
-extern int bfd_elf_discard_info
-  (bfd *, struct bfd_link_info *);
-extern unsigned int _bfd_elf_default_action_discarded
-  (struct bfd_section *);
-
-/* Return an upper bound on the number of bytes required to store a
-   copy of ABFD's program header table entries.  Return -1 if an error
-   occurs; bfd_get_error will return an appropriate code.  */
-extern long bfd_get_elf_phdr_upper_bound
-  (bfd *abfd);
-
-/* Copy ABFD's program header table entries to *PHDRS.  The entries
-   will be stored as an array of Elf_Internal_Phdr structures, as
-   defined in include/elf/internal.h.  To find out how large the
-   buffer needs to be, call bfd_get_elf_phdr_upper_bound.
-
-   Return the number of program header table entries read, or -1 if an
-   error occurs; bfd_get_error will return an appropriate code.  */
-extern int bfd_get_elf_phdrs
-  (bfd *abfd, void *phdrs);
-
-/* Create a new BFD as if by bfd_openr.  Rather than opening a file,
-   reconstruct an ELF file by reading the segments out of remote
-   memory based on the ELF file header at EHDR_VMA and the ELF program
-   headers it points to.  If non-zero, SIZE is the known extent of the
-   object.  If not null, *LOADBASEP is filled in with the difference
-   between the VMAs from which the segments were read, and the VMAs
-   the file headers (and hence BFD's idea of each section's VMA) put
-   them at.
-
-   The function TARGET_READ_MEMORY is called to copy LEN bytes from
-   the remote memory at target address VMA into the local buffer at
-   MYADDR; it should return zero on success or an `errno' code on
-   failure.  TEMPL must be a BFD for a target with the word size and
-   byte order found in the remote memory.  */
-extern bfd *bfd_elf_bfd_from_remote_memory
-  (bfd *templ, bfd_vma ehdr_vma, bfd_size_type size, bfd_vma *loadbasep,
-   int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr,
-			      bfd_size_type len));
-
-extern struct bfd_section *_bfd_elf_tls_setup
-  (bfd *, struct bfd_link_info *);
-
-extern struct bfd_section *
-_bfd_nearby_section (bfd *, struct bfd_section *, bfd_vma);
-
-extern void _bfd_fix_excluded_sec_syms
-  (bfd *, struct bfd_link_info *);
-
-extern unsigned bfd_m68k_mach_to_features (int);
-
-extern int bfd_m68k_features_to_mach (unsigned);
-
-extern bfd_boolean bfd_m68k_elf32_create_embedded_relocs
-  (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *,
-   char **);
-
-extern void bfd_elf_m68k_set_target_options (struct bfd_link_info *, int);
-
-extern bfd_boolean bfd_bfin_elf32_create_embedded_relocs
-  (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *,
-   char **);
-
-extern bfd_boolean bfd_cr16_elf32_create_embedded_relocs
-  (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *,
-   char **);
-
-/* SunOS shared library support routines for the linker.  */
-
-extern struct bfd_link_needed_list *bfd_sunos_get_needed_list
-  (bfd *, struct bfd_link_info *);
-extern bfd_boolean bfd_sunos_record_link_assignment
-  (bfd *, struct bfd_link_info *, const char *);
-extern bfd_boolean bfd_sunos_size_dynamic_sections
-  (bfd *, struct bfd_link_info *, struct bfd_section **,
-   struct bfd_section **, struct bfd_section **);
-
-/* Linux shared library support routines for the linker.  */
-
-extern bfd_boolean bfd_i386linux_size_dynamic_sections
-  (bfd *, struct bfd_link_info *);
-extern bfd_boolean bfd_m68klinux_size_dynamic_sections
-  (bfd *, struct bfd_link_info *);
-extern bfd_boolean bfd_sparclinux_size_dynamic_sections
-  (bfd *, struct bfd_link_info *);
-
-/* mmap hacks */
-
-struct _bfd_window_internal;
-typedef struct _bfd_window_internal bfd_window_internal;
-
-typedef struct _bfd_window
-{
-  /* What the user asked for.  */
-  void *data;
-  bfd_size_type size;
-  /* The actual window used by BFD.  Small user-requested read-only
-     regions sharing a page may share a single window into the object
-     file.  Read-write versions shouldn't until I've fixed things to
-     keep track of which portions have been claimed by the
-     application; don't want to give the same region back when the
-     application wants two writable copies!  */
-  struct _bfd_window_internal *i;
-}
-bfd_window;
-
-extern void bfd_init_window
-  (bfd_window *);
-extern void bfd_free_window
-  (bfd_window *);
-extern bfd_boolean bfd_get_file_window
-  (bfd *, file_ptr, bfd_size_type, bfd_window *, bfd_boolean);
-
-/* XCOFF support routines for the linker.  */
-
-extern bfd_boolean bfd_xcoff_split_import_path
-  (bfd *, const char *, const char **, const char **);
-extern bfd_boolean bfd_xcoff_set_archive_import_path
-  (struct bfd_link_info *, bfd *, const char *);
-extern bfd_boolean bfd_xcoff_link_record_set
-  (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_size_type);
-extern bfd_boolean bfd_xcoff_import_symbol
-  (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_vma,
-   const char *, const char *, const char *, unsigned int);
-extern bfd_boolean bfd_xcoff_export_symbol
-  (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *);
-extern bfd_boolean bfd_xcoff_link_count_reloc
-  (bfd *, struct bfd_link_info *, const char *);
-extern bfd_boolean bfd_xcoff_record_link_assignment
-  (bfd *, struct bfd_link_info *, const char *);
-extern bfd_boolean bfd_xcoff_size_dynamic_sections
-  (bfd *, struct bfd_link_info *, const char *, const char *,
-   unsigned long, unsigned long, unsigned long, bfd_boolean,
-   int, bfd_boolean, unsigned int, struct bfd_section **, bfd_boolean);
-extern bfd_boolean bfd_xcoff_link_generate_rtinit
-  (bfd *, const char *, const char *, bfd_boolean);
-
-/* XCOFF support routines for ar.  */
-extern bfd_boolean bfd_xcoff_ar_archive_set_magic
-  (bfd *, char *);
-
-/* Externally visible COFF routines.  */
-
-#if defined(__STDC__) || defined(ALMOST_STDC)
-struct internal_syment;
-union internal_auxent;
-#endif
-
-extern bfd_boolean bfd_coff_set_symbol_class
-  (bfd *, struct bfd_symbol *, unsigned int);
-
-extern bfd_boolean bfd_m68k_coff_create_embedded_relocs
-  (bfd *, struct bfd_link_info *, struct bfd_section *, struct bfd_section *, char **);
-
-/* ARM VFP11 erratum workaround support.  */
-typedef enum
-{
-  BFD_ARM_VFP11_FIX_DEFAULT,
-  BFD_ARM_VFP11_FIX_NONE,
-  BFD_ARM_VFP11_FIX_SCALAR,
-  BFD_ARM_VFP11_FIX_VECTOR
-} bfd_arm_vfp11_fix;
-
-extern void bfd_elf32_arm_init_maps
-  (bfd *);
-
-extern void bfd_elf32_arm_set_vfp11_fix
-  (bfd *, struct bfd_link_info *);
-
-extern void bfd_elf32_arm_set_cortex_a8_fix
-  (bfd *, struct bfd_link_info *);
-
-extern bfd_boolean bfd_elf32_arm_vfp11_erratum_scan
-  (bfd *, struct bfd_link_info *);
-
-extern void bfd_elf32_arm_vfp11_fix_veneer_locations
-  (bfd *, struct bfd_link_info *);
-
-/* ARM STM STM32L4XX erratum workaround support.  */
-typedef enum
-{
-  BFD_ARM_STM32L4XX_FIX_NONE,
-  BFD_ARM_STM32L4XX_FIX_DEFAULT,
-  BFD_ARM_STM32L4XX_FIX_ALL
-} bfd_arm_stm32l4xx_fix;
-
-extern void bfd_elf32_arm_set_stm32l4xx_fix
-  (bfd *, struct bfd_link_info *);
-
-extern bfd_boolean bfd_elf32_arm_stm32l4xx_erratum_scan
-  (bfd *, struct bfd_link_info *);
-
-extern void bfd_elf32_arm_stm32l4xx_fix_veneer_locations
-  (bfd *, struct bfd_link_info *);
-
-/* ARM Interworking support.  Called from linker.  */
-extern bfd_boolean bfd_arm_allocate_interworking_sections
-  (struct bfd_link_info *);
-
-extern bfd_boolean bfd_arm_process_before_allocation
-  (bfd *, struct bfd_link_info *, int);
-
-extern bfd_boolean bfd_arm_get_bfd_for_interworking
-  (bfd *, struct bfd_link_info *);
-
-/* PE ARM Interworking support.  Called from linker.  */
-extern bfd_boolean bfd_arm_pe_allocate_interworking_sections
-  (struct bfd_link_info *);
-
-extern bfd_boolean bfd_arm_pe_process_before_allocation
-  (bfd *, struct bfd_link_info *, int);
-
-extern bfd_boolean bfd_arm_pe_get_bfd_for_interworking
-  (bfd *, struct bfd_link_info *);
-
-/* ELF ARM Interworking support.  Called from linker.  */
-extern bfd_boolean bfd_elf32_arm_allocate_interworking_sections
-  (struct bfd_link_info *);
-
-extern bfd_boolean bfd_elf32_arm_process_before_allocation
-  (bfd *, struct bfd_link_info *);
-
-struct elf32_arm_params {
-  char *thumb_entry_symbol;
-  int byteswap_code;
-  int target1_is_rel;
-  char * target2_type;
-  int fix_v4bx;
-  int use_blx;
-  bfd_arm_vfp11_fix vfp11_denorm_fix;
-  bfd_arm_stm32l4xx_fix stm32l4xx_fix;
-  int no_enum_size_warning;
-  int no_wchar_size_warning;
-  int pic_veneer;
-  int fix_cortex_a8;
-  int fix_arm1176;
-  int merge_exidx_entries;
-  int cmse_implib;
-  bfd *in_implib_bfd;
-};
-
-void bfd_elf32_arm_set_target_params
-  (bfd *, struct bfd_link_info *, struct elf32_arm_params *);
-
-extern bfd_boolean bfd_elf32_arm_get_bfd_for_interworking
-  (bfd *, struct bfd_link_info *);
-
-extern bfd_boolean bfd_elf32_arm_add_glue_sections_to_bfd
-  (bfd *, struct bfd_link_info *);
-
-extern void bfd_elf32_arm_keep_private_stub_output_sections
-  (struct bfd_link_info *);
-
-/* ELF ARM mapping symbol support.  */
-#define BFD_ARM_SPECIAL_SYM_TYPE_MAP	(1 << 0)
-#define BFD_ARM_SPECIAL_SYM_TYPE_TAG	(1 << 1)
-#define BFD_ARM_SPECIAL_SYM_TYPE_OTHER  (1 << 2)
-#define BFD_ARM_SPECIAL_SYM_TYPE_ANY	(~0)
-
-extern bfd_boolean bfd_is_arm_special_symbol_name
-  (const char *, int);
-
-extern void bfd_elf32_arm_set_byteswap_code
-  (struct bfd_link_info *, int);
-
-extern void bfd_elf32_arm_use_long_plt (void);
-
-/* ARM Note section processing.  */
-extern bfd_boolean bfd_arm_merge_machines
-  (bfd *, bfd *);
-
-extern bfd_boolean bfd_arm_update_notes
-  (bfd *, const char *);
-
-extern unsigned int bfd_arm_get_mach_from_notes
-  (bfd *, const char *);
-
-/* ARM stub generation support.  Called from the linker.  */
-extern int elf32_arm_setup_section_lists
-  (bfd *, struct bfd_link_info *);
-extern void elf32_arm_next_input_section
-  (struct bfd_link_info *, struct bfd_section *);
-extern bfd_boolean elf32_arm_size_stubs
-  (bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
-   struct bfd_section * (*) (const char *, struct bfd_section *,
-			     struct bfd_section *, unsigned int),
-   void (*) (void));
-extern bfd_boolean elf32_arm_build_stubs
-  (struct bfd_link_info *);
-
-/* ARM unwind section editing support.  */
-extern bfd_boolean elf32_arm_fix_exidx_coverage
-(struct bfd_section **, unsigned int, struct bfd_link_info *, bfd_boolean);
-
-/* C6x unwind section editing support.  */
-extern bfd_boolean elf32_tic6x_fix_exidx_coverage
-(struct bfd_section **, unsigned int, struct bfd_link_info *, bfd_boolean);
-
-extern void bfd_elf64_aarch64_init_maps
-  (bfd *);
-
-extern void bfd_elf32_aarch64_init_maps
-  (bfd *);
-
-extern void bfd_elf64_aarch64_set_options
-  (bfd *, struct bfd_link_info *, int, int, int, int, int, int);
-
-extern void bfd_elf32_aarch64_set_options
-  (bfd *, struct bfd_link_info *, int, int, int, int, int, int);
-
-/* ELF AArch64 mapping symbol support.  */
-#define BFD_AARCH64_SPECIAL_SYM_TYPE_MAP	(1 << 0)
-#define BFD_AARCH64_SPECIAL_SYM_TYPE_TAG	(1 << 1)
-#define BFD_AARCH64_SPECIAL_SYM_TYPE_OTHER	(1 << 2)
-#define BFD_AARCH64_SPECIAL_SYM_TYPE_ANY	(~0)
-extern bfd_boolean bfd_is_aarch64_special_symbol_name
-  (const char * name, int type);
-
-/* AArch64 stub generation support for ELF64.  Called from the linker.  */
-extern int elf64_aarch64_setup_section_lists
-  (bfd *, struct bfd_link_info *);
-extern void elf64_aarch64_next_input_section
-  (struct bfd_link_info *, struct bfd_section *);
-extern bfd_boolean elf64_aarch64_size_stubs
-  (bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
-   struct bfd_section * (*) (const char *, struct bfd_section *),
-   void (*) (void));
-extern bfd_boolean elf64_aarch64_build_stubs
-  (struct bfd_link_info *);
-/* AArch64 stub generation support for ELF32.  Called from the linker.  */
-extern int elf32_aarch64_setup_section_lists
-  (bfd *, struct bfd_link_info *);
-extern void elf32_aarch64_next_input_section
-  (struct bfd_link_info *, struct bfd_section *);
-extern bfd_boolean elf32_aarch64_size_stubs
-  (bfd *, bfd *, struct bfd_link_info *, bfd_signed_vma,
-   struct bfd_section * (*) (const char *, struct bfd_section *),
-   void (*) (void));
-extern bfd_boolean elf32_aarch64_build_stubs
-  (struct bfd_link_info *);
-
-
-/* TI COFF load page support.  */
-extern void bfd_ticoff_set_section_load_page
-  (struct bfd_section *, int);
-
-extern int bfd_ticoff_get_section_load_page
-  (struct bfd_section *);
-
-/* H8/300 functions.  */
-extern bfd_vma bfd_h8300_pad_address
-  (bfd *, bfd_vma);
-
-/* IA64 Itanium code generation.  Called from linker.  */
-extern void bfd_elf32_ia64_after_parse
-  (int);
-
-extern void bfd_elf64_ia64_after_parse
-  (int);
-
-/* V850 Note manipulation routines.  */
-extern bfd_boolean v850_elf_create_sections
-  (struct bfd_link_info *);
-
-extern bfd_boolean v850_elf_set_note
-  (bfd *, unsigned int, unsigned int);
-
-/* MIPS ABI flags data access.  For the disassembler.  */
-struct elf_internal_abiflags_v0;
-extern struct elf_internal_abiflags_v0 *bfd_mips_elf_get_abiflags (bfd *);
-/* Extracted from init.c.  */
-void bfd_init (void);
-
-/* Extracted from opncls.c.  */
-/* Set to N to open the next N BFDs using an alternate id space.  */
-extern unsigned int bfd_use_reserved_id;
-bfd *bfd_fopen (const char *filename, const char *target,
-    const char *mode, int fd);
-
-bfd *bfd_openr (const char *filename, const char *target);
-
-bfd *bfd_fdopenr (const char *filename, const char *target, int fd);
-
-bfd *bfd_openstreamr (const char * filename, const char * target, void * stream);
-
-bfd *bfd_openr_iovec (const char *filename, const char *target,
-    void *(*open_func) (struct bfd *nbfd,
-    void *open_closure),
-    void *open_closure,
-    file_ptr (*pread_func) (struct bfd *nbfd,
-    void *stream,
-    void *buf,
-    file_ptr nbytes,
-    file_ptr offset),
-    int (*close_func) (struct bfd *nbfd,
-    void *stream),
-    int (*stat_func) (struct bfd *abfd,
-    void *stream,
-    struct stat *sb));
-
-bfd *bfd_openw (const char *filename, const char *target);
-
-bfd_boolean bfd_close (bfd *abfd);
-
-bfd_boolean bfd_close_all_done (bfd *);
-
-bfd *bfd_create (const char *filename, bfd *templ);
-
-bfd_boolean bfd_make_writable (bfd *abfd);
-
-bfd_boolean bfd_make_readable (bfd *abfd);
-
-void *bfd_alloc (bfd *abfd, bfd_size_type wanted);
-
-void *bfd_zalloc (bfd *abfd, bfd_size_type wanted);
-
-unsigned long bfd_calc_gnu_debuglink_crc32
-   (unsigned long crc, const unsigned char *buf, bfd_size_type len);
-
-char *bfd_get_debug_link_info (bfd *abfd, unsigned long *crc32_out);
-
-char *bfd_get_alt_debug_link_info (bfd * abfd,
-    bfd_size_type *buildid_len,
-    bfd_byte **buildid_out);
-
-char *bfd_follow_gnu_debuglink (bfd *abfd, const char *dir);
-
-char *bfd_follow_gnu_debugaltlink (bfd *abfd, const char *dir);
-
-struct bfd_section *bfd_create_gnu_debuglink_section
-   (bfd *abfd, const char *filename);
-
-bfd_boolean bfd_fill_in_gnu_debuglink_section
-   (bfd *abfd, struct bfd_section *sect, const char *filename);
-
-char *bfd_follow_build_id_debuglink (bfd *abfd, const char *dir);
-
-/* Extracted from libbfd.c.  */
-
-/* Byte swapping macros for user section data.  */
-
-#define bfd_put_8(abfd, val, ptr) \
-  ((void) (*((unsigned char *) (ptr)) = (val) & 0xff))
-#define bfd_put_signed_8 \
-  bfd_put_8
-#define bfd_get_8(abfd, ptr) \
-  (*(const unsigned char *) (ptr) & 0xff)
-#define bfd_get_signed_8(abfd, ptr) \
-  (((*(const unsigned char *) (ptr) & 0xff) ^ 0x80) - 0x80)
-
-#define bfd_put_16(abfd, val, ptr) \
-  BFD_SEND (abfd, bfd_putx16, ((val),(ptr)))
-#define bfd_put_signed_16 \
-  bfd_put_16
-#define bfd_get_16(abfd, ptr) \
-  BFD_SEND (abfd, bfd_getx16, (ptr))
-#define bfd_get_signed_16(abfd, ptr) \
-  BFD_SEND (abfd, bfd_getx_signed_16, (ptr))
-
-#define bfd_put_32(abfd, val, ptr) \
-  BFD_SEND (abfd, bfd_putx32, ((val),(ptr)))
-#define bfd_put_signed_32 \
-  bfd_put_32
-#define bfd_get_32(abfd, ptr) \
-  BFD_SEND (abfd, bfd_getx32, (ptr))
-#define bfd_get_signed_32(abfd, ptr) \
-  BFD_SEND (abfd, bfd_getx_signed_32, (ptr))
-
-#define bfd_put_64(abfd, val, ptr) \
-  BFD_SEND (abfd, bfd_putx64, ((val), (ptr)))
-#define bfd_put_signed_64 \
-  bfd_put_64
-#define bfd_get_64(abfd, ptr) \
-  BFD_SEND (abfd, bfd_getx64, (ptr))
-#define bfd_get_signed_64(abfd, ptr) \
-  BFD_SEND (abfd, bfd_getx_signed_64, (ptr))
-
-#define bfd_get(bits, abfd, ptr)                       \
-  ((bits) == 8 ? (bfd_vma) bfd_get_8 (abfd, ptr)       \
-   : (bits) == 16 ? bfd_get_16 (abfd, ptr)             \
-   : (bits) == 32 ? bfd_get_32 (abfd, ptr)             \
-   : (bits) == 64 ? bfd_get_64 (abfd, ptr)             \
-   : (abort (), (bfd_vma) - 1))
-
-#define bfd_put(bits, abfd, val, ptr)                  \
-  ((bits) == 8 ? bfd_put_8  (abfd, val, ptr)           \
-   : (bits) == 16 ? bfd_put_16 (abfd, val, ptr)                \
-   : (bits) == 32 ? bfd_put_32 (abfd, val, ptr)                \
-   : (bits) == 64 ? bfd_put_64 (abfd, val, ptr)                \
-   : (abort (), (void) 0))
-
-
-/* Byte swapping macros for file header data.  */
-
-#define bfd_h_put_8(abfd, val, ptr) \
-  bfd_put_8 (abfd, val, ptr)
-#define bfd_h_put_signed_8(abfd, val, ptr) \
-  bfd_put_8 (abfd, val, ptr)
-#define bfd_h_get_8(abfd, ptr) \
-  bfd_get_8 (abfd, ptr)
-#define bfd_h_get_signed_8(abfd, ptr) \
-  bfd_get_signed_8 (abfd, ptr)
-
-#define bfd_h_put_16(abfd, val, ptr) \
-  BFD_SEND (abfd, bfd_h_putx16, (val, ptr))
-#define bfd_h_put_signed_16 \
-  bfd_h_put_16
-#define bfd_h_get_16(abfd, ptr) \
-  BFD_SEND (abfd, bfd_h_getx16, (ptr))
-#define bfd_h_get_signed_16(abfd, ptr) \
-  BFD_SEND (abfd, bfd_h_getx_signed_16, (ptr))
-
-#define bfd_h_put_32(abfd, val, ptr) \
-  BFD_SEND (abfd, bfd_h_putx32, (val, ptr))
-#define bfd_h_put_signed_32 \
-  bfd_h_put_32
-#define bfd_h_get_32(abfd, ptr) \
-  BFD_SEND (abfd, bfd_h_getx32, (ptr))
-#define bfd_h_get_signed_32(abfd, ptr) \
-  BFD_SEND (abfd, bfd_h_getx_signed_32, (ptr))
-
-#define bfd_h_put_64(abfd, val, ptr) \
-  BFD_SEND (abfd, bfd_h_putx64, (val, ptr))
-#define bfd_h_put_signed_64 \
-  bfd_h_put_64
-#define bfd_h_get_64(abfd, ptr) \
-  BFD_SEND (abfd, bfd_h_getx64, (ptr))
-#define bfd_h_get_signed_64(abfd, ptr) \
-  BFD_SEND (abfd, bfd_h_getx_signed_64, (ptr))
-
-/* Aliases for the above, which should eventually go away.  */
-
-#define H_PUT_64  bfd_h_put_64
-#define H_PUT_32  bfd_h_put_32
-#define H_PUT_16  bfd_h_put_16
-#define H_PUT_8   bfd_h_put_8
-#define H_PUT_S64 bfd_h_put_signed_64
-#define H_PUT_S32 bfd_h_put_signed_32
-#define H_PUT_S16 bfd_h_put_signed_16
-#define H_PUT_S8  bfd_h_put_signed_8
-#define H_GET_64  bfd_h_get_64
-#define H_GET_32  bfd_h_get_32
-#define H_GET_16  bfd_h_get_16
-#define H_GET_8   bfd_h_get_8
-#define H_GET_S64 bfd_h_get_signed_64
-#define H_GET_S32 bfd_h_get_signed_32
-#define H_GET_S16 bfd_h_get_signed_16
-#define H_GET_S8  bfd_h_get_signed_8
-
-
-/* Extracted from bfdio.c.  */
-long bfd_get_mtime (bfd *abfd);
-
-file_ptr bfd_get_size (bfd *abfd);
-
-void *bfd_mmap (bfd *abfd, void *addr, bfd_size_type len,
-    int prot, int flags, file_ptr offset,
-    void **map_addr, bfd_size_type *map_len);
-
-/* Extracted from bfdwin.c.  */
-/* Extracted from section.c.  */
-
-typedef struct bfd_section
-{
-  /* The name of the section; the name isn't a copy, the pointer is
-     the same as that passed to bfd_make_section.  */
-  const char *name;
-
-  /* A unique sequence number.  */
-  unsigned int id;
-
-  /* Which section in the bfd; 0..n-1 as sections are created in a bfd.  */
-  unsigned int index;
-
-  /* The next section in the list belonging to the BFD, or NULL.  */
-  struct bfd_section *next;
-
-  /* The previous section in the list belonging to the BFD, or NULL.  */
-  struct bfd_section *prev;
-
-  /* The field flags contains attributes of the section. Some
-     flags are read in from the object file, and some are
-     synthesized from other information.  */
-  flagword flags;
-
-#define SEC_NO_FLAGS   0x000
-
-  /* Tells the OS to allocate space for this section when loading.
-     This is clear for a section containing debug information only.  */
-#define SEC_ALLOC      0x001
-
-  /* Tells the OS to load the section from the file when loading.
-     This is clear for a .bss section.  */
-#define SEC_LOAD       0x002
-
-  /* The section contains data still to be relocated, so there is
-     some relocation information too.  */
-#define SEC_RELOC      0x004
-
-  /* A signal to the OS that the section contains read only data.  */
-#define SEC_READONLY   0x008
-
-  /* The section contains code only.  */
-#define SEC_CODE       0x010
-
-  /* The section contains data only.  */
-#define SEC_DATA       0x020
-
-  /* The section will reside in ROM.  */
-#define SEC_ROM        0x040
-
-  /* The section contains constructor information. This section
-     type is used by the linker to create lists of constructors and
-     destructors used by <<g++>>. When a back end sees a symbol
-     which should be used in a constructor list, it creates a new
-     section for the type of name (e.g., <<__CTOR_LIST__>>), attaches
-     the symbol to it, and builds a relocation. To build the lists
-     of constructors, all the linker has to do is catenate all the
-     sections called <<__CTOR_LIST__>> and relocate the data
-     contained within - exactly the operations it would peform on
-     standard data.  */
-#define SEC_CONSTRUCTOR 0x080
-
-  /* The section has contents - a data section could be
-     <<SEC_ALLOC>> | <<SEC_HAS_CONTENTS>>; a debug section could be
-     <<SEC_HAS_CONTENTS>>  */
-#define SEC_HAS_CONTENTS 0x100
-
-  /* An instruction to the linker to not output the section
-     even if it has information which would normally be written.  */
-#define SEC_NEVER_LOAD 0x200
-
-  /* The section contains thread local data.  */
-#define SEC_THREAD_LOCAL 0x400
-
-  /* The section has GOT references.  This flag is only for the
-     linker, and is currently only used by the elf32-hppa back end.
-     It will be set if global offset table references were detected
-     in this section, which indicate to the linker that the section
-     contains PIC code, and must be handled specially when doing a
-     static link.  */
-#define SEC_HAS_GOT_REF 0x800
-
-  /* The section contains common symbols (symbols may be defined
-     multiple times, the value of a symbol is the amount of
-     space it requires, and the largest symbol value is the one
-     used).  Most targets have exactly one of these (which we
-     translate to bfd_com_section_ptr), but ECOFF has two.  */
-#define SEC_IS_COMMON 0x1000
-
-  /* The section contains only debugging information.  For
-     example, this is set for ELF .debug and .stab sections.
-     strip tests this flag to see if a section can be
-     discarded.  */
-#define SEC_DEBUGGING 0x2000
-
-  /* The contents of this section are held in memory pointed to
-     by the contents field.  This is checked by bfd_get_section_contents,
-     and the data is retrieved from memory if appropriate.  */
-#define SEC_IN_MEMORY 0x4000
-
-  /* The contents of this section are to be excluded by the
-     linker for executable and shared objects unless those
-     objects are to be further relocated.  */
-#define SEC_EXCLUDE 0x8000
-
-  /* The contents of this section are to be sorted based on the sum of
-     the symbol and addend values specified by the associated relocation
-     entries.  Entries without associated relocation entries will be
-     appended to the end of the section in an unspecified order.  */
-#define SEC_SORT_ENTRIES 0x10000
-
-  /* When linking, duplicate sections of the same name should be
-     discarded, rather than being combined into a single section as
-     is usually done.  This is similar to how common symbols are
-     handled.  See SEC_LINK_DUPLICATES below.  */
-#define SEC_LINK_ONCE 0x20000
-
-  /* If SEC_LINK_ONCE is set, this bitfield describes how the linker
-     should handle duplicate sections.  */
-#define SEC_LINK_DUPLICATES 0xc0000
-
-  /* This value for SEC_LINK_DUPLICATES means that duplicate
-     sections with the same name should simply be discarded.  */
-#define SEC_LINK_DUPLICATES_DISCARD 0x0
-
-  /* This value for SEC_LINK_DUPLICATES means that the linker
-     should warn if there are any duplicate sections, although
-     it should still only link one copy.  */
-#define SEC_LINK_DUPLICATES_ONE_ONLY 0x40000
-
-  /* This value for SEC_LINK_DUPLICATES means that the linker
-     should warn if any duplicate sections are a different size.  */
-#define SEC_LINK_DUPLICATES_SAME_SIZE 0x80000
-
-  /* This value for SEC_LINK_DUPLICATES means that the linker
-     should warn if any duplicate sections contain different
-     contents.  */
-#define SEC_LINK_DUPLICATES_SAME_CONTENTS \
-  (SEC_LINK_DUPLICATES_ONE_ONLY | SEC_LINK_DUPLICATES_SAME_SIZE)
-
-  /* This section was created by the linker as part of dynamic
-     relocation or other arcane processing.  It is skipped when
-     going through the first-pass output, trusting that someone
-     else up the line will take care of it later.  */
-#define SEC_LINKER_CREATED 0x100000
-
-  /* This section should not be subject to garbage collection.
-     Also set to inform the linker that this section should not be
-     listed in the link map as discarded.  */
-#define SEC_KEEP 0x200000
-
-  /* This section contains "short" data, and should be placed
-     "near" the GP.  */
-#define SEC_SMALL_DATA 0x400000
-
-  /* Attempt to merge identical entities in the section.
-     Entity size is given in the entsize field.  */
-#define SEC_MERGE 0x800000
-
-  /* If given with SEC_MERGE, entities to merge are zero terminated
-     strings where entsize specifies character size instead of fixed
-     size entries.  */
-#define SEC_STRINGS 0x1000000
-
-  /* This section contains data about section groups.  */
-#define SEC_GROUP 0x2000000
-
-  /* The section is a COFF shared library section.  This flag is
-     only for the linker.  If this type of section appears in
-     the input file, the linker must copy it to the output file
-     without changing the vma or size.  FIXME: Although this
-     was originally intended to be general, it really is COFF
-     specific (and the flag was renamed to indicate this).  It
-     might be cleaner to have some more general mechanism to
-     allow the back end to control what the linker does with
-     sections.  */
-#define SEC_COFF_SHARED_LIBRARY 0x4000000
-
-  /* This input section should be copied to output in reverse order
-     as an array of pointers.  This is for ELF linker internal use
-     only.  */
-#define SEC_ELF_REVERSE_COPY 0x4000000
-
-  /* This section contains data which may be shared with other
-     executables or shared objects. This is for COFF only.  */
-#define SEC_COFF_SHARED 0x8000000
-
-  /* This section should be compressed.  This is for ELF linker
-     internal use only.  */
-#define SEC_ELF_COMPRESS 0x8000000
-
-  /* When a section with this flag is being linked, then if the size of
-     the input section is less than a page, it should not cross a page
-     boundary.  If the size of the input section is one page or more,
-     it should be aligned on a page boundary.  This is for TI
-     TMS320C54X only.  */
-#define SEC_TIC54X_BLOCK 0x10000000
-
-  /* This section should be renamed.  This is for ELF linker
-     internal use only.  */
-#define SEC_ELF_RENAME 0x10000000
-
-  /* Conditionally link this section; do not link if there are no
-     references found to any symbol in the section.  This is for TI
-     TMS320C54X only.  */
-#define SEC_TIC54X_CLINK 0x20000000
-
-  /* This section contains vliw code.  This is for Toshiba MeP only.  */
-#define SEC_MEP_VLIW 0x20000000
-
-  /* Indicate that section has the no read flag set. This happens
-     when memory read flag isn't set. */
-#define SEC_COFF_NOREAD 0x40000000
-
-  /* Indicate that section has the purecode flag set.  */
-#define SEC_ELF_PURECODE 0x80000000
-
-  /*  End of section flags.  */
-
-  /* Some internal packed boolean fields.  */
-
-  /* See the vma field.  */
-  unsigned int user_set_vma : 1;
-
-  /* A mark flag used by some of the linker backends.  */
-  unsigned int linker_mark : 1;
-
-  /* Another mark flag used by some of the linker backends.  Set for
-     output sections that have an input section.  */
-  unsigned int linker_has_input : 1;
-
-  /* Mark flag used by some linker backends for garbage collection.  */
-  unsigned int gc_mark : 1;
-
-  /* Section compression status.  */
-  unsigned int compress_status : 2;
-#define COMPRESS_SECTION_NONE    0
-#define COMPRESS_SECTION_DONE    1
-#define DECOMPRESS_SECTION_SIZED 2
-
-  /* The following flags are used by the ELF linker. */
-
-  /* Mark sections which have been allocated to segments.  */
-  unsigned int segment_mark : 1;
-
-  /* Type of sec_info information.  */
-  unsigned int sec_info_type:3;
-#define SEC_INFO_TYPE_NONE      0
-#define SEC_INFO_TYPE_STABS     1
-#define SEC_INFO_TYPE_MERGE     2
-#define SEC_INFO_TYPE_EH_FRAME  3
-#define SEC_INFO_TYPE_JUST_SYMS 4
-#define SEC_INFO_TYPE_TARGET    5
-#define SEC_INFO_TYPE_EH_FRAME_ENTRY 6
-
-  /* Nonzero if this section uses RELA relocations, rather than REL.  */
-  unsigned int use_rela_p:1;
-
-  /* Bits used by various backends.  The generic code doesn't touch
-     these fields.  */
-
-  unsigned int sec_flg0:1;
-  unsigned int sec_flg1:1;
-  unsigned int sec_flg2:1;
-  unsigned int sec_flg3:1;
-  unsigned int sec_flg4:1;
-  unsigned int sec_flg5:1;
-
-  /* End of internal packed boolean fields.  */
-
-  /*  The virtual memory address of the section - where it will be
-      at run time.  The symbols are relocated against this.  The
-      user_set_vma flag is maintained by bfd; if it's not set, the
-      backend can assign addresses (for example, in <<a.out>>, where
-      the default address for <<.data>> is dependent on the specific
-      target and various flags).  */
-  bfd_vma vma;
-
-  /*  The load address of the section - where it would be in a
-      rom image; really only used for writing section header
-      information.  */
-  bfd_vma lma;
-
-  /* The size of the section in *octets*, as it will be output.
-     Contains a value even if the section has no contents (e.g., the
-     size of <<.bss>>).  */
-  bfd_size_type size;
-
-  /* For input sections, the original size on disk of the section, in
-     octets.  This field should be set for any section whose size is
-     changed by linker relaxation.  It is required for sections where
-     the linker relaxation scheme doesn't cache altered section and
-     reloc contents (stabs, eh_frame, SEC_MERGE, some coff relaxing
-     targets), and thus the original size needs to be kept to read the
-     section multiple times.  For output sections, rawsize holds the
-     section size calculated on a previous linker relaxation pass.  */
-  bfd_size_type rawsize;
-
-  /* The compressed size of the section in octets.  */
-  bfd_size_type compressed_size;
-
-  /* Relaxation table. */
-  struct relax_table *relax;
-
-  /* Count of used relaxation table entries. */
-  int relax_count;
-
-
-  /* If this section is going to be output, then this value is the
-     offset in *bytes* into the output section of the first byte in the
-     input section (byte ==> smallest addressable unit on the
-     target).  In most cases, if this was going to start at the
-     100th octet (8-bit quantity) in the output section, this value
-     would be 100.  However, if the target byte size is 16 bits
-     (bfd_octets_per_byte is "2"), this value would be 50.  */
-  bfd_vma output_offset;
-
-  /* The output section through which to map on output.  */
-  struct bfd_section *output_section;
-
-  /* The alignment requirement of the section, as an exponent of 2 -
-     e.g., 3 aligns to 2^3 (or 8).  */
-  unsigned int alignment_power;
-
-  /* If an input section, a pointer to a vector of relocation
-     records for the data in this section.  */
-  struct reloc_cache_entry *relocation;
-
-  /* If an output section, a pointer to a vector of pointers to
-     relocation records for the data in this section.  */
-  struct reloc_cache_entry **orelocation;
-
-  /* The number of relocation records in one of the above.  */
-  unsigned reloc_count;
-
-  /* Information below is back end specific - and not always used
-     or updated.  */
-
-  /* File position of section data.  */
-  file_ptr filepos;
-
-  /* File position of relocation info.  */
-  file_ptr rel_filepos;
-
-  /* File position of line data.  */
-  file_ptr line_filepos;
-
-  /* Pointer to data for applications.  */
-  void *userdata;
-
-  /* If the SEC_IN_MEMORY flag is set, this points to the actual
-     contents.  */
-  unsigned char *contents;
-
-  /* Attached line number information.  */
-  alent *lineno;
-
-  /* Number of line number records.  */
-  unsigned int lineno_count;
-
-  /* Entity size for merging purposes.  */
-  unsigned int entsize;
-
-  /* Points to the kept section if this section is a link-once section,
-     and is discarded.  */
-  struct bfd_section *kept_section;
-
-  /* When a section is being output, this value changes as more
-     linenumbers are written out.  */
-  file_ptr moving_line_filepos;
-
-  /* What the section number is in the target world.  */
-  int target_index;
-
-  void *used_by_bfd;
-
-  /* If this is a constructor section then here is a list of the
-     relocations created to relocate items within it.  */
-  struct relent_chain *constructor_chain;
-
-  /* The BFD which owns the section.  */
-  bfd *owner;
-
-  /* A symbol which points at this section only.  */
-  struct bfd_symbol *symbol;
-  struct bfd_symbol **symbol_ptr_ptr;
-
-  /* Early in the link process, map_head and map_tail are used to build
-     a list of input sections attached to an output section.  Later,
-     output sections use these fields for a list of bfd_link_order
-     structs.  */
-  union {
-    struct bfd_link_order *link_order;
-    struct bfd_section *s;
-  } map_head, map_tail;
-} asection;
-
-/* Relax table contains information about instructions which can
-   be removed by relaxation -- replacing a long address with a
-   short address.  */
-struct relax_table {
-  /* Address where bytes may be deleted. */
-  bfd_vma addr;
-
-  /* Number of bytes to be deleted.  */
-  int size;
-};
-
-/* Note: the following are provided as inline functions rather than macros
-   because not all callers use the return value.  A macro implementation
-   would use a comma expression, eg: "((ptr)->foo = val, TRUE)" and some
-   compilers will complain about comma expressions that have no effect.  */
-static inline bfd_boolean
-bfd_set_section_userdata (bfd * abfd ATTRIBUTE_UNUSED, asection * ptr, void * val)
-{
-  ptr->userdata = val;
-  return TRUE;
-}
-
-static inline bfd_boolean
-bfd_set_section_vma (bfd * abfd ATTRIBUTE_UNUSED, asection * ptr, bfd_vma val)
-{
-  ptr->vma = ptr->lma = val;
-  ptr->user_set_vma = TRUE;
-  return TRUE;
-}
-
-static inline bfd_boolean
-bfd_set_section_alignment (bfd * abfd ATTRIBUTE_UNUSED, asection * ptr, unsigned int val)
-{
-  ptr->alignment_power = val;
-  return TRUE;
-}
-
-/* These sections are global, and are managed by BFD.  The application
-   and target back end are not permitted to change the values in
-   these sections.  */
-extern asection _bfd_std_section[4];
-
-#define BFD_ABS_SECTION_NAME "*ABS*"
-#define BFD_UND_SECTION_NAME "*UND*"
-#define BFD_COM_SECTION_NAME "*COM*"
-#define BFD_IND_SECTION_NAME "*IND*"
-
-/* Pointer to the common section.  */
-#define bfd_com_section_ptr (&_bfd_std_section[0])
-/* Pointer to the undefined section.  */
-#define bfd_und_section_ptr (&_bfd_std_section[1])
-/* Pointer to the absolute section.  */
-#define bfd_abs_section_ptr (&_bfd_std_section[2])
-/* Pointer to the indirect section.  */
-#define bfd_ind_section_ptr (&_bfd_std_section[3])
-
-#define bfd_is_und_section(sec) ((sec) == bfd_und_section_ptr)
-#define bfd_is_abs_section(sec) ((sec) == bfd_abs_section_ptr)
-#define bfd_is_ind_section(sec) ((sec) == bfd_ind_section_ptr)
-
-#define bfd_is_const_section(SEC)              \
- (   ((SEC) == bfd_abs_section_ptr)            \
-  || ((SEC) == bfd_und_section_ptr)            \
-  || ((SEC) == bfd_com_section_ptr)            \
-  || ((SEC) == bfd_ind_section_ptr))
-
-/* Macros to handle insertion and deletion of a bfd's sections.  These
-   only handle the list pointers, ie. do not adjust section_count,
-   target_index etc.  */
-#define bfd_section_list_remove(ABFD, S) \
-  do                                                   \
-    {                                                  \
-      asection *_s = S;                                \
-      asection *_next = _s->next;                      \
-      asection *_prev = _s->prev;                      \
-      if (_prev)                                       \
-        _prev->next = _next;                           \
-      else                                             \
-        (ABFD)->sections = _next;                      \
-      if (_next)                                       \
-        _next->prev = _prev;                           \
-      else                                             \
-        (ABFD)->section_last = _prev;                  \
-    }                                                  \
-  while (0)
-#define bfd_section_list_append(ABFD, S) \
-  do                                                   \
-    {                                                  \
-      asection *_s = S;                                \
-      bfd *_abfd = ABFD;                               \
-      _s->next = NULL;                                 \
-      if (_abfd->section_last)                         \
-        {                                              \
-          _s->prev = _abfd->section_last;              \
-          _abfd->section_last->next = _s;              \
-        }                                              \
-      else                                             \
-        {                                              \
-          _s->prev = NULL;                             \
-          _abfd->sections = _s;                        \
-        }                                              \
-      _abfd->section_last = _s;                        \
-    }                                                  \
-  while (0)
-#define bfd_section_list_prepend(ABFD, S) \
-  do                                                   \
-    {                                                  \
-      asection *_s = S;                                \
-      bfd *_abfd = ABFD;                               \
-      _s->prev = NULL;                                 \
-      if (_abfd->sections)                             \
-        {                                              \
-          _s->next = _abfd->sections;                  \
-          _abfd->sections->prev = _s;                  \
-        }                                              \
-      else                                             \
-        {                                              \
-          _s->next = NULL;                             \
-          _abfd->section_last = _s;                    \
-        }                                              \
-      _abfd->sections = _s;                            \
-    }                                                  \
-  while (0)
-#define bfd_section_list_insert_after(ABFD, A, S) \
-  do                                                   \
-    {                                                  \
-      asection *_a = A;                                \
-      asection *_s = S;                                \
-      asection *_next = _a->next;                      \
-      _s->next = _next;                                \
-      _s->prev = _a;                                   \
-      _a->next = _s;                                   \
-      if (_next)                                       \
-        _next->prev = _s;                              \
-      else                                             \
-        (ABFD)->section_last = _s;                     \
-    }                                                  \
-  while (0)
-#define bfd_section_list_insert_before(ABFD, B, S) \
-  do                                                   \
-    {                                                  \
-      asection *_b = B;                                \
-      asection *_s = S;                                \
-      asection *_prev = _b->prev;                      \
-      _s->prev = _prev;                                \
-      _s->next = _b;                                   \
-      _b->prev = _s;                                   \
-      if (_prev)                                       \
-        _prev->next = _s;                              \
-      else                                             \
-        (ABFD)->sections = _s;                         \
-    }                                                  \
-  while (0)
-#define bfd_section_removed_from_list(ABFD, S) \
-  ((S)->next == NULL ? (ABFD)->section_last != (S) : (S)->next->prev != (S))
-
-#define BFD_FAKE_SECTION(SEC, SYM, NAME, IDX, FLAGS)                   \
-  /* name, id,  index, next, prev, flags, user_set_vma,            */  \
-  {  NAME, IDX, 0,     NULL, NULL, FLAGS, 0,                           \
-                                                                       \
-  /* linker_mark, linker_has_input, gc_mark, decompress_status,    */  \
-     0,           0,                1,       0,                        \
-                                                                       \
-  /* segment_mark, sec_info_type, use_rela_p,                      */  \
-     0,            0,             0,                                   \
-                                                                       \
-  /* sec_flg0, sec_flg1, sec_flg2, sec_flg3, sec_flg4, sec_flg5,   */  \
-     0,        0,        0,        0,        0,        0,              \
-                                                                       \
-  /* vma, lma, size, rawsize, compressed_size, relax, relax_count, */  \
-     0,   0,   0,    0,       0,               0,     0,               \
-                                                                       \
-  /* output_offset, output_section, alignment_power,               */  \
-     0,             &SEC,           0,                                 \
-                                                                       \
-  /* relocation, orelocation, reloc_count, filepos, rel_filepos,   */  \
-     NULL,       NULL,        0,           0,       0,                 \
-                                                                       \
-  /* line_filepos, userdata, contents, lineno, lineno_count,       */  \
-     0,            NULL,     NULL,     NULL,   0,                      \
-                                                                       \
-  /* entsize, kept_section, moving_line_filepos,                    */ \
-     0,       NULL,          0,                                        \
-                                                                       \
-  /* target_index, used_by_bfd, constructor_chain, owner,          */  \
-     0,            NULL,        NULL,              NULL,               \
-                                                                       \
-  /* symbol,                    symbol_ptr_ptr,                    */  \
-     (struct bfd_symbol *) SYM, &SEC.symbol,                           \
-                                                                       \
-  /* map_head, map_tail                                            */  \
-     { NULL }, { NULL }                                                \
-    }
-
-void bfd_section_list_clear (bfd *);
-
-asection *bfd_get_section_by_name (bfd *abfd, const char *name);
-
-asection *bfd_get_next_section_by_name (bfd *ibfd, asection *sec);
-
-asection *bfd_get_linker_section (bfd *abfd, const char *name);
-
-asection *bfd_get_section_by_name_if
-   (bfd *abfd,
-    const char *name,
-    bfd_boolean (*func) (bfd *abfd, asection *sect, void *obj),
-    void *obj);
-
-char *bfd_get_unique_section_name
-   (bfd *abfd, const char *templat, int *count);
-
-asection *bfd_make_section_old_way (bfd *abfd, const char *name);
-
-asection *bfd_make_section_anyway_with_flags
-   (bfd *abfd, const char *name, flagword flags);
-
-asection *bfd_make_section_anyway (bfd *abfd, const char *name);
-
-asection *bfd_make_section_with_flags
-   (bfd *, const char *name, flagword flags);
-
-asection *bfd_make_section (bfd *, const char *name);
-
-int bfd_get_next_section_id (void);
-
-bfd_boolean bfd_set_section_flags
-   (bfd *abfd, asection *sec, flagword flags);
-
-void bfd_rename_section
-   (bfd *abfd, asection *sec, const char *newname);
-
-void bfd_map_over_sections
-   (bfd *abfd,
-    void (*func) (bfd *abfd, asection *sect, void *obj),
-    void *obj);
-
-asection *bfd_sections_find_if
-   (bfd *abfd,
-    bfd_boolean (*operation) (bfd *abfd, asection *sect, void *obj),
-    void *obj);
-
-bfd_boolean bfd_set_section_size
-   (bfd *abfd, asection *sec, bfd_size_type val);
-
-bfd_boolean bfd_set_section_contents
-   (bfd *abfd, asection *section, const void *data,
-    file_ptr offset, bfd_size_type count);
-
-bfd_boolean bfd_get_section_contents
-   (bfd *abfd, asection *section, void *location, file_ptr offset,
-    bfd_size_type count);
-
-bfd_boolean bfd_malloc_and_get_section
-   (bfd *abfd, asection *section, bfd_byte **buf);
-
-bfd_boolean bfd_copy_private_section_data
-   (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);
-
-#define bfd_copy_private_section_data(ibfd, isection, obfd, osection) \
-     BFD_SEND (obfd, _bfd_copy_private_section_data, \
-               (ibfd, isection, obfd, osection))
-bfd_boolean bfd_generic_is_group_section (bfd *, const asection *sec);
-
-bfd_boolean bfd_generic_discard_group (bfd *abfd, asection *group);
-
-/* Extracted from archures.c.  */
-enum bfd_architecture
-{
-  bfd_arch_unknown,   /* File arch not known.  */
-  bfd_arch_obscure,   /* Arch known, not one of these.  */
-  bfd_arch_m68k,      /* Motorola 68xxx */
-#define bfd_mach_m68000 1
-#define bfd_mach_m68008 2
-#define bfd_mach_m68010 3
-#define bfd_mach_m68020 4
-#define bfd_mach_m68030 5
-#define bfd_mach_m68040 6
-#define bfd_mach_m68060 7
-#define bfd_mach_cpu32  8
-#define bfd_mach_fido   9
-#define bfd_mach_mcf_isa_a_nodiv 10
-#define bfd_mach_mcf_isa_a 11
-#define bfd_mach_mcf_isa_a_mac 12
-#define bfd_mach_mcf_isa_a_emac 13
-#define bfd_mach_mcf_isa_aplus 14
-#define bfd_mach_mcf_isa_aplus_mac 15
-#define bfd_mach_mcf_isa_aplus_emac 16
-#define bfd_mach_mcf_isa_b_nousp 17
-#define bfd_mach_mcf_isa_b_nousp_mac 18
-#define bfd_mach_mcf_isa_b_nousp_emac 19
-#define bfd_mach_mcf_isa_b 20
-#define bfd_mach_mcf_isa_b_mac 21
-#define bfd_mach_mcf_isa_b_emac 22
-#define bfd_mach_mcf_isa_b_float 23
-#define bfd_mach_mcf_isa_b_float_mac 24
-#define bfd_mach_mcf_isa_b_float_emac 25
-#define bfd_mach_mcf_isa_c 26
-#define bfd_mach_mcf_isa_c_mac 27
-#define bfd_mach_mcf_isa_c_emac 28
-#define bfd_mach_mcf_isa_c_nodiv 29
-#define bfd_mach_mcf_isa_c_nodiv_mac 30
-#define bfd_mach_mcf_isa_c_nodiv_emac 31
-  bfd_arch_vax,       /* DEC Vax */
-  bfd_arch_i960,      /* Intel 960 */
-    /* The order of the following is important.
-       lower number indicates a machine type that
-       only accepts a subset of the instructions
-       available to machines with higher numbers.
-       The exception is the "ca", which is
-       incompatible with all other machines except
-       "core".  */
-
-#define bfd_mach_i960_core      1
-#define bfd_mach_i960_ka_sa     2
-#define bfd_mach_i960_kb_sb     3
-#define bfd_mach_i960_mc        4
-#define bfd_mach_i960_xa        5
-#define bfd_mach_i960_ca        6
-#define bfd_mach_i960_jx        7
-#define bfd_mach_i960_hx        8
-
-  bfd_arch_or1k,      /* OpenRISC 1000 */
-#define bfd_mach_or1k           1
-#define bfd_mach_or1knd         2
-
-  bfd_arch_sparc,     /* SPARC */
-#define bfd_mach_sparc                 1
-/* The difference between v8plus and v9 is that v9 is a true 64 bit env.  */
-#define bfd_mach_sparc_sparclet        2
-#define bfd_mach_sparc_sparclite       3
-#define bfd_mach_sparc_v8plus          4
-#define bfd_mach_sparc_v8plusa         5 /* with ultrasparc add'ns.  */
-#define bfd_mach_sparc_sparclite_le    6
-#define bfd_mach_sparc_v9              7
-#define bfd_mach_sparc_v9a             8 /* with ultrasparc add'ns.  */
-#define bfd_mach_sparc_v8plusb         9 /* with cheetah add'ns.  */
-#define bfd_mach_sparc_v9b             10 /* with cheetah add'ns.  */
-#define bfd_mach_sparc_v8plusc         11 /* with UA2005 and T1 add'ns.  */
-#define bfd_mach_sparc_v9c             12 /* with UA2005 and T1 add'ns.  */
-#define bfd_mach_sparc_v8plusd         13 /* with UA2007 and T3 add'ns.  */
-#define bfd_mach_sparc_v9d             14 /* with UA2007 and T3 add'ns.  */
-#define bfd_mach_sparc_v8pluse         15 /* with OSA2001 and T4 add'ns (no IMA).  */
-#define bfd_mach_sparc_v9e             16 /* with OSA2001 and T4 add'ns (no IMA).  */
-#define bfd_mach_sparc_v8plusv         17 /* with OSA2011 and T4 and IMA and FJMAU add'ns.  */
-#define bfd_mach_sparc_v9v             18 /* with OSA2011 and T4 and IMA and FJMAU add'ns.  */
-#define bfd_mach_sparc_v8plusm         19 /* with OSA2015 and M7 add'ns.  */
-#define bfd_mach_sparc_v9m             20 /* with OSA2015 and M7 add'ns.  */
-/* Nonzero if MACH has the v9 instruction set.  */
-#define bfd_mach_sparc_v9_p(mach) \
-  ((mach) >= bfd_mach_sparc_v8plus && (mach) <= bfd_mach_sparc_v9m \
-   && (mach) != bfd_mach_sparc_sparclite_le)
-/* Nonzero if MACH is a 64 bit sparc architecture.  */
-#define bfd_mach_sparc_64bit_p(mach) \
-  ((mach) >= bfd_mach_sparc_v9 \
-   && (mach) != bfd_mach_sparc_v8plusb \
-   && (mach) != bfd_mach_sparc_v8plusc \
-   && (mach) != bfd_mach_sparc_v8plusd \
-   && (mach) != bfd_mach_sparc_v8pluse \
-   && (mach) != bfd_mach_sparc_v8plusv \
-   && (mach) != bfd_mach_sparc_v8plusm)
-  bfd_arch_spu,       /* PowerPC SPU */
-#define bfd_mach_spu           256
-  bfd_arch_mips,      /* MIPS Rxxxx */
-#define bfd_mach_mips3000              3000
-#define bfd_mach_mips3900              3900
-#define bfd_mach_mips4000              4000
-#define bfd_mach_mips4010              4010
-#define bfd_mach_mips4100              4100
-#define bfd_mach_mips4111              4111
-#define bfd_mach_mips4120              4120
-#define bfd_mach_mips4300              4300
-#define bfd_mach_mips4400              4400
-#define bfd_mach_mips4600              4600
-#define bfd_mach_mips4650              4650
-#define bfd_mach_mips5000              5000
-#define bfd_mach_mips5400              5400
-#define bfd_mach_mips5500              5500
-#define bfd_mach_mips5900              5900
-#define bfd_mach_mips6000              6000
-#define bfd_mach_mips7000              7000
-#define bfd_mach_mips8000              8000
-#define bfd_mach_mips9000              9000
-#define bfd_mach_mips10000             10000
-#define bfd_mach_mips12000             12000
-#define bfd_mach_mips14000             14000
-#define bfd_mach_mips16000             16000
-#define bfd_mach_mips16                16
-#define bfd_mach_mips5                 5
-#define bfd_mach_mips_loongson_2e      3001
-#define bfd_mach_mips_loongson_2f      3002
-#define bfd_mach_mips_loongson_3a      3003
-#define bfd_mach_mips_sb1              12310201 /* octal 'SB', 01 */
-#define bfd_mach_mips_octeon           6501
-#define bfd_mach_mips_octeonp          6601
-#define bfd_mach_mips_octeon2          6502
-#define bfd_mach_mips_octeon3          6503
-#define bfd_mach_mips_xlr              887682   /* decimal 'XLR'  */
-#define bfd_mach_mipsisa32             32
-#define bfd_mach_mipsisa32r2           33
-#define bfd_mach_mipsisa32r3           34
-#define bfd_mach_mipsisa32r5           36
-#define bfd_mach_mipsisa32r6           37
-#define bfd_mach_mipsisa64             64
-#define bfd_mach_mipsisa64r2           65
-#define bfd_mach_mipsisa64r3           66
-#define bfd_mach_mipsisa64r5           68
-#define bfd_mach_mipsisa64r6           69
-#define bfd_mach_mips_micromips        96
-  bfd_arch_i386,      /* Intel 386 */
-#define bfd_mach_i386_intel_syntax     (1 << 0)
-#define bfd_mach_i386_i8086            (1 << 1)
-#define bfd_mach_i386_i386             (1 << 2)
-#define bfd_mach_x86_64                (1 << 3)
-#define bfd_mach_x64_32                (1 << 4)
-#define bfd_mach_i386_i386_intel_syntax (bfd_mach_i386_i386 | bfd_mach_i386_intel_syntax)
-#define bfd_mach_x86_64_intel_syntax   (bfd_mach_x86_64 | bfd_mach_i386_intel_syntax)
-#define bfd_mach_x64_32_intel_syntax   (bfd_mach_x64_32 | bfd_mach_i386_intel_syntax)
-  bfd_arch_l1om,   /* Intel L1OM */
-#define bfd_mach_l1om                  (1 << 5)
-#define bfd_mach_l1om_intel_syntax     (bfd_mach_l1om | bfd_mach_i386_intel_syntax)
-  bfd_arch_k1om,   /* Intel K1OM */
-#define bfd_mach_k1om                  (1 << 6)
-#define bfd_mach_k1om_intel_syntax     (bfd_mach_k1om | bfd_mach_i386_intel_syntax)
-#define bfd_mach_i386_nacl             (1 << 7)
-#define bfd_mach_i386_i386_nacl        (bfd_mach_i386_i386 | bfd_mach_i386_nacl)
-#define bfd_mach_x86_64_nacl           (bfd_mach_x86_64 | bfd_mach_i386_nacl)
-#define bfd_mach_x64_32_nacl           (bfd_mach_x64_32 | bfd_mach_i386_nacl)
-  bfd_arch_iamcu,   /* Intel MCU */
-#define bfd_mach_iamcu                 (1 << 8)
-#define bfd_mach_i386_iamcu            (bfd_mach_i386_i386 | bfd_mach_iamcu)
-#define bfd_mach_i386_iamcu_intel_syntax (bfd_mach_i386_iamcu | bfd_mach_i386_intel_syntax)
-  bfd_arch_we32k,     /* AT&T WE32xxx */
-  bfd_arch_tahoe,     /* CCI/Harris Tahoe */
-  bfd_arch_i860,      /* Intel 860 */
-  bfd_arch_i370,      /* IBM 360/370 Mainframes */
-  bfd_arch_romp,      /* IBM ROMP PC/RT */
-  bfd_arch_convex,    /* Convex */
-  bfd_arch_m88k,      /* Motorola 88xxx */
-  bfd_arch_m98k,      /* Motorola 98xxx */
-  bfd_arch_pyramid,   /* Pyramid Technology */
-  bfd_arch_h8300,     /* Renesas H8/300 (formerly Hitachi H8/300) */
-#define bfd_mach_h8300    1
-#define bfd_mach_h8300h   2
-#define bfd_mach_h8300s   3
-#define bfd_mach_h8300hn  4
-#define bfd_mach_h8300sn  5
-#define bfd_mach_h8300sx  6
-#define bfd_mach_h8300sxn 7
-  bfd_arch_pdp11,     /* DEC PDP-11 */
-  bfd_arch_plugin,
-  bfd_arch_powerpc,   /* PowerPC */
-#define bfd_mach_ppc           32
-#define bfd_mach_ppc64         64
-#define bfd_mach_ppc_403       403
-#define bfd_mach_ppc_403gc     4030
-#define bfd_mach_ppc_405       405
-#define bfd_mach_ppc_505       505
-#define bfd_mach_ppc_601       601
-#define bfd_mach_ppc_602       602
-#define bfd_mach_ppc_603       603
-#define bfd_mach_ppc_ec603e    6031
-#define bfd_mach_ppc_604       604
-#define bfd_mach_ppc_620       620
-#define bfd_mach_ppc_630       630
-#define bfd_mach_ppc_750       750
-#define bfd_mach_ppc_860       860
-#define bfd_mach_ppc_a35       35
-#define bfd_mach_ppc_rs64ii    642
-#define bfd_mach_ppc_rs64iii   643
-#define bfd_mach_ppc_7400      7400
-#define bfd_mach_ppc_e500      500
-#define bfd_mach_ppc_e500mc    5001
-#define bfd_mach_ppc_e500mc64  5005
-#define bfd_mach_ppc_e5500     5006
-#define bfd_mach_ppc_e6500     5007
-#define bfd_mach_ppc_titan     83
-#define bfd_mach_ppc_vle       84
-  bfd_arch_rs6000,    /* IBM RS/6000 */
-#define bfd_mach_rs6k          6000
-#define bfd_mach_rs6k_rs1      6001
-#define bfd_mach_rs6k_rsc      6003
-#define bfd_mach_rs6k_rs2      6002
-  bfd_arch_hppa,      /* HP PA RISC */
-#define bfd_mach_hppa10        10
-#define bfd_mach_hppa11        11
-#define bfd_mach_hppa20        20
-#define bfd_mach_hppa20w       25
-  bfd_arch_d10v,      /* Mitsubishi D10V */
-#define bfd_mach_d10v          1
-#define bfd_mach_d10v_ts2      2
-#define bfd_mach_d10v_ts3      3
-  bfd_arch_d30v,      /* Mitsubishi D30V */
-  bfd_arch_dlx,       /* DLX */
-  bfd_arch_m68hc11,   /* Motorola 68HC11 */
-  bfd_arch_m68hc12,   /* Motorola 68HC12 */
-#define bfd_mach_m6812_default 0
-#define bfd_mach_m6812         1
-#define bfd_mach_m6812s        2
-  bfd_arch_m9s12x,   /* Freescale S12X */
-  bfd_arch_m9s12xg,  /* Freescale XGATE */
-  bfd_arch_z8k,       /* Zilog Z8000 */
-#define bfd_mach_z8001         1
-#define bfd_mach_z8002         2
-  bfd_arch_h8500,     /* Renesas H8/500 (formerly Hitachi H8/500) */
-  bfd_arch_sh,        /* Renesas / SuperH SH (formerly Hitachi SH) */
-#define bfd_mach_sh            1
-#define bfd_mach_sh2        0x20
-#define bfd_mach_sh_dsp     0x2d
-#define bfd_mach_sh2a       0x2a
-#define bfd_mach_sh2a_nofpu 0x2b
-#define bfd_mach_sh2a_nofpu_or_sh4_nommu_nofpu 0x2a1
-#define bfd_mach_sh2a_nofpu_or_sh3_nommu 0x2a2
-#define bfd_mach_sh2a_or_sh4  0x2a3
-#define bfd_mach_sh2a_or_sh3e 0x2a4
-#define bfd_mach_sh2e       0x2e
-#define bfd_mach_sh3        0x30
-#define bfd_mach_sh3_nommu  0x31
-#define bfd_mach_sh3_dsp    0x3d
-#define bfd_mach_sh3e       0x3e
-#define bfd_mach_sh4        0x40
-#define bfd_mach_sh4_nofpu  0x41
-#define bfd_mach_sh4_nommu_nofpu  0x42
-#define bfd_mach_sh4a       0x4a
-#define bfd_mach_sh4a_nofpu 0x4b
-#define bfd_mach_sh4al_dsp  0x4d
-#define bfd_mach_sh5        0x50
-  bfd_arch_alpha,     /* Dec Alpha */
-#define bfd_mach_alpha_ev4  0x10
-#define bfd_mach_alpha_ev5  0x20
-#define bfd_mach_alpha_ev6  0x30
-  bfd_arch_arm,       /* Advanced Risc Machines ARM.  */
-#define bfd_mach_arm_unknown   0
-#define bfd_mach_arm_2         1
-#define bfd_mach_arm_2a        2
-#define bfd_mach_arm_3         3
-#define bfd_mach_arm_3M        4
-#define bfd_mach_arm_4         5
-#define bfd_mach_arm_4T        6
-#define bfd_mach_arm_5         7
-#define bfd_mach_arm_5T        8
-#define bfd_mach_arm_5TE       9
-#define bfd_mach_arm_XScale    10
-#define bfd_mach_arm_ep9312    11
-#define bfd_mach_arm_iWMMXt    12
-#define bfd_mach_arm_iWMMXt2   13
-  bfd_arch_nds32,     /* Andes NDS32 */
-#define bfd_mach_n1            1
-#define bfd_mach_n1h           2
-#define bfd_mach_n1h_v2        3
-#define bfd_mach_n1h_v3        4
-#define bfd_mach_n1h_v3m       5
-  bfd_arch_ns32k,     /* National Semiconductors ns32000 */
-  bfd_arch_w65,       /* WDC 65816 */
-  bfd_arch_tic30,     /* Texas Instruments TMS320C30 */
-  bfd_arch_tic4x,     /* Texas Instruments TMS320C3X/4X */
-#define bfd_mach_tic3x         30
-#define bfd_mach_tic4x         40
-  bfd_arch_tic54x,    /* Texas Instruments TMS320C54X */
-  bfd_arch_tic6x,     /* Texas Instruments TMS320C6X */
-  bfd_arch_tic80,     /* TI TMS320c80 (MVP) */
-  bfd_arch_v850,      /* NEC V850 */
-  bfd_arch_v850_rh850,/* NEC V850 (using RH850 ABI) */
-#define bfd_mach_v850          1
-#define bfd_mach_v850e         'E'
-#define bfd_mach_v850e1        '1'
-#define bfd_mach_v850e2        0x4532
-#define bfd_mach_v850e2v3      0x45325633
-#define bfd_mach_v850e3v5      0x45335635 /* ('E'|'3'|'V'|'5') */
-  bfd_arch_arc,       /* ARC Cores */
-#define bfd_mach_arc_a4        0
-#define bfd_mach_arc_a5        1
-#define bfd_mach_arc_arc600    2
-#define bfd_mach_arc_arc601    4
-#define bfd_mach_arc_arc700    3
-#define bfd_mach_arc_arcv2     5
- bfd_arch_m32c,     /* Renesas M16C/M32C.  */
-#define bfd_mach_m16c        0x75
-#define bfd_mach_m32c        0x78
-  bfd_arch_m32r,      /* Renesas M32R (formerly Mitsubishi M32R/D) */
-#define bfd_mach_m32r          1 /* For backwards compatibility.  */
-#define bfd_mach_m32rx         'x'
-#define bfd_mach_m32r2         '2'
-  bfd_arch_mn10200,   /* Matsushita MN10200 */
-  bfd_arch_mn10300,   /* Matsushita MN10300 */
-#define bfd_mach_mn10300               300
-#define bfd_mach_am33          330
-#define bfd_mach_am33_2        332
-  bfd_arch_fr30,
-#define bfd_mach_fr30          0x46523330
-  bfd_arch_frv,
-#define bfd_mach_frv           1
-#define bfd_mach_frvsimple     2
-#define bfd_mach_fr300         300
-#define bfd_mach_fr400         400
-#define bfd_mach_fr450         450
-#define bfd_mach_frvtomcat     499     /* fr500 prototype */
-#define bfd_mach_fr500         500
-#define bfd_mach_fr550         550
-  bfd_arch_moxie,       /* The moxie processor */
-#define bfd_mach_moxie         1
-  bfd_arch_ft32,       /* The ft32 processor */
-#define bfd_mach_ft32          1
-  bfd_arch_mcore,
-  bfd_arch_mep,
-#define bfd_mach_mep           1
-#define bfd_mach_mep_h1        0x6831
-#define bfd_mach_mep_c5        0x6335
-  bfd_arch_metag,
-#define bfd_mach_metag         1
-  bfd_arch_ia64,      /* HP/Intel ia64 */
-#define bfd_mach_ia64_elf64    64
-#define bfd_mach_ia64_elf32    32
-  bfd_arch_ip2k,      /* Ubicom IP2K microcontrollers. */
-#define bfd_mach_ip2022        1
-#define bfd_mach_ip2022ext     2
- bfd_arch_iq2000,     /* Vitesse IQ2000.  */
-#define bfd_mach_iq2000        1
-#define bfd_mach_iq10          2
-  bfd_arch_epiphany,   /* Adapteva EPIPHANY */
-#define bfd_mach_epiphany16    1
-#define bfd_mach_epiphany32    2
-  bfd_arch_mt,
-#define bfd_mach_ms1           1
-#define bfd_mach_mrisc2        2
-#define bfd_mach_ms2           3
-  bfd_arch_pj,
-  bfd_arch_avr,       /* Atmel AVR microcontrollers.  */
-#define bfd_mach_avr1          1
-#define bfd_mach_avr2          2
-#define bfd_mach_avr25         25
-#define bfd_mach_avr3          3
-#define bfd_mach_avr31         31
-#define bfd_mach_avr35         35
-#define bfd_mach_avr4          4
-#define bfd_mach_avr5          5
-#define bfd_mach_avr51         51
-#define bfd_mach_avr6          6
-#define bfd_mach_avrtiny   100
-#define bfd_mach_avrxmega1 101
-#define bfd_mach_avrxmega2 102
-#define bfd_mach_avrxmega3 103
-#define bfd_mach_avrxmega4 104
-#define bfd_mach_avrxmega5 105
-#define bfd_mach_avrxmega6 106
-#define bfd_mach_avrxmega7 107
-  bfd_arch_bfin,        /* ADI Blackfin */
-#define bfd_mach_bfin          1
-  bfd_arch_cr16,       /* National Semiconductor CompactRISC (ie CR16). */
-#define bfd_mach_cr16          1
-  bfd_arch_cr16c,       /* National Semiconductor CompactRISC. */
-#define bfd_mach_cr16c         1
-  bfd_arch_crx,       /*  National Semiconductor CRX.  */
-#define bfd_mach_crx           1
-  bfd_arch_cris,      /* Axis CRIS */
-#define bfd_mach_cris_v0_v10   255
-#define bfd_mach_cris_v32      32
-#define bfd_mach_cris_v10_v32  1032
-  bfd_arch_riscv,
-#define bfd_mach_riscv32       132
-#define bfd_mach_riscv64       164
-  bfd_arch_rl78,
-#define bfd_mach_rl78  0x75
-  bfd_arch_rx,        /* Renesas RX.  */
-#define bfd_mach_rx            0x75
-  bfd_arch_s390,      /* IBM s390 */
-#define bfd_mach_s390_31       31
-#define bfd_mach_s390_64       64
-  bfd_arch_score,     /* Sunplus score */
-#define bfd_mach_score3         3
-#define bfd_mach_score7         7
-  bfd_arch_mmix,      /* Donald Knuth's educational processor.  */
-  bfd_arch_xstormy16,
-#define bfd_mach_xstormy16     1
-  bfd_arch_msp430,    /* Texas Instruments MSP430 architecture.  */
-#define bfd_mach_msp11          11
-#define bfd_mach_msp110         110
-#define bfd_mach_msp12          12
-#define bfd_mach_msp13          13
-#define bfd_mach_msp14          14
-#define bfd_mach_msp15          15
-#define bfd_mach_msp16          16
-#define bfd_mach_msp20          20
-#define bfd_mach_msp21          21
-#define bfd_mach_msp22          22
-#define bfd_mach_msp23          23
-#define bfd_mach_msp24          24
-#define bfd_mach_msp26          26
-#define bfd_mach_msp31          31
-#define bfd_mach_msp32          32
-#define bfd_mach_msp33          33
-#define bfd_mach_msp41          41
-#define bfd_mach_msp42          42
-#define bfd_mach_msp43          43
-#define bfd_mach_msp44          44
-#define bfd_mach_msp430x        45
-#define bfd_mach_msp46          46
-#define bfd_mach_msp47          47
-#define bfd_mach_msp54          54
-  bfd_arch_xc16x,     /* Infineon's XC16X Series.               */
-#define bfd_mach_xc16x         1
-#define bfd_mach_xc16xl        2
-#define bfd_mach_xc16xs        3
-  bfd_arch_xgate,   /* Freescale XGATE */
-#define bfd_mach_xgate         1
-  bfd_arch_xtensa,    /* Tensilica's Xtensa cores.  */
-#define bfd_mach_xtensa        1
-  bfd_arch_z80,
-#define bfd_mach_z80strict      1 /* No undocumented opcodes.  */
-#define bfd_mach_z80            3 /* With ixl, ixh, iyl, and iyh.  */
-#define bfd_mach_z80full        7 /* All undocumented instructions.  */
-#define bfd_mach_r800           11 /* R800: successor with multiplication.  */
-  bfd_arch_lm32,      /* Lattice Mico32 */
-#define bfd_mach_lm32      1
-  bfd_arch_microblaze,/* Xilinx MicroBlaze. */
-  bfd_arch_tilepro,   /* Tilera TILEPro */
-  bfd_arch_tilegx, /* Tilera TILE-Gx */
-#define bfd_mach_tilepro   1
-#define bfd_mach_tilegx    1
-#define bfd_mach_tilegx32  2
-  bfd_arch_aarch64,   /* AArch64  */
-#define bfd_mach_aarch64 0
-#define bfd_mach_aarch64_ilp32 32
-  bfd_arch_nios2,      /* Nios II */
-#define bfd_mach_nios2         0
-#define bfd_mach_nios2r1       1
-#define bfd_mach_nios2r2       2
-  bfd_arch_visium,     /* Visium */
-#define bfd_mach_visium        1
-  bfd_arch_last
-  };
-
-typedef struct bfd_arch_info
-{
-  int bits_per_word;
-  int bits_per_address;
-  int bits_per_byte;
-  enum bfd_architecture arch;
-  unsigned long mach;
-  const char *arch_name;
-  const char *printable_name;
-  unsigned int section_align_power;
-  /* TRUE if this is the default machine for the architecture.
-     The default arch should be the first entry for an arch so that
-     all the entries for that arch can be accessed via <<next>>.  */
-  bfd_boolean the_default;
-  const struct bfd_arch_info * (*compatible)
-    (const struct bfd_arch_info *a, const struct bfd_arch_info *b);
-
-  bfd_boolean (*scan) (const struct bfd_arch_info *, const char *);
-
-  /* Allocate via bfd_malloc and return a fill buffer of size COUNT.  If
-     IS_BIGENDIAN is TRUE, the order of bytes is big endian.  If CODE is
-     TRUE, the buffer contains code.  */
-  void *(*fill) (bfd_size_type count, bfd_boolean is_bigendian,
-                 bfd_boolean code);
-
-  const struct bfd_arch_info *next;
-}
-bfd_arch_info_type;
-
-const char *bfd_printable_name (bfd *abfd);
-
-const bfd_arch_info_type *bfd_scan_arch (const char *string);
-
-const char **bfd_arch_list (void);
-
-const bfd_arch_info_type *bfd_arch_get_compatible
-   (const bfd *abfd, const bfd *bbfd, bfd_boolean accept_unknowns);
-
-void bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg);
-
-bfd_boolean bfd_default_set_arch_mach
-   (bfd *abfd, enum bfd_architecture arch, unsigned long mach);
-
-enum bfd_architecture bfd_get_arch (bfd *abfd);
-
-unsigned long bfd_get_mach (bfd *abfd);
-
-unsigned int bfd_arch_bits_per_byte (bfd *abfd);
-
-unsigned int bfd_arch_bits_per_address (bfd *abfd);
-
-const bfd_arch_info_type *bfd_get_arch_info (bfd *abfd);
-
-const bfd_arch_info_type *bfd_lookup_arch
-   (enum bfd_architecture arch, unsigned long machine);
-
-const char *bfd_printable_arch_mach
-   (enum bfd_architecture arch, unsigned long machine);
-
-unsigned int bfd_octets_per_byte (bfd *abfd);
-
-unsigned int bfd_arch_mach_octets_per_byte
-   (enum bfd_architecture arch, unsigned long machine);
-
-/* Extracted from reloc.c.  */
-
-typedef enum bfd_reloc_status
-{
-  /* No errors detected.  */
-  bfd_reloc_ok,
-
-  /* The relocation was performed, but there was an overflow.  */
-  bfd_reloc_overflow,
-
-  /* The address to relocate was not within the section supplied.  */
-  bfd_reloc_outofrange,
-
-  /* Used by special functions.  */
-  bfd_reloc_continue,
-
-  /* Unsupported relocation size requested.  */
-  bfd_reloc_notsupported,
-
-  /* Unused.  */
-  bfd_reloc_other,
-
-  /* The symbol to relocate against was undefined.  */
-  bfd_reloc_undefined,
-
-  /* The relocation was performed, but may not be ok - presently
-     generated only when linking i960 coff files with i960 b.out
-     symbols.  If this type is returned, the error_message argument
-     to bfd_perform_relocation will be set.  */
-  bfd_reloc_dangerous
- }
- bfd_reloc_status_type;
-
-
-typedef struct reloc_cache_entry
-{
-  /* A pointer into the canonical table of pointers.  */
-  struct bfd_symbol **sym_ptr_ptr;
-
-  /* offset in section.  */
-  bfd_size_type address;
-
-  /* addend for relocation value.  */
-  bfd_vma addend;
-
-  /* Pointer to how to perform the required relocation.  */
-  reloc_howto_type *howto;
-
-}
-arelent;
-
-
-enum complain_overflow
-{
-  /* Do not complain on overflow.  */
-  complain_overflow_dont,
-
-  /* Complain if the value overflows when considered as a signed
-     number one bit larger than the field.  ie. A bitfield of N bits
-     is allowed to represent -2**n to 2**n-1.  */
-  complain_overflow_bitfield,
-
-  /* Complain if the value overflows when considered as a signed
-     number.  */
-  complain_overflow_signed,
-
-  /* Complain if the value overflows when considered as an
-     unsigned number.  */
-  complain_overflow_unsigned
-};
-struct bfd_symbol;             /* Forward declaration.  */
-
-struct reloc_howto_struct
-{
-  /*  The type field has mainly a documentary use - the back end can
-      do what it wants with it, though normally the back end's
-      external idea of what a reloc number is stored
-      in this field.  For example, a PC relative word relocation
-      in a coff environment has the type 023 - because that's
-      what the outside world calls a R_PCRWORD reloc.  */
-  unsigned int type;
-
-  /*  The value the final relocation is shifted right by.  This drops
-      unwanted data from the relocation.  */
-  unsigned int rightshift;
-
-  /*  The size of the item to be relocated.  This is *not* a
-      power-of-two measure.  To get the number of bytes operated
-      on by a type of relocation, use bfd_get_reloc_size.  */
-  int size;
-
-  /*  The number of bits in the item to be relocated.  This is used
-      when doing overflow checking.  */
-  unsigned int bitsize;
-
-  /*  The relocation is relative to the field being relocated.  */
-  bfd_boolean pc_relative;
-
-  /*  The bit position of the reloc value in the destination.
-      The relocated value is left shifted by this amount.  */
-  unsigned int bitpos;
-
-  /* What type of overflow error should be checked for when
-     relocating.  */
-  enum complain_overflow complain_on_overflow;
-
-  /* If this field is non null, then the supplied function is
-     called rather than the normal function.  This allows really
-     strange relocation methods to be accommodated (e.g., i960 callj
-     instructions).  */
-  bfd_reloc_status_type (*special_function)
-    (bfd *, arelent *, struct bfd_symbol *, void *, asection *,
-     bfd *, char **);
-
-  /* The textual name of the relocation type.  */
-  char *name;
-
-  /* Some formats record a relocation addend in the section contents
-     rather than with the relocation.  For ELF formats this is the
-     distinction between USE_REL and USE_RELA (though the code checks
-     for USE_REL == 1/0).  The value of this field is TRUE if the
-     addend is recorded with the section contents; when performing a
-     partial link (ld -r) the section contents (the data) will be
-     modified.  The value of this field is FALSE if addends are
-     recorded with the relocation (in arelent.addend); when performing
-     a partial link the relocation will be modified.
-     All relocations for all ELF USE_RELA targets should set this field
-     to FALSE (values of TRUE should be looked on with suspicion).
-     However, the converse is not true: not all relocations of all ELF
-     USE_REL targets set this field to TRUE.  Why this is so is peculiar
-     to each particular target.  For relocs that aren't used in partial
-     links (e.g. GOT stuff) it doesn't matter what this is set to.  */
-  bfd_boolean partial_inplace;
-
-  /* src_mask selects the part of the instruction (or data) to be used
-     in the relocation sum.  If the target relocations don't have an
-     addend in the reloc, eg. ELF USE_REL, src_mask will normally equal
-     dst_mask to extract the addend from the section contents.  If
-     relocations do have an addend in the reloc, eg. ELF USE_RELA, this
-     field should be zero.  Non-zero values for ELF USE_RELA targets are
-     bogus as in those cases the value in the dst_mask part of the
-     section contents should be treated as garbage.  */
-  bfd_vma src_mask;
-
-  /* dst_mask selects which parts of the instruction (or data) are
-     replaced with a relocated value.  */
-  bfd_vma dst_mask;
-
-  /* When some formats create PC relative instructions, they leave
-     the value of the pc of the place being relocated in the offset
-     slot of the instruction, so that a PC relative relocation can
-     be made just by adding in an ordinary offset (e.g., sun3 a.out).
-     Some formats leave the displacement part of an instruction
-     empty (e.g., m88k bcs); this flag signals the fact.  */
-  bfd_boolean pcrel_offset;
-};
-
-#define HOWTO(C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC) \
-  { (unsigned) C, R, S, B, P, BI, O, SF, NAME, INPLACE, MASKSRC, MASKDST, PC }
-#define NEWHOWTO(FUNCTION, NAME, SIZE, REL, IN) \
-  HOWTO (0, 0, SIZE, 0, REL, 0, complain_overflow_dont, FUNCTION, \
-         NAME, FALSE, 0, 0, IN)
-
-#define EMPTY_HOWTO(C) \
-  HOWTO ((C), 0, 0, 0, FALSE, 0, complain_overflow_dont, NULL, \
-         NULL, FALSE, 0, 0, FALSE)
-
-#define HOWTO_PREPARE(relocation, symbol)               \
-  {                                                     \
-    if (symbol != NULL)                                 \
-      {                                                 \
-        if (bfd_is_com_section (symbol->section))       \
-          {                                             \
-            relocation = 0;                             \
-          }                                             \
-        else                                            \
-          {                                             \
-            relocation = symbol->value;                 \
-          }                                             \
-      }                                                 \
-  }
-
-unsigned int bfd_get_reloc_size (reloc_howto_type *);
-
-typedef struct relent_chain
-{
-  arelent relent;
-  struct relent_chain *next;
-}
-arelent_chain;
-
-bfd_reloc_status_type bfd_check_overflow
-   (enum complain_overflow how,
-    unsigned int bitsize,
-    unsigned int rightshift,
-    unsigned int addrsize,
-    bfd_vma relocation);
-
-bfd_reloc_status_type bfd_perform_relocation
-   (bfd *abfd,
-    arelent *reloc_entry,
-    void *data,
-    asection *input_section,
-    bfd *output_bfd,
-    char **error_message);
-
-bfd_reloc_status_type bfd_install_relocation
-   (bfd *abfd,
-    arelent *reloc_entry,
-    void *data, bfd_vma data_start,
-    asection *input_section,
-    char **error_message);
-
-enum bfd_reloc_code_real {
-  _dummy_first_bfd_reloc_code_real,
-
-
-/* Basic absolute relocations of N bits.  */
-  BFD_RELOC_64,
-  BFD_RELOC_32,
-  BFD_RELOC_26,
-  BFD_RELOC_24,
-  BFD_RELOC_16,
-  BFD_RELOC_14,
-  BFD_RELOC_8,
-
-/* PC-relative relocations.  Sometimes these are relative to the address
-of the relocation itself; sometimes they are relative to the start of
-the section containing the relocation.  It depends on the specific target.
-
-The 24-bit relocation is used in some Intel 960 configurations.  */
-  BFD_RELOC_64_PCREL,
-  BFD_RELOC_32_PCREL,
-  BFD_RELOC_24_PCREL,
-  BFD_RELOC_16_PCREL,
-  BFD_RELOC_12_PCREL,
-  BFD_RELOC_8_PCREL,
-
-/* Section relative relocations.  Some targets need this for DWARF2.  */
-  BFD_RELOC_32_SECREL,
-
-/* For ELF.  */
-  BFD_RELOC_32_GOT_PCREL,
-  BFD_RELOC_16_GOT_PCREL,
-  BFD_RELOC_8_GOT_PCREL,
-  BFD_RELOC_32_GOTOFF,
-  BFD_RELOC_16_GOTOFF,
-  BFD_RELOC_LO16_GOTOFF,
-  BFD_RELOC_HI16_GOTOFF,
-  BFD_RELOC_HI16_S_GOTOFF,
-  BFD_RELOC_8_GOTOFF,
-  BFD_RELOC_64_PLT_PCREL,
-  BFD_RELOC_32_PLT_PCREL,
-  BFD_RELOC_24_PLT_PCREL,
-  BFD_RELOC_16_PLT_PCREL,
-  BFD_RELOC_8_PLT_PCREL,
-  BFD_RELOC_64_PLTOFF,
-  BFD_RELOC_32_PLTOFF,
-  BFD_RELOC_16_PLTOFF,
-  BFD_RELOC_LO16_PLTOFF,
-  BFD_RELOC_HI16_PLTOFF,
-  BFD_RELOC_HI16_S_PLTOFF,
-  BFD_RELOC_8_PLTOFF,
-
-/* Size relocations.  */
-  BFD_RELOC_SIZE32,
-  BFD_RELOC_SIZE64,
-
-/* Relocations used by 68K ELF.  */
-  BFD_RELOC_68K_GLOB_DAT,
-  BFD_RELOC_68K_JMP_SLOT,
-  BFD_RELOC_68K_RELATIVE,
-  BFD_RELOC_68K_TLS_GD32,
-  BFD_RELOC_68K_TLS_GD16,
-  BFD_RELOC_68K_TLS_GD8,
-  BFD_RELOC_68K_TLS_LDM32,
-  BFD_RELOC_68K_TLS_LDM16,
-  BFD_RELOC_68K_TLS_LDM8,
-  BFD_RELOC_68K_TLS_LDO32,
-  BFD_RELOC_68K_TLS_LDO16,
-  BFD_RELOC_68K_TLS_LDO8,
-  BFD_RELOC_68K_TLS_IE32,
-  BFD_RELOC_68K_TLS_IE16,
-  BFD_RELOC_68K_TLS_IE8,
-  BFD_RELOC_68K_TLS_LE32,
-  BFD_RELOC_68K_TLS_LE16,
-  BFD_RELOC_68K_TLS_LE8,
-
-/* Linkage-table relative.  */
-  BFD_RELOC_32_BASEREL,
-  BFD_RELOC_16_BASEREL,
-  BFD_RELOC_LO16_BASEREL,
-  BFD_RELOC_HI16_BASEREL,
-  BFD_RELOC_HI16_S_BASEREL,
-  BFD_RELOC_8_BASEREL,
-  BFD_RELOC_RVA,
-
-/* Absolute 8-bit relocation, but used to form an address like 0xFFnn.  */
-  BFD_RELOC_8_FFnn,
-
-/* These PC-relative relocations are stored as word displacements --
-i.e., byte displacements shifted right two bits.  The 30-bit word
-displacement (<<32_PCREL_S2>> -- 32 bits, shifted 2) is used on the
-SPARC.  (SPARC tools generally refer to this as <<WDISP30>>.)  The
-signed 16-bit displacement is used on the MIPS, and the 23-bit
-displacement is used on the Alpha.  */
-  BFD_RELOC_32_PCREL_S2,
-  BFD_RELOC_16_PCREL_S2,
-  BFD_RELOC_23_PCREL_S2,
-
-/* High 22 bits and low 10 bits of 32-bit value, placed into lower bits of
-the target word.  These are used on the SPARC.  */
-  BFD_RELOC_HI22,
-  BFD_RELOC_LO10,
-
-/* For systems that allocate a Global Pointer register, these are
-displacements off that register.  These relocation types are
-handled specially, because the value the register will have is
-decided relatively late.  */
-  BFD_RELOC_GPREL16,
-  BFD_RELOC_GPREL32,
-
-/* Reloc types used for i960/b.out.  */
-  BFD_RELOC_I960_CALLJ,
-
-/* SPARC ELF relocations.  There is probably some overlap with other
-relocation types already defined.  */
-  BFD_RELOC_NONE,
-  BFD_RELOC_SPARC_WDISP22,
-  BFD_RELOC_SPARC22,
-  BFD_RELOC_SPARC13,
-  BFD_RELOC_SPARC_GOT10,
-  BFD_RELOC_SPARC_GOT13,
-  BFD_RELOC_SPARC_GOT22,
-  BFD_RELOC_SPARC_PC10,
-  BFD_RELOC_SPARC_PC22,
-  BFD_RELOC_SPARC_WPLT30,
-  BFD_RELOC_SPARC_COPY,
-  BFD_RELOC_SPARC_GLOB_DAT,
-  BFD_RELOC_SPARC_JMP_SLOT,
-  BFD_RELOC_SPARC_RELATIVE,
-  BFD_RELOC_SPARC_UA16,
-  BFD_RELOC_SPARC_UA32,
-  BFD_RELOC_SPARC_UA64,
-  BFD_RELOC_SPARC_GOTDATA_HIX22,
-  BFD_RELOC_SPARC_GOTDATA_LOX10,
-  BFD_RELOC_SPARC_GOTDATA_OP_HIX22,
-  BFD_RELOC_SPARC_GOTDATA_OP_LOX10,
-  BFD_RELOC_SPARC_GOTDATA_OP,
-  BFD_RELOC_SPARC_JMP_IREL,
-  BFD_RELOC_SPARC_IRELATIVE,
-
-/* I think these are specific to SPARC a.out (e.g., Sun 4).  */
-  BFD_RELOC_SPARC_BASE13,
-  BFD_RELOC_SPARC_BASE22,
-
-/* SPARC64 relocations  */
-#define BFD_RELOC_SPARC_64 BFD_RELOC_64
-  BFD_RELOC_SPARC_10,
-  BFD_RELOC_SPARC_11,
-  BFD_RELOC_SPARC_OLO10,
-  BFD_RELOC_SPARC_HH22,
-  BFD_RELOC_SPARC_HM10,
-  BFD_RELOC_SPARC_LM22,
-  BFD_RELOC_SPARC_PC_HH22,
-  BFD_RELOC_SPARC_PC_HM10,
-  BFD_RELOC_SPARC_PC_LM22,
-  BFD_RELOC_SPARC_WDISP16,
-  BFD_RELOC_SPARC_WDISP19,
-  BFD_RELOC_SPARC_7,
-  BFD_RELOC_SPARC_6,
-  BFD_RELOC_SPARC_5,
-#define BFD_RELOC_SPARC_DISP64 BFD_RELOC_64_PCREL
-  BFD_RELOC_SPARC_PLT32,
-  BFD_RELOC_SPARC_PLT64,
-  BFD_RELOC_SPARC_HIX22,
-  BFD_RELOC_SPARC_LOX10,
-  BFD_RELOC_SPARC_H44,
-  BFD_RELOC_SPARC_M44,
-  BFD_RELOC_SPARC_L44,
-  BFD_RELOC_SPARC_REGISTER,
-  BFD_RELOC_SPARC_H34,
-  BFD_RELOC_SPARC_SIZE32,
-  BFD_RELOC_SPARC_SIZE64,
-  BFD_RELOC_SPARC_WDISP10,
-
-/* SPARC little endian relocation  */
-  BFD_RELOC_SPARC_REV32,
-
-/* SPARC TLS relocations  */
-  BFD_RELOC_SPARC_TLS_GD_HI22,
-  BFD_RELOC_SPARC_TLS_GD_LO10,
-  BFD_RELOC_SPARC_TLS_GD_ADD,
-  BFD_RELOC_SPARC_TLS_GD_CALL,
-  BFD_RELOC_SPARC_TLS_LDM_HI22,
-  BFD_RELOC_SPARC_TLS_LDM_LO10,
-  BFD_RELOC_SPARC_TLS_LDM_ADD,
-  BFD_RELOC_SPARC_TLS_LDM_CALL,
-  BFD_RELOC_SPARC_TLS_LDO_HIX22,
-  BFD_RELOC_SPARC_TLS_LDO_LOX10,
-  BFD_RELOC_SPARC_TLS_LDO_ADD,
-  BFD_RELOC_SPARC_TLS_IE_HI22,
-  BFD_RELOC_SPARC_TLS_IE_LO10,
-  BFD_RELOC_SPARC_TLS_IE_LD,
-  BFD_RELOC_SPARC_TLS_IE_LDX,
-  BFD_RELOC_SPARC_TLS_IE_ADD,
-  BFD_RELOC_SPARC_TLS_LE_HIX22,
-  BFD_RELOC_SPARC_TLS_LE_LOX10,
-  BFD_RELOC_SPARC_TLS_DTPMOD32,
-  BFD_RELOC_SPARC_TLS_DTPMOD64,
-  BFD_RELOC_SPARC_TLS_DTPOFF32,
-  BFD_RELOC_SPARC_TLS_DTPOFF64,
-  BFD_RELOC_SPARC_TLS_TPOFF32,
-  BFD_RELOC_SPARC_TLS_TPOFF64,
-
-/* SPU Relocations.  */
-  BFD_RELOC_SPU_IMM7,
-  BFD_RELOC_SPU_IMM8,
-  BFD_RELOC_SPU_IMM10,
-  BFD_RELOC_SPU_IMM10W,
-  BFD_RELOC_SPU_IMM16,
-  BFD_RELOC_SPU_IMM16W,
-  BFD_RELOC_SPU_IMM18,
-  BFD_RELOC_SPU_PCREL9a,
-  BFD_RELOC_SPU_PCREL9b,
-  BFD_RELOC_SPU_PCREL16,
-  BFD_RELOC_SPU_LO16,
-  BFD_RELOC_SPU_HI16,
-  BFD_RELOC_SPU_PPU32,
-  BFD_RELOC_SPU_PPU64,
-  BFD_RELOC_SPU_ADD_PIC,
-
-/* Alpha ECOFF and ELF relocations.  Some of these treat the symbol or
-"addend" in some special way.
-For GPDISP_HI16 ("gpdisp") relocations, the symbol is ignored when
-writing; when reading, it will be the absolute section symbol.  The
-addend is the displacement in bytes of the "lda" instruction from
-the "ldah" instruction (which is at the address of this reloc).  */
-  BFD_RELOC_ALPHA_GPDISP_HI16,
-
-/* For GPDISP_LO16 ("ignore") relocations, the symbol is handled as
-with GPDISP_HI16 relocs.  The addend is ignored when writing the
-relocations out, and is filled in with the file's GP value on
-reading, for convenience.  */
-  BFD_RELOC_ALPHA_GPDISP_LO16,
-
-/* The ELF GPDISP relocation is exactly the same as the GPDISP_HI16
-relocation except that there is no accompanying GPDISP_LO16
-relocation.  */
-  BFD_RELOC_ALPHA_GPDISP,
-
-/* The Alpha LITERAL/LITUSE relocs are produced by a symbol reference;
-the assembler turns it into a LDQ instruction to load the address of
-the symbol, and then fills in a register in the real instruction.
-
-The LITERAL reloc, at the LDQ instruction, refers to the .lita
-section symbol.  The addend is ignored when writing, but is filled
-in with the file's GP value on reading, for convenience, as with the
-GPDISP_LO16 reloc.
-
-The ELF_LITERAL reloc is somewhere between 16_GOTOFF and GPDISP_LO16.
-It should refer to the symbol to be referenced, as with 16_GOTOFF,
-but it generates output not based on the position within the .got
-section, but relative to the GP value chosen for the file during the
-final link stage.
-
-The LITUSE reloc, on the instruction using the loaded address, gives
-information to the linker that it might be able to use to optimize
-away some literal section references.  The symbol is ignored (read
-as the absolute section symbol), and the "addend" indicates the type
-of instruction using the register:
-1 - "memory" fmt insn
-2 - byte-manipulation (byte offset reg)
-3 - jsr (target of branch)  */
-  BFD_RELOC_ALPHA_LITERAL,
-  BFD_RELOC_ALPHA_ELF_LITERAL,
-  BFD_RELOC_ALPHA_LITUSE,
-
-/* The HINT relocation indicates a value that should be filled into the
-"hint" field of a jmp/jsr/ret instruction, for possible branch-
-prediction logic which may be provided on some processors.  */
-  BFD_RELOC_ALPHA_HINT,
-
-/* The LINKAGE relocation outputs a linkage pair in the object file,
-which is filled by the linker.  */
-  BFD_RELOC_ALPHA_LINKAGE,
-
-/* The CODEADDR relocation outputs a STO_CA in the object file,
-which is filled by the linker.  */
-  BFD_RELOC_ALPHA_CODEADDR,
-
-/* The GPREL_HI/LO relocations together form a 32-bit offset from the
-GP register.  */
-  BFD_RELOC_ALPHA_GPREL_HI16,
-  BFD_RELOC_ALPHA_GPREL_LO16,
-
-/* Like BFD_RELOC_23_PCREL_S2, except that the source and target must
-share a common GP, and the target address is adjusted for
-STO_ALPHA_STD_GPLOAD.  */
-  BFD_RELOC_ALPHA_BRSGP,
-
-/* The NOP relocation outputs a NOP if the longword displacement
-between two procedure entry points is < 2^21.  */
-  BFD_RELOC_ALPHA_NOP,
-
-/* The BSR relocation outputs a BSR if the longword displacement
-between two procedure entry points is < 2^21.  */
-  BFD_RELOC_ALPHA_BSR,
-
-/* The LDA relocation outputs a LDA if the longword displacement
-between two procedure entry points is < 2^16.  */
-  BFD_RELOC_ALPHA_LDA,
-
-/* The BOH relocation outputs a BSR if the longword displacement
-between two procedure entry points is < 2^21, or else a hint.  */
-  BFD_RELOC_ALPHA_BOH,
-
-/* Alpha thread-local storage relocations.  */
-  BFD_RELOC_ALPHA_TLSGD,
-  BFD_RELOC_ALPHA_TLSLDM,
-  BFD_RELOC_ALPHA_DTPMOD64,
-  BFD_RELOC_ALPHA_GOTDTPREL16,
-  BFD_RELOC_ALPHA_DTPREL64,
-  BFD_RELOC_ALPHA_DTPREL_HI16,
-  BFD_RELOC_ALPHA_DTPREL_LO16,
-  BFD_RELOC_ALPHA_DTPREL16,
-  BFD_RELOC_ALPHA_GOTTPREL16,
-  BFD_RELOC_ALPHA_TPREL64,
-  BFD_RELOC_ALPHA_TPREL_HI16,
-  BFD_RELOC_ALPHA_TPREL_LO16,
-  BFD_RELOC_ALPHA_TPREL16,
-
-/* The MIPS jump instruction.  */
-  BFD_RELOC_MIPS_JMP,
-  BFD_RELOC_MICROMIPS_JMP,
-
-/* The MIPS16 jump instruction.  */
-  BFD_RELOC_MIPS16_JMP,
-
-/* MIPS16 GP relative reloc.  */
-  BFD_RELOC_MIPS16_GPREL,
-
-/* High 16 bits of 32-bit value; simple reloc.  */
-  BFD_RELOC_HI16,
-
-/* High 16 bits of 32-bit value but the low 16 bits will be sign
-extended and added to form the final result.  If the low 16
-bits form a negative number, we need to add one to the high value
-to compensate for the borrow when the low bits are added.  */
-  BFD_RELOC_HI16_S,
-
-/* Low 16 bits.  */
-  BFD_RELOC_LO16,
-
-/* High 16 bits of 32-bit pc-relative value  */
-  BFD_RELOC_HI16_PCREL,
-
-/* High 16 bits of 32-bit pc-relative value, adjusted  */
-  BFD_RELOC_HI16_S_PCREL,
-
-/* Low 16 bits of pc-relative value  */
-  BFD_RELOC_LO16_PCREL,
-
-/* Equivalent of BFD_RELOC_MIPS_*, but with the MIPS16 layout of
-16-bit immediate fields  */
-  BFD_RELOC_MIPS16_GOT16,
-  BFD_RELOC_MIPS16_CALL16,
-
-/* MIPS16 high 16 bits of 32-bit value.  */
-  BFD_RELOC_MIPS16_HI16,
-
-/* MIPS16 high 16 bits of 32-bit value but the low 16 bits will be sign
-extended and added to form the final result.  If the low 16
-bits form a negative number, we need to add one to the high value
-to compensate for the borrow when the low bits are added.  */
-  BFD_RELOC_MIPS16_HI16_S,
-
-/* MIPS16 low 16 bits.  */
-  BFD_RELOC_MIPS16_LO16,
-
-/* MIPS16 TLS relocations  */
-  BFD_RELOC_MIPS16_TLS_GD,
-  BFD_RELOC_MIPS16_TLS_LDM,
-  BFD_RELOC_MIPS16_TLS_DTPREL_HI16,
-  BFD_RELOC_MIPS16_TLS_DTPREL_LO16,
-  BFD_RELOC_MIPS16_TLS_GOTTPREL,
-  BFD_RELOC_MIPS16_TLS_TPREL_HI16,
-  BFD_RELOC_MIPS16_TLS_TPREL_LO16,
-
-/* Relocation against a MIPS literal section.  */
-  BFD_RELOC_MIPS_LITERAL,
-  BFD_RELOC_MICROMIPS_LITERAL,
-
-/* microMIPS PC-relative relocations.  */
-  BFD_RELOC_MICROMIPS_7_PCREL_S1,
-  BFD_RELOC_MICROMIPS_10_PCREL_S1,
-  BFD_RELOC_MICROMIPS_16_PCREL_S1,
-
-/* MIPS16 PC-relative relocation.  */
-  BFD_RELOC_MIPS16_16_PCREL_S1,
-
-/* MIPS PC-relative relocations.  */
-  BFD_RELOC_MIPS_21_PCREL_S2,
-  BFD_RELOC_MIPS_26_PCREL_S2,
-  BFD_RELOC_MIPS_18_PCREL_S3,
-  BFD_RELOC_MIPS_19_PCREL_S2,
-
-/* microMIPS versions of generic BFD relocs.  */
-  BFD_RELOC_MICROMIPS_GPREL16,
-  BFD_RELOC_MICROMIPS_HI16,
-  BFD_RELOC_MICROMIPS_HI16_S,
-  BFD_RELOC_MICROMIPS_LO16,
-
-/* MIPS ELF relocations.  */
-  BFD_RELOC_MIPS_GOT16,
-  BFD_RELOC_MICROMIPS_GOT16,
-  BFD_RELOC_MIPS_CALL16,
-  BFD_RELOC_MICROMIPS_CALL16,
-  BFD_RELOC_MIPS_GOT_HI16,
-  BFD_RELOC_MICROMIPS_GOT_HI16,
-  BFD_RELOC_MIPS_GOT_LO16,
-  BFD_RELOC_MICROMIPS_GOT_LO16,
-  BFD_RELOC_MIPS_CALL_HI16,
-  BFD_RELOC_MICROMIPS_CALL_HI16,
-  BFD_RELOC_MIPS_CALL_LO16,
-  BFD_RELOC_MICROMIPS_CALL_LO16,
-  BFD_RELOC_MIPS_SUB,
-  BFD_RELOC_MICROMIPS_SUB,
-  BFD_RELOC_MIPS_GOT_PAGE,
-  BFD_RELOC_MICROMIPS_GOT_PAGE,
-  BFD_RELOC_MIPS_GOT_OFST,
-  BFD_RELOC_MICROMIPS_GOT_OFST,
-  BFD_RELOC_MIPS_GOT_DISP,
-  BFD_RELOC_MICROMIPS_GOT_DISP,
-  BFD_RELOC_MIPS_SHIFT5,
-  BFD_RELOC_MIPS_SHIFT6,
-  BFD_RELOC_MIPS_INSERT_A,
-  BFD_RELOC_MIPS_INSERT_B,
-  BFD_RELOC_MIPS_DELETE,
-  BFD_RELOC_MIPS_HIGHEST,
-  BFD_RELOC_MICROMIPS_HIGHEST,
-  BFD_RELOC_MIPS_HIGHER,
-  BFD_RELOC_MICROMIPS_HIGHER,
-  BFD_RELOC_MIPS_SCN_DISP,
-  BFD_RELOC_MICROMIPS_SCN_DISP,
-  BFD_RELOC_MIPS_REL16,
-  BFD_RELOC_MIPS_RELGOT,
-  BFD_RELOC_MIPS_JALR,
-  BFD_RELOC_MICROMIPS_JALR,
-  BFD_RELOC_MIPS_TLS_DTPMOD32,
-  BFD_RELOC_MIPS_TLS_DTPREL32,
-  BFD_RELOC_MIPS_TLS_DTPMOD64,
-  BFD_RELOC_MIPS_TLS_DTPREL64,
-  BFD_RELOC_MIPS_TLS_GD,
-  BFD_RELOC_MICROMIPS_TLS_GD,
-  BFD_RELOC_MIPS_TLS_LDM,
-  BFD_RELOC_MICROMIPS_TLS_LDM,
-  BFD_RELOC_MIPS_TLS_DTPREL_HI16,
-  BFD_RELOC_MICROMIPS_TLS_DTPREL_HI16,
-  BFD_RELOC_MIPS_TLS_DTPREL_LO16,
-  BFD_RELOC_MICROMIPS_TLS_DTPREL_LO16,
-  BFD_RELOC_MIPS_TLS_GOTTPREL,
-  BFD_RELOC_MICROMIPS_TLS_GOTTPREL,
-  BFD_RELOC_MIPS_TLS_TPREL32,
-  BFD_RELOC_MIPS_TLS_TPREL64,
-  BFD_RELOC_MIPS_TLS_TPREL_HI16,
-  BFD_RELOC_MICROMIPS_TLS_TPREL_HI16,
-  BFD_RELOC_MIPS_TLS_TPREL_LO16,
-  BFD_RELOC_MICROMIPS_TLS_TPREL_LO16,
-  BFD_RELOC_MIPS_EH,
-
-
-/* MIPS ELF relocations (VxWorks and PLT extensions).  */
-  BFD_RELOC_MIPS_COPY,
-  BFD_RELOC_MIPS_JUMP_SLOT,
-
-
-/* Moxie ELF relocations.  */
-  BFD_RELOC_MOXIE_10_PCREL,
-
-
-/* FT32 ELF relocations.  */
-  BFD_RELOC_FT32_10,
-  BFD_RELOC_FT32_20,
-  BFD_RELOC_FT32_17,
-  BFD_RELOC_FT32_18,
-
-
-/* Fujitsu Frv Relocations.  */
-  BFD_RELOC_FRV_LABEL16,
-  BFD_RELOC_FRV_LABEL24,
-  BFD_RELOC_FRV_LO16,
-  BFD_RELOC_FRV_HI16,
-  BFD_RELOC_FRV_GPREL12,
-  BFD_RELOC_FRV_GPRELU12,
-  BFD_RELOC_FRV_GPREL32,
-  BFD_RELOC_FRV_GPRELHI,
-  BFD_RELOC_FRV_GPRELLO,
-  BFD_RELOC_FRV_GOT12,
-  BFD_RELOC_FRV_GOTHI,
-  BFD_RELOC_FRV_GOTLO,
-  BFD_RELOC_FRV_FUNCDESC,
-  BFD_RELOC_FRV_FUNCDESC_GOT12,
-  BFD_RELOC_FRV_FUNCDESC_GOTHI,
-  BFD_RELOC_FRV_FUNCDESC_GOTLO,
-  BFD_RELOC_FRV_FUNCDESC_VALUE,
-  BFD_RELOC_FRV_FUNCDESC_GOTOFF12,
-  BFD_RELOC_FRV_FUNCDESC_GOTOFFHI,
-  BFD_RELOC_FRV_FUNCDESC_GOTOFFLO,
-  BFD_RELOC_FRV_GOTOFF12,
-  BFD_RELOC_FRV_GOTOFFHI,
-  BFD_RELOC_FRV_GOTOFFLO,
-  BFD_RELOC_FRV_GETTLSOFF,
-  BFD_RELOC_FRV_TLSDESC_VALUE,
-  BFD_RELOC_FRV_GOTTLSDESC12,
-  BFD_RELOC_FRV_GOTTLSDESCHI,
-  BFD_RELOC_FRV_GOTTLSDESCLO,
-  BFD_RELOC_FRV_TLSMOFF12,
-  BFD_RELOC_FRV_TLSMOFFHI,
-  BFD_RELOC_FRV_TLSMOFFLO,
-  BFD_RELOC_FRV_GOTTLSOFF12,
-  BFD_RELOC_FRV_GOTTLSOFFHI,
-  BFD_RELOC_FRV_GOTTLSOFFLO,
-  BFD_RELOC_FRV_TLSOFF,
-  BFD_RELOC_FRV_TLSDESC_RELAX,
-  BFD_RELOC_FRV_GETTLSOFF_RELAX,
-  BFD_RELOC_FRV_TLSOFF_RELAX,
-  BFD_RELOC_FRV_TLSMOFF,
-
-
-/* This is a 24bit GOT-relative reloc for the mn10300.  */
-  BFD_RELOC_MN10300_GOTOFF24,
-
-/* This is a 32bit GOT-relative reloc for the mn10300, offset by two bytes
-in the instruction.  */
-  BFD_RELOC_MN10300_GOT32,
-
-/* This is a 24bit GOT-relative reloc for the mn10300, offset by two bytes
-in the instruction.  */
-  BFD_RELOC_MN10300_GOT24,
-
-/* This is a 16bit GOT-relative reloc for the mn10300, offset by two bytes
-in the instruction.  */
-  BFD_RELOC_MN10300_GOT16,
-
-/* Copy symbol at runtime.  */
-  BFD_RELOC_MN10300_COPY,
-
-/* Create GOT entry.  */
-  BFD_RELOC_MN10300_GLOB_DAT,
-
-/* Create PLT entry.  */
-  BFD_RELOC_MN10300_JMP_SLOT,
-
-/* Adjust by program base.  */
-  BFD_RELOC_MN10300_RELATIVE,
-
-/* Together with another reloc targeted at the same location,
-allows for a value that is the difference of two symbols
-in the same section.  */
-  BFD_RELOC_MN10300_SYM_DIFF,
-
-/* The addend of this reloc is an alignment power that must
-be honoured at the offset's location, regardless of linker
-relaxation.  */
-  BFD_RELOC_MN10300_ALIGN,
-
-/* Various TLS-related relocations.  */
-  BFD_RELOC_MN10300_TLS_GD,
-  BFD_RELOC_MN10300_TLS_LD,
-  BFD_RELOC_MN10300_TLS_LDO,
-  BFD_RELOC_MN10300_TLS_GOTIE,
-  BFD_RELOC_MN10300_TLS_IE,
-  BFD_RELOC_MN10300_TLS_LE,
-  BFD_RELOC_MN10300_TLS_DTPMOD,
-  BFD_RELOC_MN10300_TLS_DTPOFF,
-  BFD_RELOC_MN10300_TLS_TPOFF,
-
-/* This is a 32bit pcrel reloc for the mn10300, offset by two bytes in the
-instruction.  */
-  BFD_RELOC_MN10300_32_PCREL,
-
-/* This is a 16bit pcrel reloc for the mn10300, offset by two bytes in the
-instruction.  */
-  BFD_RELOC_MN10300_16_PCREL,
-
-
-/* i386/elf relocations  */
-  BFD_RELOC_386_GOT32,
-  BFD_RELOC_386_PLT32,
-  BFD_RELOC_386_COPY,
-  BFD_RELOC_386_GLOB_DAT,
-  BFD_RELOC_386_JUMP_SLOT,
-  BFD_RELOC_386_RELATIVE,
-  BFD_RELOC_386_GOTOFF,
-  BFD_RELOC_386_GOTPC,
-  BFD_RELOC_386_TLS_TPOFF,
-  BFD_RELOC_386_TLS_IE,
-  BFD_RELOC_386_TLS_GOTIE,
-  BFD_RELOC_386_TLS_LE,
-  BFD_RELOC_386_TLS_GD,
-  BFD_RELOC_386_TLS_LDM,
-  BFD_RELOC_386_TLS_LDO_32,
-  BFD_RELOC_386_TLS_IE_32,
-  BFD_RELOC_386_TLS_LE_32,
-  BFD_RELOC_386_TLS_DTPMOD32,
-  BFD_RELOC_386_TLS_DTPOFF32,
-  BFD_RELOC_386_TLS_TPOFF32,
-  BFD_RELOC_386_TLS_GOTDESC,
-  BFD_RELOC_386_TLS_DESC_CALL,
-  BFD_RELOC_386_TLS_DESC,
-  BFD_RELOC_386_IRELATIVE,
-  BFD_RELOC_386_GOT32X,
-
-/* x86-64/elf relocations  */
-  BFD_RELOC_X86_64_GOT32,
-  BFD_RELOC_X86_64_PLT32,
-  BFD_RELOC_X86_64_COPY,
-  BFD_RELOC_X86_64_GLOB_DAT,
-  BFD_RELOC_X86_64_JUMP_SLOT,
-  BFD_RELOC_X86_64_RELATIVE,
-  BFD_RELOC_X86_64_GOTPCREL,
-  BFD_RELOC_X86_64_32S,
-  BFD_RELOC_X86_64_DTPMOD64,
-  BFD_RELOC_X86_64_DTPOFF64,
-  BFD_RELOC_X86_64_TPOFF64,
-  BFD_RELOC_X86_64_TLSGD,
-  BFD_RELOC_X86_64_TLSLD,
-  BFD_RELOC_X86_64_DTPOFF32,
-  BFD_RELOC_X86_64_GOTTPOFF,
-  BFD_RELOC_X86_64_TPOFF32,
-  BFD_RELOC_X86_64_GOTOFF64,
-  BFD_RELOC_X86_64_GOTPC32,
-  BFD_RELOC_X86_64_GOT64,
-  BFD_RELOC_X86_64_GOTPCREL64,
-  BFD_RELOC_X86_64_GOTPC64,
-  BFD_RELOC_X86_64_GOTPLT64,
-  BFD_RELOC_X86_64_PLTOFF64,
-  BFD_RELOC_X86_64_GOTPC32_TLSDESC,
-  BFD_RELOC_X86_64_TLSDESC_CALL,
-  BFD_RELOC_X86_64_TLSDESC,
-  BFD_RELOC_X86_64_IRELATIVE,
-  BFD_RELOC_X86_64_PC32_BND,
-  BFD_RELOC_X86_64_PLT32_BND,
-  BFD_RELOC_X86_64_GOTPCRELX,
-  BFD_RELOC_X86_64_REX_GOTPCRELX,
-
-/* ns32k relocations  */
-  BFD_RELOC_NS32K_IMM_8,
-  BFD_RELOC_NS32K_IMM_16,
-  BFD_RELOC_NS32K_IMM_32,
-  BFD_RELOC_NS32K_IMM_8_PCREL,
-  BFD_RELOC_NS32K_IMM_16_PCREL,
-  BFD_RELOC_NS32K_IMM_32_PCREL,
-  BFD_RELOC_NS32K_DISP_8,
-  BFD_RELOC_NS32K_DISP_16,
-  BFD_RELOC_NS32K_DISP_32,
-  BFD_RELOC_NS32K_DISP_8_PCREL,
-  BFD_RELOC_NS32K_DISP_16_PCREL,
-  BFD_RELOC_NS32K_DISP_32_PCREL,
-
-/* PDP11 relocations  */
-  BFD_RELOC_PDP11_DISP_8_PCREL,
-  BFD_RELOC_PDP11_DISP_6_PCREL,
-
-/* Picojava relocs.  Not all of these appear in object files.  */
-  BFD_RELOC_PJ_CODE_HI16,
-  BFD_RELOC_PJ_CODE_LO16,
-  BFD_RELOC_PJ_CODE_DIR16,
-  BFD_RELOC_PJ_CODE_DIR32,
-  BFD_RELOC_PJ_CODE_REL16,
-  BFD_RELOC_PJ_CODE_REL32,
-
-/* Power(rs6000) and PowerPC relocations.  */
-  BFD_RELOC_PPC_B26,
-  BFD_RELOC_PPC_BA26,
-  BFD_RELOC_PPC_TOC16,
-  BFD_RELOC_PPC_B16,
-  BFD_RELOC_PPC_B16_BRTAKEN,
-  BFD_RELOC_PPC_B16_BRNTAKEN,
-  BFD_RELOC_PPC_BA16,
-  BFD_RELOC_PPC_BA16_BRTAKEN,
-  BFD_RELOC_PPC_BA16_BRNTAKEN,
-  BFD_RELOC_PPC_COPY,
-  BFD_RELOC_PPC_GLOB_DAT,
-  BFD_RELOC_PPC_JMP_SLOT,
-  BFD_RELOC_PPC_RELATIVE,
-  BFD_RELOC_PPC_LOCAL24PC,
-  BFD_RELOC_PPC_EMB_NADDR32,
-  BFD_RELOC_PPC_EMB_NADDR16,
-  BFD_RELOC_PPC_EMB_NADDR16_LO,
-  BFD_RELOC_PPC_EMB_NADDR16_HI,
-  BFD_RELOC_PPC_EMB_NADDR16_HA,
-  BFD_RELOC_PPC_EMB_SDAI16,
-  BFD_RELOC_PPC_EMB_SDA2I16,
-  BFD_RELOC_PPC_EMB_SDA2REL,
-  BFD_RELOC_PPC_EMB_SDA21,
-  BFD_RELOC_PPC_EMB_MRKREF,
-  BFD_RELOC_PPC_EMB_RELSEC16,
-  BFD_RELOC_PPC_EMB_RELST_LO,
-  BFD_RELOC_PPC_EMB_RELST_HI,
-  BFD_RELOC_PPC_EMB_RELST_HA,
-  BFD_RELOC_PPC_EMB_BIT_FLD,
-  BFD_RELOC_PPC_EMB_RELSDA,
-  BFD_RELOC_PPC_VLE_REL8,
-  BFD_RELOC_PPC_VLE_REL15,
-  BFD_RELOC_PPC_VLE_REL24,
-  BFD_RELOC_PPC_VLE_LO16A,
-  BFD_RELOC_PPC_VLE_LO16D,
-  BFD_RELOC_PPC_VLE_HI16A,
-  BFD_RELOC_PPC_VLE_HI16D,
-  BFD_RELOC_PPC_VLE_HA16A,
-  BFD_RELOC_PPC_VLE_HA16D,
-  BFD_RELOC_PPC_VLE_SDA21,
-  BFD_RELOC_PPC_VLE_SDA21_LO,
-  BFD_RELOC_PPC_VLE_SDAREL_LO16A,
-  BFD_RELOC_PPC_VLE_SDAREL_LO16D,
-  BFD_RELOC_PPC_VLE_SDAREL_HI16A,
-  BFD_RELOC_PPC_VLE_SDAREL_HI16D,
-  BFD_RELOC_PPC_VLE_SDAREL_HA16A,
-  BFD_RELOC_PPC_VLE_SDAREL_HA16D,
-  BFD_RELOC_PPC_16DX_HA,
-  BFD_RELOC_PPC_REL16DX_HA,
-  BFD_RELOC_PPC64_HIGHER,
-  BFD_RELOC_PPC64_HIGHER_S,
-  BFD_RELOC_PPC64_HIGHEST,
-  BFD_RELOC_PPC64_HIGHEST_S,
-  BFD_RELOC_PPC64_TOC16_LO,
-  BFD_RELOC_PPC64_TOC16_HI,
-  BFD_RELOC_PPC64_TOC16_HA,
-  BFD_RELOC_PPC64_TOC,
-  BFD_RELOC_PPC64_PLTGOT16,
-  BFD_RELOC_PPC64_PLTGOT16_LO,
-  BFD_RELOC_PPC64_PLTGOT16_HI,
-  BFD_RELOC_PPC64_PLTGOT16_HA,
-  BFD_RELOC_PPC64_ADDR16_DS,
-  BFD_RELOC_PPC64_ADDR16_LO_DS,
-  BFD_RELOC_PPC64_GOT16_DS,
-  BFD_RELOC_PPC64_GOT16_LO_DS,
-  BFD_RELOC_PPC64_PLT16_LO_DS,
-  BFD_RELOC_PPC64_SECTOFF_DS,
-  BFD_RELOC_PPC64_SECTOFF_LO_DS,
-  BFD_RELOC_PPC64_TOC16_DS,
-  BFD_RELOC_PPC64_TOC16_LO_DS,
-  BFD_RELOC_PPC64_PLTGOT16_DS,
-  BFD_RELOC_PPC64_PLTGOT16_LO_DS,
-  BFD_RELOC_PPC64_ADDR16_HIGH,
-  BFD_RELOC_PPC64_ADDR16_HIGHA,
-  BFD_RELOC_PPC64_ADDR64_LOCAL,
-  BFD_RELOC_PPC64_ENTRY,
-
-/* PowerPC and PowerPC64 thread-local storage relocations.  */
-  BFD_RELOC_PPC_TLS,
-  BFD_RELOC_PPC_TLSGD,
-  BFD_RELOC_PPC_TLSLD,
-  BFD_RELOC_PPC_DTPMOD,
-  BFD_RELOC_PPC_TPREL16,
-  BFD_RELOC_PPC_TPREL16_LO,
-  BFD_RELOC_PPC_TPREL16_HI,
-  BFD_RELOC_PPC_TPREL16_HA,
-  BFD_RELOC_PPC_TPREL,
-  BFD_RELOC_PPC_DTPREL16,
-  BFD_RELOC_PPC_DTPREL16_LO,
-  BFD_RELOC_PPC_DTPREL16_HI,
-  BFD_RELOC_PPC_DTPREL16_HA,
-  BFD_RELOC_PPC_DTPREL,
-  BFD_RELOC_PPC_GOT_TLSGD16,
-  BFD_RELOC_PPC_GOT_TLSGD16_LO,
-  BFD_RELOC_PPC_GOT_TLSGD16_HI,
-  BFD_RELOC_PPC_GOT_TLSGD16_HA,
-  BFD_RELOC_PPC_GOT_TLSLD16,
-  BFD_RELOC_PPC_GOT_TLSLD16_LO,
-  BFD_RELOC_PPC_GOT_TLSLD16_HI,
-  BFD_RELOC_PPC_GOT_TLSLD16_HA,
-  BFD_RELOC_PPC_GOT_TPREL16,
-  BFD_RELOC_PPC_GOT_TPREL16_LO,
-  BFD_RELOC_PPC_GOT_TPREL16_HI,
-  BFD_RELOC_PPC_GOT_TPREL16_HA,
-  BFD_RELOC_PPC_GOT_DTPREL16,
-  BFD_RELOC_PPC_GOT_DTPREL16_LO,
-  BFD_RELOC_PPC_GOT_DTPREL16_HI,
-  BFD_RELOC_PPC_GOT_DTPREL16_HA,
-  BFD_RELOC_PPC64_TPREL16_DS,
-  BFD_RELOC_PPC64_TPREL16_LO_DS,
-  BFD_RELOC_PPC64_TPREL16_HIGHER,
-  BFD_RELOC_PPC64_TPREL16_HIGHERA,
-  BFD_RELOC_PPC64_TPREL16_HIGHEST,
-  BFD_RELOC_PPC64_TPREL16_HIGHESTA,
-  BFD_RELOC_PPC64_DTPREL16_DS,
-  BFD_RELOC_PPC64_DTPREL16_LO_DS,
-  BFD_RELOC_PPC64_DTPREL16_HIGHER,
-  BFD_RELOC_PPC64_DTPREL16_HIGHERA,
-  BFD_RELOC_PPC64_DTPREL16_HIGHEST,
-  BFD_RELOC_PPC64_DTPREL16_HIGHESTA,
-  BFD_RELOC_PPC64_TPREL16_HIGH,
-  BFD_RELOC_PPC64_TPREL16_HIGHA,
-  BFD_RELOC_PPC64_DTPREL16_HIGH,
-  BFD_RELOC_PPC64_DTPREL16_HIGHA,
-
-/* IBM 370/390 relocations  */
-  BFD_RELOC_I370_D12,
-
-/* The type of reloc used to build a constructor table - at the moment
-probably a 32 bit wide absolute relocation, but the target can choose.
-It generally does map to one of the other relocation types.  */
-  BFD_RELOC_CTOR,
-
-/* ARM 26 bit pc-relative branch.  The lowest two bits must be zero and are
-not stored in the instruction.  */
-  BFD_RELOC_ARM_PCREL_BRANCH,
-
-/* ARM 26 bit pc-relative branch.  The lowest bit must be zero and is
-not stored in the instruction.  The 2nd lowest bit comes from a 1 bit
-field in the instruction.  */
-  BFD_RELOC_ARM_PCREL_BLX,
-
-/* Thumb 22 bit pc-relative branch.  The lowest bit must be zero and is
-not stored in the instruction.  The 2nd lowest bit comes from a 1 bit
-field in the instruction.  */
-  BFD_RELOC_THUMB_PCREL_BLX,
-
-/* ARM 26-bit pc-relative branch for an unconditional BL or BLX instruction.  */
-  BFD_RELOC_ARM_PCREL_CALL,
-
-/* ARM 26-bit pc-relative branch for B or conditional BL instruction.  */
-  BFD_RELOC_ARM_PCREL_JUMP,
-
-/* Thumb 7-, 9-, 12-, 20-, 23-, and 25-bit pc-relative branches.
-The lowest bit must be zero and is not stored in the instruction.
-Note that the corresponding ELF R_ARM_THM_JUMPnn constant has an
-"nn" one smaller in all cases.  Note further that BRANCH23
-corresponds to R_ARM_THM_CALL.  */
-  BFD_RELOC_THUMB_PCREL_BRANCH7,
-  BFD_RELOC_THUMB_PCREL_BRANCH9,
-  BFD_RELOC_THUMB_PCREL_BRANCH12,
-  BFD_RELOC_THUMB_PCREL_BRANCH20,
-  BFD_RELOC_THUMB_PCREL_BRANCH23,
-  BFD_RELOC_THUMB_PCREL_BRANCH25,
-
-/* 12-bit immediate offset, used in ARM-format ldr and str instructions.  */
-  BFD_RELOC_ARM_OFFSET_IMM,
-
-/* 5-bit immediate offset, used in Thumb-format ldr and str instructions.  */
-  BFD_RELOC_ARM_THUMB_OFFSET,
-
-/* Pc-relative or absolute relocation depending on target.  Used for
-entries in .init_array sections.  */
-  BFD_RELOC_ARM_TARGET1,
-
-/* Read-only segment base relative address.  */
-  BFD_RELOC_ARM_ROSEGREL32,
-
-/* Data segment base relative address.  */
-  BFD_RELOC_ARM_SBREL32,
-
-/* This reloc is used for references to RTTI data from exception handling
-tables.  The actual definition depends on the target.  It may be a
-pc-relative or some form of GOT-indirect relocation.  */
-  BFD_RELOC_ARM_TARGET2,
-
-/* 31-bit PC relative address.  */
-  BFD_RELOC_ARM_PREL31,
-
-/* Low and High halfword relocations for MOVW and MOVT instructions.  */
-  BFD_RELOC_ARM_MOVW,
-  BFD_RELOC_ARM_MOVT,
-  BFD_RELOC_ARM_MOVW_PCREL,
-  BFD_RELOC_ARM_MOVT_PCREL,
-  BFD_RELOC_ARM_THUMB_MOVW,
-  BFD_RELOC_ARM_THUMB_MOVT,
-  BFD_RELOC_ARM_THUMB_MOVW_PCREL,
-  BFD_RELOC_ARM_THUMB_MOVT_PCREL,
-
-/* Relocations for setting up GOTs and PLTs for shared libraries.  */
-  BFD_RELOC_ARM_JUMP_SLOT,
-  BFD_RELOC_ARM_GLOB_DAT,
-  BFD_RELOC_ARM_GOT32,
-  BFD_RELOC_ARM_PLT32,
-  BFD_RELOC_ARM_RELATIVE,
-  BFD_RELOC_ARM_GOTOFF,
-  BFD_RELOC_ARM_GOTPC,
-  BFD_RELOC_ARM_GOT_PREL,
-
-/* ARM thread-local storage relocations.  */
-  BFD_RELOC_ARM_TLS_GD32,
-  BFD_RELOC_ARM_TLS_LDO32,
-  BFD_RELOC_ARM_TLS_LDM32,
-  BFD_RELOC_ARM_TLS_DTPOFF32,
-  BFD_RELOC_ARM_TLS_DTPMOD32,
-  BFD_RELOC_ARM_TLS_TPOFF32,
-  BFD_RELOC_ARM_TLS_IE32,
-  BFD_RELOC_ARM_TLS_LE32,
-  BFD_RELOC_ARM_TLS_GOTDESC,
-  BFD_RELOC_ARM_TLS_CALL,
-  BFD_RELOC_ARM_THM_TLS_CALL,
-  BFD_RELOC_ARM_TLS_DESCSEQ,
-  BFD_RELOC_ARM_THM_TLS_DESCSEQ,
-  BFD_RELOC_ARM_TLS_DESC,
-
-/* ARM group relocations.  */
-  BFD_RELOC_ARM_ALU_PC_G0_NC,
-  BFD_RELOC_ARM_ALU_PC_G0,
-  BFD_RELOC_ARM_ALU_PC_G1_NC,
-  BFD_RELOC_ARM_ALU_PC_G1,
-  BFD_RELOC_ARM_ALU_PC_G2,
-  BFD_RELOC_ARM_LDR_PC_G0,
-  BFD_RELOC_ARM_LDR_PC_G1,
-  BFD_RELOC_ARM_LDR_PC_G2,
-  BFD_RELOC_ARM_LDRS_PC_G0,
-  BFD_RELOC_ARM_LDRS_PC_G1,
-  BFD_RELOC_ARM_LDRS_PC_G2,
-  BFD_RELOC_ARM_LDC_PC_G0,
-  BFD_RELOC_ARM_LDC_PC_G1,
-  BFD_RELOC_ARM_LDC_PC_G2,
-  BFD_RELOC_ARM_ALU_SB_G0_NC,
-  BFD_RELOC_ARM_ALU_SB_G0,
-  BFD_RELOC_ARM_ALU_SB_G1_NC,
-  BFD_RELOC_ARM_ALU_SB_G1,
-  BFD_RELOC_ARM_ALU_SB_G2,
-  BFD_RELOC_ARM_LDR_SB_G0,
-  BFD_RELOC_ARM_LDR_SB_G1,
-  BFD_RELOC_ARM_LDR_SB_G2,
-  BFD_RELOC_ARM_LDRS_SB_G0,
-  BFD_RELOC_ARM_LDRS_SB_G1,
-  BFD_RELOC_ARM_LDRS_SB_G2,
-  BFD_RELOC_ARM_LDC_SB_G0,
-  BFD_RELOC_ARM_LDC_SB_G1,
-  BFD_RELOC_ARM_LDC_SB_G2,
-
-/* Annotation of BX instructions.  */
-  BFD_RELOC_ARM_V4BX,
-
-/* ARM support for STT_GNU_IFUNC.  */
-  BFD_RELOC_ARM_IRELATIVE,
-
-/* Thumb1 relocations to support execute-only code.  */
-  BFD_RELOC_ARM_THUMB_ALU_ABS_G0_NC,
-  BFD_RELOC_ARM_THUMB_ALU_ABS_G1_NC,
-  BFD_RELOC_ARM_THUMB_ALU_ABS_G2_NC,
-  BFD_RELOC_ARM_THUMB_ALU_ABS_G3_NC,
-
-/* These relocs are only used within the ARM assembler.  They are not
-(at present) written to any object files.  */
-  BFD_RELOC_ARM_IMMEDIATE,
-  BFD_RELOC_ARM_ADRL_IMMEDIATE,
-  BFD_RELOC_ARM_T32_IMMEDIATE,
-  BFD_RELOC_ARM_T32_ADD_IMM,
-  BFD_RELOC_ARM_T32_IMM12,
-  BFD_RELOC_ARM_T32_ADD_PC12,
-  BFD_RELOC_ARM_SHIFT_IMM,
-  BFD_RELOC_ARM_SMC,
-  BFD_RELOC_ARM_HVC,
-  BFD_RELOC_ARM_SWI,
-  BFD_RELOC_ARM_MULTI,
-  BFD_RELOC_ARM_CP_OFF_IMM,
-  BFD_RELOC_ARM_CP_OFF_IMM_S2,
-  BFD_RELOC_ARM_T32_CP_OFF_IMM,
-  BFD_RELOC_ARM_T32_CP_OFF_IMM_S2,
-  BFD_RELOC_ARM_ADR_IMM,
-  BFD_RELOC_ARM_LDR_IMM,
-  BFD_RELOC_ARM_LITERAL,
-  BFD_RELOC_ARM_IN_POOL,
-  BFD_RELOC_ARM_OFFSET_IMM8,
-  BFD_RELOC_ARM_T32_OFFSET_U8,
-  BFD_RELOC_ARM_T32_OFFSET_IMM,
-  BFD_RELOC_ARM_HWLITERAL,
-  BFD_RELOC_ARM_THUMB_ADD,
-  BFD_RELOC_ARM_THUMB_IMM,
-  BFD_RELOC_ARM_THUMB_SHIFT,
-
-/* Renesas / SuperH SH relocs.  Not all of these appear in object files.  */
-  BFD_RELOC_SH_PCDISP8BY2,
-  BFD_RELOC_SH_PCDISP12BY2,
-  BFD_RELOC_SH_IMM3,
-  BFD_RELOC_SH_IMM3U,
-  BFD_RELOC_SH_DISP12,
-  BFD_RELOC_SH_DISP12BY2,
-  BFD_RELOC_SH_DISP12BY4,
-  BFD_RELOC_SH_DISP12BY8,
-  BFD_RELOC_SH_DISP20,
-  BFD_RELOC_SH_DISP20BY8,
-  BFD_RELOC_SH_IMM4,
-  BFD_RELOC_SH_IMM4BY2,
-  BFD_RELOC_SH_IMM4BY4,
-  BFD_RELOC_SH_IMM8,
-  BFD_RELOC_SH_IMM8BY2,
-  BFD_RELOC_SH_IMM8BY4,
-  BFD_RELOC_SH_PCRELIMM8BY2,
-  BFD_RELOC_SH_PCRELIMM8BY4,
-  BFD_RELOC_SH_SWITCH16,
-  BFD_RELOC_SH_SWITCH32,
-  BFD_RELOC_SH_USES,
-  BFD_RELOC_SH_COUNT,
-  BFD_RELOC_SH_ALIGN,
-  BFD_RELOC_SH_CODE,
-  BFD_RELOC_SH_DATA,
-  BFD_RELOC_SH_LABEL,
-  BFD_RELOC_SH_LOOP_START,
-  BFD_RELOC_SH_LOOP_END,
-  BFD_RELOC_SH_COPY,
-  BFD_RELOC_SH_GLOB_DAT,
-  BFD_RELOC_SH_JMP_SLOT,
-  BFD_RELOC_SH_RELATIVE,
-  BFD_RELOC_SH_GOTPC,
-  BFD_RELOC_SH_GOT_LOW16,
-  BFD_RELOC_SH_GOT_MEDLOW16,
-  BFD_RELOC_SH_GOT_MEDHI16,
-  BFD_RELOC_SH_GOT_HI16,
-  BFD_RELOC_SH_GOTPLT_LOW16,
-  BFD_RELOC_SH_GOTPLT_MEDLOW16,
-  BFD_RELOC_SH_GOTPLT_MEDHI16,
-  BFD_RELOC_SH_GOTPLT_HI16,
-  BFD_RELOC_SH_PLT_LOW16,
-  BFD_RELOC_SH_PLT_MEDLOW16,
-  BFD_RELOC_SH_PLT_MEDHI16,
-  BFD_RELOC_SH_PLT_HI16,
-  BFD_RELOC_SH_GOTOFF_LOW16,
-  BFD_RELOC_SH_GOTOFF_MEDLOW16,
-  BFD_RELOC_SH_GOTOFF_MEDHI16,
-  BFD_RELOC_SH_GOTOFF_HI16,
-  BFD_RELOC_SH_GOTPC_LOW16,
-  BFD_RELOC_SH_GOTPC_MEDLOW16,
-  BFD_RELOC_SH_GOTPC_MEDHI16,
-  BFD_RELOC_SH_GOTPC_HI16,
-  BFD_RELOC_SH_COPY64,
-  BFD_RELOC_SH_GLOB_DAT64,
-  BFD_RELOC_SH_JMP_SLOT64,
-  BFD_RELOC_SH_RELATIVE64,
-  BFD_RELOC_SH_GOT10BY4,
-  BFD_RELOC_SH_GOT10BY8,
-  BFD_RELOC_SH_GOTPLT10BY4,
-  BFD_RELOC_SH_GOTPLT10BY8,
-  BFD_RELOC_SH_GOTPLT32,
-  BFD_RELOC_SH_SHMEDIA_CODE,
-  BFD_RELOC_SH_IMMU5,
-  BFD_RELOC_SH_IMMS6,
-  BFD_RELOC_SH_IMMS6BY32,
-  BFD_RELOC_SH_IMMU6,
-  BFD_RELOC_SH_IMMS10,
-  BFD_RELOC_SH_IMMS10BY2,
-  BFD_RELOC_SH_IMMS10BY4,
-  BFD_RELOC_SH_IMMS10BY8,
-  BFD_RELOC_SH_IMMS16,
-  BFD_RELOC_SH_IMMU16,
-  BFD_RELOC_SH_IMM_LOW16,
-  BFD_RELOC_SH_IMM_LOW16_PCREL,
-  BFD_RELOC_SH_IMM_MEDLOW16,
-  BFD_RELOC_SH_IMM_MEDLOW16_PCREL,
-  BFD_RELOC_SH_IMM_MEDHI16,
-  BFD_RELOC_SH_IMM_MEDHI16_PCREL,
-  BFD_RELOC_SH_IMM_HI16,
-  BFD_RELOC_SH_IMM_HI16_PCREL,
-  BFD_RELOC_SH_PT_16,
-  BFD_RELOC_SH_TLS_GD_32,
-  BFD_RELOC_SH_TLS_LD_32,
-  BFD_RELOC_SH_TLS_LDO_32,
-  BFD_RELOC_SH_TLS_IE_32,
-  BFD_RELOC_SH_TLS_LE_32,
-  BFD_RELOC_SH_TLS_DTPMOD32,
-  BFD_RELOC_SH_TLS_DTPOFF32,
-  BFD_RELOC_SH_TLS_TPOFF32,
-  BFD_RELOC_SH_GOT20,
-  BFD_RELOC_SH_GOTOFF20,
-  BFD_RELOC_SH_GOTFUNCDESC,
-  BFD_RELOC_SH_GOTFUNCDESC20,
-  BFD_RELOC_SH_GOTOFFFUNCDESC,
-  BFD_RELOC_SH_GOTOFFFUNCDESC20,
-  BFD_RELOC_SH_FUNCDESC,
-
-/* ARC relocs.  */
-  BFD_RELOC_ARC_NONE,
-  BFD_RELOC_ARC_8,
-  BFD_RELOC_ARC_16,
-  BFD_RELOC_ARC_24,
-  BFD_RELOC_ARC_32,
-  BFD_RELOC_ARC_N8,
-  BFD_RELOC_ARC_N16,
-  BFD_RELOC_ARC_N24,
-  BFD_RELOC_ARC_N32,
-  BFD_RELOC_ARC_SDA,
-  BFD_RELOC_ARC_SECTOFF,
-  BFD_RELOC_ARC_S21H_PCREL,
-  BFD_RELOC_ARC_S21W_PCREL,
-  BFD_RELOC_ARC_S25H_PCREL,
-  BFD_RELOC_ARC_S25W_PCREL,
-  BFD_RELOC_ARC_SDA32,
-  BFD_RELOC_ARC_SDA_LDST,
-  BFD_RELOC_ARC_SDA_LDST1,
-  BFD_RELOC_ARC_SDA_LDST2,
-  BFD_RELOC_ARC_SDA16_LD,
-  BFD_RELOC_ARC_SDA16_LD1,
-  BFD_RELOC_ARC_SDA16_LD2,
-  BFD_RELOC_ARC_S13_PCREL,
-  BFD_RELOC_ARC_W,
-  BFD_RELOC_ARC_32_ME,
-  BFD_RELOC_ARC_32_ME_S,
-  BFD_RELOC_ARC_N32_ME,
-  BFD_RELOC_ARC_SECTOFF_ME,
-  BFD_RELOC_ARC_SDA32_ME,
-  BFD_RELOC_ARC_W_ME,
-  BFD_RELOC_AC_SECTOFF_U8,
-  BFD_RELOC_AC_SECTOFF_U8_1,
-  BFD_RELOC_AC_SECTOFF_U8_2,
-  BFD_RELOC_AC_SECTOFF_S9,
-  BFD_RELOC_AC_SECTOFF_S9_1,
-  BFD_RELOC_AC_SECTOFF_S9_2,
-  BFD_RELOC_ARC_SECTOFF_ME_1,
-  BFD_RELOC_ARC_SECTOFF_ME_2,
-  BFD_RELOC_ARC_SECTOFF_1,
-  BFD_RELOC_ARC_SECTOFF_2,
-  BFD_RELOC_ARC_SDA_12,
-  BFD_RELOC_ARC_SDA16_ST2,
-  BFD_RELOC_ARC_32_PCREL,
-  BFD_RELOC_ARC_PC32,
-  BFD_RELOC_ARC_GOT32,
-  BFD_RELOC_ARC_GOTPC32,
-  BFD_RELOC_ARC_PLT32,
-  BFD_RELOC_ARC_COPY,
-  BFD_RELOC_ARC_GLOB_DAT,
-  BFD_RELOC_ARC_JMP_SLOT,
-  BFD_RELOC_ARC_RELATIVE,
-  BFD_RELOC_ARC_GOTOFF,
-  BFD_RELOC_ARC_GOTPC,
-  BFD_RELOC_ARC_S21W_PCREL_PLT,
-  BFD_RELOC_ARC_S25H_PCREL_PLT,
-  BFD_RELOC_ARC_TLS_DTPMOD,
-  BFD_RELOC_ARC_TLS_TPOFF,
-  BFD_RELOC_ARC_TLS_GD_GOT,
-  BFD_RELOC_ARC_TLS_GD_LD,
-  BFD_RELOC_ARC_TLS_GD_CALL,
-  BFD_RELOC_ARC_TLS_IE_GOT,
-  BFD_RELOC_ARC_TLS_DTPOFF,
-  BFD_RELOC_ARC_TLS_DTPOFF_S9,
-  BFD_RELOC_ARC_TLS_LE_S9,
-  BFD_RELOC_ARC_TLS_LE_32,
-  BFD_RELOC_ARC_S25W_PCREL_PLT,
-  BFD_RELOC_ARC_S21H_PCREL_PLT,
-  BFD_RELOC_ARC_NPS_CMEM16,
-
-/* ADI Blackfin 16 bit immediate absolute reloc.  */
-  BFD_RELOC_BFIN_16_IMM,
-
-/* ADI Blackfin 16 bit immediate absolute reloc higher 16 bits.  */
-  BFD_RELOC_BFIN_16_HIGH,
-
-/* ADI Blackfin 'a' part of LSETUP.  */
-  BFD_RELOC_BFIN_4_PCREL,
-
-/* ADI Blackfin.  */
-  BFD_RELOC_BFIN_5_PCREL,
-
-/* ADI Blackfin 16 bit immediate absolute reloc lower 16 bits.  */
-  BFD_RELOC_BFIN_16_LOW,
-
-/* ADI Blackfin.  */
-  BFD_RELOC_BFIN_10_PCREL,
-
-/* ADI Blackfin 'b' part of LSETUP.  */
-  BFD_RELOC_BFIN_11_PCREL,
-
-/* ADI Blackfin.  */
-  BFD_RELOC_BFIN_12_PCREL_JUMP,
-
-/* ADI Blackfin Short jump, pcrel.  */
-  BFD_RELOC_BFIN_12_PCREL_JUMP_S,
-
-/* ADI Blackfin Call.x not implemented.  */
-  BFD_RELOC_BFIN_24_PCREL_CALL_X,
-
-/* ADI Blackfin Long Jump pcrel.  */
-  BFD_RELOC_BFIN_24_PCREL_JUMP_L,
-
-/* ADI Blackfin FD-PIC relocations.  */
-  BFD_RELOC_BFIN_GOT17M4,
-  BFD_RELOC_BFIN_GOTHI,
-  BFD_RELOC_BFIN_GOTLO,
-  BFD_RELOC_BFIN_FUNCDESC,
-  BFD_RELOC_BFIN_FUNCDESC_GOT17M4,
-  BFD_RELOC_BFIN_FUNCDESC_GOTHI,
-  BFD_RELOC_BFIN_FUNCDESC_GOTLO,
-  BFD_RELOC_BFIN_FUNCDESC_VALUE,
-  BFD_RELOC_BFIN_FUNCDESC_GOTOFF17M4,
-  BFD_RELOC_BFIN_FUNCDESC_GOTOFFHI,
-  BFD_RELOC_BFIN_FUNCDESC_GOTOFFLO,
-  BFD_RELOC_BFIN_GOTOFF17M4,
-  BFD_RELOC_BFIN_GOTOFFHI,
-  BFD_RELOC_BFIN_GOTOFFLO,
-
-/* ADI Blackfin GOT relocation.  */
-  BFD_RELOC_BFIN_GOT,
-
-/* ADI Blackfin PLTPC relocation.  */
-  BFD_RELOC_BFIN_PLTPC,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_PUSH,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_CONST,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_ADD,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_SUB,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_MULT,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_DIV,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_MOD,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_LSHIFT,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_RSHIFT,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_AND,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_OR,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_XOR,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_LAND,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_LOR,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_LEN,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_NEG,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_COMP,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_PAGE,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_HWPAGE,
-
-/* ADI Blackfin arithmetic relocation.  */
-  BFD_ARELOC_BFIN_ADDR,
-
-/* Mitsubishi D10V relocs.
-This is a 10-bit reloc with the right 2 bits
-assumed to be 0.  */
-  BFD_RELOC_D10V_10_PCREL_R,
-
-/* Mitsubishi D10V relocs.
-This is a 10-bit reloc with the right 2 bits
-assumed to be 0.  This is the same as the previous reloc
-except it is in the left container, i.e.,
-shifted left 15 bits.  */
-  BFD_RELOC_D10V_10_PCREL_L,
-
-/* This is an 18-bit reloc with the right 2 bits
-assumed to be 0.  */
-  BFD_RELOC_D10V_18,
-
-/* This is an 18-bit reloc with the right 2 bits
-assumed to be 0.  */
-  BFD_RELOC_D10V_18_PCREL,
-
-/* Mitsubishi D30V relocs.
-This is a 6-bit absolute reloc.  */
-  BFD_RELOC_D30V_6,
-
-/* This is a 6-bit pc-relative reloc with
-the right 3 bits assumed to be 0.  */
-  BFD_RELOC_D30V_9_PCREL,
-
-/* This is a 6-bit pc-relative reloc with
-the right 3 bits assumed to be 0. Same
-as the previous reloc but on the right side
-of the container.  */
-  BFD_RELOC_D30V_9_PCREL_R,
-
-/* This is a 12-bit absolute reloc with the
-right 3 bitsassumed to be 0.  */
-  BFD_RELOC_D30V_15,
-
-/* This is a 12-bit pc-relative reloc with
-the right 3 bits assumed to be 0.  */
-  BFD_RELOC_D30V_15_PCREL,
-
-/* This is a 12-bit pc-relative reloc with
-the right 3 bits assumed to be 0. Same
-as the previous reloc but on the right side
-of the container.  */
-  BFD_RELOC_D30V_15_PCREL_R,
-
-/* This is an 18-bit absolute reloc with
-the right 3 bits assumed to be 0.  */
-  BFD_RELOC_D30V_21,
-
-/* This is an 18-bit pc-relative reloc with
-the right 3 bits assumed to be 0.  */
-  BFD_RELOC_D30V_21_PCREL,
-
-/* This is an 18-bit pc-relative reloc with
-the right 3 bits assumed to be 0. Same
-as the previous reloc but on the right side
-of the container.  */
-  BFD_RELOC_D30V_21_PCREL_R,
-
-/* This is a 32-bit absolute reloc.  */
-  BFD_RELOC_D30V_32,
-
-/* This is a 32-bit pc-relative reloc.  */
-  BFD_RELOC_D30V_32_PCREL,
-
-/* DLX relocs  */
-  BFD_RELOC_DLX_HI16_S,
-
-/* DLX relocs  */
-  BFD_RELOC_DLX_LO16,
-
-/* DLX relocs  */
-  BFD_RELOC_DLX_JMP26,
-
-/* Renesas M16C/M32C Relocations.  */
-  BFD_RELOC_M32C_HI8,
-  BFD_RELOC_M32C_RL_JUMP,
-  BFD_RELOC_M32C_RL_1ADDR,
-  BFD_RELOC_M32C_RL_2ADDR,
-
-/* Renesas M32R (formerly Mitsubishi M32R) relocs.
-This is a 24 bit absolute address.  */
-  BFD_RELOC_M32R_24,
-
-/* This is a 10-bit pc-relative reloc with the right 2 bits assumed to be 0.  */
-  BFD_RELOC_M32R_10_PCREL,
-
-/* This is an 18-bit reloc with the right 2 bits assumed to be 0.  */
-  BFD_RELOC_M32R_18_PCREL,
-
-/* This is a 26-bit reloc with the right 2 bits assumed to be 0.  */
-  BFD_RELOC_M32R_26_PCREL,
-
-/* This is a 16-bit reloc containing the high 16 bits of an address
-used when the lower 16 bits are treated as unsigned.  */
-  BFD_RELOC_M32R_HI16_ULO,
-
-/* This is a 16-bit reloc containing the high 16 bits of an address
-used when the lower 16 bits are treated as signed.  */
-  BFD_RELOC_M32R_HI16_SLO,
-
-/* This is a 16-bit reloc containing the lower 16 bits of an address.  */
-  BFD_RELOC_M32R_LO16,
-
-/* This is a 16-bit reloc containing the small data area offset for use in
-add3, load, and store instructions.  */
-  BFD_RELOC_M32R_SDA16,
-
-/* For PIC.  */
-  BFD_RELOC_M32R_GOT24,
-  BFD_RELOC_M32R_26_PLTREL,
-  BFD_RELOC_M32R_COPY,
-  BFD_RELOC_M32R_GLOB_DAT,
-  BFD_RELOC_M32R_JMP_SLOT,
-  BFD_RELOC_M32R_RELATIVE,
-  BFD_RELOC_M32R_GOTOFF,
-  BFD_RELOC_M32R_GOTOFF_HI_ULO,
-  BFD_RELOC_M32R_GOTOFF_HI_SLO,
-  BFD_RELOC_M32R_GOTOFF_LO,
-  BFD_RELOC_M32R_GOTPC24,
-  BFD_RELOC_M32R_GOT16_HI_ULO,
-  BFD_RELOC_M32R_GOT16_HI_SLO,
-  BFD_RELOC_M32R_GOT16_LO,
-  BFD_RELOC_M32R_GOTPC_HI_ULO,
-  BFD_RELOC_M32R_GOTPC_HI_SLO,
-  BFD_RELOC_M32R_GOTPC_LO,
-
-/* NDS32 relocs.
-This is a 20 bit absolute address.  */
-  BFD_RELOC_NDS32_20,
-
-/* This is a 9-bit pc-relative reloc with the right 1 bit assumed to be 0.  */
-  BFD_RELOC_NDS32_9_PCREL,
-
-/* This is a 9-bit pc-relative reloc with the right 1 bit assumed to be 0.  */
-  BFD_RELOC_NDS32_WORD_9_PCREL,
-
-/* This is an 15-bit reloc with the right 1 bit assumed to be 0.  */
-  BFD_RELOC_NDS32_15_PCREL,
-
-/* This is an 17-bit reloc with the right 1 bit assumed to be 0.  */
-  BFD_RELOC_NDS32_17_PCREL,
-
-/* This is a 25-bit reloc with the right 1 bit assumed to be 0.  */
-  BFD_RELOC_NDS32_25_PCREL,
-
-/* This is a 20-bit reloc containing the high 20 bits of an address
-used with the lower 12 bits  */
-  BFD_RELOC_NDS32_HI20,
-
-/* This is a 12-bit reloc containing the lower 12 bits of an address
-then shift right by 3. This is used with ldi,sdi...  */
-  BFD_RELOC_NDS32_LO12S3,
-
-/* This is a 12-bit reloc containing the lower 12 bits of an address
-then shift left by 2. This is used with lwi,swi...  */
-  BFD_RELOC_NDS32_LO12S2,
-
-/* This is a 12-bit reloc containing the lower 12 bits of an address
-then shift left by 1. This is used with lhi,shi...  */
-  BFD_RELOC_NDS32_LO12S1,
-
-/* This is a 12-bit reloc containing the lower 12 bits of an address
-then shift left by 0. This is used with lbisbi...  */
-  BFD_RELOC_NDS32_LO12S0,
-
-/* This is a 12-bit reloc containing the lower 12 bits of an address
-then shift left by 0. This is only used with branch relaxations  */
-  BFD_RELOC_NDS32_LO12S0_ORI,
-
-/* This is a 15-bit reloc containing the small data area 18-bit signed offset
-and shift left by 3 for use in ldi, sdi...  */
-  BFD_RELOC_NDS32_SDA15S3,
-
-/* This is a 15-bit reloc containing the small data area 17-bit signed offset
-and shift left by 2 for use in lwi, swi...  */
-  BFD_RELOC_NDS32_SDA15S2,
-
-/* This is a 15-bit reloc containing the small data area 16-bit signed offset
-and shift left by 1 for use in lhi, shi...  */
-  BFD_RELOC_NDS32_SDA15S1,
-
-/* This is a 15-bit reloc containing the small data area 15-bit signed offset
-and shift left by 0 for use in lbi, sbi...  */
-  BFD_RELOC_NDS32_SDA15S0,
-
-/* This is a 16-bit reloc containing the small data area 16-bit signed offset
-and shift left by 3  */
-  BFD_RELOC_NDS32_SDA16S3,
-
-/* This is a 17-bit reloc containing the small data area 17-bit signed offset
-and shift left by 2 for use in lwi.gp, swi.gp...  */
-  BFD_RELOC_NDS32_SDA17S2,
-
-/* This is a 18-bit reloc containing the small data area 18-bit signed offset
-and shift left by 1 for use in lhi.gp, shi.gp...  */
-  BFD_RELOC_NDS32_SDA18S1,
-
-/* This is a 19-bit reloc containing the small data area 19-bit signed offset
-and shift left by 0 for use in lbi.gp, sbi.gp...  */
-  BFD_RELOC_NDS32_SDA19S0,
-
-/* for PIC  */
-  BFD_RELOC_NDS32_GOT20,
-  BFD_RELOC_NDS32_9_PLTREL,
-  BFD_RELOC_NDS32_25_PLTREL,
-  BFD_RELOC_NDS32_COPY,
-  BFD_RELOC_NDS32_GLOB_DAT,
-  BFD_RELOC_NDS32_JMP_SLOT,
-  BFD_RELOC_NDS32_RELATIVE,
-  BFD_RELOC_NDS32_GOTOFF,
-  BFD_RELOC_NDS32_GOTOFF_HI20,
-  BFD_RELOC_NDS32_GOTOFF_LO12,
-  BFD_RELOC_NDS32_GOTPC20,
-  BFD_RELOC_NDS32_GOT_HI20,
-  BFD_RELOC_NDS32_GOT_LO12,
-  BFD_RELOC_NDS32_GOTPC_HI20,
-  BFD_RELOC_NDS32_GOTPC_LO12,
-
-/* for relax  */
-  BFD_RELOC_NDS32_INSN16,
-  BFD_RELOC_NDS32_LABEL,
-  BFD_RELOC_NDS32_LONGCALL1,
-  BFD_RELOC_NDS32_LONGCALL2,
-  BFD_RELOC_NDS32_LONGCALL3,
-  BFD_RELOC_NDS32_LONGJUMP1,
-  BFD_RELOC_NDS32_LONGJUMP2,
-  BFD_RELOC_NDS32_LONGJUMP3,
-  BFD_RELOC_NDS32_LOADSTORE,
-  BFD_RELOC_NDS32_9_FIXED,
-  BFD_RELOC_NDS32_15_FIXED,
-  BFD_RELOC_NDS32_17_FIXED,
-  BFD_RELOC_NDS32_25_FIXED,
-  BFD_RELOC_NDS32_LONGCALL4,
-  BFD_RELOC_NDS32_LONGCALL5,
-  BFD_RELOC_NDS32_LONGCALL6,
-  BFD_RELOC_NDS32_LONGJUMP4,
-  BFD_RELOC_NDS32_LONGJUMP5,
-  BFD_RELOC_NDS32_LONGJUMP6,
-  BFD_RELOC_NDS32_LONGJUMP7,
-
-/* for PIC  */
-  BFD_RELOC_NDS32_PLTREL_HI20,
-  BFD_RELOC_NDS32_PLTREL_LO12,
-  BFD_RELOC_NDS32_PLT_GOTREL_HI20,
-  BFD_RELOC_NDS32_PLT_GOTREL_LO12,
-
-/* for floating point  */
-  BFD_RELOC_NDS32_SDA12S2_DP,
-  BFD_RELOC_NDS32_SDA12S2_SP,
-  BFD_RELOC_NDS32_LO12S2_DP,
-  BFD_RELOC_NDS32_LO12S2_SP,
-
-/* for dwarf2 debug_line.  */
-  BFD_RELOC_NDS32_DWARF2_OP1,
-  BFD_RELOC_NDS32_DWARF2_OP2,
-  BFD_RELOC_NDS32_DWARF2_LEB,
-
-/* for eliminate 16-bit instructions  */
-  BFD_RELOC_NDS32_UPDATE_TA,
-
-/* for PIC object relaxation  */
-  BFD_RELOC_NDS32_PLT_GOTREL_LO20,
-  BFD_RELOC_NDS32_PLT_GOTREL_LO15,
-  BFD_RELOC_NDS32_PLT_GOTREL_LO19,
-  BFD_RELOC_NDS32_GOT_LO15,
-  BFD_RELOC_NDS32_GOT_LO19,
-  BFD_RELOC_NDS32_GOTOFF_LO15,
-  BFD_RELOC_NDS32_GOTOFF_LO19,
-  BFD_RELOC_NDS32_GOT15S2,
-  BFD_RELOC_NDS32_GOT17S2,
-
-/* NDS32 relocs.
-This is a 5 bit absolute address.  */
-  BFD_RELOC_NDS32_5,
-
-/* This is a 10-bit unsigned pc-relative reloc with the right 1 bit assumed to be 0.  */
-  BFD_RELOC_NDS32_10_UPCREL,
-
-/* If fp were omitted, fp can used as another gp.  */
-  BFD_RELOC_NDS32_SDA_FP7U2_RELA,
-
-/* relaxation relative relocation types  */
-  BFD_RELOC_NDS32_RELAX_ENTRY,
-  BFD_RELOC_NDS32_GOT_SUFF,
-  BFD_RELOC_NDS32_GOTOFF_SUFF,
-  BFD_RELOC_NDS32_PLT_GOT_SUFF,
-  BFD_RELOC_NDS32_MULCALL_SUFF,
-  BFD_RELOC_NDS32_PTR,
-  BFD_RELOC_NDS32_PTR_COUNT,
-  BFD_RELOC_NDS32_PTR_RESOLVED,
-  BFD_RELOC_NDS32_PLTBLOCK,
-  BFD_RELOC_NDS32_RELAX_REGION_BEGIN,
-  BFD_RELOC_NDS32_RELAX_REGION_END,
-  BFD_RELOC_NDS32_MINUEND,
-  BFD_RELOC_NDS32_SUBTRAHEND,
-  BFD_RELOC_NDS32_DIFF8,
-  BFD_RELOC_NDS32_DIFF16,
-  BFD_RELOC_NDS32_DIFF32,
-  BFD_RELOC_NDS32_DIFF_ULEB128,
-  BFD_RELOC_NDS32_EMPTY,
-
-/* This is a 25 bit absolute address.  */
-  BFD_RELOC_NDS32_25_ABS,
-
-/* For ex9 and ifc using.  */
-  BFD_RELOC_NDS32_DATA,
-  BFD_RELOC_NDS32_TRAN,
-  BFD_RELOC_NDS32_17IFC_PCREL,
-  BFD_RELOC_NDS32_10IFCU_PCREL,
-
-/* For TLS.  */
-  BFD_RELOC_NDS32_TPOFF,
-  BFD_RELOC_NDS32_TLS_LE_HI20,
-  BFD_RELOC_NDS32_TLS_LE_LO12,
-  BFD_RELOC_NDS32_TLS_LE_ADD,
-  BFD_RELOC_NDS32_TLS_LE_LS,
-  BFD_RELOC_NDS32_GOTTPOFF,
-  BFD_RELOC_NDS32_TLS_IE_HI20,
-  BFD_RELOC_NDS32_TLS_IE_LO12S2,
-  BFD_RELOC_NDS32_TLS_TPOFF,
-  BFD_RELOC_NDS32_TLS_LE_20,
-  BFD_RELOC_NDS32_TLS_LE_15S0,
-  BFD_RELOC_NDS32_TLS_LE_15S1,
-  BFD_RELOC_NDS32_TLS_LE_15S2,
-
-/* This is a 9-bit reloc  */
-  BFD_RELOC_V850_9_PCREL,
-
-/* This is a 22-bit reloc  */
-  BFD_RELOC_V850_22_PCREL,
-
-/* This is a 16 bit offset from the short data area pointer.  */
-  BFD_RELOC_V850_SDA_16_16_OFFSET,
-
-/* This is a 16 bit offset (of which only 15 bits are used) from the
-short data area pointer.  */
-  BFD_RELOC_V850_SDA_15_16_OFFSET,
-
-/* This is a 16 bit offset from the zero data area pointer.  */
-  BFD_RELOC_V850_ZDA_16_16_OFFSET,
-
-/* This is a 16 bit offset (of which only 15 bits are used) from the
-zero data area pointer.  */
-  BFD_RELOC_V850_ZDA_15_16_OFFSET,
-
-/* This is an 8 bit offset (of which only 6 bits are used) from the
-tiny data area pointer.  */
-  BFD_RELOC_V850_TDA_6_8_OFFSET,
-
-/* This is an 8bit offset (of which only 7 bits are used) from the tiny
-data area pointer.  */
-  BFD_RELOC_V850_TDA_7_8_OFFSET,
-
-/* This is a 7 bit offset from the tiny data area pointer.  */
-  BFD_RELOC_V850_TDA_7_7_OFFSET,
-
-/* This is a 16 bit offset from the tiny data area pointer.  */
-  BFD_RELOC_V850_TDA_16_16_OFFSET,
-
-/* This is a 5 bit offset (of which only 4 bits are used) from the tiny
-data area pointer.  */
-  BFD_RELOC_V850_TDA_4_5_OFFSET,
-
-/* This is a 4 bit offset from the tiny data area pointer.  */
-  BFD_RELOC_V850_TDA_4_4_OFFSET,
-
-/* This is a 16 bit offset from the short data area pointer, with the
-bits placed non-contiguously in the instruction.  */
-  BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET,
-
-/* This is a 16 bit offset from the zero data area pointer, with the
-bits placed non-contiguously in the instruction.  */
-  BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET,
-
-/* This is a 6 bit offset from the call table base pointer.  */
-  BFD_RELOC_V850_CALLT_6_7_OFFSET,
-
-/* This is a 16 bit offset from the call table base pointer.  */
-  BFD_RELOC_V850_CALLT_16_16_OFFSET,
-
-/* Used for relaxing indirect function calls.  */
-  BFD_RELOC_V850_LONGCALL,
-
-/* Used for relaxing indirect jumps.  */
-  BFD_RELOC_V850_LONGJUMP,
-
-/* Used to maintain alignment whilst relaxing.  */
-  BFD_RELOC_V850_ALIGN,
-
-/* This is a variation of BFD_RELOC_LO16 that can be used in v850e ld.bu
-instructions.  */
-  BFD_RELOC_V850_LO16_SPLIT_OFFSET,
-
-/* This is a 16-bit reloc.  */
-  BFD_RELOC_V850_16_PCREL,
-
-/* This is a 17-bit reloc.  */
-  BFD_RELOC_V850_17_PCREL,
-
-/* This is a 23-bit reloc.  */
-  BFD_RELOC_V850_23,
-
-/* This is a 32-bit reloc.  */
-  BFD_RELOC_V850_32_PCREL,
-
-/* This is a 32-bit reloc.  */
-  BFD_RELOC_V850_32_ABS,
-
-/* This is a 16-bit reloc.  */
-  BFD_RELOC_V850_16_SPLIT_OFFSET,
-
-/* This is a 16-bit reloc.  */
-  BFD_RELOC_V850_16_S1,
-
-/* Low 16 bits. 16 bit shifted by 1.  */
-  BFD_RELOC_V850_LO16_S1,
-
-/* This is a 16 bit offset from the call table base pointer.  */
-  BFD_RELOC_V850_CALLT_15_16_OFFSET,
-
-/* DSO relocations.  */
-  BFD_RELOC_V850_32_GOTPCREL,
-
-/* DSO relocations.  */
-  BFD_RELOC_V850_16_GOT,
-
-/* DSO relocations.  */
-  BFD_RELOC_V850_32_GOT,
-
-/* DSO relocations.  */
-  BFD_RELOC_V850_22_PLT_PCREL,
-
-/* DSO relocations.  */
-  BFD_RELOC_V850_32_PLT_PCREL,
-
-/* DSO relocations.  */
-  BFD_RELOC_V850_COPY,
-
-/* DSO relocations.  */
-  BFD_RELOC_V850_GLOB_DAT,
-
-/* DSO relocations.  */
-  BFD_RELOC_V850_JMP_SLOT,
-
-/* DSO relocations.  */
-  BFD_RELOC_V850_RELATIVE,
-
-/* DSO relocations.  */
-  BFD_RELOC_V850_16_GOTOFF,
-
-/* DSO relocations.  */
-  BFD_RELOC_V850_32_GOTOFF,
-
-/* start code.  */
-  BFD_RELOC_V850_CODE,
-
-/* start data in text.  */
-  BFD_RELOC_V850_DATA,
-
-/* This is a 8bit DP reloc for the tms320c30, where the most
-significant 8 bits of a 24 bit word are placed into the least
-significant 8 bits of the opcode.  */
-  BFD_RELOC_TIC30_LDP,
-
-/* This is a 7bit reloc for the tms320c54x, where the least
-significant 7 bits of a 16 bit word are placed into the least
-significant 7 bits of the opcode.  */
-  BFD_RELOC_TIC54X_PARTLS7,
-
-/* This is a 9bit DP reloc for the tms320c54x, where the most
-significant 9 bits of a 16 bit word are placed into the least
-significant 9 bits of the opcode.  */
-  BFD_RELOC_TIC54X_PARTMS9,
-
-/* This is an extended address 23-bit reloc for the tms320c54x.  */
-  BFD_RELOC_TIC54X_23,
-
-/* This is a 16-bit reloc for the tms320c54x, where the least
-significant 16 bits of a 23-bit extended address are placed into
-the opcode.  */
-  BFD_RELOC_TIC54X_16_OF_23,
-
-/* This is a reloc for the tms320c54x, where the most
-significant 7 bits of a 23-bit extended address are placed into
-the opcode.  */
-  BFD_RELOC_TIC54X_MS7_OF_23,
-
-/* TMS320C6000 relocations.  */
-  BFD_RELOC_C6000_PCR_S21,
-  BFD_RELOC_C6000_PCR_S12,
-  BFD_RELOC_C6000_PCR_S10,
-  BFD_RELOC_C6000_PCR_S7,
-  BFD_RELOC_C6000_ABS_S16,
-  BFD_RELOC_C6000_ABS_L16,
-  BFD_RELOC_C6000_ABS_H16,
-  BFD_RELOC_C6000_SBR_U15_B,
-  BFD_RELOC_C6000_SBR_U15_H,
-  BFD_RELOC_C6000_SBR_U15_W,
-  BFD_RELOC_C6000_SBR_S16,
-  BFD_RELOC_C6000_SBR_L16_B,
-  BFD_RELOC_C6000_SBR_L16_H,
-  BFD_RELOC_C6000_SBR_L16_W,
-  BFD_RELOC_C6000_SBR_H16_B,
-  BFD_RELOC_C6000_SBR_H16_H,
-  BFD_RELOC_C6000_SBR_H16_W,
-  BFD_RELOC_C6000_SBR_GOT_U15_W,
-  BFD_RELOC_C6000_SBR_GOT_L16_W,
-  BFD_RELOC_C6000_SBR_GOT_H16_W,
-  BFD_RELOC_C6000_DSBT_INDEX,
-  BFD_RELOC_C6000_PREL31,
-  BFD_RELOC_C6000_COPY,
-  BFD_RELOC_C6000_JUMP_SLOT,
-  BFD_RELOC_C6000_EHTYPE,
-  BFD_RELOC_C6000_PCR_H16,
-  BFD_RELOC_C6000_PCR_L16,
-  BFD_RELOC_C6000_ALIGN,
-  BFD_RELOC_C6000_FPHEAD,
-  BFD_RELOC_C6000_NOCMP,
-
-/* This is a 48 bit reloc for the FR30 that stores 32 bits.  */
-  BFD_RELOC_FR30_48,
-
-/* This is a 32 bit reloc for the FR30 that stores 20 bits split up into
-two sections.  */
-  BFD_RELOC_FR30_20,
-
-/* This is a 16 bit reloc for the FR30 that stores a 6 bit word offset in
-4 bits.  */
-  BFD_RELOC_FR30_6_IN_4,
-
-/* This is a 16 bit reloc for the FR30 that stores an 8 bit byte offset
-into 8 bits.  */
-  BFD_RELOC_FR30_8_IN_8,
-
-/* This is a 16 bit reloc for the FR30 that stores a 9 bit short offset
-into 8 bits.  */
-  BFD_RELOC_FR30_9_IN_8,
-
-/* This is a 16 bit reloc for the FR30 that stores a 10 bit word offset
-into 8 bits.  */
-  BFD_RELOC_FR30_10_IN_8,
-
-/* This is a 16 bit reloc for the FR30 that stores a 9 bit pc relative
-short offset into 8 bits.  */
-  BFD_RELOC_FR30_9_PCREL,
-
-/* This is a 16 bit reloc for the FR30 that stores a 12 bit pc relative
-short offset into 11 bits.  */
-  BFD_RELOC_FR30_12_PCREL,
-
-/* Motorola Mcore relocations.  */
-  BFD_RELOC_MCORE_PCREL_IMM8BY4,
-  BFD_RELOC_MCORE_PCREL_IMM11BY2,
-  BFD_RELOC_MCORE_PCREL_IMM4BY2,
-  BFD_RELOC_MCORE_PCREL_32,
-  BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2,
-  BFD_RELOC_MCORE_RVA,
-
-/* Toshiba Media Processor Relocations.  */
-  BFD_RELOC_MEP_8,
-  BFD_RELOC_MEP_16,
-  BFD_RELOC_MEP_32,
-  BFD_RELOC_MEP_PCREL8A2,
-  BFD_RELOC_MEP_PCREL12A2,
-  BFD_RELOC_MEP_PCREL17A2,
-  BFD_RELOC_MEP_PCREL24A2,
-  BFD_RELOC_MEP_PCABS24A2,
-  BFD_RELOC_MEP_LOW16,
-  BFD_RELOC_MEP_HI16U,
-  BFD_RELOC_MEP_HI16S,
-  BFD_RELOC_MEP_GPREL,
-  BFD_RELOC_MEP_TPREL,
-  BFD_RELOC_MEP_TPREL7,
-  BFD_RELOC_MEP_TPREL7A2,
-  BFD_RELOC_MEP_TPREL7A4,
-  BFD_RELOC_MEP_UIMM24,
-  BFD_RELOC_MEP_ADDR24A4,
-  BFD_RELOC_MEP_GNU_VTINHERIT,
-  BFD_RELOC_MEP_GNU_VTENTRY,
-
-
-/* Imagination Technologies Meta relocations.  */
-  BFD_RELOC_METAG_HIADDR16,
-  BFD_RELOC_METAG_LOADDR16,
-  BFD_RELOC_METAG_RELBRANCH,
-  BFD_RELOC_METAG_GETSETOFF,
-  BFD_RELOC_METAG_HIOG,
-  BFD_RELOC_METAG_LOOG,
-  BFD_RELOC_METAG_REL8,
-  BFD_RELOC_METAG_REL16,
-  BFD_RELOC_METAG_HI16_GOTOFF,
-  BFD_RELOC_METAG_LO16_GOTOFF,
-  BFD_RELOC_METAG_GETSET_GOTOFF,
-  BFD_RELOC_METAG_GETSET_GOT,
-  BFD_RELOC_METAG_HI16_GOTPC,
-  BFD_RELOC_METAG_LO16_GOTPC,
-  BFD_RELOC_METAG_HI16_PLT,
-  BFD_RELOC_METAG_LO16_PLT,
-  BFD_RELOC_METAG_RELBRANCH_PLT,
-  BFD_RELOC_METAG_GOTOFF,
-  BFD_RELOC_METAG_PLT,
-  BFD_RELOC_METAG_COPY,
-  BFD_RELOC_METAG_JMP_SLOT,
-  BFD_RELOC_METAG_RELATIVE,
-  BFD_RELOC_METAG_GLOB_DAT,
-  BFD_RELOC_METAG_TLS_GD,
-  BFD_RELOC_METAG_TLS_LDM,
-  BFD_RELOC_METAG_TLS_LDO_HI16,
-  BFD_RELOC_METAG_TLS_LDO_LO16,
-  BFD_RELOC_METAG_TLS_LDO,
-  BFD_RELOC_METAG_TLS_IE,
-  BFD_RELOC_METAG_TLS_IENONPIC,
-  BFD_RELOC_METAG_TLS_IENONPIC_HI16,
-  BFD_RELOC_METAG_TLS_IENONPIC_LO16,
-  BFD_RELOC_METAG_TLS_TPOFF,
-  BFD_RELOC_METAG_TLS_DTPMOD,
-  BFD_RELOC_METAG_TLS_DTPOFF,
-  BFD_RELOC_METAG_TLS_LE,
-  BFD_RELOC_METAG_TLS_LE_HI16,
-  BFD_RELOC_METAG_TLS_LE_LO16,
-
-/* These are relocations for the GETA instruction.  */
-  BFD_RELOC_MMIX_GETA,
-  BFD_RELOC_MMIX_GETA_1,
-  BFD_RELOC_MMIX_GETA_2,
-  BFD_RELOC_MMIX_GETA_3,
-
-/* These are relocations for a conditional branch instruction.  */
-  BFD_RELOC_MMIX_CBRANCH,
-  BFD_RELOC_MMIX_CBRANCH_J,
-  BFD_RELOC_MMIX_CBRANCH_1,
-  BFD_RELOC_MMIX_CBRANCH_2,
-  BFD_RELOC_MMIX_CBRANCH_3,
-
-/* These are relocations for the PUSHJ instruction.  */
-  BFD_RELOC_MMIX_PUSHJ,
-  BFD_RELOC_MMIX_PUSHJ_1,
-  BFD_RELOC_MMIX_PUSHJ_2,
-  BFD_RELOC_MMIX_PUSHJ_3,
-  BFD_RELOC_MMIX_PUSHJ_STUBBABLE,
-
-/* These are relocations for the JMP instruction.  */
-  BFD_RELOC_MMIX_JMP,
-  BFD_RELOC_MMIX_JMP_1,
-  BFD_RELOC_MMIX_JMP_2,
-  BFD_RELOC_MMIX_JMP_3,
-
-/* This is a relocation for a relative address as in a GETA instruction or
-a branch.  */
-  BFD_RELOC_MMIX_ADDR19,
-
-/* This is a relocation for a relative address as in a JMP instruction.  */
-  BFD_RELOC_MMIX_ADDR27,
-
-/* This is a relocation for an instruction field that may be a general
-register or a value 0..255.  */
-  BFD_RELOC_MMIX_REG_OR_BYTE,
-
-/* This is a relocation for an instruction field that may be a general
-register.  */
-  BFD_RELOC_MMIX_REG,
-
-/* This is a relocation for two instruction fields holding a register and
-an offset, the equivalent of the relocation.  */
-  BFD_RELOC_MMIX_BASE_PLUS_OFFSET,
-
-/* This relocation is an assertion that the expression is not allocated as
-a global register.  It does not modify contents.  */
-  BFD_RELOC_MMIX_LOCAL,
-
-/* This is a 16 bit reloc for the AVR that stores 8 bit pc relative
-short offset into 7 bits.  */
-  BFD_RELOC_AVR_7_PCREL,
-
-/* This is a 16 bit reloc for the AVR that stores 13 bit pc relative
-short offset into 12 bits.  */
-  BFD_RELOC_AVR_13_PCREL,
-
-/* This is a 16 bit reloc for the AVR that stores 17 bit value (usually
-program memory address) into 16 bits.  */
-  BFD_RELOC_AVR_16_PM,
-
-/* This is a 16 bit reloc for the AVR that stores 8 bit value (usually
-data memory address) into 8 bit immediate value of LDI insn.  */
-  BFD_RELOC_AVR_LO8_LDI,
-
-/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
-of data memory address) into 8 bit immediate value of LDI insn.  */
-  BFD_RELOC_AVR_HI8_LDI,
-
-/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
-of program memory address) into 8 bit immediate value of LDI insn.  */
-  BFD_RELOC_AVR_HH8_LDI,
-
-/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
-of 32 bit value) into 8 bit immediate value of LDI insn.  */
-  BFD_RELOC_AVR_MS8_LDI,
-
-/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(usually data memory address) into 8 bit immediate value of SUBI insn.  */
-  BFD_RELOC_AVR_LO8_LDI_NEG,
-
-/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(high 8 bit of data memory address) into 8 bit immediate value of
-SUBI insn.  */
-  BFD_RELOC_AVR_HI8_LDI_NEG,
-
-/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(most high 8 bit of program memory address) into 8 bit immediate value
-of LDI or SUBI insn.  */
-  BFD_RELOC_AVR_HH8_LDI_NEG,
-
-/* This is a 16 bit reloc for the AVR that stores negated 8 bit value (msb
-of 32 bit value) into 8 bit immediate value of LDI insn.  */
-  BFD_RELOC_AVR_MS8_LDI_NEG,
-
-/* This is a 16 bit reloc for the AVR that stores 8 bit value (usually
-command address) into 8 bit immediate value of LDI insn.  */
-  BFD_RELOC_AVR_LO8_LDI_PM,
-
-/* This is a 16 bit reloc for the AVR that stores 8 bit value
-(command address) into 8 bit immediate value of LDI insn. If the address
-is beyond the 128k boundary, the linker inserts a jump stub for this reloc
-in the lower 128k.  */
-  BFD_RELOC_AVR_LO8_LDI_GS,
-
-/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
-of command address) into 8 bit immediate value of LDI insn.  */
-  BFD_RELOC_AVR_HI8_LDI_PM,
-
-/* This is a 16 bit reloc for the AVR that stores 8 bit value (high 8 bit
-of command address) into 8 bit immediate value of LDI insn.  If the address
-is beyond the 128k boundary, the linker inserts a jump stub for this reloc
-below 128k.  */
-  BFD_RELOC_AVR_HI8_LDI_GS,
-
-/* This is a 16 bit reloc for the AVR that stores 8 bit value (most high 8 bit
-of command address) into 8 bit immediate value of LDI insn.  */
-  BFD_RELOC_AVR_HH8_LDI_PM,
-
-/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(usually command address) into 8 bit immediate value of SUBI insn.  */
-  BFD_RELOC_AVR_LO8_LDI_PM_NEG,
-
-/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(high 8 bit of 16 bit command address) into 8 bit immediate value
-of SUBI insn.  */
-  BFD_RELOC_AVR_HI8_LDI_PM_NEG,
-
-/* This is a 16 bit reloc for the AVR that stores negated 8 bit value
-(high 6 bit of 22 bit command address) into 8 bit immediate
-value of SUBI insn.  */
-  BFD_RELOC_AVR_HH8_LDI_PM_NEG,
-
-/* This is a 32 bit reloc for the AVR that stores 23 bit value
-into 22 bits.  */
-  BFD_RELOC_AVR_CALL,
-
-/* This is a 16 bit reloc for the AVR that stores all needed bits
-for absolute addressing with ldi with overflow check to linktime  */
-  BFD_RELOC_AVR_LDI,
-
-/* This is a 6 bit reloc for the AVR that stores offset for ldd/std
-instructions  */
-  BFD_RELOC_AVR_6,
-
-/* This is a 6 bit reloc for the AVR that stores offset for adiw/sbiw
-instructions  */
-  BFD_RELOC_AVR_6_ADIW,
-
-/* This is a 8 bit reloc for the AVR that stores bits 0..7 of a symbol
-in .byte lo8(symbol)  */
-  BFD_RELOC_AVR_8_LO,
-
-/* This is a 8 bit reloc for the AVR that stores bits 8..15 of a symbol
-in .byte hi8(symbol)  */
-  BFD_RELOC_AVR_8_HI,
-
-/* This is a 8 bit reloc for the AVR that stores bits 16..23 of a symbol
-in .byte hlo8(symbol)  */
-  BFD_RELOC_AVR_8_HLO,
-
-/* AVR relocations to mark the difference of two local symbols.
-These are only needed to support linker relaxation and can be ignored
-when not relaxing.  The field is set to the value of the difference
-assuming no relaxation.  The relocation encodes the position of the
-second symbol so the linker can determine whether to adjust the field
-value.  */
-  BFD_RELOC_AVR_DIFF8,
-  BFD_RELOC_AVR_DIFF16,
-  BFD_RELOC_AVR_DIFF32,
-
-/* This is a 7 bit reloc for the AVR that stores SRAM address for 16bit
-lds and sts instructions supported only tiny core.  */
-  BFD_RELOC_AVR_LDS_STS_16,
-
-/* This is a 6 bit reloc for the AVR that stores an I/O register
-number for the IN and OUT instructions  */
-  BFD_RELOC_AVR_PORT6,
-
-/* This is a 5 bit reloc for the AVR that stores an I/O register
-number for the SBIC, SBIS, SBI and CBI instructions  */
-  BFD_RELOC_AVR_PORT5,
-
-/* RISC-V relocations.  */
-  BFD_RELOC_RISCV_HI20,
-  BFD_RELOC_RISCV_PCREL_HI20,
-  BFD_RELOC_RISCV_PCREL_LO12_I,
-  BFD_RELOC_RISCV_PCREL_LO12_S,
-  BFD_RELOC_RISCV_LO12_I,
-  BFD_RELOC_RISCV_LO12_S,
-  BFD_RELOC_RISCV_GPREL12_I,
-  BFD_RELOC_RISCV_GPREL12_S,
-  BFD_RELOC_RISCV_TPREL_HI20,
-  BFD_RELOC_RISCV_TPREL_LO12_I,
-  BFD_RELOC_RISCV_TPREL_LO12_S,
-  BFD_RELOC_RISCV_TPREL_ADD,
-  BFD_RELOC_RISCV_CALL,
-  BFD_RELOC_RISCV_CALL_PLT,
-  BFD_RELOC_RISCV_ADD8,
-  BFD_RELOC_RISCV_ADD16,
-  BFD_RELOC_RISCV_ADD32,
-  BFD_RELOC_RISCV_ADD64,
-  BFD_RELOC_RISCV_SUB8,
-  BFD_RELOC_RISCV_SUB16,
-  BFD_RELOC_RISCV_SUB32,
-  BFD_RELOC_RISCV_SUB64,
-  BFD_RELOC_RISCV_GOT_HI20,
-  BFD_RELOC_RISCV_TLS_GOT_HI20,
-  BFD_RELOC_RISCV_TLS_GD_HI20,
-  BFD_RELOC_RISCV_JMP,
-  BFD_RELOC_RISCV_TLS_DTPMOD32,
-  BFD_RELOC_RISCV_TLS_DTPREL32,
-  BFD_RELOC_RISCV_TLS_DTPMOD64,
-  BFD_RELOC_RISCV_TLS_DTPREL64,
-  BFD_RELOC_RISCV_TLS_TPREL32,
-  BFD_RELOC_RISCV_TLS_TPREL64,
-  BFD_RELOC_RISCV_ALIGN,
-  BFD_RELOC_RISCV_RVC_BRANCH,
-  BFD_RELOC_RISCV_RVC_JUMP,
-  BFD_RELOC_RISCV_RVC_LUI,
-  BFD_RELOC_RISCV_GPREL_I,
-  BFD_RELOC_RISCV_GPREL_S,
-  BFD_RELOC_RISCV_TPREL_I,
-  BFD_RELOC_RISCV_TPREL_S,
-  BFD_RELOC_RISCV_RELAX,
-  BFD_RELOC_RISCV_CFA,
-  BFD_RELOC_RISCV_SUB6,
-  BFD_RELOC_RISCV_SET6,
-  BFD_RELOC_RISCV_SET8,
-  BFD_RELOC_RISCV_SET16,
-  BFD_RELOC_RISCV_SET32,
-
-/* Renesas RL78 Relocations.  */
-  BFD_RELOC_RL78_NEG8,
-  BFD_RELOC_RL78_NEG16,
-  BFD_RELOC_RL78_NEG24,
-  BFD_RELOC_RL78_NEG32,
-  BFD_RELOC_RL78_16_OP,
-  BFD_RELOC_RL78_24_OP,
-  BFD_RELOC_RL78_32_OP,
-  BFD_RELOC_RL78_8U,
-  BFD_RELOC_RL78_16U,
-  BFD_RELOC_RL78_24U,
-  BFD_RELOC_RL78_DIR3U_PCREL,
-  BFD_RELOC_RL78_DIFF,
-  BFD_RELOC_RL78_GPRELB,
-  BFD_RELOC_RL78_GPRELW,
-  BFD_RELOC_RL78_GPRELL,
-  BFD_RELOC_RL78_SYM,
-  BFD_RELOC_RL78_OP_SUBTRACT,
-  BFD_RELOC_RL78_OP_NEG,
-  BFD_RELOC_RL78_OP_AND,
-  BFD_RELOC_RL78_OP_SHRA,
-  BFD_RELOC_RL78_ABS8,
-  BFD_RELOC_RL78_ABS16,
-  BFD_RELOC_RL78_ABS16_REV,
-  BFD_RELOC_RL78_ABS32,
-  BFD_RELOC_RL78_ABS32_REV,
-  BFD_RELOC_RL78_ABS16U,
-  BFD_RELOC_RL78_ABS16UW,
-  BFD_RELOC_RL78_ABS16UL,
-  BFD_RELOC_RL78_RELAX,
-  BFD_RELOC_RL78_HI16,
-  BFD_RELOC_RL78_HI8,
-  BFD_RELOC_RL78_LO16,
-  BFD_RELOC_RL78_CODE,
-  BFD_RELOC_RL78_SADDR,
-
-/* Renesas RX Relocations.  */
-  BFD_RELOC_RX_NEG8,
-  BFD_RELOC_RX_NEG16,
-  BFD_RELOC_RX_NEG24,
-  BFD_RELOC_RX_NEG32,
-  BFD_RELOC_RX_16_OP,
-  BFD_RELOC_RX_24_OP,
-  BFD_RELOC_RX_32_OP,
-  BFD_RELOC_RX_8U,
-  BFD_RELOC_RX_16U,
-  BFD_RELOC_RX_24U,
-  BFD_RELOC_RX_DIR3U_PCREL,
-  BFD_RELOC_RX_DIFF,
-  BFD_RELOC_RX_GPRELB,
-  BFD_RELOC_RX_GPRELW,
-  BFD_RELOC_RX_GPRELL,
-  BFD_RELOC_RX_SYM,
-  BFD_RELOC_RX_OP_SUBTRACT,
-  BFD_RELOC_RX_OP_NEG,
-  BFD_RELOC_RX_ABS8,
-  BFD_RELOC_RX_ABS16,
-  BFD_RELOC_RX_ABS16_REV,
-  BFD_RELOC_RX_ABS32,
-  BFD_RELOC_RX_ABS32_REV,
-  BFD_RELOC_RX_ABS16U,
-  BFD_RELOC_RX_ABS16UW,
-  BFD_RELOC_RX_ABS16UL,
-  BFD_RELOC_RX_RELAX,
-
-/* Direct 12 bit.  */
-  BFD_RELOC_390_12,
-
-/* 12 bit GOT offset.  */
-  BFD_RELOC_390_GOT12,
-
-/* 32 bit PC relative PLT address.  */
-  BFD_RELOC_390_PLT32,
-
-/* Copy symbol at runtime.  */
-  BFD_RELOC_390_COPY,
-
-/* Create GOT entry.  */
-  BFD_RELOC_390_GLOB_DAT,
-
-/* Create PLT entry.  */
-  BFD_RELOC_390_JMP_SLOT,
-
-/* Adjust by program base.  */
-  BFD_RELOC_390_RELATIVE,
-
-/* 32 bit PC relative offset to GOT.  */
-  BFD_RELOC_390_GOTPC,
-
-/* 16 bit GOT offset.  */
-  BFD_RELOC_390_GOT16,
-
-/* PC relative 12 bit shifted by 1.  */
-  BFD_RELOC_390_PC12DBL,
-
-/* 12 bit PC rel. PLT shifted by 1.  */
-  BFD_RELOC_390_PLT12DBL,
-
-/* PC relative 16 bit shifted by 1.  */
-  BFD_RELOC_390_PC16DBL,
-
-/* 16 bit PC rel. PLT shifted by 1.  */
-  BFD_RELOC_390_PLT16DBL,
-
-/* PC relative 24 bit shifted by 1.  */
-  BFD_RELOC_390_PC24DBL,
-
-/* 24 bit PC rel. PLT shifted by 1.  */
-  BFD_RELOC_390_PLT24DBL,
-
-/* PC relative 32 bit shifted by 1.  */
-  BFD_RELOC_390_PC32DBL,
-
-/* 32 bit PC rel. PLT shifted by 1.  */
-  BFD_RELOC_390_PLT32DBL,
-
-/* 32 bit PC rel. GOT shifted by 1.  */
-  BFD_RELOC_390_GOTPCDBL,
-
-/* 64 bit GOT offset.  */
-  BFD_RELOC_390_GOT64,
-
-/* 64 bit PC relative PLT address.  */
-  BFD_RELOC_390_PLT64,
-
-/* 32 bit rel. offset to GOT entry.  */
-  BFD_RELOC_390_GOTENT,
-
-/* 64 bit offset to GOT.  */
-  BFD_RELOC_390_GOTOFF64,
-
-/* 12-bit offset to symbol-entry within GOT, with PLT handling.  */
-  BFD_RELOC_390_GOTPLT12,
-
-/* 16-bit offset to symbol-entry within GOT, with PLT handling.  */
-  BFD_RELOC_390_GOTPLT16,
-
-/* 32-bit offset to symbol-entry within GOT, with PLT handling.  */
-  BFD_RELOC_390_GOTPLT32,
-
-/* 64-bit offset to symbol-entry within GOT, with PLT handling.  */
-  BFD_RELOC_390_GOTPLT64,
-
-/* 32-bit rel. offset to symbol-entry within GOT, with PLT handling.  */
-  BFD_RELOC_390_GOTPLTENT,
-
-/* 16-bit rel. offset from the GOT to a PLT entry.  */
-  BFD_RELOC_390_PLTOFF16,
-
-/* 32-bit rel. offset from the GOT to a PLT entry.  */
-  BFD_RELOC_390_PLTOFF32,
-
-/* 64-bit rel. offset from the GOT to a PLT entry.  */
-  BFD_RELOC_390_PLTOFF64,
-
-/* s390 tls relocations.  */
-  BFD_RELOC_390_TLS_LOAD,
-  BFD_RELOC_390_TLS_GDCALL,
-  BFD_RELOC_390_TLS_LDCALL,
-  BFD_RELOC_390_TLS_GD32,
-  BFD_RELOC_390_TLS_GD64,
-  BFD_RELOC_390_TLS_GOTIE12,
-  BFD_RELOC_390_TLS_GOTIE32,
-  BFD_RELOC_390_TLS_GOTIE64,
-  BFD_RELOC_390_TLS_LDM32,
-  BFD_RELOC_390_TLS_LDM64,
-  BFD_RELOC_390_TLS_IE32,
-  BFD_RELOC_390_TLS_IE64,
-  BFD_RELOC_390_TLS_IEENT,
-  BFD_RELOC_390_TLS_LE32,
-  BFD_RELOC_390_TLS_LE64,
-  BFD_RELOC_390_TLS_LDO32,
-  BFD_RELOC_390_TLS_LDO64,
-  BFD_RELOC_390_TLS_DTPMOD,
-  BFD_RELOC_390_TLS_DTPOFF,
-  BFD_RELOC_390_TLS_TPOFF,
-
-/* Long displacement extension.  */
-  BFD_RELOC_390_20,
-  BFD_RELOC_390_GOT20,
-  BFD_RELOC_390_GOTPLT20,
-  BFD_RELOC_390_TLS_GOTIE20,
-
-/* STT_GNU_IFUNC relocation.  */
-  BFD_RELOC_390_IRELATIVE,
-
-/* Score relocations
-Low 16 bit for load/store  */
-  BFD_RELOC_SCORE_GPREL15,
-
-/* This is a 24-bit reloc with the right 1 bit assumed to be 0  */
-  BFD_RELOC_SCORE_DUMMY2,
-  BFD_RELOC_SCORE_JMP,
-
-/* This is a 19-bit reloc with the right 1 bit assumed to be 0  */
-  BFD_RELOC_SCORE_BRANCH,
-
-/* This is a 32-bit reloc for 48-bit instructions.  */
-  BFD_RELOC_SCORE_IMM30,
-
-/* This is a 32-bit reloc for 48-bit instructions.  */
-  BFD_RELOC_SCORE_IMM32,
-
-/* This is a 11-bit reloc with the right 1 bit assumed to be 0  */
-  BFD_RELOC_SCORE16_JMP,
-
-/* This is a 8-bit reloc with the right 1 bit assumed to be 0  */
-  BFD_RELOC_SCORE16_BRANCH,
-
-/* This is a 9-bit reloc with the right 1 bit assumed to be 0  */
-  BFD_RELOC_SCORE_BCMP,
-
-/* Undocumented Score relocs  */
-  BFD_RELOC_SCORE_GOT15,
-  BFD_RELOC_SCORE_GOT_LO16,
-  BFD_RELOC_SCORE_CALL15,
-  BFD_RELOC_SCORE_DUMMY_HI16,
-
-/* Scenix IP2K - 9-bit register number / data address  */
-  BFD_RELOC_IP2K_FR9,
-
-/* Scenix IP2K - 4-bit register/data bank number  */
-  BFD_RELOC_IP2K_BANK,
-
-/* Scenix IP2K - low 13 bits of instruction word address  */
-  BFD_RELOC_IP2K_ADDR16CJP,
-
-/* Scenix IP2K - high 3 bits of instruction word address  */
-  BFD_RELOC_IP2K_PAGE3,
-
-/* Scenix IP2K - ext/low/high 8 bits of data address  */
-  BFD_RELOC_IP2K_LO8DATA,
-  BFD_RELOC_IP2K_HI8DATA,
-  BFD_RELOC_IP2K_EX8DATA,
-
-/* Scenix IP2K - low/high 8 bits of instruction word address  */
-  BFD_RELOC_IP2K_LO8INSN,
-  BFD_RELOC_IP2K_HI8INSN,
-
-/* Scenix IP2K - even/odd PC modifier to modify snb pcl.0  */
-  BFD_RELOC_IP2K_PC_SKIP,
-
-/* Scenix IP2K - 16 bit word address in text section.  */
-  BFD_RELOC_IP2K_TEXT,
-
-/* Scenix IP2K - 7-bit sp or dp offset  */
-  BFD_RELOC_IP2K_FR_OFFSET,
-
-/* Scenix VPE4K coprocessor - data/insn-space addressing  */
-  BFD_RELOC_VPE4KMATH_DATA,
-  BFD_RELOC_VPE4KMATH_INSN,
-
-/* These two relocations are used by the linker to determine which of
-the entries in a C++ virtual function table are actually used.  When
-the --gc-sections option is given, the linker will zero out the entries
-that are not used, so that the code for those functions need not be
-included in the output.
-
-VTABLE_INHERIT is a zero-space relocation used to describe to the
-linker the inheritance tree of a C++ virtual function table.  The
-relocation's symbol should be the parent class' vtable, and the
-relocation should be located at the child vtable.
-
-VTABLE_ENTRY is a zero-space relocation that describes the use of a
-virtual function table entry.  The reloc's symbol should refer to the
-table of the class mentioned in the code.  Off of that base, an offset
-describes the entry that is being used.  For Rela hosts, this offset
-is stored in the reloc's addend.  For Rel hosts, we are forced to put
-this offset in the reloc's section offset.  */
-  BFD_RELOC_VTABLE_INHERIT,
-  BFD_RELOC_VTABLE_ENTRY,
-
-/* Intel IA64 Relocations.  */
-  BFD_RELOC_IA64_IMM14,
-  BFD_RELOC_IA64_IMM22,
-  BFD_RELOC_IA64_IMM64,
-  BFD_RELOC_IA64_DIR32MSB,
-  BFD_RELOC_IA64_DIR32LSB,
-  BFD_RELOC_IA64_DIR64MSB,
-  BFD_RELOC_IA64_DIR64LSB,
-  BFD_RELOC_IA64_GPREL22,
-  BFD_RELOC_IA64_GPREL64I,
-  BFD_RELOC_IA64_GPREL32MSB,
-  BFD_RELOC_IA64_GPREL32LSB,
-  BFD_RELOC_IA64_GPREL64MSB,
-  BFD_RELOC_IA64_GPREL64LSB,
-  BFD_RELOC_IA64_LTOFF22,
-  BFD_RELOC_IA64_LTOFF64I,
-  BFD_RELOC_IA64_PLTOFF22,
-  BFD_RELOC_IA64_PLTOFF64I,
-  BFD_RELOC_IA64_PLTOFF64MSB,
-  BFD_RELOC_IA64_PLTOFF64LSB,
-  BFD_RELOC_IA64_FPTR64I,
-  BFD_RELOC_IA64_FPTR32MSB,
-  BFD_RELOC_IA64_FPTR32LSB,
-  BFD_RELOC_IA64_FPTR64MSB,
-  BFD_RELOC_IA64_FPTR64LSB,
-  BFD_RELOC_IA64_PCREL21B,
-  BFD_RELOC_IA64_PCREL21BI,
-  BFD_RELOC_IA64_PCREL21M,
-  BFD_RELOC_IA64_PCREL21F,
-  BFD_RELOC_IA64_PCREL22,
-  BFD_RELOC_IA64_PCREL60B,
-  BFD_RELOC_IA64_PCREL64I,
-  BFD_RELOC_IA64_PCREL32MSB,
-  BFD_RELOC_IA64_PCREL32LSB,
-  BFD_RELOC_IA64_PCREL64MSB,
-  BFD_RELOC_IA64_PCREL64LSB,
-  BFD_RELOC_IA64_LTOFF_FPTR22,
-  BFD_RELOC_IA64_LTOFF_FPTR64I,
-  BFD_RELOC_IA64_LTOFF_FPTR32MSB,
-  BFD_RELOC_IA64_LTOFF_FPTR32LSB,
-  BFD_RELOC_IA64_LTOFF_FPTR64MSB,
-  BFD_RELOC_IA64_LTOFF_FPTR64LSB,
-  BFD_RELOC_IA64_SEGREL32MSB,
-  BFD_RELOC_IA64_SEGREL32LSB,
-  BFD_RELOC_IA64_SEGREL64MSB,
-  BFD_RELOC_IA64_SEGREL64LSB,
-  BFD_RELOC_IA64_SECREL32MSB,
-  BFD_RELOC_IA64_SECREL32LSB,
-  BFD_RELOC_IA64_SECREL64MSB,
-  BFD_RELOC_IA64_SECREL64LSB,
-  BFD_RELOC_IA64_REL32MSB,
-  BFD_RELOC_IA64_REL32LSB,
-  BFD_RELOC_IA64_REL64MSB,
-  BFD_RELOC_IA64_REL64LSB,
-  BFD_RELOC_IA64_LTV32MSB,
-  BFD_RELOC_IA64_LTV32LSB,
-  BFD_RELOC_IA64_LTV64MSB,
-  BFD_RELOC_IA64_LTV64LSB,
-  BFD_RELOC_IA64_IPLTMSB,
-  BFD_RELOC_IA64_IPLTLSB,
-  BFD_RELOC_IA64_COPY,
-  BFD_RELOC_IA64_LTOFF22X,
-  BFD_RELOC_IA64_LDXMOV,
-  BFD_RELOC_IA64_TPREL14,
-  BFD_RELOC_IA64_TPREL22,
-  BFD_RELOC_IA64_TPREL64I,
-  BFD_RELOC_IA64_TPREL64MSB,
-  BFD_RELOC_IA64_TPREL64LSB,
-  BFD_RELOC_IA64_LTOFF_TPREL22,
-  BFD_RELOC_IA64_DTPMOD64MSB,
-  BFD_RELOC_IA64_DTPMOD64LSB,
-  BFD_RELOC_IA64_LTOFF_DTPMOD22,
-  BFD_RELOC_IA64_DTPREL14,
-  BFD_RELOC_IA64_DTPREL22,
-  BFD_RELOC_IA64_DTPREL64I,
-  BFD_RELOC_IA64_DTPREL32MSB,
-  BFD_RELOC_IA64_DTPREL32LSB,
-  BFD_RELOC_IA64_DTPREL64MSB,
-  BFD_RELOC_IA64_DTPREL64LSB,
-  BFD_RELOC_IA64_LTOFF_DTPREL22,
-
-/* Motorola 68HC11 reloc.
-This is the 8 bit high part of an absolute address.  */
-  BFD_RELOC_M68HC11_HI8,
-
-/* Motorola 68HC11 reloc.
-This is the 8 bit low part of an absolute address.  */
-  BFD_RELOC_M68HC11_LO8,
-
-/* Motorola 68HC11 reloc.
-This is the 3 bit of a value.  */
-  BFD_RELOC_M68HC11_3B,
-
-/* Motorola 68HC11 reloc.
-This reloc marks the beginning of a jump/call instruction.
-It is used for linker relaxation to correctly identify beginning
-of instruction and change some branches to use PC-relative
-addressing mode.  */
-  BFD_RELOC_M68HC11_RL_JUMP,
-
-/* Motorola 68HC11 reloc.
-This reloc marks a group of several instructions that gcc generates
-and for which the linker relaxation pass can modify and/or remove
-some of them.  */
-  BFD_RELOC_M68HC11_RL_GROUP,
-
-/* Motorola 68HC11 reloc.
-This is the 16-bit lower part of an address.  It is used for 'call'
-instruction to specify the symbol address without any special
-transformation (due to memory bank window).  */
-  BFD_RELOC_M68HC11_LO16,
-
-/* Motorola 68HC11 reloc.
-This is a 8-bit reloc that specifies the page number of an address.
-It is used by 'call' instruction to specify the page number of
-the symbol.  */
-  BFD_RELOC_M68HC11_PAGE,
-
-/* Motorola 68HC11 reloc.
-This is a 24-bit reloc that represents the address with a 16-bit
-value and a 8-bit page number.  The symbol address is transformed
-to follow the 16K memory bank of 68HC12 (seen as mapped in the window).  */
-  BFD_RELOC_M68HC11_24,
-
-/* Motorola 68HC12 reloc.
-This is the 5 bits of a value.  */
-  BFD_RELOC_M68HC12_5B,
-
-/* Freescale XGATE reloc.
-This reloc marks the beginning of a bra/jal instruction.  */
-  BFD_RELOC_XGATE_RL_JUMP,
-
-/* Freescale XGATE reloc.
-This reloc marks a group of several instructions that gcc generates
-and for which the linker relaxation pass can modify and/or remove
-some of them.  */
-  BFD_RELOC_XGATE_RL_GROUP,
-
-/* Freescale XGATE reloc.
-This is the 16-bit lower part of an address.  It is used for the '16-bit'
-instructions.  */
-  BFD_RELOC_XGATE_LO16,
-
-/* Freescale XGATE reloc.  */
-  BFD_RELOC_XGATE_GPAGE,
-
-/* Freescale XGATE reloc.  */
-  BFD_RELOC_XGATE_24,
-
-/* Freescale XGATE reloc.
-This is a 9-bit pc-relative reloc.  */
-  BFD_RELOC_XGATE_PCREL_9,
-
-/* Freescale XGATE reloc.
-This is a 10-bit pc-relative reloc.  */
-  BFD_RELOC_XGATE_PCREL_10,
-
-/* Freescale XGATE reloc.
-This is the 16-bit lower part of an address.  It is used for the '16-bit'
-instructions.  */
-  BFD_RELOC_XGATE_IMM8_LO,
-
-/* Freescale XGATE reloc.
-This is the 16-bit higher part of an address.  It is used for the '16-bit'
-instructions.  */
-  BFD_RELOC_XGATE_IMM8_HI,
-
-/* Freescale XGATE reloc.
-This is a 3-bit pc-relative reloc.  */
-  BFD_RELOC_XGATE_IMM3,
-
-/* Freescale XGATE reloc.
-This is a 4-bit pc-relative reloc.  */
-  BFD_RELOC_XGATE_IMM4,
-
-/* Freescale XGATE reloc.
-This is a 5-bit pc-relative reloc.  */
-  BFD_RELOC_XGATE_IMM5,
-
-/* Motorola 68HC12 reloc.
-This is the 9 bits of a value.  */
-  BFD_RELOC_M68HC12_9B,
-
-/* Motorola 68HC12 reloc.
-This is the 16 bits of a value.  */
-  BFD_RELOC_M68HC12_16B,
-
-/* Motorola 68HC12/XGATE reloc.
-This is a PCREL9 branch.  */
-  BFD_RELOC_M68HC12_9_PCREL,
-
-/* Motorola 68HC12/XGATE reloc.
-This is a PCREL10 branch.  */
-  BFD_RELOC_M68HC12_10_PCREL,
-
-/* Motorola 68HC12/XGATE reloc.
-This is the 8 bit low part of an absolute address and immediately precedes
-a matching HI8XG part.  */
-  BFD_RELOC_M68HC12_LO8XG,
-
-/* Motorola 68HC12/XGATE reloc.
-This is the 8 bit high part of an absolute address and immediately follows
-a matching LO8XG part.  */
-  BFD_RELOC_M68HC12_HI8XG,
-
-/* NS CR16C Relocations.  */
-  BFD_RELOC_16C_NUM08,
-  BFD_RELOC_16C_NUM08_C,
-  BFD_RELOC_16C_NUM16,
-  BFD_RELOC_16C_NUM16_C,
-  BFD_RELOC_16C_NUM32,
-  BFD_RELOC_16C_NUM32_C,
-  BFD_RELOC_16C_DISP04,
-  BFD_RELOC_16C_DISP04_C,
-  BFD_RELOC_16C_DISP08,
-  BFD_RELOC_16C_DISP08_C,
-  BFD_RELOC_16C_DISP16,
-  BFD_RELOC_16C_DISP16_C,
-  BFD_RELOC_16C_DISP24,
-  BFD_RELOC_16C_DISP24_C,
-  BFD_RELOC_16C_DISP24a,
-  BFD_RELOC_16C_DISP24a_C,
-  BFD_RELOC_16C_REG04,
-  BFD_RELOC_16C_REG04_C,
-  BFD_RELOC_16C_REG04a,
-  BFD_RELOC_16C_REG04a_C,
-  BFD_RELOC_16C_REG14,
-  BFD_RELOC_16C_REG14_C,
-  BFD_RELOC_16C_REG16,
-  BFD_RELOC_16C_REG16_C,
-  BFD_RELOC_16C_REG20,
-  BFD_RELOC_16C_REG20_C,
-  BFD_RELOC_16C_ABS20,
-  BFD_RELOC_16C_ABS20_C,
-  BFD_RELOC_16C_ABS24,
-  BFD_RELOC_16C_ABS24_C,
-  BFD_RELOC_16C_IMM04,
-  BFD_RELOC_16C_IMM04_C,
-  BFD_RELOC_16C_IMM16,
-  BFD_RELOC_16C_IMM16_C,
-  BFD_RELOC_16C_IMM20,
-  BFD_RELOC_16C_IMM20_C,
-  BFD_RELOC_16C_IMM24,
-  BFD_RELOC_16C_IMM24_C,
-  BFD_RELOC_16C_IMM32,
-  BFD_RELOC_16C_IMM32_C,
-
-/* NS CR16 Relocations.  */
-  BFD_RELOC_CR16_NUM8,
-  BFD_RELOC_CR16_NUM16,
-  BFD_RELOC_CR16_NUM32,
-  BFD_RELOC_CR16_NUM32a,
-  BFD_RELOC_CR16_REGREL0,
-  BFD_RELOC_CR16_REGREL4,
-  BFD_RELOC_CR16_REGREL4a,
-  BFD_RELOC_CR16_REGREL14,
-  BFD_RELOC_CR16_REGREL14a,
-  BFD_RELOC_CR16_REGREL16,
-  BFD_RELOC_CR16_REGREL20,
-  BFD_RELOC_CR16_REGREL20a,
-  BFD_RELOC_CR16_ABS20,
-  BFD_RELOC_CR16_ABS24,
-  BFD_RELOC_CR16_IMM4,
-  BFD_RELOC_CR16_IMM8,
-  BFD_RELOC_CR16_IMM16,
-  BFD_RELOC_CR16_IMM20,
-  BFD_RELOC_CR16_IMM24,
-  BFD_RELOC_CR16_IMM32,
-  BFD_RELOC_CR16_IMM32a,
-  BFD_RELOC_CR16_DISP4,
-  BFD_RELOC_CR16_DISP8,
-  BFD_RELOC_CR16_DISP16,
-  BFD_RELOC_CR16_DISP20,
-  BFD_RELOC_CR16_DISP24,
-  BFD_RELOC_CR16_DISP24a,
-  BFD_RELOC_CR16_SWITCH8,
-  BFD_RELOC_CR16_SWITCH16,
-  BFD_RELOC_CR16_SWITCH32,
-  BFD_RELOC_CR16_GOT_REGREL20,
-  BFD_RELOC_CR16_GOTC_REGREL20,
-  BFD_RELOC_CR16_GLOB_DAT,
-
-/* NS CRX Relocations.  */
-  BFD_RELOC_CRX_REL4,
-  BFD_RELOC_CRX_REL8,
-  BFD_RELOC_CRX_REL8_CMP,
-  BFD_RELOC_CRX_REL16,
-  BFD_RELOC_CRX_REL24,
-  BFD_RELOC_CRX_REL32,
-  BFD_RELOC_CRX_REGREL12,
-  BFD_RELOC_CRX_REGREL22,
-  BFD_RELOC_CRX_REGREL28,
-  BFD_RELOC_CRX_REGREL32,
-  BFD_RELOC_CRX_ABS16,
-  BFD_RELOC_CRX_ABS32,
-  BFD_RELOC_CRX_NUM8,
-  BFD_RELOC_CRX_NUM16,
-  BFD_RELOC_CRX_NUM32,
-  BFD_RELOC_CRX_IMM16,
-  BFD_RELOC_CRX_IMM32,
-  BFD_RELOC_CRX_SWITCH8,
-  BFD_RELOC_CRX_SWITCH16,
-  BFD_RELOC_CRX_SWITCH32,
-
-/* These relocs are only used within the CRIS assembler.  They are not
-(at present) written to any object files.  */
-  BFD_RELOC_CRIS_BDISP8,
-  BFD_RELOC_CRIS_UNSIGNED_5,
-  BFD_RELOC_CRIS_SIGNED_6,
-  BFD_RELOC_CRIS_UNSIGNED_6,
-  BFD_RELOC_CRIS_SIGNED_8,
-  BFD_RELOC_CRIS_UNSIGNED_8,
-  BFD_RELOC_CRIS_SIGNED_16,
-  BFD_RELOC_CRIS_UNSIGNED_16,
-  BFD_RELOC_CRIS_LAPCQ_OFFSET,
-  BFD_RELOC_CRIS_UNSIGNED_4,
-
-/* Relocs used in ELF shared libraries for CRIS.  */
-  BFD_RELOC_CRIS_COPY,
-  BFD_RELOC_CRIS_GLOB_DAT,
-  BFD_RELOC_CRIS_JUMP_SLOT,
-  BFD_RELOC_CRIS_RELATIVE,
-
-/* 32-bit offset to symbol-entry within GOT.  */
-  BFD_RELOC_CRIS_32_GOT,
-
-/* 16-bit offset to symbol-entry within GOT.  */
-  BFD_RELOC_CRIS_16_GOT,
-
-/* 32-bit offset to symbol-entry within GOT, with PLT handling.  */
-  BFD_RELOC_CRIS_32_GOTPLT,
-
-/* 16-bit offset to symbol-entry within GOT, with PLT handling.  */
-  BFD_RELOC_CRIS_16_GOTPLT,
-
-/* 32-bit offset to symbol, relative to GOT.  */
-  BFD_RELOC_CRIS_32_GOTREL,
-
-/* 32-bit offset to symbol with PLT entry, relative to GOT.  */
-  BFD_RELOC_CRIS_32_PLT_GOTREL,
-
-/* 32-bit offset to symbol with PLT entry, relative to this relocation.  */
-  BFD_RELOC_CRIS_32_PLT_PCREL,
-
-/* Relocs used in TLS code for CRIS.  */
-  BFD_RELOC_CRIS_32_GOT_GD,
-  BFD_RELOC_CRIS_16_GOT_GD,
-  BFD_RELOC_CRIS_32_GD,
-  BFD_RELOC_CRIS_DTP,
-  BFD_RELOC_CRIS_32_DTPREL,
-  BFD_RELOC_CRIS_16_DTPREL,
-  BFD_RELOC_CRIS_32_GOT_TPREL,
-  BFD_RELOC_CRIS_16_GOT_TPREL,
-  BFD_RELOC_CRIS_32_TPREL,
-  BFD_RELOC_CRIS_16_TPREL,
-  BFD_RELOC_CRIS_DTPMOD,
-  BFD_RELOC_CRIS_32_IE,
-
-/* Intel i860 Relocations.  */
-  BFD_RELOC_860_COPY,
-  BFD_RELOC_860_GLOB_DAT,
-  BFD_RELOC_860_JUMP_SLOT,
-  BFD_RELOC_860_RELATIVE,
-  BFD_RELOC_860_PC26,
-  BFD_RELOC_860_PLT26,
-  BFD_RELOC_860_PC16,
-  BFD_RELOC_860_LOW0,
-  BFD_RELOC_860_SPLIT0,
-  BFD_RELOC_860_LOW1,
-  BFD_RELOC_860_SPLIT1,
-  BFD_RELOC_860_LOW2,
-  BFD_RELOC_860_SPLIT2,
-  BFD_RELOC_860_LOW3,
-  BFD_RELOC_860_LOGOT0,
-  BFD_RELOC_860_SPGOT0,
-  BFD_RELOC_860_LOGOT1,
-  BFD_RELOC_860_SPGOT1,
-  BFD_RELOC_860_LOGOTOFF0,
-  BFD_RELOC_860_SPGOTOFF0,
-  BFD_RELOC_860_LOGOTOFF1,
-  BFD_RELOC_860_SPGOTOFF1,
-  BFD_RELOC_860_LOGOTOFF2,
-  BFD_RELOC_860_LOGOTOFF3,
-  BFD_RELOC_860_LOPC,
-  BFD_RELOC_860_HIGHADJ,
-  BFD_RELOC_860_HAGOT,
-  BFD_RELOC_860_HAGOTOFF,
-  BFD_RELOC_860_HAPC,
-  BFD_RELOC_860_HIGH,
-  BFD_RELOC_860_HIGOT,
-  BFD_RELOC_860_HIGOTOFF,
-
-/* OpenRISC 1000 Relocations.  */
-  BFD_RELOC_OR1K_REL_26,
-  BFD_RELOC_OR1K_GOTPC_HI16,
-  BFD_RELOC_OR1K_GOTPC_LO16,
-  BFD_RELOC_OR1K_GOT16,
-  BFD_RELOC_OR1K_PLT26,
-  BFD_RELOC_OR1K_GOTOFF_HI16,
-  BFD_RELOC_OR1K_GOTOFF_LO16,
-  BFD_RELOC_OR1K_COPY,
-  BFD_RELOC_OR1K_GLOB_DAT,
-  BFD_RELOC_OR1K_JMP_SLOT,
-  BFD_RELOC_OR1K_RELATIVE,
-  BFD_RELOC_OR1K_TLS_GD_HI16,
-  BFD_RELOC_OR1K_TLS_GD_LO16,
-  BFD_RELOC_OR1K_TLS_LDM_HI16,
-  BFD_RELOC_OR1K_TLS_LDM_LO16,
-  BFD_RELOC_OR1K_TLS_LDO_HI16,
-  BFD_RELOC_OR1K_TLS_LDO_LO16,
-  BFD_RELOC_OR1K_TLS_IE_HI16,
-  BFD_RELOC_OR1K_TLS_IE_LO16,
-  BFD_RELOC_OR1K_TLS_LE_HI16,
-  BFD_RELOC_OR1K_TLS_LE_LO16,
-  BFD_RELOC_OR1K_TLS_TPOFF,
-  BFD_RELOC_OR1K_TLS_DTPOFF,
-  BFD_RELOC_OR1K_TLS_DTPMOD,
-
-/* H8 elf Relocations.  */
-  BFD_RELOC_H8_DIR16A8,
-  BFD_RELOC_H8_DIR16R8,
-  BFD_RELOC_H8_DIR24A8,
-  BFD_RELOC_H8_DIR24R8,
-  BFD_RELOC_H8_DIR32A16,
-  BFD_RELOC_H8_DISP32A16,
-
-/* Sony Xstormy16 Relocations.  */
-  BFD_RELOC_XSTORMY16_REL_12,
-  BFD_RELOC_XSTORMY16_12,
-  BFD_RELOC_XSTORMY16_24,
-  BFD_RELOC_XSTORMY16_FPTR16,
-
-/* Self-describing complex relocations.  */
-  BFD_RELOC_RELC,
-
-
-/* Infineon Relocations.  */
-  BFD_RELOC_XC16X_PAG,
-  BFD_RELOC_XC16X_POF,
-  BFD_RELOC_XC16X_SEG,
-  BFD_RELOC_XC16X_SOF,
-
-/* Relocations used by VAX ELF.  */
-  BFD_RELOC_VAX_GLOB_DAT,
-  BFD_RELOC_VAX_JMP_SLOT,
-  BFD_RELOC_VAX_RELATIVE,
-
-/* Morpho MT - 16 bit immediate relocation.  */
-  BFD_RELOC_MT_PC16,
-
-/* Morpho MT - Hi 16 bits of an address.  */
-  BFD_RELOC_MT_HI16,
-
-/* Morpho MT - Low 16 bits of an address.  */
-  BFD_RELOC_MT_LO16,
-
-/* Morpho MT - Used to tell the linker which vtable entries are used.  */
-  BFD_RELOC_MT_GNU_VTINHERIT,
-
-/* Morpho MT - Used to tell the linker which vtable entries are used.  */
-  BFD_RELOC_MT_GNU_VTENTRY,
-
-/* Morpho MT - 8 bit immediate relocation.  */
-  BFD_RELOC_MT_PCINSN8,
-
-/* msp430 specific relocation codes  */
-  BFD_RELOC_MSP430_10_PCREL,
-  BFD_RELOC_MSP430_16_PCREL,
-  BFD_RELOC_MSP430_16,
-  BFD_RELOC_MSP430_16_PCREL_BYTE,
-  BFD_RELOC_MSP430_16_BYTE,
-  BFD_RELOC_MSP430_2X_PCREL,
-  BFD_RELOC_MSP430_RL_PCREL,
-  BFD_RELOC_MSP430_ABS8,
-  BFD_RELOC_MSP430X_PCR20_EXT_SRC,
-  BFD_RELOC_MSP430X_PCR20_EXT_DST,
-  BFD_RELOC_MSP430X_PCR20_EXT_ODST,
-  BFD_RELOC_MSP430X_ABS20_EXT_SRC,
-  BFD_RELOC_MSP430X_ABS20_EXT_DST,
-  BFD_RELOC_MSP430X_ABS20_EXT_ODST,
-  BFD_RELOC_MSP430X_ABS20_ADR_SRC,
-  BFD_RELOC_MSP430X_ABS20_ADR_DST,
-  BFD_RELOC_MSP430X_PCR16,
-  BFD_RELOC_MSP430X_PCR20_CALL,
-  BFD_RELOC_MSP430X_ABS16,
-  BFD_RELOC_MSP430_ABS_HI16,
-  BFD_RELOC_MSP430_PREL31,
-  BFD_RELOC_MSP430_SYM_DIFF,
-
-/* Relocations used by the Altera Nios II core.  */
-  BFD_RELOC_NIOS2_S16,
-  BFD_RELOC_NIOS2_U16,
-  BFD_RELOC_NIOS2_CALL26,
-  BFD_RELOC_NIOS2_IMM5,
-  BFD_RELOC_NIOS2_CACHE_OPX,
-  BFD_RELOC_NIOS2_IMM6,
-  BFD_RELOC_NIOS2_IMM8,
-  BFD_RELOC_NIOS2_HI16,
-  BFD_RELOC_NIOS2_LO16,
-  BFD_RELOC_NIOS2_HIADJ16,
-  BFD_RELOC_NIOS2_GPREL,
-  BFD_RELOC_NIOS2_UJMP,
-  BFD_RELOC_NIOS2_CJMP,
-  BFD_RELOC_NIOS2_CALLR,
-  BFD_RELOC_NIOS2_ALIGN,
-  BFD_RELOC_NIOS2_GOT16,
-  BFD_RELOC_NIOS2_CALL16,
-  BFD_RELOC_NIOS2_GOTOFF_LO,
-  BFD_RELOC_NIOS2_GOTOFF_HA,
-  BFD_RELOC_NIOS2_PCREL_LO,
-  BFD_RELOC_NIOS2_PCREL_HA,
-  BFD_RELOC_NIOS2_TLS_GD16,
-  BFD_RELOC_NIOS2_TLS_LDM16,
-  BFD_RELOC_NIOS2_TLS_LDO16,
-  BFD_RELOC_NIOS2_TLS_IE16,
-  BFD_RELOC_NIOS2_TLS_LE16,
-  BFD_RELOC_NIOS2_TLS_DTPMOD,
-  BFD_RELOC_NIOS2_TLS_DTPREL,
-  BFD_RELOC_NIOS2_TLS_TPREL,
-  BFD_RELOC_NIOS2_COPY,
-  BFD_RELOC_NIOS2_GLOB_DAT,
-  BFD_RELOC_NIOS2_JUMP_SLOT,
-  BFD_RELOC_NIOS2_RELATIVE,
-  BFD_RELOC_NIOS2_GOTOFF,
-  BFD_RELOC_NIOS2_CALL26_NOAT,
-  BFD_RELOC_NIOS2_GOT_LO,
-  BFD_RELOC_NIOS2_GOT_HA,
-  BFD_RELOC_NIOS2_CALL_LO,
-  BFD_RELOC_NIOS2_CALL_HA,
-  BFD_RELOC_NIOS2_R2_S12,
-  BFD_RELOC_NIOS2_R2_I10_1_PCREL,
-  BFD_RELOC_NIOS2_R2_T1I7_1_PCREL,
-  BFD_RELOC_NIOS2_R2_T1I7_2,
-  BFD_RELOC_NIOS2_R2_T2I4,
-  BFD_RELOC_NIOS2_R2_T2I4_1,
-  BFD_RELOC_NIOS2_R2_T2I4_2,
-  BFD_RELOC_NIOS2_R2_X1I7_2,
-  BFD_RELOC_NIOS2_R2_X2L5,
-  BFD_RELOC_NIOS2_R2_F1I5_2,
-  BFD_RELOC_NIOS2_R2_L5I4X1,
-  BFD_RELOC_NIOS2_R2_T1X1I6,
-  BFD_RELOC_NIOS2_R2_T1X1I6_2,
-
-/* IQ2000 Relocations.  */
-  BFD_RELOC_IQ2000_OFFSET_16,
-  BFD_RELOC_IQ2000_OFFSET_21,
-  BFD_RELOC_IQ2000_UHI16,
-
-/* Special Xtensa relocation used only by PLT entries in ELF shared
-objects to indicate that the runtime linker should set the value
-to one of its own internal functions or data structures.  */
-  BFD_RELOC_XTENSA_RTLD,
-
-/* Xtensa relocations for ELF shared objects.  */
-  BFD_RELOC_XTENSA_GLOB_DAT,
-  BFD_RELOC_XTENSA_JMP_SLOT,
-  BFD_RELOC_XTENSA_RELATIVE,
-
-/* Xtensa relocation used in ELF object files for symbols that may require
-PLT entries.  Otherwise, this is just a generic 32-bit relocation.  */
-  BFD_RELOC_XTENSA_PLT,
-
-/* Xtensa relocations to mark the difference of two local symbols.
-These are only needed to support linker relaxation and can be ignored
-when not relaxing.  The field is set to the value of the difference
-assuming no relaxation.  The relocation encodes the position of the
-first symbol so the linker can determine whether to adjust the field
-value.  */
-  BFD_RELOC_XTENSA_DIFF8,
-  BFD_RELOC_XTENSA_DIFF16,
-  BFD_RELOC_XTENSA_DIFF32,
-
-/* Generic Xtensa relocations for instruction operands.  Only the slot
-number is encoded in the relocation.  The relocation applies to the
-last PC-relative immediate operand, or if there are no PC-relative
-immediates, to the last immediate operand.  */
-  BFD_RELOC_XTENSA_SLOT0_OP,
-  BFD_RELOC_XTENSA_SLOT1_OP,
-  BFD_RELOC_XTENSA_SLOT2_OP,
-  BFD_RELOC_XTENSA_SLOT3_OP,
-  BFD_RELOC_XTENSA_SLOT4_OP,
-  BFD_RELOC_XTENSA_SLOT5_OP,
-  BFD_RELOC_XTENSA_SLOT6_OP,
-  BFD_RELOC_XTENSA_SLOT7_OP,
-  BFD_RELOC_XTENSA_SLOT8_OP,
-  BFD_RELOC_XTENSA_SLOT9_OP,
-  BFD_RELOC_XTENSA_SLOT10_OP,
-  BFD_RELOC_XTENSA_SLOT11_OP,
-  BFD_RELOC_XTENSA_SLOT12_OP,
-  BFD_RELOC_XTENSA_SLOT13_OP,
-  BFD_RELOC_XTENSA_SLOT14_OP,
-
-/* Alternate Xtensa relocations.  Only the slot is encoded in the
-relocation.  The meaning of these relocations is opcode-specific.  */
-  BFD_RELOC_XTENSA_SLOT0_ALT,
-  BFD_RELOC_XTENSA_SLOT1_ALT,
-  BFD_RELOC_XTENSA_SLOT2_ALT,
-  BFD_RELOC_XTENSA_SLOT3_ALT,
-  BFD_RELOC_XTENSA_SLOT4_ALT,
-  BFD_RELOC_XTENSA_SLOT5_ALT,
-  BFD_RELOC_XTENSA_SLOT6_ALT,
-  BFD_RELOC_XTENSA_SLOT7_ALT,
-  BFD_RELOC_XTENSA_SLOT8_ALT,
-  BFD_RELOC_XTENSA_SLOT9_ALT,
-  BFD_RELOC_XTENSA_SLOT10_ALT,
-  BFD_RELOC_XTENSA_SLOT11_ALT,
-  BFD_RELOC_XTENSA_SLOT12_ALT,
-  BFD_RELOC_XTENSA_SLOT13_ALT,
-  BFD_RELOC_XTENSA_SLOT14_ALT,
-
-/* Xtensa relocations for backward compatibility.  These have all been
-replaced by BFD_RELOC_XTENSA_SLOT0_OP.  */
-  BFD_RELOC_XTENSA_OP0,
-  BFD_RELOC_XTENSA_OP1,
-  BFD_RELOC_XTENSA_OP2,
-
-/* Xtensa relocation to mark that the assembler expanded the
-instructions from an original target.  The expansion size is
-encoded in the reloc size.  */
-  BFD_RELOC_XTENSA_ASM_EXPAND,
-
-/* Xtensa relocation to mark that the linker should simplify
-assembler-expanded instructions.  This is commonly used
-internally by the linker after analysis of a
-BFD_RELOC_XTENSA_ASM_EXPAND.  */
-  BFD_RELOC_XTENSA_ASM_SIMPLIFY,
-
-/* Xtensa TLS relocations.  */
-  BFD_RELOC_XTENSA_TLSDESC_FN,
-  BFD_RELOC_XTENSA_TLSDESC_ARG,
-  BFD_RELOC_XTENSA_TLS_DTPOFF,
-  BFD_RELOC_XTENSA_TLS_TPOFF,
-  BFD_RELOC_XTENSA_TLS_FUNC,
-  BFD_RELOC_XTENSA_TLS_ARG,
-  BFD_RELOC_XTENSA_TLS_CALL,
-
-/* 8 bit signed offset in (ix+d) or (iy+d).  */
-  BFD_RELOC_Z80_DISP8,
-
-/* DJNZ offset.  */
-  BFD_RELOC_Z8K_DISP7,
-
-/* CALR offset.  */
-  BFD_RELOC_Z8K_CALLR,
-
-/* 4 bit value.  */
-  BFD_RELOC_Z8K_IMM4L,
-
-/* Lattice Mico32 relocations.  */
-  BFD_RELOC_LM32_CALL,
-  BFD_RELOC_LM32_BRANCH,
-  BFD_RELOC_LM32_16_GOT,
-  BFD_RELOC_LM32_GOTOFF_HI16,
-  BFD_RELOC_LM32_GOTOFF_LO16,
-  BFD_RELOC_LM32_COPY,
-  BFD_RELOC_LM32_GLOB_DAT,
-  BFD_RELOC_LM32_JMP_SLOT,
-  BFD_RELOC_LM32_RELATIVE,
-
-/* Difference between two section addreses.  Must be followed by a
-BFD_RELOC_MACH_O_PAIR.  */
-  BFD_RELOC_MACH_O_SECTDIFF,
-
-/* Like BFD_RELOC_MACH_O_SECTDIFF but with a local symbol.  */
-  BFD_RELOC_MACH_O_LOCAL_SECTDIFF,
-
-/* Pair of relocation.  Contains the first symbol.  */
-  BFD_RELOC_MACH_O_PAIR,
-
-/* Symbol will be substracted.  Must be followed by a BFD_RELOC_32.  */
-  BFD_RELOC_MACH_O_SUBTRACTOR32,
-
-/* Symbol will be substracted.  Must be followed by a BFD_RELOC_64.  */
-  BFD_RELOC_MACH_O_SUBTRACTOR64,
-
-/* PCREL relocations.  They are marked as branch to create PLT entry if
-required.  */
-  BFD_RELOC_MACH_O_X86_64_BRANCH32,
-  BFD_RELOC_MACH_O_X86_64_BRANCH8,
-
-/* Used when referencing a GOT entry.  */
-  BFD_RELOC_MACH_O_X86_64_GOT,
-
-/* Used when loading a GOT entry with movq.  It is specially marked so that
-the linker could optimize the movq to a leaq if possible.  */
-  BFD_RELOC_MACH_O_X86_64_GOT_LOAD,
-
-/* Same as BFD_RELOC_32_PCREL but with an implicit -1 addend.  */
-  BFD_RELOC_MACH_O_X86_64_PCREL32_1,
-
-/* Same as BFD_RELOC_32_PCREL but with an implicit -2 addend.  */
-  BFD_RELOC_MACH_O_X86_64_PCREL32_2,
-
-/* Same as BFD_RELOC_32_PCREL but with an implicit -4 addend.  */
-  BFD_RELOC_MACH_O_X86_64_PCREL32_4,
-
-/* Addend for PAGE or PAGEOFF.  */
-  BFD_RELOC_MACH_O_ARM64_ADDEND,
-
-/* Relative offset to page of GOT slot.  */
-  BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGE21,
-
-/* Relative offset within page of GOT slot.  */
-  BFD_RELOC_MACH_O_ARM64_GOT_LOAD_PAGEOFF12,
-
-/* Address of a GOT entry.  */
-  BFD_RELOC_MACH_O_ARM64_POINTER_TO_GOT,
-
-/* This is a 32 bit reloc for the microblaze that stores the
-low 16 bits of a value  */
-  BFD_RELOC_MICROBLAZE_32_LO,
-
-/* This is a 32 bit pc-relative reloc for the microblaze that
-stores the low 16 bits of a value  */
-  BFD_RELOC_MICROBLAZE_32_LO_PCREL,
-
-/* This is a 32 bit reloc for the microblaze that stores a
-value relative to the read-only small data area anchor  */
-  BFD_RELOC_MICROBLAZE_32_ROSDA,
-
-/* This is a 32 bit reloc for the microblaze that stores a
-value relative to the read-write small data area anchor  */
-  BFD_RELOC_MICROBLAZE_32_RWSDA,
-
-/* This is a 32 bit reloc for the microblaze to handle
-expressions of the form "Symbol Op Symbol"  */
-  BFD_RELOC_MICROBLAZE_32_SYM_OP_SYM,
-
-/* This is a 64 bit reloc that stores the 32 bit pc relative
-value in two words (with an imm instruction).  No relocation is
-done here - only used for relaxing  */
-  BFD_RELOC_MICROBLAZE_64_NONE,
-
-/* This is a 64 bit reloc that stores the 32 bit pc relative
-value in two words (with an imm instruction).  The relocation is
-PC-relative GOT offset  */
-  BFD_RELOC_MICROBLAZE_64_GOTPC,
-
-/* This is a 64 bit reloc that stores the 32 bit pc relative
-value in two words (with an imm instruction).  The relocation is
-GOT offset  */
-  BFD_RELOC_MICROBLAZE_64_GOT,
-
-/* This is a 64 bit reloc that stores the 32 bit pc relative
-value in two words (with an imm instruction).  The relocation is
-PC-relative offset into PLT  */
-  BFD_RELOC_MICROBLAZE_64_PLT,
-
-/* This is a 64 bit reloc that stores the 32 bit GOT relative
-value in two words (with an imm instruction).  The relocation is
-relative offset from _GLOBAL_OFFSET_TABLE_  */
-  BFD_RELOC_MICROBLAZE_64_GOTOFF,
-
-/* This is a 32 bit reloc that stores the 32 bit GOT relative
-value in a word.  The relocation is relative offset from  */
-  BFD_RELOC_MICROBLAZE_32_GOTOFF,
-
-/* This is used to tell the dynamic linker to copy the value out of
-the dynamic object into the runtime process image.  */
-  BFD_RELOC_MICROBLAZE_COPY,
-
-/* Unused Reloc  */
-  BFD_RELOC_MICROBLAZE_64_TLS,
-
-/* This is a 64 bit reloc that stores the 32 bit GOT relative value
-of the GOT TLS GD info entry in two words (with an imm instruction). The
-relocation is GOT offset.  */
-  BFD_RELOC_MICROBLAZE_64_TLSGD,
-
-/* This is a 64 bit reloc that stores the 32 bit GOT relative value
-of the GOT TLS LD info entry in two words (with an imm instruction). The
-relocation is GOT offset.  */
-  BFD_RELOC_MICROBLAZE_64_TLSLD,
-
-/* This is a 32 bit reloc that stores the Module ID to GOT(n).  */
-  BFD_RELOC_MICROBLAZE_32_TLSDTPMOD,
-
-/* This is a 32 bit reloc that stores TLS offset to GOT(n+1).  */
-  BFD_RELOC_MICROBLAZE_32_TLSDTPREL,
-
-/* This is a 32 bit reloc for storing TLS offset to two words (uses imm
-instruction)  */
-  BFD_RELOC_MICROBLAZE_64_TLSDTPREL,
-
-/* This is a 64 bit reloc that stores 32-bit thread pointer relative offset
-to two words (uses imm instruction).  */
-  BFD_RELOC_MICROBLAZE_64_TLSGOTTPREL,
-
-/* This is a 64 bit reloc that stores 32-bit thread pointer relative offset
-to two words (uses imm instruction).  */
-  BFD_RELOC_MICROBLAZE_64_TLSTPREL,
-
-/* AArch64 pseudo relocation code to mark the start of the AArch64
-relocation enumerators.  N.B. the order of the enumerators is
-important as several tables in the AArch64 bfd backend are indexed
-by these enumerators; make sure they are all synced.  */
-  BFD_RELOC_AARCH64_RELOC_START,
-
-/* Deprecated AArch64 null relocation code.  */
-  BFD_RELOC_AARCH64_NULL,
-
-/* AArch64 null relocation code.  */
-  BFD_RELOC_AARCH64_NONE,
-
-/* Basic absolute relocations of N bits.  These are equivalent to
-BFD_RELOC_N and they were added to assist the indexing of the howto
-table.  */
-  BFD_RELOC_AARCH64_64,
-  BFD_RELOC_AARCH64_32,
-  BFD_RELOC_AARCH64_16,
-
-/* PC-relative relocations.  These are equivalent to BFD_RELOC_N_PCREL
-and they were added to assist the indexing of the howto table.  */
-  BFD_RELOC_AARCH64_64_PCREL,
-  BFD_RELOC_AARCH64_32_PCREL,
-  BFD_RELOC_AARCH64_16_PCREL,
-
-/* AArch64 MOV[NZK] instruction with most significant bits 0 to 15
-of an unsigned address/value.  */
-  BFD_RELOC_AARCH64_MOVW_G0,
-
-/* AArch64 MOV[NZK] instruction with less significant bits 0 to 15 of
-an address/value.  No overflow checking.  */
-  BFD_RELOC_AARCH64_MOVW_G0_NC,
-
-/* AArch64 MOV[NZK] instruction with most significant bits 16 to 31
-of an unsigned address/value.  */
-  BFD_RELOC_AARCH64_MOVW_G1,
-
-/* AArch64 MOV[NZK] instruction with less significant bits 16 to 31
-of an address/value.  No overflow checking.  */
-  BFD_RELOC_AARCH64_MOVW_G1_NC,
-
-/* AArch64 MOV[NZK] instruction with most significant bits 32 to 47
-of an unsigned address/value.  */
-  BFD_RELOC_AARCH64_MOVW_G2,
-
-/* AArch64 MOV[NZK] instruction with less significant bits 32 to 47
-of an address/value.  No overflow checking.  */
-  BFD_RELOC_AARCH64_MOVW_G2_NC,
-
-/* AArch64 MOV[NZK] instruction with most signficant bits 48 to 64
-of a signed or unsigned address/value.  */
-  BFD_RELOC_AARCH64_MOVW_G3,
-
-/* AArch64 MOV[NZ] instruction with most significant bits 0 to 15
-of a signed value.  Changes instruction to MOVZ or MOVN depending on the
-value's sign.  */
-  BFD_RELOC_AARCH64_MOVW_G0_S,
-
-/* AArch64 MOV[NZ] instruction with most significant bits 16 to 31
-of a signed value.  Changes instruction to MOVZ or MOVN depending on the
-value's sign.  */
-  BFD_RELOC_AARCH64_MOVW_G1_S,
-
-/* AArch64 MOV[NZ] instruction with most significant bits 32 to 47
-of a signed value.  Changes instruction to MOVZ or MOVN depending on the
-value's sign.  */
-  BFD_RELOC_AARCH64_MOVW_G2_S,
-
-/* AArch64 Load Literal instruction, holding a 19 bit pc-relative word
-offset.  The lowest two bits must be zero and are not stored in the
-instruction, giving a 21 bit signed byte offset.  */
-  BFD_RELOC_AARCH64_LD_LO19_PCREL,
-
-/* AArch64 ADR instruction, holding a simple 21 bit pc-relative byte offset.  */
-  BFD_RELOC_AARCH64_ADR_LO21_PCREL,
-
-/* AArch64 ADRP instruction, with bits 12 to 32 of a pc-relative page
-offset, giving a 4KB aligned page base address.  */
-  BFD_RELOC_AARCH64_ADR_HI21_PCREL,
-
-/* AArch64 ADRP instruction, with bits 12 to 32 of a pc-relative page
-offset, giving a 4KB aligned page base address, but with no overflow
-checking.  */
-  BFD_RELOC_AARCH64_ADR_HI21_NC_PCREL,
-
-/* AArch64 ADD immediate instruction, holding bits 0 to 11 of the address.
-Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
-  BFD_RELOC_AARCH64_ADD_LO12,
-
-/* AArch64 8-bit load/store instruction, holding bits 0 to 11 of the
-address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
-  BFD_RELOC_AARCH64_LDST8_LO12,
-
-/* AArch64 14 bit pc-relative test bit and branch.
-The lowest two bits must be zero and are not stored in the instruction,
-giving a 16 bit signed byte offset.  */
-  BFD_RELOC_AARCH64_TSTBR14,
-
-/* AArch64 19 bit pc-relative conditional branch and compare & branch.
-The lowest two bits must be zero and are not stored in the instruction,
-giving a 21 bit signed byte offset.  */
-  BFD_RELOC_AARCH64_BRANCH19,
-
-/* AArch64 26 bit pc-relative unconditional branch.
-The lowest two bits must be zero and are not stored in the instruction,
-giving a 28 bit signed byte offset.  */
-  BFD_RELOC_AARCH64_JUMP26,
-
-/* AArch64 26 bit pc-relative unconditional branch and link.
-The lowest two bits must be zero and are not stored in the instruction,
-giving a 28 bit signed byte offset.  */
-  BFD_RELOC_AARCH64_CALL26,
-
-/* AArch64 16-bit load/store instruction, holding bits 0 to 11 of the
-address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
-  BFD_RELOC_AARCH64_LDST16_LO12,
-
-/* AArch64 32-bit load/store instruction, holding bits 0 to 11 of the
-address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
-  BFD_RELOC_AARCH64_LDST32_LO12,
-
-/* AArch64 64-bit load/store instruction, holding bits 0 to 11 of the
-address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
-  BFD_RELOC_AARCH64_LDST64_LO12,
-
-/* AArch64 128-bit load/store instruction, holding bits 0 to 11 of the
-address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
-  BFD_RELOC_AARCH64_LDST128_LO12,
-
-/* AArch64 Load Literal instruction, holding a 19 bit PC relative word
-offset of the global offset table entry for a symbol.  The lowest two
-bits must be zero and are not stored in the instruction, giving a 21
-bit signed byte offset.  This relocation type requires signed overflow
-checking.  */
-  BFD_RELOC_AARCH64_GOT_LD_PREL19,
-
-/* Get to the page base of the global offset table entry for a symbol as
-part of an ADRP instruction using a 21 bit PC relative value.Used in
-conjunction with BFD_RELOC_AARCH64_LD64_GOT_LO12_NC.  */
-  BFD_RELOC_AARCH64_ADR_GOT_PAGE,
-
-/* Unsigned 12 bit byte offset for 64 bit load/store from the page of
-the GOT entry for this symbol.  Used in conjunction with
-BFD_RELOC_AARCH64_ADR_GOTPAGE.  Valid in LP64 ABI only.  */
-  BFD_RELOC_AARCH64_LD64_GOT_LO12_NC,
-
-/* Unsigned 12 bit byte offset for 32 bit load/store from the page of
-the GOT entry for this symbol.  Used in conjunction with
-BFD_RELOC_AARCH64_ADR_GOTPAGE.  Valid in ILP32 ABI only.  */
-  BFD_RELOC_AARCH64_LD32_GOT_LO12_NC,
-
-/* Unsigned 16 bit byte offset for 64 bit load/store from the GOT entry
-for this symbol.  Valid in LP64 ABI only.  */
-  BFD_RELOC_AARCH64_MOVW_GOTOFF_G0_NC,
-
-/* Unsigned 16 bit byte higher offset for 64 bit load/store from the GOT entry
-for this symbol.  Valid in LP64 ABI only.  */
-  BFD_RELOC_AARCH64_MOVW_GOTOFF_G1,
-
-/* Unsigned 15 bit byte offset for 64 bit load/store from the page of
-the GOT entry for this symbol.  Valid in LP64 ABI only.  */
-  BFD_RELOC_AARCH64_LD64_GOTOFF_LO15,
-
-/* Scaled 14 bit byte offset to the page base of the global offset table.  */
-  BFD_RELOC_AARCH64_LD32_GOTPAGE_LO14,
-
-/* Scaled 15 bit byte offset to the page base of the global offset table.  */
-  BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15,
-
-/* Get to the page base of the global offset table entry for a symbols
-tls_index structure as part of an adrp instruction using a 21 bit PC
-relative value.  Used in conjunction with
-BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC.  */
-  BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21,
-
-/* AArch64 TLS General Dynamic  */
-  BFD_RELOC_AARCH64_TLSGD_ADR_PREL21,
-
-/* Unsigned 12 bit byte offset to global offset table entry for a symbols
-tls_index structure.  Used in conjunction with
-BFD_RELOC_AARCH64_TLSGD_ADR_PAGE21.  */
-  BFD_RELOC_AARCH64_TLSGD_ADD_LO12_NC,
-
-/* AArch64 TLS General Dynamic relocation.  */
-  BFD_RELOC_AARCH64_TLSGD_MOVW_G0_NC,
-
-/* AArch64 TLS General Dynamic relocation.  */
-  BFD_RELOC_AARCH64_TLSGD_MOVW_G1,
-
-/* AArch64 TLS INITIAL EXEC relocation.  */
-  BFD_RELOC_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21,
-
-/* AArch64 TLS INITIAL EXEC relocation.  */
-  BFD_RELOC_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC,
-
-/* AArch64 TLS INITIAL EXEC relocation.  */
-  BFD_RELOC_AARCH64_TLSIE_LD32_GOTTPREL_LO12_NC,
-
-/* AArch64 TLS INITIAL EXEC relocation.  */
-  BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_PREL19,
-
-/* AArch64 TLS INITIAL EXEC relocation.  */
-  BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC,
-
-/* AArch64 TLS INITIAL EXEC relocation.  */
-  BFD_RELOC_AARCH64_TLSIE_MOVW_GOTTPREL_G1,
-
-/* bit[23:12] of byte offset to module TLS base address.  */
-  BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_HI12,
-
-/* Unsigned 12 bit byte offset to module TLS base address.  */
-  BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12,
-
-/* No overflow check version of BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12.  */
-  BFD_RELOC_AARCH64_TLSLD_ADD_DTPREL_LO12_NC,
-
-/* Unsigned 12 bit byte offset to global offset table entry for a symbols
-tls_index structure.  Used in conjunction with
-BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21.  */
-  BFD_RELOC_AARCH64_TLSLD_ADD_LO12_NC,
-
-/* GOT entry page address for AArch64 TLS Local Dynamic, used with ADRP
-instruction.  */
-  BFD_RELOC_AARCH64_TLSLD_ADR_PAGE21,
-
-/* GOT entry address for AArch64 TLS Local Dynamic, used with ADR instruction.  */
-  BFD_RELOC_AARCH64_TLSLD_ADR_PREL21,
-
-/* bit[11:1] of byte offset to module TLS base address, encoded in ldst
-instructions.  */
-  BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12,
-
-/* Similar as BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12, but no overflow check.  */
-  BFD_RELOC_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC,
-
-/* bit[11:2] of byte offset to module TLS base address, encoded in ldst
-instructions.  */
-  BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12,
-
-/* Similar as BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12, but no overflow check.  */
-  BFD_RELOC_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC,
-
-/* bit[11:3] of byte offset to module TLS base address, encoded in ldst
-instructions.  */
-  BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12,
-
-/* Similar as BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12, but no overflow check.  */
-  BFD_RELOC_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC,
-
-/* bit[11:0] of byte offset to module TLS base address, encoded in ldst
-instructions.  */
-  BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12,
-
-/* Similar as BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12, but no overflow check.  */
-  BFD_RELOC_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC,
-
-/* bit[15:0] of byte offset to module TLS base address.  */
-  BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0,
-
-/* No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0  */
-  BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G0_NC,
-
-/* bit[31:16] of byte offset to module TLS base address.  */
-  BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1,
-
-/* No overflow check version of BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1  */
-  BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G1_NC,
-
-/* bit[47:32] of byte offset to module TLS base address.  */
-  BFD_RELOC_AARCH64_TLSLD_MOVW_DTPREL_G2,
-
-/* AArch64 TLS LOCAL EXEC relocation.  */
-  BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G2,
-
-/* AArch64 TLS LOCAL EXEC relocation.  */
-  BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1,
-
-/* AArch64 TLS LOCAL EXEC relocation.  */
-  BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G1_NC,
-
-/* AArch64 TLS LOCAL EXEC relocation.  */
-  BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0,
-
-/* AArch64 TLS LOCAL EXEC relocation.  */
-  BFD_RELOC_AARCH64_TLSLE_MOVW_TPREL_G0_NC,
-
-/* AArch64 TLS LOCAL EXEC relocation.  */
-  BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_HI12,
-
-/* AArch64 TLS LOCAL EXEC relocation.  */
-  BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12,
-
-/* AArch64 TLS LOCAL EXEC relocation.  */
-  BFD_RELOC_AARCH64_TLSLE_ADD_TPREL_LO12_NC,
-
-/* AArch64 TLS DESC relocation.  */
-  BFD_RELOC_AARCH64_TLSDESC_LD_PREL19,
-
-/* AArch64 TLS DESC relocation.  */
-  BFD_RELOC_AARCH64_TLSDESC_ADR_PREL21,
-
-/* AArch64 TLS DESC relocation.  */
-  BFD_RELOC_AARCH64_TLSDESC_ADR_PAGE21,
-
-/* AArch64 TLS DESC relocation.  */
-  BFD_RELOC_AARCH64_TLSDESC_LD64_LO12_NC,
-
-/* AArch64 TLS DESC relocation.  */
-  BFD_RELOC_AARCH64_TLSDESC_LD32_LO12_NC,
-
-/* AArch64 TLS DESC relocation.  */
-  BFD_RELOC_AARCH64_TLSDESC_ADD_LO12_NC,
-
-/* AArch64 TLS DESC relocation.  */
-  BFD_RELOC_AARCH64_TLSDESC_OFF_G1,
-
-/* AArch64 TLS DESC relocation.  */
-  BFD_RELOC_AARCH64_TLSDESC_OFF_G0_NC,
-
-/* AArch64 TLS DESC relocation.  */
-  BFD_RELOC_AARCH64_TLSDESC_LDR,
-
-/* AArch64 TLS DESC relocation.  */
-  BFD_RELOC_AARCH64_TLSDESC_ADD,
-
-/* AArch64 TLS DESC relocation.  */
-  BFD_RELOC_AARCH64_TLSDESC_CALL,
-
-/* AArch64 TLS relocation.  */
-  BFD_RELOC_AARCH64_COPY,
-
-/* AArch64 TLS relocation.  */
-  BFD_RELOC_AARCH64_GLOB_DAT,
-
-/* AArch64 TLS relocation.  */
-  BFD_RELOC_AARCH64_JUMP_SLOT,
-
-/* AArch64 TLS relocation.  */
-  BFD_RELOC_AARCH64_RELATIVE,
-
-/* AArch64 TLS relocation.  */
-  BFD_RELOC_AARCH64_TLS_DTPMOD,
-
-/* AArch64 TLS relocation.  */
-  BFD_RELOC_AARCH64_TLS_DTPREL,
-
-/* AArch64 TLS relocation.  */
-  BFD_RELOC_AARCH64_TLS_TPREL,
-
-/* AArch64 TLS relocation.  */
-  BFD_RELOC_AARCH64_TLSDESC,
-
-/* AArch64 support for STT_GNU_IFUNC.  */
-  BFD_RELOC_AARCH64_IRELATIVE,
-
-/* AArch64 pseudo relocation code to mark the end of the AArch64
-relocation enumerators that have direct mapping to ELF reloc codes.
-There are a few more enumerators after this one; those are mainly
-used by the AArch64 assembler for the internal fixup or to select
-one of the above enumerators.  */
-  BFD_RELOC_AARCH64_RELOC_END,
-
-/* AArch64 pseudo relocation code to be used internally by the AArch64
-assembler and not (currently) written to any object files.  */
-  BFD_RELOC_AARCH64_GAS_INTERNAL_FIXUP,
-
-/* AArch64 unspecified load/store instruction, holding bits 0 to 11 of the
-address.  Used in conjunction with BFD_RELOC_AARCH64_ADR_HI21_PCREL.  */
-  BFD_RELOC_AARCH64_LDST_LO12,
-
-/* AArch64 pseudo relocation code for TLS local dynamic mode.  It's to be
-used internally by the AArch64 assembler and not (currently) written to
-any object files.  */
-  BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12,
-
-/* Similar as BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12, but no overflow check.  */
-  BFD_RELOC_AARCH64_TLSLD_LDST_DTPREL_LO12_NC,
-
-/* AArch64 pseudo relocation code to be used internally by the AArch64
-assembler and not (currently) written to any object files.  */
-  BFD_RELOC_AARCH64_LD_GOT_LO12_NC,
-
-/* AArch64 pseudo relocation code to be used internally by the AArch64
-assembler and not (currently) written to any object files.  */
-  BFD_RELOC_AARCH64_TLSIE_LD_GOTTPREL_LO12_NC,
-
-/* AArch64 pseudo relocation code to be used internally by the AArch64
-assembler and not (currently) written to any object files.  */
-  BFD_RELOC_AARCH64_TLSDESC_LD_LO12_NC,
-
-/* Tilera TILEPro Relocations.  */
-  BFD_RELOC_TILEPRO_COPY,
-  BFD_RELOC_TILEPRO_GLOB_DAT,
-  BFD_RELOC_TILEPRO_JMP_SLOT,
-  BFD_RELOC_TILEPRO_RELATIVE,
-  BFD_RELOC_TILEPRO_BROFF_X1,
-  BFD_RELOC_TILEPRO_JOFFLONG_X1,
-  BFD_RELOC_TILEPRO_JOFFLONG_X1_PLT,
-  BFD_RELOC_TILEPRO_IMM8_X0,
-  BFD_RELOC_TILEPRO_IMM8_Y0,
-  BFD_RELOC_TILEPRO_IMM8_X1,
-  BFD_RELOC_TILEPRO_IMM8_Y1,
-  BFD_RELOC_TILEPRO_DEST_IMM8_X1,
-  BFD_RELOC_TILEPRO_MT_IMM15_X1,
-  BFD_RELOC_TILEPRO_MF_IMM15_X1,
-  BFD_RELOC_TILEPRO_IMM16_X0,
-  BFD_RELOC_TILEPRO_IMM16_X1,
-  BFD_RELOC_TILEPRO_IMM16_X0_LO,
-  BFD_RELOC_TILEPRO_IMM16_X1_LO,
-  BFD_RELOC_TILEPRO_IMM16_X0_HI,
-  BFD_RELOC_TILEPRO_IMM16_X1_HI,
-  BFD_RELOC_TILEPRO_IMM16_X0_HA,
-  BFD_RELOC_TILEPRO_IMM16_X1_HA,
-  BFD_RELOC_TILEPRO_IMM16_X0_PCREL,
-  BFD_RELOC_TILEPRO_IMM16_X1_PCREL,
-  BFD_RELOC_TILEPRO_IMM16_X0_LO_PCREL,
-  BFD_RELOC_TILEPRO_IMM16_X1_LO_PCREL,
-  BFD_RELOC_TILEPRO_IMM16_X0_HI_PCREL,
-  BFD_RELOC_TILEPRO_IMM16_X1_HI_PCREL,
-  BFD_RELOC_TILEPRO_IMM16_X0_HA_PCREL,
-  BFD_RELOC_TILEPRO_IMM16_X1_HA_PCREL,
-  BFD_RELOC_TILEPRO_IMM16_X0_GOT,
-  BFD_RELOC_TILEPRO_IMM16_X1_GOT,
-  BFD_RELOC_TILEPRO_IMM16_X0_GOT_LO,
-  BFD_RELOC_TILEPRO_IMM16_X1_GOT_LO,
-  BFD_RELOC_TILEPRO_IMM16_X0_GOT_HI,
-  BFD_RELOC_TILEPRO_IMM16_X1_GOT_HI,
-  BFD_RELOC_TILEPRO_IMM16_X0_GOT_HA,
-  BFD_RELOC_TILEPRO_IMM16_X1_GOT_HA,
-  BFD_RELOC_TILEPRO_MMSTART_X0,
-  BFD_RELOC_TILEPRO_MMEND_X0,
-  BFD_RELOC_TILEPRO_MMSTART_X1,
-  BFD_RELOC_TILEPRO_MMEND_X1,
-  BFD_RELOC_TILEPRO_SHAMT_X0,
-  BFD_RELOC_TILEPRO_SHAMT_X1,
-  BFD_RELOC_TILEPRO_SHAMT_Y0,
-  BFD_RELOC_TILEPRO_SHAMT_Y1,
-  BFD_RELOC_TILEPRO_TLS_GD_CALL,
-  BFD_RELOC_TILEPRO_IMM8_X0_TLS_GD_ADD,
-  BFD_RELOC_TILEPRO_IMM8_X1_TLS_GD_ADD,
-  BFD_RELOC_TILEPRO_IMM8_Y0_TLS_GD_ADD,
-  BFD_RELOC_TILEPRO_IMM8_Y1_TLS_GD_ADD,
-  BFD_RELOC_TILEPRO_TLS_IE_LOAD,
-  BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD,
-  BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD,
-  BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_LO,
-  BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_LO,
-  BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HI,
-  BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HI,
-  BFD_RELOC_TILEPRO_IMM16_X0_TLS_GD_HA,
-  BFD_RELOC_TILEPRO_IMM16_X1_TLS_GD_HA,
-  BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE,
-  BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE,
-  BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_LO,
-  BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_LO,
-  BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HI,
-  BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HI,
-  BFD_RELOC_TILEPRO_IMM16_X0_TLS_IE_HA,
-  BFD_RELOC_TILEPRO_IMM16_X1_TLS_IE_HA,
-  BFD_RELOC_TILEPRO_TLS_DTPMOD32,
-  BFD_RELOC_TILEPRO_TLS_DTPOFF32,
-  BFD_RELOC_TILEPRO_TLS_TPOFF32,
-  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE,
-  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE,
-  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_LO,
-  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_LO,
-  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HI,
-  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HI,
-  BFD_RELOC_TILEPRO_IMM16_X0_TLS_LE_HA,
-  BFD_RELOC_TILEPRO_IMM16_X1_TLS_LE_HA,
-
-/* Tilera TILE-Gx Relocations.  */
-  BFD_RELOC_TILEGX_HW0,
-  BFD_RELOC_TILEGX_HW1,
-  BFD_RELOC_TILEGX_HW2,
-  BFD_RELOC_TILEGX_HW3,
-  BFD_RELOC_TILEGX_HW0_LAST,
-  BFD_RELOC_TILEGX_HW1_LAST,
-  BFD_RELOC_TILEGX_HW2_LAST,
-  BFD_RELOC_TILEGX_COPY,
-  BFD_RELOC_TILEGX_GLOB_DAT,
-  BFD_RELOC_TILEGX_JMP_SLOT,
-  BFD_RELOC_TILEGX_RELATIVE,
-  BFD_RELOC_TILEGX_BROFF_X1,
-  BFD_RELOC_TILEGX_JUMPOFF_X1,
-  BFD_RELOC_TILEGX_JUMPOFF_X1_PLT,
-  BFD_RELOC_TILEGX_IMM8_X0,
-  BFD_RELOC_TILEGX_IMM8_Y0,
-  BFD_RELOC_TILEGX_IMM8_X1,
-  BFD_RELOC_TILEGX_IMM8_Y1,
-  BFD_RELOC_TILEGX_DEST_IMM8_X1,
-  BFD_RELOC_TILEGX_MT_IMM14_X1,
-  BFD_RELOC_TILEGX_MF_IMM14_X1,
-  BFD_RELOC_TILEGX_MMSTART_X0,
-  BFD_RELOC_TILEGX_MMEND_X0,
-  BFD_RELOC_TILEGX_SHAMT_X0,
-  BFD_RELOC_TILEGX_SHAMT_X1,
-  BFD_RELOC_TILEGX_SHAMT_Y0,
-  BFD_RELOC_TILEGX_SHAMT_Y1,
-  BFD_RELOC_TILEGX_IMM16_X0_HW0,
-  BFD_RELOC_TILEGX_IMM16_X1_HW0,
-  BFD_RELOC_TILEGX_IMM16_X0_HW1,
-  BFD_RELOC_TILEGX_IMM16_X1_HW1,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2,
-  BFD_RELOC_TILEGX_IMM16_X0_HW3,
-  BFD_RELOC_TILEGX_IMM16_X1_HW3,
-  BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST,
-  BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST,
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST,
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST,
-  BFD_RELOC_TILEGX_IMM16_X0_HW0_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X1_HW0_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X0_HW3_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X1_HW3_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X0_HW0_GOT,
-  BFD_RELOC_TILEGX_IMM16_X1_HW0_GOT,
-  BFD_RELOC_TILEGX_IMM16_X0_HW0_PLT_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X1_HW0_PLT_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_PLT_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_PLT_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_PLT_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_PLT_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_GOT,
-  BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_GOT,
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_GOT,
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_GOT,
-  BFD_RELOC_TILEGX_IMM16_X0_HW3_PLT_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X1_HW3_PLT_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_LE,
-  BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_LE,
-  BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_LE,
-  BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_LE,
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_LE,
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_LE,
-  BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_GD,
-  BFD_RELOC_TILEGX_IMM16_X0_HW0_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X1_HW0_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_PLT_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_PLT_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_PLT_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_PLT_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X0_HW2_LAST_PLT_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X1_HW2_LAST_PLT_PCREL,
-  BFD_RELOC_TILEGX_IMM16_X0_HW0_LAST_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X1_HW0_LAST_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X0_HW1_LAST_TLS_IE,
-  BFD_RELOC_TILEGX_IMM16_X1_HW1_LAST_TLS_IE,
-  BFD_RELOC_TILEGX_TLS_DTPMOD64,
-  BFD_RELOC_TILEGX_TLS_DTPOFF64,
-  BFD_RELOC_TILEGX_TLS_TPOFF64,
-  BFD_RELOC_TILEGX_TLS_DTPMOD32,
-  BFD_RELOC_TILEGX_TLS_DTPOFF32,
-  BFD_RELOC_TILEGX_TLS_TPOFF32,
-  BFD_RELOC_TILEGX_TLS_GD_CALL,
-  BFD_RELOC_TILEGX_IMM8_X0_TLS_GD_ADD,
-  BFD_RELOC_TILEGX_IMM8_X1_TLS_GD_ADD,
-  BFD_RELOC_TILEGX_IMM8_Y0_TLS_GD_ADD,
-  BFD_RELOC_TILEGX_IMM8_Y1_TLS_GD_ADD,
-  BFD_RELOC_TILEGX_TLS_IE_LOAD,
-  BFD_RELOC_TILEGX_IMM8_X0_TLS_ADD,
-  BFD_RELOC_TILEGX_IMM8_X1_TLS_ADD,
-  BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD,
-  BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD,
-
-/* Adapteva EPIPHANY - 8 bit signed pc-relative displacement  */
-  BFD_RELOC_EPIPHANY_SIMM8,
-
-/* Adapteva EPIPHANY - 24 bit signed pc-relative displacement  */
-  BFD_RELOC_EPIPHANY_SIMM24,
-
-/* Adapteva EPIPHANY - 16 most-significant bits of absolute address  */
-  BFD_RELOC_EPIPHANY_HIGH,
-
-/* Adapteva EPIPHANY - 16 least-significant bits of absolute address  */
-  BFD_RELOC_EPIPHANY_LOW,
-
-/* Adapteva EPIPHANY - 11 bit signed number - add/sub immediate  */
-  BFD_RELOC_EPIPHANY_SIMM11,
-
-/* Adapteva EPIPHANY - 11 bit sign-magnitude number (ld/st displacement)  */
-  BFD_RELOC_EPIPHANY_IMM11,
-
-/* Adapteva EPIPHANY - 8 bit immediate for 16 bit mov instruction.  */
-  BFD_RELOC_EPIPHANY_IMM8,
-
-/* Visium Relocations.  */
-  BFD_RELOC_VISIUM_HI16,
-  BFD_RELOC_VISIUM_LO16,
-  BFD_RELOC_VISIUM_IM16,
-  BFD_RELOC_VISIUM_REL16,
-  BFD_RELOC_VISIUM_HI16_PCREL,
-  BFD_RELOC_VISIUM_LO16_PCREL,
-  BFD_RELOC_VISIUM_IM16_PCREL,
-  BFD_RELOC_UNUSED };
-
-typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
-reloc_howto_type *bfd_reloc_type_lookup
-   (bfd *abfd, bfd_reloc_code_real_type code);
-reloc_howto_type *bfd_reloc_name_lookup
-   (bfd *abfd, const char *reloc_name);
-
-const char *bfd_get_reloc_code_name (bfd_reloc_code_real_type code);
-
-/* Extracted from syms.c.  */
-
-typedef struct bfd_symbol
-{
-  /* A pointer to the BFD which owns the symbol. This information
-     is necessary so that a back end can work out what additional
-     information (invisible to the application writer) is carried
-     with the symbol.
-
-     This field is *almost* redundant, since you can use section->owner
-     instead, except that some symbols point to the global sections
-     bfd_{abs,com,und}_section.  This could be fixed by making
-     these globals be per-bfd (or per-target-flavor).  FIXME.  */
-  struct bfd *the_bfd; /* Use bfd_asymbol_bfd(sym) to access this field.  */
-
-  /* The text of the symbol. The name is left alone, and not copied; the
-     application may not alter it.  */
-  const char *name;
-
-  /* The value of the symbol.  This really should be a union of a
-     numeric value with a pointer, since some flags indicate that
-     a pointer to another symbol is stored here.  */
-  symvalue value;
-
-  /* Attributes of a symbol.  */
-#define BSF_NO_FLAGS           0x00
-
-  /* The symbol has local scope; <<static>> in <<C>>. The value
-     is the offset into the section of the data.  */
-#define BSF_LOCAL              (1 << 0)
-
-  /* The symbol has global scope; initialized data in <<C>>. The
-     value is the offset into the section of the data.  */
-#define BSF_GLOBAL             (1 << 1)
-
-  /* The symbol has global scope and is exported. The value is
-     the offset into the section of the data.  */
-#define BSF_EXPORT     BSF_GLOBAL /* No real difference.  */
-
-  /* A normal C symbol would be one of:
-     <<BSF_LOCAL>>, <<BSF_UNDEFINED>> or <<BSF_GLOBAL>>.  */
-
-  /* The symbol is a debugging record. The value has an arbitrary
-     meaning, unless BSF_DEBUGGING_RELOC is also set.  */
-#define BSF_DEBUGGING          (1 << 2)
-
-  /* The symbol denotes a function entry point.  Used in ELF,
-     perhaps others someday.  */
-#define BSF_FUNCTION           (1 << 3)
-
-  /* Used by the linker.  */
-#define BSF_KEEP               (1 << 5)
-
-  /* An ELF common symbol.  */
-#define BSF_ELF_COMMON         (1 << 6)
-
-  /* A weak global symbol, overridable without warnings by
-     a regular global symbol of the same name.  */
-#define BSF_WEAK               (1 << 7)
-
-  /* This symbol was created to point to a section, e.g. ELF's
-     STT_SECTION symbols.  */
-#define BSF_SECTION_SYM        (1 << 8)
-
-  /* The symbol used to be a common symbol, but now it is
-     allocated.  */
-#define BSF_OLD_COMMON         (1 << 9)
-
-  /* In some files the type of a symbol sometimes alters its
-     location in an output file - ie in coff a <<ISFCN>> symbol
-     which is also <<C_EXT>> symbol appears where it was
-     declared and not at the end of a section.  This bit is set
-     by the target BFD part to convey this information.  */
-#define BSF_NOT_AT_END         (1 << 10)
-
-  /* Signal that the symbol is the label of constructor section.  */
-#define BSF_CONSTRUCTOR        (1 << 11)
-
-  /* Signal that the symbol is a warning symbol.  The name is a
-     warning.  The name of the next symbol is the one to warn about;
-     if a reference is made to a symbol with the same name as the next
-     symbol, a warning is issued by the linker.  */
-#define BSF_WARNING            (1 << 12)
-
-  /* Signal that the symbol is indirect.  This symbol is an indirect
-     pointer to the symbol with the same name as the next symbol.  */
-#define BSF_INDIRECT           (1 << 13)
-
-  /* BSF_FILE marks symbols that contain a file name.  This is used
-     for ELF STT_FILE symbols.  */
-#define BSF_FILE               (1 << 14)
-
-  /* Symbol is from dynamic linking information.  */
-#define BSF_DYNAMIC            (1 << 15)
-
-  /* The symbol denotes a data object.  Used in ELF, and perhaps
-     others someday.  */
-#define BSF_OBJECT             (1 << 16)
-
-  /* This symbol is a debugging symbol.  The value is the offset
-     into the section of the data.  BSF_DEBUGGING should be set
-     as well.  */
-#define BSF_DEBUGGING_RELOC    (1 << 17)
-
-  /* This symbol is thread local.  Used in ELF.  */
-#define BSF_THREAD_LOCAL       (1 << 18)
-
-  /* This symbol represents a complex relocation expression,
-     with the expression tree serialized in the symbol name.  */
-#define BSF_RELC               (1 << 19)
-
-  /* This symbol represents a signed complex relocation expression,
-     with the expression tree serialized in the symbol name.  */
-#define BSF_SRELC              (1 << 20)
-
-  /* This symbol was created by bfd_get_synthetic_symtab.  */
-#define BSF_SYNTHETIC          (1 << 21)
-
-  /* This symbol is an indirect code object.  Unrelated to BSF_INDIRECT.
-     The dynamic linker will compute the value of this symbol by
-     calling the function that it points to.  BSF_FUNCTION must
-     also be also set.  */
-#define BSF_GNU_INDIRECT_FUNCTION (1 << 22)
-  /* This symbol is a globally unique data object.  The dynamic linker
-     will make sure that in the entire process there is just one symbol
-     with this name and type in use.  BSF_OBJECT must also be set.  */
-#define BSF_GNU_UNIQUE         (1 << 23)
-
-  flagword flags;
-
-  /* A pointer to the section to which this symbol is
-     relative.  This will always be non NULL, there are special
-     sections for undefined and absolute symbols.  */
-  struct bfd_section *section;
-
-  /* Back end special data.  */
-  union
-    {
-      void *p;
-      bfd_vma i;
-    }
-  udata;
-}
-asymbol;
-
-#define bfd_get_symtab_upper_bound(abfd) \
-     BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))
-
-bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym);
-
-bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name);
-
-#define bfd_is_local_label_name(abfd, name) \
-  BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name))
-
-bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);
-
-#define bfd_is_target_special_symbol(abfd, sym) \
-  BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym))
-
-#define bfd_canonicalize_symtab(abfd, location) \
-  BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location))
-
-bfd_boolean bfd_set_symtab
-   (bfd *abfd, asymbol **location, unsigned int count);
-
-void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol);
-
-#define bfd_make_empty_symbol(abfd) \
-  BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))
-
-asymbol *_bfd_generic_make_empty_symbol (bfd *);
-
-#define bfd_make_debug_symbol(abfd,ptr,size) \
-  BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size))
-
-int bfd_decode_symclass (asymbol *symbol);
-
-bfd_boolean bfd_is_undefined_symclass (int symclass);
-
-void bfd_symbol_info (asymbol *symbol, symbol_info *ret);
-
-bfd_boolean bfd_copy_private_symbol_data
-   (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);
-
-#define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
-  BFD_SEND (obfd, _bfd_copy_private_symbol_data, \
-            (ibfd, isymbol, obfd, osymbol))
-
-/* Extracted from bfd.c.  */
-
-enum bfd_direction
-  {
-    no_direction = 0,
-    read_direction = 1,
-    write_direction = 2,
-    both_direction = 3
-  };
-
-enum bfd_plugin_format
-  {
-    bfd_plugin_unknown = 0,
-    bfd_plugin_yes = 1,
-    bfd_plugin_no = 2
-  };
-
-struct bfd_build_id
-  {
-    bfd_size_type size;
-    bfd_byte data[1];
-  };
-
-struct bfd
-{
-  /* The filename the application opened the BFD with.  */
-  const char *filename;
-
-  /* A pointer to the target jump table.  */
-  const struct bfd_target *xvec;
-
-  /* The IOSTREAM, and corresponding IO vector that provide access
-     to the file backing the BFD.  */
-  void *iostream;
-  const struct bfd_iovec *iovec;
-
-  /* The caching routines use these to maintain a
-     least-recently-used list of BFDs.  */
-  struct bfd *lru_prev, *lru_next;
-
-  /* When a file is closed by the caching routines, BFD retains
-     state information on the file here...  */
-  ufile_ptr where;
-
-  /* File modified time, if mtime_set is TRUE.  */
-  long mtime;
-
-  /* A unique identifier of the BFD  */
-  unsigned int id;
-
-  /* The format which belongs to the BFD. (object, core, etc.)  */
-  ENUM_BITFIELD (bfd_format) format : 3;
-
-  /* The direction with which the BFD was opened.  */
-  ENUM_BITFIELD (bfd_direction) direction : 2;
-
-  /* Format_specific flags.  */
-  flagword flags : 20;
-
-  /* Values that may appear in the flags field of a BFD.  These also
-     appear in the object_flags field of the bfd_target structure, where
-     they indicate the set of flags used by that backend (not all flags
-     are meaningful for all object file formats) (FIXME: at the moment,
-     the object_flags values have mostly just been copied from backend
-     to another, and are not necessarily correct).  */
-
-#define BFD_NO_FLAGS   0x00
-
-  /* BFD contains relocation entries.  */
-#define HAS_RELOC      0x01
-
-  /* BFD is directly executable.  */
-#define EXEC_P         0x02
-
-  /* BFD has line number information (basically used for F_LNNO in a
-     COFF header).  */
-#define HAS_LINENO     0x04
-
-  /* BFD has debugging information.  */
-#define HAS_DEBUG      0x08
-
-  /* BFD has symbols.  */
-#define HAS_SYMS       0x10
-
-  /* BFD has local symbols (basically used for F_LSYMS in a COFF
-     header).  */
-#define HAS_LOCALS     0x20
-
-  /* BFD is a dynamic object.  */
-#define DYNAMIC        0x40
-
-  /* Text section is write protected (if D_PAGED is not set, this is
-     like an a.out NMAGIC file) (the linker sets this by default, but
-     clears it for -r or -N).  */
-#define WP_TEXT        0x80
-
-  /* BFD is dynamically paged (this is like an a.out ZMAGIC file) (the
-     linker sets this by default, but clears it for -r or -n or -N).  */
-#define D_PAGED        0x100
-
-  /* BFD is relaxable (this means that bfd_relax_section may be able to
-     do something) (sometimes bfd_relax_section can do something even if
-     this is not set).  */
-#define BFD_IS_RELAXABLE 0x200
-
-  /* This may be set before writing out a BFD to request using a
-     traditional format.  For example, this is used to request that when
-     writing out an a.out object the symbols not be hashed to eliminate
-     duplicates.  */
-#define BFD_TRADITIONAL_FORMAT 0x400
-
-  /* This flag indicates that the BFD contents are actually cached
-     in memory.  If this is set, iostream points to a bfd_in_memory
-     struct.  */
-#define BFD_IN_MEMORY 0x800
-
-  /* This BFD has been created by the linker and doesn't correspond
-     to any input file.  */
-#define BFD_LINKER_CREATED 0x1000
-
-  /* This may be set before writing out a BFD to request that it
-     be written using values for UIDs, GIDs, timestamps, etc. that
-     will be consistent from run to run.  */
-#define BFD_DETERMINISTIC_OUTPUT 0x2000
-
-  /* Compress sections in this BFD.  */
-#define BFD_COMPRESS 0x4000
-
-  /* Decompress sections in this BFD.  */
-#define BFD_DECOMPRESS 0x8000
-
-  /* BFD is a dummy, for plugins.  */
-#define BFD_PLUGIN 0x10000
-
-  /* Compress sections in this BFD with SHF_COMPRESSED from gABI.  */
-#define BFD_COMPRESS_GABI 0x20000
-
-  /* Convert ELF common symbol type to STT_COMMON or STT_OBJECT in this
-     BFD.  */
-#define BFD_CONVERT_ELF_COMMON 0x40000
-
-  /* Use the ELF STT_COMMON type in this BFD.  */
-#define BFD_USE_ELF_STT_COMMON 0x80000
-
-  /* Flags bits to be saved in bfd_preserve_save.  */
-#define BFD_FLAGS_SAVED \
-  (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_PLUGIN \
-   | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON)
-
-  /* Flags bits which are for BFD use only.  */
-#define BFD_FLAGS_FOR_BFD_USE_MASK \
-  (BFD_IN_MEMORY | BFD_COMPRESS | BFD_DECOMPRESS | BFD_LINKER_CREATED \
-   | BFD_PLUGIN | BFD_TRADITIONAL_FORMAT | BFD_DETERMINISTIC_OUTPUT \
-   | BFD_COMPRESS_GABI | BFD_CONVERT_ELF_COMMON | BFD_USE_ELF_STT_COMMON)
-
-  /* Is the file descriptor being cached?  That is, can it be closed as
-     needed, and re-opened when accessed later?  */
-  unsigned int cacheable : 1;
-
-  /* Marks whether there was a default target specified when the
-     BFD was opened. This is used to select which matching algorithm
-     to use to choose the back end.  */
-  unsigned int target_defaulted : 1;
-
-  /* ... and here: (``once'' means at least once).  */
-  unsigned int opened_once : 1;
-
-  /* Set if we have a locally maintained mtime value, rather than
-     getting it from the file each time.  */
-  unsigned int mtime_set : 1;
-
-  /* Flag set if symbols from this BFD should not be exported.  */
-  unsigned int no_export : 1;
-
-  /* Remember when output has begun, to stop strange things
-     from happening.  */
-  unsigned int output_has_begun : 1;
-
-  /* Have archive map.  */
-  unsigned int has_armap : 1;
-
-  /* Set if this is a thin archive.  */
-  unsigned int is_thin_archive : 1;
-
-  /* Set if only required symbols should be added in the link hash table for
-     this object.  Used by VMS linkers.  */
-  unsigned int selective_search : 1;
-
-  /* Set if this is the linker output BFD.  */
-  unsigned int is_linker_output : 1;
-
-  /* Set if this is the linker input BFD.  */
-  unsigned int is_linker_input : 1;
-
-  /* If this is an input for a compiler plug-in library.  */
-  ENUM_BITFIELD (bfd_plugin_format) plugin_format : 2;
-
-  /* Set if this is a plugin output file.  */
-  unsigned int lto_output : 1;
-
-  /* Set to dummy BFD created when claimed by a compiler plug-in
-     library.  */
-  bfd *plugin_dummy_bfd;
-
-  /* Currently my_archive is tested before adding origin to
-     anything. I believe that this can become always an add of
-     origin, with origin set to 0 for non archive files.  */
-  ufile_ptr origin;
-
-  /* The origin in the archive of the proxy entry.  This will
-     normally be the same as origin, except for thin archives,
-     when it will contain the current offset of the proxy in the
-     thin archive rather than the offset of the bfd in its actual
-     container.  */
-  ufile_ptr proxy_origin;
-
-  /* A hash table for section names.  */
-  struct bfd_hash_table section_htab;
-
-  /* Pointer to linked list of sections.  */
-  struct bfd_section *sections;
-
-  /* The last section on the section list.  */
-  struct bfd_section *section_last;
-
-  /* The number of sections.  */
-  unsigned int section_count;
-
-  /* A field used by _bfd_generic_link_add_archive_symbols.  This will
-     be used only for archive elements.  */
-  int archive_pass;
-
-  /* Stuff only useful for object files:
-     The start address.  */
-  bfd_vma start_address;
-
-  /* Symbol table for output BFD (with symcount entries).
-     Also used by the linker to cache input BFD symbols.  */
-  struct bfd_symbol  **outsymbols;
-
-  /* Used for input and output.  */
-  unsigned int symcount;
-
-  /* Used for slurped dynamic symbol tables.  */
-  unsigned int dynsymcount;
-
-  /* Pointer to structure which contains architecture information.  */
-  const struct bfd_arch_info *arch_info;
-
-  /* Stuff only useful for archives.  */
-  void *arelt_data;
-  struct bfd *my_archive;      /* The containing archive BFD.  */
-  struct bfd *archive_next;    /* The next BFD in the archive.  */
-  struct bfd *archive_head;    /* The first BFD in the archive.  */
-  struct bfd *nested_archives; /* List of nested archive in a flattened
-                                  thin archive.  */
-
-  union {
-    /* For input BFDs, a chain of BFDs involved in a link.  */
-    struct bfd *next;
-    /* For output BFD, the linker hash table.  */
-    struct bfd_link_hash_table *hash;
-  } link;
-
-  /* Used by the back end to hold private data.  */
-  union
-    {
-      struct aout_data_struct *aout_data;
-      struct artdata *aout_ar_data;
-      struct _oasys_data *oasys_obj_data;
-      struct _oasys_ar_data *oasys_ar_data;
-      struct coff_tdata *coff_obj_data;
-      struct pe_tdata *pe_obj_data;
-      struct xcoff_tdata *xcoff_obj_data;
-      struct ecoff_tdata *ecoff_obj_data;
-      struct ieee_data_struct *ieee_data;
-      struct ieee_ar_data_struct *ieee_ar_data;
-      struct srec_data_struct *srec_data;
-      struct verilog_data_struct *verilog_data;
-      struct ihex_data_struct *ihex_data;
-      struct tekhex_data_struct *tekhex_data;
-      struct elf_obj_tdata *elf_obj_data;
-      struct nlm_obj_tdata *nlm_obj_data;
-      struct bout_data_struct *bout_data;
-      struct mmo_data_struct *mmo_data;
-      struct sun_core_struct *sun_core_data;
-      struct sco5_core_struct *sco5_core_data;
-      struct trad_core_struct *trad_core_data;
-      struct som_data_struct *som_data;
-      struct hpux_core_struct *hpux_core_data;
-      struct hppabsd_core_struct *hppabsd_core_data;
-      struct sgi_core_struct *sgi_core_data;
-      struct lynx_core_struct *lynx_core_data;
-      struct osf_core_struct *osf_core_data;
-      struct cisco_core_struct *cisco_core_data;
-      struct versados_data_struct *versados_data;
-      struct netbsd_core_struct *netbsd_core_data;
-      struct mach_o_data_struct *mach_o_data;
-      struct mach_o_fat_data_struct *mach_o_fat_data;
-      struct plugin_data_struct *plugin_data;
-      struct bfd_pef_data_struct *pef_data;
-      struct bfd_pef_xlib_data_struct *pef_xlib_data;
-      struct bfd_sym_data_struct *sym_data;
-      void *any;
-    }
-  tdata;
-
-  /* Used by the application to hold private data.  */
-  void *usrdata;
-
-  /* Where all the allocated stuff under this BFD goes.  This is a
-     struct objalloc *, but we use void * to avoid requiring the inclusion
-     of objalloc.h.  */
-  void *memory;
-
-  /* For input BFDs, the build ID, if the object has one. */
-  const struct bfd_build_id *build_id;
-};
-
-/* See note beside bfd_set_section_userdata.  */
-static inline bfd_boolean
-bfd_set_cacheable (bfd * abfd, bfd_boolean val)
-{
-  abfd->cacheable = val;
-  return TRUE;
-}
-
-
-typedef enum bfd_error
-{
-  bfd_error_no_error = 0,
-  bfd_error_system_call,
-  bfd_error_invalid_target,
-  bfd_error_wrong_format,
-  bfd_error_wrong_object_format,
-  bfd_error_invalid_operation,
-  bfd_error_no_memory,
-  bfd_error_no_symbols,
-  bfd_error_no_armap,
-  bfd_error_no_more_archived_files,
-  bfd_error_malformed_archive,
-  bfd_error_missing_dso,
-  bfd_error_file_not_recognized,
-  bfd_error_file_ambiguously_recognized,
-  bfd_error_no_contents,
-  bfd_error_nonrepresentable_section,
-  bfd_error_no_debug_section,
-  bfd_error_bad_value,
-  bfd_error_file_truncated,
-  bfd_error_file_too_big,
-  bfd_error_on_input,
-  bfd_error_invalid_error_code
-}
-bfd_error_type;
-
-bfd_error_type bfd_get_error (void);
-
-void bfd_set_error (bfd_error_type error_tag, ...);
-
-const char *bfd_errmsg (bfd_error_type error_tag);
-
-void bfd_perror (const char *message);
-
-
-typedef void (*bfd_error_handler_type) (const char *, va_list);
-
-bfd_error_handler_type bfd_set_error_handler (bfd_error_handler_type);
-
-void bfd_set_error_program_name (const char *);
-
-
-typedef void (*bfd_assert_handler_type) (const char *bfd_formatmsg,
-                                         const char *bfd_version,
-                                         const char *bfd_file,
-                                         int bfd_line);
-
-bfd_assert_handler_type bfd_set_assert_handler (bfd_assert_handler_type);
-
-long bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);
-
-long bfd_canonicalize_reloc
-   (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);
-
-void bfd_set_reloc
-   (bfd *abfd, asection *sec, arelent **rel, unsigned int count);
-
-bfd_boolean bfd_set_file_flags (bfd *abfd, flagword flags);
-
-int bfd_get_arch_size (bfd *abfd);
-
-int bfd_get_sign_extend_vma (bfd *abfd);
-
-bfd_boolean bfd_set_start_address (bfd *abfd, bfd_vma vma);
-
-unsigned int bfd_get_gp_size (bfd *abfd);
-
-void bfd_set_gp_size (bfd *abfd, unsigned int i);
-
-bfd_vma bfd_scan_vma (const char *string, const char **end, int base);
-
-bfd_boolean bfd_copy_private_header_data (bfd *ibfd, bfd *obfd);
-
-#define bfd_copy_private_header_data(ibfd, obfd) \
-     BFD_SEND (obfd, _bfd_copy_private_header_data, \
-               (ibfd, obfd))
-bfd_boolean bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);
-
-#define bfd_copy_private_bfd_data(ibfd, obfd) \
-     BFD_SEND (obfd, _bfd_copy_private_bfd_data, \
-               (ibfd, obfd))
-bfd_boolean bfd_set_private_flags (bfd *abfd, flagword flags);
-
-#define bfd_set_private_flags(abfd, flags) \
-     BFD_SEND (abfd, _bfd_set_private_flags, (abfd, flags))
-#define bfd_sizeof_headers(abfd, info) \
-       BFD_SEND (abfd, _bfd_sizeof_headers, (abfd, info))
-
-#define bfd_find_nearest_line(abfd, sec, syms, off, file, func, line) \
-       BFD_SEND (abfd, _bfd_find_nearest_line, \
-                 (abfd, syms, sec, off, file, func, line, NULL))
-
-#define bfd_find_nearest_line_discriminator(abfd, sec, syms, off, file, func, \
-                                            line, disc) \
-       BFD_SEND (abfd, _bfd_find_nearest_line, \
-                 (abfd, syms, sec, off, file, func, line, disc))
-
-#define bfd_find_line(abfd, syms, sym, file, line) \
-       BFD_SEND (abfd, _bfd_find_line, \
-                 (abfd, syms, sym, file, line))
-
-#define bfd_find_inliner_info(abfd, file, func, line) \
-       BFD_SEND (abfd, _bfd_find_inliner_info, \
-                 (abfd, file, func, line))
-
-#define bfd_debug_info_start(abfd) \
-       BFD_SEND (abfd, _bfd_debug_info_start, (abfd))
-
-#define bfd_debug_info_end(abfd) \
-       BFD_SEND (abfd, _bfd_debug_info_end, (abfd))
-
-#define bfd_debug_info_accumulate(abfd, section) \
-       BFD_SEND (abfd, _bfd_debug_info_accumulate, (abfd, section))
-
-#define bfd_stat_arch_elt(abfd, stat) \
-       BFD_SEND (abfd, _bfd_stat_arch_elt,(abfd, stat))
-
-#define bfd_update_armap_timestamp(abfd) \
-       BFD_SEND (abfd, _bfd_update_armap_timestamp, (abfd))
-
-#define bfd_set_arch_mach(abfd, arch, mach)\
-       BFD_SEND ( abfd, _bfd_set_arch_mach, (abfd, arch, mach))
-
-#define bfd_relax_section(abfd, section, link_info, again) \
-       BFD_SEND (abfd, _bfd_relax_section, (abfd, section, link_info, again))
-
-#define bfd_gc_sections(abfd, link_info) \
-       BFD_SEND (abfd, _bfd_gc_sections, (abfd, link_info))
-
-#define bfd_lookup_section_flags(link_info, flag_info, section) \
-       BFD_SEND (abfd, _bfd_lookup_section_flags, (link_info, flag_info, section))
-
-#define bfd_merge_sections(abfd, link_info) \
-       BFD_SEND (abfd, _bfd_merge_sections, (abfd, link_info))
-
-#define bfd_is_group_section(abfd, sec) \
-       BFD_SEND (abfd, _bfd_is_group_section, (abfd, sec))
-
-#define bfd_discard_group(abfd, sec) \
-       BFD_SEND (abfd, _bfd_discard_group, (abfd, sec))
-
-#define bfd_link_hash_table_create(abfd) \
-       BFD_SEND (abfd, _bfd_link_hash_table_create, (abfd))
-
-#define bfd_link_add_symbols(abfd, info) \
-       BFD_SEND (abfd, _bfd_link_add_symbols, (abfd, info))
-
-#define bfd_link_just_syms(abfd, sec, info) \
-       BFD_SEND (abfd, _bfd_link_just_syms, (sec, info))
-
-#define bfd_final_link(abfd, info) \
-       BFD_SEND (abfd, _bfd_final_link, (abfd, info))
-
-#define bfd_free_cached_info(abfd) \
-       BFD_SEND (abfd, _bfd_free_cached_info, (abfd))
-
-#define bfd_get_dynamic_symtab_upper_bound(abfd) \
-       BFD_SEND (abfd, _bfd_get_dynamic_symtab_upper_bound, (abfd))
-
-#define bfd_print_private_bfd_data(abfd, file)\
-       BFD_SEND (abfd, _bfd_print_private_bfd_data, (abfd, file))
-
-#define bfd_canonicalize_dynamic_symtab(abfd, asymbols) \
-       BFD_SEND (abfd, _bfd_canonicalize_dynamic_symtab, (abfd, asymbols))
-
-#define bfd_get_synthetic_symtab(abfd, count, syms, dyncount, dynsyms, ret) \
-       BFD_SEND (abfd, _bfd_get_synthetic_symtab, (abfd, count, syms, \
-                                                   dyncount, dynsyms, ret))
-
-#define bfd_get_dynamic_reloc_upper_bound(abfd) \
-       BFD_SEND (abfd, _bfd_get_dynamic_reloc_upper_bound, (abfd))
-
-#define bfd_canonicalize_dynamic_reloc(abfd, arels, asyms) \
-       BFD_SEND (abfd, _bfd_canonicalize_dynamic_reloc, (abfd, arels, asyms))
-
-extern bfd_byte *bfd_get_relocated_section_contents
-  (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *,
-   bfd_boolean, asymbol **);
-
-bfd_boolean bfd_alt_mach_code (bfd *abfd, int alternative);
-
-bfd_vma bfd_emul_get_maxpagesize (const char *);
-
-void bfd_emul_set_maxpagesize (const char *, bfd_vma);
-
-bfd_vma bfd_emul_get_commonpagesize (const char *);
-
-void bfd_emul_set_commonpagesize (const char *, bfd_vma);
-
-char *bfd_demangle (bfd *, const char *, int);
-
-void bfd_update_compression_header
-   (bfd *abfd, bfd_byte *contents, asection *sec);
-
-bfd_boolean bfd_check_compression_header
-   (bfd *abfd, bfd_byte *contents, asection *sec,
-    bfd_size_type *uncompressed_size);
-
-int bfd_get_compression_header_size (bfd *abfd, asection *sec);
-
-bfd_size_type bfd_convert_section_size
-   (bfd *ibfd, asection *isec, bfd *obfd, bfd_size_type size);
-
-bfd_boolean bfd_convert_section_contents
-   (bfd *ibfd, asection *isec, bfd *obfd,
-    bfd_byte **ptr, bfd_size_type *ptr_size);
-
-/* Extracted from archive.c.  */
-symindex bfd_get_next_mapent
-   (bfd *abfd, symindex previous, carsym **sym);
-
-bfd_boolean bfd_set_archive_head (bfd *output, bfd *new_head);
-
-bfd *bfd_openr_next_archived_file (bfd *archive, bfd *previous);
-
-/* Extracted from corefile.c.  */
-const char *bfd_core_file_failing_command (bfd *abfd);
-
-int bfd_core_file_failing_signal (bfd *abfd);
-
-int bfd_core_file_pid (bfd *abfd);
-
-bfd_boolean core_file_matches_executable_p
-   (bfd *core_bfd, bfd *exec_bfd);
-
-bfd_boolean generic_core_file_matches_executable_p
-   (bfd *core_bfd, bfd *exec_bfd);
-
-/* Extracted from targets.c.  */
-#define BFD_SEND(bfd, message, arglist) \
-  ((*((bfd)->xvec->message)) arglist)
-
-#ifdef DEBUG_BFD_SEND
-#undef BFD_SEND
-#define BFD_SEND(bfd, message, arglist) \
-  (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
-    ((*((bfd)->xvec->message)) arglist) : \
-    (bfd_assert (__FILE__,__LINE__), NULL))
-#endif
-#define BFD_SEND_FMT(bfd, message, arglist) \
-  (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist)
-
-#ifdef DEBUG_BFD_SEND
-#undef BFD_SEND_FMT
-#define BFD_SEND_FMT(bfd, message, arglist) \
-  (((bfd) && (bfd)->xvec && (bfd)->xvec->message) ? \
-   (((bfd)->xvec->message[(int) ((bfd)->format)]) arglist) : \
-   (bfd_assert (__FILE__,__LINE__), NULL))
-#endif
-
-enum bfd_flavour
-{
-  /* N.B. Update bfd_flavour_name if you change this.  */
-  bfd_target_unknown_flavour,
-  bfd_target_aout_flavour,
-  bfd_target_coff_flavour,
-  bfd_target_ecoff_flavour,
-  bfd_target_xcoff_flavour,
-  bfd_target_elf_flavour,
-  bfd_target_ieee_flavour,
-  bfd_target_nlm_flavour,
-  bfd_target_oasys_flavour,
-  bfd_target_tekhex_flavour,
-  bfd_target_srec_flavour,
-  bfd_target_verilog_flavour,
-  bfd_target_ihex_flavour,
-  bfd_target_som_flavour,
-  bfd_target_os9k_flavour,
-  bfd_target_versados_flavour,
-  bfd_target_msdos_flavour,
-  bfd_target_ovax_flavour,
-  bfd_target_evax_flavour,
-  bfd_target_mmo_flavour,
-  bfd_target_mach_o_flavour,
-  bfd_target_pef_flavour,
-  bfd_target_pef_xlib_flavour,
-  bfd_target_sym_flavour
-};
-
-enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN };
-
-/* Forward declaration.  */
-typedef struct bfd_link_info _bfd_link_info;
-
-/* Forward declaration.  */
-typedef struct flag_info flag_info;
-
-typedef struct bfd_target
-{
-  /* Identifies the kind of target, e.g., SunOS4, Ultrix, etc.  */
-  char *name;
-
- /* The "flavour" of a back end is a general indication about
-    the contents of a file.  */
-  enum bfd_flavour flavour;
-
-  /* The order of bytes within the data area of a file.  */
-  enum bfd_endian byteorder;
-
- /* The order of bytes within the header parts of a file.  */
-  enum bfd_endian header_byteorder;
-
-  /* A mask of all the flags which an executable may have set -
-     from the set <<BFD_NO_FLAGS>>, <<HAS_RELOC>>, ...<<D_PAGED>>.  */
-  flagword object_flags;
-
- /* A mask of all the flags which a section may have set - from
-    the set <<SEC_NO_FLAGS>>, <<SEC_ALLOC>>, ...<<SET_NEVER_LOAD>>.  */
-  flagword section_flags;
-
- /* The character normally found at the front of a symbol.
-    (if any), perhaps `_'.  */
-  char symbol_leading_char;
-
- /* The pad character for file names within an archive header.  */
-  char ar_pad_char;
-
-  /* The maximum number of characters in an archive header.  */
-  unsigned char ar_max_namelen;
-
-  /* How well this target matches, used to select between various
-     possible targets when more than one target matches.  */
-  unsigned char match_priority;
-
-  /* Entries for byte swapping for data. These are different from the
-     other entry points, since they don't take a BFD as the first argument.
-     Certain other handlers could do the same.  */
-  bfd_uint64_t   (*bfd_getx64) (const void *);
-  bfd_int64_t    (*bfd_getx_signed_64) (const void *);
-  void           (*bfd_putx64) (bfd_uint64_t, void *);
-  bfd_vma        (*bfd_getx32) (const void *);
-  bfd_signed_vma (*bfd_getx_signed_32) (const void *);
-  void           (*bfd_putx32) (bfd_vma, void *);
-  bfd_vma        (*bfd_getx16) (const void *);
-  bfd_signed_vma (*bfd_getx_signed_16) (const void *);
-  void           (*bfd_putx16) (bfd_vma, void *);
-
-  /* Byte swapping for the headers.  */
-  bfd_uint64_t   (*bfd_h_getx64) (const void *);
-  bfd_int64_t    (*bfd_h_getx_signed_64) (const void *);
-  void           (*bfd_h_putx64) (bfd_uint64_t, void *);
-  bfd_vma        (*bfd_h_getx32) (const void *);
-  bfd_signed_vma (*bfd_h_getx_signed_32) (const void *);
-  void           (*bfd_h_putx32) (bfd_vma, void *);
-  bfd_vma        (*bfd_h_getx16) (const void *);
-  bfd_signed_vma (*bfd_h_getx_signed_16) (const void *);
-  void           (*bfd_h_putx16) (bfd_vma, void *);
-
-  /* Format dependent routines: these are vectors of entry points
-     within the target vector structure, one for each format to check.  */
-
-  /* Check the format of a file being read.  Return a <<bfd_target *>> or zero.  */
-  const struct bfd_target *(*_bfd_check_format[bfd_type_end]) (bfd *);
-
-  /* Set the format of a file being written.  */
-  bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *);
-
-  /* Write cached information into a file being written, at <<bfd_close>>.  */
-  bfd_boolean (*_bfd_write_contents[bfd_type_end]) (bfd *);
-
-
-  /* Generic entry points.  */
-#define BFD_JUMP_TABLE_GENERIC(NAME) \
-  NAME##_close_and_cleanup, \
-  NAME##_bfd_free_cached_info, \
-  NAME##_new_section_hook, \
-  NAME##_get_section_contents, \
-  NAME##_get_section_contents_in_window
-
-  /* Called when the BFD is being closed to do any necessary cleanup.  */
-  bfd_boolean (*_close_and_cleanup) (bfd *);
-  /* Ask the BFD to free all cached information.  */
-  bfd_boolean (*_bfd_free_cached_info) (bfd *);
-  /* Called when a new section is created.  */
-  bfd_boolean (*_new_section_hook) (bfd *, sec_ptr);
-  /* Read the contents of a section.  */
-  bfd_boolean (*_bfd_get_section_contents)
-    (bfd *, sec_ptr, void *, file_ptr, bfd_size_type);
-  bfd_boolean (*_bfd_get_section_contents_in_window)
-    (bfd *, sec_ptr, bfd_window *, file_ptr, bfd_size_type);
-
-  /* Entry points to copy private data.  */
-#define BFD_JUMP_TABLE_COPY(NAME) \
-  NAME##_bfd_copy_private_bfd_data, \
-  NAME##_bfd_merge_private_bfd_data, \
-  _bfd_generic_init_private_section_data, \
-  NAME##_bfd_copy_private_section_data, \
-  NAME##_bfd_copy_private_symbol_data, \
-  NAME##_bfd_copy_private_header_data, \
-  NAME##_bfd_set_private_flags, \
-  NAME##_bfd_print_private_bfd_data
-
-  /* Called to copy BFD general private data from one object file
-     to another.  */
-  bfd_boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *);
-  /* Called to merge BFD general private data from one object file
-     to a common output file when linking.  */
-  bfd_boolean (*_bfd_merge_private_bfd_data) (bfd *, struct bfd_link_info *);
-  /* Called to initialize BFD private section data from one object file
-     to another.  */
-#define bfd_init_private_section_data(ibfd, isec, obfd, osec, link_info) \
-  BFD_SEND (obfd, _bfd_init_private_section_data, (ibfd, isec, obfd, osec, link_info))
-  bfd_boolean (*_bfd_init_private_section_data)
-    (bfd *, sec_ptr, bfd *, sec_ptr, struct bfd_link_info *);
-  /* Called to copy BFD private section data from one object file
-     to another.  */
-  bfd_boolean (*_bfd_copy_private_section_data)
-    (bfd *, sec_ptr, bfd *, sec_ptr);
-  /* Called to copy BFD private symbol data from one symbol
-     to another.  */
-  bfd_boolean (*_bfd_copy_private_symbol_data)
-    (bfd *, asymbol *, bfd *, asymbol *);
-  /* Called to copy BFD private header data from one object file
-     to another.  */
-  bfd_boolean (*_bfd_copy_private_header_data)
-    (bfd *, bfd *);
-  /* Called to set private backend flags.  */
-  bfd_boolean (*_bfd_set_private_flags) (bfd *, flagword);
-
-  /* Called to print private BFD data.  */
-  bfd_boolean (*_bfd_print_private_bfd_data) (bfd *, void *);
-
-  /* Core file entry points.  */
-#define BFD_JUMP_TABLE_CORE(NAME) \
-  NAME##_core_file_failing_command, \
-  NAME##_core_file_failing_signal, \
-  NAME##_core_file_matches_executable_p, \
-  NAME##_core_file_pid
-
-  char *      (*_core_file_failing_command) (bfd *);
-  int         (*_core_file_failing_signal) (bfd *);
-  bfd_boolean (*_core_file_matches_executable_p) (bfd *, bfd *);
-  int         (*_core_file_pid) (bfd *);
-
-  /* Archive entry points.  */
-#define BFD_JUMP_TABLE_ARCHIVE(NAME) \
-  NAME##_slurp_armap, \
-  NAME##_slurp_extended_name_table, \
-  NAME##_construct_extended_name_table, \
-  NAME##_truncate_arname, \
-  NAME##_write_armap, \
-  NAME##_read_ar_hdr, \
-  NAME##_write_ar_hdr, \
-  NAME##_openr_next_archived_file, \
-  NAME##_get_elt_at_index, \
-  NAME##_generic_stat_arch_elt, \
-  NAME##_update_armap_timestamp
-
-  bfd_boolean (*_bfd_slurp_armap) (bfd *);
-  bfd_boolean (*_bfd_slurp_extended_name_table) (bfd *);
-  bfd_boolean (*_bfd_construct_extended_name_table)
-    (bfd *, char **, bfd_size_type *, const char **);
-  void        (*_bfd_truncate_arname) (bfd *, const char *, char *);
-  bfd_boolean (*write_armap)
-    (bfd *, unsigned int, struct orl *, unsigned int, int);
-  void *      (*_bfd_read_ar_hdr_fn) (bfd *);
-  bfd_boolean (*_bfd_write_ar_hdr_fn) (bfd *, bfd *);
-  bfd *       (*openr_next_archived_file) (bfd *, bfd *);
-#define bfd_get_elt_at_index(b,i) BFD_SEND (b, _bfd_get_elt_at_index, (b,i))
-  bfd *       (*_bfd_get_elt_at_index) (bfd *, symindex);
-  int         (*_bfd_stat_arch_elt) (bfd *, struct stat *);
-  bfd_boolean (*_bfd_update_armap_timestamp) (bfd *);
-
-  /* Entry points used for symbols.  */
-#define BFD_JUMP_TABLE_SYMBOLS(NAME) \
-  NAME##_get_symtab_upper_bound, \
-  NAME##_canonicalize_symtab, \
-  NAME##_make_empty_symbol, \
-  NAME##_print_symbol, \
-  NAME##_get_symbol_info, \
-  NAME##_get_symbol_version_string, \
-  NAME##_bfd_is_local_label_name, \
-  NAME##_bfd_is_target_special_symbol, \
-  NAME##_get_lineno, \
-  NAME##_find_nearest_line, \
-  NAME##_find_line, \
-  NAME##_find_inliner_info, \
-  NAME##_bfd_make_debug_symbol, \
-  NAME##_read_minisymbols, \
-  NAME##_minisymbol_to_symbol
-
-  long        (*_bfd_get_symtab_upper_bound) (bfd *);
-  long        (*_bfd_canonicalize_symtab)
-    (bfd *, struct bfd_symbol **);
-  struct bfd_symbol *
-              (*_bfd_make_empty_symbol) (bfd *);
-  void        (*_bfd_print_symbol)
-    (bfd *, void *, struct bfd_symbol *, bfd_print_symbol_type);
-#define bfd_print_symbol(b,p,s,e) BFD_SEND (b, _bfd_print_symbol, (b,p,s,e))
-  void        (*_bfd_get_symbol_info)
-    (bfd *, struct bfd_symbol *, symbol_info *);
-#define bfd_get_symbol_info(b,p,e) BFD_SEND (b, _bfd_get_symbol_info, (b,p,e))
-  const char *(*_bfd_get_symbol_version_string)
-    (bfd *, struct bfd_symbol *, bfd_boolean *);
-#define bfd_get_symbol_version_string(b,s,h) BFD_SEND (b, _bfd_get_symbol_version_string, (b,s,h))
-  bfd_boolean (*_bfd_is_local_label_name) (bfd *, const char *);
-  bfd_boolean (*_bfd_is_target_special_symbol) (bfd *, asymbol *);
-  alent *     (*_get_lineno) (bfd *, struct bfd_symbol *);
-  bfd_boolean (*_bfd_find_nearest_line)
-    (bfd *, struct bfd_symbol **, struct bfd_section *, bfd_vma,
-     const char **, const char **, unsigned int *, unsigned int *);
-  bfd_boolean (*_bfd_find_line)
-    (bfd *, struct bfd_symbol **, struct bfd_symbol *,
-     const char **, unsigned int *);
-  bfd_boolean (*_bfd_find_inliner_info)
-    (bfd *, const char **, const char **, unsigned int *);
- /* Back-door to allow format-aware applications to create debug symbols
-    while using BFD for everything else.  Currently used by the assembler
-    when creating COFF files.  */
-  asymbol *   (*_bfd_make_debug_symbol)
-    (bfd *, void *, unsigned long size);
-#define bfd_read_minisymbols(b, d, m, s) \
-  BFD_SEND (b, _read_minisymbols, (b, d, m, s))
-  long        (*_read_minisymbols)
-    (bfd *, bfd_boolean, void **, unsigned int *);
-#define bfd_minisymbol_to_symbol(b, d, m, f) \
-  BFD_SEND (b, _minisymbol_to_symbol, (b, d, m, f))
-  asymbol *   (*_minisymbol_to_symbol)
-    (bfd *, bfd_boolean, const void *, asymbol *);
-
-  /* Routines for relocs.  */
-#define BFD_JUMP_TABLE_RELOCS(NAME) \
-  NAME##_get_reloc_upper_bound, \
-  NAME##_canonicalize_reloc, \
-  NAME##_bfd_reloc_type_lookup, \
-  NAME##_bfd_reloc_name_lookup
-
-  long        (*_get_reloc_upper_bound) (bfd *, sec_ptr);
-  long        (*_bfd_canonicalize_reloc)
-    (bfd *, sec_ptr, arelent **, struct bfd_symbol **);
-  /* See documentation on reloc types.  */
-  reloc_howto_type *
-              (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);
-  reloc_howto_type *
-              (*reloc_name_lookup) (bfd *, const char *);
-
-
-  /* Routines used when writing an object file.  */
-#define BFD_JUMP_TABLE_WRITE(NAME) \
-  NAME##_set_arch_mach, \
-  NAME##_set_section_contents
-
-  bfd_boolean (*_bfd_set_arch_mach)
-    (bfd *, enum bfd_architecture, unsigned long);
-  bfd_boolean (*_bfd_set_section_contents)
-    (bfd *, sec_ptr, const void *, file_ptr, bfd_size_type);
-
-  /* Routines used by the linker.  */
-#define BFD_JUMP_TABLE_LINK(NAME) \
-  NAME##_sizeof_headers, \
-  NAME##_bfd_get_relocated_section_contents, \
-  NAME##_bfd_relax_section, \
-  NAME##_bfd_link_hash_table_create, \
-  NAME##_bfd_link_add_symbols, \
-  NAME##_bfd_link_just_syms, \
-  NAME##_bfd_copy_link_hash_symbol_type, \
-  NAME##_bfd_final_link, \
-  NAME##_bfd_link_split_section, \
-  NAME##_bfd_link_check_relocs, \
-  NAME##_bfd_gc_sections, \
-  NAME##_bfd_lookup_section_flags, \
-  NAME##_bfd_merge_sections, \
-  NAME##_bfd_is_group_section, \
-  NAME##_bfd_discard_group, \
-  NAME##_section_already_linked, \
-  NAME##_bfd_define_common_symbol
-
-  int         (*_bfd_sizeof_headers) (bfd *, struct bfd_link_info *);
-  bfd_byte *  (*_bfd_get_relocated_section_contents)
-    (bfd *, struct bfd_link_info *, struct bfd_link_order *,
-     bfd_byte *, bfd_boolean, struct bfd_symbol **);
-
-  bfd_boolean (*_bfd_relax_section)
-    (bfd *, struct bfd_section *, struct bfd_link_info *, bfd_boolean *);
-
-  /* Create a hash table for the linker.  Different backends store
-     different information in this table.  */
-  struct bfd_link_hash_table *
-              (*_bfd_link_hash_table_create) (bfd *);
-
-  /* Add symbols from this object file into the hash table.  */
-  bfd_boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);
-
-  /* Indicate that we are only retrieving symbol values from this section.  */
-  void        (*_bfd_link_just_syms) (asection *, struct bfd_link_info *);
-
-  /* Copy the symbol type and other attributes for a linker script
-     assignment of one symbol to another.  */
-#define bfd_copy_link_hash_symbol_type(b, t, f) \
-  BFD_SEND (b, _bfd_copy_link_hash_symbol_type, (b, t, f))
-  void (*_bfd_copy_link_hash_symbol_type)
-    (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *);
-
-  /* Do a link based on the link_order structures attached to each
-     section of the BFD.  */
-  bfd_boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *);
-
-  /* Should this section be split up into smaller pieces during linking.  */
-  bfd_boolean (*_bfd_link_split_section) (bfd *, struct bfd_section *);
-
-  /* Check the relocations in the bfd for validity.  */
-  bfd_boolean (* _bfd_link_check_relocs)(bfd *, struct bfd_link_info *);
-
-  /* Remove sections that are not referenced from the output.  */
-  bfd_boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);
-
-  /* Sets the bitmask of allowed and disallowed section flags.  */
-  bfd_boolean (*_bfd_lookup_section_flags) (struct bfd_link_info *,
-                                            struct flag_info *,
-                                            asection *);
-
-  /* Attempt to merge SEC_MERGE sections.  */
-  bfd_boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
-
-  /* Is this section a member of a group?  */
-  bfd_boolean (*_bfd_is_group_section) (bfd *, const struct bfd_section *);
-
-  /* Discard members of a group.  */
-  bfd_boolean (*_bfd_discard_group) (bfd *, struct bfd_section *);
-
-  /* Check if SEC has been already linked during a reloceatable or
-     final link.  */
-  bfd_boolean (*_section_already_linked) (bfd *, asection *,
-                                          struct bfd_link_info *);
-
-  /* Define a common symbol.  */
-  bfd_boolean (*_bfd_define_common_symbol) (bfd *, struct bfd_link_info *,
-                                            struct bfd_link_hash_entry *);
-
-  /* Routines to handle dynamic symbols and relocs.  */
-#define BFD_JUMP_TABLE_DYNAMIC(NAME) \
-  NAME##_get_dynamic_symtab_upper_bound, \
-  NAME##_canonicalize_dynamic_symtab, \
-  NAME##_get_synthetic_symtab, \
-  NAME##_get_dynamic_reloc_upper_bound, \
-  NAME##_canonicalize_dynamic_reloc
-
-  /* Get the amount of memory required to hold the dynamic symbols.  */
-  long        (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);
-  /* Read in the dynamic symbols.  */
-  long        (*_bfd_canonicalize_dynamic_symtab)
-    (bfd *, struct bfd_symbol **);
-  /* Create synthetized symbols.  */
-  long        (*_bfd_get_synthetic_symtab)
-    (bfd *, long, struct bfd_symbol **, long, struct bfd_symbol **,
-     struct bfd_symbol **);
-  /* Get the amount of memory required to hold the dynamic relocs.  */
-  long        (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);
-  /* Read in the dynamic relocs.  */
-  long        (*_bfd_canonicalize_dynamic_reloc)
-    (bfd *, arelent **, struct bfd_symbol **);
-
-  /* Opposite endian version of this target.  */
-  const struct bfd_target * alternative_target;
-
-  /* Data for use by back-end routines, which isn't
-     generic enough to belong in this structure.  */
-  const void *backend_data;
-
-} bfd_target;
-
-bfd_boolean bfd_set_default_target (const char *name);
-
-const bfd_target *bfd_find_target (const char *target_name, bfd *abfd);
-
-const bfd_target *bfd_get_target_info (const char *target_name,
-    bfd *abfd,
-    bfd_boolean *is_bigendian,
-    int *underscoring,
-    const char **def_target_arch);
-const char ** bfd_target_list (void);
-
-const bfd_target *bfd_iterate_over_targets
-   (int (*func) (const bfd_target *, void *),
-    void *data);
-
-const char *bfd_flavour_name (enum bfd_flavour flavour);
-
-/* Extracted from format.c.  */
-bfd_boolean bfd_check_format (bfd *abfd, bfd_format format);
-
-bfd_boolean bfd_check_format_matches
-   (bfd *abfd, bfd_format format, char ***matching);
-
-bfd_boolean bfd_set_format (bfd *abfd, bfd_format format);
-
-const char *bfd_format_string (bfd_format format);
-
-/* Extracted from linker.c.  */
-bfd_boolean bfd_link_split_section (bfd *abfd, asection *sec);
-
-#define bfd_link_split_section(abfd, sec) \
-       BFD_SEND (abfd, _bfd_link_split_section, (abfd, sec))
-
-bfd_boolean bfd_section_already_linked (bfd *abfd,
-    asection *sec,
-    struct bfd_link_info *info);
-
-#define bfd_section_already_linked(abfd, sec, info) \
-       BFD_SEND (abfd, _section_already_linked, (abfd, sec, info))
-
-bfd_boolean bfd_generic_define_common_symbol
-   (bfd *output_bfd, struct bfd_link_info *info,
-    struct bfd_link_hash_entry *h);
-
-#define bfd_define_common_symbol(output_bfd, info, h) \
-       BFD_SEND (output_bfd, _bfd_define_common_symbol, (output_bfd, info, h))
-
-struct bfd_elf_version_tree * bfd_find_version_for_sym
-   (struct bfd_elf_version_tree *verdefs,
-    const char *sym_name, bfd_boolean *hide);
-
-bfd_boolean bfd_hide_sym_by_version
-   (struct bfd_elf_version_tree *verdefs, const char *sym_name);
-
-bfd_boolean bfd_link_check_relocs
-   (bfd *abfd, struct bfd_link_info *info);
-
-bfd_boolean _bfd_generic_link_check_relocs
-   (bfd *abfd, struct bfd_link_info *info);
-
-bfd_boolean bfd_merge_private_bfd_data
-   (bfd *ibfd, struct bfd_link_info *info);
-
-#define bfd_merge_private_bfd_data(ibfd, info) \
-     BFD_SEND ((info)->output_bfd, _bfd_merge_private_bfd_data, \
-               (ibfd, info))
-/* Extracted from simple.c.  */
-bfd_byte *bfd_simple_get_relocated_section_contents
-   (bfd *abfd, asection *sec, bfd_byte *outbuf, asymbol **symbol_table);
-
-/* Extracted from compress.c.  */
-bfd_boolean bfd_get_full_section_contents
-   (bfd *abfd, asection *section, bfd_byte **ptr);
-
-void bfd_cache_section_contents
-   (asection *sec, void *contents);
-
-bfd_boolean bfd_is_section_compressed_with_header
-   (bfd *abfd, asection *section,
-    int *compression_header_size_p,
-    bfd_size_type *uncompressed_size_p);
-
-bfd_boolean bfd_is_section_compressed
-   (bfd *abfd, asection *section);
-
-bfd_boolean bfd_init_section_decompress_status
-   (bfd *abfd, asection *section);
-
-bfd_boolean bfd_init_section_compress_status
-   (bfd *abfd, asection *section);
-
-bfd_boolean bfd_compress_section
-   (bfd *abfd, asection *section, bfd_byte *uncompressed_buffer);
-
-#ifdef __cplusplus
-}
-#endif
-#endif
Index: GNU/binutils/create-2.28-ppc-dynamic-relocs-patch/file.list
===================================================================
--- GNU/binutils/create-2.28-ppc-dynamic-relocs-patch/file.list	(revision 257)
+++ GNU/binutils/create-2.28-ppc-dynamic-relocs-patch/file.list	(nonexistent)
@@ -1 +0,0 @@
-binutils-2.28/bfd/elf64-ppc.c
Index: GNU/binutils/create-2.28-ppc-dynamic-relocs-patch/create.patch.sh
===================================================================
--- GNU/binutils/create-2.28-ppc-dynamic-relocs-patch/create.patch.sh	(revision 257)
+++ GNU/binutils/create-2.28-ppc-dynamic-relocs-patch/create.patch.sh	(nonexistent)
@@ -1,15 +0,0 @@
-#!/bin/sh
-
-VERSION=2.28
-
-tar --files-from=file.list -xjvf ../binutils-$VERSION.tar.bz2
-mv binutils-$VERSION binutils-$VERSION-orig
-
-cp -rf ./binutils-$VERSION-new ./binutils-$VERSION
-
-diff -b --unified -Nr  binutils-$VERSION-orig  binutils-$VERSION > binutils-$VERSION-ppc-dynamic-relocs.patch
-
-mv binutils-$VERSION-ppc-dynamic-relocs.patch ../patches
-
-rm -rf ./binutils-$VERSION
-rm -rf ./binutils-$VERSION-orig

Property changes on: GNU/binutils/create-2.28-ppc-dynamic-relocs-patch/create.patch.sh
___________________________________________________________________
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: GNU/binutils/create-2.28-ppc-dynamic-relocs-patch/binutils-2.28-new/bfd/elf64-ppc.c
===================================================================
--- GNU/binutils/create-2.28-ppc-dynamic-relocs-patch/binutils-2.28-new/bfd/elf64-ppc.c	(revision 257)
+++ GNU/binutils/create-2.28-ppc-dynamic-relocs-patch/binutils-2.28-new/bfd/elf64-ppc.c	(nonexistent)
@@ -1,15761 +0,0 @@
-/* PowerPC64-specific support for 64-bit ELF.
-   Copyright (C) 1999-2017 Free Software Foundation, Inc.
-   Written by Linus Nordberg, Swox AB <info@swox.com>,
-   based on elf32-ppc.c by Ian Lance Taylor.
-   Largely rewritten by Alan Modra.
-
-   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 64-bit PowerPC ELF ABI may be found at
-   http://www.linuxbase.org/spec/ELF/ppc64/PPC-elf64abi.txt, and
-   http://www.linuxbase.org/spec/ELF/ppc64/spec/book1.html  */
-
-#include "sysdep.h"
-#include <stdarg.h>
-#include "bfd.h"
-#include "bfdlink.h"
-#include "libbfd.h"
-#include "elf-bfd.h"
-#include "elf/ppc64.h"
-#include "elf64-ppc.h"
-#include "dwarf2.h"
-
-static bfd_reloc_status_type ppc64_elf_ha_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type ppc64_elf_branch_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type ppc64_elf_brtaken_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type ppc64_elf_sectoff_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type ppc64_elf_sectoff_ha_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type ppc64_elf_toc_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type ppc64_elf_toc_ha_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type ppc64_elf_toc64_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_reloc_status_type ppc64_elf_unhandled_reloc
-  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
-static bfd_vma opd_entry_value
-  (asection *, bfd_vma, asection **, bfd_vma *, bfd_boolean);
-
-#define TARGET_LITTLE_SYM	powerpc_elf64_le_vec
-#define TARGET_LITTLE_NAME	"elf64-powerpcle"
-#define TARGET_BIG_SYM		powerpc_elf64_vec
-#define TARGET_BIG_NAME		"elf64-powerpc"
-#define ELF_ARCH		bfd_arch_powerpc
-#define ELF_TARGET_ID		PPC64_ELF_DATA
-#define ELF_MACHINE_CODE	EM_PPC64
-#define ELF_MAXPAGESIZE		0x10000
-#define ELF_COMMONPAGESIZE	0x10000
-#define elf_info_to_howto	ppc64_elf_info_to_howto
-
-#define elf_backend_want_got_sym 0
-#define elf_backend_want_plt_sym 0
-#define elf_backend_plt_alignment 3
-#define elf_backend_plt_not_loaded 1
-#define elf_backend_got_header_size 8
-#define elf_backend_want_dynrelro 1
-#define elf_backend_can_gc_sections 1
-#define elf_backend_can_refcount 1
-#define elf_backend_rela_normal 1
-#define elf_backend_dtrel_excludes_plt 1
-#define elf_backend_default_execstack 0
-
-#define bfd_elf64_mkobject		      ppc64_elf_mkobject
-#define bfd_elf64_bfd_reloc_type_lookup	      ppc64_elf_reloc_type_lookup
-#define bfd_elf64_bfd_reloc_name_lookup	      ppc64_elf_reloc_name_lookup
-#define bfd_elf64_bfd_merge_private_bfd_data  ppc64_elf_merge_private_bfd_data
-#define bfd_elf64_bfd_print_private_bfd_data  ppc64_elf_print_private_bfd_data
-#define bfd_elf64_new_section_hook	      ppc64_elf_new_section_hook
-#define bfd_elf64_bfd_link_hash_table_create  ppc64_elf_link_hash_table_create
-#define bfd_elf64_get_synthetic_symtab	      ppc64_elf_get_synthetic_symtab
-#define bfd_elf64_bfd_link_just_syms	      ppc64_elf_link_just_syms
-#define bfd_elf64_bfd_gc_sections	      ppc64_elf_gc_sections
-
-#define elf_backend_object_p		      ppc64_elf_object_p
-#define elf_backend_grok_prstatus	      ppc64_elf_grok_prstatus
-#define elf_backend_grok_psinfo		      ppc64_elf_grok_psinfo
-#define elf_backend_write_core_note	      ppc64_elf_write_core_note
-#define elf_backend_create_dynamic_sections   _bfd_elf_create_dynamic_sections
-#define elf_backend_copy_indirect_symbol      ppc64_elf_copy_indirect_symbol
-#define elf_backend_add_symbol_hook	      ppc64_elf_add_symbol_hook
-#define elf_backend_check_directives	      ppc64_elf_before_check_relocs
-#define elf_backend_notice_as_needed	      ppc64_elf_notice_as_needed
-#define elf_backend_archive_symbol_lookup     ppc64_elf_archive_symbol_lookup
-#define elf_backend_check_relocs	      ppc64_elf_check_relocs
-#define elf_backend_gc_keep		      ppc64_elf_gc_keep
-#define elf_backend_gc_mark_dynamic_ref       ppc64_elf_gc_mark_dynamic_ref
-#define elf_backend_gc_mark_hook	      ppc64_elf_gc_mark_hook
-#define elf_backend_gc_sweep_hook	      ppc64_elf_gc_sweep_hook
-#define elf_backend_adjust_dynamic_symbol     ppc64_elf_adjust_dynamic_symbol
-#define elf_backend_hide_symbol		      ppc64_elf_hide_symbol
-#define elf_backend_maybe_function_sym	      ppc64_elf_maybe_function_sym
-#define elf_backend_always_size_sections      ppc64_elf_func_desc_adjust
-#define elf_backend_size_dynamic_sections     ppc64_elf_size_dynamic_sections
-#define elf_backend_hash_symbol		      ppc64_elf_hash_symbol
-#define elf_backend_init_index_section	      _bfd_elf_init_2_index_sections
-#define elf_backend_action_discarded	      ppc64_elf_action_discarded
-#define elf_backend_relocate_section	      ppc64_elf_relocate_section
-#define elf_backend_finish_dynamic_symbol     ppc64_elf_finish_dynamic_symbol
-#define elf_backend_reloc_type_class	      ppc64_elf_reloc_type_class
-#define elf_backend_finish_dynamic_sections   ppc64_elf_finish_dynamic_sections
-#define elf_backend_link_output_symbol_hook   ppc64_elf_output_symbol_hook
-#define elf_backend_special_sections	      ppc64_elf_special_sections
-#define elf_backend_merge_symbol_attribute    ppc64_elf_merge_symbol_attribute
-#define elf_backend_merge_symbol	      ppc64_elf_merge_symbol
-
-/* The name of the dynamic interpreter.  This is put in the .interp
-   section.  */
-#define ELF_DYNAMIC_INTERPRETER "/usr/lib/ld.so.1"
-
-/* The size in bytes of an entry in the procedure linkage table.  */
-#define PLT_ENTRY_SIZE(htab) (htab->opd_abi ? 24 : 8)
-
-/* The initial size of the plt reserved for the dynamic linker.  */
-#define PLT_INITIAL_ENTRY_SIZE(htab) (htab->opd_abi ? 24 : 16)
-
-/* Offsets to some stack save slots.  */
-#define STK_LR 16
-#define STK_TOC(htab) (htab->opd_abi ? 40 : 24)
-/* This one is dodgy.  ELFv2 does not have a linker word, so use the
-   CR save slot.  Used only by optimised __tls_get_addr call stub,
-   relying on __tls_get_addr_opt not saving CR..  */
-#define STK_LINKER(htab) (htab->opd_abi ? 32 : 8)
-
-/* TOC base pointers offset from start of TOC.  */
-#define TOC_BASE_OFF	0x8000
-/* TOC base alignment.  */
-#define TOC_BASE_ALIGN	256
-
-/* Offset of tp and dtp pointers from start of TLS block.  */
-#define TP_OFFSET	0x7000
-#define DTP_OFFSET	0x8000
-
-/* .plt call stub instructions.  The normal stub is like this, but
-   sometimes the .plt entry crosses a 64k boundary and we need to
-   insert an addi to adjust r11.  */
-#define STD_R2_0R1	0xf8410000	/* std	 %r2,0+40(%r1)	     */
-#define ADDIS_R11_R2	0x3d620000	/* addis %r11,%r2,xxx@ha     */
-#define LD_R12_0R11	0xe98b0000	/* ld	 %r12,xxx+0@l(%r11)  */
-#define MTCTR_R12	0x7d8903a6	/* mtctr %r12		     */
-#define LD_R2_0R11	0xe84b0000	/* ld	 %r2,xxx+8@l(%r11)   */
-#define LD_R11_0R11	0xe96b0000	/* ld	 %r11,xxx+16@l(%r11) */
-#define BCTR		0x4e800420	/* bctr			     */
-
-#define ADDI_R11_R11	0x396b0000	/* addi %r11,%r11,off@l  */
-#define ADDIS_R2_R2	0x3c420000	/* addis %r2,%r2,off@ha  */
-#define ADDI_R2_R2	0x38420000	/* addi  %r2,%r2,off@l   */
-
-#define XOR_R2_R12_R12	0x7d826278	/* xor   %r2,%r12,%r12   */
-#define ADD_R11_R11_R2	0x7d6b1214	/* add   %r11,%r11,%r2   */
-#define XOR_R11_R12_R12	0x7d8b6278	/* xor   %r11,%r12,%r12  */
-#define ADD_R2_R2_R11	0x7c425a14	/* add   %r2,%r2,%r11    */
-#define CMPLDI_R2_0	0x28220000	/* cmpldi %r2,0          */
-#define BNECTR		0x4ca20420	/* bnectr+               */
-#define BNECTR_P4	0x4ce20420	/* bnectr+               */
-
-#define LD_R12_0R2	0xe9820000	/* ld	 %r12,xxx+0(%r2) */
-#define LD_R11_0R2	0xe9620000	/* ld	 %r11,xxx+0(%r2) */
-#define LD_R2_0R2	0xe8420000	/* ld	 %r2,xxx+0(%r2)  */
-
-#define LD_R2_0R1	0xe8410000	/* ld    %r2,0(%r1)      */
-#define LD_R2_0R12	0xe84c0000	/* ld    %r2,0(%r12)     */
-#define ADD_R2_R2_R12	0x7c426214	/* add   %r2,%r2,%r12    */
-
-#define LIS_R2		0x3c400000	/* lis %r2,xxx@ha         */
-#define ADDIS_R2_R12	0x3c4c0000	/* addis %r2,%r12,xxx@ha  */
-#define ADDIS_R12_R2	0x3d820000	/* addis %r12,%r2,xxx@ha  */
-#define ADDIS_R12_R12	0x3d8c0000	/* addis %r12,%r12,xxx@ha */
-#define LD_R12_0R12	0xe98c0000	/* ld    %r12,xxx@l(%r12) */
-
-/* glink call stub instructions.  We enter with the index in R0.  */
-#define GLINK_CALL_STUB_SIZE (16*4)
-					/* 0:				*/
-					/*  .quad plt0-1f		*/
-					/* __glink:			*/
-#define MFLR_R12	0x7d8802a6	/*  mflr %12			*/
-#define BCL_20_31	0x429f0005	/*  bcl 20,31,1f		*/
-					/* 1:				*/
-#define MFLR_R11	0x7d6802a6	/*  mflr %11			*/
-					/*  ld %2,(0b-1b)(%11)		*/
-#define MTLR_R12	0x7d8803a6	/*  mtlr %12			*/
-#define ADD_R11_R2_R11	0x7d625a14	/*  add %11,%2,%11		*/
-					/*  ld %12,0(%11)		*/
-					/*  ld %2,8(%11)		*/
-					/*  mtctr %12			*/
-					/*  ld %11,16(%11)		*/
-					/*  bctr			*/
-#define MFLR_R0		0x7c0802a6	/*  mflr %r0			*/
-#define MTLR_R0		0x7c0803a6	/*  mtlr %r0			*/
-#define SUB_R12_R12_R11	0x7d8b6050	/*  subf %r12,%r11,%r12		*/
-#define ADDI_R0_R12	0x380c0000	/*  addi %r0,%r12,0		*/
-#define SRDI_R0_R0_2	0x7800f082	/*  rldicl %r0,%r0,62,2		*/
-
-/* Pad with this.  */
-#define NOP		0x60000000
-
-/* Some other nops.  */
-#define CROR_151515	0x4def7b82
-#define CROR_313131	0x4ffffb82
-
-/* .glink entries for the first 32k functions are two instructions.  */
-#define LI_R0_0		0x38000000	/* li    %r0,0		*/
-#define B_DOT		0x48000000	/* b     .		*/
-
-/* After that, we need two instructions to load the index, followed by
-   a branch.  */
-#define LIS_R0_0	0x3c000000	/* lis   %r0,0		*/
-#define ORI_R0_R0_0	0x60000000	/* ori	 %r0,%r0,0	*/
-
-/* Instructions used by the save and restore reg functions.  */
-#define STD_R0_0R1	0xf8010000	/* std   %r0,0(%r1)	*/
-#define STD_R0_0R12	0xf80c0000	/* std   %r0,0(%r12)	*/
-#define LD_R0_0R1	0xe8010000	/* ld    %r0,0(%r1)	*/
-#define LD_R0_0R12	0xe80c0000	/* ld    %r0,0(%r12)	*/
-#define STFD_FR0_0R1	0xd8010000	/* stfd  %fr0,0(%r1)	*/
-#define LFD_FR0_0R1	0xc8010000	/* lfd   %fr0,0(%r1)	*/
-#define LI_R12_0	0x39800000	/* li    %r12,0		*/
-#define STVX_VR0_R12_R0	0x7c0c01ce	/* stvx  %v0,%r12,%r0	*/
-#define LVX_VR0_R12_R0	0x7c0c00ce	/* lvx   %v0,%r12,%r0	*/
-#define MTLR_R0		0x7c0803a6	/* mtlr  %r0		*/
-#define BLR		0x4e800020	/* blr			*/
-
-/* Since .opd is an array of descriptors and each entry will end up
-   with identical R_PPC64_RELATIVE relocs, there is really no need to
-   propagate .opd relocs;  The dynamic linker should be taught to
-   relocate .opd without reloc entries.  */
-#ifndef NO_OPD_RELOCS
-#define NO_OPD_RELOCS 0
-#endif
-
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
-#endif
-
-static inline int
-abiversion (bfd *abfd)
-{
-  return elf_elfheader (abfd)->e_flags & EF_PPC64_ABI;
-}
-
-static inline void
-set_abiversion (bfd *abfd, int ver)
-{
-  elf_elfheader (abfd)->e_flags &= ~EF_PPC64_ABI;
-  elf_elfheader (abfd)->e_flags |= ver & EF_PPC64_ABI;
-}
-
-#define ONES(n) (((bfd_vma) 1 << ((n) - 1) << 1) - 1)
-
-/* Relocation HOWTO's.  */
-static reloc_howto_type *ppc64_elf_howto_table[(int) R_PPC64_max];
-
-static reloc_howto_type ppc64_elf_howto_raw[] = {
-  /* This reloc does nothing.  */
-  HOWTO (R_PPC64_NONE,		/* type */
-	 0,			/* rightshift */
-	 3,			/* size (0 = byte, 1 = short, 2 = long) */
-	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_NONE",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* A standard 32 bit relocation.  */
-  HOWTO (R_PPC64_ADDR32,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_ADDR32",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* An absolute 26 bit branch; the lower two bits must be zero.
-     FIXME: we don't check that, we just clear them.  */
-  HOWTO (R_PPC64_ADDR24,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 26,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_ADDR24",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0x03fffffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* A standard 16 bit relocation.  */
-  HOWTO (R_PPC64_ADDR16,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_ADDR16",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* A 16 bit relocation without overflow.  */
-  HOWTO (R_PPC64_ADDR16_LO,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_ADDR16_LO",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Bits 16-31 of an address.  */
-  HOWTO (R_PPC64_ADDR16_HI,	/* type */
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_ADDR16_HI",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Bits 16-31 of an address, plus 1 if the contents of the low 16
-     bits, treated as a signed number, is negative.  */
-  HOWTO (R_PPC64_ADDR16_HA,	/* type */
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_ha_reloc,	/* special_function */
-	 "R_PPC64_ADDR16_HA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* An absolute 16 bit branch; the lower two bits must be zero.
-     FIXME: we don't check that, we just clear them.  */
-  HOWTO (R_PPC64_ADDR14,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_branch_reloc, /* special_function */
-	 "R_PPC64_ADDR14",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0x0000fffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* An absolute 16 bit branch, for which bit 10 should be set to
-     indicate that the branch is expected to be taken.  The lower two
-     bits must be zero.  */
-  HOWTO (R_PPC64_ADDR14_BRTAKEN, /* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_brtaken_reloc, /* special_function */
-	 "R_PPC64_ADDR14_BRTAKEN",/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0x0000fffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* An absolute 16 bit branch, for which bit 10 should be set to
-     indicate that the branch is not expected to be taken.  The lower
-     two bits must be zero.  */
-  HOWTO (R_PPC64_ADDR14_BRNTAKEN, /* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_brtaken_reloc, /* special_function */
-	 "R_PPC64_ADDR14_BRNTAKEN",/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0x0000fffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* A relative 26 bit branch; the lower two bits must be zero.  */
-  HOWTO (R_PPC64_REL24,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 26,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_branch_reloc, /* special_function */
-	 "R_PPC64_REL24",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0x03fffffc,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* A relative 16 bit branch; the lower two bits must be zero.  */
-  HOWTO (R_PPC64_REL14,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_branch_reloc, /* special_function */
-	 "R_PPC64_REL14",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0x0000fffc,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* A relative 16 bit branch.  Bit 10 should be set to indicate that
-     the branch is expected to be taken.  The lower two bits must be
-     zero.  */
-  HOWTO (R_PPC64_REL14_BRTAKEN,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_brtaken_reloc, /* special_function */
-	 "R_PPC64_REL14_BRTAKEN", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0x0000fffc,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* A relative 16 bit branch.  Bit 10 should be set to indicate that
-     the branch is not expected to be taken.  The lower two bits must
-     be zero.  */
-  HOWTO (R_PPC64_REL14_BRNTAKEN, /* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_brtaken_reloc, /* special_function */
-	 "R_PPC64_REL14_BRNTAKEN",/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0x0000fffc,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* Like R_PPC64_ADDR16, but referring to the GOT table entry for the
-     symbol.  */
-  HOWTO (R_PPC64_GOT16,		/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT16",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_ADDR16_LO, but referring to the GOT table entry for
-     the symbol.  */
-  HOWTO (R_PPC64_GOT16_LO,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT16_LO",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_ADDR16_HI, but referring to the GOT table entry for
-     the symbol.  */
-  HOWTO (R_PPC64_GOT16_HI,	/* type */
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,/* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT16_HI",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_ADDR16_HA, but referring to the GOT table entry for
-     the symbol.  */
-  HOWTO (R_PPC64_GOT16_HA,	/* type */
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed,/* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT16_HA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* This is used only by the dynamic linker.  The symbol should exist
-     both in the object being run and in some shared library.  The
-     dynamic linker copies the data addressed by the symbol from the
-     shared library into the object, because the object being
-     run has to have the data at some particular address.  */
-  HOWTO (R_PPC64_COPY,		/* type */
-	 0,			/* rightshift */
-	 0,			/* this one is variable size */
-	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_COPY",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_ADDR64, but used when setting global offset table
-     entries.  */
-  HOWTO (R_PPC64_GLOB_DAT,	/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc,  /* special_function */
-	 "R_PPC64_GLOB_DAT",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 ONES (64),		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Created by the link editor.  Marks a procedure linkage table
-     entry for a symbol.  */
-  HOWTO (R_PPC64_JMP_SLOT,	/* type */
-	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
-	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_JMP_SLOT",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Used only by the dynamic linker.  When the object is run, this
-     doubleword64 is set to the load address of the object, plus the
-     addend.  */
-  HOWTO (R_PPC64_RELATIVE,	/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_RELATIVE",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 ONES (64),		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_ADDR32, but may be unaligned.  */
-  HOWTO (R_PPC64_UADDR32,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_UADDR32",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_ADDR16, but may be unaligned.  */
-  HOWTO (R_PPC64_UADDR16,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_UADDR16",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 32-bit PC relative.  */
-  HOWTO (R_PPC64_REL32,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_REL32",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* 32-bit relocation to the symbol's procedure linkage table.  */
-  HOWTO (R_PPC64_PLT32,		/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_bitfield, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_PLT32",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 32-bit PC relative relocation to the symbol's procedure linkage table.
-     FIXME: R_PPC64_PLTREL32 not supported.  */
-  HOWTO (R_PPC64_PLTREL32,	/* type */
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_PLTREL32",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffffffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* Like R_PPC64_ADDR16_LO, but referring to the PLT table entry for
-     the symbol.  */
-  HOWTO (R_PPC64_PLT16_LO,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_PLT16_LO",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_ADDR16_HI, but referring to the PLT table entry for
-     the symbol.  */
-  HOWTO (R_PPC64_PLT16_HI,	/* type */
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_PLT16_HI",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_ADDR16_HA, but referring to the PLT table entry for
-     the symbol.  */
-  HOWTO (R_PPC64_PLT16_HA,	/* type */
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_PLT16_HA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 16-bit section relative relocation.  */
-  HOWTO (R_PPC64_SECTOFF,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_sectoff_reloc, /* special_function */
-	 "R_PPC64_SECTOFF",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_SECTOFF, but no overflow warning.  */
-  HOWTO (R_PPC64_SECTOFF_LO,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_sectoff_reloc, /* special_function */
-	 "R_PPC64_SECTOFF_LO",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 16-bit upper half section relative relocation.  */
-  HOWTO (R_PPC64_SECTOFF_HI,	/* type */
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_sectoff_reloc, /* special_function */
-	 "R_PPC64_SECTOFF_HI",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 16-bit upper half adjusted section relative relocation.  */
-  HOWTO (R_PPC64_SECTOFF_HA,	/* type */
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_sectoff_ha_reloc, /* special_function */
-	 "R_PPC64_SECTOFF_HA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_REL24 without touching the two least significant bits.  */
-  HOWTO (R_PPC64_REL30,		/* type */
-	 2,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 30,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc, /* special_function */
-	 "R_PPC64_REL30",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffffffc,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* Relocs in the 64-bit PowerPC ELF ABI, not in the 32-bit ABI.  */
-
-  /* A standard 64-bit relocation.  */
-  HOWTO (R_PPC64_ADDR64,	/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_ADDR64",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 ONES (64),		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* The bits 32-47 of an address.  */
-  HOWTO (R_PPC64_ADDR16_HIGHER,	/* type */
-	 32,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_ADDR16_HIGHER", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* The bits 32-47 of an address, plus 1 if the contents of the low
-     16 bits, treated as a signed number, is negative.  */
-  HOWTO (R_PPC64_ADDR16_HIGHERA, /* type */
-	 32,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_ha_reloc,	/* special_function */
-	 "R_PPC64_ADDR16_HIGHERA", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* The bits 48-63 of an address.  */
-  HOWTO (R_PPC64_ADDR16_HIGHEST,/* type */
-	 48,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_ADDR16_HIGHEST", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* The bits 48-63 of an address, plus 1 if the contents of the low
-     16 bits, treated as a signed number, is negative.  */
-  HOWTO (R_PPC64_ADDR16_HIGHESTA,/* type */
-	 48,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_ha_reloc,	/* special_function */
-	 "R_PPC64_ADDR16_HIGHESTA", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like ADDR64, but may be unaligned.  */
-  HOWTO (R_PPC64_UADDR64,	/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_UADDR64",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 ONES (64),		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 64-bit relative relocation.  */
-  HOWTO (R_PPC64_REL64,		/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
-	 64,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_REL64",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 ONES (64),		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* 64-bit relocation to the symbol's procedure linkage table.  */
-  HOWTO (R_PPC64_PLT64,		/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_PLT64",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 ONES (64),		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 64-bit PC relative relocation to the symbol's procedure linkage
-     table.  */
-  /* FIXME: R_PPC64_PLTREL64 not supported.  */
-  HOWTO (R_PPC64_PLTREL64,	/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
-	 64,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_PLTREL64",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 ONES (64),		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* 16 bit TOC-relative relocation.  */
-
-  /* R_PPC64_TOC16	  47	   half16*	S + A - .TOC.  */
-  HOWTO (R_PPC64_TOC16,		/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_toc_reloc,	/* special_function */
-	 "R_PPC64_TOC16",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 16 bit TOC-relative relocation without overflow.  */
-
-  /* R_PPC64_TOC16_LO	  48	   half16	 #lo (S + A - .TOC.)  */
-  HOWTO (R_PPC64_TOC16_LO,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_toc_reloc,	/* special_function */
-	 "R_PPC64_TOC16_LO",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 16 bit TOC-relative relocation, high 16 bits.  */
-
-  /* R_PPC64_TOC16_HI	  49	   half16	 #hi (S + A - .TOC.)  */
-  HOWTO (R_PPC64_TOC16_HI,	/* type */
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_toc_reloc,	/* special_function */
-	 "R_PPC64_TOC16_HI",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 16 bit TOC-relative relocation, high 16 bits, plus 1 if the
-     contents of the low 16 bits, treated as a signed number, is
-     negative.  */
-
-  /* R_PPC64_TOC16_HA	  50	   half16	 #ha (S + A - .TOC.)  */
-  HOWTO (R_PPC64_TOC16_HA,	/* type */
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_toc_ha_reloc, /* special_function */
-	 "R_PPC64_TOC16_HA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* 64-bit relocation; insert value of TOC base (.TOC.).  */
-
-  /* R_PPC64_TOC		  51	   doubleword64	 .TOC.  */
-  HOWTO (R_PPC64_TOC,		/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_toc64_reloc,	/* special_function */
-	 "R_PPC64_TOC",		/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 ONES (64),		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_GOT16, but also informs the link editor that the
-     value to relocate may (!) refer to a PLT entry which the link
-     editor (a) may replace with the symbol value.  If the link editor
-     is unable to fully resolve the symbol, it may (b) create a PLT
-     entry and store the address to the new PLT entry in the GOT.
-     This permits lazy resolution of function symbols at run time.
-     The link editor may also skip all of this and just (c) emit a
-     R_PPC64_GLOB_DAT to tie the symbol to the GOT entry.  */
-  /* FIXME: R_PPC64_PLTGOT16 not implemented.  */
-    HOWTO (R_PPC64_PLTGOT16,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_PLTGOT16",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_PLTGOT16, but without overflow.  */
-  /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
-  HOWTO (R_PPC64_PLTGOT16_LO,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_PLTGOT16_LO",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address.  */
-  /* FIXME: R_PPC64_PLTGOT16_HI not implemented.  */
-  HOWTO (R_PPC64_PLTGOT16_HI,	/* type */
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_PLTGOT16_HI",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_PLT_GOT16, but using bits 16-31 of the address, plus
-     1 if the contents of the low 16 bits, treated as a signed number,
-     is negative.  */
-  /* FIXME: R_PPC64_PLTGOT16_HA not implemented.  */
-  HOWTO (R_PPC64_PLTGOT16_HA,	/* type */
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_PLTGOT16_HA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_ADDR16, but for instructions with a DS field.  */
-  HOWTO (R_PPC64_ADDR16_DS,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_ADDR16_DS",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_ADDR16_LO, but for instructions with a DS field.  */
-  HOWTO (R_PPC64_ADDR16_LO_DS,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_ADDR16_LO_DS",/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_GOT16, but for instructions with a DS field.  */
-  HOWTO (R_PPC64_GOT16_DS,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT16_DS",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_GOT16_LO, but for instructions with a DS field.  */
-  HOWTO (R_PPC64_GOT16_LO_DS,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT16_LO_DS",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_PLT16_LO, but for instructions with a DS field.  */
-  HOWTO (R_PPC64_PLT16_LO_DS,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_PLT16_LO_DS",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_SECTOFF, but for instructions with a DS field.  */
-  HOWTO (R_PPC64_SECTOFF_DS,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_sectoff_reloc, /* special_function */
-	 "R_PPC64_SECTOFF_DS",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_SECTOFF_LO, but for instructions with a DS field.  */
-  HOWTO (R_PPC64_SECTOFF_LO_DS, /* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_sectoff_reloc, /* special_function */
-	 "R_PPC64_SECTOFF_LO_DS",/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_TOC16, but for instructions with a DS field.  */
-  HOWTO (R_PPC64_TOC16_DS,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_toc_reloc,	/* special_function */
-	 "R_PPC64_TOC16_DS",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_TOC16_LO, but for instructions with a DS field.  */
-  HOWTO (R_PPC64_TOC16_LO_DS,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_toc_reloc,	/* special_function */
-	 "R_PPC64_TOC16_LO_DS",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_PLTGOT16, but for instructions with a DS field.  */
-  /* FIXME: R_PPC64_PLTGOT16_DS not implemented.  */
-  HOWTO (R_PPC64_PLTGOT16_DS,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_PLTGOT16_DS",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_PLTGOT16_LO, but for instructions with a DS field.  */
-  /* FIXME: R_PPC64_PLTGOT16_LO not implemented.  */
-  HOWTO (R_PPC64_PLTGOT16_LO_DS,/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_PLTGOT16_LO_DS",/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Marker relocs for TLS.  */
-  HOWTO (R_PPC64_TLS,
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_TLS",		/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_PPC64_TLSGD,
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_TLSGD",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_PPC64_TLSLD,
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_TLSLD",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_PPC64_TOCSAVE,
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_TOCSAVE",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Computes the load module index of the load module that contains the
-     definition of its TLS sym.  */
-  HOWTO (R_PPC64_DTPMOD64,
-	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_DTPMOD64",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 ONES (64),		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Computes a dtv-relative displacement, the difference between the value
-     of sym+add and the base address of the thread-local storage block that
-     contains the definition of sym, minus 0x8000.  */
-  HOWTO (R_PPC64_DTPREL64,
-	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_DTPREL64",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 ONES (64),		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* A 16 bit dtprel reloc.  */
-  HOWTO (R_PPC64_DTPREL16,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_DTPREL16",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like DTPREL16, but no overflow.  */
-  HOWTO (R_PPC64_DTPREL16_LO,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_DTPREL16_LO",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like DTPREL16_LO, but next higher group of 16 bits.  */
-  HOWTO (R_PPC64_DTPREL16_HI,
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_DTPREL16_HI",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like DTPREL16_HI, but adjust for low 16 bits.  */
-  HOWTO (R_PPC64_DTPREL16_HA,
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_DTPREL16_HA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like DTPREL16_HI, but next higher group of 16 bits.  */
-  HOWTO (R_PPC64_DTPREL16_HIGHER,
-	 32,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_DTPREL16_HIGHER", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like DTPREL16_HIGHER, but adjust for low 16 bits.  */
-  HOWTO (R_PPC64_DTPREL16_HIGHERA,
-	 32,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_DTPREL16_HIGHERA", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like DTPREL16_HIGHER, but next higher group of 16 bits.  */
-  HOWTO (R_PPC64_DTPREL16_HIGHEST,
-	 48,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_DTPREL16_HIGHEST", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like DTPREL16_HIGHEST, but adjust for low 16 bits.  */
-  HOWTO (R_PPC64_DTPREL16_HIGHESTA,
-	 48,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_DTPREL16_HIGHESTA", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like DTPREL16, but for insns with a DS field.  */
-  HOWTO (R_PPC64_DTPREL16_DS,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_DTPREL16_DS",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like DTPREL16_DS, but no overflow.  */
-  HOWTO (R_PPC64_DTPREL16_LO_DS,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_DTPREL16_LO_DS", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Computes a tp-relative displacement, the difference between the value of
-     sym+add and the value of the thread pointer (r13).  */
-  HOWTO (R_PPC64_TPREL64,
-	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_TPREL64",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 ONES (64),		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* A 16 bit tprel reloc.  */
-  HOWTO (R_PPC64_TPREL16,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_TPREL16",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like TPREL16, but no overflow.  */
-  HOWTO (R_PPC64_TPREL16_LO,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_TPREL16_LO",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like TPREL16_LO, but next higher group of 16 bits.  */
-  HOWTO (R_PPC64_TPREL16_HI,
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_TPREL16_HI",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like TPREL16_HI, but adjust for low 16 bits.  */
-  HOWTO (R_PPC64_TPREL16_HA,
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_TPREL16_HA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like TPREL16_HI, but next higher group of 16 bits.  */
-  HOWTO (R_PPC64_TPREL16_HIGHER,
-	 32,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_TPREL16_HIGHER",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like TPREL16_HIGHER, but adjust for low 16 bits.  */
-  HOWTO (R_PPC64_TPREL16_HIGHERA,
-	 32,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_TPREL16_HIGHERA", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like TPREL16_HIGHER, but next higher group of 16 bits.  */
-  HOWTO (R_PPC64_TPREL16_HIGHEST,
-	 48,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_TPREL16_HIGHEST", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like TPREL16_HIGHEST, but adjust for low 16 bits.  */
-  HOWTO (R_PPC64_TPREL16_HIGHESTA,
-	 48,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_TPREL16_HIGHESTA", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like TPREL16, but for insns with a DS field.  */
-  HOWTO (R_PPC64_TPREL16_DS,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_TPREL16_DS",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like TPREL16_DS, but no overflow.  */
-  HOWTO (R_PPC64_TPREL16_LO_DS,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_TPREL16_LO_DS", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
-     with values (sym+add)@dtpmod and (sym+add)@dtprel, and computes the offset
-     to the first entry relative to the TOC base (r2).  */
-  HOWTO (R_PPC64_GOT_TLSGD16,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT_TLSGD16",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like GOT_TLSGD16, but no overflow.  */
-  HOWTO (R_PPC64_GOT_TLSGD16_LO,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT_TLSGD16_LO", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like GOT_TLSGD16_LO, but next higher group of 16 bits.  */
-  HOWTO (R_PPC64_GOT_TLSGD16_HI,
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT_TLSGD16_HI", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like GOT_TLSGD16_HI, but adjust for low 16 bits.  */
-  HOWTO (R_PPC64_GOT_TLSGD16_HA,
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT_TLSGD16_HA", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Allocates two contiguous entries in the GOT to hold a tls_index structure,
-     with values (sym+add)@dtpmod and zero, and computes the offset to the
-     first entry relative to the TOC base (r2).  */
-  HOWTO (R_PPC64_GOT_TLSLD16,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT_TLSLD16",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like GOT_TLSLD16, but no overflow.  */
-  HOWTO (R_PPC64_GOT_TLSLD16_LO,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT_TLSLD16_LO", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like GOT_TLSLD16_LO, but next higher group of 16 bits.  */
-  HOWTO (R_PPC64_GOT_TLSLD16_HI,
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT_TLSLD16_HI", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like GOT_TLSLD16_HI, but adjust for low 16 bits.  */
-  HOWTO (R_PPC64_GOT_TLSLD16_HA,
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT_TLSLD16_HA", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Allocates an entry in the GOT with value (sym+add)@dtprel, and computes
-     the offset to the entry relative to the TOC base (r2).  */
-  HOWTO (R_PPC64_GOT_DTPREL16_DS,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT_DTPREL16_DS", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like GOT_DTPREL16_DS, but no overflow.  */
-  HOWTO (R_PPC64_GOT_DTPREL16_LO_DS,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT_DTPREL16_LO_DS", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like GOT_DTPREL16_LO_DS, but next higher group of 16 bits.  */
-  HOWTO (R_PPC64_GOT_DTPREL16_HI,
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT_DTPREL16_HI", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like GOT_DTPREL16_HI, but adjust for low 16 bits.  */
-  HOWTO (R_PPC64_GOT_DTPREL16_HA,
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT_DTPREL16_HA", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Allocates an entry in the GOT with value (sym+add)@tprel, and computes the
-     offset to the entry relative to the TOC base (r2).  */
-  HOWTO (R_PPC64_GOT_TPREL16_DS,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT_TPREL16_DS", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like GOT_TPREL16_DS, but no overflow.  */
-  HOWTO (R_PPC64_GOT_TPREL16_LO_DS,
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT_TPREL16_LO_DS", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xfffc,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like GOT_TPREL16_LO_DS, but next higher group of 16 bits.  */
-  HOWTO (R_PPC64_GOT_TPREL16_HI,
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT_TPREL16_HI", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like GOT_TPREL16_HI, but adjust for low 16 bits.  */
-  HOWTO (R_PPC64_GOT_TPREL16_HA,
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_GOT_TPREL16_HA", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_PPC64_JMP_IREL,	/* type */
-	 0,			/* rightshift */
-	 0,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
-	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_JMP_IREL",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  HOWTO (R_PPC64_IRELATIVE,	/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_IRELATIVE",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 ONES (64),		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* A 16 bit relative relocation.  */
-  HOWTO (R_PPC64_REL16,		/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_REL16",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* A 16 bit relative relocation without overflow.  */
-  HOWTO (R_PPC64_REL16_LO,	/* type */
-	 0,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont,/* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_REL16_LO",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* The high order 16 bits of a relative address.  */
-  HOWTO (R_PPC64_REL16_HI,	/* type */
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_REL16_HI",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* The high order 16 bits of a relative address, plus 1 if the contents of
-     the low 16 bits, treated as a signed number, is negative.  */
-  HOWTO (R_PPC64_REL16_HA,	/* type */
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_ha_reloc,	/* special_function */
-	 "R_PPC64_REL16_HA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* Like R_PPC64_REL16_HA but for split field in addpcis.  */
-  HOWTO (R_PPC64_REL16DX_HA,	/* type */
-	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 TRUE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_ha_reloc,	/* special_function */
-	 "R_PPC64_REL16DX_HA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0x1fffc1,		/* dst_mask */
-	 TRUE),			/* pcrel_offset */
-
-  /* A split-field reloc for addpcis, non-relative (gas internal use only).  */
-  HOWTO (R_PPC64_16DX_HA,	/* type */
-	 16,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_signed, /* complain_on_overflow */
-	 ppc64_elf_ha_reloc,	/* special_function */
-	 "R_PPC64_16DX_HA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0x1fffc1,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_ADDR16_HI, but no overflow.  */
-  HOWTO (R_PPC64_ADDR16_HIGH,	/* type */
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_ADDR16_HIGH",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_ADDR16_HA, but no overflow.  */
-  HOWTO (R_PPC64_ADDR16_HIGHA,	/* type */
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_ha_reloc,	/* special_function */
-	 "R_PPC64_ADDR16_HIGHA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_DTPREL16_HI, but no overflow.  */
-  HOWTO (R_PPC64_DTPREL16_HIGH,
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_DTPREL16_HIGH", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_DTPREL16_HA, but no overflow.  */
-  HOWTO (R_PPC64_DTPREL16_HIGHA,
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_DTPREL16_HIGHA", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_TPREL16_HI, but no overflow.  */
-  HOWTO (R_PPC64_TPREL16_HIGH,
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_TPREL16_HIGH",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like R_PPC64_TPREL16_HA, but no overflow.  */
-  HOWTO (R_PPC64_TPREL16_HIGHA,
-	 16,			/* rightshift */
-	 1,			/* size (0 = byte, 1 = short, 2 = long) */
-	 16,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 ppc64_elf_unhandled_reloc, /* special_function */
-	 "R_PPC64_TPREL16_HIGHA",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0xffff,		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Marker reloc on ELFv2 large-model function entry.  */
-  HOWTO (R_PPC64_ENTRY,
-	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
-	 32,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_ENTRY",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* Like ADDR64, but use local entry point of function.  */
-  HOWTO (R_PPC64_ADDR64_LOCAL,	/* type */
-	 0,			/* rightshift */
-	 4,			/* size (0=byte, 1=short, 2=long, 4=64 bits) */
-	 64,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 bfd_elf_generic_reloc,	/* special_function */
-	 "R_PPC64_ADDR64_LOCAL", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 ONES (64),		/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* GNU extension to record C++ vtable hierarchy.  */
-  HOWTO (R_PPC64_GNU_VTINHERIT,	/* type */
-	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
-	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 NULL,			/* special_function */
-	 "R_PPC64_GNU_VTINHERIT", /* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-
-  /* GNU extension to record C++ vtable member usage.  */
-  HOWTO (R_PPC64_GNU_VTENTRY,	/* type */
-	 0,			/* rightshift */
-	 0,			/* size (0 = byte, 1 = short, 2 = long) */
-	 0,			/* bitsize */
-	 FALSE,			/* pc_relative */
-	 0,			/* bitpos */
-	 complain_overflow_dont, /* complain_on_overflow */
-	 NULL,			/* special_function */
-	 "R_PPC64_GNU_VTENTRY",	/* name */
-	 FALSE,			/* partial_inplace */
-	 0,			/* src_mask */
-	 0,			/* dst_mask */
-	 FALSE),		/* pcrel_offset */
-};
-
-
-/* Initialize the ppc64_elf_howto_table, so that linear accesses can
-   be done.  */
-
-static void
-ppc_howto_init (void)
-{
-  unsigned int i, type;
-
-  for (i = 0; i < ARRAY_SIZE (ppc64_elf_howto_raw); i++)
-    {
-      type = ppc64_elf_howto_raw[i].type;
-      BFD_ASSERT (type < ARRAY_SIZE (ppc64_elf_howto_table));
-      ppc64_elf_howto_table[type] = &ppc64_elf_howto_raw[i];
-    }
-}
-
-static reloc_howto_type *
-ppc64_elf_reloc_type_lookup (bfd *abfd ATTRIBUTE_UNUSED,
-			     bfd_reloc_code_real_type code)
-{
-  enum elf_ppc64_reloc_type r = R_PPC64_NONE;
-
-  if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
-    /* Initialize howto table if needed.  */
-    ppc_howto_init ();
-
-  switch (code)
-    {
-    default:
-      return NULL;
-
-    case BFD_RELOC_NONE:			r = R_PPC64_NONE;
-      break;
-    case BFD_RELOC_32:				r = R_PPC64_ADDR32;
-      break;
-    case BFD_RELOC_PPC_BA26:			r = R_PPC64_ADDR24;
-      break;
-    case BFD_RELOC_16:				r = R_PPC64_ADDR16;
-      break;
-    case BFD_RELOC_LO16:			r = R_PPC64_ADDR16_LO;
-      break;
-    case BFD_RELOC_HI16:			r = R_PPC64_ADDR16_HI;
-      break;
-    case BFD_RELOC_PPC64_ADDR16_HIGH:		r = R_PPC64_ADDR16_HIGH;
-      break;
-    case BFD_RELOC_HI16_S:			r = R_PPC64_ADDR16_HA;
-      break;
-    case BFD_RELOC_PPC64_ADDR16_HIGHA:		r = R_PPC64_ADDR16_HIGHA;
-      break;
-    case BFD_RELOC_PPC_BA16:			r = R_PPC64_ADDR14;
-      break;
-    case BFD_RELOC_PPC_BA16_BRTAKEN:		r = R_PPC64_ADDR14_BRTAKEN;
-      break;
-    case BFD_RELOC_PPC_BA16_BRNTAKEN:		r = R_PPC64_ADDR14_BRNTAKEN;
-      break;
-    case BFD_RELOC_PPC_B26:			r = R_PPC64_REL24;
-      break;
-    case BFD_RELOC_PPC_B16:			r = R_PPC64_REL14;
-      break;
-    case BFD_RELOC_PPC_B16_BRTAKEN:		r = R_PPC64_REL14_BRTAKEN;
-      break;
-    case BFD_RELOC_PPC_B16_BRNTAKEN:		r = R_PPC64_REL14_BRNTAKEN;
-      break;
-    case BFD_RELOC_16_GOTOFF:			r = R_PPC64_GOT16;
-      break;
-    case BFD_RELOC_LO16_GOTOFF:			r = R_PPC64_GOT16_LO;
-      break;
-    case BFD_RELOC_HI16_GOTOFF:			r = R_PPC64_GOT16_HI;
-      break;
-    case BFD_RELOC_HI16_S_GOTOFF:		r = R_PPC64_GOT16_HA;
-      break;
-    case BFD_RELOC_PPC_COPY:			r = R_PPC64_COPY;
-      break;
-    case BFD_RELOC_PPC_GLOB_DAT:		r = R_PPC64_GLOB_DAT;
-      break;
-    case BFD_RELOC_32_PCREL:			r = R_PPC64_REL32;
-      break;
-    case BFD_RELOC_32_PLTOFF:			r = R_PPC64_PLT32;
-      break;
-    case BFD_RELOC_32_PLT_PCREL:		r = R_PPC64_PLTREL32;
-      break;
-    case BFD_RELOC_LO16_PLTOFF:			r = R_PPC64_PLT16_LO;
-      break;
-    case BFD_RELOC_HI16_PLTOFF:			r = R_PPC64_PLT16_HI;
-      break;
-    case BFD_RELOC_HI16_S_PLTOFF:		r = R_PPC64_PLT16_HA;
-      break;
-    case BFD_RELOC_16_BASEREL:			r = R_PPC64_SECTOFF;
-      break;
-    case BFD_RELOC_LO16_BASEREL:		r = R_PPC64_SECTOFF_LO;
-      break;
-    case BFD_RELOC_HI16_BASEREL:		r = R_PPC64_SECTOFF_HI;
-      break;
-    case BFD_RELOC_HI16_S_BASEREL:		r = R_PPC64_SECTOFF_HA;
-      break;
-    case BFD_RELOC_CTOR:			r = R_PPC64_ADDR64;
-      break;
-    case BFD_RELOC_64:				r = R_PPC64_ADDR64;
-      break;
-    case BFD_RELOC_PPC64_HIGHER:		r = R_PPC64_ADDR16_HIGHER;
-      break;
-    case BFD_RELOC_PPC64_HIGHER_S:		r = R_PPC64_ADDR16_HIGHERA;
-      break;
-    case BFD_RELOC_PPC64_HIGHEST:		r = R_PPC64_ADDR16_HIGHEST;
-      break;
-    case BFD_RELOC_PPC64_HIGHEST_S:		r = R_PPC64_ADDR16_HIGHESTA;
-      break;
-    case BFD_RELOC_64_PCREL:			r = R_PPC64_REL64;
-      break;
-    case BFD_RELOC_64_PLTOFF:			r = R_PPC64_PLT64;
-      break;
-    case BFD_RELOC_64_PLT_PCREL:		r = R_PPC64_PLTREL64;
-      break;
-    case BFD_RELOC_PPC_TOC16:			r = R_PPC64_TOC16;
-      break;
-    case BFD_RELOC_PPC64_TOC16_LO:		r = R_PPC64_TOC16_LO;
-      break;
-    case BFD_RELOC_PPC64_TOC16_HI:		r = R_PPC64_TOC16_HI;
-      break;
-    case BFD_RELOC_PPC64_TOC16_HA:		r = R_PPC64_TOC16_HA;
-      break;
-    case BFD_RELOC_PPC64_TOC:			r = R_PPC64_TOC;
-      break;
-    case BFD_RELOC_PPC64_PLTGOT16:		r = R_PPC64_PLTGOT16;
-      break;
-    case BFD_RELOC_PPC64_PLTGOT16_LO:		r = R_PPC64_PLTGOT16_LO;
-      break;
-    case BFD_RELOC_PPC64_PLTGOT16_HI:		r = R_PPC64_PLTGOT16_HI;
-      break;
-    case BFD_RELOC_PPC64_PLTGOT16_HA:		r = R_PPC64_PLTGOT16_HA;
-      break;
-    case BFD_RELOC_PPC64_ADDR16_DS:		r = R_PPC64_ADDR16_DS;
-      break;
-    case BFD_RELOC_PPC64_ADDR16_LO_DS:		r = R_PPC64_ADDR16_LO_DS;
-      break;
-    case BFD_RELOC_PPC64_GOT16_DS:		r = R_PPC64_GOT16_DS;
-      break;
-    case BFD_RELOC_PPC64_GOT16_LO_DS:		r = R_PPC64_GOT16_LO_DS;
-      break;
-    case BFD_RELOC_PPC64_PLT16_LO_DS:		r = R_PPC64_PLT16_LO_DS;
-      break;
-    case BFD_RELOC_PPC64_SECTOFF_DS:		r = R_PPC64_SECTOFF_DS;
-      break;
-    case BFD_RELOC_PPC64_SECTOFF_LO_DS:		r = R_PPC64_SECTOFF_LO_DS;
-      break;
-    case BFD_RELOC_PPC64_TOC16_DS:		r = R_PPC64_TOC16_DS;
-      break;
-    case BFD_RELOC_PPC64_TOC16_LO_DS:		r = R_PPC64_TOC16_LO_DS;
-      break;
-    case BFD_RELOC_PPC64_PLTGOT16_DS:		r = R_PPC64_PLTGOT16_DS;
-      break;
-    case BFD_RELOC_PPC64_PLTGOT16_LO_DS:	r = R_PPC64_PLTGOT16_LO_DS;
-      break;
-    case BFD_RELOC_PPC_TLS:			r = R_PPC64_TLS;
-      break;
-    case BFD_RELOC_PPC_TLSGD:			r = R_PPC64_TLSGD;
-      break;
-    case BFD_RELOC_PPC_TLSLD:			r = R_PPC64_TLSLD;
-      break;
-    case BFD_RELOC_PPC_DTPMOD:			r = R_PPC64_DTPMOD64;
-      break;
-    case BFD_RELOC_PPC_TPREL16:			r = R_PPC64_TPREL16;
-      break;
-    case BFD_RELOC_PPC_TPREL16_LO:		r = R_PPC64_TPREL16_LO;
-      break;
-    case BFD_RELOC_PPC_TPREL16_HI:		r = R_PPC64_TPREL16_HI;
-      break;
-    case BFD_RELOC_PPC64_TPREL16_HIGH:		r = R_PPC64_TPREL16_HIGH;
-      break;
-    case BFD_RELOC_PPC_TPREL16_HA:		r = R_PPC64_TPREL16_HA;
-      break;
-    case BFD_RELOC_PPC64_TPREL16_HIGHA:		r = R_PPC64_TPREL16_HIGHA;
-      break;
-    case BFD_RELOC_PPC_TPREL:			r = R_PPC64_TPREL64;
-      break;
-    case BFD_RELOC_PPC_DTPREL16:		r = R_PPC64_DTPREL16;
-      break;
-    case BFD_RELOC_PPC_DTPREL16_LO:		r = R_PPC64_DTPREL16_LO;
-      break;
-    case BFD_RELOC_PPC_DTPREL16_HI:		r = R_PPC64_DTPREL16_HI;
-      break;
-    case BFD_RELOC_PPC64_DTPREL16_HIGH:		r = R_PPC64_DTPREL16_HIGH;
-      break;
-    case BFD_RELOC_PPC_DTPREL16_HA:		r = R_PPC64_DTPREL16_HA;
-      break;
-    case BFD_RELOC_PPC64_DTPREL16_HIGHA:	r = R_PPC64_DTPREL16_HIGHA;
-      break;
-    case BFD_RELOC_PPC_DTPREL:			r = R_PPC64_DTPREL64;
-      break;
-    case BFD_RELOC_PPC_GOT_TLSGD16:		r = R_PPC64_GOT_TLSGD16;
-      break;
-    case BFD_RELOC_PPC_GOT_TLSGD16_LO:		r = R_PPC64_GOT_TLSGD16_LO;
-      break;
-    case BFD_RELOC_PPC_GOT_TLSGD16_HI:		r = R_PPC64_GOT_TLSGD16_HI;
-      break;
-    case BFD_RELOC_PPC_GOT_TLSGD16_HA:		r = R_PPC64_GOT_TLSGD16_HA;
-      break;
-    case BFD_RELOC_PPC_GOT_TLSLD16:		r = R_PPC64_GOT_TLSLD16;
-      break;
-    case BFD_RELOC_PPC_GOT_TLSLD16_LO:		r = R_PPC64_GOT_TLSLD16_LO;
-      break;
-    case BFD_RELOC_PPC_GOT_TLSLD16_HI:		r = R_PPC64_GOT_TLSLD16_HI;
-      break;
-    case BFD_RELOC_PPC_GOT_TLSLD16_HA:		r = R_PPC64_GOT_TLSLD16_HA;
-      break;
-    case BFD_RELOC_PPC_GOT_TPREL16:		r = R_PPC64_GOT_TPREL16_DS;
-      break;
-    case BFD_RELOC_PPC_GOT_TPREL16_LO:		r = R_PPC64_GOT_TPREL16_LO_DS;
-      break;
-    case BFD_RELOC_PPC_GOT_TPREL16_HI:		r = R_PPC64_GOT_TPREL16_HI;
-      break;
-    case BFD_RELOC_PPC_GOT_TPREL16_HA:		r = R_PPC64_GOT_TPREL16_HA;
-      break;
-    case BFD_RELOC_PPC_GOT_DTPREL16:		r = R_PPC64_GOT_DTPREL16_DS;
-      break;
-    case BFD_RELOC_PPC_GOT_DTPREL16_LO:		r = R_PPC64_GOT_DTPREL16_LO_DS;
-      break;
-    case BFD_RELOC_PPC_GOT_DTPREL16_HI:		r = R_PPC64_GOT_DTPREL16_HI;
-      break;
-    case BFD_RELOC_PPC_GOT_DTPREL16_HA:		r = R_PPC64_GOT_DTPREL16_HA;
-      break;
-    case BFD_RELOC_PPC64_TPREL16_DS:		r = R_PPC64_TPREL16_DS;
-      break;
-    case BFD_RELOC_PPC64_TPREL16_LO_DS:		r = R_PPC64_TPREL16_LO_DS;
-      break;
-    case BFD_RELOC_PPC64_TPREL16_HIGHER:	r = R_PPC64_TPREL16_HIGHER;
-      break;
-    case BFD_RELOC_PPC64_TPREL16_HIGHERA:	r = R_PPC64_TPREL16_HIGHERA;
-      break;
-    case BFD_RELOC_PPC64_TPREL16_HIGHEST:	r = R_PPC64_TPREL16_HIGHEST;
-      break;
-    case BFD_RELOC_PPC64_TPREL16_HIGHESTA:	r = R_PPC64_TPREL16_HIGHESTA;
-      break;
-    case BFD_RELOC_PPC64_DTPREL16_DS:		r = R_PPC64_DTPREL16_DS;
-      break;
-    case BFD_RELOC_PPC64_DTPREL16_LO_DS:	r = R_PPC64_DTPREL16_LO_DS;
-      break;
-    case BFD_RELOC_PPC64_DTPREL16_HIGHER:	r = R_PPC64_DTPREL16_HIGHER;
-      break;
-    case BFD_RELOC_PPC64_DTPREL16_HIGHERA:	r = R_PPC64_DTPREL16_HIGHERA;
-      break;
-    case BFD_RELOC_PPC64_DTPREL16_HIGHEST:	r = R_PPC64_DTPREL16_HIGHEST;
-      break;
-    case BFD_RELOC_PPC64_DTPREL16_HIGHESTA:	r = R_PPC64_DTPREL16_HIGHESTA;
-      break;
-    case BFD_RELOC_16_PCREL:			r = R_PPC64_REL16;
-      break;
-    case BFD_RELOC_LO16_PCREL:			r = R_PPC64_REL16_LO;
-      break;
-    case BFD_RELOC_HI16_PCREL:			r = R_PPC64_REL16_HI;
-      break;
-    case BFD_RELOC_HI16_S_PCREL:		r = R_PPC64_REL16_HA;
-      break;
-    case BFD_RELOC_PPC_16DX_HA:			r = R_PPC64_16DX_HA;
-      break;
-    case BFD_RELOC_PPC_REL16DX_HA:		r = R_PPC64_REL16DX_HA;
-      break;
-    case BFD_RELOC_PPC64_ENTRY:			r = R_PPC64_ENTRY;
-      break;
-    case BFD_RELOC_PPC64_ADDR64_LOCAL:		r = R_PPC64_ADDR64_LOCAL;
-      break;
-    case BFD_RELOC_VTABLE_INHERIT:		r = R_PPC64_GNU_VTINHERIT;
-      break;
-    case BFD_RELOC_VTABLE_ENTRY:		r = R_PPC64_GNU_VTENTRY;
-      break;
-    }
-
-  return ppc64_elf_howto_table[r];
-};
-
-static reloc_howto_type *
-ppc64_elf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED,
-			     const char *r_name)
-{
-  unsigned int i;
-
-  for (i = 0; i < ARRAY_SIZE (ppc64_elf_howto_raw); i++)
-    if (ppc64_elf_howto_raw[i].name != NULL
-	&& strcasecmp (ppc64_elf_howto_raw[i].name, r_name) == 0)
-      return &ppc64_elf_howto_raw[i];
-
-  return NULL;
-}
-
-/* Set the howto pointer for a PowerPC ELF reloc.  */
-
-static void
-ppc64_elf_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED, arelent *cache_ptr,
-			 Elf_Internal_Rela *dst)
-{
-  unsigned int type;
-
-  /* Initialize howto table if needed.  */
-  if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
-    ppc_howto_init ();
-
-  type = ELF64_R_TYPE (dst->r_info);
-  if (type >= ARRAY_SIZE (ppc64_elf_howto_table))
-    {
-      /* xgettext:c-format */
-      _bfd_error_handler (_("%B: invalid relocation type %d"),
-			  abfd, (int) type);
-      type = R_PPC64_NONE;
-    }
-  cache_ptr->howto = ppc64_elf_howto_table[type];
-}
-
-/* Handle the R_PPC64_ADDR16_HA and similar relocs.  */
-
-static bfd_reloc_status_type
-ppc64_elf_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
-		    void *data, asection *input_section,
-		    bfd *output_bfd, char **error_message)
-{
-  enum elf_ppc64_reloc_type r_type;
-  long insn;
-  bfd_size_type octets;
-  bfd_vma value, field;
-
-  /* If this is a relocatable link (output_bfd test tells us), just
-     call the generic function.  Any adjustment will be done at final
-     link time.  */
-  if (output_bfd != NULL)
-    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
-				  input_section, output_bfd, error_message);
-
-  /* Adjust the addend for sign extension of the low 16 bits.
-     We won't actually be using the low 16 bits, so trashing them
-     doesn't matter.  */
-  reloc_entry->addend += 0x8000;
-  r_type = reloc_entry->howto->type;
-  if (r_type != R_PPC64_REL16DX_HA)
-    return bfd_reloc_continue;
-
-  value = 0;
-  if (!bfd_is_com_section (symbol->section))
-    value = symbol->value;
-  value += (reloc_entry->addend
-	    + symbol->section->output_offset
-	    + symbol->section->output_section->vma);
-  value -= (reloc_entry->address
-	    + input_section->output_offset
-	    + input_section->output_section->vma);
-  field = (bfd_signed_vma) value >> 16;
-
-  octets = reloc_entry->address * bfd_octets_per_byte (abfd);
-  insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
-  insn &= ~0x1fffc1;
-  insn |= (field & 0xffc1) | ((field & 0x3e) << 15);
-  bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
-  if (value + 0x80000000 > 0xffffffff)
-    return bfd_reloc_overflow;
-  return bfd_reloc_ok;
-}
-
-static bfd_reloc_status_type
-ppc64_elf_branch_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
-			void *data, asection *input_section,
-			bfd *output_bfd, char **error_message)
-{
-  if (output_bfd != NULL)
-    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
-				  input_section, output_bfd, error_message);
-
-  if (strcmp (symbol->section->name, ".opd") == 0
-      && (symbol->section->owner->flags & DYNAMIC) == 0)
-    {
-      bfd_vma dest = opd_entry_value (symbol->section,
-				      symbol->value + reloc_entry->addend,
-				      NULL, NULL, FALSE);
-      if (dest != (bfd_vma) -1)
-	reloc_entry->addend = dest - (symbol->value
-				      + symbol->section->output_section->vma
-				      + symbol->section->output_offset);
-    }
-  else
-    {
-      elf_symbol_type *elfsym = (elf_symbol_type *) symbol;
-
-      if (symbol->section->owner != abfd
-	  && symbol->section->owner != NULL
-	  && abiversion (symbol->section->owner) >= 2)
-	{
-	  unsigned int i;
-
-	  for (i = 0; i < symbol->section->owner->symcount; ++i)
-	    {
-	      asymbol *symdef = symbol->section->owner->outsymbols[i];
-
-	      if (strcmp (symdef->name, symbol->name) == 0)
-		{
-		  elfsym = (elf_symbol_type *) symdef;
-		  break;
-		}
-	    }
-	}
-      reloc_entry->addend
-	+= PPC64_LOCAL_ENTRY_OFFSET (elfsym->internal_elf_sym.st_other);
-    }
-  return bfd_reloc_continue;
-}
-
-static bfd_reloc_status_type
-ppc64_elf_brtaken_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
-			 void *data, asection *input_section,
-			 bfd *output_bfd, char **error_message)
-{
-  long insn;
-  enum elf_ppc64_reloc_type r_type;
-  bfd_size_type octets;
-  /* Assume 'at' branch hints.  */
-  bfd_boolean is_isa_v2 = TRUE;
-
-  /* If this is a relocatable link (output_bfd test tells us), just
-     call the generic function.  Any adjustment will be done at final
-     link time.  */
-  if (output_bfd != NULL)
-    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
-				  input_section, output_bfd, error_message);
-
-  octets = reloc_entry->address * bfd_octets_per_byte (abfd);
-  insn = bfd_get_32 (abfd, (bfd_byte *) data + octets);
-  insn &= ~(0x01 << 21);
-  r_type = reloc_entry->howto->type;
-  if (r_type == R_PPC64_ADDR14_BRTAKEN
-      || r_type == R_PPC64_REL14_BRTAKEN)
-    insn |= 0x01 << 21; /* 'y' or 't' bit, lowest bit of BO field.  */
-
-  if (is_isa_v2)
-    {
-      /* Set 'a' bit.  This is 0b00010 in BO field for branch
-	 on CR(BI) insns (BO == 001at or 011at), and 0b01000
-	 for branch on CTR insns (BO == 1a00t or 1a01t).  */
-      if ((insn & (0x14 << 21)) == (0x04 << 21))
-	insn |= 0x02 << 21;
-      else if ((insn & (0x14 << 21)) == (0x10 << 21))
-	insn |= 0x08 << 21;
-      else
-	goto out;
-    }
-  else
-    {
-      bfd_vma target = 0;
-      bfd_vma from;
-
-      if (!bfd_is_com_section (symbol->section))
-	target = symbol->value;
-      target += symbol->section->output_section->vma;
-      target += symbol->section->output_offset;
-      target += reloc_entry->addend;
-
-      from = (reloc_entry->address
-	      + input_section->output_offset
-	      + input_section->output_section->vma);
-
-      /* Invert 'y' bit if not the default.  */
-      if ((bfd_signed_vma) (target - from) < 0)
-	insn ^= 0x01 << 21;
-    }
-  bfd_put_32 (abfd, insn, (bfd_byte *) data + octets);
- out:
-  return ppc64_elf_branch_reloc (abfd, reloc_entry, symbol, data,
-				 input_section, output_bfd, error_message);
-}
-
-static bfd_reloc_status_type
-ppc64_elf_sectoff_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
-			 void *data, asection *input_section,
-			 bfd *output_bfd, char **error_message)
-{
-  /* If this is a relocatable link (output_bfd test tells us), just
-     call the generic function.  Any adjustment will be done at final
-     link time.  */
-  if (output_bfd != NULL)
-    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
-				  input_section, output_bfd, error_message);
-
-  /* Subtract the symbol section base address.  */
-  reloc_entry->addend -= symbol->section->output_section->vma;
-  return bfd_reloc_continue;
-}
-
-static bfd_reloc_status_type
-ppc64_elf_sectoff_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
-			    void *data, asection *input_section,
-			    bfd *output_bfd, char **error_message)
-{
-  /* If this is a relocatable link (output_bfd test tells us), just
-     call the generic function.  Any adjustment will be done at final
-     link time.  */
-  if (output_bfd != NULL)
-    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
-				  input_section, output_bfd, error_message);
-
-  /* Subtract the symbol section base address.  */
-  reloc_entry->addend -= symbol->section->output_section->vma;
-
-  /* Adjust the addend for sign extension of the low 16 bits.  */
-  reloc_entry->addend += 0x8000;
-  return bfd_reloc_continue;
-}
-
-static bfd_reloc_status_type
-ppc64_elf_toc_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
-		     void *data, asection *input_section,
-		     bfd *output_bfd, char **error_message)
-{
-  bfd_vma TOCstart;
-
-  /* If this is a relocatable link (output_bfd test tells us), just
-     call the generic function.  Any adjustment will be done at final
-     link time.  */
-  if (output_bfd != NULL)
-    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
-				  input_section, output_bfd, error_message);
-
-  TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
-  if (TOCstart == 0)
-    TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
-
-  /* Subtract the TOC base address.  */
-  reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
-  return bfd_reloc_continue;
-}
-
-static bfd_reloc_status_type
-ppc64_elf_toc_ha_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
-			void *data, asection *input_section,
-			bfd *output_bfd, char **error_message)
-{
-  bfd_vma TOCstart;
-
-  /* If this is a relocatable link (output_bfd test tells us), just
-     call the generic function.  Any adjustment will be done at final
-     link time.  */
-  if (output_bfd != NULL)
-    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
-				  input_section, output_bfd, error_message);
-
-  TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
-  if (TOCstart == 0)
-    TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
-
-  /* Subtract the TOC base address.  */
-  reloc_entry->addend -= TOCstart + TOC_BASE_OFF;
-
-  /* Adjust the addend for sign extension of the low 16 bits.  */
-  reloc_entry->addend += 0x8000;
-  return bfd_reloc_continue;
-}
-
-static bfd_reloc_status_type
-ppc64_elf_toc64_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
-		       void *data, asection *input_section,
-		       bfd *output_bfd, char **error_message)
-{
-  bfd_vma TOCstart;
-  bfd_size_type octets;
-
-  /* If this is a relocatable link (output_bfd test tells us), just
-     call the generic function.  Any adjustment will be done at final
-     link time.  */
-  if (output_bfd != NULL)
-    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
-				  input_section, output_bfd, error_message);
-
-  TOCstart = _bfd_get_gp_value (input_section->output_section->owner);
-  if (TOCstart == 0)
-    TOCstart = ppc64_elf_set_toc (NULL, input_section->output_section->owner);
-
-  octets = reloc_entry->address * bfd_octets_per_byte (abfd);
-  bfd_put_64 (abfd, TOCstart + TOC_BASE_OFF, (bfd_byte *) data + octets);
-  return bfd_reloc_ok;
-}
-
-static bfd_reloc_status_type
-ppc64_elf_unhandled_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
-			   void *data, asection *input_section,
-			   bfd *output_bfd, char **error_message)
-{
-  /* If this is a relocatable link (output_bfd test tells us), just
-     call the generic function.  Any adjustment will be done at final
-     link time.  */
-  if (output_bfd != NULL)
-    return bfd_elf_generic_reloc (abfd, reloc_entry, symbol, data,
-				  input_section, output_bfd, error_message);
-
-  if (error_message != NULL)
-    {
-      static char buf[60];
-      sprintf (buf, "generic linker can't handle %s",
-	       reloc_entry->howto->name);
-      *error_message = buf;
-    }
-  return bfd_reloc_dangerous;
-}
-
-/* Track GOT entries needed for a given symbol.  We might need more
-   than one got entry per symbol.  */
-struct got_entry
-{
-  struct got_entry *next;
-
-  /* The symbol addend that we'll be placing in the GOT.  */
-  bfd_vma addend;
-
-  /* Unlike other ELF targets, we use separate GOT entries for the same
-     symbol referenced from different input files.  This is to support
-     automatic multiple TOC/GOT sections, where the TOC base can vary
-     from one input file to another.  After partitioning into TOC groups
-     we merge entries within the group.
-
-     Point to the BFD owning this GOT entry.  */
-  bfd *owner;
-
-  /* Zero for non-tls entries, or TLS_TLS and one of TLS_GD, TLS_LD,
-     TLS_TPREL or TLS_DTPREL for tls entries.  */
-  unsigned char tls_type;
-
-  /* Non-zero if got.ent points to real entry.  */
-  unsigned char is_indirect;
-
-  /* Reference count until size_dynamic_sections, GOT offset thereafter.  */
-  union
-    {
-      bfd_signed_vma refcount;
-      bfd_vma offset;
-      struct got_entry *ent;
-    } got;
-};
-
-/* The same for PLT.  */
-struct plt_entry
-{
-  struct plt_entry *next;
-
-  bfd_vma addend;
-
-  union
-    {
-      bfd_signed_vma refcount;
-      bfd_vma offset;
-    } plt;
-};
-
-struct ppc64_elf_obj_tdata
-{
-  struct elf_obj_tdata elf;
-
-  /* Shortcuts to dynamic linker sections.  */
-  asection *got;
-  asection *relgot;
-
-  /* Used during garbage collection.  We attach global symbols defined
-     on removed .opd entries to this section so that the sym is removed.  */
-  asection *deleted_section;
-
-  /* TLS local dynamic got entry handling.  Support for multiple GOT
-     sections means we potentially need one of these for each input bfd.  */
-  struct got_entry tlsld_got;
-
-  union {
-    /* A copy of relocs before they are modified for --emit-relocs.  */
-    Elf_Internal_Rela *relocs;
-
-    /* Section contents.  */
-    bfd_byte *contents;
-  } opd;
-
-  /* Nonzero if this bfd has small toc/got relocs, ie. that expect
-     the reloc to be in the range -32768 to 32767.  */
-  unsigned int has_small_toc_reloc : 1;
-
-  /* Set if toc/got ha relocs detected not using r2, or lo reloc
-     instruction not one we handle.  */
-  unsigned int unexpected_toc_insn : 1;
-};
-
-#define ppc64_elf_tdata(bfd) \
-  ((struct ppc64_elf_obj_tdata *) (bfd)->tdata.any)
-
-#define ppc64_tlsld_got(bfd) \
-  (&ppc64_elf_tdata (bfd)->tlsld_got)
-
-#define is_ppc64_elf(bfd) \
-  (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
-   && elf_object_id (bfd) == PPC64_ELF_DATA)
-
-/* Override the generic function because we store some extras.  */
-
-static bfd_boolean
-ppc64_elf_mkobject (bfd *abfd)
-{
-  return bfd_elf_allocate_object (abfd, sizeof (struct ppc64_elf_obj_tdata),
-				  PPC64_ELF_DATA);
-}
-
-/* Fix bad default arch selected for a 64 bit input bfd when the
-   default is 32 bit.  Also select arch based on apuinfo.  */
-
-static bfd_boolean
-ppc64_elf_object_p (bfd *abfd)
-{
-  if (!abfd->arch_info->the_default)
-    return TRUE;
-
-  if (abfd->arch_info->bits_per_word == 32)
-    {
-      Elf_Internal_Ehdr *i_ehdr = elf_elfheader (abfd);
-
-      if (i_ehdr->e_ident[EI_CLASS] == ELFCLASS64)
-	{
-	  /* Relies on arch after 32 bit default being 64 bit default.  */
-	  abfd->arch_info = abfd->arch_info->next;
-	  BFD_ASSERT (abfd->arch_info->bits_per_word == 64);
-	}
-    }
-  return _bfd_elf_ppc_set_arch (abfd);
-}
-
-/* Support for core dump NOTE sections.  */
-
-static bfd_boolean
-ppc64_elf_grok_prstatus (bfd *abfd, Elf_Internal_Note *note)
-{
-  size_t offset, size;
-
-  if (note->descsz != 504)
-    return FALSE;
-
-  /* pr_cursig */
-  elf_tdata (abfd)->core->signal = bfd_get_16 (abfd, note->descdata + 12);
-
-  /* pr_pid */
-  elf_tdata (abfd)->core->lwpid = bfd_get_32 (abfd, note->descdata + 32);
-
-  /* pr_reg */
-  offset = 112;
-  size = 384;
-
-  /* Make a ".reg/999" section.  */
-  return _bfd_elfcore_make_pseudosection (abfd, ".reg",
-					  size, note->descpos + offset);
-}
-
-static bfd_boolean
-ppc64_elf_grok_psinfo (bfd *abfd, Elf_Internal_Note *note)
-{
-  if (note->descsz != 136)
-    return FALSE;
-
-  elf_tdata (abfd)->core->pid
-    = bfd_get_32 (abfd, note->descdata + 24);
-  elf_tdata (abfd)->core->program
-    = _bfd_elfcore_strndup (abfd, note->descdata + 40, 16);
-  elf_tdata (abfd)->core->command
-    = _bfd_elfcore_strndup (abfd, note->descdata + 56, 80);
-
-  return TRUE;
-}
-
-static char *
-ppc64_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type,
-			   ...)
-{
-  switch (note_type)
-    {
-    default:
-      return NULL;
-
-    case NT_PRPSINFO:
-      {
-	char data[136];
-	va_list ap;
-
-	va_start (ap, note_type);
-	memset (data, 0, sizeof (data));
-	strncpy (data + 40, va_arg (ap, const char *), 16);
-	strncpy (data + 56, va_arg (ap, const char *), 80);
-	va_end (ap);
-	return elfcore_write_note (abfd, buf, bufsiz,
-				   "CORE", note_type, data, sizeof (data));
-      }
-
-    case NT_PRSTATUS:
-      {
-	char data[504];
-	va_list ap;
-	long pid;
-	int cursig;
-	const void *greg;
-
-	va_start (ap, note_type);
-	memset (data, 0, 112);
-	pid = va_arg (ap, long);
-	bfd_put_32 (abfd, pid, data + 32);
-	cursig = va_arg (ap, int);
-	bfd_put_16 (abfd, cursig, data + 12);
-	greg = va_arg (ap, const void *);
-	memcpy (data + 112, greg, 384);
-	memset (data + 496, 0, 8);
-	va_end (ap);
-	return elfcore_write_note (abfd, buf, bufsiz,
-				   "CORE", note_type, data, sizeof (data));
-      }
-    }
-}
-
-/* Add extra PPC sections.  */
-
-static const struct bfd_elf_special_section ppc64_elf_special_sections[]=
-{
-  { STRING_COMMA_LEN (".plt"),    0, SHT_NOBITS,   0 },
-  { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
-  { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
-  { STRING_COMMA_LEN (".toc"),    0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
-  { STRING_COMMA_LEN (".toc1"),   0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE },
-  { STRING_COMMA_LEN (".tocbss"), 0, SHT_NOBITS,   SHF_ALLOC + SHF_WRITE },
-  { NULL,                     0,  0, 0,            0 }
-};
-
-enum _ppc64_sec_type {
-  sec_normal = 0,
-  sec_opd = 1,
-  sec_toc = 2
-};
-
-struct _ppc64_elf_section_data
-{
-  struct bfd_elf_section_data elf;
-
-  union
-  {
-    /* An array with one entry for each opd function descriptor,
-       and some spares since opd entries may be either 16 or 24 bytes.  */
-#define OPD_NDX(OFF) ((OFF) >> 4)
-    struct _opd_sec_data
-    {
-      /* Points to the function code section for local opd entries.  */
-      asection **func_sec;
-
-      /* After editing .opd, adjust references to opd local syms.  */
-      long *adjust;
-    } opd;
-
-    /* An array for toc sections, indexed by offset/8.  */
-    struct _toc_sec_data
-    {
-      /* Specifies the relocation symbol index used at a given toc offset.  */
-      unsigned *symndx;
-
-      /* And the relocation addend.  */
-      bfd_vma *add;
-    } toc;
-  } u;
-
-  enum _ppc64_sec_type sec_type:2;
-
-  /* Flag set when small branches are detected.  Used to
-     select suitable defaults for the stub group size.  */
-  unsigned int has_14bit_branch:1;
-};
-
-#define ppc64_elf_section_data(sec) \
-  ((struct _ppc64_elf_section_data *) elf_section_data (sec))
-
-static bfd_boolean
-ppc64_elf_new_section_hook (bfd *abfd, asection *sec)
-{
-  if (!sec->used_by_bfd)
-    {
-      struct _ppc64_elf_section_data *sdata;
-      bfd_size_type amt = sizeof (*sdata);
-
-      sdata = bfd_zalloc (abfd, amt);
-      if (sdata == NULL)
-	return FALSE;
-      sec->used_by_bfd = sdata;
-    }
-
-  return _bfd_elf_new_section_hook (abfd, sec);
-}
-
-static struct _opd_sec_data *
-get_opd_info (asection * sec)
-{
-  if (sec != NULL
-      && ppc64_elf_section_data (sec) != NULL
-      && ppc64_elf_section_data (sec)->sec_type == sec_opd)
-    return &ppc64_elf_section_data (sec)->u.opd;
-  return NULL;
-}
-
-/* Parameters for the qsort hook.  */
-static bfd_boolean synthetic_relocatable;
-static asection *synthetic_opd;
-
-/* qsort comparison function for ppc64_elf_get_synthetic_symtab.  */
-
-static int
-compare_symbols (const void *ap, const void *bp)
-{
-  const asymbol *a = * (const asymbol **) ap;
-  const asymbol *b = * (const asymbol **) bp;
-
-  /* Section symbols first.  */
-  if ((a->flags & BSF_SECTION_SYM) && !(b->flags & BSF_SECTION_SYM))
-    return -1;
-  if (!(a->flags & BSF_SECTION_SYM) && (b->flags & BSF_SECTION_SYM))
-    return 1;
-
-  /* then .opd symbols.  */
-  if (synthetic_opd != NULL)
-    {
-      if (strcmp (a->section->name, ".opd") == 0
-	  && strcmp (b->section->name, ".opd") != 0)
-	return -1;
-      if (strcmp (a->section->name, ".opd") != 0
-	  && strcmp (b->section->name, ".opd") == 0)
-	return 1;
-    }
-
-  /* then other code symbols.  */
-  if ((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
-      == (SEC_CODE | SEC_ALLOC)
-      && (b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
-	 != (SEC_CODE | SEC_ALLOC))
-    return -1;
-
-  if ((a->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
-      != (SEC_CODE | SEC_ALLOC)
-      && (b->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
-	 == (SEC_CODE | SEC_ALLOC))
-    return 1;
-
-  if (synthetic_relocatable)
-    {
-      if (a->section->id < b->section->id)
-	return -1;
-
-      if (a->section->id > b->section->id)
-	return 1;
-    }
-
-  if (a->value + a->section->vma < b->value + b->section->vma)
-    return -1;
-
-  if (a->value + a->section->vma > b->value + b->section->vma)
-    return 1;
-
-  /* For syms with the same value, prefer strong dynamic global function
-     syms over other syms.  */
-  if ((a->flags & BSF_GLOBAL) != 0 && (b->flags & BSF_GLOBAL) == 0)
-    return -1;
-
-  if ((a->flags & BSF_GLOBAL) == 0 && (b->flags & BSF_GLOBAL) != 0)
-    return 1;
-
-  if ((a->flags & BSF_FUNCTION) != 0 && (b->flags & BSF_FUNCTION) == 0)
-    return -1;
-
-  if ((a->flags & BSF_FUNCTION) == 0 && (b->flags & BSF_FUNCTION) != 0)
-    return 1;
-
-  if ((a->flags & BSF_WEAK) == 0 && (b->flags & BSF_WEAK) != 0)
-    return -1;
-
-  if ((a->flags & BSF_WEAK) != 0 && (b->flags & BSF_WEAK) == 0)
-    return 1;
-
-  if ((a->flags & BSF_DYNAMIC) != 0 && (b->flags & BSF_DYNAMIC) == 0)
-    return -1;
-
-  if ((a->flags & BSF_DYNAMIC) == 0 && (b->flags & BSF_DYNAMIC) != 0)
-    return 1;
-
-  return 0;
-}
-
-/* Search SYMS for a symbol of the given VALUE.  */
-
-static asymbol *
-sym_exists_at (asymbol **syms, long lo, long hi, unsigned int id, bfd_vma value)
-{
-  long mid;
-
-  if (id == (unsigned) -1)
-    {
-      while (lo < hi)
-	{
-	  mid = (lo + hi) >> 1;
-	  if (syms[mid]->value + syms[mid]->section->vma < value)
-	    lo = mid + 1;
-	  else if (syms[mid]->value + syms[mid]->section->vma > value)
-	    hi = mid;
-	  else
-	    return syms[mid];
-	}
-    }
-  else
-    {
-      while (lo < hi)
-	{
-	  mid = (lo + hi) >> 1;
-	  if (syms[mid]->section->id < id)
-	    lo = mid + 1;
-	  else if (syms[mid]->section->id > id)
-	    hi = mid;
-	  else if (syms[mid]->value < value)
-	    lo = mid + 1;
-	  else if (syms[mid]->value > value)
-	    hi = mid;
-	  else
-	    return syms[mid];
-	}
-    }
-  return NULL;
-}
-
-static bfd_boolean
-section_covers_vma (bfd *abfd ATTRIBUTE_UNUSED, asection *section, void *ptr)
-{
-  bfd_vma vma = *(bfd_vma *) ptr;
-  return ((section->flags & SEC_ALLOC) != 0
-	  && section->vma <= vma
-	  && vma < section->vma + section->size);
-}
-
-/* Create synthetic symbols, effectively restoring "dot-symbol" function
-   entry syms.  Also generate @plt symbols for the glink branch table.
-   Returns count of synthetic symbols in RET or -1 on error.  */
-
-static long
-ppc64_elf_get_synthetic_symtab (bfd *abfd,
-				long static_count, asymbol **static_syms,
-				long dyn_count, asymbol **dyn_syms,
-				asymbol **ret)
-{
-  asymbol *s;
-  long i;
-  long count;
-  char *names;
-  long symcount, codesecsym, codesecsymend, secsymend, opdsymend;
-  asection *opd = NULL;
-  bfd_boolean relocatable = (abfd->flags & (EXEC_P | DYNAMIC)) == 0;
-  asymbol **syms;
-  int abi = abiversion (abfd);
-
-  *ret = NULL;
-
-  if (abi < 2)
-    {
-      opd = bfd_get_section_by_name (abfd, ".opd");
-      if (opd == NULL && abi == 1)
-	return 0;
-    }
-
-  symcount = static_count;
-  if (!relocatable)
-    symcount += dyn_count;
-  if (symcount == 0)
-    return 0;
-
-  syms = bfd_malloc ((symcount + 1) * sizeof (*syms));
-  if (syms == NULL)
-    return -1;
-
-  if (!relocatable && static_count != 0 && dyn_count != 0)
-    {
-      /* Use both symbol tables.  */
-      memcpy (syms, static_syms, static_count * sizeof (*syms));
-      memcpy (syms + static_count, dyn_syms, (dyn_count + 1) * sizeof (*syms));
-    }
-  else if (!relocatable && static_count == 0)
-    memcpy (syms, dyn_syms, (symcount + 1) * sizeof (*syms));
-  else
-    memcpy (syms, static_syms, (symcount + 1) * sizeof (*syms));
-
-  synthetic_relocatable = relocatable;
-  synthetic_opd = opd;
-  qsort (syms, symcount, sizeof (*syms), compare_symbols);
-
-  if (!relocatable && symcount > 1)
-    {
-      long j;
-      /* Trim duplicate syms, since we may have merged the normal and
-	 dynamic symbols.  Actually, we only care about syms that have
-	 different values, so trim any with the same value.  */
-      for (i = 1, j = 1; i < symcount; ++i)
-	if (syms[i - 1]->value + syms[i - 1]->section->vma
-	    != syms[i]->value + syms[i]->section->vma)
-	  syms[j++] = syms[i];
-      symcount = j;
-    }
-
-  i = 0;
-  /* Note that here and in compare_symbols we can't compare opd and
-     sym->section directly.  With separate debug info files, the
-     symbols will be extracted from the debug file while abfd passed
-     to this function is the real binary.  */
-  if (opd != NULL && strcmp (syms[i]->section->name, ".opd") == 0)
-    ++i;
-  codesecsym = i;
-
-  for (; i < symcount; ++i)
-    if (((syms[i]->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
-	 != (SEC_CODE | SEC_ALLOC))
-	|| (syms[i]->flags & BSF_SECTION_SYM) == 0)
-      break;
-  codesecsymend = i;
-
-  for (; i < symcount; ++i)
-    if ((syms[i]->flags & BSF_SECTION_SYM) == 0)
-      break;
-  secsymend = i;
-
-  if (opd != NULL)
-    for (; i < symcount; ++i)
-      if (strcmp (syms[i]->section->name, ".opd") != 0)
-	break;
-  opdsymend = i;
-
-  for (; i < symcount; ++i)
-    if ((syms[i]->section->flags & (SEC_CODE | SEC_ALLOC | SEC_THREAD_LOCAL))
-	!= (SEC_CODE | SEC_ALLOC))
-      break;
-  symcount = i;
-
-  count = 0;
-
-  if (relocatable)
-    {
-      bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
-      arelent *r;
-      size_t size;
-      long relcount;
-
-      if (opdsymend == secsymend)
-	goto done;
-
-      slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
-      relcount = (opd->flags & SEC_RELOC) ? opd->reloc_count : 0;
-      if (relcount == 0)
-	goto done;
-
-      if (!(*slurp_relocs) (abfd, opd, static_syms, FALSE))
-	{
-	  count = -1;
-	  goto done;
-	}
-
-      size = 0;
-      for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
-	{
-	  asymbol *sym;
-
-	  while (r < opd->relocation + relcount
-		 && r->address < syms[i]->value + opd->vma)
-	    ++r;
-
-	  if (r == opd->relocation + relcount)
-	    break;
-
-	  if (r->address != syms[i]->value + opd->vma)
-	    continue;
-
-	  if (r->howto->type != R_PPC64_ADDR64)
-	    continue;
-
-	  sym = *r->sym_ptr_ptr;
-	  if (!sym_exists_at (syms, opdsymend, symcount,
-			      sym->section->id, sym->value + r->addend))
-	    {
-	      ++count;
-	      size += sizeof (asymbol);
-	      size += strlen (syms[i]->name) + 2;
-	    }
-	}
-
-      if (size == 0)
-	goto done;
-      s = *ret = bfd_malloc (size);
-      if (s == NULL)
-	{
-	  count = -1;
-	  goto done;
-	}
-
-      names = (char *) (s + count);
-
-      for (i = secsymend, r = opd->relocation; i < opdsymend; ++i)
-	{
-	  asymbol *sym;
-
-	  while (r < opd->relocation + relcount
-		 && r->address < syms[i]->value + opd->vma)
-	    ++r;
-
-	  if (r == opd->relocation + relcount)
-	    break;
-
-	  if (r->address != syms[i]->value + opd->vma)
-	    continue;
-
-	  if (r->howto->type != R_PPC64_ADDR64)
-	    continue;
-
-	  sym = *r->sym_ptr_ptr;
-	  if (!sym_exists_at (syms, opdsymend, symcount,
-			      sym->section->id, sym->value + r->addend))
-	    {
-	      size_t len;
-
-	      *s = *syms[i];
-	      s->flags |= BSF_SYNTHETIC;
-	      s->section = sym->section;
-	      s->value = sym->value + r->addend;
-	      s->name = names;
-	      *names++ = '.';
-	      len = strlen (syms[i]->name);
-	      memcpy (names, syms[i]->name, len + 1);
-	      names += len + 1;
-	      /* Have udata.p point back to the original symbol this
-		 synthetic symbol was derived from.  */
-	      s->udata.p = syms[i];
-	      s++;
-	    }
-	}
-    }
-  else
-    {
-      bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
-      bfd_byte *contents = NULL;
-      size_t size;
-      long plt_count = 0;
-      bfd_vma glink_vma = 0, resolv_vma = 0;
-      asection *dynamic, *glink = NULL, *relplt = NULL;
-      arelent *p;
-
-      if (opd != NULL && !bfd_malloc_and_get_section (abfd, opd, &contents))
-	{
-	free_contents_and_exit_err:
-	  count = -1;
-	free_contents_and_exit:
-	  if (contents)
-	    free (contents);
-	  goto done;
-	}
-
-      size = 0;
-      for (i = secsymend; i < opdsymend; ++i)
-	{
-	  bfd_vma ent;
-
-	  /* Ignore bogus symbols.  */
-	  if (syms[i]->value > opd->size - 8)
-	    continue;
-
-	  ent = bfd_get_64 (abfd, contents + syms[i]->value);
-	  if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
-	    {
-	      ++count;
-	      size += sizeof (asymbol);
-	      size += strlen (syms[i]->name) + 2;
-	    }
-	}
-
-      /* Get start of .glink stubs from DT_PPC64_GLINK.  */
-      if (dyn_count != 0
-	  && (dynamic = bfd_get_section_by_name (abfd, ".dynamic")) != NULL)
-	{
-	  bfd_byte *dynbuf, *extdyn, *extdynend;
-	  size_t extdynsize;
-	  void (*swap_dyn_in) (bfd *, const void *, Elf_Internal_Dyn *);
-
-	  if (!bfd_malloc_and_get_section (abfd, dynamic, &dynbuf))
-	    goto free_contents_and_exit_err;
-
-	  extdynsize = get_elf_backend_data (abfd)->s->sizeof_dyn;
-	  swap_dyn_in = get_elf_backend_data (abfd)->s->swap_dyn_in;
-
-	  extdyn = dynbuf;
-	  extdynend = extdyn + dynamic->size;
-	  for (; extdyn < extdynend; extdyn += extdynsize)
-	    {
-	      Elf_Internal_Dyn dyn;
-	      (*swap_dyn_in) (abfd, extdyn, &dyn);
-
-	      if (dyn.d_tag == DT_NULL)
-		break;
-
-	      if (dyn.d_tag == DT_PPC64_GLINK)
-		{
-		  /* The first glink stub starts at offset 32; see
-		     comment in ppc64_elf_finish_dynamic_sections. */
-		  glink_vma = dyn.d_un.d_val + GLINK_CALL_STUB_SIZE - 8 * 4;
-		  /* The .glink section usually does not survive the final
-		     link; search for the section (usually .text) where the
-		     glink stubs now reside.  */
-		  glink = bfd_sections_find_if (abfd, section_covers_vma,
-						&glink_vma);
-		  break;
-		}
-	    }
-
-	  free (dynbuf);
-	}
-
-      if (glink != NULL)
-	{
-	  /* Determine __glink trampoline by reading the relative branch
-	     from the first glink stub.  */
-	  bfd_byte buf[4];
-	  unsigned int off = 0;
-
-	  while (bfd_get_section_contents (abfd, glink, buf,
-					   glink_vma + off - glink->vma, 4))
-	    {
-	      unsigned int insn = bfd_get_32 (abfd, buf);
-	      insn ^= B_DOT;
-	      if ((insn & ~0x3fffffc) == 0)
-		{
-		  resolv_vma = glink_vma + off + (insn ^ 0x2000000) - 0x2000000;
-		  break;
-		}
-	      off += 4;
-	      if (off > 4)
-		break;
-	    }
-
-	  if (resolv_vma)
-	    size += sizeof (asymbol) + sizeof ("__glink_PLTresolve");
-
-	  relplt = bfd_get_section_by_name (abfd, ".rela.plt");
-	  if (relplt != NULL)
-	    {
-	      slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
-	      if (! (*slurp_relocs) (abfd, relplt, dyn_syms, TRUE))
-		goto free_contents_and_exit_err;
-
-	      plt_count = relplt->size / sizeof (Elf64_External_Rela);
-	      size += plt_count * sizeof (asymbol);
-
-	      p = relplt->relocation;
-	      for (i = 0; i < plt_count; i++, p++)
-		{
-		  size += strlen ((*p->sym_ptr_ptr)->name) + sizeof ("@plt");
-		  if (p->addend != 0)
-		    size += sizeof ("+0x") - 1 + 16;
-		}
-	    }
-	}
-
-      if (size == 0)
-	goto free_contents_and_exit;
-      s = *ret = bfd_malloc (size);
-      if (s == NULL)
-	goto free_contents_and_exit_err;
-
-      names = (char *) (s + count + plt_count + (resolv_vma != 0));
-
-      for (i = secsymend; i < opdsymend; ++i)
-	{
-	  bfd_vma ent;
-
-	  if (syms[i]->value > opd->size - 8)
-	    continue;
-
-	  ent = bfd_get_64 (abfd, contents + syms[i]->value);
-	  if (!sym_exists_at (syms, opdsymend, symcount, -1, ent))
-	    {
-	      long lo, hi;
-	      size_t len;
-	      asection *sec = abfd->sections;
-
-	      *s = *syms[i];
-	      lo = codesecsym;
-	      hi = codesecsymend;
-	      while (lo < hi)
-		{
-		  long mid = (lo + hi) >> 1;
-		  if (syms[mid]->section->vma < ent)
-		    lo = mid + 1;
-		  else if (syms[mid]->section->vma > ent)
-		    hi = mid;
-		  else
-		    {
-		      sec = syms[mid]->section;
-		      break;
-		    }
-		}
-
-	      if (lo >= hi && lo > codesecsym)
-		sec = syms[lo - 1]->section;
-
-	      for (; sec != NULL; sec = sec->next)
-		{
-		  if (sec->vma > ent)
-		    break;
-		  /* SEC_LOAD may not be set if SEC is from a separate debug
-		     info file.  */
-		  if ((sec->flags & SEC_ALLOC) == 0)
-		    break;
-		  if ((sec->flags & SEC_CODE) != 0)
-		    s->section = sec;
-		}
-	      s->flags |= BSF_SYNTHETIC;
-	      s->value = ent - s->section->vma;
-	      s->name = names;
-	      *names++ = '.';
-	      len = strlen (syms[i]->name);
-	      memcpy (names, syms[i]->name, len + 1);
-	      names += len + 1;
-	      /* Have udata.p point back to the original symbol this
-		 synthetic symbol was derived from.  */
-	      s->udata.p = syms[i];
-	      s++;
-	    }
-	}
-      free (contents);
-
-      if (glink != NULL && relplt != NULL)
-	{
-	  if (resolv_vma)
-	    {
-	      /* Add a symbol for the main glink trampoline.  */
-	      memset (s, 0, sizeof *s);
-	      s->the_bfd = abfd;
-	      s->flags = BSF_GLOBAL | BSF_SYNTHETIC;
-	      s->section = glink;
-	      s->value = resolv_vma - glink->vma;
-	      s->name = names;
-	      memcpy (names, "__glink_PLTresolve", sizeof ("__glink_PLTresolve"));
-	      names += sizeof ("__glink_PLTresolve");
-	      s++;
-	      count++;
-	    }
-
-	  /* FIXME: It would be very much nicer to put sym@plt on the
-	     stub rather than on the glink branch table entry.  The
-	     objdump disassembler would then use a sensible symbol
-	     name on plt calls.  The difficulty in doing so is
-	     a) finding the stubs, and,
-	     b) matching stubs against plt entries, and,
-	     c) there can be multiple stubs for a given plt entry.
-
-	     Solving (a) could be done by code scanning, but older
-	     ppc64 binaries used different stubs to current code.
-	     (b) is the tricky one since you need to known the toc
-	     pointer for at least one function that uses a pic stub to
-	     be able to calculate the plt address referenced.
-	     (c) means gdb would need to set multiple breakpoints (or
-	     find the glink branch itself) when setting breakpoints
-	     for pending shared library loads.  */
-	  p = relplt->relocation;
-	  for (i = 0; i < plt_count; i++, p++)
-	    {
-	      size_t len;
-
-	      *s = **p->sym_ptr_ptr;
-	      /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
-		 we are defining a symbol, ensure one of them is set.  */
-	      if ((s->flags & BSF_LOCAL) == 0)
-		s->flags |= BSF_GLOBAL;
-	      s->flags |= BSF_SYNTHETIC;
-	      s->section = glink;
-	      s->value = glink_vma - glink->vma;
-	      s->name = names;
-	      s->udata.p = NULL;
-	      len = strlen ((*p->sym_ptr_ptr)->name);
-	      memcpy (names, (*p->sym_ptr_ptr)->name, len);
-	      names += len;
-	      if (p->addend != 0)
-		{
-		  memcpy (names, "+0x", sizeof ("+0x") - 1);
-		  names += sizeof ("+0x") - 1;
-		  bfd_sprintf_vma (abfd, names, p->addend);
-		  names += strlen (names);
-		}
-	      memcpy (names, "@plt", sizeof ("@plt"));
-	      names += sizeof ("@plt");
-	      s++;
-	      if (abi < 2)
-		{
-		  glink_vma += 8;
-		  if (i >= 0x8000)
-		    glink_vma += 4;
-		}
-	      else
-		glink_vma += 4;
-	    }
-	  count += plt_count;
-	}
-    }
-
- done:
-  free (syms);
-  return count;
-}
-
-/* The following functions are specific to the ELF linker, while
-   functions above are used generally.  Those named ppc64_elf_* are
-   called by the main ELF linker code.  They appear in this file more
-   or less in the order in which they are called.  eg.
-   ppc64_elf_check_relocs is called early in the link process,
-   ppc64_elf_finish_dynamic_sections is one of the last functions
-   called.
-
-   PowerPC64-ELF uses a similar scheme to PowerPC64-XCOFF in that
-   functions have both a function code symbol and a function descriptor
-   symbol.  A call to foo in a relocatable object file looks like:
-
-   .		.text
-   .	x:
-   .		bl	.foo
-   .		nop
-
-   The function definition in another object file might be:
-
-   .		.section .opd
-   .	foo:	.quad	.foo
-   .		.quad	.TOC.@tocbase
-   .		.quad	0
-   .
-   .		.text
-   .	.foo:	blr
-
-   When the linker resolves the call during a static link, the branch
-   unsurprisingly just goes to .foo and the .opd information is unused.
-   If the function definition is in a shared library, things are a little
-   different:  The call goes via a plt call stub, the opd information gets
-   copied to the plt, and the linker patches the nop.
-
-   .	x:
-   .		bl	.foo_stub
-   .		ld	2,40(1)
-   .
-   .
-   .	.foo_stub:
-   .		std	2,40(1)			# in practice, the call stub
-   .		addis	11,2,Lfoo@toc@ha	# is slightly optimized, but
-   .		addi	11,11,Lfoo@toc@l	# this is the general idea
-   .		ld	12,0(11)
-   .		ld	2,8(11)
-   .		mtctr	12
-   .		ld	11,16(11)
-   .		bctr
-   .
-   .		.section .plt
-   .	Lfoo:	reloc (R_PPC64_JMP_SLOT, foo)
-
-   The "reloc ()" notation is supposed to indicate that the linker emits
-   an R_PPC64_JMP_SLOT reloc against foo.  The dynamic linker does the opd
-   copying.
-
-   What are the difficulties here?  Well, firstly, the relocations
-   examined by the linker in check_relocs are against the function code
-   sym .foo, while the dynamic relocation in the plt is emitted against
-   the function descriptor symbol, foo.  Somewhere along the line, we need
-   to carefully copy dynamic link information from one symbol to the other.
-   Secondly, the generic part of the elf linker will make .foo a dynamic
-   symbol as is normal for most other backends.  We need foo dynamic
-   instead, at least for an application final link.  However, when
-   creating a shared library containing foo, we need to have both symbols
-   dynamic so that references to .foo are satisfied during the early
-   stages of linking.  Otherwise the linker might decide to pull in a
-   definition from some other object, eg. a static library.
-
-   Update: As of August 2004, we support a new convention.  Function
-   calls may use the function descriptor symbol, ie. "bl foo".  This
-   behaves exactly as "bl .foo".  */
-
-/* Of those relocs that might be copied as dynamic relocs, this function
-   selects those that must be copied when linking a shared library,
-   even when the symbol is local.  */
-
-static int
-must_be_dyn_reloc (struct bfd_link_info *info,
-		   enum elf_ppc64_reloc_type r_type)
-{
-  switch (r_type)
-    {
-    default:
-      return 1;
-
-    case R_PPC64_REL32:
-    case R_PPC64_REL64:
-    case R_PPC64_REL30:
-      return 0;
-
-    case R_PPC64_TPREL16:
-    case R_PPC64_TPREL16_LO:
-    case R_PPC64_TPREL16_HI:
-    case R_PPC64_TPREL16_HA:
-    case R_PPC64_TPREL16_DS:
-    case R_PPC64_TPREL16_LO_DS:
-    case R_PPC64_TPREL16_HIGH:
-    case R_PPC64_TPREL16_HIGHA:
-    case R_PPC64_TPREL16_HIGHER:
-    case R_PPC64_TPREL16_HIGHERA:
-    case R_PPC64_TPREL16_HIGHEST:
-    case R_PPC64_TPREL16_HIGHESTA:
-    case R_PPC64_TPREL64:
-      return !bfd_link_executable (info);
-    }
-}
-
-/* If ELIMINATE_COPY_RELOCS is non-zero, the linker will try to avoid
-   copying dynamic variables from a shared lib into an app's dynbss
-   section, and instead use a dynamic relocation to point into the
-   shared lib.  With code that gcc generates, it's vital that this be
-   enabled;  In the PowerPC64 ABI, the address of a function is actually
-   the address of a function descriptor, which resides in the .opd
-   section.  gcc uses the descriptor directly rather than going via the
-   GOT as some other ABI's do, which means that initialized function
-   pointers must reference the descriptor.  Thus, a function pointer
-   initialized to the address of a function in a shared library will
-   either require a copy reloc, or a dynamic reloc.  Using a copy reloc
-   redefines the function descriptor symbol to point to the copy.  This
-   presents a problem as a plt entry for that function is also
-   initialized from the function descriptor symbol and the copy reloc
-   may not be initialized first.  */
-#define ELIMINATE_COPY_RELOCS 1
-
-/* Section name for stubs is the associated section name plus this
-   string.  */
-#define STUB_SUFFIX ".stub"
-
-/* Linker stubs.
-   ppc_stub_long_branch:
-   Used when a 14 bit branch (or even a 24 bit branch) can't reach its
-   destination, but a 24 bit branch in a stub section will reach.
-   .	b	dest
-
-   ppc_stub_plt_branch:
-   Similar to the above, but a 24 bit branch in the stub section won't
-   reach its destination.
-   .	addis	%r11,%r2,xxx@toc@ha
-   .	ld	%r12,xxx@toc@l(%r11)
-   .	mtctr	%r12
-   .	bctr
-
-   ppc_stub_plt_call:
-   Used to call a function in a shared library.  If it so happens that
-   the plt entry referenced crosses a 64k boundary, then an extra
-   "addi %r11,%r11,xxx@toc@l" will be inserted before the "mtctr".
-   .	std	%r2,40(%r1)
-   .	addis	%r11,%r2,xxx@toc@ha
-   .	ld	%r12,xxx+0@toc@l(%r11)
-   .	mtctr	%r12
-   .	ld	%r2,xxx+8@toc@l(%r11)
-   .	ld	%r11,xxx+16@toc@l(%r11)
-   .	bctr
-
-   ppc_stub_long_branch and ppc_stub_plt_branch may also have additional
-   code to adjust the value and save r2 to support multiple toc sections.
-   A ppc_stub_long_branch with an r2 offset looks like:
-   .	std	%r2,40(%r1)
-   .	addis	%r2,%r2,off@ha
-   .	addi	%r2,%r2,off@l
-   .	b	dest
-
-   A ppc_stub_plt_branch with an r2 offset looks like:
-   .	std	%r2,40(%r1)
-   .	addis	%r11,%r2,xxx@toc@ha
-   .	ld	%r12,xxx@toc@l(%r11)
-   .	addis	%r2,%r2,off@ha
-   .	addi	%r2,%r2,off@l
-   .	mtctr	%r12
-   .	bctr
-
-   In cases where the "addis" instruction would add zero, the "addis" is
-   omitted and following instructions modified slightly in some cases.
-*/
-
-enum ppc_stub_type {
-  ppc_stub_none,
-  ppc_stub_long_branch,
-  ppc_stub_long_branch_r2off,
-  ppc_stub_plt_branch,
-  ppc_stub_plt_branch_r2off,
-  ppc_stub_plt_call,
-  ppc_stub_plt_call_r2save,
-  ppc_stub_global_entry,
-  ppc_stub_save_res
-};
-
-/* Information on stub grouping.  */
-struct map_stub
-{
-  /* The stub section.  */
-  asection *stub_sec;
-  /* This is the section to which stubs in the group will be attached.  */
-  asection *link_sec;
-  /* Next group.  */
-  struct map_stub *next;
-  /* Whether to emit a copy of register save/restore functions in this
-     group.  */
-  int needs_save_res;
-};
-
-struct ppc_stub_hash_entry {
-
-  /* Base hash table entry structure.  */
-  struct bfd_hash_entry root;
-
-  enum ppc_stub_type stub_type;
-
-  /* Group information.  */
-  struct map_stub *group;
-
-  /* Offset within stub_sec of the beginning of this stub.  */
-  bfd_vma stub_offset;
-
-  /* Given the symbol's value and its section we can determine its final
-     value when building the stubs (so the stub knows where to jump.  */
-  bfd_vma target_value;
-  asection *target_section;
-
-  /* The symbol table entry, if any, that this was derived from.  */
-  struct ppc_link_hash_entry *h;
-  struct plt_entry *plt_ent;
-
-  /* Symbol st_other.  */
-  unsigned char other;
-};
-
-struct ppc_branch_hash_entry {
-
-  /* Base hash table entry structure.  */
-  struct bfd_hash_entry root;
-
-  /* Offset within branch lookup table.  */
-  unsigned int offset;
-
-  /* Generation marker.  */
-  unsigned int iter;
-};
-
-/* Used to track dynamic relocations for local symbols.  */
-struct ppc_dyn_relocs
-{
-  struct ppc_dyn_relocs *next;
-
-  /* The input section of the reloc.  */
-  asection *sec;
-
-  /* Total number of relocs copied for the input section.  */
-  unsigned int count : 31;
-
-  /* Whether this entry is for STT_GNU_IFUNC symbols.  */
-  unsigned int ifunc : 1;
-};
-
-struct ppc_link_hash_entry
-{
-  struct elf_link_hash_entry elf;
-
-  union {
-    /* A pointer to the most recently used stub hash entry against this
-       symbol.  */
-    struct ppc_stub_hash_entry *stub_cache;
-
-    /* A pointer to the next symbol starting with a '.'  */
-    struct ppc_link_hash_entry *next_dot_sym;
-  } u;
-
-  /* Track dynamic relocs copied for this symbol.  */
-  struct elf_dyn_relocs *dyn_relocs;
-
-  /* Chain of aliases referring to a weakdef.  */
-  struct ppc_link_hash_entry *weakref;
-
-  /* Link between function code and descriptor symbols.  */
-  struct ppc_link_hash_entry *oh;
-
-  /* Flag function code and descriptor symbols.  */
-  unsigned int is_func:1;
-  unsigned int is_func_descriptor:1;
-  unsigned int fake:1;
-
-  /* Whether global opd/toc sym has been adjusted or not.
-     After ppc64_elf_edit_opd/ppc64_elf_edit_toc has run, this flag
-     should be set for all globals defined in any opd/toc section.  */
-  unsigned int adjust_done:1;
-
-  /* Set if this is an out-of-line register save/restore function,
-     with non-standard calling convention.  */
-  unsigned int save_res:1;
-
-  /* Contexts in which symbol is used in the GOT (or TOC).
-     TLS_GD .. TLS_EXPLICIT bits are or'd into the mask as the
-     corresponding relocs are encountered during check_relocs.
-     tls_optimize clears TLS_GD .. TLS_TPREL when optimizing to
-     indicate the corresponding GOT entry type is not needed.
-     tls_optimize may also set TLS_TPRELGD when a GD reloc turns into
-     a TPREL one.  We use a separate flag rather than setting TPREL
-     just for convenience in distinguishing the two cases.  */
-#define TLS_GD		 1	/* GD reloc. */
-#define TLS_LD		 2	/* LD reloc. */
-#define TLS_TPREL	 4	/* TPREL reloc, => IE. */
-#define TLS_DTPREL	 8	/* DTPREL reloc, => LD. */
-#define TLS_TLS		16	/* Any TLS reloc.  */
-#define TLS_EXPLICIT	32	/* Marks TOC section TLS relocs. */
-#define TLS_TPRELGD	64	/* TPREL reloc resulting from GD->IE. */
-#define PLT_IFUNC      128	/* STT_GNU_IFUNC.  */
-  unsigned char tls_mask;
-};
-
-/* ppc64 ELF linker hash table.  */
-
-struct ppc_link_hash_table
-{
-  struct elf_link_hash_table elf;
-
-  /* The stub hash table.  */
-  struct bfd_hash_table stub_hash_table;
-
-  /* Another hash table for plt_branch stubs.  */
-  struct bfd_hash_table branch_hash_table;
-
-  /* Hash table for function prologue tocsave.  */
-  htab_t tocsave_htab;
-
-  /* Various options and other info passed from the linker.  */
-  struct ppc64_elf_params *params;
-
-  /* The size of sec_info below.  */
-  unsigned int sec_info_arr_size;
-
-  /* Per-section array of extra section info.  Done this way rather
-     than as part of ppc64_elf_section_data so we have the info for
-     non-ppc64 sections.  */
-  struct
-  {
-    /* Along with elf_gp, specifies the TOC pointer used by this section.  */
-    bfd_vma toc_off;
-
-    union
-    {
-      /* The section group that this section belongs to.  */
-      struct map_stub *group;
-      /* A temp section list pointer.  */
-      asection *list;
-    } u;
-  } *sec_info;
-
-  /* Linked list of groups.  */
-  struct map_stub *group;
-
-  /* Temp used when calculating TOC pointers.  */
-  bfd_vma toc_curr;
-  bfd *toc_bfd;
-  asection *toc_first_sec;
-
-  /* Used when adding symbols.  */
-  struct ppc_link_hash_entry *dot_syms;
-
-  /* Shortcuts to get to dynamic linker sections.  */
-  asection *glink;
-  asection *sfpr;
-  asection *brlt;
-  asection *relbrlt;
-  asection *glink_eh_frame;
-
-  /* Shortcut to .__tls_get_addr and __tls_get_addr.  */
-  struct ppc_link_hash_entry *tls_get_addr;
-  struct ppc_link_hash_entry *tls_get_addr_fd;
-
-  /* The size of reliplt used by got entry relocs.  */
-  bfd_size_type got_reli_size;
-
-  /* Statistics.  */
-  unsigned long stub_count[ppc_stub_global_entry];
-
-  /* Number of stubs against global syms.  */
-  unsigned long stub_globals;
-
-  /* Set if we're linking code with function descriptors.  */
-  unsigned int opd_abi:1;
-
-  /* Support for multiple toc sections.  */
-  unsigned int do_multi_toc:1;
-  unsigned int multi_toc_needed:1;
-  unsigned int second_toc_pass:1;
-  unsigned int do_toc_opt:1;
-
-  /* Set on error.  */
-  unsigned int stub_error:1;
-
-  /* Whether func_desc_adjust needs to be run over symbols.  */
-  unsigned int need_func_desc_adj:1;
-
-  /* Incremented every time we size stubs.  */
-  unsigned int stub_iteration;
-
-  /* Small local sym cache.  */
-  struct sym_cache sym_cache;
-};
-
-/* Rename some of the generic section flags to better document how they
-   are used here.  */
-
-/* Nonzero if this section has TLS related relocations.  */
-#define has_tls_reloc sec_flg0
-
-/* Nonzero if this section has a call to __tls_get_addr.  */
-#define has_tls_get_addr_call sec_flg1
-
-/* Nonzero if this section has any toc or got relocs.  */
-#define has_toc_reloc sec_flg2
-
-/* Nonzero if this section has a call to another section that uses
-   the toc or got.  */
-#define makes_toc_func_call sec_flg3
-
-/* Recursion protection when determining above flag.  */
-#define call_check_in_progress sec_flg4
-#define call_check_done sec_flg5
-
-/* Get the ppc64 ELF linker hash table from a link_info structure.  */
-
-#define ppc_hash_table(p) \
-  (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
-  == PPC64_ELF_DATA ? ((struct ppc_link_hash_table *) ((p)->hash)) : NULL)
-
-#define ppc_stub_hash_lookup(table, string, create, copy) \
-  ((struct ppc_stub_hash_entry *) \
-   bfd_hash_lookup ((table), (string), (create), (copy)))
-
-#define ppc_branch_hash_lookup(table, string, create, copy) \
-  ((struct ppc_branch_hash_entry *) \
-   bfd_hash_lookup ((table), (string), (create), (copy)))
-
-/* Create an entry in the stub hash table.  */
-
-static struct bfd_hash_entry *
-stub_hash_newfunc (struct bfd_hash_entry *entry,
-		   struct bfd_hash_table *table,
-		   const char *string)
-{
-  /* Allocate the structure if it has not already been allocated by a
-     subclass.  */
-  if (entry == NULL)
-    {
-      entry = bfd_hash_allocate (table, sizeof (struct ppc_stub_hash_entry));
-      if (entry == NULL)
-	return entry;
-    }
-
-  /* Call the allocation method of the superclass.  */
-  entry = bfd_hash_newfunc (entry, table, string);
-  if (entry != NULL)
-    {
-      struct ppc_stub_hash_entry *eh;
-
-      /* Initialize the local fields.  */
-      eh = (struct ppc_stub_hash_entry *) entry;
-      eh->stub_type = ppc_stub_none;
-      eh->group = NULL;
-      eh->stub_offset = 0;
-      eh->target_value = 0;
-      eh->target_section = NULL;
-      eh->h = NULL;
-      eh->plt_ent = NULL;
-      eh->other = 0;
-    }
-
-  return entry;
-}
-
-/* Create an entry in the branch hash table.  */
-
-static struct bfd_hash_entry *
-branch_hash_newfunc (struct bfd_hash_entry *entry,
-		     struct bfd_hash_table *table,
-		     const char *string)
-{
-  /* Allocate the structure if it has not already been allocated by a
-     subclass.  */
-  if (entry == NULL)
-    {
-      entry = bfd_hash_allocate (table, sizeof (struct ppc_branch_hash_entry));
-      if (entry == NULL)
-	return entry;
-    }
-
-  /* Call the allocation method of the superclass.  */
-  entry = bfd_hash_newfunc (entry, table, string);
-  if (entry != NULL)
-    {
-      struct ppc_branch_hash_entry *eh;
-
-      /* Initialize the local fields.  */
-      eh = (struct ppc_branch_hash_entry *) entry;
-      eh->offset = 0;
-      eh->iter = 0;
-    }
-
-  return entry;
-}
-
-/* Create an entry in a ppc64 ELF linker hash table.  */
-
-static struct bfd_hash_entry *
-link_hash_newfunc (struct bfd_hash_entry *entry,
-		   struct bfd_hash_table *table,
-		   const char *string)
-{
-  /* Allocate the structure if it has not already been allocated by a
-     subclass.  */
-  if (entry == NULL)
-    {
-      entry = bfd_hash_allocate (table, sizeof (struct ppc_link_hash_entry));
-      if (entry == NULL)
-	return entry;
-    }
-
-  /* Call the allocation method of the superclass.  */
-  entry = _bfd_elf_link_hash_newfunc (entry, table, string);
-  if (entry != NULL)
-    {
-      struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) entry;
-
-      memset (&eh->u.stub_cache, 0,
-	      (sizeof (struct ppc_link_hash_entry)
-	       - offsetof (struct ppc_link_hash_entry, u.stub_cache)));
-
-      /* When making function calls, old ABI code references function entry
-	 points (dot symbols), while new ABI code references the function
-	 descriptor symbol.  We need to make any combination of reference and
-	 definition work together, without breaking archive linking.
-
-	 For a defined function "foo" and an undefined call to "bar":
-	 An old object defines "foo" and ".foo", references ".bar" (possibly
-	 "bar" too).
-	 A new object defines "foo" and references "bar".
-
-	 A new object thus has no problem with its undefined symbols being
-	 satisfied by definitions in an old object.  On the other hand, the
-	 old object won't have ".bar" satisfied by a new object.
-
-	 Keep a list of newly added dot-symbols.  */
-
-      if (string[0] == '.')
-	{
-	  struct ppc_link_hash_table *htab;
-
-	  htab = (struct ppc_link_hash_table *) table;
-	  eh->u.next_dot_sym = htab->dot_syms;
-	  htab->dot_syms = eh;
-	}
-    }
-
-  return entry;
-}
-
-struct tocsave_entry {
-  asection *sec;
-  bfd_vma offset;
-};
-
-static hashval_t
-tocsave_htab_hash (const void *p)
-{
-  const struct tocsave_entry *e = (const struct tocsave_entry *) p;
-  return ((bfd_vma)(intptr_t) e->sec ^ e->offset) >> 3;
-}
-
-static int
-tocsave_htab_eq (const void *p1, const void *p2)
-{
-  const struct tocsave_entry *e1 = (const struct tocsave_entry *) p1;
-  const struct tocsave_entry *e2 = (const struct tocsave_entry *) p2;
-  return e1->sec == e2->sec && e1->offset == e2->offset;
-}
-
-/* Destroy a ppc64 ELF linker hash table.  */
-
-static void
-ppc64_elf_link_hash_table_free (bfd *obfd)
-{
-  struct ppc_link_hash_table *htab;
-
-  htab = (struct ppc_link_hash_table *) obfd->link.hash;
-  if (htab->tocsave_htab)
-    htab_delete (htab->tocsave_htab);
-  bfd_hash_table_free (&htab->branch_hash_table);
-  bfd_hash_table_free (&htab->stub_hash_table);
-  _bfd_elf_link_hash_table_free (obfd);
-}
-
-/* Create a ppc64 ELF linker hash table.  */
-
-static struct bfd_link_hash_table *
-ppc64_elf_link_hash_table_create (bfd *abfd)
-{
-  struct ppc_link_hash_table *htab;
-  bfd_size_type amt = sizeof (struct ppc_link_hash_table);
-
-  htab = bfd_zmalloc (amt);
-  if (htab == NULL)
-    return NULL;
-
-  if (!_bfd_elf_link_hash_table_init (&htab->elf, abfd, link_hash_newfunc,
-				      sizeof (struct ppc_link_hash_entry),
-				      PPC64_ELF_DATA))
-    {
-      free (htab);
-      return NULL;
-    }
-
-  /* Init the stub hash table too.  */
-  if (!bfd_hash_table_init (&htab->stub_hash_table, stub_hash_newfunc,
-			    sizeof (struct ppc_stub_hash_entry)))
-    {
-      _bfd_elf_link_hash_table_free (abfd);
-      return NULL;
-    }
-
-  /* And the branch hash table.  */
-  if (!bfd_hash_table_init (&htab->branch_hash_table, branch_hash_newfunc,
-			    sizeof (struct ppc_branch_hash_entry)))
-    {
-      bfd_hash_table_free (&htab->stub_hash_table);
-      _bfd_elf_link_hash_table_free (abfd);
-      return NULL;
-    }
-
-  htab->tocsave_htab = htab_try_create (1024,
-					tocsave_htab_hash,
-					tocsave_htab_eq,
-					NULL);
-  if (htab->tocsave_htab == NULL)
-    {
-      ppc64_elf_link_hash_table_free (abfd);
-      return NULL;
-    }
-  htab->elf.root.hash_table_free = ppc64_elf_link_hash_table_free;
-
-  /* Initializing two fields of the union is just cosmetic.  We really
-     only care about glist, but when compiled on a 32-bit host the
-     bfd_vma fields are larger.  Setting the bfd_vma to zero makes
-     debugger inspection of these fields look nicer.  */
-  htab->elf.init_got_refcount.refcount = 0;
-  htab->elf.init_got_refcount.glist = NULL;
-  htab->elf.init_plt_refcount.refcount = 0;
-  htab->elf.init_plt_refcount.glist = NULL;
-  htab->elf.init_got_offset.offset = 0;
-  htab->elf.init_got_offset.glist = NULL;
-  htab->elf.init_plt_offset.offset = 0;
-  htab->elf.init_plt_offset.glist = NULL;
-
-  return &htab->elf.root;
-}
-
-/* Create sections for linker generated code.  */
-
-static bfd_boolean
-create_linkage_sections (bfd *dynobj, struct bfd_link_info *info)
-{
-  struct ppc_link_hash_table *htab;
-  flagword flags;
-
-  htab = ppc_hash_table (info);
-
-  flags = (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_READONLY
-	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
-  if (htab->params->save_restore_funcs)
-    {
-      /* Create .sfpr for code to save and restore fp regs.  */
-      htab->sfpr = bfd_make_section_anyway_with_flags (dynobj, ".sfpr",
-						       flags);
-      if (htab->sfpr == NULL
-	  || ! bfd_set_section_alignment (dynobj, htab->sfpr, 2))
-	return FALSE;
-    }
-
-  if (bfd_link_relocatable (info))
-    return TRUE;
-
-  /* Create .glink for lazy dynamic linking support.  */
-  htab->glink = bfd_make_section_anyway_with_flags (dynobj, ".glink",
-						    flags);
-  if (htab->glink == NULL
-      || ! bfd_set_section_alignment (dynobj, htab->glink, 3))
-    return FALSE;
-
-  if (!info->no_ld_generated_unwind_info)
-    {
-      flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY | SEC_HAS_CONTENTS
-	       | SEC_IN_MEMORY | SEC_LINKER_CREATED);
-      htab->glink_eh_frame = bfd_make_section_anyway_with_flags (dynobj,
-								 ".eh_frame",
-								 flags);
-      if (htab->glink_eh_frame == NULL
-	  || !bfd_set_section_alignment (dynobj, htab->glink_eh_frame, 2))
-	return FALSE;
-    }
-
-  flags = SEC_ALLOC | SEC_LINKER_CREATED;
-  htab->elf.iplt = bfd_make_section_anyway_with_flags (dynobj, ".iplt", flags);
-  if (htab->elf.iplt == NULL
-      || ! bfd_set_section_alignment (dynobj, htab->elf.iplt, 3))
-    return FALSE;
-
-  flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
-	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
-  htab->elf.irelplt
-    = bfd_make_section_anyway_with_flags (dynobj, ".rela.iplt", flags);
-  if (htab->elf.irelplt == NULL
-      || ! bfd_set_section_alignment (dynobj, htab->elf.irelplt, 3))
-    return FALSE;
-
-  /* Create branch lookup table for plt_branch stubs.  */
-  flags = (SEC_ALLOC | SEC_LOAD
-	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
-  htab->brlt = bfd_make_section_anyway_with_flags (dynobj, ".branch_lt",
-						   flags);
-  if (htab->brlt == NULL
-      || ! bfd_set_section_alignment (dynobj, htab->brlt, 3))
-    return FALSE;
-
-  if (!bfd_link_pic (info))
-    return TRUE;
-
-  flags = (SEC_ALLOC | SEC_LOAD | SEC_READONLY
-	   | SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED);
-  htab->relbrlt = bfd_make_section_anyway_with_flags (dynobj,
-						      ".rela.branch_lt",
-						      flags);
-  if (htab->relbrlt == NULL
-      || ! bfd_set_section_alignment (dynobj, htab->relbrlt, 3))
-    return FALSE;
-
-  return TRUE;
-}
-
-/* Satisfy the ELF linker by filling in some fields in our fake bfd.  */
-
-bfd_boolean
-ppc64_elf_init_stub_bfd (struct bfd_link_info *info,
-			 struct ppc64_elf_params *params)
-{
-  struct ppc_link_hash_table *htab;
-
-  elf_elfheader (params->stub_bfd)->e_ident[EI_CLASS] = ELFCLASS64;
-
-/* Always hook our dynamic sections into the first bfd, which is the
-   linker created stub bfd.  This ensures that the GOT header is at
-   the start of the output TOC section.  */
-  htab = ppc_hash_table (info);
-  htab->elf.dynobj = params->stub_bfd;
-  htab->params = params;
-
-  return create_linkage_sections (htab->elf.dynobj, info);
-}
-
-/* Build a name for an entry in the stub hash table.  */
-
-static char *
-ppc_stub_name (const asection *input_section,
-	       const asection *sym_sec,
-	       const struct ppc_link_hash_entry *h,
-	       const Elf_Internal_Rela *rel)
-{
-  char *stub_name;
-  ssize_t len;
-
-  /* rel->r_addend is actually 64 bit, but who uses more than +/- 2^31
-     offsets from a sym as a branch target?  In fact, we could
-     probably assume the addend is always zero.  */
-  BFD_ASSERT (((int) rel->r_addend & 0xffffffff) == rel->r_addend);
-
-  if (h)
-    {
-      len = 8 + 1 + strlen (h->elf.root.root.string) + 1 + 8 + 1;
-      stub_name = bfd_malloc (len);
-      if (stub_name == NULL)
-	return stub_name;
-
-      len = sprintf (stub_name, "%08x.%s+%x",
-		     input_section->id & 0xffffffff,
-		     h->elf.root.root.string,
-		     (int) rel->r_addend & 0xffffffff);
-    }
-  else
-    {
-      len = 8 + 1 + 8 + 1 + 8 + 1 + 8 + 1;
-      stub_name = bfd_malloc (len);
-      if (stub_name == NULL)
-	return stub_name;
-
-      len = sprintf (stub_name, "%08x.%x:%x+%x",
-		     input_section->id & 0xffffffff,
-		     sym_sec->id & 0xffffffff,
-		     (int) ELF64_R_SYM (rel->r_info) & 0xffffffff,
-		     (int) rel->r_addend & 0xffffffff);
-    }
-  if (len > 2 && stub_name[len - 2] == '+' && stub_name[len - 1] == '0')
-    stub_name[len - 2] = 0;
-  return stub_name;
-}
-
-/* Look up an entry in the stub hash.  Stub entries are cached because
-   creating the stub name takes a bit of time.  */
-
-static struct ppc_stub_hash_entry *
-ppc_get_stub_entry (const asection *input_section,
-		    const asection *sym_sec,
-		    struct ppc_link_hash_entry *h,
-		    const Elf_Internal_Rela *rel,
-		    struct ppc_link_hash_table *htab)
-{
-  struct ppc_stub_hash_entry *stub_entry;
-  struct map_stub *group;
-
-  /* If this input section is part of a group of sections sharing one
-     stub section, then use the id of the first section in the group.
-     Stub names need to include a section id, as there may well be
-     more than one stub used to reach say, printf, and we need to
-     distinguish between them.  */
-  group = htab->sec_info[input_section->id].u.group;
-  if (group == NULL)
-    return NULL;
-
-  if (h != NULL && h->u.stub_cache != NULL
-      && h->u.stub_cache->h == h
-      && h->u.stub_cache->group == group)
-    {
-      stub_entry = h->u.stub_cache;
-    }
-  else
-    {
-      char *stub_name;
-
-      stub_name = ppc_stub_name (group->link_sec, sym_sec, h, rel);
-      if (stub_name == NULL)
-	return NULL;
-
-      stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table,
-					 stub_name, FALSE, FALSE);
-      if (h != NULL)
-	h->u.stub_cache = stub_entry;
-
-      free (stub_name);
-    }
-
-  return stub_entry;
-}
-
-/* Add a new stub entry to the stub hash.  Not all fields of the new
-   stub entry are initialised.  */
-
-static struct ppc_stub_hash_entry *
-ppc_add_stub (const char *stub_name,
-	      asection *section,
-	      struct bfd_link_info *info)
-{
-  struct ppc_link_hash_table *htab = ppc_hash_table (info);
-  struct map_stub *group;
-  asection *link_sec;
-  asection *stub_sec;
-  struct ppc_stub_hash_entry *stub_entry;
-
-  group = htab->sec_info[section->id].u.group;
-  link_sec = group->link_sec;
-  stub_sec = group->stub_sec;
-  if (stub_sec == NULL)
-    {
-      size_t namelen;
-      bfd_size_type len;
-      char *s_name;
-
-      namelen = strlen (link_sec->name);
-      len = namelen + sizeof (STUB_SUFFIX);
-      s_name = bfd_alloc (htab->params->stub_bfd, len);
-      if (s_name == NULL)
-	return NULL;
-
-      memcpy (s_name, link_sec->name, namelen);
-      memcpy (s_name + namelen, STUB_SUFFIX, sizeof (STUB_SUFFIX));
-      stub_sec = (*htab->params->add_stub_section) (s_name, link_sec);
-      if (stub_sec == NULL)
-	return NULL;
-      group->stub_sec = stub_sec;
-    }
-
-  /* Enter this entry into the linker stub hash table.  */
-  stub_entry = ppc_stub_hash_lookup (&htab->stub_hash_table, stub_name,
-				     TRUE, FALSE);
-  if (stub_entry == NULL)
-    {
-      /* xgettext:c-format */
-      info->callbacks->einfo (_("%P: %B: cannot create stub entry %s\n"),
-			      section->owner, stub_name);
-      return NULL;
-    }
-
-  stub_entry->group = group;
-  stub_entry->stub_offset = 0;
-  return stub_entry;
-}
-
-/* Create .got and .rela.got sections in ABFD, and .got in dynobj if
-   not already done.  */
-
-static bfd_boolean
-create_got_section (bfd *abfd, struct bfd_link_info *info)
-{
-  asection *got, *relgot;
-  flagword flags;
-  struct ppc_link_hash_table *htab = ppc_hash_table (info);
-
-  if (!is_ppc64_elf (abfd))
-    return FALSE;
-  if (htab == NULL)
-    return FALSE;
-
-  if (!htab->elf.sgot
-      && !_bfd_elf_create_got_section (htab->elf.dynobj, info))
-    return FALSE;
-
-  flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
-	   | SEC_LINKER_CREATED);
-
-  got = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
-  if (!got
-      || !bfd_set_section_alignment (abfd, got, 3))
-    return FALSE;
-
-  relgot = bfd_make_section_anyway_with_flags (abfd, ".rela.got",
-					       flags | SEC_READONLY);
-  if (!relgot
-      || ! bfd_set_section_alignment (abfd, relgot, 3))
-    return FALSE;
-
-  ppc64_elf_tdata (abfd)->got = got;
-  ppc64_elf_tdata (abfd)->relgot = relgot;
-  return TRUE;
-}
-
-/* Follow indirect and warning symbol links.  */
-
-static inline struct bfd_link_hash_entry *
-follow_link (struct bfd_link_hash_entry *h)
-{
-  while (h->type == bfd_link_hash_indirect
-	 || h->type == bfd_link_hash_warning)
-    h = h->u.i.link;
-  return h;
-}
-
-static inline struct elf_link_hash_entry *
-elf_follow_link (struct elf_link_hash_entry *h)
-{
-  return (struct elf_link_hash_entry *) follow_link (&h->root);
-}
-
-static inline struct ppc_link_hash_entry *
-ppc_follow_link (struct ppc_link_hash_entry *h)
-{
-  return (struct ppc_link_hash_entry *) follow_link (&h->elf.root);
-}
-
-/* Merge PLT info on FROM with that on TO.  */
-
-static void
-move_plt_plist (struct ppc_link_hash_entry *from,
-		struct ppc_link_hash_entry *to)
-{
-  if (from->elf.plt.plist != NULL)
-    {
-      if (to->elf.plt.plist != NULL)
-	{
-	  struct plt_entry **entp;
-	  struct plt_entry *ent;
-
-	  for (entp = &from->elf.plt.plist; (ent = *entp) != NULL; )
-	    {
-	      struct plt_entry *dent;
-
-	      for (dent = to->elf.plt.plist; dent != NULL; dent = dent->next)
-		if (dent->addend == ent->addend)
-		  {
-		    dent->plt.refcount += ent->plt.refcount;
-		    *entp = ent->next;
-		    break;
-		  }
-	      if (dent == NULL)
-		entp = &ent->next;
-	    }
-	  *entp = to->elf.plt.plist;
-	}
-
-      to->elf.plt.plist = from->elf.plt.plist;
-      from->elf.plt.plist = NULL;
-    }
-}
-
-/* Copy the extra info we tack onto an elf_link_hash_entry.  */
-
-static void
-ppc64_elf_copy_indirect_symbol (struct bfd_link_info *info,
-				struct elf_link_hash_entry *dir,
-				struct elf_link_hash_entry *ind)
-{
-  struct ppc_link_hash_entry *edir, *eind;
-
-  edir = (struct ppc_link_hash_entry *) dir;
-  eind = (struct ppc_link_hash_entry *) ind;
-
-  edir->is_func |= eind->is_func;
-  edir->is_func_descriptor |= eind->is_func_descriptor;
-  edir->tls_mask |= eind->tls_mask;
-  if (eind->oh != NULL)
-    edir->oh = ppc_follow_link (eind->oh);
-
-  /* If called to transfer flags for a weakdef during processing
-     of elf_adjust_dynamic_symbol, don't copy NON_GOT_REF.
-     We clear it ourselves for ELIMINATE_COPY_RELOCS.  */
-  if (!(ELIMINATE_COPY_RELOCS
-	&& eind->elf.root.type != bfd_link_hash_indirect
-	&& edir->elf.dynamic_adjusted))
-    edir->elf.non_got_ref |= eind->elf.non_got_ref;
-
-  if (edir->elf.versioned != versioned_hidden)
-    edir->elf.ref_dynamic |= eind->elf.ref_dynamic;
-  edir->elf.ref_regular |= eind->elf.ref_regular;
-  edir->elf.ref_regular_nonweak |= eind->elf.ref_regular_nonweak;
-  edir->elf.needs_plt |= eind->elf.needs_plt;
-  edir->elf.pointer_equality_needed |= eind->elf.pointer_equality_needed;
-
-  /* If we were called to copy over info for a weak sym, don't copy
-     dyn_relocs, plt/got info, or dynindx.  We used to copy dyn_relocs
-     in order to simplify readonly_dynrelocs and save a field in the
-     symbol hash entry, but that means dyn_relocs can't be used in any
-     tests about a specific symbol, or affect other symbol flags which
-     are then tested.
-     Chain weakdefs so we can get from the weakdef back to an alias.
-     The list is circular so that we don't need to use u.weakdef as
-     well as this list to look at all aliases.  */
-  if (eind->elf.root.type != bfd_link_hash_indirect)
-    {
-      struct ppc_link_hash_entry *cur, *add, *next;
-
-      add = eind;
-      do
-	{
-	  cur = edir->weakref;
-	  if (cur != NULL)
-	    {
-	      do
-		{
-		  /* We can be called twice for the same symbols.
-		     Don't make multiple loops.  */
-		  if (cur == add)
-		    return;
-		  cur = cur->weakref;
-		} while (cur != edir);
-	    }
-	  next = add->weakref;
-	  if (cur != add)
-	    {
-	      add->weakref = edir->weakref != NULL ? edir->weakref : edir;
-	      edir->weakref = add;
-	    }
-	  add = next;
-	} while (add != NULL && add != eind);
-      return;
-    }
-
-  /* Copy over any dynamic relocs we may have on the indirect sym.  */
-  if (eind->dyn_relocs != NULL)
-    {
-      if (edir->dyn_relocs != NULL)
-	{
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  /* Add reloc counts against the indirect sym to the direct sym
-	     list.  Merge any entries against the same section.  */
-	  for (pp = &eind->dyn_relocs; (p = *pp) != NULL; )
-	    {
-	      struct elf_dyn_relocs *q;
-
-	      for (q = edir->dyn_relocs; q != NULL; q = q->next)
-		if (q->sec == p->sec)
-		  {
-		    q->pc_count += p->pc_count;
-		    q->count += p->count;
-		    *pp = p->next;
-		    break;
-		  }
-	      if (q == NULL)
-		pp = &p->next;
-	    }
-	  *pp = edir->dyn_relocs;
-	}
-
-      edir->dyn_relocs = eind->dyn_relocs;
-      eind->dyn_relocs = NULL;
-    }
-
-  /* Copy over got entries that we may have already seen to the
-     symbol which just became indirect.  */
-  if (eind->elf.got.glist != NULL)
-    {
-      if (edir->elf.got.glist != NULL)
-	{
-	  struct got_entry **entp;
-	  struct got_entry *ent;
-
-	  for (entp = &eind->elf.got.glist; (ent = *entp) != NULL; )
-	    {
-	      struct got_entry *dent;
-
-	      for (dent = edir->elf.got.glist; dent != NULL; dent = dent->next)
-		if (dent->addend == ent->addend
-		    && dent->owner == ent->owner
-		    && dent->tls_type == ent->tls_type)
-		  {
-		    dent->got.refcount += ent->got.refcount;
-		    *entp = ent->next;
-		    break;
-		  }
-	      if (dent == NULL)
-		entp = &ent->next;
-	    }
-	  *entp = edir->elf.got.glist;
-	}
-
-      edir->elf.got.glist = eind->elf.got.glist;
-      eind->elf.got.glist = NULL;
-    }
-
-  /* And plt entries.  */
-  move_plt_plist (eind, edir);
-
-  if (eind->elf.dynindx != -1)
-    {
-      if (edir->elf.dynindx != -1)
-	_bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
-				edir->elf.dynstr_index);
-      edir->elf.dynindx = eind->elf.dynindx;
-      edir->elf.dynstr_index = eind->elf.dynstr_index;
-      eind->elf.dynindx = -1;
-      eind->elf.dynstr_index = 0;
-    }
-}
-
-/* Find the function descriptor hash entry from the given function code
-   hash entry FH.  Link the entries via their OH fields.  */
-
-static struct ppc_link_hash_entry *
-lookup_fdh (struct ppc_link_hash_entry *fh, struct ppc_link_hash_table *htab)
-{
-  struct ppc_link_hash_entry *fdh = fh->oh;
-
-  if (fdh == NULL)
-    {
-      const char *fd_name = fh->elf.root.root.string + 1;
-
-      fdh = (struct ppc_link_hash_entry *)
-	elf_link_hash_lookup (&htab->elf, fd_name, FALSE, FALSE, FALSE);
-      if (fdh == NULL)
-	return fdh;
-
-      fdh->is_func_descriptor = 1;
-      fdh->oh = fh;
-      fh->is_func = 1;
-      fh->oh = fdh;
-    }
-
-  fdh = ppc_follow_link (fdh);
-  fdh->is_func_descriptor = 1;
-  fdh->oh = fh;
-  return fdh;
-}
-
-/* Make a fake function descriptor sym for the undefined code sym FH.  */
-
-static struct ppc_link_hash_entry *
-make_fdh (struct bfd_link_info *info,
-	  struct ppc_link_hash_entry *fh)
-{
-  bfd *abfd = fh->elf.root.u.undef.abfd;
-  struct bfd_link_hash_entry *bh = NULL;
-  struct ppc_link_hash_entry *fdh;
-  flagword flags = (fh->elf.root.type == bfd_link_hash_undefweak
-		    ? BSF_WEAK
-		    : BSF_GLOBAL);
-
-  if (!_bfd_generic_link_add_one_symbol (info, abfd,
-					 fh->elf.root.root.string + 1,
-					 flags, bfd_und_section_ptr, 0,
-					 NULL, FALSE, FALSE, &bh))
-    return NULL;
-
-  fdh = (struct ppc_link_hash_entry *) bh;
-  fdh->elf.non_elf = 0;
-  fdh->fake = 1;
-  fdh->is_func_descriptor = 1;
-  fdh->oh = fh;
-  fh->is_func = 1;
-  fh->oh = fdh;
-  return fdh;
-}
-
-/* Fix function descriptor symbols defined in .opd sections to be
-   function type.  */
-
-static bfd_boolean
-ppc64_elf_add_symbol_hook (bfd *ibfd,
-			   struct bfd_link_info *info,
-			   Elf_Internal_Sym *isym,
-			   const char **name,
-			   flagword *flags ATTRIBUTE_UNUSED,
-			   asection **sec,
-			   bfd_vma *value)
-{
-  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC
-      && (ibfd->flags & DYNAMIC) == 0
-      && bfd_get_flavour (info->output_bfd) == bfd_target_elf_flavour)
-    elf_tdata (info->output_bfd)->has_gnu_symbols |= elf_gnu_symbol_ifunc;
-
-  if (*sec != NULL
-      && strcmp ((*sec)->name, ".opd") == 0)
-    {
-      asection *code_sec;
-
-      if (!(ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC
-	    || ELF_ST_TYPE (isym->st_info) == STT_FUNC))
-	isym->st_info = ELF_ST_INFO (ELF_ST_BIND (isym->st_info), STT_FUNC);
-
-      /* If the symbol is a function defined in .opd, and the function
-	 code is in a discarded group, let it appear to be undefined.  */
-      if (!bfd_link_relocatable (info)
-	  && (*sec)->reloc_count != 0
-	  && opd_entry_value (*sec, *value, &code_sec, NULL,
-			      FALSE) != (bfd_vma) -1
-	  && discarded_section (code_sec))
-	{
-	  *sec = bfd_und_section_ptr;
-	  isym->st_shndx = SHN_UNDEF;
-	}
-    }
-  else if (*sec != NULL
-	   && strcmp ((*sec)->name, ".toc") == 0
-	   && ELF_ST_TYPE (isym->st_info) == STT_OBJECT)
-    {
-      struct ppc_link_hash_table *htab = ppc_hash_table (info);
-      if (htab != NULL)
-	htab->params->object_in_toc = 1;
-    }
-
-  if ((STO_PPC64_LOCAL_MASK & isym->st_other) != 0)
-    {
-      if (abiversion (ibfd) == 0)
-	set_abiversion (ibfd, 2);
-      else if (abiversion (ibfd) == 1)
-	{
-	  info->callbacks->einfo (_("%P: symbol '%s' has invalid st_other"
-				    " for ABI version 1\n"), name);
-	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
-	}
-    }
-
-  return TRUE;
-}
-
-/* Merge non-visibility st_other attributes: local entry point.  */
-
-static void
-ppc64_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
-				  const Elf_Internal_Sym *isym,
-				  bfd_boolean definition,
-				  bfd_boolean dynamic)
-{
-  if (definition && !dynamic)
-    h->other = ((isym->st_other & ~ELF_ST_VISIBILITY (-1))
-		| ELF_ST_VISIBILITY (h->other));
-}
-
-/* Hook called on merging a symbol.  We use this to clear "fake" since
-   we now have a real symbol.  */
-
-static bfd_boolean
-ppc64_elf_merge_symbol (struct elf_link_hash_entry *h,
-			const Elf_Internal_Sym *isym ATTRIBUTE_UNUSED,
-			asection **psec ATTRIBUTE_UNUSED,
-			bfd_boolean newdef ATTRIBUTE_UNUSED,
-			bfd_boolean olddef ATTRIBUTE_UNUSED,
-			bfd *oldbfd ATTRIBUTE_UNUSED,
-			const asection *oldsec ATTRIBUTE_UNUSED)
-{
-  ((struct ppc_link_hash_entry *) h)->fake = 0;
-  return TRUE;
-}
-
-/* This function makes an old ABI object reference to ".bar" cause the
-   inclusion of a new ABI object archive that defines "bar".
-   NAME is a symbol defined in an archive.  Return a symbol in the hash
-   table that might be satisfied by the archive symbols.  */
-
-static struct elf_link_hash_entry *
-ppc64_elf_archive_symbol_lookup (bfd *abfd,
-				 struct bfd_link_info *info,
-				 const char *name)
-{
-  struct elf_link_hash_entry *h;
-  char *dot_name;
-  size_t len;
-
-  h = _bfd_elf_archive_symbol_lookup (abfd, info, name);
-  if (h != NULL
-      /* Don't return this sym if it is a fake function descriptor
-	 created by add_symbol_adjust.  */
-      && !((struct ppc_link_hash_entry *) h)->fake)
-    return h;
-
-  if (name[0] == '.')
-    return h;
-
-  len = strlen (name);
-  dot_name = bfd_alloc (abfd, len + 2);
-  if (dot_name == NULL)
-    return (struct elf_link_hash_entry *) 0 - 1;
-  dot_name[0] = '.';
-  memcpy (dot_name + 1, name, len + 1);
-  h = _bfd_elf_archive_symbol_lookup (abfd, info, dot_name);
-  bfd_release (abfd, dot_name);
-  return h;
-}
-
-/* This function satisfies all old ABI object references to ".bar" if a
-   new ABI object defines "bar".  Well, at least, undefined dot symbols
-   are made weak.  This stops later archive searches from including an
-   object if we already have a function descriptor definition.  It also
-   prevents the linker complaining about undefined symbols.
-   We also check and correct mismatched symbol visibility here.  The
-   most restrictive visibility of the function descriptor and the
-   function entry symbol is used.  */
-
-static bfd_boolean
-add_symbol_adjust (struct ppc_link_hash_entry *eh, struct bfd_link_info *info)
-{
-  struct ppc_link_hash_table *htab;
-  struct ppc_link_hash_entry *fdh;
-
-  if (eh->elf.root.type == bfd_link_hash_warning)
-    eh = (struct ppc_link_hash_entry *) eh->elf.root.u.i.link;
-
-  if (eh->elf.root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  if (eh->elf.root.root.string[0] != '.')
-    abort ();
-
-  htab = ppc_hash_table (info);
-  if (htab == NULL)
-    return FALSE;
-
-  fdh = lookup_fdh (eh, htab);
-  if (fdh == NULL
-      && !bfd_link_relocatable (info)
-      && (eh->elf.root.type == bfd_link_hash_undefined
-	  || eh->elf.root.type == bfd_link_hash_undefweak)
-      && eh->elf.ref_regular)
-    {
-      /* Make an undefined function descriptor sym, in order to
-	 pull in an --as-needed shared lib.  Archives are handled
-	 elsewhere.  */
-      fdh = make_fdh (info, eh);
-      if (fdh == NULL)
-	return FALSE;
-    }
-
-  if (fdh != NULL)
-    {
-      unsigned entry_vis = ELF_ST_VISIBILITY (eh->elf.other) - 1;
-      unsigned descr_vis = ELF_ST_VISIBILITY (fdh->elf.other) - 1;
-
-      /* Make both descriptor and entry symbol have the most
-	 constraining visibility of either symbol.  */
-      if (entry_vis < descr_vis)
-	fdh->elf.other += entry_vis - descr_vis;
-      else if (entry_vis > descr_vis)
-	eh->elf.other += descr_vis - entry_vis;
-
-      /* Propagate reference flags from entry symbol to function
-	 descriptor symbol.  */
-      fdh->elf.root.non_ir_ref |= eh->elf.root.non_ir_ref;
-      fdh->elf.ref_regular |= eh->elf.ref_regular;
-      fdh->elf.ref_regular_nonweak |= eh->elf.ref_regular_nonweak;
-
-      if (!fdh->elf.forced_local
-	  && fdh->elf.dynindx == -1
-	  && fdh->elf.versioned != versioned_hidden
-	  && (bfd_link_dll (info)
-	      || fdh->elf.def_dynamic
-	      || fdh->elf.ref_dynamic)
-	  && (eh->elf.ref_regular
-	      || eh->elf.def_regular))
-	{
-	  if (! bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
-	    return FALSE;
-	}
-    }
-
-  return TRUE;
-}
-
-/* Set up opd section info and abiversion for IBFD, and process list
-   of dot-symbols we made in link_hash_newfunc.  */
-
-static bfd_boolean
-ppc64_elf_before_check_relocs (bfd *ibfd, struct bfd_link_info *info)
-{
-  struct ppc_link_hash_table *htab;
-  struct ppc_link_hash_entry **p, *eh;
-  asection *opd = bfd_get_section_by_name (ibfd, ".opd");
-
-  if (opd != NULL && opd->size != 0)
-    {
-      if (abiversion (ibfd) == 0)
-	set_abiversion (ibfd, 1);
-      else if (abiversion (ibfd) >= 2)
-	{
-	  /* xgettext:c-format */
-	  info->callbacks->einfo (_("%P: %B .opd not allowed in ABI"
-				    " version %d\n"),
-				  ibfd, abiversion (ibfd));
-	  bfd_set_error (bfd_error_bad_value);
-	  return FALSE;
-	}
-
-      if ((ibfd->flags & DYNAMIC) == 0
-	  && (opd->flags & SEC_RELOC) != 0
-	  && opd->reloc_count != 0
-	  && !bfd_is_abs_section (opd->output_section))
-	{
-	  /* Garbage collection needs some extra help with .opd sections.
-	     We don't want to necessarily keep everything referenced by
-	     relocs in .opd, as that would keep all functions.  Instead,
-	     if we reference an .opd symbol (a function descriptor), we
-	     want to keep the function code symbol's section.  This is
-	     easy for global symbols, but for local syms we need to keep
-	     information about the associated function section.  */
-	  bfd_size_type amt;
-	  asection **opd_sym_map;
-
-	  amt = OPD_NDX (opd->size) * sizeof (*opd_sym_map);
-	  opd_sym_map = bfd_zalloc (ibfd, amt);
-	  if (opd_sym_map == NULL)
-	    return FALSE;
-	  ppc64_elf_section_data (opd)->u.opd.func_sec = opd_sym_map;
-	  BFD_ASSERT (ppc64_elf_section_data (opd)->sec_type == sec_normal);
-	  ppc64_elf_section_data (opd)->sec_type = sec_opd;
-	}
-    }
-
-  if (!is_ppc64_elf (info->output_bfd))
-    return TRUE;
-  htab = ppc_hash_table (info);
-  if (htab == NULL)
-    return FALSE;
-
-  /* For input files without an explicit abiversion in e_flags
-     we should have flagged any with symbol st_other bits set
-     as ELFv1 and above flagged those with .opd as ELFv2.
-     Set the output abiversion if not yet set, and for any input
-     still ambiguous, take its abiversion from the output.
-     Differences in ABI are reported later.  */
-  if (abiversion (info->output_bfd) == 0)
-    set_abiversion (info->output_bfd, abiversion (ibfd));
-  else if (abiversion (ibfd) == 0)
-    set_abiversion (ibfd, abiversion (info->output_bfd));
-
-  p = &htab->dot_syms;
-  while ((eh = *p) != NULL)
-    {
-      *p = NULL;
-      if (&eh->elf == htab->elf.hgot)
-	;
-      else if (htab->elf.hgot == NULL
-	       && strcmp (eh->elf.root.root.string, ".TOC.") == 0)
-	htab->elf.hgot = &eh->elf;
-      else if (abiversion (ibfd) <= 1)
-	{
-	  htab->need_func_desc_adj = 1;
-	  if (!add_symbol_adjust (eh, info))
-	    return FALSE;
-	}
-      p = &eh->u.next_dot_sym;
-    }
-  return TRUE;
-}
-
-/* Undo hash table changes when an --as-needed input file is determined
-   not to be needed.  */
-
-static bfd_boolean
-ppc64_elf_notice_as_needed (bfd *ibfd,
-			    struct bfd_link_info *info,
-			    enum notice_asneeded_action act)
-{
-  if (act == notice_not_needed)
-    {
-      struct ppc_link_hash_table *htab = ppc_hash_table (info);
-
-      if (htab == NULL)
-	return FALSE;
-
-      htab->dot_syms = NULL;
-    }
-  return _bfd_elf_notice_as_needed (ibfd, info, act);
-}
-
-/* If --just-symbols against a final linked binary, then assume we need
-   toc adjusting stubs when calling functions defined there.  */
-
-static void
-ppc64_elf_link_just_syms (asection *sec, struct bfd_link_info *info)
-{
-  if ((sec->flags & SEC_CODE) != 0
-      && (sec->owner->flags & (EXEC_P | DYNAMIC)) != 0
-      && is_ppc64_elf (sec->owner))
-    {
-      if (abiversion (sec->owner) >= 2
-	  || bfd_get_section_by_name (sec->owner, ".opd") != NULL)
-	sec->has_toc_reloc = 1;
-    }
-  _bfd_elf_link_just_syms (sec, info);
-}
-
-static struct plt_entry **
-update_local_sym_info (bfd *abfd, Elf_Internal_Shdr *symtab_hdr,
-		       unsigned long r_symndx, bfd_vma r_addend, int tls_type)
-{
-  struct got_entry **local_got_ents = elf_local_got_ents (abfd);
-  struct plt_entry **local_plt;
-  unsigned char *local_got_tls_masks;
-
-  if (local_got_ents == NULL)
-    {
-      bfd_size_type size = symtab_hdr->sh_info;
-
-      size *= (sizeof (*local_got_ents)
-	       + sizeof (*local_plt)
-	       + sizeof (*local_got_tls_masks));
-      local_got_ents = bfd_zalloc (abfd, size);
-      if (local_got_ents == NULL)
-	return NULL;
-      elf_local_got_ents (abfd) = local_got_ents;
-    }
-
-  if ((tls_type & (PLT_IFUNC | TLS_EXPLICIT)) == 0)
-    {
-      struct got_entry *ent;
-
-      for (ent = local_got_ents[r_symndx]; ent != NULL; ent = ent->next)
-	if (ent->addend == r_addend
-	    && ent->owner == abfd
-	    && ent->tls_type == tls_type)
-	  break;
-      if (ent == NULL)
-	{
-	  bfd_size_type amt = sizeof (*ent);
-	  ent = bfd_alloc (abfd, amt);
-	  if (ent == NULL)
-	    return FALSE;
-	  ent->next = local_got_ents[r_symndx];
-	  ent->addend = r_addend;
-	  ent->owner = abfd;
-	  ent->tls_type = tls_type;
-	  ent->is_indirect = FALSE;
-	  ent->got.refcount = 0;
-	  local_got_ents[r_symndx] = ent;
-	}
-      ent->got.refcount += 1;
-    }
-
-  local_plt = (struct plt_entry **) (local_got_ents + symtab_hdr->sh_info);
-  local_got_tls_masks = (unsigned char *) (local_plt + symtab_hdr->sh_info);
-  local_got_tls_masks[r_symndx] |= tls_type;
-
-  return local_plt + r_symndx;
-}
-
-static bfd_boolean
-update_plt_info (bfd *abfd, struct plt_entry **plist, bfd_vma addend)
-{
-  struct plt_entry *ent;
-
-  for (ent = *plist; ent != NULL; ent = ent->next)
-    if (ent->addend == addend)
-      break;
-  if (ent == NULL)
-    {
-      bfd_size_type amt = sizeof (*ent);
-      ent = bfd_alloc (abfd, amt);
-      if (ent == NULL)
-	return FALSE;
-      ent->next = *plist;
-      ent->addend = addend;
-      ent->plt.refcount = 0;
-      *plist = ent;
-    }
-  ent->plt.refcount += 1;
-  return TRUE;
-}
-
-static bfd_boolean
-is_branch_reloc (enum elf_ppc64_reloc_type r_type)
-{
-  return (r_type == R_PPC64_REL24
-	  || r_type == R_PPC64_REL14
-	  || r_type == R_PPC64_REL14_BRTAKEN
-	  || r_type == R_PPC64_REL14_BRNTAKEN
-	  || r_type == R_PPC64_ADDR24
-	  || r_type == R_PPC64_ADDR14
-	  || r_type == R_PPC64_ADDR14_BRTAKEN
-	  || r_type == R_PPC64_ADDR14_BRNTAKEN);
-}
-
-/* Look through the relocs for a section during the first phase, and
-   calculate needed space in the global offset table, procedure
-   linkage table, and dynamic reloc sections.  */
-
-static bfd_boolean
-ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
-			asection *sec, const Elf_Internal_Rela *relocs)
-{
-  struct ppc_link_hash_table *htab;
-  Elf_Internal_Shdr *symtab_hdr;
-  struct elf_link_hash_entry **sym_hashes;
-  const Elf_Internal_Rela *rel;
-  const Elf_Internal_Rela *rel_end;
-  asection *sreloc;
-  asection **opd_sym_map;
-  struct elf_link_hash_entry *tga, *dottga;
-
-  if (bfd_link_relocatable (info))
-    return TRUE;
-
-  /* Don't do anything special with non-loaded, non-alloced sections.
-     In particular, any relocs in such sections should not affect GOT
-     and PLT reference counting (ie. we don't allow them to create GOT
-     or PLT entries), there's no possibility or desire to optimize TLS
-     relocs, and there's not much point in propagating relocs to shared
-     libs that the dynamic linker won't relocate.  */
-  if ((sec->flags & SEC_ALLOC) == 0)
-    return TRUE;
-
-  BFD_ASSERT (is_ppc64_elf (abfd));
-
-  htab = ppc_hash_table (info);
-  if (htab == NULL)
-    return FALSE;
-
-  tga = elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
-			      FALSE, FALSE, TRUE);
-  dottga = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
-				 FALSE, FALSE, TRUE);
-  symtab_hdr = &elf_symtab_hdr (abfd);
-  sym_hashes = elf_sym_hashes (abfd);
-  sreloc = NULL;
-  opd_sym_map = NULL;
-  if (ppc64_elf_section_data (sec) != NULL
-      && ppc64_elf_section_data (sec)->sec_type == sec_opd)
-    opd_sym_map = ppc64_elf_section_data (sec)->u.opd.func_sec;
-
-  rel_end = relocs + sec->reloc_count;
-  for (rel = relocs; rel < rel_end; rel++)
-    {
-      unsigned long r_symndx;
-      struct elf_link_hash_entry *h;
-      enum elf_ppc64_reloc_type r_type;
-      int tls_type;
-      struct _ppc64_elf_section_data *ppc64_sec;
-      struct plt_entry **ifunc, **plt_list;
-
-      r_symndx = ELF64_R_SYM (rel->r_info);
-      if (r_symndx < symtab_hdr->sh_info)
-	h = NULL;
-      else
-	{
-	  struct ppc_link_hash_entry *eh;
-
-	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
-	  h = elf_follow_link (h);
-	  eh = (struct ppc_link_hash_entry *) h;
-
-	  /* PR15323, ref flags aren't set for references in the same
-	     object.  */
-	  h->root.non_ir_ref = 1;
-	  if (eh->is_func && eh->oh != NULL)
-	    eh->oh->elf.root.non_ir_ref = 1;
-
-	  if (h == htab->elf.hgot)
-	    sec->has_toc_reloc = 1;
-	}
-
-      tls_type = 0;
-      ifunc = NULL;
-      if (h != NULL)
-	{
-	  if (h->type == STT_GNU_IFUNC)
-	    {
-	      h->needs_plt = 1;
-	      ifunc = &h->plt.plist;
-	    }
-	}
-      else
-	{
-	  Elf_Internal_Sym *isym = bfd_sym_from_r_symndx (&htab->sym_cache,
-							  abfd, r_symndx);
-	  if (isym == NULL)
-	    return FALSE;
-
-	  if (ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC)
-	    {
-	      ifunc = update_local_sym_info (abfd, symtab_hdr, r_symndx,
-					     rel->r_addend, PLT_IFUNC);
-	      if (ifunc == NULL)
-		return FALSE;
-	    }
-	}
-
-      r_type = ELF64_R_TYPE (rel->r_info);
-      switch (r_type)
-	{
-	case R_PPC64_TLSGD:
-	case R_PPC64_TLSLD:
-	  /* These special tls relocs tie a call to __tls_get_addr with
-	     its parameter symbol.  */
-	  break;
-
-	case R_PPC64_GOT_TLSLD16:
-	case R_PPC64_GOT_TLSLD16_LO:
-	case R_PPC64_GOT_TLSLD16_HI:
-	case R_PPC64_GOT_TLSLD16_HA:
-	  tls_type = TLS_TLS | TLS_LD;
-	  goto dogottls;
-
-	case R_PPC64_GOT_TLSGD16:
-	case R_PPC64_GOT_TLSGD16_LO:
-	case R_PPC64_GOT_TLSGD16_HI:
-	case R_PPC64_GOT_TLSGD16_HA:
-	  tls_type = TLS_TLS | TLS_GD;
-	  goto dogottls;
-
-	case R_PPC64_GOT_TPREL16_DS:
-	case R_PPC64_GOT_TPREL16_LO_DS:
-	case R_PPC64_GOT_TPREL16_HI:
-	case R_PPC64_GOT_TPREL16_HA:
-	  if (bfd_link_pic (info))
-	    info->flags |= DF_STATIC_TLS;
-	  tls_type = TLS_TLS | TLS_TPREL;
-	  goto dogottls;
-
-	case R_PPC64_GOT_DTPREL16_DS:
-	case R_PPC64_GOT_DTPREL16_LO_DS:
-	case R_PPC64_GOT_DTPREL16_HI:
-	case R_PPC64_GOT_DTPREL16_HA:
-	  tls_type = TLS_TLS | TLS_DTPREL;
-	dogottls:
-	  sec->has_tls_reloc = 1;
-	  /* Fall through */
-
-	case R_PPC64_GOT16:
-	case R_PPC64_GOT16_DS:
-	case R_PPC64_GOT16_HA:
-	case R_PPC64_GOT16_HI:
-	case R_PPC64_GOT16_LO:
-	case R_PPC64_GOT16_LO_DS:
-	  /* This symbol requires a global offset table entry.  */
-	  sec->has_toc_reloc = 1;
-	  if (r_type == R_PPC64_GOT_TLSLD16
-	      || r_type == R_PPC64_GOT_TLSGD16
-	      || r_type == R_PPC64_GOT_TPREL16_DS
-	      || r_type == R_PPC64_GOT_DTPREL16_DS
-	      || r_type == R_PPC64_GOT16
-	      || r_type == R_PPC64_GOT16_DS)
-	    {
-	      htab->do_multi_toc = 1;
-	      ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
-	    }
-
-	  if (ppc64_elf_tdata (abfd)->got == NULL
-	      && !create_got_section (abfd, info))
-	    return FALSE;
-
-	  if (h != NULL)
-	    {
-	      struct ppc_link_hash_entry *eh;
-	      struct got_entry *ent;
-
-	      eh = (struct ppc_link_hash_entry *) h;
-	      for (ent = eh->elf.got.glist; ent != NULL; ent = ent->next)
-		if (ent->addend == rel->r_addend
-		    && ent->owner == abfd
-		    && ent->tls_type == tls_type)
-		  break;
-	      if (ent == NULL)
-		{
-		  bfd_size_type amt = sizeof (*ent);
-		  ent = bfd_alloc (abfd, amt);
-		  if (ent == NULL)
-		    return FALSE;
-		  ent->next = eh->elf.got.glist;
-		  ent->addend = rel->r_addend;
-		  ent->owner = abfd;
-		  ent->tls_type = tls_type;
-		  ent->is_indirect = FALSE;
-		  ent->got.refcount = 0;
-		  eh->elf.got.glist = ent;
-		}
-	      ent->got.refcount += 1;
-	      eh->tls_mask |= tls_type;
-	    }
-	  else
-	    /* This is a global offset table entry for a local symbol.  */
-	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
-					rel->r_addend, tls_type))
-	      return FALSE;
-
-	  /* We may also need a plt entry if the symbol turns out to be
-	     an ifunc.  */
-	  if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1)
-	    {
-	      if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend))
-		return FALSE;
-	    }
-	  break;
-
-	case R_PPC64_PLT16_HA:
-	case R_PPC64_PLT16_HI:
-	case R_PPC64_PLT16_LO:
-	case R_PPC64_PLT32:
-	case R_PPC64_PLT64:
-	  /* This symbol requires a procedure linkage table entry.  */
-	  plt_list = ifunc;
-	  if (h != NULL)
-	    {
-	      h->needs_plt = 1;
-	      if (h->root.root.string[0] == '.'
-		  && h->root.root.string[1] != '\0')
-		((struct ppc_link_hash_entry *) h)->is_func = 1;
-	      plt_list = &h->plt.plist;
-	    }
-	  if (plt_list == NULL)
-	    {
-	      /* It does not make sense to have a procedure linkage
-		 table entry for a non-ifunc local symbol.  */
-	      info->callbacks->einfo
-		/* xgettext:c-format */
-		(_("%P: %H: %s reloc against local symbol\n"),
-		 abfd, sec, rel->r_offset,
-		 ppc64_elf_howto_table[r_type]->name);
-	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
-	    }
-	  if (!update_plt_info (abfd, plt_list, rel->r_addend))
-	    return FALSE;
-	  break;
-
-	  /* The following relocations don't need to propagate the
-	     relocation if linking a shared object since they are
-	     section relative.  */
-	case R_PPC64_SECTOFF:
-	case R_PPC64_SECTOFF_LO:
-	case R_PPC64_SECTOFF_HI:
-	case R_PPC64_SECTOFF_HA:
-	case R_PPC64_SECTOFF_DS:
-	case R_PPC64_SECTOFF_LO_DS:
-	case R_PPC64_DTPREL16:
-	case R_PPC64_DTPREL16_LO:
-	case R_PPC64_DTPREL16_HI:
-	case R_PPC64_DTPREL16_HA:
-	case R_PPC64_DTPREL16_DS:
-	case R_PPC64_DTPREL16_LO_DS:
-	case R_PPC64_DTPREL16_HIGH:
-	case R_PPC64_DTPREL16_HIGHA:
-	case R_PPC64_DTPREL16_HIGHER:
-	case R_PPC64_DTPREL16_HIGHERA:
-	case R_PPC64_DTPREL16_HIGHEST:
-	case R_PPC64_DTPREL16_HIGHESTA:
-	  break;
-
-	  /* Nor do these.  */
-	case R_PPC64_REL16:
-	case R_PPC64_REL16_LO:
-	case R_PPC64_REL16_HI:
-	case R_PPC64_REL16_HA:
-	case R_PPC64_REL16DX_HA:
-	  break;
-
-	  /* Not supported as a dynamic relocation.  */
-	case R_PPC64_ADDR64_LOCAL:
-	  if (bfd_link_pic (info))
-	    {
-	      if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
-		ppc_howto_init ();
-	      /* xgettext:c-format */
-	      info->callbacks->einfo (_("%P: %H: %s reloc unsupported "
-					"in shared libraries and PIEs.\n"),
-				      abfd, sec, rel->r_offset,
-				      ppc64_elf_howto_table[r_type]->name);
-	      bfd_set_error (bfd_error_bad_value);
-	      return FALSE;
-	    }
-	  break;
-
-	case R_PPC64_TOC16:
-	case R_PPC64_TOC16_DS:
-	  htab->do_multi_toc = 1;
-	  ppc64_elf_tdata (abfd)->has_small_toc_reloc = 1;
-	  /* Fall through.  */
-	case R_PPC64_TOC16_LO:
-	case R_PPC64_TOC16_HI:
-	case R_PPC64_TOC16_HA:
-	case R_PPC64_TOC16_LO_DS:
-	  sec->has_toc_reloc = 1;
-	  break;
-
-	  /* Marker reloc.  */
-	case R_PPC64_ENTRY:
-	  break;
-
-	  /* This relocation describes the C++ object vtable hierarchy.
-	     Reconstruct it for later use during GC.  */
-	case R_PPC64_GNU_VTINHERIT:
-	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
-	    return FALSE;
-	  break;
-
-	  /* This relocation describes which C++ vtable entries are actually
-	     used.  Record for later use during GC.  */
-	case R_PPC64_GNU_VTENTRY:
-	  BFD_ASSERT (h != NULL);
-	  if (h != NULL
-	      && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_addend))
-	    return FALSE;
-	  break;
-
-	case R_PPC64_REL14:
-	case R_PPC64_REL14_BRTAKEN:
-	case R_PPC64_REL14_BRNTAKEN:
-	  {
-	    asection *dest = NULL;
-
-	    /* Heuristic: If jumping outside our section, chances are
-	       we are going to need a stub.  */
-	    if (h != NULL)
-	      {
-		/* If the sym is weak it may be overridden later, so
-		   don't assume we know where a weak sym lives.  */
-		if (h->root.type == bfd_link_hash_defined)
-		  dest = h->root.u.def.section;
-	      }
-	    else
-	      {
-		Elf_Internal_Sym *isym;
-
-		isym = bfd_sym_from_r_symndx (&htab->sym_cache,
-					      abfd, r_symndx);
-		if (isym == NULL)
-		  return FALSE;
-
-		dest = bfd_section_from_elf_index (abfd, isym->st_shndx);
-	      }
-
-	    if (dest != sec)
-	      ppc64_elf_section_data (sec)->has_14bit_branch = 1;
-	  }
-	  /* Fall through.  */
-
-	case R_PPC64_REL24:
-	  plt_list = ifunc;
-	  if (h != NULL)
-	    {
-	      h->needs_plt = 1;
-	      if (h->root.root.string[0] == '.'
-		  && h->root.root.string[1] != '\0')
-		((struct ppc_link_hash_entry *) h)->is_func = 1;
-
-	      if (h == tga || h == dottga)
-		{
-		  sec->has_tls_reloc = 1;
-		  if (rel != relocs
-		      && (ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSGD
-			  || ELF64_R_TYPE (rel[-1].r_info) == R_PPC64_TLSLD))
-		    /* We have a new-style __tls_get_addr call with
-		       a marker reloc.  */
-		    ;
-		  else
-		    /* Mark this section as having an old-style call.  */
-		    sec->has_tls_get_addr_call = 1;
-		}
-	      plt_list = &h->plt.plist;
-	    }
-
-	  /* We may need a .plt entry if the function this reloc
-	     refers to is in a shared lib.  */
-	  if (plt_list
-	      && !update_plt_info (abfd, plt_list, rel->r_addend))
-	    return FALSE;
-	  break;
-
-	case R_PPC64_ADDR14:
-	case R_PPC64_ADDR14_BRNTAKEN:
-	case R_PPC64_ADDR14_BRTAKEN:
-	case R_PPC64_ADDR24:
-	  goto dodyn;
-
-	case R_PPC64_TPREL64:
-	  tls_type = TLS_EXPLICIT | TLS_TLS | TLS_TPREL;
-	  if (bfd_link_pic (info))
-	    info->flags |= DF_STATIC_TLS;
-	  goto dotlstoc;
-
-	case R_PPC64_DTPMOD64:
-	  if (rel + 1 < rel_end
-	      && rel[1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64)
-	      && rel[1].r_offset == rel->r_offset + 8)
-	    tls_type = TLS_EXPLICIT | TLS_TLS | TLS_GD;
-	  else
-	    tls_type = TLS_EXPLICIT | TLS_TLS | TLS_LD;
-	  goto dotlstoc;
-
-	case R_PPC64_DTPREL64:
-	  tls_type = TLS_EXPLICIT | TLS_TLS | TLS_DTPREL;
-	  if (rel != relocs
-	      && rel[-1].r_info == ELF64_R_INFO (r_symndx, R_PPC64_DTPMOD64)
-	      && rel[-1].r_offset == rel->r_offset - 8)
-	    /* This is the second reloc of a dtpmod, dtprel pair.
-	       Don't mark with TLS_DTPREL.  */
-	    goto dodyn;
-
-	dotlstoc:
-	  sec->has_tls_reloc = 1;
-	  if (h != NULL)
-	    {
-	      struct ppc_link_hash_entry *eh;
-	      eh = (struct ppc_link_hash_entry *) h;
-	      eh->tls_mask |= tls_type;
-	    }
-	  else
-	    if (!update_local_sym_info (abfd, symtab_hdr, r_symndx,
-					rel->r_addend, tls_type))
-	      return FALSE;
-
-	  ppc64_sec = ppc64_elf_section_data (sec);
-	  if (ppc64_sec->sec_type != sec_toc)
-	    {
-	      bfd_size_type amt;
-
-	      /* One extra to simplify get_tls_mask.  */
-	      amt = sec->size * sizeof (unsigned) / 8 + sizeof (unsigned);
-	      ppc64_sec->u.toc.symndx = bfd_zalloc (abfd, amt);
-	      if (ppc64_sec->u.toc.symndx == NULL)
-		return FALSE;
-	      amt = sec->size * sizeof (bfd_vma) / 8;
-	      ppc64_sec->u.toc.add = bfd_zalloc (abfd, amt);
-	      if (ppc64_sec->u.toc.add == NULL)
-		return FALSE;
-	      BFD_ASSERT (ppc64_sec->sec_type == sec_normal);
-	      ppc64_sec->sec_type = sec_toc;
-	    }
-	  BFD_ASSERT (rel->r_offset % 8 == 0);
-	  ppc64_sec->u.toc.symndx[rel->r_offset / 8] = r_symndx;
-	  ppc64_sec->u.toc.add[rel->r_offset / 8] = rel->r_addend;
-
-	  /* Mark the second slot of a GD or LD entry.
-	     -1 to indicate GD and -2 to indicate LD.  */
-	  if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_GD))
-	    ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -1;
-	  else if (tls_type == (TLS_EXPLICIT | TLS_TLS | TLS_LD))
-	    ppc64_sec->u.toc.symndx[rel->r_offset / 8 + 1] = -2;
-	  goto dodyn;
-
-	case R_PPC64_TPREL16:
-	case R_PPC64_TPREL16_LO:
-	case R_PPC64_TPREL16_HI:
-	case R_PPC64_TPREL16_HA:
-	case R_PPC64_TPREL16_DS:
-	case R_PPC64_TPREL16_LO_DS:
-	case R_PPC64_TPREL16_HIGH:
-	case R_PPC64_TPREL16_HIGHA:
-	case R_PPC64_TPREL16_HIGHER:
-	case R_PPC64_TPREL16_HIGHERA:
-	case R_PPC64_TPREL16_HIGHEST:
-	case R_PPC64_TPREL16_HIGHESTA:
-	  if (bfd_link_pic (info))
-	    {
-	      info->flags |= DF_STATIC_TLS;
-	      goto dodyn;
-	    }
-	  break;
-
-	case R_PPC64_ADDR64:
-	  if (opd_sym_map != NULL
-	      && rel + 1 < rel_end
-	      && ELF64_R_TYPE ((rel + 1)->r_info) == R_PPC64_TOC)
-	    {
-	      if (h != NULL)
-		((struct ppc_link_hash_entry *) h)->is_func = 1;
-	      else
-		{
-		  asection *s;
-		  Elf_Internal_Sym *isym;
-
-		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
-						abfd, r_symndx);
-		  if (isym == NULL)
-		    return FALSE;
-
-		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
-		  if (s != NULL && s != sec)
-		    opd_sym_map[OPD_NDX (rel->r_offset)] = s;
-		}
-	    }
-	  /* Fall through.  */
-
-	case R_PPC64_ADDR16:
-	case R_PPC64_ADDR16_DS:
-	case R_PPC64_ADDR16_HA:
-	case R_PPC64_ADDR16_HI:
-	case R_PPC64_ADDR16_HIGH:
-	case R_PPC64_ADDR16_HIGHA:
-	case R_PPC64_ADDR16_HIGHER:
-	case R_PPC64_ADDR16_HIGHERA:
-	case R_PPC64_ADDR16_HIGHEST:
-	case R_PPC64_ADDR16_HIGHESTA:
-	case R_PPC64_ADDR16_LO:
-	case R_PPC64_ADDR16_LO_DS:
-	  if (h != NULL && !bfd_link_pic (info) && abiversion (abfd) != 1
-	      && rel->r_addend == 0)
-	    {
-	      /* We may need a .plt entry if this reloc refers to a
-		 function in a shared lib.  */
-	      if (!update_plt_info (abfd, &h->plt.plist, rel->r_addend))
-		return FALSE;
-	      h->pointer_equality_needed = 1;
-	    }
-	  /* Fall through.  */
-
-	case R_PPC64_REL30:
-	case R_PPC64_REL32:
-	case R_PPC64_REL64:
-	case R_PPC64_ADDR32:
-	case R_PPC64_UADDR16:
-	case R_PPC64_UADDR32:
-	case R_PPC64_UADDR64:
-	case R_PPC64_TOC:
-	  if (h != NULL && !bfd_link_pic (info))
-	    /* We may need a copy reloc.  */
-	    h->non_got_ref = 1;
-
-	  /* Don't propagate .opd relocs.  */
-	  if (NO_OPD_RELOCS && opd_sym_map != NULL)
-	    break;
-
-	  /* If we are creating a shared library, and this is a reloc
-	     against a global symbol, or a non PC relative reloc
-	     against a local symbol, then we need to copy the reloc
-	     into the shared library.  However, if we are linking with
-	     -Bsymbolic, we do not need to copy a reloc against a
-	     global symbol which is defined in an object we are
-	     including in the link (i.e., DEF_REGULAR is set).  At
-	     this point we have not seen all the input files, so it is
-	     possible that DEF_REGULAR is not set now but will be set
-	     later (it is never cleared).  In case of a weak definition,
-	     DEF_REGULAR may be cleared later by a strong definition in
-	     a shared library.  We account for that possibility below by
-	     storing information in the dyn_relocs field of the hash
-	     table entry.  A similar situation occurs when creating
-	     shared libraries and symbol visibility changes render the
-	     symbol local.
-
-	     If on the other hand, we are creating an executable, we
-	     may need to keep relocations for symbols satisfied by a
-	     dynamic library if we manage to avoid copy relocs for the
-	     symbol.  */
-	dodyn:
-	  if ((bfd_link_pic (info)
-	       && (must_be_dyn_reloc (info, r_type)
-		   || (h != NULL
-		       && (!SYMBOLIC_BIND (info, h)
-			   || h->root.type == bfd_link_hash_defweak
-			   || !h->def_regular))))
-	      || (ELIMINATE_COPY_RELOCS
-		  && !bfd_link_pic (info)
-		  && h != NULL
-		  && (h->root.type == bfd_link_hash_defweak
-		      || !h->def_regular))
-	      || (!bfd_link_pic (info)
-		  && ifunc != NULL))
-	    {
-	      /* We must copy these reloc types into the output file.
-		 Create a reloc section in dynobj and make room for
-		 this reloc.  */
-	      if (sreloc == NULL)
-		{
-		  sreloc = _bfd_elf_make_dynamic_reloc_section
-		    (sec, htab->elf.dynobj, 3, abfd, /*rela?*/ TRUE);
-
-		  if (sreloc == NULL)
-		    return FALSE;
-		}
-
-	      /* If this is a global symbol, we count the number of
-		 relocations we need for this symbol.  */
-	      if (h != NULL)
-		{
-		  struct elf_dyn_relocs *p;
-		  struct elf_dyn_relocs **head;
-
-		  head = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
-		  p = *head;
-		  if (p == NULL || p->sec != sec)
-		    {
-		      p = bfd_alloc (htab->elf.dynobj, sizeof *p);
-		      if (p == NULL)
-			return FALSE;
-		      p->next = *head;
-		      *head = p;
-		      p->sec = sec;
-		      p->count = 0;
-		      p->pc_count = 0;
-		    }
-		  p->count += 1;
-		  if (!must_be_dyn_reloc (info, r_type))
-		    p->pc_count += 1;
-		}
-	      else
-		{
-		  /* Track dynamic relocs needed for local syms too.
-		     We really need local syms available to do this
-		     easily.  Oh well.  */
-		  struct ppc_dyn_relocs *p;
-		  struct ppc_dyn_relocs **head;
-		  bfd_boolean is_ifunc;
-		  asection *s;
-		  void *vpp;
-		  Elf_Internal_Sym *isym;
-
-		  isym = bfd_sym_from_r_symndx (&htab->sym_cache,
-						abfd, r_symndx);
-		  if (isym == NULL)
-		    return FALSE;
-
-		  s = bfd_section_from_elf_index (abfd, isym->st_shndx);
-		  if (s == NULL)
-		    s = sec;
-
-		  vpp = &elf_section_data (s)->local_dynrel;
-		  head = (struct ppc_dyn_relocs **) vpp;
-		  is_ifunc = ELF_ST_TYPE (isym->st_info) == STT_GNU_IFUNC;
-		  p = *head;
-		  if (p != NULL && p->sec == sec && p->ifunc != is_ifunc)
-		    p = p->next;
-		  if (p == NULL || p->sec != sec || p->ifunc != is_ifunc)
-		    {
-		      p = bfd_alloc (htab->elf.dynobj, sizeof *p);
-		      if (p == NULL)
-			return FALSE;
-		      p->next = *head;
-		      *head = p;
-		      p->sec = sec;
-		      p->ifunc = is_ifunc;
-		      p->count = 0;
-		    }
-		  p->count += 1;
-		}
-	    }
-	  break;
-
-	default:
-	  break;
-	}
-    }
-
-  return TRUE;
-}
-
-/* Merge backend specific data from an object file to the output
-   object file when linking.  */
-
-static bfd_boolean
-ppc64_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
-{
-  bfd *obfd = info->output_bfd;
-  unsigned long iflags, oflags;
-
-  if ((ibfd->flags & BFD_LINKER_CREATED) != 0)
-    return TRUE;
-
-  if (!is_ppc64_elf (ibfd) || !is_ppc64_elf (obfd))
-    return TRUE;
-
-  if (!_bfd_generic_verify_endian_match (ibfd, info))
-    return FALSE;
-
-  iflags = elf_elfheader (ibfd)->e_flags;
-  oflags = elf_elfheader (obfd)->e_flags;
-
-  if (iflags & ~EF_PPC64_ABI)
-    {
-      _bfd_error_handler
-	/* xgettext:c-format */
-	(_("%B uses unknown e_flags 0x%lx"), ibfd, iflags);
-      bfd_set_error (bfd_error_bad_value);
-      return FALSE;
-    }
-  else if (iflags != oflags && iflags != 0)
-    {
-      _bfd_error_handler
-	/* xgettext:c-format */
-	(_("%B: ABI version %ld is not compatible with ABI version %ld output"),
-	 ibfd, iflags, oflags);
-      bfd_set_error (bfd_error_bad_value);
-      return FALSE;
-    }
-
-  _bfd_elf_ppc_merge_fp_attributes (ibfd, info);
-
-  /* Merge Tag_compatibility attributes and any common GNU ones.  */
-  _bfd_elf_merge_object_attributes (ibfd, info);
-
-  return TRUE;
-}
-
-static bfd_boolean
-ppc64_elf_print_private_bfd_data (bfd *abfd, void *ptr)
-{
-  /* Print normal ELF private data.  */
-  _bfd_elf_print_private_bfd_data (abfd, ptr);
-
-  if (elf_elfheader (abfd)->e_flags != 0)
-    {
-      FILE *file = ptr;
-
-      fprintf (file, _("private flags = 0x%lx:"),
-	       elf_elfheader (abfd)->e_flags);
-
-      if ((elf_elfheader (abfd)->e_flags & EF_PPC64_ABI) != 0)
-	fprintf (file, _(" [abiv%ld]"),
-		 elf_elfheader (abfd)->e_flags & EF_PPC64_ABI);
-      fputc ('\n', file);
-    }
-
-  return TRUE;
-}
-
-/* OFFSET in OPD_SEC specifies a function descriptor.  Return the address
-   of the code entry point, and its section, which must be in the same
-   object as OPD_SEC.  Returns (bfd_vma) -1 on error.  */
-
-static bfd_vma
-opd_entry_value (asection *opd_sec,
-		 bfd_vma offset,
-		 asection **code_sec,
-		 bfd_vma *code_off,
-		 bfd_boolean in_code_sec)
-{
-  bfd *opd_bfd = opd_sec->owner;
-  Elf_Internal_Rela *relocs;
-  Elf_Internal_Rela *lo, *hi, *look;
-  bfd_vma val;
-
-  /* No relocs implies we are linking a --just-symbols object, or looking
-     at a final linked executable with addr2line or somesuch.  */
-  if (opd_sec->reloc_count == 0)
-    {
-      bfd_byte *contents = ppc64_elf_tdata (opd_bfd)->opd.contents;
-
-      if (contents == NULL)
-	{
-	  if (!bfd_malloc_and_get_section (opd_bfd, opd_sec, &contents))
-	    return (bfd_vma) -1;
-	  ppc64_elf_tdata (opd_bfd)->opd.contents = contents;
-	}
-
-      /* PR 17512: file: 64b9dfbb.  */
-      if (offset + 7 >= opd_sec->size || offset + 7 < offset)
-	return (bfd_vma) -1;
-
-      val = bfd_get_64 (opd_bfd, contents + offset);
-      if (code_sec != NULL)
-	{
-	  asection *sec, *likely = NULL;
-
-	  if (in_code_sec)
-	    {
-	      sec = *code_sec;
-	      if (sec->vma <= val
-		  && val < sec->vma + sec->size)
-		likely = sec;
-	      else
-		val = -1;
-	    }
-	  else
-	    for (sec = opd_bfd->sections; sec != NULL; sec = sec->next)
-	      if (sec->vma <= val
-		  && (sec->flags & SEC_LOAD) != 0
-		  && (sec->flags & SEC_ALLOC) != 0)
-		likely = sec;
-	  if (likely != NULL)
-	    {
-	      *code_sec = likely;
-	      if (code_off != NULL)
-		*code_off = val - likely->vma;
-	    }
-	}
-      return val;
-    }
-
-  BFD_ASSERT (is_ppc64_elf (opd_bfd));
-
-  relocs = ppc64_elf_tdata (opd_bfd)->opd.relocs;
-  if (relocs == NULL)
-    relocs = _bfd_elf_link_read_relocs (opd_bfd, opd_sec, NULL, NULL, TRUE);
-  /* PR 17512: file: df8e1fd6.  */
-  if (relocs == NULL)
-    return (bfd_vma) -1;
-
-  /* Go find the opd reloc at the sym address.  */
-  lo = relocs;
-  hi = lo + opd_sec->reloc_count - 1; /* ignore last reloc */
-  val = (bfd_vma) -1;
-  while (lo < hi)
-    {
-      look = lo + (hi - lo) / 2;
-      if (look->r_offset < offset)
-	lo = look + 1;
-      else if (look->r_offset > offset)
-	hi = look;
-      else
-	{
-	  Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (opd_bfd);
-
-	  if (ELF64_R_TYPE (look->r_info) == R_PPC64_ADDR64
-	      && ELF64_R_TYPE ((look + 1)->r_info) == R_PPC64_TOC)
-	    {
-	      unsigned long symndx = ELF64_R_SYM (look->r_info);
-	      asection *sec = NULL;
-
-	      if (symndx >= symtab_hdr->sh_info
-		  && elf_sym_hashes (opd_bfd) != NULL)
-		{
-		  struct elf_link_hash_entry **sym_hashes;
-		  struct elf_link_hash_entry *rh;
-
-		  sym_hashes = elf_sym_hashes (opd_bfd);
-		  rh = sym_hashes[symndx - symtab_hdr->sh_info];
-		  if (rh != NULL)
-		    {
-		      rh = elf_follow_link (rh);
-		      if (rh->root.type != bfd_link_hash_defined
-			  && rh->root.type != bfd_link_hash_defweak)
-			break;
-		      if (rh->root.u.def.section->owner == opd_bfd)
-			{
-			  val = rh->root.u.def.value;
-			  sec = rh->root.u.def.section;
-			}
-		    }
-		}
-
-	      if (sec == NULL)
-		{
-		  Elf_Internal_Sym *sym;
-
-		  if (symndx < symtab_hdr->sh_info)
-		    {
-		      sym = (Elf_Internal_Sym *) symtab_hdr->contents;
-		      if (sym == NULL)
-			{
-			  size_t symcnt = symtab_hdr->sh_info;
-			  sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr,
-						      symcnt, 0,
-						      NULL, NULL, NULL);
-			  if (sym == NULL)
-			    break;
-			  symtab_hdr->contents = (bfd_byte *) sym;
-			}
-		      sym += symndx;
-		    }
-		  else
-		    {
-		      sym = bfd_elf_get_elf_syms (opd_bfd, symtab_hdr,
-						  1, symndx,
-						  NULL, NULL, NULL);
-		      if (sym == NULL)
-			break;
-		    }
-		  sec = bfd_section_from_elf_index (opd_bfd, sym->st_shndx);
-		  if (sec == NULL)
-		    break;
-		  BFD_ASSERT ((sec->flags & SEC_MERGE) == 0);
-		  val = sym->st_value;
-		}
-
-	      val += look->r_addend;
-	      if (code_off != NULL)
-		*code_off = val;
-	      if (code_sec != NULL)
-		{
-		  if (in_code_sec && *code_sec != sec)
-		    return -1;
-		  else
-		    *code_sec = sec;
-		}
-	      if (sec->output_section != NULL)
-		val += sec->output_section->vma + sec->output_offset;
-	    }
-	  break;
-	}
-    }
-
-  return val;
-}
-
-/* If the ELF symbol SYM might be a function in SEC, return the
-   function size and set *CODE_OFF to the function's entry point,
-   otherwise return zero.  */
-
-static bfd_size_type
-ppc64_elf_maybe_function_sym (const asymbol *sym, asection *sec,
-			      bfd_vma *code_off)
-{
-  bfd_size_type size;
-
-  if ((sym->flags & (BSF_SECTION_SYM | BSF_FILE | BSF_OBJECT
-		     | BSF_THREAD_LOCAL | BSF_RELC | BSF_SRELC)) != 0)
-    return 0;
-
-  size = 0;
-  if (!(sym->flags & BSF_SYNTHETIC))
-    size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size;
-
-  if (strcmp (sym->section->name, ".opd") == 0)
-    {
-      struct _opd_sec_data *opd = get_opd_info (sym->section);
-      bfd_vma symval = sym->value;
-
-      if (opd != NULL
-	  && opd->adjust != NULL
-	  && elf_section_data (sym->section)->relocs != NULL)
-	{
-	  /* opd_entry_value will use cached relocs that have been
-	     adjusted, but with raw symbols.  That means both local
-	     and global symbols need adjusting.  */
-	  long adjust = opd->adjust[OPD_NDX (symval)];
-	  if (adjust == -1)
-	    return 0;
-	  symval += adjust;
-	}
-
-      if (opd_entry_value (sym->section, symval,
-			   &sec, code_off, TRUE) == (bfd_vma) -1)
-	return 0;
-      /* An old ABI binary with dot-syms has a size of 24 on the .opd
-	 symbol.  This size has nothing to do with the code size of the
-	 function, which is what we're supposed to return, but the
-	 code size isn't available without looking up the dot-sym.
-	 However, doing that would be a waste of time particularly
-	 since elf_find_function will look at the dot-sym anyway.
-	 Now, elf_find_function will keep the largest size of any
-	 function sym found at the code address of interest, so return
-	 1 here to avoid it incorrectly caching a larger function size
-	 for a small function.  This does mean we return the wrong
-	 size for a new-ABI function of size 24, but all that does is
-	 disable caching for such functions.  */
-      if (size == 24)
-	size = 1;
-    }
-  else
-    {
-      if (sym->section != sec)
-	return 0;
-      *code_off = sym->value;
-    }
-  if (size == 0)
-    size = 1;
-  return size;
-}
-
-/* Return true if symbol is defined in a regular object file.  */
-
-static bfd_boolean
-is_static_defined (struct elf_link_hash_entry *h)
-{
-  return ((h->root.type == bfd_link_hash_defined
-	   || h->root.type == bfd_link_hash_defweak)
-	  && h->root.u.def.section != NULL
-	  && h->root.u.def.section->output_section != NULL);
-}
-
-/* If FDH is a function descriptor symbol, return the associated code
-   entry symbol if it is defined.  Return NULL otherwise.  */
-
-static struct ppc_link_hash_entry *
-defined_code_entry (struct ppc_link_hash_entry *fdh)
-{
-  if (fdh->is_func_descriptor)
-    {
-      struct ppc_link_hash_entry *fh = ppc_follow_link (fdh->oh);
-      if (fh->elf.root.type == bfd_link_hash_defined
-	  || fh->elf.root.type == bfd_link_hash_defweak)
-	return fh;
-    }
-  return NULL;
-}
-
-/* If FH is a function code entry symbol, return the associated
-   function descriptor symbol if it is defined.  Return NULL otherwise.  */
-
-static struct ppc_link_hash_entry *
-defined_func_desc (struct ppc_link_hash_entry *fh)
-{
-  if (fh->oh != NULL
-      && fh->oh->is_func_descriptor)
-    {
-      struct ppc_link_hash_entry *fdh = ppc_follow_link (fh->oh);
-      if (fdh->elf.root.type == bfd_link_hash_defined
-	  || fdh->elf.root.type == bfd_link_hash_defweak)
-	return fdh;
-    }
-  return NULL;
-}
-
-static bfd_boolean func_desc_adjust (struct elf_link_hash_entry *, void *);
-
-/* Garbage collect sections, after first dealing with dot-symbols.  */
-
-static bfd_boolean
-ppc64_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
-{
-  struct ppc_link_hash_table *htab = ppc_hash_table (info);
-
-  if (htab != NULL && htab->need_func_desc_adj)
-    {
-      elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
-      htab->need_func_desc_adj = 0;
-    }
-  return bfd_elf_gc_sections (abfd, info);
-}
-
-/* Mark all our entry sym sections, both opd and code section.  */
-
-static void
-ppc64_elf_gc_keep (struct bfd_link_info *info)
-{
-  struct ppc_link_hash_table *htab = ppc_hash_table (info);
-  struct bfd_sym_chain *sym;
-
-  if (htab == NULL)
-    return;
-
-  for (sym = info->gc_sym_list; sym != NULL; sym = sym->next)
-    {
-      struct ppc_link_hash_entry *eh, *fh;
-      asection *sec;
-
-      eh = (struct ppc_link_hash_entry *)
-	elf_link_hash_lookup (&htab->elf, sym->name, FALSE, FALSE, TRUE);
-      if (eh == NULL)
-	continue;
-      if (eh->elf.root.type != bfd_link_hash_defined
-	  && eh->elf.root.type != bfd_link_hash_defweak)
-	continue;
-
-      fh = defined_code_entry (eh);
-      if (fh != NULL)
-	{
-	  sec = fh->elf.root.u.def.section;
-	  sec->flags |= SEC_KEEP;
-	}
-      else if (get_opd_info (eh->elf.root.u.def.section) != NULL
-	       && opd_entry_value (eh->elf.root.u.def.section,
-				   eh->elf.root.u.def.value,
-				   &sec, NULL, FALSE) != (bfd_vma) -1)
-	sec->flags |= SEC_KEEP;
-
-      sec = eh->elf.root.u.def.section;
-      sec->flags |= SEC_KEEP;
-    }
-}
-
-/* Mark sections containing dynamically referenced symbols.  When
-   building shared libraries, we must assume that any visible symbol is
-   referenced.  */
-
-static bfd_boolean
-ppc64_elf_gc_mark_dynamic_ref (struct elf_link_hash_entry *h, void *inf)
-{
-  struct bfd_link_info *info = (struct bfd_link_info *) inf;
-  struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
-  struct ppc_link_hash_entry *fdh;
-  struct bfd_elf_dynamic_list *d = info->dynamic_list;
-
-  /* Dynamic linking info is on the func descriptor sym.  */
-  fdh = defined_func_desc (eh);
-  if (fdh != NULL)
-    eh = fdh;
-
-  if ((eh->elf.root.type == bfd_link_hash_defined
-       || eh->elf.root.type == bfd_link_hash_defweak)
-      && (eh->elf.ref_dynamic
-	  || ((eh->elf.def_regular || ELF_COMMON_DEF_P (&eh->elf))
-	      && ELF_ST_VISIBILITY (eh->elf.other) != STV_INTERNAL
-	      && ELF_ST_VISIBILITY (eh->elf.other) != STV_HIDDEN
-	      && (!bfd_link_executable (info)
-		  || info->gc_keep_exported
-		  || info->export_dynamic
-		  || (eh->elf.dynamic
-		      && d != NULL
-		      && (*d->match) (&d->head, NULL, eh->elf.root.root.string)))
-	      && (eh->elf.versioned >= versioned
-		  || !bfd_hide_sym_by_version (info->version_info,
-					       eh->elf.root.root.string)))))
-    {
-      asection *code_sec;
-      struct ppc_link_hash_entry *fh;
-
-      eh->elf.root.u.def.section->flags |= SEC_KEEP;
-
-      /* Function descriptor syms cause the associated
-	 function code sym section to be marked.  */
-      fh = defined_code_entry (eh);
-      if (fh != NULL)
-	{
-	  code_sec = fh->elf.root.u.def.section;
-	  code_sec->flags |= SEC_KEEP;
-	}
-      else if (get_opd_info (eh->elf.root.u.def.section) != NULL
-	       && opd_entry_value (eh->elf.root.u.def.section,
-				   eh->elf.root.u.def.value,
-				   &code_sec, NULL, FALSE) != (bfd_vma) -1)
-	code_sec->flags |= SEC_KEEP;
-    }
-
-  return TRUE;
-}
-
-/* Return the section that should be marked against GC for a given
-   relocation.  */
-
-static asection *
-ppc64_elf_gc_mark_hook (asection *sec,
-			struct bfd_link_info *info,
-			Elf_Internal_Rela *rel,
-			struct elf_link_hash_entry *h,
-			Elf_Internal_Sym *sym)
-{
-  asection *rsec;
-
-  /* Syms return NULL if we're marking .opd, so we avoid marking all
-     function sections, as all functions are referenced in .opd.  */
-  rsec = NULL;
-  if (get_opd_info (sec) != NULL)
-    return rsec;
-
-  if (h != NULL)
-    {
-      enum elf_ppc64_reloc_type r_type;
-      struct ppc_link_hash_entry *eh, *fh, *fdh;
-
-      r_type = ELF64_R_TYPE (rel->r_info);
-      switch (r_type)
-	{
-	case R_PPC64_GNU_VTINHERIT:
-	case R_PPC64_GNU_VTENTRY:
-	  break;
-
-	default:
-	  switch (h->root.type)
-	    {
-	    case bfd_link_hash_defined:
-	    case bfd_link_hash_defweak:
-	      eh = (struct ppc_link_hash_entry *) h;
-	      fdh = defined_func_desc (eh);
-	      if (fdh != NULL)
-		{
-		  /* -mcall-aixdesc code references the dot-symbol on
-		     a call reloc.  Mark the function descriptor too
-		     against garbage collection.  */
-		  fdh->elf.mark = 1;
-		  if (fdh->elf.u.weakdef != NULL)
-		    fdh->elf.u.weakdef->mark = 1;
-		  eh = fdh;
-		}
-
-	      /* Function descriptor syms cause the associated
-		 function code sym section to be marked.  */
-	      fh = defined_code_entry (eh);
-	      if (fh != NULL)
-		{
-		  /* They also mark their opd section.  */
-		  eh->elf.root.u.def.section->gc_mark = 1;
-
-		  rsec = fh->elf.root.u.def.section;
-		}
-	      else if (get_opd_info (eh->elf.root.u.def.section) != NULL
-		       && opd_entry_value (eh->elf.root.u.def.section,
-					   eh->elf.root.u.def.value,
-					   &rsec, NULL, FALSE) != (bfd_vma) -1)
-		eh->elf.root.u.def.section->gc_mark = 1;
-	      else
-		rsec = h->root.u.def.section;
-	      break;
-
-	    case bfd_link_hash_common:
-	      rsec = h->root.u.c.p->section;
-	      break;
-
-	    default:
-	      return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
-	    }
-	}
-    }
-  else
-    {
-      struct _opd_sec_data *opd;
-
-      rsec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-      opd = get_opd_info (rsec);
-      if (opd != NULL && opd->func_sec != NULL)
-	{
-	  rsec->gc_mark = 1;
-
-	  rsec = opd->func_sec[OPD_NDX (sym->st_value + rel->r_addend)];
-	}
-    }
-
-  return rsec;
-}
-
-/* Update the .got, .plt. and dynamic reloc reference counts for the
-   section being removed.  */
-
-static bfd_boolean
-ppc64_elf_gc_sweep_hook (bfd *abfd, struct bfd_link_info *info,
-			 asection *sec, const Elf_Internal_Rela *relocs)
-{
-  struct ppc_link_hash_table *htab;
-  Elf_Internal_Shdr *symtab_hdr;
-  struct elf_link_hash_entry **sym_hashes;
-  struct got_entry **local_got_ents;
-  const Elf_Internal_Rela *rel, *relend;
-
-  if (bfd_link_relocatable (info))
-    return TRUE;
-
-  if ((sec->flags & SEC_ALLOC) == 0)
-    return TRUE;
-
-  elf_section_data (sec)->local_dynrel = NULL;
-
-  htab = ppc_hash_table (info);
-  if (htab == NULL)
-    return FALSE;
-
-  symtab_hdr = &elf_symtab_hdr (abfd);
-  sym_hashes = elf_sym_hashes (abfd);
-  local_got_ents = elf_local_got_ents (abfd);
-
-  relend = relocs + sec->reloc_count;
-  for (rel = relocs; rel < relend; rel++)
-    {
-      unsigned long r_symndx;
-      enum elf_ppc64_reloc_type r_type;
-      struct elf_link_hash_entry *h = NULL;
-      struct plt_entry **plt_list;
-      unsigned char tls_type = 0;
-
-      r_symndx = ELF64_R_SYM (rel->r_info);
-      r_type = ELF64_R_TYPE (rel->r_info);
-      if (r_symndx >= symtab_hdr->sh_info)
-	{
-	  struct ppc_link_hash_entry *eh;
-	  struct elf_dyn_relocs **pp;
-	  struct elf_dyn_relocs *p;
-
-	  h = sym_hashes[r_symndx - symtab_hdr->sh_info];
-	  h = elf_follow_link (h);
-	  eh = (struct ppc_link_hash_entry *) h;
-
-	  for (pp = &eh->dyn_relocs; (p = *pp) != NULL; pp = &p->next)
-	    if (p->sec == sec)
-	      {
-		/* Everything must go for SEC.  */
-		*pp = p->next;
-		break;
-	      }
-	}
-
-      switch (r_type)
-	{
-	case R_PPC64_GOT_TLSLD16:
-	case R_PPC64_GOT_TLSLD16_LO:
-	case R_PPC64_GOT_TLSLD16_HI:
-	case R_PPC64_GOT_TLSLD16_HA:
-	  tls_type = TLS_TLS | TLS_LD;
-	  goto dogot;
-
-	case R_PPC64_GOT_TLSGD16:
-	case R_PPC64_GOT_TLSGD16_LO:
-	case R_PPC64_GOT_TLSGD16_HI:
-	case R_PPC64_GOT_TLSGD16_HA:
-	  tls_type = TLS_TLS | TLS_GD;
-	  goto dogot;
-
-	case R_PPC64_GOT_TPREL16_DS:
-	case R_PPC64_GOT_TPREL16_LO_DS:
-	case R_PPC64_GOT_TPREL16_HI:
-	case R_PPC64_GOT_TPREL16_HA:
-	  tls_type = TLS_TLS | TLS_TPREL;
-	  goto dogot;
-
-	case R_PPC64_GOT_DTPREL16_DS:
-	case R_PPC64_GOT_DTPREL16_LO_DS:
-	case R_PPC64_GOT_DTPREL16_HI:
-	case R_PPC64_GOT_DTPREL16_HA:
-	  tls_type = TLS_TLS | TLS_DTPREL;
-	  goto dogot;
-
-	case R_PPC64_GOT16:
-	case R_PPC64_GOT16_DS:
-	case R_PPC64_GOT16_HA:
-	case R_PPC64_GOT16_HI:
-	case R_PPC64_GOT16_LO:
-	case R_PPC64_GOT16_LO_DS:
-	dogot:
-	  {
-	    struct got_entry *ent;
-
-	    if (h != NULL)
-	      ent = h->got.glist;
-	    else
-	      ent = local_got_ents[r_symndx];
-
-	    for (; ent != NULL; ent = ent->next)
-	      if (ent->addend == rel->r_addend
-		  && ent->owner == abfd
-		  && ent->tls_type == tls_type)
-		break;
-	    if (ent == NULL)
-	      abort ();
-	    if (ent->got.refcount > 0)
-	      ent->got.refcount -= 1;
-	  }
-	  break;
-
-	case R_PPC64_PLT16_HA:
-	case R_PPC64_PLT16_HI:
-	case R_PPC64_PLT16_LO:
-	case R_PPC64_PLT32:
-	case R_PPC64_PLT64:
-	case R_PPC64_REL14:
-	case R_PPC64_REL14_BRNTAKEN:
-	case R_PPC64_REL14_BRTAKEN:
-	case R_PPC64_REL24:
-	  plt_list = NULL;
-	  if (h != NULL)
-	    plt_list = &h->plt.plist;
-	  else if (local_got_ents != NULL)
-	    {
-	      struct plt_entry **local_plt = (struct plt_entry **)
-		(local_got_ents + symtab_hdr->sh_info);
-	      unsigned char *local_got_tls_masks = (unsigned char *)
-		(local_plt + symtab_hdr->sh_info);
-	      if ((local_got_tls_masks[r_symndx] & PLT_IFUNC) != 0)
-		plt_list = local_plt + r_symndx;
-	    }
-	  if (plt_list)
-	    {
-	      struct plt_entry *ent;
-
-	      for (ent = *plt_list; ent != NULL; ent = ent->next)
-		if (ent->addend == rel->r_addend)
-		  break;
-	      if (ent != NULL && ent->plt.refcount > 0)
-		ent->plt.refcount -= 1;
-	    }
-	  break;
-
-	default:
-	  break;
-	}
-    }
-  return TRUE;
-}
-
-/* The maximum size of .sfpr.  */
-#define SFPR_MAX (218*4)
-
-struct sfpr_def_parms
-{
-  const char name[12];
-  unsigned char lo, hi;
-  bfd_byte * (*write_ent) (bfd *, bfd_byte *, int);
-  bfd_byte * (*write_tail) (bfd *, bfd_byte *, int);
-};
-
-/* Auto-generate _save*, _rest* functions in .sfpr.
-   If STUB_SEC is non-null, define alias symbols in STUB_SEC
-   instead.  */
-
-static bfd_boolean
-sfpr_define (struct bfd_link_info *info,
-	     const struct sfpr_def_parms *parm,
-	     asection *stub_sec)
-{
-  struct ppc_link_hash_table *htab = ppc_hash_table (info);
-  unsigned int i;
-  size_t len = strlen (parm->name);
-  bfd_boolean writing = FALSE;
-  char sym[16];
-
-  if (htab == NULL)
-    return FALSE;
-
-  memcpy (sym, parm->name, len);
-  sym[len + 2] = 0;
-
-  for (i = parm->lo; i <= parm->hi; i++)
-    {
-      struct ppc_link_hash_entry *h;
-
-      sym[len + 0] = i / 10 + '0';
-      sym[len + 1] = i % 10 + '0';
-      h = (struct ppc_link_hash_entry *)
-	elf_link_hash_lookup (&htab->elf, sym, writing, TRUE, TRUE);
-      if (stub_sec != NULL)
-	{
-	  if (h != NULL
-	      && h->elf.root.type == bfd_link_hash_defined
-	      && h->elf.root.u.def.section == htab->sfpr)
-	    {
-	      struct elf_link_hash_entry *s;
-	      char buf[32];
-	      sprintf (buf, "%08x.%s", stub_sec->id & 0xffffffff, sym);
-	      s = elf_link_hash_lookup (&htab->elf, buf, TRUE, TRUE, FALSE);
-	      if (s == NULL)
-		return FALSE;
-	      if (s->root.type == bfd_link_hash_new
-		  || (s->root.type = bfd_link_hash_defined
-		      && s->root.u.def.section == stub_sec))
-		{
-		  s->root.type = bfd_link_hash_defined;
-		  s->root.u.def.section = stub_sec;
-		  s->root.u.def.value = (stub_sec->size
-					 + h->elf.root.u.def.value);
-		  s->ref_regular = 1;
-		  s->def_regular = 1;
-		  s->ref_regular_nonweak = 1;
-		  s->forced_local = 1;
-		  s->non_elf = 0;
-		  s->root.linker_def = 1;
-		}
-	    }
-	  continue;
-	}
-      if (h != NULL)
-	{
-	  h->save_res = 1;
-	  if (!h->elf.def_regular)
-	    {
-	      h->elf.root.type = bfd_link_hash_defined;
-	      h->elf.root.u.def.section = htab->sfpr;
-	      h->elf.root.u.def.value = htab->sfpr->size;
-	      h->elf.type = STT_FUNC;
-	      h->elf.def_regular = 1;
-	      h->elf.non_elf = 0;
-	      _bfd_elf_link_hash_hide_symbol (info, &h->elf, TRUE);
-	      writing = TRUE;
-	      if (htab->sfpr->contents == NULL)
-		{
-		  htab->sfpr->contents = bfd_alloc (htab->elf.dynobj, SFPR_MAX);
-		  if (htab->sfpr->contents == NULL)
-		    return FALSE;
-		}
-	    }
-	}
-      if (writing)
-	{
-	  bfd_byte *p = htab->sfpr->contents + htab->sfpr->size;
-	  if (i != parm->hi)
-	    p = (*parm->write_ent) (htab->elf.dynobj, p, i);
-	  else
-	    p = (*parm->write_tail) (htab->elf.dynobj, p, i);
-	  htab->sfpr->size = p - htab->sfpr->contents;
-	}
-    }
-
-  return TRUE;
-}
-
-static bfd_byte *
-savegpr0 (bfd *abfd, bfd_byte *p, int r)
-{
-  bfd_put_32 (abfd, STD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
-  return p + 4;
-}
-
-static bfd_byte *
-savegpr0_tail (bfd *abfd, bfd_byte *p, int r)
-{
-  p = savegpr0 (abfd, p, r);
-  bfd_put_32 (abfd, STD_R0_0R1 + STK_LR, p);
-  p = p + 4;
-  bfd_put_32 (abfd, BLR, p);
-  return p + 4;
-}
-
-static bfd_byte *
-restgpr0 (bfd *abfd, bfd_byte *p, int r)
-{
-  bfd_put_32 (abfd, LD_R0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
-  return p + 4;
-}
-
-static bfd_byte *
-restgpr0_tail (bfd *abfd, bfd_byte *p, int r)
-{
-  bfd_put_32 (abfd, LD_R0_0R1 + STK_LR, p);
-  p = p + 4;
-  p = restgpr0 (abfd, p, r);
-  bfd_put_32 (abfd, MTLR_R0, p);
-  p = p + 4;
-  if (r == 29)
-    {
-      p = restgpr0 (abfd, p, 30);
-      p = restgpr0 (abfd, p, 31);
-    }
-  bfd_put_32 (abfd, BLR, p);
-  return p + 4;
-}
-
-static bfd_byte *
-savegpr1 (bfd *abfd, bfd_byte *p, int r)
-{
-  bfd_put_32 (abfd, STD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
-  return p + 4;
-}
-
-static bfd_byte *
-savegpr1_tail (bfd *abfd, bfd_byte *p, int r)
-{
-  p = savegpr1 (abfd, p, r);
-  bfd_put_32 (abfd, BLR, p);
-  return p + 4;
-}
-
-static bfd_byte *
-restgpr1 (bfd *abfd, bfd_byte *p, int r)
-{
-  bfd_put_32 (abfd, LD_R0_0R12 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
-  return p + 4;
-}
-
-static bfd_byte *
-restgpr1_tail (bfd *abfd, bfd_byte *p, int r)
-{
-  p = restgpr1 (abfd, p, r);
-  bfd_put_32 (abfd, BLR, p);
-  return p + 4;
-}
-
-static bfd_byte *
-savefpr (bfd *abfd, bfd_byte *p, int r)
-{
-  bfd_put_32 (abfd, STFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
-  return p + 4;
-}
-
-static bfd_byte *
-savefpr0_tail (bfd *abfd, bfd_byte *p, int r)
-{
-  p = savefpr (abfd, p, r);
-  bfd_put_32 (abfd, STD_R0_0R1 + STK_LR, p);
-  p = p + 4;
-  bfd_put_32 (abfd, BLR, p);
-  return p + 4;
-}
-
-static bfd_byte *
-restfpr (bfd *abfd, bfd_byte *p, int r)
-{
-  bfd_put_32 (abfd, LFD_FR0_0R1 + (r << 21) + (1 << 16) - (32 - r) * 8, p);
-  return p + 4;
-}
-
-static bfd_byte *
-restfpr0_tail (bfd *abfd, bfd_byte *p, int r)
-{
-  bfd_put_32 (abfd, LD_R0_0R1 + STK_LR, p);
-  p = p + 4;
-  p = restfpr (abfd, p, r);
-  bfd_put_32 (abfd, MTLR_R0, p);
-  p = p + 4;
-  if (r == 29)
-    {
-      p = restfpr (abfd, p, 30);
-      p = restfpr (abfd, p, 31);
-    }
-  bfd_put_32 (abfd, BLR, p);
-  return p + 4;
-}
-
-static bfd_byte *
-savefpr1_tail (bfd *abfd, bfd_byte *p, int r)
-{
-  p = savefpr (abfd, p, r);
-  bfd_put_32 (abfd, BLR, p);
-  return p + 4;
-}
-
-static bfd_byte *
-restfpr1_tail (bfd *abfd, bfd_byte *p, int r)
-{
-  p = restfpr (abfd, p, r);
-  bfd_put_32 (abfd, BLR, p);
-  return p + 4;
-}
-
-static bfd_byte *
-savevr (bfd *abfd, bfd_byte *p, int r)
-{
-  bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
-  p = p + 4;
-  bfd_put_32 (abfd, STVX_VR0_R12_R0 + (r << 21), p);
-  return p + 4;
-}
-
-static bfd_byte *
-savevr_tail (bfd *abfd, bfd_byte *p, int r)
-{
-  p = savevr (abfd, p, r);
-  bfd_put_32 (abfd, BLR, p);
-  return p + 4;
-}
-
-static bfd_byte *
-restvr (bfd *abfd, bfd_byte *p, int r)
-{
-  bfd_put_32 (abfd, LI_R12_0 + (1 << 16) - (32 - r) * 16, p);
-  p = p + 4;
-  bfd_put_32 (abfd, LVX_VR0_R12_R0 + (r << 21), p);
-  return p + 4;
-}
-
-static bfd_byte *
-restvr_tail (bfd *abfd, bfd_byte *p, int r)
-{
-  p = restvr (abfd, p, r);
-  bfd_put_32 (abfd, BLR, p);
-  return p + 4;
-}
-
-/* Called via elf_link_hash_traverse to transfer dynamic linking
-   information on function code symbol entries to their corresponding
-   function descriptor symbol entries.  */
-
-static bfd_boolean
-func_desc_adjust (struct elf_link_hash_entry *h, void *inf)
-{
-  struct bfd_link_info *info;
-  struct ppc_link_hash_table *htab;
-  struct ppc_link_hash_entry *fh;
-  struct ppc_link_hash_entry *fdh;
-  bfd_boolean force_local;
-
-  fh = (struct ppc_link_hash_entry *) h;
-  if (fh->elf.root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  if (!fh->is_func)
-    return TRUE;
-
-  if (fh->elf.root.root.string[0] != '.'
-      || fh->elf.root.root.string[1] == '\0')
-    return TRUE;
-
-  info = inf;
-  htab = ppc_hash_table (info);
-  if (htab == NULL)
-    return FALSE;
-
-  /* Find the corresponding function descriptor symbol.  */
-  fdh = lookup_fdh (fh, htab);
-
-  /* Resolve undefined references to dot-symbols as the value
-     in the function descriptor, if we have one in a regular object.
-     This is to satisfy cases like ".quad .foo".  Calls to functions
-     in dynamic objects are handled elsewhere.  */
-  if ((fh->elf.root.type == bfd_link_hash_undefined
-       || fh->elf.root.type == bfd_link_hash_undefweak)
-      && (fdh->elf.root.type == bfd_link_hash_defined
-	  || fdh->elf.root.type == bfd_link_hash_defweak)
-      && get_opd_info (fdh->elf.root.u.def.section) != NULL
-      && opd_entry_value (fdh->elf.root.u.def.section,
-			  fdh->elf.root.u.def.value,
-			  &fh->elf.root.u.def.section,
-			  &fh->elf.root.u.def.value, FALSE) != (bfd_vma) -1)
-    {
-      fh->elf.root.type = fdh->elf.root.type;
-      fh->elf.forced_local = 1;
-      fh->elf.def_regular = fdh->elf.def_regular;
-      fh->elf.def_dynamic = fdh->elf.def_dynamic;
-    }
-
-  if (!fh->elf.dynamic)
-    {
-      struct plt_entry *ent;
-
-      for (ent = fh->elf.plt.plist; ent != NULL; ent = ent->next)
-	if (ent->plt.refcount > 0)
-	  break;
-      if (ent == NULL)
-	return TRUE;
-    }
-
-  /* Create a descriptor as undefined if necessary.  */
-  if (fdh == NULL
-      && !bfd_link_executable (info)
-      && (fh->elf.root.type == bfd_link_hash_undefined
-	  || fh->elf.root.type == bfd_link_hash_undefweak))
-    {
-      fdh = make_fdh (info, fh);
-      if (fdh == NULL)
-	return FALSE;
-    }
-
-  /* We can't support overriding of symbols on a fake descriptor.  */
-  if (fdh != NULL
-      && fdh->fake
-      && (fh->elf.root.type == bfd_link_hash_defined
-	  || fh->elf.root.type == bfd_link_hash_defweak))
-    _bfd_elf_link_hash_hide_symbol (info, &fdh->elf, TRUE);
-
-  /* Transfer dynamic linking information to the function descriptor.  */
-  if (fdh != NULL)
-    {
-      fdh->elf.ref_regular |= fh->elf.ref_regular;
-      fdh->elf.ref_dynamic |= fh->elf.ref_dynamic;
-      fdh->elf.ref_regular_nonweak |= fh->elf.ref_regular_nonweak;
-      fdh->elf.non_got_ref |= fh->elf.non_got_ref;
-      fdh->elf.dynamic |= fh->elf.dynamic;
-      fdh->elf.needs_plt |= (fh->elf.needs_plt
-			     || fh->elf.type == STT_FUNC
-			     || fh->elf.type == STT_GNU_IFUNC);
-      move_plt_plist (fh, fdh);
-
-      if (!fdh->elf.forced_local
-	  && fh->elf.dynindx != -1)
-	if (!bfd_elf_link_record_dynamic_symbol (info, &fdh->elf))
-	  return FALSE;
-    }
-
-  /* Now that the info is on the function descriptor, clear the
-     function code sym info.  Any function code syms for which we
-     don't have a definition in a regular file, we force local.
-     This prevents a shared library from exporting syms that have
-     been imported from another library.  Function code syms that
-     are really in the library we must leave global to prevent the
-     linker dragging in a definition from a static library.  */
-  force_local = (!fh->elf.def_regular
-		 || fdh == NULL
-		 || !fdh->elf.def_regular
-		 || fdh->elf.forced_local);
-  _bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
-
-  return TRUE;
-}
-
-static const struct sfpr_def_parms save_res_funcs[] =
-  {
-    { "_savegpr0_", 14, 31, savegpr0, savegpr0_tail },
-    { "_restgpr0_", 14, 29, restgpr0, restgpr0_tail },
-    { "_restgpr0_", 30, 31, restgpr0, restgpr0_tail },
-    { "_savegpr1_", 14, 31, savegpr1, savegpr1_tail },
-    { "_restgpr1_", 14, 31, restgpr1, restgpr1_tail },
-    { "_savefpr_", 14, 31, savefpr, savefpr0_tail },
-    { "_restfpr_", 14, 29, restfpr, restfpr0_tail },
-    { "_restfpr_", 30, 31, restfpr, restfpr0_tail },
-    { "._savef", 14, 31, savefpr, savefpr1_tail },
-    { "._restf", 14, 31, restfpr, restfpr1_tail },
-    { "_savevr_", 20, 31, savevr, savevr_tail },
-    { "_restvr_", 20, 31, restvr, restvr_tail }
-  };
-
-/* Called near the start of bfd_elf_size_dynamic_sections.  We use
-   this hook to a) provide some gcc support functions, and b) transfer
-   dynamic linking information gathered so far on function code symbol
-   entries, to their corresponding function descriptor symbol entries.  */
-
-static bfd_boolean
-ppc64_elf_func_desc_adjust (bfd *obfd ATTRIBUTE_UNUSED,
-			    struct bfd_link_info *info)
-{
-  struct ppc_link_hash_table *htab;
-
-  htab = ppc_hash_table (info);
-  if (htab == NULL)
-    return FALSE;
-
-  /* Provide any missing _save* and _rest* functions.  */
-  if (htab->sfpr != NULL)
-    {
-      unsigned int i;
-
-      htab->sfpr->size = 0;
-      for (i = 0; i < ARRAY_SIZE (save_res_funcs); i++)
-	if (!sfpr_define (info, &save_res_funcs[i], NULL))
-	  return FALSE;
-      if (htab->sfpr->size == 0)
-	htab->sfpr->flags |= SEC_EXCLUDE;
-    }
-
-  if (bfd_link_relocatable (info))
-    return TRUE;
-
-  if (htab->elf.hgot != NULL)
-    {
-      _bfd_elf_link_hash_hide_symbol (info, htab->elf.hgot, TRUE);
-      /* Make .TOC. defined so as to prevent it being made dynamic.
-	 The wrong value here is fixed later in ppc64_elf_set_toc.  */
-      if (!htab->elf.hgot->def_regular
-	  || htab->elf.hgot->root.type != bfd_link_hash_defined)
-	{
-	  htab->elf.hgot->root.type = bfd_link_hash_defined;
-	  htab->elf.hgot->root.u.def.value = 0;
-	  htab->elf.hgot->root.u.def.section = bfd_abs_section_ptr;
-	  htab->elf.hgot->def_regular = 1;
-	  htab->elf.hgot->root.linker_def = 1;
-	}
-      htab->elf.hgot->type = STT_OBJECT;
-      htab->elf.hgot->other = ((htab->elf.hgot->other & ~ELF_ST_VISIBILITY (-1))
-			       | STV_HIDDEN);
-    }
-
-  if (htab->need_func_desc_adj)
-    {
-      elf_link_hash_traverse (&htab->elf, func_desc_adjust, info);
-      htab->need_func_desc_adj = 0;
-    }
-
-  return TRUE;
-}
-
-/* Return true if we have dynamic relocs against H that apply to
-   read-only sections.  */
-
-static bfd_boolean
-readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct ppc_link_hash_entry *eh;
-  struct elf_dyn_relocs *p;
-
-  eh = (struct ppc_link_hash_entry *) h;
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
-    {
-      asection *s = p->sec->output_section;
-
-      if (s != NULL && (s->flags & SEC_READONLY) != 0)
-	return TRUE;
-    }
-  return FALSE;
-}
-
-/* Return true if we have dynamic relocs against H or any of its weak
-   aliases, that apply to read-only sections.  */
-
-static bfd_boolean
-alias_readonly_dynrelocs (struct elf_link_hash_entry *h)
-{
-  struct ppc_link_hash_entry *eh;
-
-  eh = (struct ppc_link_hash_entry *) h;
-  do
-    {
-      if (readonly_dynrelocs (&eh->elf))
-	return TRUE;
-      eh = eh->weakref;
-    } while (eh != NULL && &eh->elf != h);
-
-  return FALSE;
-}
-
-/* Return whether EH has pc-relative dynamic relocs.  */
-
-static bfd_boolean
-pc_dynrelocs (struct ppc_link_hash_entry *eh)
-{
-  struct elf_dyn_relocs *p;
-
-  for (p = eh->dyn_relocs; p != NULL; p = p->next)
-    if (p->pc_count != 0)
-      return TRUE;
-  return FALSE;
-}
-
-/* Return true if a global entry stub will be created for H.  Valid
-   for ELFv2 before plt entries have been allocated.  */
-
-static bfd_boolean
-global_entry_stub (struct elf_link_hash_entry *h)
-{
-  struct plt_entry *pent;
-
-  if (!h->pointer_equality_needed
-      || h->def_regular)
-    return FALSE;
-
-  for (pent = h->plt.plist; pent != NULL; pent = pent->next)
-    if (pent->plt.refcount > 0
-	&& pent->addend == 0)
-      return TRUE;
-
-  return FALSE;
-}
-
-/* Adjust a symbol defined by a dynamic object and referenced by a
-   regular object.  The current definition is in some section of the
-   dynamic object, but we're not including those sections.  We have to
-   change the definition to something the rest of the link can
-   understand.  */
-
-static bfd_boolean
-ppc64_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
-				 struct elf_link_hash_entry *h)
-{
-  struct ppc_link_hash_table *htab;
-  asection *s, *srel;
-
-  htab = ppc_hash_table (info);
-  if (htab == NULL)
-    return FALSE;
-
-  /* Deal with function syms.  */
-  if (h->type == STT_FUNC
-      || h->type == STT_GNU_IFUNC
-      || h->needs_plt)
-    {
-      /* Clear procedure linkage table information for any symbol that
-	 won't need a .plt entry.  */
-      struct plt_entry *ent;
-      for (ent = h->plt.plist; ent != NULL; ent = ent->next)
-	if (ent->plt.refcount > 0)
-	  break;
-      if (ent == NULL
-	  || (h->type != STT_GNU_IFUNC
-	      && (SYMBOL_CALLS_LOCAL (info, h)
-		  || (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
-		      && h->root.type == bfd_link_hash_undefweak)))
-	  || ((struct ppc_link_hash_entry *) h)->save_res)
-	{
-	  h->plt.plist = NULL;
-	  h->needs_plt = 0;
-	  h->pointer_equality_needed = 0;
-	}
-      else if (abiversion (info->output_bfd) >= 2)
-	{
-	  /* Taking a function's address in a read/write section
-	     doesn't require us to define the function symbol in the
-	     executable on a global entry stub.  A dynamic reloc can
-	     be used instead.  The reason we prefer a few more dynamic
-	     relocs is that calling via a global entry stub costs a
-	     few more instructions, and pointer_equality_needed causes
-	     extra work in ld.so when resolving these symbols.  */
-	  if (global_entry_stub (h)
-	      && !alias_readonly_dynrelocs (h))
-	    {
-	      h->pointer_equality_needed = 0;
-	      /* After adjust_dynamic_symbol, non_got_ref set in
-		 the non-pic case means that dyn_relocs for this
-		 symbol should be discarded.  */
-	      h->non_got_ref = 0;
-	    }
-
-	  /* If making a plt entry, then we don't need copy relocs.  */
-	  return TRUE;
-	}
-    }
-  else
-    h->plt.plist = NULL;
-
-  /* If this is a weak symbol, and there is a real definition, the
-     processor independent code will have arranged for us to see the
-     real definition first, and we can just use the same value.  */
-  if (h->u.weakdef != NULL)
-    {
-      BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
-		  || h->u.weakdef->root.type == bfd_link_hash_defweak);
-      h->root.u.def.section = h->u.weakdef->root.u.def.section;
-      h->root.u.def.value = h->u.weakdef->root.u.def.value;
-      if (ELIMINATE_COPY_RELOCS)
-	h->non_got_ref = h->u.weakdef->non_got_ref;
-      return TRUE;
-    }
-
-  /* If we are creating a shared library, we must presume that the
-     only references to the symbol are via the global offset table.
-     For such cases we need not do anything here; the relocations will
-     be handled correctly by relocate_section.  */
-  if (bfd_link_pic (info))
-    return TRUE;
-
-  /* If there are no references to this symbol that do not use the
-     GOT, we don't need to generate a copy reloc.  */
-  if (!h->non_got_ref)
-    return TRUE;
-
-  /* Don't generate a copy reloc for symbols defined in the executable.  */
-  if (!h->def_dynamic || !h->ref_regular || h->def_regular
-
-      /* If -z nocopyreloc was given, don't generate them either.  */
-      || info->nocopyreloc
-
-      /* If we didn't find any dynamic relocs in read-only sections, then
-	 we'll be keeping the dynamic relocs and avoiding the copy reloc.  */
-      || (ELIMINATE_COPY_RELOCS && !alias_readonly_dynrelocs (h))
-
-      /* Protected variables do not work with .dynbss.  The copy in
-	 .dynbss won't be used by the shared library with the protected
-	 definition for the variable.  Text relocations are preferable
-	 to an incorrect program.  */
-      || h->protected_def)
-    {
-      h->non_got_ref = 0;
-      return TRUE;
-    }
-
-  if (h->plt.plist != NULL)
-    {
-      /* We should never get here, but unfortunately there are versions
-	 of gcc out there that improperly (for this ABI) put initialized
-	 function pointers, vtable refs and suchlike in read-only
-	 sections.  Allow them to proceed, but warn that this might
-	 break at runtime.  */
-      info->callbacks->einfo
-	(_("%P: copy reloc against `%T' requires lazy plt linking; "
-	   "avoid setting LD_BIND_NOW=1 or upgrade gcc\n"),
-	 h->root.root.string);
-    }
-
-  /* This is a reference to a symbol defined by a dynamic object which
-     is not a function.  */
-
-  /* We must allocate the symbol in our .dynbss section, which will
-     become part of the .bss section of the executable.  There will be
-     an entry for this symbol in the .dynsym section.  The dynamic
-     object will contain position independent code, so all references
-     from the dynamic object to this symbol will go through the global
-     offset table.  The dynamic linker will use the .dynsym entry to
-     determine the address it must put in the global offset table, so
-     both the dynamic object and the regular object will refer to the
-     same memory location for the variable.  */
-
-  /* We must generate a R_PPC64_COPY reloc to tell the dynamic linker
-     to copy the initial value out of the dynamic object and into the
-     runtime process image.  We need to remember the offset into the
-     .rela.bss section we are going to use.  */
-  if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
-    {
-      s = htab->elf.sdynrelro;
-      srel = htab->elf.sreldynrelro;
-    }
-  else
-    {
-      s = htab->elf.sdynbss;
-      srel = htab->elf.srelbss;
-    }
-  if ((h->root.u.def.section->flags & SEC_ALLOC) != 0 && h->size != 0)
-    {
-      srel->size += sizeof (Elf64_External_Rela);
-      h->needs_copy = 1;
-    }
-
-  return _bfd_elf_adjust_dynamic_copy (info, h, s);
-}
-
-/* If given a function descriptor symbol, hide both the function code
-   sym and the descriptor.  */
-static void
-ppc64_elf_hide_symbol (struct bfd_link_info *info,
-		       struct elf_link_hash_entry *h,
-		       bfd_boolean force_local)
-{
-  struct ppc_link_hash_entry *eh;
-  _bfd_elf_link_hash_hide_symbol (info, h, force_local);
-
-  eh = (struct ppc_link_hash_entry *) h;
-  if (eh->is_func_descriptor)
-    {
-      struct ppc_link_hash_entry *fh = eh->oh;
-
-      if (fh == NULL)
-	{
-	  const char *p, *q;
-	  struct elf_link_hash_table *htab = elf_hash_table (info);
-	  char save;
-
-	  /* We aren't supposed to use alloca in BFD because on
-	     systems which do not have alloca the version in libiberty
-	     calls xmalloc, which might cause the program to crash
-	     when it runs out of memory.  This function doesn't have a
-	     return status, so there's no way to gracefully return an
-	     error.  So cheat.  We know that string[-1] can be safely
-	     accessed;  It's either a string in an ELF string table,
-	     or allocated in an objalloc structure.  */
-
-	  p = eh->elf.root.root.string - 1;
-	  save = *p;
-	  *(char *) p = '.';
-	  fh = (struct ppc_link_hash_entry *)
-	    elf_link_hash_lookup (htab, p, FALSE, FALSE, FALSE);
-	  *(char *) p = save;
-
-	  /* Unfortunately, if it so happens that the string we were
-	     looking for was allocated immediately before this string,
-	     then we overwrote the string terminator.  That's the only
-	     reason the lookup should fail.  */
-	  if (fh == NULL)
-	    {
-	      q = eh->elf.root.root.string + strlen (eh->elf.root.root.string);
-	      while (q >= eh->elf.root.root.string && *q == *p)
-		--q, --p;
-	      if (q < eh->elf.root.root.string && *p == '.')
-		fh = (struct ppc_link_hash_entry *)
-		  elf_link_hash_lookup (htab, p, FALSE, FALSE, FALSE);
-	    }
-	  if (fh != NULL)
-	    {
-	      eh->oh = fh;
-	      fh->oh = eh;
-	    }
-	}
-      if (fh != NULL)
-	_bfd_elf_link_hash_hide_symbol (info, &fh->elf, force_local);
-    }
-}
-
-static bfd_boolean
-get_sym_h (struct elf_link_hash_entry **hp,
-	   Elf_Internal_Sym **symp,
-	   asection **symsecp,
-	   unsigned char **tls_maskp,
-	   Elf_Internal_Sym **locsymsp,
-	   unsigned long r_symndx,
-	   bfd *ibfd)
-{
-  Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
-
-  if (r_symndx >= symtab_hdr->sh_info)
-    {
-      struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
-      struct elf_link_hash_entry *h;
-
-      h = sym_hashes[r_symndx - symtab_hdr->sh_info];
-      h = elf_follow_link (h);
-
-      if (hp != NULL)
-	*hp = h;
-
-      if (symp != NULL)
-	*symp = NULL;
-
-      if (symsecp != NULL)
-	{
-	  asection *symsec = NULL;
-	  if (h->root.type == bfd_link_hash_defined
-	      || h->root.type == bfd_link_hash_defweak)
-	    symsec = h->root.u.def.section;
-	  *symsecp = symsec;
-	}
-
-      if (tls_maskp != NULL)
-	{
-	  struct ppc_link_hash_entry *eh;
-
-	  eh = (struct ppc_link_hash_entry *) h;
-	  *tls_maskp = &eh->tls_mask;
-	}
-    }
-  else
-    {
-      Elf_Internal_Sym *sym;
-      Elf_Internal_Sym *locsyms = *locsymsp;
-
-      if (locsyms == NULL)
-	{
-	  locsyms = (Elf_Internal_Sym *) symtab_hdr->contents;
-	  if (locsyms == NULL)
-	    locsyms = bfd_elf_get_elf_syms (ibfd, symtab_hdr,
-					    symtab_hdr->sh_info,
-					    0, NULL, NULL, NULL);
-	  if (locsyms == NULL)
-	    return FALSE;
-	  *locsymsp = locsyms;
-	}
-      sym = locsyms + r_symndx;
-
-      if (hp != NULL)
-	*hp = NULL;
-
-      if (symp != NULL)
-	*symp = sym;
-
-      if (symsecp != NULL)
-	*symsecp = bfd_section_from_elf_index (ibfd, sym->st_shndx);
-
-      if (tls_maskp != NULL)
-	{
-	  struct got_entry **lgot_ents;
-	  unsigned char *tls_mask;
-
-	  tls_mask = NULL;
-	  lgot_ents = elf_local_got_ents (ibfd);
-	  if (lgot_ents != NULL)
-	    {
-	      struct plt_entry **local_plt = (struct plt_entry **)
-		(lgot_ents + symtab_hdr->sh_info);
-	      unsigned char *lgot_masks = (unsigned char *)
-		(local_plt + symtab_hdr->sh_info);
-	      tls_mask = &lgot_masks[r_symndx];
-	    }
-	  *tls_maskp = tls_mask;
-	}
-    }
-  return TRUE;
-}
-
-/* Returns TLS_MASKP for the given REL symbol.  Function return is 0 on
-   error, 2 on a toc GD type suitable for optimization, 3 on a toc LD
-   type suitable for optimization, and 1 otherwise.  */
-
-static int
-get_tls_mask (unsigned char **tls_maskp,
-	      unsigned long *toc_symndx,
-	      bfd_vma *toc_addend,
-	      Elf_Internal_Sym **locsymsp,
-	      const Elf_Internal_Rela *rel,
-	      bfd *ibfd)
-{
-  unsigned long r_symndx;
-  int next_r;
-  struct elf_link_hash_entry *h;
-  Elf_Internal_Sym *sym;
-  asection *sec;
-  bfd_vma off;
-
-  r_symndx = ELF64_R_SYM (rel->r_info);
-  if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
-    return 0;
-
-  if ((*tls_maskp != NULL && **tls_maskp != 0)
-      || sec == NULL
-      || ppc64_elf_section_data (sec) == NULL
-      || ppc64_elf_section_data (sec)->sec_type != sec_toc)
-    return 1;
-
-  /* Look inside a TOC section too.  */
-  if (h != NULL)
-    {
-      BFD_ASSERT (h->root.type == bfd_link_hash_defined);
-      off = h->root.u.def.value;
-    }
-  else
-    off = sym->st_value;
-  off += rel->r_addend;
-  BFD_ASSERT (off % 8 == 0);
-  r_symndx = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8];
-  next_r = ppc64_elf_section_data (sec)->u.toc.symndx[off / 8 + 1];
-  if (toc_symndx != NULL)
-    *toc_symndx = r_symndx;
-  if (toc_addend != NULL)
-    *toc_addend = ppc64_elf_section_data (sec)->u.toc.add[off / 8];
-  if (!get_sym_h (&h, &sym, &sec, tls_maskp, locsymsp, r_symndx, ibfd))
-    return 0;
-  if ((h == NULL || is_static_defined (h))
-      && (next_r == -1 || next_r == -2))
-    return 1 - next_r;
-  return 1;
-}
-
-/* Find (or create) an entry in the tocsave hash table.  */
-
-static struct tocsave_entry *
-tocsave_find (struct ppc_link_hash_table *htab,
-	      enum insert_option insert,
-	      Elf_Internal_Sym **local_syms,
-	      const Elf_Internal_Rela *irela,
-	      bfd *ibfd)
-{
-  unsigned long r_indx;
-  struct elf_link_hash_entry *h;
-  Elf_Internal_Sym *sym;
-  struct tocsave_entry ent, *p;
-  hashval_t hash;
-  struct tocsave_entry **slot;
-
-  r_indx = ELF64_R_SYM (irela->r_info);
-  if (!get_sym_h (&h, &sym, &ent.sec, NULL, local_syms, r_indx, ibfd))
-    return NULL;
-  if (ent.sec == NULL || ent.sec->output_section == NULL)
-    {
-      _bfd_error_handler
-	(_("%B: undefined symbol on R_PPC64_TOCSAVE relocation"));
-      return NULL;
-    }
-
-  if (h != NULL)
-    ent.offset = h->root.u.def.value;
-  else
-    ent.offset = sym->st_value;
-  ent.offset += irela->r_addend;
-
-  hash = tocsave_htab_hash (&ent);
-  slot = ((struct tocsave_entry **)
-	  htab_find_slot_with_hash (htab->tocsave_htab, &ent, hash, insert));
-  if (slot == NULL)
-    return NULL;
-
-  if (*slot == NULL)
-    {
-      p = (struct tocsave_entry *) bfd_alloc (ibfd, sizeof (*p));
-      if (p == NULL)
-	return NULL;
-      *p = ent;
-      *slot = p;
-    }
-  return *slot;
-}
-
-/* Adjust all global syms defined in opd sections.  In gcc generated
-   code for the old ABI, these will already have been done.  */
-
-static bfd_boolean
-adjust_opd_syms (struct elf_link_hash_entry *h, void *inf ATTRIBUTE_UNUSED)
-{
-  struct ppc_link_hash_entry *eh;
-  asection *sym_sec;
-  struct _opd_sec_data *opd;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  if (h->root.type != bfd_link_hash_defined
-      && h->root.type != bfd_link_hash_defweak)
-    return TRUE;
-
-  eh = (struct ppc_link_hash_entry *) h;
-  if (eh->adjust_done)
-    return TRUE;
-
-  sym_sec = eh->elf.root.u.def.section;
-  opd = get_opd_info (sym_sec);
-  if (opd != NULL && opd->adjust != NULL)
-    {
-      long adjust = opd->adjust[OPD_NDX (eh->elf.root.u.def.value)];
-      if (adjust == -1)
-	{
-	  /* This entry has been deleted.  */
-	  asection *dsec = ppc64_elf_tdata (sym_sec->owner)->deleted_section;
-	  if (dsec == NULL)
-	    {
-	      for (dsec = sym_sec->owner->sections; dsec; dsec = dsec->next)
-		if (discarded_section (dsec))
-		  {
-		    ppc64_elf_tdata (sym_sec->owner)->deleted_section = dsec;
-		    break;
-		  }
-	    }
-	  eh->elf.root.u.def.value = 0;
-	  eh->elf.root.u.def.section = dsec;
-	}
-      else
-	eh->elf.root.u.def.value += adjust;
-      eh->adjust_done = 1;
-    }
-  return TRUE;
-}
-
-/* Handles decrementing dynamic reloc counts for the reloc specified by
-   R_INFO in section SEC.  If LOCAL_SYMS is NULL, then H and SYM
-   have already been determined.  */
-
-static bfd_boolean
-dec_dynrel_count (bfd_vma r_info,
-		  asection *sec,
-		  struct bfd_link_info *info,
-		  Elf_Internal_Sym **local_syms,
-		  struct elf_link_hash_entry *h,
-		  Elf_Internal_Sym *sym)
-{
-  enum elf_ppc64_reloc_type r_type;
-  asection *sym_sec = NULL;
-
-  /* Can this reloc be dynamic?  This switch, and later tests here
-     should be kept in sync with the code in check_relocs.  */
-  r_type = ELF64_R_TYPE (r_info);
-  switch (r_type)
-    {
-    default:
-      return TRUE;
-
-    case R_PPC64_TPREL16:
-    case R_PPC64_TPREL16_LO:
-    case R_PPC64_TPREL16_HI:
-    case R_PPC64_TPREL16_HA:
-    case R_PPC64_TPREL16_DS:
-    case R_PPC64_TPREL16_LO_DS:
-    case R_PPC64_TPREL16_HIGH:
-    case R_PPC64_TPREL16_HIGHA:
-    case R_PPC64_TPREL16_HIGHER:
-    case R_PPC64_TPREL16_HIGHERA:
-    case R_PPC64_TPREL16_HIGHEST:
-    case R_PPC64_TPREL16_HIGHESTA:
-      if (!bfd_link_pic (info))
-	return TRUE;
-
-    case R_PPC64_TPREL64:
-    case R_PPC64_DTPMOD64:
-    case R_PPC64_DTPREL64:
-    case R_PPC64_ADDR64:
-    case R_PPC64_REL30:
-    case R_PPC64_REL32:
-    case R_PPC64_REL64:
-    case R_PPC64_ADDR14:
-    case R_PPC64_ADDR14_BRNTAKEN:
-    case R_PPC64_ADDR14_BRTAKEN:
-    case R_PPC64_ADDR16:
-    case R_PPC64_ADDR16_DS:
-    case R_PPC64_ADDR16_HA:
-    case R_PPC64_ADDR16_HI:
-    case R_PPC64_ADDR16_HIGH:
-    case R_PPC64_ADDR16_HIGHA:
-    case R_PPC64_ADDR16_HIGHER:
-    case R_PPC64_ADDR16_HIGHERA:
-    case R_PPC64_ADDR16_HIGHEST:
-    case R_PPC64_ADDR16_HIGHESTA:
-    case R_PPC64_ADDR16_LO:
-    case R_PPC64_ADDR16_LO_DS:
-    case R_PPC64_ADDR24:
-    case R_PPC64_ADDR32:
-    case R_PPC64_UADDR16:
-    case R_PPC64_UADDR32:
-    case R_PPC64_UADDR64:
-    case R_PPC64_TOC:
-      break;
-    }
-
-  if (local_syms != NULL)
-    {
-      unsigned long r_symndx;
-      bfd *ibfd = sec->owner;
-
-      r_symndx = ELF64_R_SYM (r_info);
-      if (!get_sym_h (&h, &sym, &sym_sec, NULL, local_syms, r_symndx, ibfd))
-	return FALSE;
-    }
-
-  if ((bfd_link_pic (info)
-       && (must_be_dyn_reloc (info, r_type)
-	   || (h != NULL
-	       && (!SYMBOLIC_BIND (info, h)
-		   || h->root.type == bfd_link_hash_defweak
-		   || !h->def_regular))))
-      || (ELIMINATE_COPY_RELOCS
-	  && !bfd_link_pic (info)
-	  && h != NULL
-	  && (h->root.type == bfd_link_hash_defweak
-	      || !h->def_regular)))
-    ;
-  else
-    return TRUE;
-
-  if (h != NULL)
-    {
-      struct elf_dyn_relocs *p;
-      struct elf_dyn_relocs **pp;
-      pp = &((struct ppc_link_hash_entry *) h)->dyn_relocs;
-
-      /* elf_gc_sweep may have already removed all dyn relocs associated
-	 with local syms for a given section.  Also, symbol flags are
-	 changed by elf_gc_sweep_symbol, confusing the test above.  Don't
-	 report a dynreloc miscount.  */
-      if (*pp == NULL && info->gc_sections)
-	return TRUE;
-
-      while ((p = *pp) != NULL)
-	{
-	  if (p->sec == sec)
-	    {
-	      if (!must_be_dyn_reloc (info, r_type))
-		p->pc_count -= 1;
-	      p->count -= 1;
-	      if (p->count == 0)
-		*pp = p->next;
-	      return TRUE;
-	    }
-	  pp = &p->next;
-	}
-    }
-  else
-    {
-      struct ppc_dyn_relocs *p;
-      struct ppc_dyn_relocs **pp;
-      void *vpp;
-      bfd_boolean is_ifunc;
-
-      if (local_syms == NULL)
-	sym_sec = bfd_section_from_elf_index (sec->owner, sym->st_shndx);
-      if (sym_sec == NULL)
-	sym_sec = sec;
-
-      vpp = &elf_section_data (sym_sec)->local_dynrel;
-      pp = (struct ppc_dyn_relocs **) vpp;
-
-      if (*pp == NULL && info->gc_sections)
-	return TRUE;
-
-      is_ifunc = ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC;
-      while ((p = *pp) != NULL)
-	{
-	  if (p->sec == sec && p->ifunc == is_ifunc)
-	    {
-	      p->count -= 1;
-	      if (p->count == 0)
-		*pp = p->next;
-	      return TRUE;
-	    }
-	  pp = &p->next;
-	}
-    }
-
-  /* xgettext:c-format */
-  info->callbacks->einfo (_("%P: dynreloc miscount for %B, section %A\n"),
-			  sec->owner, sec);
-  bfd_set_error (bfd_error_bad_value);
-  return FALSE;
-}
-
-/* Remove unused Official Procedure Descriptor entries.  Currently we
-   only remove those associated with functions in discarded link-once
-   sections, or weakly defined functions that have been overridden.  It
-   would be possible to remove many more entries for statically linked
-   applications.  */
-
-bfd_boolean
-ppc64_elf_edit_opd (struct bfd_link_info *info)
-{
-  bfd *ibfd;
-  bfd_boolean some_edited = FALSE;
-  asection *need_pad = NULL;
-  struct ppc_link_hash_table *htab;
-
-  htab = ppc_hash_table (info);
-  if (htab == NULL)
-    return FALSE;
-
-  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
-    {
-      asection *sec;
-      Elf_Internal_Rela *relstart, *rel, *relend;
-      Elf_Internal_Shdr *symtab_hdr;
-      Elf_Internal_Sym *local_syms;
-      struct _opd_sec_data *opd;
-      bfd_boolean need_edit, add_aux_fields, broken;
-      bfd_size_type cnt_16b = 0;
-
-      if (!is_ppc64_elf (ibfd))
-	continue;
-
-      sec = bfd_get_section_by_name (ibfd, ".opd");
-      if (sec == NULL || sec->size == 0)
-	continue;
-
-      if (sec->sec_info_type == SEC_INFO_TYPE_JUST_SYMS)
-	continue;
-
-      if (sec->output_section == bfd_abs_section_ptr)
-	continue;
-
-      /* Look through the section relocs.  */
-      if ((sec->flags & SEC_RELOC) == 0 || sec->reloc_count == 0)
-	continue;
-
-      local_syms = NULL;
-      symtab_hdr = &elf_symtab_hdr (ibfd);
-
-      /* Read the relocations.  */
-      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
-					    info->keep_memory);
-      if (relstart == NULL)
-	return FALSE;
-
-      /* First run through the relocs to check they are sane, and to
-	 determine whether we need to edit this opd section.  */
-      need_edit = FALSE;
-      broken = FALSE;
-      need_pad = sec;
-      relend = relstart + sec->reloc_count;
-      for (rel = relstart; rel < relend; )
-	{
-	  enum elf_ppc64_reloc_type r_type;
-	  unsigned long r_symndx;
-	  asection *sym_sec;
-	  struct elf_link_hash_entry *h;
-	  Elf_Internal_Sym *sym;
-	  bfd_vma offset;
-
-	  /* .opd contains an array of 16 or 24 byte entries.  We're
-	     only interested in the reloc pointing to a function entry
-	     point.  */
-	  offset = rel->r_offset;
-	  if (rel + 1 == relend
-	      || rel[1].r_offset != offset + 8)
-	    {
-	      /* If someone messes with .opd alignment then after a
-		 "ld -r" we might have padding in the middle of .opd.
-		 Also, there's nothing to prevent someone putting
-		 something silly in .opd with the assembler.  No .opd
-		 optimization for them!  */
-	    broken_opd:
-	      _bfd_error_handler
-		(_("%B: .opd is not a regular array of opd entries"), ibfd);
-	      broken = TRUE;
-	      break;
-	    }
-
-	  if ((r_type = ELF64_R_TYPE (rel->r_info)) != R_PPC64_ADDR64
-	      || (r_type = ELF64_R_TYPE ((rel + 1)->r_info)) != R_PPC64_TOC)
-	    {
-	      _bfd_error_handler
-		/* xgettext:c-format */
-		(_("%B: unexpected reloc type %u in .opd section"),
-		 ibfd, r_type);
-	      broken = TRUE;
-	      break;
-	    }
-
-	  r_symndx = ELF64_R_SYM (rel->r_info);
-	  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
-			  r_symndx, ibfd))
-	    goto error_ret;
-
-	  if (sym_sec == NULL || sym_sec->owner == NULL)
-	    {
-	      const char *sym_name;
-	      if (h != NULL)
-		sym_name = h->root.root.string;
-	      else
-		sym_name = bfd_elf_sym_name (ibfd, symtab_hdr, sym,
-					     sym_sec);
-
-	      _bfd_error_handler
-		/* xgettext:c-format */
-		(_("%B: undefined sym `%s' in .opd section"),
-		 ibfd, sym_name);
-	      broken = TRUE;
-	      break;
-	    }
-
-	  /* opd entries are always for functions defined in the
-	     current input bfd.  If the symbol isn't defined in the
-	     input bfd, then we won't be using the function in this
-	     bfd;  It must be defined in a linkonce section in another
-	     bfd, or is weak.  It's also possible that we are
-	     discarding the function due to a linker script /DISCARD/,
-	     which we test for via the output_section.  */
-	  if (sym_sec->owner != ibfd
-	      || sym_sec->output_section == bfd_abs_section_ptr)
-	    need_edit = TRUE;
-
-	  rel += 2;
-	  if (rel + 1 == relend
-	      || (rel + 2 < relend
-		  && ELF64_R_TYPE (rel[2].r_info) == R_PPC64_TOC))
-	    ++rel;
-
-	  if (rel == relend)
-	    {
-	      if (sec->size == offset + 24)
-		{
-		  need_pad = NULL;
-		  break;
-		}
-	      if (sec->size == offset + 16)
-		{
-		  cnt_16b++;
-		  break;
-		}
-	      goto broken_opd;
-	    }
-	  else if (rel + 1 < relend
-		   && ELF64_R_TYPE (rel[0].r_info) == R_PPC64_ADDR64
-		   && ELF64_R_TYPE (rel[1].r_info) == R_PPC64_TOC)
-	    {
-	      if (rel[0].r_offset == offset + 16)
-		cnt_16b++;
-	      else if (rel[0].r_offset != offset + 24)
-		goto broken_opd;
-	    }
-	  else
-	    goto broken_opd;
-	}
-
-      add_aux_fields = htab->params->non_overlapping_opd && cnt_16b > 0;
-
-      if (!broken && (need_edit || add_aux_fields))
-	{
-	  Elf_Internal_Rela *write_rel;
-	  Elf_Internal_Shdr *rel_hdr;
-	  bfd_byte *rptr, *wptr;
-	  bfd_byte *new_contents;
-	  bfd_size_type amt;
-
-	  new_contents = NULL;
-	  amt = OPD_NDX (sec->size) * sizeof (long);
-	  opd = &ppc64_elf_section_data (sec)->u.opd;
-	  opd->adjust = bfd_zalloc (sec->owner, amt);
-	  if (opd->adjust == NULL)
-	    return FALSE;
-	  ppc64_elf_section_data (sec)->sec_type = sec_opd;
-
-	  /* This seems a waste of time as input .opd sections are all
-	     zeros as generated by gcc, but I suppose there's no reason
-	     this will always be so.  We might start putting something in
-	     the third word of .opd entries.  */
-	  if ((sec->flags & SEC_IN_MEMORY) == 0)
-	    {
-	      bfd_byte *loc;
-	      if (!bfd_malloc_and_get_section (ibfd, sec, &loc))
-		{
-		  if (loc != NULL)
-		    free (loc);
-		error_ret:
-		  if (local_syms != NULL
-		      && symtab_hdr->contents != (unsigned char *) local_syms)
-		    free (local_syms);
-		  if (elf_section_data (sec)->relocs != relstart)
-		    free (relstart);
-		  return FALSE;
-		}
-	      sec->contents = loc;
-	      sec->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
-	    }
-
-	  elf_section_data (sec)->relocs = relstart;
-
-	  new_contents = sec->contents;
-	  if (add_aux_fields)
-	    {
-	      new_contents = bfd_malloc (sec->size + cnt_16b * 8);
-	      if (new_contents == NULL)
-		return FALSE;
-	      need_pad = NULL;
-	    }
-	  wptr = new_contents;
-	  rptr = sec->contents;
-	  write_rel = relstart;
-	  for (rel = relstart; rel < relend; )
-	    {
-	      unsigned long r_symndx;
-	      asection *sym_sec;
-	      struct elf_link_hash_entry *h;
-	      struct ppc_link_hash_entry *fdh = NULL;
-	      Elf_Internal_Sym *sym;
-	      long opd_ent_size;
-	      Elf_Internal_Rela *next_rel;
-	      bfd_boolean skip;
-
-	      r_symndx = ELF64_R_SYM (rel->r_info);
-	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
-			      r_symndx, ibfd))
-		goto error_ret;
-
-	      next_rel = rel + 2;
-	      if (next_rel + 1 == relend
-		  || (next_rel + 2 < relend
-		      && ELF64_R_TYPE (next_rel[2].r_info) == R_PPC64_TOC))
-		++next_rel;
-
-	      /* See if the .opd entry is full 24 byte or
-		 16 byte (with fd_aux entry overlapped with next
-		 fd_func).  */
-	      opd_ent_size = 24;
-	      if (next_rel == relend)
-		{
-		  if (sec->size == rel->r_offset + 16)
-		    opd_ent_size = 16;
-		}
-	      else if (next_rel->r_offset == rel->r_offset + 16)
-		opd_ent_size = 16;
-
-	      if (h != NULL
-		  && h->root.root.string[0] == '.')
-		{
-		  fdh = ((struct ppc_link_hash_entry *) h)->oh;
-		  if (fdh != NULL)
-		    {
-		      fdh = ppc_follow_link (fdh);
-		      if (fdh->elf.root.type != bfd_link_hash_defined
-			  && fdh->elf.root.type != bfd_link_hash_defweak)
-			fdh = NULL;
-		    }
-		}
-
-	      skip = (sym_sec->owner != ibfd
-		      || sym_sec->output_section == bfd_abs_section_ptr);
-	      if (skip)
-		{
-		  if (fdh != NULL && sym_sec->owner == ibfd)
-		    {
-		      /* Arrange for the function descriptor sym
-			 to be dropped.  */
-		      fdh->elf.root.u.def.value = 0;
-		      fdh->elf.root.u.def.section = sym_sec;
-		    }
-		  opd->adjust[OPD_NDX (rel->r_offset)] = -1;
-
-		  if (NO_OPD_RELOCS || bfd_link_relocatable (info))
-		    rel = next_rel;
-		  else
-		    while (1)
-		      {
-			if (!dec_dynrel_count (rel->r_info, sec, info,
-					       NULL, h, sym))
-			  goto error_ret;
-
-			if (++rel == next_rel)
-			  break;
-
-			r_symndx = ELF64_R_SYM (rel->r_info);
-			if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
-					r_symndx, ibfd))
-			  goto error_ret;
-		      }
-		}
-	      else
-		{
-		  /* We'll be keeping this opd entry.  */
-		  long adjust;
-
-		  if (fdh != NULL)
-		    {
-		      /* Redefine the function descriptor symbol to
-			 this location in the opd section.  It is
-			 necessary to update the value here rather
-			 than using an array of adjustments as we do
-			 for local symbols, because various places
-			 in the generic ELF code use the value
-			 stored in u.def.value.  */
-		      fdh->elf.root.u.def.value = wptr - new_contents;
-		      fdh->adjust_done = 1;
-		    }
-
-		  /* Local syms are a bit tricky.  We could
-		     tweak them as they can be cached, but
-		     we'd need to look through the local syms
-		     for the function descriptor sym which we
-		     don't have at the moment.  So keep an
-		     array of adjustments.  */
-		  adjust = (wptr - new_contents) - (rptr - sec->contents);
-		  opd->adjust[OPD_NDX (rel->r_offset)] = adjust;
-
-		  if (wptr != rptr)
-		    memcpy (wptr, rptr, opd_ent_size);
-		  wptr += opd_ent_size;
-		  if (add_aux_fields && opd_ent_size == 16)
-		    {
-		      memset (wptr, '\0', 8);
-		      wptr += 8;
-		    }
-
-		  /* We need to adjust any reloc offsets to point to the
-		     new opd entries.  */
-		  for ( ; rel != next_rel; ++rel)
-		    {
-		      rel->r_offset += adjust;
-		      if (write_rel != rel)
-			memcpy (write_rel, rel, sizeof (*rel));
-		      ++write_rel;
-		    }
-		}
-
-	      rptr += opd_ent_size;
-	    }
-
-	  sec->size = wptr - new_contents;
-	  sec->reloc_count = write_rel - relstart;
-	  if (add_aux_fields)
-	    {
-	      free (sec->contents);
-	      sec->contents = new_contents;
-	    }
-
-	  /* Fudge the header size too, as this is used later in
-	     elf_bfd_final_link if we are emitting relocs.  */
-	  rel_hdr = _bfd_elf_single_rel_hdr (sec);
-	  rel_hdr->sh_size = sec->reloc_count * rel_hdr->sh_entsize;
-	  some_edited = TRUE;
-	}
-      else if (elf_section_data (sec)->relocs != relstart)
-	free (relstart);
-
-      if (local_syms != NULL
-	  && symtab_hdr->contents != (unsigned char *) local_syms)
-	{
-	  if (!info->keep_memory)
-	    free (local_syms);
-	  else
-	    symtab_hdr->contents = (unsigned char *) local_syms;
-	}
-    }
-
-  if (some_edited)
-    elf_link_hash_traverse (elf_hash_table (info), adjust_opd_syms, NULL);
-
-  /* If we are doing a final link and the last .opd entry is just 16 byte
-     long, add a 8 byte padding after it.  */
-  if (need_pad != NULL && !bfd_link_relocatable (info))
-    {
-      bfd_byte *p;
-
-      if ((need_pad->flags & SEC_IN_MEMORY) == 0)
-	{
-	  BFD_ASSERT (need_pad->size > 0);
-
-	  p = bfd_malloc (need_pad->size + 8);
-	  if (p == NULL)
-	    return FALSE;
-
-	  if (! bfd_get_section_contents (need_pad->owner, need_pad,
-					  p, 0, need_pad->size))
-	    return FALSE;
-
-	  need_pad->contents = p;
-	  need_pad->flags |= (SEC_IN_MEMORY | SEC_HAS_CONTENTS);
-	}
-      else
-	{
-	  p = bfd_realloc (need_pad->contents, need_pad->size + 8);
-	  if (p == NULL)
-	    return FALSE;
-
-	  need_pad->contents = p;
-	}
-
-      memset (need_pad->contents + need_pad->size, 0, 8);
-      need_pad->size += 8;
-    }
-
-  return TRUE;
-}
-
-/* Set htab->tls_get_addr and call the generic ELF tls_setup function.  */
-
-asection *
-ppc64_elf_tls_setup (struct bfd_link_info *info)
-{
-  struct ppc_link_hash_table *htab;
-
-  htab = ppc_hash_table (info);
-  if (htab == NULL)
-    return NULL;
-
-  if (abiversion (info->output_bfd) == 1)
-    htab->opd_abi = 1;
-
-  if (htab->params->no_multi_toc)
-    htab->do_multi_toc = 0;
-  else if (!htab->do_multi_toc)
-    htab->params->no_multi_toc = 1;
-
-  htab->tls_get_addr = ((struct ppc_link_hash_entry *)
-			elf_link_hash_lookup (&htab->elf, ".__tls_get_addr",
-					      FALSE, FALSE, TRUE));
-  /* Move dynamic linking info to the function descriptor sym.  */
-  if (htab->tls_get_addr != NULL)
-    func_desc_adjust (&htab->tls_get_addr->elf, info);
-  htab->tls_get_addr_fd = ((struct ppc_link_hash_entry *)
-			   elf_link_hash_lookup (&htab->elf, "__tls_get_addr",
-						 FALSE, FALSE, TRUE));
-  if (htab->params->tls_get_addr_opt)
-    {
-      struct elf_link_hash_entry *opt, *opt_fd, *tga, *tga_fd;
-
-      opt = elf_link_hash_lookup (&htab->elf, ".__tls_get_addr_opt",
-				  FALSE, FALSE, TRUE);
-      if (opt != NULL)
-	func_desc_adjust (opt, info);
-      opt_fd = elf_link_hash_lookup (&htab->elf, "__tls_get_addr_opt",
-				     FALSE, FALSE, TRUE);
-      if (opt_fd != NULL
-	  && (opt_fd->root.type == bfd_link_hash_defined
-	      || opt_fd->root.type == bfd_link_hash_defweak))
-	{
-	  /* If glibc supports an optimized __tls_get_addr call stub,
-	     signalled by the presence of __tls_get_addr_opt, and we'll
-	     be calling __tls_get_addr via a plt call stub, then
-	     make __tls_get_addr point to __tls_get_addr_opt.  */
-	  tga_fd = &htab->tls_get_addr_fd->elf;
-	  if (htab->elf.dynamic_sections_created
-	      && tga_fd != NULL
-	      && (tga_fd->type == STT_FUNC
-		  || tga_fd->needs_plt)
-	      && !(SYMBOL_CALLS_LOCAL (info, tga_fd)
-		   || (ELF_ST_VISIBILITY (tga_fd->other) != STV_DEFAULT
-		       && tga_fd->root.type == bfd_link_hash_undefweak)))
-	    {
-	      struct plt_entry *ent;
-
-	      for (ent = tga_fd->plt.plist; ent != NULL; ent = ent->next)
-		if (ent->plt.refcount > 0)
-		  break;
-	      if (ent != NULL)
-		{
-		  tga_fd->root.type = bfd_link_hash_indirect;
-		  tga_fd->root.u.i.link = &opt_fd->root;
-		  ppc64_elf_copy_indirect_symbol (info, opt_fd, tga_fd);
-		  opt_fd->forced_local = 0;
-		  if (opt_fd->dynindx != -1)
-		    {
-		      /* Use __tls_get_addr_opt in dynamic relocations.  */
-		      opt_fd->dynindx = -1;
-		      _bfd_elf_strtab_delref (elf_hash_table (info)->dynstr,
-					      opt_fd->dynstr_index);
-		      if (!bfd_elf_link_record_dynamic_symbol (info, opt_fd))
-			return NULL;
-		    }
-		  htab->tls_get_addr_fd = (struct ppc_link_hash_entry *) opt_fd;
-		  tga = &htab->tls_get_addr->elf;
-		  if (opt != NULL && tga != NULL)
-		    {
-		      tga->root.type = bfd_link_hash_indirect;
-		      tga->root.u.i.link = &opt->root;
-		      ppc64_elf_copy_indirect_symbol (info, opt, tga);
-		      opt->forced_local = 0;
-		      _bfd_elf_link_hash_hide_symbol (info, opt,
-						      tga->forced_local);
-		      htab->tls_get_addr = (struct ppc_link_hash_entry *) opt;
-		    }
-		  htab->tls_get_addr_fd->oh = htab->tls_get_addr;
-		  htab->tls_get_addr_fd->is_func_descriptor = 1;
-		  if (htab->tls_get_addr != NULL)
-		    {
-		      htab->tls_get_addr->oh = htab->tls_get_addr_fd;
-		      htab->tls_get_addr->is_func = 1;
-		    }
-		}
-	    }
-	}
-      else if (htab->params->tls_get_addr_opt < 0)
-	htab->params->tls_get_addr_opt = 0;
-    }
-  return _bfd_elf_tls_setup (info->output_bfd, info);
-}
-
-/* Return TRUE iff REL is a branch reloc with a global symbol matching
-   HASH1 or HASH2.  */
-
-static bfd_boolean
-branch_reloc_hash_match (const bfd *ibfd,
-			 const Elf_Internal_Rela *rel,
-			 const struct ppc_link_hash_entry *hash1,
-			 const struct ppc_link_hash_entry *hash2)
-{
-  Elf_Internal_Shdr *symtab_hdr = &elf_symtab_hdr (ibfd);
-  enum elf_ppc64_reloc_type r_type = ELF64_R_TYPE (rel->r_info);
-  unsigned int r_symndx = ELF64_R_SYM (rel->r_info);
-
-  if (r_symndx >= symtab_hdr->sh_info && is_branch_reloc (r_type))
-    {
-      struct elf_link_hash_entry **sym_hashes = elf_sym_hashes (ibfd);
-      struct elf_link_hash_entry *h;
-
-      h = sym_hashes[r_symndx - symtab_hdr->sh_info];
-      h = elf_follow_link (h);
-      if (h == &hash1->elf || h == &hash2->elf)
-	return TRUE;
-    }
-  return FALSE;
-}
-
-/* Run through all the TLS relocs looking for optimization
-   opportunities.  The linker has been hacked (see ppc64elf.em) to do
-   a preliminary section layout so that we know the TLS segment
-   offsets.  We can't optimize earlier because some optimizations need
-   to know the tp offset, and we need to optimize before allocating
-   dynamic relocations.  */
-
-bfd_boolean
-ppc64_elf_tls_optimize (struct bfd_link_info *info)
-{
-  bfd *ibfd;
-  asection *sec;
-  struct ppc_link_hash_table *htab;
-  unsigned char *toc_ref;
-  int pass;
-
-  if (!bfd_link_executable (info))
-    return TRUE;
-
-  htab = ppc_hash_table (info);
-  if (htab == NULL)
-    return FALSE;
-
-  /* Make two passes over the relocs.  On the first pass, mark toc
-     entries involved with tls relocs, and check that tls relocs
-     involved in setting up a tls_get_addr call are indeed followed by
-     such a call.  If they are not, we can't do any tls optimization.
-     On the second pass twiddle tls_mask flags to notify
-     relocate_section that optimization can be done, and adjust got
-     and plt refcounts.  */
-  toc_ref = NULL;
-  for (pass = 0; pass < 2; ++pass)
-    for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
-      {
-	Elf_Internal_Sym *locsyms = NULL;
-	asection *toc = bfd_get_section_by_name (ibfd, ".toc");
-
-	for (sec = ibfd->sections; sec != NULL; sec = sec->next)
-	  if (sec->has_tls_reloc && !bfd_is_abs_section (sec->output_section))
-	    {
-	      Elf_Internal_Rela *relstart, *rel, *relend;
-	      bfd_boolean found_tls_get_addr_arg = 0;
-
-	      /* Read the relocations.  */
-	      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
-						    info->keep_memory);
-	      if (relstart == NULL)
-		{
-		  free (toc_ref);
-		  return FALSE;
-		}
-
-	      relend = relstart + sec->reloc_count;
-	      for (rel = relstart; rel < relend; rel++)
-		{
-		  enum elf_ppc64_reloc_type r_type;
-		  unsigned long r_symndx;
-		  struct elf_link_hash_entry *h;
-		  Elf_Internal_Sym *sym;
-		  asection *sym_sec;
-		  unsigned char *tls_mask;
-		  unsigned char tls_set, tls_clear, tls_type = 0;
-		  bfd_vma value;
-		  bfd_boolean ok_tprel, is_local;
-		  long toc_ref_index = 0;
-		  int expecting_tls_get_addr = 0;
-		  bfd_boolean ret = FALSE;
-
-		  r_symndx = ELF64_R_SYM (rel->r_info);
-		  if (!get_sym_h (&h, &sym, &sym_sec, &tls_mask, &locsyms,
-				  r_symndx, ibfd))
-		    {
-		    err_free_rel:
-		      if (elf_section_data (sec)->relocs != relstart)
-			free (relstart);
-		      if (toc_ref != NULL)
-			free (toc_ref);
-		      if (locsyms != NULL
-			  && (elf_symtab_hdr (ibfd).contents
-			      != (unsigned char *) locsyms))
-			free (locsyms);
-		      return ret;
-		    }
-
-		  if (h != NULL)
-		    {
-		      if (h->root.type == bfd_link_hash_defined
-			  || h->root.type == bfd_link_hash_defweak)
-			value = h->root.u.def.value;
-		      else if (h->root.type == bfd_link_hash_undefweak)
-			value = 0;
-		      else
-			{
-			  found_tls_get_addr_arg = 0;
-			  continue;
-			}
-		    }
-		  else
-		    /* Symbols referenced by TLS relocs must be of type
-		       STT_TLS.  So no need for .opd local sym adjust.  */
-		    value = sym->st_value;
-
-		  ok_tprel = FALSE;
-		  is_local = FALSE;
-		  if (h == NULL
-		      || !h->def_dynamic)
-		    {
-		      is_local = TRUE;
-		      if (h != NULL
-			  && h->root.type == bfd_link_hash_undefweak)
-			ok_tprel = TRUE;
-		      else if (sym_sec != NULL
-			       && sym_sec->output_section != NULL)
-			{
-			  value += sym_sec->output_offset;
-			  value += sym_sec->output_section->vma;
-			  value -= htab->elf.tls_sec->vma;
-			  ok_tprel = (value + TP_OFFSET + ((bfd_vma) 1 << 31)
-				      < (bfd_vma) 1 << 32);
-			}
-		    }
-
-		  r_type = ELF64_R_TYPE (rel->r_info);
-		  /* If this section has old-style __tls_get_addr calls
-		     without marker relocs, then check that each
-		     __tls_get_addr call reloc is preceded by a reloc
-		     that conceivably belongs to the __tls_get_addr arg
-		     setup insn.  If we don't find matching arg setup
-		     relocs, don't do any tls optimization.  */
-		  if (pass == 0
-		      && sec->has_tls_get_addr_call
-		      && h != NULL
-		      && (h == &htab->tls_get_addr->elf
-			  || h == &htab->tls_get_addr_fd->elf)
-		      && !found_tls_get_addr_arg
-		      && is_branch_reloc (r_type))
-		    {
-		      info->callbacks->minfo (_("%H __tls_get_addr lost arg, "
-						"TLS optimization disabled\n"),
-					      ibfd, sec, rel->r_offset);
-		      ret = TRUE;
-		      goto err_free_rel;
-		    }
-
-		  found_tls_get_addr_arg = 0;
-		  switch (r_type)
-		    {
-		    case R_PPC64_GOT_TLSLD16:
-		    case R_PPC64_GOT_TLSLD16_LO:
-		      expecting_tls_get_addr = 1;
-		      found_tls_get_addr_arg = 1;
-		      /* Fall through.  */
-
-		    case R_PPC64_GOT_TLSLD16_HI:
-		    case R_PPC64_GOT_TLSLD16_HA:
-		      /* These relocs should never be against a symbol
-			 defined in a shared lib.  Leave them alone if
-			 that turns out to be the case.  */
-		      if (!is_local)
-			continue;
-
-		      /* LD -> LE */
-		      tls_set = 0;
-		      tls_clear = TLS_LD;
-		      tls_type = TLS_TLS | TLS_LD;
-		      break;
-
-		    case R_PPC64_GOT_TLSGD16:
-		    case R_PPC64_GOT_TLSGD16_LO:
-		      expecting_tls_get_addr = 1;
-		      found_tls_get_addr_arg = 1;
-		      /* Fall through. */
-
-		    case R_PPC64_GOT_TLSGD16_HI:
-		    case R_PPC64_GOT_TLSGD16_HA:
-		      if (ok_tprel)
-			/* GD -> LE */
-			tls_set = 0;
-		      else
-			/* GD -> IE */
-			tls_set = TLS_TLS | TLS_TPRELGD;
-		      tls_clear = TLS_GD;
-		      tls_type = TLS_TLS | TLS_GD;
-		      break;
-
-		    case R_PPC64_GOT_TPREL16_DS:
-		    case R_PPC64_GOT_TPREL16_LO_DS:
-		    case R_PPC64_GOT_TPREL16_HI:
-		    case R_PPC64_GOT_TPREL16_HA:
-		      if (ok_tprel)
-			{
-			  /* IE -> LE */
-			  tls_set = 0;
-			  tls_clear = TLS_TPREL;
-			  tls_type = TLS_TLS | TLS_TPREL;
-			  break;
-			}
-		      continue;
-
-		    case R_PPC64_TLSGD:
-		    case R_PPC64_TLSLD:
-		      found_tls_get_addr_arg = 1;
-		      /* Fall through.  */
-
-		    case R_PPC64_TLS:
-		    case R_PPC64_TOC16:
-		    case R_PPC64_TOC16_LO:
-		      if (sym_sec == NULL || sym_sec != toc)
-			continue;
-
-		      /* Mark this toc entry as referenced by a TLS
-			 code sequence.  We can do that now in the
-			 case of R_PPC64_TLS, and after checking for
-			 tls_get_addr for the TOC16 relocs.  */
-		      if (toc_ref == NULL)
-			toc_ref = bfd_zmalloc (toc->output_section->rawsize / 8);
-		      if (toc_ref == NULL)
-			goto err_free_rel;
-
-		      if (h != NULL)
-			value = h->root.u.def.value;
-		      else
-			value = sym->st_value;
-		      value += rel->r_addend;
-		      if (value % 8 != 0)
-			continue;
-		      BFD_ASSERT (value < toc->size
-				  && toc->output_offset % 8 == 0);
-		      toc_ref_index = (value + toc->output_offset) / 8;
-		      if (r_type == R_PPC64_TLS
-			  || r_type == R_PPC64_TLSGD
-			  || r_type == R_PPC64_TLSLD)
-			{
-			  toc_ref[toc_ref_index] = 1;
-			  continue;
-			}
-
-		      if (pass != 0 && toc_ref[toc_ref_index] == 0)
-			continue;
-
-		      tls_set = 0;
-		      tls_clear = 0;
-		      expecting_tls_get_addr = 2;
-		      break;
-
-		    case R_PPC64_TPREL64:
-		      if (pass == 0
-			  || sec != toc
-			  || toc_ref == NULL
-			  || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
-			continue;
-		      if (ok_tprel)
-			{
-			  /* IE -> LE */
-			  tls_set = TLS_EXPLICIT;
-			  tls_clear = TLS_TPREL;
-			  break;
-			}
-		      continue;
-
-		    case R_PPC64_DTPMOD64:
-		      if (pass == 0
-			  || sec != toc
-			  || toc_ref == NULL
-			  || !toc_ref[(rel->r_offset + toc->output_offset) / 8])
-			continue;
-		      if (rel + 1 < relend
-			  && (rel[1].r_info
-			      == ELF64_R_INFO (r_symndx, R_PPC64_DTPREL64))
-			  && rel[1].r_offset == rel->r_offset + 8)
-			{
-			  if (ok_tprel)
-			    /* GD -> LE */
-			    tls_set = TLS_EXPLICIT | TLS_GD;
-			  else
-			    /* GD -> IE */
-			    tls_set = TLS_EXPLICIT | TLS_GD | TLS_TPRELGD;
-			  tls_clear = TLS_GD;
-			}
-		      else
-			{
-			  if (!is_local)
-			    continue;
-
-			  /* LD -> LE */
-			  tls_set = TLS_EXPLICIT;
-			  tls_clear = TLS_LD;
-			}
-		      break;
-
-		    default:
-		      continue;
-		    }
-
-		  if (pass == 0)
-		    {
-		      if (!expecting_tls_get_addr
-			  || !sec->has_tls_get_addr_call)
-			continue;
-
-		      if (rel + 1 < relend
-			  && branch_reloc_hash_match (ibfd, rel + 1,
-						      htab->tls_get_addr,
-						      htab->tls_get_addr_fd))
-			{
-			  if (expecting_tls_get_addr == 2)
-			    {
-			      /* Check for toc tls entries.  */
-			      unsigned char *toc_tls;
-			      int retval;
-
-			      retval = get_tls_mask (&toc_tls, NULL, NULL,
-						     &locsyms,
-						     rel, ibfd);
-			      if (retval == 0)
-				goto err_free_rel;
-			      if (toc_tls != NULL)
-				{
-				  if ((*toc_tls & (TLS_GD | TLS_LD)) != 0)
-				    found_tls_get_addr_arg = 1;
-				  if (retval > 1)
-				    toc_ref[toc_ref_index] = 1;
-				}
-			    }
-			  continue;
-			}
-
-		      if (expecting_tls_get_addr != 1)
-			continue;
-
-		      /* Uh oh, we didn't find the expected call.  We
-			 could just mark this symbol to exclude it
-			 from tls optimization but it's safer to skip
-			 the entire optimization.  */
-		      /* xgettext:c-format */
-		      info->callbacks->minfo (_("%H arg lost __tls_get_addr, "
-						"TLS optimization disabled\n"),
-					      ibfd, sec, rel->r_offset);
-		      ret = TRUE;
-		      goto err_free_rel;
-		    }
-
-		  if (expecting_tls_get_addr && htab->tls_get_addr != NULL)
-		    {
-		      struct plt_entry *ent;
-		      for (ent = htab->tls_get_addr->elf.plt.plist;
-			   ent != NULL;
-			   ent = ent->next)
-			if (ent->addend == 0)
-			  {
-			    if (ent->plt.refcount > 0)
-			      {
-				ent->plt.refcount -= 1;
-				expecting_tls_get_addr = 0;
-			      }
-			    break;
-			  }
-		    }
-
-		  if (expecting_tls_get_addr && htab->tls_get_addr_fd != NULL)
-		    {
-		      struct plt_entry *ent;
-		      for (ent = htab->tls_get_addr_fd->elf.plt.plist;
-			   ent != NULL;
-			   ent = ent->next)
-			if (ent->addend == 0)
-			  {
-			    if (ent->plt.refcount > 0)
-			      ent->plt.refcount -= 1;
-			    break;
-			  }
-		    }
-
-		  if (tls_clear == 0)
-		    continue;
-
-		  if ((tls_set & TLS_EXPLICIT) == 0)
-		    {
-		      struct got_entry *ent;
-
-		      /* Adjust got entry for this reloc.  */
-		      if (h != NULL)
-			ent = h->got.glist;
-		      else
-			ent = elf_local_got_ents (ibfd)[r_symndx];
-
-		      for (; ent != NULL; ent = ent->next)
-			if (ent->addend == rel->r_addend
-			    && ent->owner == ibfd
-			    && ent->tls_type == tls_type)
-			  break;
-		      if (ent == NULL)
-			abort ();
-
-		      if (tls_set == 0)
-			{
-			  /* We managed to get rid of a got entry.  */
-			  if (ent->got.refcount > 0)
-			    ent->got.refcount -= 1;
-			}
-		    }
-		  else
-		    {
-		      /* If we got rid of a DTPMOD/DTPREL reloc pair then
-			 we'll lose one or two dyn relocs.  */
-		      if (!dec_dynrel_count (rel->r_info, sec, info,
-					     NULL, h, sym))
-			return FALSE;
-
-		      if (tls_set == (TLS_EXPLICIT | TLS_GD))
-			{
-			  if (!dec_dynrel_count ((rel + 1)->r_info, sec, info,
-						 NULL, h, sym))
-			    return FALSE;
-			}
-		    }
-
-		  *tls_mask |= tls_set;
-		  *tls_mask &= ~tls_clear;
-		}
-
-	      if (elf_section_data (sec)->relocs != relstart)
-		free (relstart);
-	    }
-
-	if (locsyms != NULL
-	    && (elf_symtab_hdr (ibfd).contents != (unsigned char *) locsyms))
-	  {
-	    if (!info->keep_memory)
-	      free (locsyms);
-	    else
-	      elf_symtab_hdr (ibfd).contents = (unsigned char *) locsyms;
-	  }
-      }
-
-  if (toc_ref != NULL)
-    free (toc_ref);
-  return TRUE;
-}
-
-/* Called via elf_link_hash_traverse from ppc64_elf_edit_toc to adjust
-   the values of any global symbols in a toc section that has been
-   edited.  Globals in toc sections should be a rarity, so this function
-   sets a flag if any are found in toc sections other than the one just
-   edited, so that futher hash table traversals can be avoided.  */
-
-struct adjust_toc_info
-{
-  asection *toc;
-  unsigned long *skip;
-  bfd_boolean global_toc_syms;
-};
-
-enum toc_skip_enum { ref_from_discarded = 1, can_optimize = 2 };
-
-static bfd_boolean
-adjust_toc_syms (struct elf_link_hash_entry *h, void *inf)
-{
-  struct ppc_link_hash_entry *eh;
-  struct adjust_toc_info *toc_inf = (struct adjust_toc_info *) inf;
-  unsigned long i;
-
-  if (h->root.type != bfd_link_hash_defined
-      && h->root.type != bfd_link_hash_defweak)
-    return TRUE;
-
-  eh = (struct ppc_link_hash_entry *) h;
-  if (eh->adjust_done)
-    return TRUE;
-
-  if (eh->elf.root.u.def.section == toc_inf->toc)
-    {
-      if (eh->elf.root.u.def.value > toc_inf->toc->rawsize)
-	i = toc_inf->toc->rawsize >> 3;
-      else
-	i = eh->elf.root.u.def.value >> 3;
-
-      if ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0)
-	{
-	  _bfd_error_handler
-	    (_("%s defined on removed toc entry"), eh->elf.root.root.string);
-	  do
-	    ++i;
-	  while ((toc_inf->skip[i] & (ref_from_discarded | can_optimize)) != 0);
-	  eh->elf.root.u.def.value = (bfd_vma) i << 3;
-	}
-
-      eh->elf.root.u.def.value -= toc_inf->skip[i];
-      eh->adjust_done = 1;
-    }
-  else if (strcmp (eh->elf.root.u.def.section->name, ".toc") == 0)
-    toc_inf->global_toc_syms = TRUE;
-
-  return TRUE;
-}
-
-/* Return TRUE iff INSN with a relocation of R_TYPE is one we expect
-   on a _LO variety toc/got reloc.  */
-
-static bfd_boolean
-ok_lo_toc_insn (unsigned int insn, enum elf_ppc64_reloc_type r_type)
-{
-  return ((insn & (0x3f << 26)) == 12u << 26 /* addic */
-	  || (insn & (0x3f << 26)) == 14u << 26 /* addi */
-	  || (insn & (0x3f << 26)) == 32u << 26 /* lwz */
-	  || (insn & (0x3f << 26)) == 34u << 26 /* lbz */
-	  || (insn & (0x3f << 26)) == 36u << 26 /* stw */
-	  || (insn & (0x3f << 26)) == 38u << 26 /* stb */
-	  || (insn & (0x3f << 26)) == 40u << 26 /* lhz */
-	  || (insn & (0x3f << 26)) == 42u << 26 /* lha */
-	  || (insn & (0x3f << 26)) == 44u << 26 /* sth */
-	  || (insn & (0x3f << 26)) == 46u << 26 /* lmw */
-	  || (insn & (0x3f << 26)) == 47u << 26 /* stmw */
-	  || (insn & (0x3f << 26)) == 48u << 26 /* lfs */
-	  || (insn & (0x3f << 26)) == 50u << 26 /* lfd */
-	  || (insn & (0x3f << 26)) == 52u << 26 /* stfs */
-	  || (insn & (0x3f << 26)) == 54u << 26 /* stfd */
-	  || (insn & (0x3f << 26)) == 56u << 26 /* lq,lfq */
-	  || ((insn & (0x3f << 26)) == 57u << 26 /* lxsd,lxssp,lfdp */
-	      /* Exclude lfqu by testing reloc.  If relocs are ever
-		 defined for the reduced D field in psq_lu then those
-		 will need testing too.  */
-	      && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO)
-	  || ((insn & (0x3f << 26)) == 58u << 26 /* ld,lwa */
-	      && (insn & 1) == 0)
-	  || (insn & (0x3f << 26)) == 60u << 26 /* stfq */
-	  || ((insn & (0x3f << 26)) == 61u << 26 /* lxv,stx{v,sd,ssp},stfdp */
-	      /* Exclude stfqu.  psq_stu as above for psq_lu.  */
-	      && r_type != R_PPC64_TOC16_LO && r_type != R_PPC64_GOT16_LO)
-	  || ((insn & (0x3f << 26)) == 62u << 26 /* std,stq */
-	      && (insn & 1) == 0));
-}
-
-/* Examine all relocs referencing .toc sections in order to remove
-   unused .toc entries.  */
-
-bfd_boolean
-ppc64_elf_edit_toc (struct bfd_link_info *info)
-{
-  bfd *ibfd;
-  struct adjust_toc_info toc_inf;
-  struct ppc_link_hash_table *htab = ppc_hash_table (info);
-
-  htab->do_toc_opt = 1;
-  toc_inf.global_toc_syms = TRUE;
-  for (ibfd = info->input_bfds; ibfd != NULL; ibfd = ibfd->link.next)
-    {
-      asection *toc, *sec;
-      Elf_Internal_Shdr *symtab_hdr;
-      Elf_Internal_Sym *local_syms;
-      Elf_Internal_Rela *relstart, *rel, *toc_relocs;
-      unsigned long *skip, *drop;
-      unsigned char *used;
-      unsigned char *keep, last, some_unused;
-
-      if (!is_ppc64_elf (ibfd))
-	continue;
-
-      toc = bfd_get_section_by_name (ibfd, ".toc");
-      if (toc == NULL
-	  || toc->size == 0
-	  || toc->sec_info_type == SEC_INFO_TYPE_JUST_SYMS
-	  || discarded_section (toc))
-	continue;
-
-      toc_relocs = NULL;
-      local_syms = NULL;
-      symtab_hdr = &elf_symtab_hdr (ibfd);
-
-      /* Look at sections dropped from the final link.  */
-      skip = NULL;
-      relstart = NULL;
-      for (sec = ibfd->sections; sec != NULL; sec = sec->next)
-	{
-	  if (sec->reloc_count == 0
-	      || !discarded_section (sec)
-	      || get_opd_info (sec)
-	      || (sec->flags & SEC_ALLOC) == 0
-	      || (sec->flags & SEC_DEBUGGING) != 0)
-	    continue;
-
-	  relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL, FALSE);
-	  if (relstart == NULL)
-	    goto error_ret;
-
-	  /* Run through the relocs to see which toc entries might be
-	     unused.  */
-	  for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
-	    {
-	      enum elf_ppc64_reloc_type r_type;
-	      unsigned long r_symndx;
-	      asection *sym_sec;
-	      struct elf_link_hash_entry *h;
-	      Elf_Internal_Sym *sym;
-	      bfd_vma val;
-
-	      r_type = ELF64_R_TYPE (rel->r_info);
-	      switch (r_type)
-		{
-		default:
-		  continue;
-
-		case R_PPC64_TOC16:
-		case R_PPC64_TOC16_LO:
-		case R_PPC64_TOC16_HI:
-		case R_PPC64_TOC16_HA:
-		case R_PPC64_TOC16_DS:
-		case R_PPC64_TOC16_LO_DS:
-		  break;
-		}
-
-	      r_symndx = ELF64_R_SYM (rel->r_info);
-	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
-			      r_symndx, ibfd))
-		goto error_ret;
-
-	      if (sym_sec != toc)
-		continue;
-
-	      if (h != NULL)
-		val = h->root.u.def.value;
-	      else
-		val = sym->st_value;
-	      val += rel->r_addend;
-
-	      if (val >= toc->size)
-		continue;
-
-	      /* Anything in the toc ought to be aligned to 8 bytes.
-		 If not, don't mark as unused.  */
-	      if (val & 7)
-		continue;
-
-	      if (skip == NULL)
-		{
-		  skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
-		  if (skip == NULL)
-		    goto error_ret;
-		}
-
-	      skip[val >> 3] = ref_from_discarded;
-	    }
-
-	  if (elf_section_data (sec)->relocs != relstart)
-	    free (relstart);
-	}
-
-      /* For largetoc loads of address constants, we can convert
-	 .  addis rx,2,addr@got@ha
-	 .  ld ry,addr@got@l(rx)
-	 to
-	 .  addis rx,2,addr@toc@ha
-	 .  addi ry,rx,addr@toc@l
-	 when addr is within 2G of the toc pointer.  This then means
-	 that the word storing "addr" in the toc is no longer needed.  */
-
-      if (!ppc64_elf_tdata (ibfd)->has_small_toc_reloc
-	  && toc->output_section->rawsize < (bfd_vma) 1 << 31
-	  && toc->reloc_count != 0)
-	{
-	  /* Read toc relocs.  */
-	  toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
-						  info->keep_memory);
-	  if (toc_relocs == NULL)
-	    goto error_ret;
-
-	  for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
-	    {
-	      enum elf_ppc64_reloc_type r_type;
-	      unsigned long r_symndx;
-	      asection *sym_sec;
-	      struct elf_link_hash_entry *h;
-	      Elf_Internal_Sym *sym;
-	      bfd_vma val, addr;
-
-	      r_type = ELF64_R_TYPE (rel->r_info);
-	      if (r_type != R_PPC64_ADDR64)
-		continue;
-
-	      r_symndx = ELF64_R_SYM (rel->r_info);
-	      if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
-			      r_symndx, ibfd))
-		goto error_ret;
-
-	      if (sym_sec == NULL
-		  || sym_sec->output_section == NULL
-		  || discarded_section (sym_sec))
-		continue;
-
-	      if (!SYMBOL_REFERENCES_LOCAL (info, h))
-		continue;
-
-	      if (h != NULL)
-		{
-		  if (h->type == STT_GNU_IFUNC)
-		    continue;
-		  val = h->root.u.def.value;
-		}
-	      else
-		{
-		  if (ELF_ST_TYPE (sym->st_info) == STT_GNU_IFUNC)
-		    continue;
-		  val = sym->st_value;
-		}
-	      val += rel->r_addend;
-	      val += sym_sec->output_section->vma + sym_sec->output_offset;
-
-	      /* We don't yet know the exact toc pointer value, but we
-		 know it will be somewhere in the toc section.  Don't
-		 optimize if the difference from any possible toc
-		 pointer is outside [ff..f80008000, 7fff7fff].  */
-	      addr = toc->output_section->vma + TOC_BASE_OFF;
-	      if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
-		continue;
-
-	      addr = toc->output_section->vma + toc->output_section->rawsize;
-	      if (val - addr + (bfd_vma) 0x80008000 >= (bfd_vma) 1 << 32)
-		continue;
-
-	      if (skip == NULL)
-		{
-		  skip = bfd_zmalloc (sizeof (*skip) * (toc->size + 15) / 8);
-		  if (skip == NULL)
-		    goto error_ret;
-		}
-
-	      skip[rel->r_offset >> 3]
-		|= can_optimize | ((rel - toc_relocs) << 2);
-	    }
-	}
-
-      if (skip == NULL)
-	continue;
-
-      used = bfd_zmalloc (sizeof (*used) * (toc->size + 7) / 8);
-      if (used == NULL)
-	{
-	error_ret:
-	  if (local_syms != NULL
-	      && symtab_hdr->contents != (unsigned char *) local_syms)
-	    free (local_syms);
-	  if (sec != NULL
-	      && relstart != NULL
-	      && elf_section_data (sec)->relocs != relstart)
-	    free (relstart);
-	  if (toc_relocs != NULL
-	      && elf_section_data (toc)->relocs != toc_relocs)
-	    free (toc_relocs);
-	  if (skip != NULL)
-	    free (skip);
-	  return FALSE;
-	}
-
-      /* Now check all kept sections that might reference the toc.
-	 Check the toc itself last.  */
-      for (sec = (ibfd->sections == toc && toc->next ? toc->next
-		  : ibfd->sections);
-	   sec != NULL;
-	   sec = (sec == toc ? NULL
-		  : sec->next == NULL ? toc
-		  : sec->next == toc && toc->next ? toc->next
-		  : sec->next))
-	{
-	  int repeat;
-
-	  if (sec->reloc_count == 0
-	      || discarded_section (sec)
-	      || get_opd_info (sec)
-	      || (sec->flags & SEC_ALLOC) == 0
-	      || (sec->flags & SEC_DEBUGGING) != 0)
-	    continue;
-
-	  relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
-						info->keep_memory);
-	  if (relstart == NULL)
-	    {
-	      free (used);
-	      goto error_ret;
-	    }
-
-	  /* Mark toc entries referenced as used.  */
-	  do
-	    {
-	      repeat = 0;
-	      for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
-		{
-		  enum elf_ppc64_reloc_type r_type;
-		  unsigned long r_symndx;
-		  asection *sym_sec;
-		  struct elf_link_hash_entry *h;
-		  Elf_Internal_Sym *sym;
-		  bfd_vma val;
-		  enum {no_check, check_lo, check_ha} insn_check;
-
-		  r_type = ELF64_R_TYPE (rel->r_info);
-		  switch (r_type)
-		    {
-		    default:
-		      insn_check = no_check;
-		      break;
-
-		    case R_PPC64_GOT_TLSLD16_HA:
-		    case R_PPC64_GOT_TLSGD16_HA:
-		    case R_PPC64_GOT_TPREL16_HA:
-		    case R_PPC64_GOT_DTPREL16_HA:
-		    case R_PPC64_GOT16_HA:
-		    case R_PPC64_TOC16_HA:
-		      insn_check = check_ha;
-		      break;
-
-		    case R_PPC64_GOT_TLSLD16_LO:
-		    case R_PPC64_GOT_TLSGD16_LO:
-		    case R_PPC64_GOT_TPREL16_LO_DS:
-		    case R_PPC64_GOT_DTPREL16_LO_DS:
-		    case R_PPC64_GOT16_LO:
-		    case R_PPC64_GOT16_LO_DS:
-		    case R_PPC64_TOC16_LO:
-		    case R_PPC64_TOC16_LO_DS:
-		      insn_check = check_lo;
-		      break;
-		    }
-
-		  if (insn_check != no_check)
-		    {
-		      bfd_vma off = rel->r_offset & ~3;
-		      unsigned char buf[4];
-		      unsigned int insn;
-
-		      if (!bfd_get_section_contents (ibfd, sec, buf, off, 4))
-			{
-			  free (used);
-			  goto error_ret;
-			}
-		      insn = bfd_get_32 (ibfd, buf);
-		      if (insn_check == check_lo
-			  ? !ok_lo_toc_insn (insn, r_type)
-			  : ((insn & ((0x3f << 26) | 0x1f << 16))
-			     != ((15u << 26) | (2 << 16)) /* addis rt,2,imm */))
-			{
-			  char str[12];
-
-			  ppc64_elf_tdata (ibfd)->unexpected_toc_insn = 1;
-			  sprintf (str, "%#08x", insn);
-			  info->callbacks->einfo
-			    /* xgettext:c-format */
-			    (_("%P: %H: toc optimization is not supported for"
-			       " %s instruction.\n"),
-			     ibfd, sec, rel->r_offset & ~3, str);
-			}
-		    }
-
-		  switch (r_type)
-		    {
-		    case R_PPC64_TOC16:
-		    case R_PPC64_TOC16_LO:
-		    case R_PPC64_TOC16_HI:
-		    case R_PPC64_TOC16_HA:
-		    case R_PPC64_TOC16_DS:
-		    case R_PPC64_TOC16_LO_DS:
-		      /* In case we're taking addresses of toc entries.  */
-		    case R_PPC64_ADDR64:
-		      break;
-
-		    default:
-		      continue;
-		    }
-
-		  r_symndx = ELF64_R_SYM (rel->r_info);
-		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
-				  r_symndx, ibfd))
-		    {
-		      free (used);
-		      goto error_ret;
-		    }
-
-		  if (sym_sec != toc)
-		    continue;
-
-		  if (h != NULL)
-		    val = h->root.u.def.value;
-		  else
-		    val = sym->st_value;
-		  val += rel->r_addend;
-
-		  if (val >= toc->size)
-		    continue;
-
-		  if ((skip[val >> 3] & can_optimize) != 0)
-		    {
-		      bfd_vma off;
-		      unsigned char opc;
-
-		      switch (r_type)
-			{
-			case R_PPC64_TOC16_HA:
-			  break;
-
-			case R_PPC64_TOC16_LO_DS:
-			  off = rel->r_offset;
-			  off += (bfd_big_endian (ibfd) ? -2 : 3);
-			  if (!bfd_get_section_contents (ibfd, sec, &opc,
-							 off, 1))
-			    {
-			      free (used);
-			      goto error_ret;
-			    }
-			  if ((opc & (0x3f << 2)) == (58u << 2))
-			    break;
-			  /* Fall through.  */
-
-			default:
-			  /* Wrong sort of reloc, or not a ld.  We may
-			     as well clear ref_from_discarded too.  */
-			  skip[val >> 3] = 0;
-			}
-		    }
-
-		  if (sec != toc)
-		    used[val >> 3] = 1;
-		  /* For the toc section, we only mark as used if this
-		     entry itself isn't unused.  */
-		  else if ((used[rel->r_offset >> 3]
-			    || !(skip[rel->r_offset >> 3] & ref_from_discarded))
-			   && !used[val >> 3])
-		    {
-		      /* Do all the relocs again, to catch reference
-			 chains.  */
-		      repeat = 1;
-		      used[val >> 3] = 1;
-		    }
-		}
-	    }
-	  while (repeat);
-
-	  if (elf_section_data (sec)->relocs != relstart)
-	    free (relstart);
-	}
-
-      /* Merge the used and skip arrays.  Assume that TOC
-	 doublewords not appearing as either used or unused belong
-	 to to an entry more than one doubleword in size.  */
-      for (drop = skip, keep = used, last = 0, some_unused = 0;
-	   drop < skip + (toc->size + 7) / 8;
-	   ++drop, ++keep)
-	{
-	  if (*keep)
-	    {
-	      *drop &= ~ref_from_discarded;
-	      if ((*drop & can_optimize) != 0)
-		some_unused = 1;
-	      last = 0;
-	    }
-	  else if ((*drop & ref_from_discarded) != 0)
-	    {
-	      some_unused = 1;
-	      last = ref_from_discarded;
-	    }
-	  else
-	    *drop = last;
-	}
-
-      free (used);
-
-      if (some_unused)
-	{
-	  bfd_byte *contents, *src;
-	  unsigned long off;
-	  Elf_Internal_Sym *sym;
-	  bfd_boolean local_toc_syms = FALSE;
-
-	  /* Shuffle the toc contents, and at the same time convert the
-	     skip array from booleans into offsets.  */
-	  if (!bfd_malloc_and_get_section (ibfd, toc, &contents))
-	    goto error_ret;
-
-	  elf_section_data (toc)->this_hdr.contents = contents;
-
-	  for (src = contents, off = 0, drop = skip;
-	       src < contents + toc->size;
-	       src += 8, ++drop)
-	    {
-	      if ((*drop & (can_optimize | ref_from_discarded)) != 0)
-		off += 8;
-	      else if (off != 0)
-		{
-		  *drop = off;
-		  memcpy (src - off, src, 8);
-		}
-	    }
-	  *drop = off;
-	  toc->rawsize = toc->size;
-	  toc->size = src - contents - off;
-
-	  /* Adjust addends for relocs against the toc section sym,
-	     and optimize any accesses we can.  */
-	  for (sec = ibfd->sections; sec != NULL; sec = sec->next)
-	    {
-	      if (sec->reloc_count == 0
-		  || discarded_section (sec))
-		continue;
-
-	      relstart = _bfd_elf_link_read_relocs (ibfd, sec, NULL, NULL,
-						    info->keep_memory);
-	      if (relstart == NULL)
-		goto error_ret;
-
-	      for (rel = relstart; rel < relstart + sec->reloc_count; ++rel)
-		{
-		  enum elf_ppc64_reloc_type r_type;
-		  unsigned long r_symndx;
-		  asection *sym_sec;
-		  struct elf_link_hash_entry *h;
-		  bfd_vma val;
-
-		  r_type = ELF64_R_TYPE (rel->r_info);
-		  switch (r_type)
-		    {
-		    default:
-		      continue;
-
-		    case R_PPC64_TOC16:
-		    case R_PPC64_TOC16_LO:
-		    case R_PPC64_TOC16_HI:
-		    case R_PPC64_TOC16_HA:
-		    case R_PPC64_TOC16_DS:
-		    case R_PPC64_TOC16_LO_DS:
-		    case R_PPC64_ADDR64:
-		      break;
-		    }
-
-		  r_symndx = ELF64_R_SYM (rel->r_info);
-		  if (!get_sym_h (&h, &sym, &sym_sec, NULL, &local_syms,
-				  r_symndx, ibfd))
-		    goto error_ret;
-
-		  if (sym_sec != toc)
-		    continue;
-
-		  if (h != NULL)
-		    val = h->root.u.def.value;
-		  else
-		    {
-		      val = sym->st_value;
-		      if (val != 0)
-			local_toc_syms = TRUE;
-		    }
-
-		  val += rel->r_addend;
-
-		  if (val > toc->rawsize)
-		    val = toc->rawsize;
-		  else if ((skip[val >> 3] & ref_from_discarded) != 0)
-		    continue;
-		  else if ((skip[val >> 3] & can_optimize) != 0)
-		    {
-		      Elf_Internal_Rela *tocrel
-			= toc_relocs + (skip[val >> 3] >> 2);
-		      unsigned long tsym = ELF64_R_SYM (tocrel->r_info);
-
-		      switch (r_type)
-			{
-			case R_PPC64_TOC16_HA:
-			  rel->r_info = ELF64_R_INFO (tsym, R_PPC64_TOC16_HA);
-			  break;
-
-			case R_PPC64_TOC16_LO_DS:
-			  rel->r_info = ELF64_R_INFO (tsym, R_PPC64_LO_DS_OPT);
-			  break;
-
-			default:
-			  if (!ppc64_elf_howto_table[R_PPC64_ADDR32])
-			    ppc_howto_init ();
-			  info->callbacks->einfo
-			    /* xgettext:c-format */
-			    (_("%P: %H: %s references "
-			       "optimized away TOC entry\n"),
-			     ibfd, sec, rel->r_offset,
-			     ppc64_elf_howto_table[r_type]->name);
-			  bfd_set_error (bfd_error_bad_value);
-			  goto error_ret;
-			}
-		      rel->r_addend = tocrel->r_addend;
-		      elf_section_data (sec)->relocs = relstart;
-		      continue;
-		    }
-
-		  if (h != NULL || sym->st_value != 0)
-		    continue;
-
-		  rel->r_addend -= skip[val >> 3];
-		  elf_section_data (sec)->relocs = relstart;
-		}
-
-	      if (elf_section_data (sec)->relocs != relstart)
-		free (relstart);
-	    }
-
-	  /* We shouldn't have local or global symbols defined in the TOC,
-	     but handle them anyway.  */
-	  if (local_syms != NULL)
-	    for (sym = local_syms;
-		 sym < local_syms + symtab_hdr->sh_info;
-		 ++sym)
-	      if (sym->st_value != 0
-		  && bfd_section_from_elf_index (ibfd, sym->st_shndx) == toc)
-		{
-		  unsigned long i;
-
-		  if (sym->st_value > toc->rawsize)
-		    i = toc->rawsize >> 3;
-		  else
-		    i = sym->st_value >> 3;
-
-		  if ((skip[i] & (ref_from_discarded | can_optimize)) != 0)
-		    {
-		      if (local_toc_syms)
-			_bfd_error_handler
-			  (_("%s defined on removed toc entry"),
-			   bfd_elf_sym_name (ibfd, symtab_hdr, sym, NULL));
-		      do
-			++i;
-		      while ((skip[i] & (ref_from_discarded | can_optimize)));
-		      sym->st_value = (bfd_vma) i << 3;
-		    }
-
-		  sym->st_value -= skip[i];
-		  symtab_hdr->contents = (unsigned char *) local_syms;
-		}
-
-	  /* Adjust any global syms defined in this toc input section.  */
-	  if (toc_inf.global_toc_syms)
-	    {
-	      toc_inf.toc = toc;
-	      toc_inf.skip = skip;
-	      toc_inf.global_toc_syms = FALSE;
-	      elf_link_hash_traverse (elf_hash_table (info), adjust_toc_syms,
-				      &toc_inf);
-	    }
-
-	  if (toc->reloc_count != 0)
-	    {
-	      Elf_Internal_Shdr *rel_hdr;
-	      Elf_Internal_Rela *wrel;
-	      bfd_size_type sz;
-
-	      /* Remove unused toc relocs, and adjust those we keep.  */
-	      if (toc_relocs == NULL)
-		toc_relocs = _bfd_elf_link_read_relocs (ibfd, toc, NULL, NULL,
-							info->keep_memory);
-	      if (toc_relocs == NULL)
-		goto error_ret;
-
-	      wrel = toc_relocs;
-	      for (rel = toc_relocs; rel < toc_relocs + toc->reloc_count; ++rel)
-		if ((skip[rel->r_offset >> 3]
-		     & (ref_from_discarded | can_optimize)) == 0)
-		  {
-		    wrel->r_offset = rel->r_offset - skip[rel->r_offset >> 3];
-		    wrel->r_info = rel->r_info;
-		    wrel->r_addend = rel->r_addend;
-		    ++wrel;
-		  }
-		else if (!dec_dynrel_count (rel->r_info, toc, info,
-					    &local_syms, NULL, NULL))
-		  goto error_ret;
-
-	      elf_section_data (toc)->relocs = toc_relocs;
-	      toc->reloc_count = wrel - toc_relocs;
-	      rel_hdr = _bfd_elf_single_rel_hdr (toc);
-	      sz = rel_hdr->sh_entsize;
-	      rel_hdr->sh_size = toc->reloc_count * sz;
-	    }
-	}
-      else if (toc_relocs != NULL
-	       && elf_section_data (toc)->relocs != toc_relocs)
-	free (toc_relocs);
-
-      if (local_syms != NULL
-	  && symtab_hdr->contents != (unsigned char *) local_syms)
-	{
-	  if (!info->keep_memory)
-	    free (local_syms);
-	  else
-	    symtab_hdr->contents = (unsigned char *) local_syms;
-	}
-      free (skip);
-    }
-
-  return TRUE;
-}
-
-/* Return true iff input section I references the TOC using
-   instructions limited to +/-32k offsets.  */
-
-bfd_boolean
-ppc64_elf_has_small_toc_reloc (asection *i)
-{
-  return (is_ppc64_elf (i->owner)
-	  && ppc64_elf_tdata (i->owner)->has_small_toc_reloc);
-}
-
-/* Allocate space for one GOT entry.  */
-
-static void
-allocate_got (struct elf_link_hash_entry *h,
-	      struct bfd_link_info *info,
-	      struct got_entry *gent)
-{
-  struct ppc_link_hash_table *htab = ppc_hash_table (info);
-  bfd_boolean dyn;
-  struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
-  int entsize = (gent->tls_type & eh->tls_mask & (TLS_GD | TLS_LD)
-		 ? 16 : 8);
-  int rentsize = (gent->tls_type & eh->tls_mask & TLS_GD
-		  ? 2 : 1) * sizeof (Elf64_External_Rela);
-  asection *got = ppc64_elf_tdata (gent->owner)->got;
-
-  gent->got.offset = got->size;
-  got->size += entsize;
-
-  dyn = htab->elf.dynamic_sections_created;
-  if (h->type == STT_GNU_IFUNC)
-    {
-      htab->elf.irelplt->size += rentsize;
-      htab->got_reli_size += rentsize;
-    }
-  else if ((bfd_link_pic (info)
-	    || WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h))
-	   && (ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
-	       || h->root.type != bfd_link_hash_undefweak))
-    {
-      asection *relgot = ppc64_elf_tdata (gent->owner)->relgot;
-      relgot->size += rentsize;
-    }
-}
-
-/* This function merges got entries in the same toc group.  */
-
-static void
-merge_got_entries (struct got_entry **pent)
-{
-  struct got_entry *ent, *ent2;
-
-  for (ent = *pent; ent != NULL; ent = ent->next)
-    if (!ent->is_indirect)
-      for (ent2 = ent->next; ent2 != NULL; ent2 = ent2->next)
-	if (!ent2->is_indirect
-	    && ent2->addend == ent->addend
-	    && ent2->tls_type == ent->tls_type
-	    && elf_gp (ent2->owner) == elf_gp (ent->owner))
-	  {
-	    ent2->is_indirect = TRUE;
-	    ent2->got.ent = ent;
-	  }
-}
-
-/* Allocate space in .plt, .got and associated reloc sections for
-   dynamic relocs.  */
-
-static bfd_boolean
-allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
-{
-  struct bfd_link_info *info;
-  struct ppc_link_hash_table *htab;
-  asection *s;
-  struct ppc_link_hash_entry *eh;
-  struct got_entry **pgent, *gent;
-
-  if (h->root.type == bfd_link_hash_indirect)
-    return TRUE;
-
-  info = (struct bfd_link_info *) inf;
-  htab = ppc_hash_table (info);
-  if (htab == NULL)
-    return FALSE;
-
-  eh = (struct ppc_link_hash_entry *) h;
-  /* Run through the TLS GD got entries first if we're changing them
-     to TPREL.  */
-  if ((eh->tls_mask & TLS_TPRELGD) != 0)
-    for (gent = h->got.glist; gent != NULL; gent = gent->next)
-      if (gent->got.refcount > 0
-	  && (gent->tls_type & TLS_GD) != 0)
-	{
-	  /* This was a GD entry that has been converted to TPREL.  If
-	     there happens to be a TPREL entry we can use that one.  */
-	  struct got_entry *ent;
-	  for (ent = h->got.glist; ent != NULL; ent = ent->next)
-	    if (ent->got.refcount > 0
-		&& (ent->tls_type & TLS_TPREL) != 0
-		&& ent->addend == gent->addend
-		&& ent->owner == gent->owner)
-	      {
-		gent->got.refcount = 0;
-		break;
-	      }
-
-	  /* If not, then we'll be using our own TPREL entry.  */
-	  if (gent->got.refcount != 0)
-	    gent->tls_type = TLS_TLS | TLS_TPREL;
-	}
-
-  /* Remove any list entry that won't generate a word in the GOT before
-     we call merge_got_entries.  Otherwise we risk merging to empty
-     entries.  */
-  pgent = &h->got.glist;
-  while ((gent = *pgent) != NULL)
-    if (gent->got.refcount > 0)
-      {
-	if ((gent->tls_type & TLS_LD) != 0
-	    && !h->def_dynamic)
-	  {
-	    ppc64_tlsld_got (gent->owner)->got.refcount += 1;
-	    *pgent = gent->next;
-	  }
-	else
-	  pgent = &gent->next;
-      }
-    else
-      *pgent = gent->next;
-
-  if (!htab->do_multi_toc)
-    merge_got_entries (&h->got.glist);
-
-  for (gent = h->got.glist; gent != NULL; gent = gent->next)
-    if (!gent->is_indirect)
-      {
-	/* Make sure this symbol is output as a dynamic symbol.
-	   Undefined weak syms won't yet be marked as dynamic,
-	   nor will all TLS symbols.  */
-	if (h->dynindx == -1
-	    && !h->forced_local
-	    && h->type != STT_GNU_IFUNC
-	    && htab->elf.dynamic_sections_created)
-	  {
-	    if (! bfd_elf_link_record_dynamic_symbol (info, h))
-	      return FALSE;
-	  }
-
-	if (!is_ppc64_elf (gent->owner))
-	  abort ();
-
-	allocate_got (h, info, gent);
-      }
-
-  if (!htab->elf.dynamic_sections_created
-      && h->type != STT_GNU_IFUNC)
-    eh->dyn_relocs = NULL;
-
-  if (eh->dyn_relocs != NULL)
-    {
-      struct elf_dyn_relocs *p, **pp;
-
-      /* In the shared -Bsymbolic case, discard space allocated for
-	 dynamic pc-relative relocs against symbols which turn out to
-	 be defined in regular objects.  For the normal shared case,
-	 discard space for relocs that have become local due to symbol
-	 visibility changes.  */
-
-      if (bfd_link_pic (info))
-	{
-	  /* Relocs that use pc_count are those that appear on a call
-	     insn, or certain REL relocs (see must_be_dyn_reloc) that
-	     can be generated via assembly.  We want calls to
-	     protected symbols to resolve directly to the function
-	     rather than going via the plt.  If people want function
-	     pointer comparisons to work as expected then they should
-	     avoid writing weird assembly.  */
-	  if (SYMBOL_CALLS_LOCAL (info, h))
-	    {
-	      for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
-		{
-		  p->count -= p->pc_count;
-		  p->pc_count = 0;
-		  if (p->count == 0)
-		    *pp = p->next;
-		  else
-		    pp = &p->next;
-		}
-	    }
-
-	  /* Also discard relocs on undefined weak syms with
-	     non-default visibility.  */
-	  if (eh->dyn_relocs != NUL