binemul.c revision 130561
1104834Sobrien/* Binutils emulation layer. 2130561Sobrien Copyright 2002, 2003 Free Software Foundation, Inc. 3104834Sobrien Written by Tom Rix, Redhat. 4104834Sobrien 5104834Sobrien This file is part of GNU Binutils. 6104834Sobrien 7104834Sobrien This program is free software; you can redistribute it and/or modify 8104834Sobrien it under the terms of the GNU General Public License as published by 9104834Sobrien the Free Software Foundation; either version 2 of the License, or 10104834Sobrien (at your option) any later version. 11104834Sobrien 12104834Sobrien This program is distributed in the hope that it will be useful, 13104834Sobrien but WITHOUT ANY WARRANTY; without even the implied warranty of 14104834Sobrien MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15104834Sobrien GNU General Public License for more details. 16104834Sobrien 17104834Sobrien You should have received a copy of the GNU General Public License 18104834Sobrien along with this program; if not, write to the Free Software 19104834Sobrien Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 20104834Sobrien 21104834Sobrien#include "binemul.h" 22104834Sobrien 23104834Sobrienextern bin_emulation_xfer_type bin_dummy_emulation; 24104834Sobrien 25104834Sobrienvoid 26130561Sobrienar_emul_usage (FILE *fp) 27104834Sobrien{ 28104834Sobrien if (bin_dummy_emulation.ar_usage) 29104834Sobrien bin_dummy_emulation.ar_usage (fp); 30104834Sobrien} 31104834Sobrien 32104834Sobrienvoid 33130561Sobrienar_emul_default_usage (FILE *fp) 34104834Sobrien{ 35104834Sobrien AR_EMUL_USAGE_PRINT_OPTION_HEADER (fp); 36104834Sobrien /* xgettext:c-format */ 37104834Sobrien fprintf (fp, _(" No emulation specific options\n")); 38104834Sobrien} 39104834Sobrien 40130561Sobrienbfd_boolean 41130561Sobrienar_emul_append (bfd **after_bfd, char *file_name, bfd_boolean verbose) 42104834Sobrien{ 43104834Sobrien if (bin_dummy_emulation.ar_append) 44104834Sobrien return bin_dummy_emulation.ar_append (after_bfd, file_name, verbose); 45104834Sobrien 46130561Sobrien return FALSE; 47104834Sobrien} 48104834Sobrien 49130561Sobrienbfd_boolean 50130561Sobrienar_emul_default_append (bfd **after_bfd, char *file_name, 51130561Sobrien bfd_boolean verbose) 52104834Sobrien{ 53104834Sobrien bfd *temp; 54104834Sobrien 55104834Sobrien temp = *after_bfd; 56104834Sobrien *after_bfd = bfd_openr (file_name, NULL); 57104834Sobrien 58104834Sobrien AR_EMUL_ELEMENT_CHECK (*after_bfd, file_name); 59104834Sobrien AR_EMUL_APPEND_PRINT_VERBOSE (verbose, file_name); 60104834Sobrien 61104834Sobrien (*after_bfd)->next = temp; 62104834Sobrien 63130561Sobrien return TRUE; 64104834Sobrien} 65104834Sobrien 66130561Sobrienbfd_boolean 67130561Sobrienar_emul_replace (bfd **after_bfd, char *file_name, bfd_boolean verbose) 68104834Sobrien{ 69104834Sobrien if (bin_dummy_emulation.ar_replace) 70104834Sobrien return bin_dummy_emulation.ar_replace (after_bfd, file_name, verbose); 71104834Sobrien 72130561Sobrien return FALSE; 73104834Sobrien} 74104834Sobrien 75130561Sobrienbfd_boolean 76130561Sobrienar_emul_default_replace (bfd **after_bfd, char *file_name, 77130561Sobrien bfd_boolean verbose) 78104834Sobrien{ 79104834Sobrien bfd *temp; 80104834Sobrien 81104834Sobrien temp = *after_bfd; 82104834Sobrien *after_bfd = bfd_openr (file_name, NULL); 83104834Sobrien 84104834Sobrien AR_EMUL_ELEMENT_CHECK (*after_bfd, file_name); 85104834Sobrien AR_EMUL_REPLACE_PRINT_VERBOSE (verbose, file_name); 86104834Sobrien 87104834Sobrien (*after_bfd)->next = temp; 88104834Sobrien 89130561Sobrien return TRUE; 90104834Sobrien} 91104834Sobrien 92130561Sobrienbfd_boolean 93130561Sobrienar_emul_create (bfd **abfd_out, char *archive_file_name, char *file_name) 94104834Sobrien{ 95104834Sobrien if (bin_dummy_emulation.ar_create) 96104834Sobrien return bin_dummy_emulation.ar_create (abfd_out, archive_file_name, 97104834Sobrien file_name); 98104834Sobrien 99130561Sobrien return FALSE; 100104834Sobrien} 101104834Sobrien 102130561Sobrienbfd_boolean 103130561Sobrienar_emul_default_create (bfd **abfd_out, char *archive_file_name, 104130561Sobrien char *file_name) 105104834Sobrien{ 106104834Sobrien char *target = NULL; 107104834Sobrien 108104834Sobrien /* Try to figure out the target to use for the archive from the 109104834Sobrien first object on the list. */ 110104834Sobrien if (file_name != NULL) 111104834Sobrien { 112104834Sobrien bfd *obj; 113104834Sobrien 114104834Sobrien obj = bfd_openr (file_name, NULL); 115104834Sobrien if (obj != NULL) 116104834Sobrien { 117104834Sobrien if (bfd_check_format (obj, bfd_object)) 118104834Sobrien target = bfd_get_target (obj); 119104834Sobrien (void) bfd_close (obj); 120104834Sobrien } 121104834Sobrien } 122104834Sobrien 123104834Sobrien /* Create an empty archive. */ 124104834Sobrien *abfd_out = bfd_openw (archive_file_name, target); 125104834Sobrien if (*abfd_out == NULL 126104834Sobrien || ! bfd_set_format (*abfd_out, bfd_archive) 127104834Sobrien || ! bfd_close (*abfd_out)) 128104834Sobrien bfd_fatal (archive_file_name); 129104834Sobrien 130130561Sobrien return TRUE; 131104834Sobrien} 132104834Sobrien 133130561Sobrienbfd_boolean 134130561Sobrienar_emul_parse_arg (char *arg) 135104834Sobrien{ 136104834Sobrien if (bin_dummy_emulation.ar_parse_arg) 137104834Sobrien return bin_dummy_emulation.ar_parse_arg (arg); 138104834Sobrien 139130561Sobrien return FALSE; 140104834Sobrien} 141104834Sobrien 142130561Sobrienbfd_boolean 143130561Sobrienar_emul_default_parse_arg (char *arg ATTRIBUTE_UNUSED) 144104834Sobrien{ 145130561Sobrien return FALSE; 146104834Sobrien} 147