[fpc-devel] Proposal: Supporting initial references for weakexternal
Jonas Maebe
jonas.maebe at elis.ugent.be
Mon Feb 14 15:31:23 CET 2011
Some addenda...
On 14 Feb 2011, at 15:06, Jonas Maebe wrote:
> A "weakexternal" declaration by itself is not a reference (weak/
> undefined or not), neither at the Pascal, C nor at the assembler/
> object file level.
This is not correct for all platforms and for all declarations. It's
true for function declarations in C, but not for data declarations in
C when targetting ELF platforms (there a "weak external" declaration
in a C file does result in a reference from the object file's symbol
table). It's also not correct for the assembler/object file level
(also results in a reference).
>> which - if it doesn't exist - points to some other external
>> reference. A weak procedure would be almost the same, you just add
>> the default reference as code explicitly
>
> It's the same as the difference between these two declarations in C:
>
> int SayHello(void) __attribute__((weak))
> {
> ...
> }
This actually doesn't work. It seems gcc only supports weak
definitions of data symbols. For functions, you have to say that it's
weak when (externally or not) declaring it, it doesn't work anymore as
part of the definition:
1) for data, this works:
int global __attribute__((weak)) = 999;
2) for code, only this works:
int SayHello() __attribute__((weak));
int SayHello() {
}
I don't see why we wouldn't support them both for code and data in FPC
though.
Jonas
More information about the fpc-devel
mailing list