summaryrefslogtreecommitdiff
path: root/gas/as.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2023-02-16 09:28:29 +1030
committerAlan Modra <amodra@gmail.com>2023-02-16 21:00:50 +1030
commit7f27b6b18a0b72372128b2f49f743084776f1c54 (patch)
tree641dabef2f3930f2c9f9fe57724990dab3a3de12 /gas/as.c
parentc84b3d7eaa3aec024ff2482e3a1fea0e89d01839 (diff)
downloadbinutils-gdb-7f27b6b18a0b72372128b2f49f743084776f1c54.tar.gz
gas_init
Rename gas_late_init to plain gas_init, to reinforce the idea that this is where the bulk of gas initialisation belongs. Also reorder some initialisation. * as.c (gas_init): Rename from gas_late_init. Open output file and arrange for dump_statistics to be called here rather than in main. Create .gasversion. local symbol earlier, because we can.
Diffstat (limited to 'gas/as.c')
-rw-r--r--gas/as.c39
1 files changed, 20 insertions, 19 deletions
diff --git a/gas/as.c b/gas/as.c
index 0995292d1c8..23240989301 100644
--- a/gas/as.c
+++ b/gas/as.c
@@ -1314,10 +1314,10 @@ gas_early_init (int *argcp, char ***argvp)
#endif
}
-/* Init things that might depend on program args. */
+/* The bulk of gas initialisation. This is after args are parsed. */
static void
-gas_late_init (void)
+gas_init (void)
{
symbol_begin ();
frag_init ();
@@ -1334,9 +1334,22 @@ gas_late_init (void)
dwarf2_init ();
- /* Somewhat arbitrary division into initialisation above that
- doesn't need stdoutput open (even though it is open), and below
- where things might be put on stdoutput memory, eg. symbols. */
+ local_symbol_make (".gasversion.", absolute_section,
+ &predefined_address_frag, BFD_VERSION / 10000UL);
+
+ /* Note: Put new initialisation calls that don't depend on stdoutput
+ being open above this point. stdoutput must be open for anything
+ that might use stdoutput objalloc memory, eg. calling bfd_alloc
+ or creating global symbols (via bfd_make_empty_symbol). */
+ xatexit (output_file_close);
+ output_file_create (out_file_name);
+ gas_assert (stdoutput != 0);
+
+ /* Must be called before output_file_close. xexit calls the xatexit
+ list in reverse order. */
+ if (flag_print_statistics)
+ xatexit (dump_statistics);
+
PROGRESS (1);
dot_symbol_init ();
@@ -1347,9 +1360,6 @@ gas_late_init (void)
itbl_init ();
- local_symbol_make (".gasversion.", absolute_section,
- &predefined_address_frag, BFD_VERSION / 10000UL);
-
/* Now that we have fully initialized, and have created the output
file, define any symbols requested by --defsym command line
arguments. */
@@ -1381,7 +1391,7 @@ main (int argc, char ** argv)
gas_early_init (&argc, &argv);
PROGRESS (1);
- /* Call parse_args before gas_late_init so that switches like
+ /* Call parse_args before gas_init so that switches like
--hash-size can be honored. */
parse_args (&argc, &argv);
@@ -1424,16 +1434,7 @@ main (int argc, char ** argv)
}
}
- /* It has to be called after dump_statistics (). */
- xatexit (output_file_close);
-
- if (flag_print_statistics)
- xatexit (dump_statistics);
-
- output_file_create (out_file_name);
- gas_assert (stdoutput != 0);
-
- gas_late_init ();
+ gas_init ();
PROGRESS (1);