binutils: build AR.

git-svn-id: svn://kolibrios.org@5219 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Sergey Semyonov (Serge) 2014-12-06 06:12:12 +00:00
parent ea910a143c
commit 3e62747fb5
12 changed files with 6259 additions and 7 deletions

View File

@ -0,0 +1,36 @@
/* Plugin support for BFD.
Copyright 2009 Free Software Foundation, Inc.
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 _PLUGIN_H_
#define _PLUGIN_H_
#include "bfd.h"
void bfd_plugin_set_program_name (const char *);
void bfd_plugin_set_plugin (const char *);
typedef struct plugin_data_struct
{
int nsyms;
const struct ld_plugin_symbol *syms;
}
plugin_data_struct;
#endif

View File

@ -1,4 +1,3 @@
NAME= objcopy-new
LIB_DIR:= $(SDK_DIR)/lib
@ -20,22 +19,37 @@ LDFLAGS = -static -nostdlib --stack 12582912 -T$(SDK_DIR)/sources/newlib/app.lds
SRCS = \
arparse.c arlex.c ar.c \
not-ranlib.c arsup.c \
binemul.c emul_vanilla.c \
objcopy.c not-strip.c rename.c \
rddbg.c debug.c stabs.c ieee.c \
rdcoff.c wrstabs.c bucomm.c \
version.c filemode.c
OCOPY = \
objcopy.o not-strip.o rename.o \
rddbg.o debug.o stabs.o ieee.o \
rdcoff.o wrstabs.o bucomm.o \
version.o filemode.o
OBJS = $(patsubst %.cpp, %.o, $(patsubst %.c, %.o, $(SRCS)))
OAR = \
arparse.o arlex.o ar.o \
not-ranlib.o arsup.o rename.o \
binemul.o emul_vanilla.o \
bucomm.o version.o filemode.o
# targets
all: $(NAME)
all: objcopy ar
$(NAME): $(OBJS) Makefile
$(LD) $(LDFLAGS) $(LIBPATH) -o $@ $(OBJS) $(LIBS)
kos32-objcopy $@ kos32-objcopy -O binary
objcopy: $(OCOPY) Makefile
$(LD) $(LDFLAGS) $(LIBPATH) -o $@ $(OCOPY) $(LIBS)
kos32-objcopy $@ -O binary
ar: $(OAR) Makefile
$(LD) $(LDFLAGS) $(LIBPATH) -o $@ $(OAR) $(LIBS)
kos32-objcopy $@ -O binary
%.o : %.c Makefile
$(CC) $(CFLAGS) $(DEFINES) $(INCLUDES) -o $@ $<

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,102 @@
/* A Bison parser, made by GNU Bison 2.3. */
/* Skeleton interface for Bison's Yacc-like parsers in C
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc.
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, 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. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
under terms of your choice, so long as that work isn't itself a
parser generator using the skeleton or a modified version thereof
as a parser skeleton. Alternatively, if you modify or redistribute
the parser skeleton itself, you may (at your option) remove this
special exception, which will cause the skeleton and the resulting
Bison output files to be licensed under the GNU General Public
License without this special exception.
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
/* Tokens. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
/* Put the tokens into the symbol table, so that GDB and other debuggers
know about them. */
enum yytokentype {
NEWLINE = 258,
VERBOSE = 259,
FILENAME = 260,
ADDLIB = 261,
LIST = 262,
ADDMOD = 263,
CLEAR = 264,
CREATE = 265,
DELETE = 266,
DIRECTORY = 267,
END = 268,
EXTRACT = 269,
FULLDIR = 270,
HELP = 271,
QUIT = 272,
REPLACE = 273,
SAVE = 274,
OPEN = 275
};
#endif
/* Tokens. */
#define NEWLINE 258
#define VERBOSE 259
#define FILENAME 260
#define ADDLIB 261
#define LIST 262
#define ADDMOD 263
#define CLEAR 264
#define CREATE 265
#define DELETE 266
#define DIRECTORY 267
#define END 268
#define EXTRACT 269
#define FULLDIR 270
#define HELP 271
#define QUIT 272
#define REPLACE 273
#define SAVE 274
#define OPEN 275
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE
#line 38 "arparse.y"
{
char *name;
struct list *list ;
}
/* Line 1529 of yacc.c. */
#line 95 "arparse.h"
YYSTYPE;
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
#endif
extern YYSTYPE yylval;

