mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 06:45:56 +08:00
Patches from Jerry Blakely <gerry_blakley@wellfleet.com>:
* as.c (listing_filename): New static variable. (show_usage): Mention -a=file. (parse_args): Support = option of -a to set name of listing file. (main): Pass listing_filename to listing_print. * listing.c (list_file): New static variable. (various): Replace printf with fprintf to list_file. (listing_print): If name argument is not NULL, open it as list_file. * doc/as.texinfo, doc/as.1: Document -a=file. PR 6354.
This commit is contained in:
@ -1,5 +1,16 @@
|
||||
Thu Jul 6 12:54:27 1995 Ian Lance Taylor <ian@cygnus.com>
|
||||
|
||||
Patches from Jerry Blakely <gerry_blakley@wellfleet.com>:
|
||||
* as.c (listing_filename): New static variable.
|
||||
(show_usage): Mention -a=file.
|
||||
(parse_args): Support = option of -a to set name of listing file.
|
||||
(main): Pass listing_filename to listing_print.
|
||||
* listing.c (list_file): New static variable.
|
||||
(various): Replace printf with fprintf to list_file.
|
||||
(listing_print): If name argument is not NULL, open it as
|
||||
list_file.
|
||||
* doc/as.texinfo, doc/as.1: Document -a=file.
|
||||
|
||||
* config/tc-sparc.c (s_reserve): Don't permit redefinition, even
|
||||
if the symbol was already in bss_section. Fix warning message.
|
||||
|
||||
|
13
gas/as.c
13
gas/as.c
@ -45,6 +45,8 @@ static void perform_an_assembly_pass PARAMS ((int argc, char **argv));
|
||||
|
||||
int listing; /* true if a listing is wanted */
|
||||
|
||||
static char *listing_filename = NULL; /* Name of listing file. */
|
||||
|
||||
char *myname; /* argv[0] */
|
||||
#ifdef BFD_ASSEMBLER
|
||||
segT reg_section, expr_section;
|
||||
@ -81,7 +83,8 @@ Options:\n\
|
||||
h include high-level source\n\
|
||||
l include assembly\n\
|
||||
n omit forms processing\n\
|
||||
s include symbols\n");
|
||||
s include symbols\n\
|
||||
=file set listing file name (must be last sub-option)\n");
|
||||
fprintf (stream, "\
|
||||
-D produce assembler debugging messages\n\
|
||||
-f skip whitespace and comment preprocessing\n\
|
||||
@ -401,6 +404,12 @@ parse_args (pargc, pargv)
|
||||
case 's':
|
||||
listing |= LISTING_SYMBOLS;
|
||||
break;
|
||||
case '=':
|
||||
listing_filename = strdup (optarg + 1);
|
||||
if (listing_filename == NULL)
|
||||
as_fatal ("virtual memory exhausted");
|
||||
optarg += strlen (listing_filename);
|
||||
break;
|
||||
default:
|
||||
as_fatal ("invalid listing option `%c'", *optarg);
|
||||
break;
|
||||
@ -528,7 +537,7 @@ main (argc, argv)
|
||||
write_object_file ();
|
||||
|
||||
#ifndef NO_LISTING
|
||||
listing_print ("");
|
||||
listing_print (listing_filename);
|
||||
#endif
|
||||
|
||||
#ifndef OBJ_VMS /* does its own file handling */
|
||||
|
34
gas/doc/as.1
34
gas/doc/as.1
@ -8,8 +8,10 @@ GNU as\-\-the portable GNU assembler.
|
||||
.SH SYNOPSIS
|
||||
.na
|
||||
.B as
|
||||
.RB "[\|" \-a "\||\|" \-al "\||\|" -as\c
|
||||
\&\|]
|
||||
.RB "[\|" \-a "[\|" dhlns "\|]" \c
|
||||
\&\[\|\=\c
|
||||
.I file\c
|
||||
\&\|]\|]
|
||||
.RB "[\|" \-D "\|]"
|
||||
.RB "[\|" \-f "\|]"
|
||||
.RB "[\|" \-I
|
||||
@ -118,15 +120,25 @@ grave problem that stops the assembly.
|
||||
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.BR \-a \||\| \-al \||\| \-as
|
||||
Turn on assembly listings; `\|\c
|
||||
.B \-al\c
|
||||
\&\|', listing only, `\|\c
|
||||
.B \-as\c
|
||||
\&\|', symbols
|
||||
only, `\|\c
|
||||
.B \-a\c
|
||||
\&\|', everything.
|
||||
.BR \-a
|
||||
Turn on assembly listings. There are various suboptions.
|
||||
.B d
|
||||
omits debugging directives.
|
||||
.B h
|
||||
includes the high level source code; this is only available if the
|
||||
source file can be found, and the code was compiled with
|
||||
.B \-g.
|
||||
.B l
|
||||
includes an assembly listing.
|
||||
.B n
|
||||
omits forms processing.
|
||||
.B s
|
||||
includes a symbol listing.
|
||||
.B =
|
||||
.I file
|
||||
sets the listing file name; this must be the last suboption.
|
||||
The default suboptions are
|
||||
.B hls.
|
||||
.TP
|
||||
.B \-D
|
||||
This option is accepted only for script compatibility with calls to
|
||||
|
@ -194,7 +194,7 @@ Here is a brief summary of how to invoke @code{@value{AS}}. For details,
|
||||
@c We don't use deffn and friends for the following because they seem
|
||||
@c to be limited to one line for the header.
|
||||
@smallexample
|
||||
@value{AS} [ -a[dhlns] ] [ -D ] [ -f ] [ --help ]
|
||||
@value{AS} [ -a[dhlns][=file] ] [ -D ] [ -f ] [ --help ]
|
||||
[ -I @var{dir} ] [ -J ] [ -K ] [ -L ] [ -o @var{objfile} ]
|
||||
[ -R ] [ --statistics ] [ -v ] [ -version ] [ --version ]
|
||||
[ -W ] [ -w ] [ -x ] [ -Z ]
|
||||
@ -254,11 +254,15 @@ omit forms processing
|
||||
|
||||
@item -as
|
||||
include symbols
|
||||
|
||||
@item =file
|
||||
set the name of the listing file
|
||||
@end table
|
||||
|
||||
You may combine these options; for example, use @samp{-aln} for assembly
|
||||
listing without forms processing. By itself, @samp{-a} defaults to
|
||||
@samp{-ahls}---that is, all listings turned on.
|
||||
listing without forms processing. The @samp{=file} option, if used, must be
|
||||
the last one. By itself, @samp{-a} defaults to @samp{-ahls}---that is, all
|
||||
listings turned on.
|
||||
|
||||
@item -D
|
||||
Ignored. This option is accepted for script compatibility with calls to
|
||||
|
@ -186,6 +186,8 @@ extern fragS *frag_now;
|
||||
static int paper_width = 200;
|
||||
static int paper_height = 60;
|
||||
|
||||
/* File to output listings to. */
|
||||
static FILE *list_file;
|
||||
|
||||
/* this static array is used to keep the text of data to be printed
|
||||
before the start of the line.
|
||||
@ -455,12 +457,12 @@ listing_page (list)
|
||||
|
||||
if (page > 1)
|
||||
{
|
||||
printf ("\f");
|
||||
fprintf (list_file, "\f");
|
||||
}
|
||||
|
||||
printf ("%s %s \t\t\tpage %d\n", LISTING_HEADER, fn, page);
|
||||
printf ("%s\n", title);
|
||||
printf ("%s\n", subtitle);
|
||||
fprintf (list_file, "%s %s \t\t\tpage %d\n", LISTING_HEADER, fn, page);
|
||||
fprintf (list_file, "%s\n", title);
|
||||
fprintf (list_file, "%s\n", subtitle);
|
||||
on_page = 3;
|
||||
eject = 0;
|
||||
}
|
||||
@ -565,11 +567,11 @@ print_lines (list, string, address)
|
||||
/* Print the hex for the first line */
|
||||
if (address == ~0)
|
||||
{
|
||||
printf ("% 4d ", list->line);
|
||||
fprintf (list_file, "% 4d ", list->line);
|
||||
for (idx = 0; idx < nchars; idx++)
|
||||
printf (" ");
|
||||
fprintf (list_file, " ");
|
||||
|
||||
printf ("\t%s\n", string ? string : "");
|
||||
fprintf (list_file, "\t%s\n", string ? string : "");
|
||||
on_page++;
|
||||
listing_page (0);
|
||||
|
||||
@ -578,11 +580,11 @@ print_lines (list, string, address)
|
||||
{
|
||||
if (had_errors ())
|
||||
{
|
||||
printf ("% 4d ???? ", list->line);
|
||||
fprintf (list_file, "% 4d ???? ", list->line);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf ("% 4d %04x ", list->line, address);
|
||||
fprintf (list_file, "% 4d %04x ", list->line, address);
|
||||
}
|
||||
|
||||
/* And the data to go along with it */
|
||||
@ -590,12 +592,12 @@ print_lines (list, string, address)
|
||||
|
||||
while (*src && idx < nchars)
|
||||
{
|
||||
printf ("%c%c", src[0], src[1]);
|
||||
fprintf (list_file, "%c%c", src[0], src[1]);
|
||||
src += 2;
|
||||
byte_in_word++;
|
||||
if (byte_in_word == LISTING_WORD_SIZE)
|
||||
{
|
||||
printf (" ");
|
||||
fprintf (list_file, " ");
|
||||
idx++;
|
||||
byte_in_word = 0;
|
||||
}
|
||||
@ -603,14 +605,14 @@ print_lines (list, string, address)
|
||||
}
|
||||
|
||||
for (; idx < nchars; idx++)
|
||||
printf (" ");
|
||||
fprintf (list_file, " ");
|
||||
|
||||
printf ("\t%s\n", string ? string : "");
|
||||
fprintf (list_file, "\t%s\n", string ? string : "");
|
||||
on_page++;
|
||||
listing_page (list);
|
||||
if (list->message)
|
||||
{
|
||||
printf ("**** %s\n", list->message);
|
||||
fprintf (list_file, "**** %s\n", list->message);
|
||||
listing_page (list);
|
||||
on_page++;
|
||||
}
|
||||
@ -623,23 +625,23 @@ print_lines (list, string, address)
|
||||
nchars = ((LISTING_WORD_SIZE * 2) + 1) * LISTING_LHS_WIDTH_SECOND - 1;
|
||||
idx = 0;
|
||||
/* Print any more lines of data, but more compactly */
|
||||
printf ("% 4d ", list->line);
|
||||
fprintf (list_file, "% 4d ", list->line);
|
||||
|
||||
while (*src && idx < nchars)
|
||||
{
|
||||
printf ("%c%c", src[0], src[1]);
|
||||
fprintf (list_file, "%c%c", src[0], src[1]);
|
||||
src += 2;
|
||||
idx += 2;
|
||||
byte_in_word++;
|
||||
if (byte_in_word == LISTING_WORD_SIZE)
|
||||
{
|
||||
printf (" ");
|
||||
fprintf (list_file, " ");
|
||||
idx++;
|
||||
byte_in_word = 0;
|
||||
}
|
||||
}
|
||||
|
||||
printf ("\n");
|
||||
fprintf (list_file, "\n");
|
||||
on_page++;
|
||||
listing_page (list);
|
||||
|
||||
@ -693,16 +695,16 @@ list_symbol_table ()
|
||||
|
||||
if (!got_some)
|
||||
{
|
||||
printf ("DEFINED SYMBOLS\n");
|
||||
fprintf (list_file, "DEFINED SYMBOLS\n");
|
||||
on_page++;
|
||||
got_some = 1;
|
||||
}
|
||||
|
||||
printf ("%20s:%-5d %s:%s %s\n",
|
||||
ptr->sy_frag->line->file->filename,
|
||||
ptr->sy_frag->line->line,
|
||||
segment_name (S_GET_SEGMENT (ptr)),
|
||||
buf, S_GET_NAME (ptr));
|
||||
fprintf (list_file, "%20s:%-5d %s:%s %s\n",
|
||||
ptr->sy_frag->line->file->filename,
|
||||
ptr->sy_frag->line->line,
|
||||
segment_name (S_GET_SEGMENT (ptr)),
|
||||
buf, S_GET_NAME (ptr));
|
||||
|
||||
on_page++;
|
||||
listing_page (0);
|
||||
@ -712,10 +714,10 @@ list_symbol_table ()
|
||||
}
|
||||
if (!got_some)
|
||||
{
|
||||
printf ("NO DEFINED SYMBOLS\n");
|
||||
fprintf (list_file, "NO DEFINED SYMBOLS\n");
|
||||
on_page++;
|
||||
}
|
||||
printf ("\n");
|
||||
fprintf (list_file, "\n");
|
||||
on_page++;
|
||||
listing_page (0);
|
||||
|
||||
@ -734,11 +736,11 @@ list_symbol_table ()
|
||||
if (!got_some)
|
||||
{
|
||||
got_some = 1;
|
||||
printf ("UNDEFINED SYMBOLS\n");
|
||||
fprintf (list_file, "UNDEFINED SYMBOLS\n");
|
||||
on_page++;
|
||||
listing_page (0);
|
||||
}
|
||||
printf ("%s\n", S_GET_NAME (ptr));
|
||||
fprintf (list_file, "%s\n", S_GET_NAME (ptr));
|
||||
on_page++;
|
||||
listing_page (0);
|
||||
}
|
||||
@ -746,7 +748,7 @@ list_symbol_table ()
|
||||
}
|
||||
if (!got_some)
|
||||
{
|
||||
printf ("NO UNDEFINED SYMBOLS\n");
|
||||
fprintf (list_file, "NO UNDEFINED SYMBOLS\n");
|
||||
on_page++;
|
||||
listing_page (0);
|
||||
}
|
||||
@ -765,7 +767,8 @@ print_source (current_file, list, buffer, width)
|
||||
&& !current_file->at_end)
|
||||
{
|
||||
char *p = buffer_line (current_file, buffer, width);
|
||||
printf ("%4d:%-13s **** %s\n", current_file->linenum, current_file->filename, p);
|
||||
fprintf (list_file, "%4d:%-13s **** %s\n", current_file->linenum,
|
||||
current_file->filename, p);
|
||||
on_page++;
|
||||
listing_page (list);
|
||||
}
|
||||
@ -924,6 +927,18 @@ listing_print (name)
|
||||
title = "";
|
||||
subtitle = "";
|
||||
|
||||
if (name == NULL)
|
||||
list_file = stdout;
|
||||
else
|
||||
{
|
||||
list_file = fopen (name, "w");
|
||||
if (list_file == NULL)
|
||||
{
|
||||
as_perror ("can't open list file: %s", name);
|
||||
list_file = stdout;
|
||||
}
|
||||
}
|
||||
|
||||
if (listing & LISTING_NOFORM)
|
||||
{
|
||||
paper_height = 0;
|
||||
|
Reference in New Issue
Block a user