forked from Imagelibrary/binutils-gdb
Add AIX 64 shared library support and emulation layer for binutils
This commit is contained in:
@@ -1,3 +1,19 @@
|
||||
2002-03-18 Tom Rix <trix@redhat.com>
|
||||
|
||||
* Makefile.am: Add binutils emulation support.
|
||||
* configure.in: Same.
|
||||
* configure.tgt: New file. Same.
|
||||
* ar.c (main): Use ar_emul_parse_arg.
|
||||
(usage): Use ar_emul_usage.
|
||||
(replace_members): Use ar_emul_replace, ar_emul_append.
|
||||
* binemul.c: New file. Define the binutils emulation
|
||||
layer. Define default methods.
|
||||
* binemul.h: New file. Binutils emulation layer header file.
|
||||
* emul_aix.c: New file. AIX binutils emulation.
|
||||
* emul_vanilla.c: New file. Default binutils emulation.
|
||||
* Makefile.in: Regenerate.
|
||||
* configure: Same.
|
||||
|
||||
2002-03-18 Nick Clifton <nickc@cambridge.redhat.com>
|
||||
|
||||
* po/fr.po: Updated version.
|
||||
|
||||
@@ -62,7 +62,7 @@ noinst_PROGRAMS = $(NM_PROG) $(STRIP_PROG) $(DEMANGLER_PROG)
|
||||
|
||||
EXTRA_PROGRAMS = $(NLMCONV_PROG) srconv sysdump coffdump $(DLLTOOL_PROG) $(WINDRES_PROG) $(DLLWRAP_PROG)
|
||||
|
||||
# Stuff that goes in tooldir/ if appropriate
|
||||
# Stuff that goes in tooldir/ if appropriate.
|
||||
TOOL_PROGS = nm-new strip-new ar ranlib dlltool
|
||||
|
||||
BASEDIR = $(srcdir)/..
|
||||
@@ -71,10 +71,15 @@ INCDIR = $(BASEDIR)/include
|
||||
|
||||
MKDEP = gcc -MM
|
||||
|
||||
INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) @HDEFINES@ -I$(srcdir)/../intl -I../intl -DLOCALEDIR="\"$(prefix)/share/locale\""
|
||||
INCLUDES = -D_GNU_SOURCE \
|
||||
-I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) \
|
||||
@HDEFINES@ \
|
||||
-I$(srcdir)/../intl -I../intl \
|
||||
-DLOCALEDIR="\"$(prefix)/share/locale\"" \
|
||||
-Dbin_dummy_emulation=$(EMULATION_VECTOR)
|
||||
|
||||
HFILES = arsup.h bucomm.h budbg.h coffgrok.h debug.h nlmconv.h dlltool.h \
|
||||
windres.h winduni.h
|
||||
windres.h winduni.h binemul.h
|
||||
|
||||
GENERATED_HFILES = arparse.h sysroff.h sysinfo.h defparse.h rcparse.h
|
||||
|
||||
@@ -84,7 +89,7 @@ CFILES = addr2line.c ar.c arsup.c bucomm.c coffdump.c coffgrok.c debug.c \
|
||||
objcopy.c objdump.c prdbg.c rdcoff.c rddbg.c size.c srconv.c \
|
||||
stabs.c strings.c sysdump.c version.c wrstabs.c \
|
||||
windres.c resrc.c rescoff.c resbin.c winduni.c readelf.c \
|
||||
resres.c dllwrap.c rename.c
|
||||
resres.c dllwrap.c rename.c binemul.c emul_$(EMULATION).c
|
||||
|
||||
GENERATED_CFILES = \
|
||||
underscore.c arparse.c arlex.c sysroff.c sysinfo.c syslex.c \
|
||||
@@ -183,10 +188,12 @@ cplus-dem.o: $(BASEDIR)/libiberty/cplus-dem.c $(INCDIR)/getopt.h Makefile
|
||||
cxxfilt_SOURCES =
|
||||
cxxfilt_LDADD = cplus-dem.o underscore.o $(LIBIBERTY) $(INTLLIBS)
|
||||
|
||||
ar_SOURCES = arparse.y arlex.l ar.c not-ranlib.c arsup.c rename.c $(BULIBS)
|
||||
ar_SOURCES = arparse.y arlex.l ar.c not-ranlib.c arsup.c rename.c binemul.c \
|
||||
emul_$(EMULATION).c $(BULIBS)
|
||||
ar_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(INTLLIBS)
|
||||
|
||||
ranlib_SOURCES = ar.c is-ranlib.c arparse.y arlex.l arsup.c rename.c $(BULIBS)
|
||||
ranlib_SOURCES = ar.c is-ranlib.c arparse.y arlex.l arsup.c rename.c \
|
||||
binemul.c emul_$(EMULATION).c $(BULIBS)
|
||||
ranlib_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(INTLLIBS)
|
||||
|
||||
addr2line_SOURCES = addr2line.c $(BULIBS)
|
||||
|
||||
@@ -80,6 +80,8 @@ DATADIRNAME = @DATADIRNAME@
|
||||
DEMANGLER_NAME = @DEMANGLER_NAME@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DLLTOOL_DEFS = @DLLTOOL_DEFS@
|
||||
EMULATION = @EMULATION@
|
||||
EMULATION_VECTOR = @EMULATION_VECTOR@
|
||||
EXEEXT = @EXEEXT@
|
||||
GCJ = @GCJ@
|
||||
GCJFLAGS = @GCJFLAGS@
|
||||
@@ -169,7 +171,7 @@ noinst_PROGRAMS = $(NM_PROG) $(STRIP_PROG) $(DEMANGLER_PROG)
|
||||
|
||||
EXTRA_PROGRAMS = $(NLMCONV_PROG) srconv sysdump coffdump $(DLLTOOL_PROG) $(WINDRES_PROG) $(DLLWRAP_PROG)
|
||||
|
||||
# Stuff that goes in tooldir/ if appropriate
|
||||
# Stuff that goes in tooldir/ if appropriate.
|
||||
TOOL_PROGS = nm-new strip-new ar ranlib dlltool
|
||||
|
||||
BASEDIR = $(srcdir)/..
|
||||
@@ -178,10 +180,16 @@ INCDIR = $(BASEDIR)/include
|
||||
|
||||
MKDEP = gcc -MM
|
||||
|
||||
INCLUDES = -D_GNU_SOURCE -I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) @HDEFINES@ -I$(srcdir)/../intl -I../intl -DLOCALEDIR="\"$(prefix)/share/locale\""
|
||||
INCLUDES = -D_GNU_SOURCE \
|
||||
-I. -I$(srcdir) -I../bfd -I$(BFDDIR) -I$(INCDIR) \
|
||||
@HDEFINES@ \
|
||||
-I$(srcdir)/../intl -I../intl \
|
||||
-DLOCALEDIR="\"$(prefix)/share/locale\"" \
|
||||
-Dbin_dummy_emulation=$(EMULATION_VECTOR)
|
||||
|
||||
|
||||
HFILES = arsup.h bucomm.h budbg.h coffgrok.h debug.h nlmconv.h dlltool.h \
|
||||
windres.h winduni.h
|
||||
windres.h winduni.h binemul.h
|
||||
|
||||
|
||||
GENERATED_HFILES = arparse.h sysroff.h sysinfo.h defparse.h rcparse.h
|
||||
@@ -192,7 +200,7 @@ CFILES = addr2line.c ar.c arsup.c bucomm.c coffdump.c coffgrok.c debug.c \
|
||||
objcopy.c objdump.c prdbg.c rdcoff.c rddbg.c size.c srconv.c \
|
||||
stabs.c strings.c sysdump.c version.c wrstabs.c \
|
||||
windres.c resrc.c rescoff.c resbin.c winduni.c readelf.c \
|
||||
resres.c dllwrap.c rename.c
|
||||
resres.c dllwrap.c rename.c binemul.c emul_$(EMULATION).c
|
||||
|
||||
|
||||
GENERATED_CFILES = \
|
||||
@@ -260,10 +268,14 @@ objdump_LDADD = $(OPCODES) $(BFDLIB) $(LIBIBERTY) $(INTLLIBS)
|
||||
cxxfilt_SOURCES =
|
||||
cxxfilt_LDADD = cplus-dem.o underscore.o $(LIBIBERTY) $(INTLLIBS)
|
||||
|
||||
ar_SOURCES = arparse.y arlex.l ar.c not-ranlib.c arsup.c rename.c $(BULIBS)
|
||||
ar_SOURCES = arparse.y arlex.l ar.c not-ranlib.c arsup.c rename.c binemul.c \
|
||||
emul_$(EMULATION).c $(BULIBS)
|
||||
|
||||
ar_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(INTLLIBS)
|
||||
|
||||
ranlib_SOURCES = ar.c is-ranlib.c arparse.y arlex.l arsup.c rename.c $(BULIBS)
|
||||
ranlib_SOURCES = ar.c is-ranlib.c arparse.y arlex.l arsup.c rename.c \
|
||||
binemul.c emul_$(EMULATION).c $(BULIBS)
|
||||
|
||||
ranlib_LDADD = $(BFDLIB) $(LIBIBERTY) @LEXLIB@ $(INTLLIBS)
|
||||
|
||||
addr2line_SOURCES = addr2line.c $(BULIBS)
|
||||
@@ -360,8 +372,9 @@ objdump_DEPENDENCIES = ../opcodes/libopcodes.la ../bfd/libbfd.la \
|
||||
../libiberty/libiberty.a
|
||||
objdump_LDFLAGS =
|
||||
ar_OBJECTS = arparse.$(OBJEXT) arlex.$(OBJEXT) ar.$(OBJEXT) \
|
||||
not-ranlib.$(OBJEXT) arsup.$(OBJEXT) rename.$(OBJEXT) bucomm.$(OBJEXT) \
|
||||
version.$(OBJEXT) filemode.$(OBJEXT)
|
||||
not-ranlib.$(OBJEXT) arsup.$(OBJEXT) rename.$(OBJEXT) binemul.$(OBJEXT) \
|
||||
emul_$(EMULATION).$(OBJEXT) bucomm.$(OBJEXT) version.$(OBJEXT) \
|
||||
filemode.$(OBJEXT)
|
||||
ar_DEPENDENCIES = ../bfd/libbfd.la ../libiberty/libiberty.a
|
||||
ar_LDFLAGS =
|
||||
strings_OBJECTS = strings.$(OBJEXT) bucomm.$(OBJEXT) version.$(OBJEXT) \
|
||||
@@ -370,8 +383,9 @@ strings_LDADD = $(LDADD)
|
||||
strings_DEPENDENCIES = ../bfd/libbfd.la ../libiberty/libiberty.a
|
||||
strings_LDFLAGS =
|
||||
ranlib_OBJECTS = ar.$(OBJEXT) is-ranlib.$(OBJEXT) arparse.$(OBJEXT) \
|
||||
arlex.$(OBJEXT) arsup.$(OBJEXT) rename.$(OBJEXT) bucomm.$(OBJEXT) \
|
||||
version.$(OBJEXT) filemode.$(OBJEXT)
|
||||
arlex.$(OBJEXT) arsup.$(OBJEXT) rename.$(OBJEXT) binemul.$(OBJEXT) \
|
||||
emul_$(EMULATION).$(OBJEXT) bucomm.$(OBJEXT) version.$(OBJEXT) \
|
||||
filemode.$(OBJEXT)
|
||||
ranlib_DEPENDENCIES = ../bfd/libbfd.la ../libiberty/libiberty.a
|
||||
ranlib_LDFLAGS =
|
||||
objcopy_OBJECTS = objcopy.$(OBJEXT) not-strip.$(OBJEXT) \
|
||||
@@ -421,7 +435,7 @@ configure.in deflex.c defparse.c nlmheader.c rclex.c rcparse.c
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
TAR = tar
|
||||
TAR = gtar
|
||||
GZIP_ENV = --best
|
||||
SOURCES = $(nlmconv_SOURCES) $(srconv_SOURCES) $(sysdump_SOURCES) $(coffdump_SOURCES) $(dlltool_SOURCES) $(windres_SOURCES) $(dllwrap_SOURCES) $(size_SOURCES) $(objdump_SOURCES) $(ar_SOURCES) $(strings_SOURCES) $(ranlib_SOURCES) $(objcopy_SOURCES) $(addr2line_SOURCES) $(readelf_SOURCES) $(nm_new_SOURCES) $(strip_new_SOURCES) $(cxxfilt_SOURCES)
|
||||
OBJECTS = $(nlmconv_OBJECTS) $(srconv_OBJECTS) $(sysdump_OBJECTS) $(coffdump_OBJECTS) $(dlltool_OBJECTS) $(windres_OBJECTS) $(dllwrap_OBJECTS) $(size_OBJECTS) $(objdump_OBJECTS) $(ar_OBJECTS) $(strings_OBJECTS) $(ranlib_OBJECTS) $(objcopy_OBJECTS) $(addr2line_OBJECTS) $(readelf_OBJECTS) $(nm_new_OBJECTS) $(strip_new_OBJECTS) $(cxxfilt_OBJECTS)
|
||||
|
||||
@@ -3,29 +3,29 @@
|
||||
2001, 2002
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
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 2 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.
|
||||
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/*
|
||||
Bugs: should use getopt the way tar does (complete w/optional -) and
|
||||
should have long options too. GNU ar used to check file against filesystem
|
||||
in quick_update and replace operations (would check mtime). Doesn't warn
|
||||
when name truncated. No way to specify pos_end. Error messages should be
|
||||
more consistant.
|
||||
*/
|
||||
more consistant. */
|
||||
|
||||
#include "bfd.h"
|
||||
#include "libiberty.h"
|
||||
#include "progress.h"
|
||||
@@ -34,6 +34,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
#include "libbfd.h"
|
||||
#include "arsup.h"
|
||||
#include "filenames.h"
|
||||
#include "binemul.h"
|
||||
#include <sys/stat.h>
|
||||
|
||||
#ifdef __GO32___
|
||||
@@ -251,7 +252,7 @@ usage (help)
|
||||
if (! is_ranlib)
|
||||
{
|
||||
/* xgettext:c-format */
|
||||
fprintf (s, _("Usage: %s [-X32_64] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n"),
|
||||
fprintf (s, _("Usage: %s [emulation options] [-]{dmpqrstx}[abcfilNoPsSuvV] [member-name] [count] archive-file file...\n"),
|
||||
program_name);
|
||||
/* xgettext:c-format */
|
||||
fprintf (s, _(" %s -M [<mri-script]\n"), program_name);
|
||||
@@ -277,7 +278,8 @@ usage (help)
|
||||
fprintf (s, _(" [S] - do not build a symbol table\n"));
|
||||
fprintf (s, _(" [v] - be verbose\n"));
|
||||
fprintf (s, _(" [V] - display the version number\n"));
|
||||
fprintf (s, _(" [-X32_64] - (ignored)\n"));
|
||||
|
||||
ar_emul_usage (s);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -383,6 +385,7 @@ main (argc, argv)
|
||||
int file_count;
|
||||
char *inarch_filename;
|
||||
int show_version;
|
||||
int i;
|
||||
|
||||
#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
|
||||
setlocale (LC_MESSAGES, "");
|
||||
@@ -444,17 +447,12 @@ main (argc, argv)
|
||||
|
||||
xatexit (remove_output);
|
||||
|
||||
/* Ignored for (partial) AIX compatibility. On AIX,
|
||||
the -X option can be used to ignore certain kinds
|
||||
of object files in the archive (the 64-bit objects
|
||||
or the 32-bit objects). GNU ar always looks at all
|
||||
kinds of objects in an archive. */
|
||||
while (argc > 1 && strcmp (argv[1], "-X32_64") == 0)
|
||||
{
|
||||
argv++;
|
||||
argc--;
|
||||
}
|
||||
|
||||
for (i = 1; i < argc; i++)
|
||||
if (! ar_emul_parse_arg (argv[i]))
|
||||
break;
|
||||
argv += (i - 1);
|
||||
argc -= (i - 1);
|
||||
|
||||
if (is_ranlib)
|
||||
{
|
||||
boolean touch = false;
|
||||
@@ -1341,24 +1339,13 @@ replace_members (arch, files_to_move, quick)
|
||||
|
||||
after_bfd = get_pos_bfd (&arch->next, pos_after,
|
||||
current->filename);
|
||||
temp = *after_bfd;
|
||||
|
||||
*after_bfd = bfd_openr (*files_to_move, NULL);
|
||||
if (*after_bfd == (bfd *) NULL)
|
||||
if (ar_emul_replace (after_bfd, *files_to_move,
|
||||
verbose))
|
||||
{
|
||||
bfd_fatal (*files_to_move);
|
||||
/* Snip out this entry from the chain. */
|
||||
*current_ptr = (*current_ptr)->next;
|
||||
changed = true;
|
||||
}
|
||||
(*after_bfd)->next = temp;
|
||||
|
||||
/* snip out this entry from the chain */
|
||||
*current_ptr = (*current_ptr)->next;
|
||||
|
||||
if (verbose)
|
||||
{
|
||||
printf ("r - %s\n", *files_to_move);
|
||||
}
|
||||
|
||||
changed = true;
|
||||
|
||||
goto next_file;
|
||||
}
|
||||
@@ -1367,22 +1354,9 @@ replace_members (arch, files_to_move, quick)
|
||||
}
|
||||
|
||||
/* Add to the end of the archive. */
|
||||
|
||||
after_bfd = get_pos_bfd (&arch->next, pos_end, NULL);
|
||||
temp = *after_bfd;
|
||||
*after_bfd = bfd_openr (*files_to_move, NULL);
|
||||
if (*after_bfd == (bfd *) NULL)
|
||||
{
|
||||
bfd_fatal (*files_to_move);
|
||||
}
|
||||
if (verbose)
|
||||
{
|
||||
printf ("a - %s\n", *files_to_move);
|
||||
}
|
||||
|
||||
(*after_bfd)->next = temp;
|
||||
|
||||
changed = true;
|
||||
if (ar_emul_append (after_bfd, *files_to_move, verbose))
|
||||
changed = true;
|
||||
|
||||
next_file:;
|
||||
|
||||
|
||||
165
binutils/binemul.c
Normal file
165
binutils/binemul.c
Normal file
@@ -0,0 +1,165 @@
|
||||
/* Binutils emulation layer.
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Written by Tom Rix, Redhat.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "binemul.h"
|
||||
|
||||
extern bin_emulation_xfer_type bin_dummy_emulation;
|
||||
|
||||
void
|
||||
ar_emul_usage (fp)
|
||||
FILE *fp;
|
||||
{
|
||||
if (bin_dummy_emulation.ar_usage)
|
||||
bin_dummy_emulation.ar_usage (fp);
|
||||
}
|
||||
|
||||
void
|
||||
ar_emul_default_usage (fp)
|
||||
FILE *fp;
|
||||
{
|
||||
AR_EMUL_USAGE_PRINT_OPTION_HEADER (fp);
|
||||
/* xgettext:c-format */
|
||||
fprintf (fp, _(" No emulation specific options\n"));
|
||||
}
|
||||
|
||||
boolean
|
||||
ar_emul_append (after_bfd, file_name, verbose)
|
||||
bfd **after_bfd;
|
||||
char *file_name;
|
||||
boolean verbose;
|
||||
{
|
||||
if (bin_dummy_emulation.ar_append)
|
||||
return bin_dummy_emulation.ar_append (after_bfd, file_name, verbose);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean
|
||||
ar_emul_default_append (after_bfd, file_name, verbose)
|
||||
bfd **after_bfd;
|
||||
char *file_name;
|
||||
boolean verbose;
|
||||
{
|
||||
bfd *temp;
|
||||
|
||||
temp = *after_bfd;
|
||||
*after_bfd = bfd_openr (file_name, NULL);
|
||||
|
||||
AR_EMUL_ELEMENT_CHECK (*after_bfd, file_name);
|
||||
AR_EMUL_APPEND_PRINT_VERBOSE (verbose, file_name);
|
||||
|
||||
(*after_bfd)->next = temp;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean
|
||||
ar_emul_replace (after_bfd, file_name, verbose)
|
||||
bfd **after_bfd;
|
||||
char *file_name;
|
||||
boolean verbose;
|
||||
{
|
||||
if (bin_dummy_emulation.ar_replace)
|
||||
return bin_dummy_emulation.ar_replace (after_bfd, file_name, verbose);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean
|
||||
ar_emul_default_replace (after_bfd, file_name, verbose)
|
||||
bfd **after_bfd;
|
||||
char *file_name;
|
||||
boolean verbose;
|
||||
{
|
||||
bfd *temp;
|
||||
|
||||
temp = *after_bfd;
|
||||
*after_bfd = bfd_openr (file_name, NULL);
|
||||
|
||||
AR_EMUL_ELEMENT_CHECK (*after_bfd, file_name);
|
||||
AR_EMUL_REPLACE_PRINT_VERBOSE (verbose, file_name);
|
||||
|
||||
(*after_bfd)->next = temp;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean
|
||||
ar_emul_create (abfd_out, archive_file_name, file_name)
|
||||
bfd **abfd_out;
|
||||
char *archive_file_name;
|
||||
char *file_name;
|
||||
{
|
||||
if (bin_dummy_emulation.ar_create)
|
||||
return bin_dummy_emulation.ar_create (abfd_out, archive_file_name,
|
||||
file_name);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean
|
||||
ar_emul_default_create (abfd_out, archive_file_name, file_name)
|
||||
bfd **abfd_out;
|
||||
char *archive_file_name;
|
||||
char *file_name;
|
||||
{
|
||||
char *target = NULL;
|
||||
|
||||
/* Try to figure out the target to use for the archive from the
|
||||
first object on the list. */
|
||||
if (file_name != NULL)
|
||||
{
|
||||
bfd *obj;
|
||||
|
||||
obj = bfd_openr (file_name, NULL);
|
||||
if (obj != NULL)
|
||||
{
|
||||
if (bfd_check_format (obj, bfd_object))
|
||||
target = bfd_get_target (obj);
|
||||
(void) bfd_close (obj);
|
||||
}
|
||||
}
|
||||
|
||||
/* Create an empty archive. */
|
||||
*abfd_out = bfd_openw (archive_file_name, target);
|
||||
if (*abfd_out == NULL
|
||||
|| ! bfd_set_format (*abfd_out, bfd_archive)
|
||||
|| ! bfd_close (*abfd_out))
|
||||
bfd_fatal (archive_file_name);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean
|
||||
ar_emul_parse_arg (arg)
|
||||
char *arg;
|
||||
{
|
||||
if (bin_dummy_emulation.ar_parse_arg)
|
||||
return bin_dummy_emulation.ar_parse_arg (arg);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean
|
||||
ar_emul_default_parse_arg (arg)
|
||||
char *arg;
|
||||
{
|
||||
return false;
|
||||
}
|
||||
64
binutils/binemul.h
Normal file
64
binutils/binemul.h
Normal file
@@ -0,0 +1,64 @@
|
||||
/* Binutils emulation layer.
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Written by Tom Rix, Redhat.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef BINEMUL_H
|
||||
#define BINEMUL_H
|
||||
|
||||
#include "bfd.h"
|
||||
#include "bucomm.h"
|
||||
|
||||
extern void ar_emul_usage PARAMS ((FILE *));
|
||||
extern void ar_emul_default_usage PARAMS ((FILE *));
|
||||
extern boolean ar_emul_append PARAMS ((bfd **, char *, boolean));
|
||||
extern boolean ar_emul_default_append PARAMS ((bfd **, char *, boolean));
|
||||
extern boolean ar_emul_replace PARAMS ((bfd **, char *, boolean));
|
||||
extern boolean ar_emul_default_replace PARAMS ((bfd **, char *, boolean));
|
||||
extern boolean ar_emul_create PARAMS ((bfd **, char *, char *));
|
||||
extern boolean ar_emul_default_create PARAMS ((bfd **, char *, char *));
|
||||
extern boolean ar_emul_parse_arg PARAMS ((char *));
|
||||
extern boolean ar_emul_default_parse_arg PARAMS ((char *));
|
||||
|
||||
/* Macros for common output. */
|
||||
|
||||
#define AR_EMUL_USAGE_PRINT_OPTION_HEADER(fp) \
|
||||
/* xgettext:c-format */ \
|
||||
fprintf (fp, _(" emulation options: \n"))
|
||||
|
||||
#define AR_EMUL_ELEMENT_CHECK(abfd, file_name) \
|
||||
do { if ((abfd) == (bfd *) NULL) bfd_fatal (file_name); } while (0)
|
||||
|
||||
#define AR_EMUL_APPEND_PRINT_VERBOSE(verbose, file_name) \
|
||||
do { if (verbose) printf ("a - %s\n", file_name); } while (0)
|
||||
|
||||
#define AR_EMUL_REPLACE_PRINT_VERBOSE(verbose, file_name) \
|
||||
do { if (verbose) printf ("r - %s\n", file_name); } while (0)
|
||||
|
||||
typedef struct bin_emulation_xfer_struct
|
||||
{
|
||||
/* Print out the extra options. */
|
||||
void (* ar_usage) PARAMS ((FILE *fp));
|
||||
boolean (* ar_append) PARAMS ((bfd **, char *, boolean));
|
||||
boolean (* ar_replace) PARAMS ((bfd **, char *, boolean));
|
||||
boolean (* ar_create) PARAMS ((bfd **, char *, char *));
|
||||
boolean (* ar_parse_arg) PARAMS ((char *));
|
||||
}
|
||||
bin_emulation_xfer_type;
|
||||
|
||||
#endif
|
||||
22
binutils/configure
vendored
22
binutils/configure
vendored
@@ -5596,6 +5596,26 @@ else
|
||||
fi
|
||||
|
||||
|
||||
# Emulation
|
||||
for targ_alias in `echo $target_alias $enable_targets | sed 's/,/ /g'`
|
||||
do
|
||||
# Canonicalize the secondary target names.
|
||||
result=`$ac_config_sub $targ_alias 2>/dev/null`
|
||||
if test -n "$result"; then
|
||||
targ=$result
|
||||
else
|
||||
targ=$targ_alias
|
||||
fi
|
||||
|
||||
. ${srcdir}/configure.tgt
|
||||
|
||||
EMULATION=$targ_emul
|
||||
EMULATION_VECTOR=$targ_emul_vector
|
||||
done
|
||||
|
||||
|
||||
|
||||
|
||||
trap '' 1 2 15
|
||||
cat > confcache <<\EOF
|
||||
# This file is a shell script that caches the results of configure
|
||||
@@ -5807,6 +5827,8 @@ s%@BUILD_DLLWRAP@%$BUILD_DLLWRAP%g
|
||||
s%@BUILD_MISC@%$BUILD_MISC%g
|
||||
s%@OBJDUMP_DEFS@%$OBJDUMP_DEFS%g
|
||||
s%@UNDERSCORE@%$UNDERSCORE%g
|
||||
s%@EMULATION@%$EMULATION%g
|
||||
s%@EMULATION_VECTOR@%$EMULATION_VECTOR%g
|
||||
|
||||
CEOF
|
||||
EOF
|
||||
|
||||
@@ -313,6 +313,26 @@ else
|
||||
fi
|
||||
AC_SUBST(UNDERSCORE)
|
||||
|
||||
# Emulation
|
||||
for targ_alias in `echo $target_alias $enable_targets | sed 's/,/ /g'`
|
||||
do
|
||||
# Canonicalize the secondary target names.
|
||||
result=`$ac_config_sub $targ_alias 2>/dev/null`
|
||||
if test -n "$result"; then
|
||||
targ=$result
|
||||
else
|
||||
targ=$targ_alias
|
||||
fi
|
||||
|
||||
. ${srcdir}/configure.tgt
|
||||
|
||||
EMULATION=$targ_emul
|
||||
EMULATION_VECTOR=$targ_emul_vector
|
||||
done
|
||||
|
||||
AC_SUBST(EMULATION)
|
||||
AC_SUBST(EMULATION_VECTOR)
|
||||
|
||||
AC_OUTPUT(Makefile doc/Makefile po/Makefile.in:po/Make-in,
|
||||
[
|
||||
case "x$CONFIG_FILES" in
|
||||
|
||||
26
binutils/configure.tgt
Normal file
26
binutils/configure.tgt
Normal file
@@ -0,0 +1,26 @@
|
||||
# This is the binutils target specific file. This is invoked by the
|
||||
# autoconf generated configure script. Putting it in a separate shell
|
||||
# file lets us skip running autoconf when modifying target specific
|
||||
# information.
|
||||
|
||||
# This file switches on the shell variable ${targ}, and sets the
|
||||
# following shell variables:
|
||||
# targ_emul name of emulation to use
|
||||
# targ_emul_vector name of vector to use
|
||||
|
||||
case "${targ}" in
|
||||
powerpc-*-aix5* | rs6000-*-aix5*)
|
||||
targ_emul=aix
|
||||
targ_emul_vector=bin_aix5_emulation
|
||||
;;
|
||||
|
||||
powerpc-*-aix4.3* | rs6000-*-aix4.3*)
|
||||
targ_emul=aix
|
||||
targ_emul_vector=bin_aix_emulation
|
||||
;;
|
||||
|
||||
*)
|
||||
targ_emul=vanilla
|
||||
targ_emul_vector=bin_vanilla_emulation
|
||||
;;
|
||||
esac
|
||||
@@ -81,6 +81,8 @@ DATADIRNAME = @DATADIRNAME@
|
||||
DEMANGLER_NAME = @DEMANGLER_NAME@
|
||||
DLLTOOL = @DLLTOOL@
|
||||
DLLTOOL_DEFS = @DLLTOOL_DEFS@
|
||||
EMULATION = @EMULATION@
|
||||
EMULATION_VECTOR = @EMULATION_VECTOR@
|
||||
EXEEXT = @EXEEXT@
|
||||
EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@
|
||||
GCJ = @GCJ@
|
||||
@@ -175,7 +177,7 @@ DIST_COMMON = Makefile.am Makefile.in
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
TAR = tar
|
||||
TAR = gtar
|
||||
GZIP_ENV = --best
|
||||
all: all-redirect
|
||||
.SUFFIXES:
|
||||
|
||||
212
binutils/emul_aix.c
Normal file
212
binutils/emul_aix.c
Normal file
@@ -0,0 +1,212 @@
|
||||
/* Binutils emulation layer.
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Written by Tom Rix, Redhat.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "binemul.h"
|
||||
#include "bfdlink.h"
|
||||
#include "coff/internal.h"
|
||||
#include "coff/xcoff.h"
|
||||
#include "libcoff.h"
|
||||
#include "libxcoff.h"
|
||||
|
||||
/* Default to <bigaf>. */
|
||||
static boolean big_archive = true;
|
||||
|
||||
/* Whether to include 32 bit objects. */
|
||||
static boolean X32 = true;
|
||||
|
||||
/* Whether to include 64 bit objects. */
|
||||
static boolean X64 = false;
|
||||
|
||||
static void ar_emul_aix_usage PARAMS ((FILE *));
|
||||
static boolean ar_emul_aix_append PARAMS ((bfd **, char *, boolean));
|
||||
static boolean ar_emul_aix5_append PARAMS ((bfd **, char *, boolean));
|
||||
static boolean ar_emul_aix_replace PARAMS ((bfd **, char *, boolean));
|
||||
static boolean ar_emul_aix5_replace PARAMS ((bfd **, char *, boolean));
|
||||
static boolean ar_emul_aix_parse_arg PARAMS ((char *));
|
||||
static boolean ar_emul_aix_internal PARAMS ((bfd **, char *, boolean,
|
||||
const char *, boolean));
|
||||
|
||||
static void
|
||||
ar_emul_aix_usage (fp)
|
||||
FILE *fp;
|
||||
{
|
||||
AR_EMUL_USAGE_PRINT_OPTION_HEADER (fp);
|
||||
/* xgettext:c-format */
|
||||
fprintf (fp, _(" [-g] - 32 bit small archive\n"));
|
||||
fprintf (fp, _(" [-X32] - ignores 64 bit objects\n"));
|
||||
fprintf (fp, _(" [-X64] - ignores 32 bit objects\n"));
|
||||
fprintf (fp, _(" [-X32_64] - accepts 32 and 64 bit objects\n"));
|
||||
}
|
||||
|
||||
static boolean
|
||||
ar_emul_aix_internal (after_bfd, file_name, verbose, target_name, is_append)
|
||||
bfd **after_bfd;
|
||||
char *file_name;
|
||||
boolean verbose;
|
||||
const char * target_name;
|
||||
boolean is_append;
|
||||
{
|
||||
bfd *temp;
|
||||
bfd *try_bfd;
|
||||
|
||||
temp = *after_bfd;
|
||||
|
||||
/* Try 64 bit. */
|
||||
try_bfd = bfd_openr (file_name, target_name);
|
||||
|
||||
/* Failed or the object is possibly 32 bit. */
|
||||
if (NULL == try_bfd || ! bfd_check_format (try_bfd, bfd_object))
|
||||
try_bfd = bfd_openr (file_name, "aixcoff-rs6000");
|
||||
|
||||
AR_EMUL_ELEMENT_CHECK (try_bfd, file_name);
|
||||
|
||||
if (bfd_xcoff_is_xcoff64 (try_bfd) && (! X64))
|
||||
return false;
|
||||
|
||||
if (bfd_xcoff_is_xcoff32 (try_bfd)
|
||||
&& bfd_check_format (try_bfd, bfd_object) && (! X32))
|
||||
return false;
|
||||
|
||||
if (is_append)
|
||||
{
|
||||
AR_EMUL_APPEND_PRINT_VERBOSE (verbose, file_name);
|
||||
}
|
||||
else
|
||||
{
|
||||
AR_EMUL_REPLACE_PRINT_VERBOSE (verbose, file_name);
|
||||
}
|
||||
|
||||
*after_bfd = try_bfd;
|
||||
(*after_bfd)->next = temp;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
static boolean
|
||||
ar_emul_aix_append (after_bfd, file_name, verbose)
|
||||
bfd **after_bfd;
|
||||
char *file_name;
|
||||
boolean verbose;
|
||||
{
|
||||
return ar_emul_aix_internal (after_bfd, file_name, verbose,
|
||||
"aixcoff64-rs6000", true);
|
||||
}
|
||||
|
||||
static boolean
|
||||
ar_emul_aix5_append (after_bfd, file_name, verbose)
|
||||
bfd **after_bfd;
|
||||
char *file_name;
|
||||
boolean verbose;
|
||||
{
|
||||
return ar_emul_aix_internal (after_bfd, file_name, verbose,
|
||||
"aix5coff64-rs6000", true);
|
||||
}
|
||||
|
||||
static boolean
|
||||
ar_emul_aix_replace (after_bfd, file_name, verbose)
|
||||
bfd **after_bfd;
|
||||
char *file_name;
|
||||
boolean verbose;
|
||||
{
|
||||
return ar_emul_aix_internal (after_bfd, file_name, verbose,
|
||||
"aixcoff64-rs6000", false);
|
||||
}
|
||||
|
||||
static boolean
|
||||
ar_emul_aix5_replace (after_bfd, file_name, verbose)
|
||||
bfd **after_bfd;
|
||||
char *file_name;
|
||||
boolean verbose;
|
||||
{
|
||||
return ar_emul_aix_internal (after_bfd, file_name, verbose,
|
||||
"aix5coff64-rs6000", false);
|
||||
}
|
||||
|
||||
boolean
|
||||
ar_emul_aix_create (abfd_out, archive_file_name, file_name)
|
||||
bfd **abfd_out;
|
||||
char *archive_file_name;
|
||||
char *file_name ATTRIBUTE_UNUSED;
|
||||
{
|
||||
char *target = "aixcoff-rs6000";
|
||||
|
||||
/* Create an empty archive. */
|
||||
*abfd_out = bfd_openw (archive_file_name, target);
|
||||
|
||||
if (*abfd_out == NULL)
|
||||
bfd_fatal (archive_file_name);
|
||||
|
||||
/* set to small or big format. */
|
||||
/* not done. */
|
||||
return true;
|
||||
}
|
||||
|
||||
static boolean
|
||||
ar_emul_aix_parse_arg (arg)
|
||||
char *arg;
|
||||
{
|
||||
if (strncmp (arg, "-X32_64", 6) == 0)
|
||||
{
|
||||
big_archive = true;
|
||||
X32 = true;
|
||||
X64 = true;
|
||||
}
|
||||
else if (strncmp (arg, "-X32", 3) == 0)
|
||||
{
|
||||
big_archive = true;
|
||||
X32 = true;
|
||||
X64 = false;
|
||||
}
|
||||
else if (strncmp (arg, "-X64", 3) == 0)
|
||||
{
|
||||
big_archive = true;
|
||||
X32 = false;
|
||||
X64 = true;
|
||||
}
|
||||
else if (strncmp (arg, "-g", 2) == 0)
|
||||
{
|
||||
big_archive = false;
|
||||
X32 = true;
|
||||
X64 = false;
|
||||
}
|
||||
else
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
struct bin_emulation_xfer_struct bin_aix_emulation =
|
||||
{
|
||||
ar_emul_aix_usage,
|
||||
ar_emul_aix_append,
|
||||
ar_emul_aix_replace,
|
||||
ar_emul_default_create,
|
||||
ar_emul_aix_parse_arg,
|
||||
};
|
||||
|
||||
struct bin_emulation_xfer_struct bin_aix5_emulation =
|
||||
{
|
||||
ar_emul_aix_usage,
|
||||
ar_emul_aix5_append,
|
||||
ar_emul_aix5_replace,
|
||||
ar_emul_default_create,
|
||||
ar_emul_aix_parse_arg,
|
||||
};
|
||||
30
binutils/emul_vanilla.c
Normal file
30
binutils/emul_vanilla.c
Normal file
@@ -0,0 +1,30 @@
|
||||
/* Binutils emulation layer.
|
||||
Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
Written by Tom Rix, Redhat.
|
||||
|
||||
This file is part of GNU Binutils.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "binemul.h"
|
||||
|
||||
struct bin_emulation_xfer_struct bin_vanilla_emulation =
|
||||
{
|
||||
ar_emul_default_usage,
|
||||
ar_emul_default_append,
|
||||
ar_emul_default_replace,
|
||||
ar_emul_default_create,
|
||||
ar_emul_default_parse_arg,
|
||||
};
|
||||
Reference in New Issue
Block a user