View File

@ -0,0 +1,481 @@
/* arsup.c - Archive support for MRI compatibility
Copyright 1992, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, 2003,
2004, 2005, 2007, 2008 Free Software Foundation, Inc.
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 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. */
/* Contributed by Steve Chamberlain
sac@cygnus.com
This file looks after requests from arparse.y, to provide the MRI
style librarian command syntax + 1 word LIST. */
#include "sysdep.h"
#include "bfd.h"
#include "libiberty.h"
#include "filenames.h"
#include "bucomm.h"
#include "arsup.h"
static void map_over_list
(bfd *, void (*function) (bfd *, bfd *), struct list *);
static void ar_directory_doer (bfd *, bfd *);
static void ar_addlib_doer (bfd *, bfd *);
extern int verbose;
static bfd *obfd;
static char *real_name;
static FILE *outfile;
static void
map_over_list (bfd *arch, void (*function) (bfd *, bfd *), struct list *list)
{
bfd *head;
if (list == NULL)
{
bfd *next;
head = arch->archive_next;
while (head != NULL)
{
next = head->archive_next;
function (head, (bfd *) NULL);
head = next;
}
}
else
{
struct list *ptr;
/* This may appear to be a baroque way of accomplishing what we
want. however we have to iterate over the filenames in order
to notice where a filename is requested but does not exist in
the archive. Ditto mapping over each file each time -- we
want to hack multiple references. */
for (ptr = list; ptr; ptr = ptr->next)
{
bfd_boolean found = FALSE;
bfd *prev = arch;
for (head = arch->archive_next; head; head = head->archive_next)
{
if (head->filename != NULL
&& FILENAME_CMP (ptr->name, head->filename) == 0)
{
found = TRUE;
function (head, prev);
}
prev = head;
}
if (! found)
fprintf (stderr, _("No entry %s in archive.\n"), ptr->name);
}
}
}
static void
ar_directory_doer (bfd *abfd, bfd *ignore ATTRIBUTE_UNUSED)
{
print_arelt_descr(outfile, abfd, verbose);
}
void
ar_directory (char *ar_name, struct list *list, char *output)
{
bfd *arch;
arch = open_inarch (ar_name, (char *) NULL);
if (output)
{
outfile = fopen(output,"w");
if (outfile == 0)
{
outfile = stdout;
fprintf (stderr,_("Can't open file %s\n"), output);
output = 0;
}
}
else
outfile = stdout;
map_over_list (arch, ar_directory_doer, list);
bfd_close (arch);
if (output)
fclose (outfile);
}
void
prompt (void)
{
extern int interactive;
if (interactive)
{
printf ("AR >");
fflush (stdout);
}
}
void
maybequit (void)
{
if (! interactive)
xexit (9);
}
void
ar_open (char *name, int t)
{
char *tname = (char *) xmalloc (strlen (name) + 10);
const char *bname = lbasename (name);
real_name = name;
/* Prepend tmp- to the beginning, to avoid file-name clashes after
truncation on filesystems with limited namespaces (DOS). */
sprintf (tname, "%.*stmp-%s", (int) (bname - name), name, bname);
obfd = bfd_openw (tname, NULL);
if (!obfd)
{
fprintf (stderr,
_("%s: Can't open output archive %s\n"),
program_name, tname);
maybequit ();
}
else
{
if (!t)
{
bfd **ptr;
bfd *element;
bfd *ibfd;
ibfd = bfd_openr (name, NULL);
if (!ibfd)
{
fprintf (stderr,_("%s: Can't open input archive %s\n"),
program_name, name);
maybequit ();
return;
}
if (!bfd_check_format(ibfd, bfd_archive))
{
fprintf (stderr,
_("%s: file %s is not an archive\n"),
program_name, name);
maybequit ();
return;
}
ptr = &(obfd->archive_head);
element = bfd_openr_next_archived_file (ibfd, NULL);
while (element)
{
*ptr = element;
ptr = &element->archive_next;
element = bfd_openr_next_archived_file (ibfd, element);
}
}
bfd_set_format (obfd, bfd_archive);
obfd->has_armap = 1;
obfd->is_thin_archive = 0;
}
}
static void
ar_addlib_doer (bfd *abfd, bfd *prev)
{
/* Add this module to the output bfd. */
if (prev != NULL)
prev->archive_next = abfd->archive_next;
abfd->archive_next = obfd->archive_head;
obfd->archive_head = abfd;
}
void
ar_addlib (char *name, struct list *list)
{
if (obfd == NULL)
{
fprintf (stderr, _("%s: no output archive specified yet\n"), program_name);
maybequit ();
}
else
{
bfd *arch;
arch = open_inarch (name, (char *) NULL);
if (arch != NULL)
map_over_list (arch, ar_addlib_doer, list);
/* Don't close the bfd, since it will make the elements disappear. */
}
}
void
ar_addmod (struct list *list)
{
if (!obfd)
{
fprintf (stderr, _("%s: no open output archive\n"), program_name);
maybequit ();
}
else
{
while (list)
{
bfd *abfd = bfd_openr (list->name, NULL);
if (!abfd)
{
fprintf (stderr, _("%s: can't open file %s\n"),
program_name, list->name);
maybequit ();
}
else
{
abfd->archive_next = obfd->archive_head;
obfd->archive_head = abfd;
}
list = list->next;
}
}
}
void
ar_clear (void)
{
if (obfd)
obfd->archive_head = 0;
}
void
ar_delete (struct list *list)
{
if (!obfd)
{
fprintf (stderr, _("%s: no open output archive\n"), program_name);
maybequit ();
}
else
{
while (list)
{
/* Find this name in the archive. */
bfd *member = obfd->archive_head;
bfd **prev = &(obfd->archive_head);
int found = 0;
while (member)
{
if (FILENAME_CMP(member->filename, list->name) == 0)
{
*prev = member->archive_next;
found = 1;
}
else
prev = &(member->archive_next);
member = member->archive_next;
}
if (!found)
{
fprintf (stderr, _("%s: can't find module file %s\n"),
program_name, list->name);
maybequit ();
}
list = list->next;
}
}
}
void
ar_save (void)
{
if (!obfd)
{
fprintf (stderr, _("%s: no open output archive\n"), program_name);
maybequit ();
}
else
{
char *ofilename = xstrdup (bfd_get_filename (obfd));
bfd_close (obfd);
smart_rename (ofilename, real_name, 0);
obfd = 0;
free (ofilename);
}
}
void
ar_replace (struct list *list)
{
if (!obfd)
{
fprintf (stderr, _("%s: no open output archive\n"), program_name);
maybequit ();
}
else
{
while (list)
{
/* Find this name in the archive. */
bfd *member = obfd->archive_head;
bfd **prev = &(obfd->archive_head);
int found = 0;
while (member)
{
if (FILENAME_CMP (member->filename, list->name) == 0)
{
/* Found the one to replace. */
bfd *abfd = bfd_openr (list->name, 0);
if (!abfd)
{
fprintf (stderr, _("%s: can't open file %s\n"),
program_name, list->name);
maybequit ();
}
else
{
*prev = abfd;
abfd->archive_next = member->archive_next;
found = 1;
}
}
else
{
prev = &(member->archive_next);
}
member = member->archive_next;
}
if (!found)
{
bfd *abfd = bfd_openr (list->name, 0);
fprintf (stderr,_("%s: can't find module file %s\n"),
program_name, list->name);
if (!abfd)
{
fprintf (stderr, _("%s: can't open file %s\n"),
program_name, list->name);
maybequit ();
}
else
*prev = abfd;
}
list = list->next;
}
}
}
/* And I added this one. */
void
ar_list (void)
{
if (!obfd)
{
fprintf (stderr, _("%s: no open output archive\n"), program_name);
maybequit ();
}
else
{
bfd *abfd;
outfile = stdout;
verbose =1 ;
printf (_("Current open archive is %s\n"), bfd_get_filename (obfd));
for (abfd = obfd->archive_head;
abfd != (bfd *)NULL;
abfd = abfd->archive_next)
ar_directory_doer (abfd, (bfd *) NULL);
}
}
void
ar_end (void)
{
if (obfd)
{
bfd_cache_close (obfd);
unlink (bfd_get_filename (obfd));
}
}
void
ar_extract (struct list *list)
{
if (!obfd)
{
fprintf (stderr, _("%s: no open archive\n"), program_name);
maybequit ();
}
else
{
while (list)
{
/* Find this name in the archive. */
bfd *member = obfd->archive_head;
int found = 0;
while (member && !found)
{
if (FILENAME_CMP (member->filename, list->name) == 0)
{
extract_file (member);
found = 1;
}
member = member->archive_next;
}
if (!found)
{
bfd_openr (list->name, 0);
fprintf (stderr, _("%s: can't find module file %s\n"),
program_name, list->name);
}
list = list->next;
}
}
}

