X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gas%2Foutput-file.c;h=531e35fa691e7f4e6ffddf167ccc5a18a5b58812;hb=2b3c4602718d2951e30572be3c1c6dcf5defa4fb;hp=940a0c108e4a26fcc1aaef3056daabfb2d62520e;hpb=a39116f1c91d3642c068d9df871338cca9006be2;p=binutils-gdb.git diff --git a/gas/output-file.c b/gas/output-file.c index 940a0c108e4..531e35fa691 100644 --- a/gas/output-file.c +++ b/gas/output-file.c @@ -1,122 +1,154 @@ /* output-file.c - Deal with the output file - Copyright (C) 1987, 1990, 1991 Free Software Foundation, Inc. - + Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1996, 1998, 1999, 2001 + Free Software Foundation, Inc. + This file is part of GAS, the GNU Assembler. - + GAS 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. - + GAS 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 GAS; see the file COPYING. If not, write to - the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ -/* - * Confines all details of emitting object bytes to this module. - * All O/S specific crocks should live here. - * What we lose in "efficiency" we gain in modularity. - * Note we don't need to #include the "as.h" file. No common coupling! - */ - -/* note that we do need config info. xoxorich. */ - -/* #include "style.h" */ #include #include "as.h" #include "output-file.h" + #ifdef BFD_HEADERS +#define USE_BFD +#endif + +#ifdef BFD_ASSEMBLER +#define USE_BFD +#ifndef TARGET_MACH +#define TARGET_MACH 0 +#endif +#endif + +#ifdef USE_BFD #include "bfd.h" bfd *stdoutput; -void output_file_create(name) -char *name; + +void +output_file_create (name) + char *name; { - if(name[0]=='-' && name[1]=='\0') { - as_perror("FATAL: Can't open a bfd on stdout %s ", name); - } - else if ( ! (stdoutput = bfd_openw( name, TARGET_FORMAT )) ) - { - as_perror ("FATAL: Can't create %s", name); - exit(42); - } - bfd_set_format(stdoutput, bfd_object); -} -/* output_file_create() */ - - -void output_file_close(filename) -char *filename; + if (name[0] == '-' && name[1] == '\0') + as_fatal (_("can't open a bfd on stdout %s"), name); + + else if (!(stdoutput = bfd_openw (name, TARGET_FORMAT))) + { + as_perror (_("FATAL: can't create %s"), name); + exit (EXIT_FAILURE); + } + + bfd_set_format (stdoutput, bfd_object); +#ifdef BFD_ASSEMBLER + bfd_set_arch_mach (stdoutput, TARGET_ARCH, TARGET_MACH); +#endif + if (flag_traditional_format) + stdoutput->flags |= BFD_TRADITIONAL_FORMAT; +} + +void +output_file_close (filename) + char *filename; { - /* Close the bfd without getting bfd to write out anything by itself */ - if ( bfd_close_all_done( stdoutput ) == 0 ) - { - as_perror ("FATAL: Can't close %s\n", filename); - exit(42); - } - stdoutput = NULL; /* Trust nobody! */ -} /* output_file_close() */ - -void output_file_append(where, length, filename) -char *where; -long length; -char *filename; +#ifdef BFD_ASSEMBLER + /* Close the bfd. */ + if (bfd_close (stdoutput) == 0) + { + bfd_perror (filename); + as_perror (_("FATAL: can't close %s\n"), filename); + exit (EXIT_FAILURE); + } +#else + /* Close the bfd without getting bfd to write out anything by itself. */ + if (bfd_close_all_done (stdoutput) == 0) + { + as_perror (_("FATAL: can't close %s\n"), filename); + exit (EXIT_FAILURE); + } +#endif + stdoutput = NULL; /* Trust nobody! */ +} + +#ifndef BFD_ASSEMBLER +void +output_file_append (where, length, filename) + char *where ATTRIBUTE_UNUSED; + long length ATTRIBUTE_UNUSED; + char *filename ATTRIBUTE_UNUSED; { - abort(); /* Never do this */ -} + abort (); +} +#endif #else static FILE *stdoutput; -void output_file_create(name) -char *name; +void +output_file_create (name) + char *name; { - if(name[0]=='-' && name[1]=='\0') - stdoutput=stdout; - else if ( ! (stdoutput = fopen( name, "w" )) ) - { - as_perror ("FATAL: Can't create %s", name); - exit(42); - } -} /* output_file_create() */ - - - -void output_file_close(filename) -char *filename; + if (name[0] == '-' && name[1] == '\0') + { + stdoutput = stdout; + return; + } + + stdoutput = fopen (name, FOPEN_WB); + if (stdoutput == NULL) + { + as_perror (_("FATAL: can't create %s"), name); + exit (EXIT_FAILURE); + } +} + +void +output_file_close (filename) + char *filename; { - if ( EOF == fclose( stdoutput ) ) - { - as_perror ("FATAL: Can't close %s", filename); - exit(42); - } - stdoutput = NULL; /* Trust nobody! */ -} /* output_file_close() */ - -void output_file_append(where, length, filename) -char *where; -long length; -char *filename; + if (EOF == fclose (stdoutput)) + { + as_perror (_("FATAL: can't close %s"), filename); + exit (EXIT_FAILURE); + } + + /* Trust nobody! */ + stdoutput = NULL; +} + +void +output_file_append (where, length, filename) + char * where; + long length; + char * filename; { - - for (; length; length--,where++) - { - (void)putc(*where,stdoutput); - if(ferror(stdoutput)) - /* if ( EOF == (putc( *where, stdoutput )) ) */ - { - as_perror("Failed to emit an object byte", filename); - as_fatal("Can't continue"); - } - } -} /* output_file_append() */ - -/* end: output-file.c */ + for (; length; length--, where++) + { + (void) putc (*where, stdoutput); + + if (ferror (stdoutput)) + /* if ( EOF == (putc( *where, stdoutput )) ) */ + { + as_perror (_("Failed to emit an object byte"), filename); + as_fatal (_("can't continue")); + } + } +} + #endif +