summaryrefslogtreecommitdiff
path: root/gas/as.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2022-07-07 13:32:30 +0930
committerAlan Modra <amodra@gmail.com>2022-07-09 21:22:51 +0930
commitaf3d7ab74f0aff2eb2af68d0d1df2e27e5757ecd (patch)
treee37876fc4fd3989ca030a8ca183631258e1f177d /gas/as.c
parentf1307e43df8e1784416822e6dd67cb2f4215bc1f (diff)
downloadbinutils-gdb-af3d7ab74f0aff2eb2af68d0d1df2e27e5757ecd.tar.gz
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/as.c')
-rw-r--r--gas/as.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/gas/as.c b/gas/as.c
index 8b2b3e8d33f..2b8886e8b54 100644
--- a/gas/as.c
+++ b/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 (&notes, NULL);
+}
int
main (int argc, char ** argv)
@@ -1280,6 +1285,9 @@ main (int argc, char ** argv)
select_emulation_mode (argc, argv);
#endif
+ obstack_begin (&notes, 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. */