View File

@ -0,0 +1,63 @@
/* arsup.h - archive support header file
Copyright 1992, 1993, 1994, 1996, 2001, 2002, 2003, 2005, 2007
Free Software Foundation, Inc.
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 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. */
struct list {
char *name;
struct list *next;
};
void maybequit (void);
void prompt (void);
void ar_clear (void);
void ar_replace (struct list *);
void ar_delete (struct list *);
void ar_save (void);
void ar_list (void);
void ar_open (char *, int);
void ar_directory (char *, struct list *, char *);
void ar_addmod (struct list *);
void ar_addlib (char *, struct list *);
void ar_end (void);
void ar_extract (struct list *);
bfd *open_inarch (const char *archive_filename, const char *);
extern int yylex (void);
int yyparse (void);
/* Functions from ar.c */
void extract_file (bfd * abfd);
extern int interactive;

View File

@ -0,0 +1,149 @@
/* Binutils emulation layer.
Copyright 2002, 2003, 2005, 2007, 2008, 2010
Free Software Foundation, Inc.
Written by Tom Rix, Red Hat Inc.
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 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. */
#include "binemul.h"
extern bin_emulation_xfer_type bin_dummy_emulation;
void
ar_emul_usage (FILE *fp)
{
if (bin_dummy_emulation.ar_usage)
bin_dummy_emulation.ar_usage (fp);
}
void
ar_emul_default_usage (FILE *fp)
{
AR_EMUL_USAGE_PRINT_OPTION_HEADER (fp);
/* xgettext:c-format */
fprintf (fp, _(" No emulation specific options\n"));
}
bfd_boolean
ar_emul_append (bfd **after_bfd, char *file_name, const char *target,
bfd_boolean verbose, bfd_boolean flatten)
{
if (bin_dummy_emulation.ar_append)
return bin_dummy_emulation.ar_append (after_bfd, file_name, target,
verbose, flatten);
return FALSE;
}
static bfd_boolean
any_ok (bfd *new_bfd ATTRIBUTE_UNUSED)
{
return TRUE;
}
bfd_boolean
do_ar_emul_append (bfd **after_bfd, bfd *new_bfd,
bfd_boolean verbose, bfd_boolean flatten,
bfd_boolean (*check) (bfd *))
{
/* When flattening, add the members of an archive instead of the
archive itself. */
if (flatten && bfd_check_format (new_bfd, bfd_archive))
{
bfd *elt;
bfd_boolean added = FALSE;
for (elt = bfd_openr_next_archived_file (new_bfd, NULL);
elt;
elt = bfd_openr_next_archived_file (new_bfd, elt))
{
if (do_ar_emul_append (after_bfd, elt, verbose, TRUE, check))
{
added = TRUE;
after_bfd = &((*after_bfd)->archive_next);
}
}
return added;
}
if (!check (new_bfd))
return FALSE;
AR_EMUL_APPEND_PRINT_VERBOSE (verbose, new_bfd->filename);
new_bfd->archive_next = *after_bfd;
*after_bfd = new_bfd;
return TRUE;
}
bfd_boolean
ar_emul_default_append (bfd **after_bfd, char *file_name,
const char *target, bfd_boolean verbose,
bfd_boolean flatten)
{
bfd *new_bfd;
new_bfd = bfd_openr (file_name, target);
AR_EMUL_ELEMENT_CHECK (new_bfd, file_name);
return do_ar_emul_append (after_bfd, new_bfd, verbose, flatten, any_ok);
}
bfd_boolean
ar_emul_replace (bfd **after_bfd, char *file_name, const char *target,
bfd_boolean verbose)
{
if (bin_dummy_emulation.ar_replace)
return bin_dummy_emulation.ar_replace (after_bfd, file_name,
target, verbose);
return FALSE;
}
bfd_boolean
ar_emul_default_replace (bfd **after_bfd, char *file_name,
const char *target, bfd_boolean verbose)
{
bfd *new_bfd;
new_bfd = bfd_openr (file_name, target);
AR_EMUL_ELEMENT_CHECK (new_bfd, file_name);
AR_EMUL_REPLACE_PRINT_VERBOSE (verbose, file_name);
new_bfd->archive_next = *after_bfd;
*after_bfd = new_bfd;
return TRUE;
}
bfd_boolean
ar_emul_parse_arg (char *arg)
{
if (bin_dummy_emulation.ar_parse_arg)
return bin_dummy_emulation.ar_parse_arg (arg);
return FALSE;
}
bfd_boolean
ar_emul_default_parse_arg (char *arg ATTRIBUTE_UNUSED)
{
return FALSE;
}

