diff options
author | Ian Lance Taylor <ian@airs.com> | 1996-03-22 16:44:21 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@airs.com> | 1996-03-22 16:44:21 +0000 |
commit | c7a89bde9b712899795468ba575bd374f7a28c04 (patch) | |
tree | 5dd15a9c840aa78ec6a85da6cc3803aee44e3d40 /gas/as.c | |
parent | 5ba7c0bee1a42f4b9ba600dad37adedb3569c079 (diff) | |
download | gdb-c7a89bde9b712899795468ba575bd374f7a28c04.zip gdb-c7a89bde9b712899795468ba575bd374f7a28c04.tar.gz gdb-c7a89bde9b712899795468ba575bd374f7a28c04.tar.bz2 |
* as.h (strdup): Don't declare.
* stabs.c: Include libiberty.h
(get_stab_string_offset): Use xstrdup rather than strdup.
(s_stab_generic): Likewise.
* as.c (parse_args): Likewise.
* read.c (s_mri_sect): Likewise.
Diffstat (limited to 'gas/as.c')
-rw-r--r-- | gas/as.c | 142 |
1 files changed, 102 insertions, 40 deletions
@@ -1,5 +1,6 @@ /* as.c - GAS main program. - Copyright (C) 1987, 1990, 1991, 1992, 1994 Free Software Foundation, Inc. + Copyright (C) 1987, 90, 91, 92, 93, 94, 95, 1996 + Free Software Foundation, Inc. This file is part of GAS, the GNU Assembler. @@ -60,6 +61,12 @@ segT reg_section, expr_section; segT text_section, data_section, bss_section; #endif +int chunksize = 5000; + +/* To monitor memory allocation more effectively, make this non-zero. + Then the chunk sizes for gas and bfd will be reduced. */ +int debug_memory = 0; + void print_version_id () @@ -94,6 +101,7 @@ Options:\n\ =file set listing file name (must be last sub-option)\n"); fprintf (stream, "\ -D produce assembler debugging messages\n\ +--defsym SYM=VAL define symbol SYM to given value\n\ -f skip whitespace and comment preprocessing\n\ --help show this message and exit\n\ -I DIR add DIR to search list for .include directives\n\ @@ -105,7 +113,7 @@ Options:\n\ -nocpp ignored\n\ -o OBJFILE name the object-file output OBJFILE (default a.out)\n\ -R fold data section into text section\n\ ---statistics print maximum bytes and total seconds used\n\ +--statistics print various measured statistics from execution\n\ --version print assembler version number and exit\n\ -W suppress warnings\n\ -w ignored\n\ @@ -260,6 +268,8 @@ parse_args (pargc, pargv) {"verbose", no_argument, NULL, OPTION_VERBOSE}, #define OPTION_EMULATION (OPTION_STD_BASE + 6) {"emulation", required_argument, NULL, OPTION_EMULATION}, +#define OPTION_DEFSYM (OPTION_STD_BASE + 7) + {"defsym", required_argument, NULL, OPTION_DEFSYM} }; /* Construct the option lists from the standard list and the @@ -365,6 +375,24 @@ parse_args (pargc, pargv) #endif exit (EXIT_SUCCESS); + case OPTION_DEFSYM: + { + char *s; + long i; + symbolS *sym; + + for (s = optarg; *s != '\0' && *s != '='; s++) + ; + if (*s == '\0') + as_fatal ("bad defsym; format is --defsym name=value"); + *s++ = '\0'; + i = strtol (s, (char **) NULL, 0); + sym = symbol_new (optarg, absolute_section, (valueT) i, + &zero_address_frag); + symbol_table_insert (sym); + } + break; + case 'J': flag_signed_overflow_ok = 1; break; @@ -381,6 +409,9 @@ parse_args (pargc, pargv) case 'M': flag_mri = 1; +#ifdef TC_M68K + flag_m68k_mri = 1; +#endif break; case 'R': @@ -418,9 +449,7 @@ parse_args (pargc, pargv) listing |= LISTING_SYMBOLS; break; case '=': - listing_filename = strdup (optarg + 1); - if (listing_filename == NULL) - as_fatal ("virtual memory exhausted"); + listing_filename = xstrdup (optarg + 1); optarg += strlen (listing_filename); break; default: @@ -446,17 +475,13 @@ parse_args (pargc, pargv) case 'I': { /* Include file directory */ - char *temp = strdup (optarg); - if (!temp) - as_fatal ("virtual memory exhausted"); + char *temp = xstrdup (optarg); add_include_dir (temp); break; } case 'o': - out_file_name = strdup (optarg); - if (!out_file_name) - as_fatal ("virtual memory exhausted"); + out_file_name = xstrdup (optarg); break; case 'w': @@ -475,13 +500,28 @@ parse_args (pargc, pargv) *pargv = new_argv; } +static void dump_statistics (); +static long start_time; + int main (argc, argv) int argc; char **argv; { + int macro_alternate; + int macro_strip_at; int keep_it; - long start_time = get_run_time (); + + start_time = get_run_time (); + + if (debug_memory) + { +#ifdef BFD_ASSEMBLER + extern long _bfd_chunksize; + _bfd_chunksize = 64; +#endif + chunksize = 64; + } #ifdef HOST_SPECIAL_INIT HOST_SPECIAL_INIT (argc, argv); @@ -511,11 +551,27 @@ main (argc, argv) symbol_begin (); frag_init (); subsegs_begin (); - read_begin (); parse_args (&argc, &argv); + read_begin (); input_scrub_begin (); expr_begin (); - macro_init (0, flag_mri, macro_expr); + + if (flag_print_statistics) + xatexit (dump_statistics); + + macro_alternate = 0; + macro_strip_at = 0; +#ifdef TC_I960 + macro_strip_at = flag_mri; +#endif +#ifdef TC_A29K + /* For compatibility with the AMD 29K family macro assembler + specification. */ + macro_alternate = 1; + macro_strip_at = 1; +#endif + + macro_init (macro_alternate, flag_mri, macro_strip_at, macro_expr); PROGRESS (1); @@ -531,14 +587,10 @@ main (argc, argv) PROGRESS (1); perform_an_assembly_pass (argc, argv); /* Assemble it. */ -#ifdef TC_I960 - brtab_emit (); -#endif -/* start-sanitize-rce */ -#ifdef TC_RCE - dump_literals(0); + +#ifdef md_end + md_end (); #endif -/* end-sanitize-rce */ if (seen_at_least_1_file () && !((had_warnings () && flag_always_generate_output) @@ -565,34 +617,44 @@ main (argc, argv) unlink (out_file_name); input_scrub_end (); -#ifdef md_end - md_end (); -#endif END_PROGRESS (myname); - if (flag_print_statistics) - { - extern char **environ; + /* Use xexit instead of return, because under VMS environments they + may not place the same interpretation on the value given. */ + if ((had_warnings () && flag_always_generate_output) + || had_errors () > 0) + xexit (EXIT_FAILURE); + xexit (EXIT_SUCCESS); +} + +static void +dump_statistics () +{ + extern char **environ; #ifdef HAVE_SBRK - char *lim = (char *) sbrk (0); + char *lim = (char *) sbrk (0); #endif - long run_time = get_run_time () - start_time; + long run_time = get_run_time () - start_time; - fprintf (stderr, "%s: total time in assembly: %ld.%06ld\n", - myname, run_time / 1000000, run_time % 1000000); + fprintf (stderr, "%s: total time in assembly: %ld.%06ld\n", + myname, run_time / 1000000, run_time % 1000000); #ifdef HAVE_SBRK - fprintf (stderr, "%s: data size %ld\n", - myname, (long) (lim - (char *) &environ)); + fprintf (stderr, "%s: data size %ld\n", + myname, (long) (lim - (char *) &environ)); #endif - } - /* Use exit instead of return, because under VMS environments they - may not place the same interpretation on the value given. */ - if ((had_warnings () && flag_always_generate_output) - || had_errors () > 0) - exit (EXIT_FAILURE); - exit (EXIT_SUCCESS); + subsegs_print_statistics (stderr); + write_print_statistics (stderr); + symbol_print_statistics (stderr); + read_print_statistics (stderr); + +#ifdef tc_print_statistics + tc_print_statistics (stderr); +#endif +#ifdef obj_print_statistics + obj_print_statistics (stderr); +#endif } |