diff options
Diffstat (limited to 'gas/output-file.c')
-rw-r--r-- | gas/output-file.c | 125 |
1 files changed, 82 insertions, 43 deletions
diff --git a/gas/output-file.c b/gas/output-file.c index 423bab2..940a0c1 100644 --- a/gas/output-file.c +++ b/gas/output-file.c @@ -1,23 +1,21 @@ /* output-file.c - Deal with the output file Copyright (C) 1987, 1990, 1991 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 1, 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. */ - -/* static const char rcsid[] = "$Id$"; */ + + 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. */ /* * Confines all details of emitting object bytes to this module. @@ -26,7 +24,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ * Note we don't need to #include the "as.h" file. No common coupling! */ - /* note that we do need config info. xoxorich. */ +/* note that we do need config info. xoxorich. */ /* #include "style.h" */ #include <stdio.h> @@ -34,19 +32,59 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "as.h" #include "output-file.h" +#ifdef BFD_HEADERS +#include "bfd.h" +bfd *stdoutput; +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; +{ + /* 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; +{ + abort(); /* Never do this */ +} + +#else static FILE *stdoutput; 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); - } + 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() */ @@ -54,12 +92,12 @@ char *name; 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! */ + 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) @@ -67,17 +105,18 @@ 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"); - } - } + + 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 */ +#endif |