View File

@ -0,0 +1,71 @@
/* Binutils emulation layer.
Copyright 2002, 2003, 2005, 2007, 2008 Free Software Foundation, Inc.
Written by Tom Rix, Red Hat Inc.
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 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 BINEMUL_H
#define BINEMUL_H
#include "sysdep.h"
#include "bfd.h"
#include "bucomm.h"
extern void ar_emul_usage (FILE *);
extern void ar_emul_default_usage (FILE *);
extern bfd_boolean ar_emul_append (bfd **, char *, const char *,
bfd_boolean, bfd_boolean);
extern bfd_boolean ar_emul_default_append (bfd **, char *, const char *,
bfd_boolean, bfd_boolean);
extern bfd_boolean do_ar_emul_append (bfd **, bfd *,
bfd_boolean, bfd_boolean,
bfd_boolean (*)(bfd *));
extern bfd_boolean ar_emul_replace (bfd **, char *, const char *,
bfd_boolean);
extern bfd_boolean ar_emul_default_replace (bfd **, char *,
const char *, bfd_boolean);
extern bfd_boolean ar_emul_parse_arg (char *);
extern bfd_boolean ar_emul_default_parse_arg (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) == 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) (FILE *fp);
bfd_boolean (* ar_append) (bfd **, char *, const char *, bfd_boolean,
bfd_boolean);
bfd_boolean (* ar_replace) (bfd **, char *, const char *, bfd_boolean);
bfd_boolean (* ar_parse_arg) (char *);
}
bin_emulation_xfer_type;
#endif

View File

@ -0,0 +1,30 @@
/* Binutils emulation layer.
Copyright (C) 2002, 2005, 2007 Free Software Foundation, Inc.
Written by Tom Rix, Red Hat Inc.
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 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. */
#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_parse_arg,
};

View File

@ -0,0 +1,22 @@
/* Copyright 2007 Free Software Foundation, Inc.
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 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. */
/* Linked with ar.o to flag that this program is 'ar' (not 'ranlib'). */
int is_ranlib = 0;