mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 17:18:55 +00:00
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.
This commit is contained in:
20
gas/as.c
20
gas/as.c
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user