This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] ld/ldlang.c: fatal error on architecture mismatch
Hi Guys,
> Richard Sandiford wrote:
The default linker scripts already have "ENTRY(_start);" (or a target-
specific equivalent). The angle I was coming from -- and I think Dan
was coming from -- is that that's a good thing. You should get an error
if you use the default linker script and don't provide a definition of
its designated entry point. You should also get an error if your
custom linker script has "ENTRY (foo)" and you don't define foo.
It sounds like you're OK with that. (This is the bit that Ian says
will break existing builds though. The user has blindly copied the
ENTRY statement from the default linker script, hasn't defined the
symbol, and is currently ignoring what is only a warning.)
Right. So we could two things:
1. Leave things the way they are. People who feel that the current
linker behaviour is wrong could add --fatal-warnings to the linker
command line, although this might cause them more problems if there
are other warnings they currently do want to ignore.
2. Change the linker so that if the script specifies an ENTRY symbol
and that symbol is not defined then an error occurs. Presumably
we would also provide a new command line option to change this
error back to a warning for compatibility with the old behaviour.
(The user of the linker may not have the option of fixing the
linker script, so without this new option they would be stuck).
I can see the benefits of approach 2 but also the hassle it might cause
for already existing projects. Maybe the default behaviour could be
controlled by a configure time option, so that toolchain builders could
choose whether the linker will default to generating an error or a
warning and there could be a command line switch to override this default ?
In other words, if you use a custom linker script with no ENTRY,
you already (silently) get an entry point of 0. Does that make
the warning->error change OK with you?
Are you saying here that any linker script that does not define an ENTRY
point will result in an error ? Or just that if the script does not
define an ENTRY point then we do not issue a warning or error, so it
would be OK to issue an error if the script does define an ENTRY point,
but that symbol is not defined ?
Cheers
Nick