binemul.c revision 104834
1/* Binutils emulation layer. 2 Copyright (C) 2002 Free Software Foundation, Inc. 3 Written by Tom Rix, Redhat. 4 5 This file is part of GNU Binutils. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 2 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program; if not, write to the Free Software 19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 20 21#include "binemul.h" 22 23extern bin_emulation_xfer_type bin_dummy_emulation; 24 25void 26ar_emul_usage (fp) 27 FILE *fp; 28{ 29 if (bin_dummy_emulation.ar_usage) 30 bin_dummy_emulation.ar_usage (fp); 31} 32 33void 34ar_emul_default_usage (fp) 35 FILE *fp; 36{ 37 AR_EMUL_USAGE_PRINT_OPTION_HEADER (fp); 38 /* xgettext:c-format */ 39 fprintf (fp, _(" No emulation specific options\n")); 40} 41 42boolean 43ar_emul_append (after_bfd, file_name, verbose) 44 bfd **after_bfd; 45 char *file_name; 46 boolean verbose; 47{ 48 if (bin_dummy_emulation.ar_append) 49 return bin_dummy_emulation.ar_append (after_bfd, file_name, verbose); 50 51 return false; 52} 53 54boolean 55ar_emul_default_append (after_bfd, file_name, verbose) 56 bfd **after_bfd; 57 char *file_name; 58 boolean verbose; 59{ 60 bfd *temp; 61 62 temp = *after_bfd; 63 *after_bfd = bfd_openr (file_name, NULL); 64 65 AR_EMUL_ELEMENT_CHECK (*after_bfd, file_name); 66 AR_EMUL_APPEND_PRINT_VERBOSE (verbose, file_name); 67 68 (*after_bfd)->next = temp; 69 70 return true; 71} 72 73boolean 74ar_emul_replace (after_bfd, file_name, verbose) 75 bfd **after_bfd; 76 char *file_name; 77 boolean verbose; 78{ 79 if (bin_dummy_emulation.ar_replace) 80 return bin_dummy_emulation.ar_replace (after_bfd, file_name, verbose); 81 82 return false; 83} 84 85boolean 86ar_emul_default_replace (after_bfd, file_name, verbose) 87 bfd **after_bfd; 88 char *file_name; 89 boolean verbose; 90{ 91 bfd *temp; 92 93 temp = *after_bfd; 94 *after_bfd = bfd_openr (file_name, NULL); 95 96 AR_EMUL_ELEMENT_CHECK (*after_bfd, file_name); 97 AR_EMUL_REPLACE_PRINT_VERBOSE (verbose, file_name); 98 99 (*after_bfd)->next = temp; 100 101 return true; 102} 103 104boolean 105ar_emul_create (abfd_out, archive_file_name, file_name) 106 bfd **abfd_out; 107 char *archive_file_name; 108 char *file_name; 109{ 110 if (bin_dummy_emulation.ar_create) 111 return bin_dummy_emulation.ar_create (abfd_out, archive_file_name, 112 file_name); 113 114 return false; 115} 116 117boolean 118ar_emul_default_create (abfd_out, archive_file_name, file_name) 119 bfd **abfd_out; 120 char *archive_file_name; 121 char *file_name; 122{ 123 char *target = NULL; 124 125 /* Try to figure out the target to use for the archive from the 126 first object on the list. */ 127 if (file_name != NULL) 128 { 129 bfd *obj; 130 131 obj = bfd_openr (file_name, NULL); 132 if (obj != NULL) 133 { 134 if (bfd_check_format (obj, bfd_object)) 135 target = bfd_get_target (obj); 136 (void) bfd_close (obj); 137 } 138 } 139 140 /* Create an empty archive. */ 141 *abfd_out = bfd_openw (archive_file_name, target); 142 if (*abfd_out == NULL 143 || ! bfd_set_format (*abfd_out, bfd_archive) 144 || ! bfd_close (*abfd_out)) 145 bfd_fatal (archive_file_name); 146 147 return true; 148} 149 150boolean 151ar_emul_parse_arg (arg) 152 char *arg; 153{ 154 if (bin_dummy_emulation.ar_parse_arg) 155 return bin_dummy_emulation.ar_parse_arg (arg); 156 157 return false; 158} 159 160boolean 161ar_emul_default_parse_arg (arg) 162 char *arg ATTRIBUTE_UNUSED; 163{ 164 return false; 165} 166