RFC and PATCH - Defining variables in the linker script without defining them as symbols on the file

Nick Clifton nickc@redhat.com
Wed Jul 21 13:24:00 GMT 2004


Hi Guilherme,

> While testing if it's working, I found out that if I have a script with
> those lines inside SECTIONS{
> lixo = lixo_1;
> TEMPORARY( lixo_1 = 0x1);
> }
> 
> I have as result:
> make ok;readelf -a ok|grep lixo
> cc -Wl,-T -Wl,script -Wl,--deftmp -Wl,lixo1=0x19  -Wl,--deftmp
> -Wl,lixo2=0x29    ok.c   -o ok
>     49: 00000001     0 NOTYPE  GLOBAL DEFAULT  ABS lixo
>     59: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND lixo_1
> 
> As you can see, lixo_1 ends up as undefined.
> The parser accept the variable, but in the tree used to construct the
> sentence lixo = lixo_1; lixo_1 is not defined yet.	Why the parser accept
> a variable that wasn't defined yet?

Because it was never programmed not to.  There is no good reason to 
accept this, and in fact I agree that the parser ought to issue an error 
message.  It is just that I doubt if anyone has ever done this with a 
linker script before.


> It is OK to left a small amount of memory allocated, like this patch and
> the lang_memory_region_list does?

Not really.  If it is going to be very difficult to recover the memory 
then it can be permitted, but a decent effort ought to be made to avoid 
memory leaks.  Just because leaks are present in old code, it does not 
excuse leaks in new code.  In fact really the old code ought to be fixed 
as well.

Cheers
   Nick




More information about the Binutils mailing list