diff options
author | Alan Modra <amodra@gmail.com> | 2022-07-07 13:32:30 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2022-07-09 21:22:51 +0930 |
commit | af3d7ab74f0aff2eb2af68d0d1df2e27e5757ecd (patch) | |
tree | e37876fc4fd3989ca030a8ca183631258e1f177d /gas | |
parent | f1307e43df8e1784416822e6dd67cb2f4215bc1f (diff) | |
download | fsf-binutils-gdb-af3d7ab74f0aff2eb2af68d0d1df2e27e5757ecd.zip fsf-binutils-gdb-af3d7ab74f0aff2eb2af68d0d1df2e27e5757ecd.tar.gz fsf-binutils-gdb-af3d7ab74f0aff2eb2af68d0d1df2e27e5757ecd.tar.bz2 |
gas: set up notes obstack earlier
So that the notes obstack can be used for persistent storage in
parse_args.
* as.c (parse_args): Use notes_alloc and notes_strdup.
(free_notes): New function.
(main): Init notes obstack, and arrange to be freed on exit.
* read.c (read_begin): Don't init notes obstack.
(read_end): Free cond_obstack.
* subsegs.c (subsegs_end): Don't free cond_obstack or notes.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/as.c | 20 | ||||
-rw-r--r-- | gas/read.c | 4 | ||||
-rw-r--r-- | gas/subsegs.c | 2 |
3 files changed, 15 insertions, 11 deletions
@@ -588,7 +588,7 @@ parse_args (int * pargc, char *** pargv) old_argv = *pargv; /* Initialize a new argv that contains no options. */ - new_argv = XNEWVEC (char *, old_argc + 1); + new_argv = notes_alloc (sizeof (char *) * (old_argc + 1)); new_argv[0] = old_argv[0]; new_argc = 1; new_argv[new_argc] = NULL; @@ -996,7 +996,7 @@ This program has absolutely no warranty.\n")); case OPTION_AL: listing |= LISTING_LISTING; if (optarg) - listing_filename = xstrdup (optarg); + listing_filename = notes_strdup (optarg); break; case OPTION_ALTERNATE: @@ -1050,7 +1050,7 @@ This program has absolutely no warranty.\n")); listing |= LISTING_SYMBOLS; break; case '=': - listing_filename = xstrdup (optarg + 1); + listing_filename = notes_strdup (optarg + 1); optarg += strlen (listing_filename); break; default: @@ -1076,14 +1076,14 @@ This program has absolutely no warranty.\n")); case 'I': { /* Include file directory. */ - char *temp = xstrdup (optarg); + char *temp = notes_strdup (optarg); add_include_dir (temp); break; } case 'o': - out_file_name = xstrdup (optarg); + out_file_name = notes_strdup (optarg); break; case 'w': @@ -1231,7 +1231,12 @@ perform_an_assembly_pass (int argc, char ** argv) if (!saw_a_file) read_a_source_file (""); } - + +static void +free_notes (void) +{ + _obstack_free (¬es, NULL); +} int main (int argc, char ** argv) @@ -1280,6 +1285,9 @@ main (int argc, char ** argv) select_emulation_mode (argc, argv); #endif + obstack_begin (¬es, chunksize); + xatexit (free_notes); + PROGRESS (1); /* Call parse_args before any of the init/begin functions so that switches like --hash-size can be honored. */ @@ -261,9 +261,6 @@ read_begin (void) pobegin (); obj_read_begin_hook (); - /* Something close -- but not too close -- to a multiple of 1024. - The debugging malloc I'm using has 24 bytes of overhead. */ - obstack_begin (¬es, chunksize); obstack_begin (&cond_obstack, chunksize); #ifndef tc_line_separator_chars @@ -282,6 +279,7 @@ void read_end (void) { poend (); + _obstack_free (&cond_obstack, NULL); } #ifndef TC_ADDRESS_BYTES diff --git a/gas/subsegs.c b/gas/subsegs.c index 1776511..b1a85d3 100644 --- a/gas/subsegs.c +++ b/gas/subsegs.c @@ -50,8 +50,6 @@ subsegs_end (struct obstack **obs) for (; *obs; obs++) _obstack_free (*obs, NULL); _obstack_free (&frchains, NULL); - _obstack_free (&cond_obstack, NULL); - _obstack_free (¬es, NULL); } static void |