Stop the assembler from overwriting its output file.
* as.c (main): Fail if the output is the same as one of the input files. * testsuite/gas/all/gas.exp: Test the new feature.
This commit is contained in:
parent
73a05be215
commit
67f846b59b
@ -1,3 +1,9 @@
|
||||
2018-04-12 John Darrington <john@darrington.wattle.id.au>
|
||||
|
||||
* as.c (main): Fail if the output is the same as one of the input
|
||||
files.
|
||||
* testsuite/gas/all/gas.exp: Test the new feature.
|
||||
|
||||
2018-04-12 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* po/es.po: Updated Spanish translation.
|
||||
|
22
gas/as.c
22
gas/as.c
@ -1171,6 +1171,7 @@ int
|
||||
main (int argc, char ** argv)
|
||||
{
|
||||
char ** argv_orig = argv;
|
||||
struct stat sob;
|
||||
|
||||
int macro_strip_at;
|
||||
|
||||
@ -1218,6 +1219,27 @@ main (int argc, char ** argv)
|
||||
/* Call parse_args before any of the init/begin functions
|
||||
so that switches like --hash-size can be honored. */
|
||||
parse_args (&argc, &argv);
|
||||
|
||||
if (argc > 1 && stat (out_file_name, &sob) == 0)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 1; i < argc; ++i)
|
||||
{
|
||||
struct stat sib;
|
||||
|
||||
if (stat (argv[i], &sib) == 0)
|
||||
{
|
||||
if (sib.st_ino == sob.st_ino)
|
||||
{
|
||||
/* Don't let as_fatal remove the output file! */
|
||||
out_file_name = NULL;
|
||||
as_fatal (_("The input and output files must be distinct"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
symbol_begin ();
|
||||
frag_init ();
|
||||
subsegs_begin ();
|
||||
|
@ -73,6 +73,8 @@ if { ![istarget alpha*-*-*vms*]
|
||||
gas_test_error "equiv1.s" "" ".equiv for symbol already set to another one"
|
||||
gas_test_error "equiv2.s" "" ".equiv for symbol already set to an expression"
|
||||
|
||||
gas_test_error "none.s" "-o $srcdir/$subdir/none.s" "Output file must be distinct from input"
|
||||
|
||||
# .equ works differently on some targets.
|
||||
case $target_triplet in {
|
||||
{ hppa*-*-* } { }
|
||||
|
Loading…
Reference in New Issue
Block a user