[fpc-devel] Proposal: Supporting initial references for weakexternal
Jeppe Johansen
jepjoh2 at es.aau.dk
Wed Jan 12 06:29:43 CET 2011
While trying to find a nice solution for generating interrupt vector
tables on ARM, I found that the usually employed solution is to generate
weak references to symbols, that are initialized to a single handler.
This way an application can override the weak reference, by declaring a
new symbol with the same name. While it's possible to do that currently
by using some external assembler code, I think a simpler solution could
be made by using the weakexternal directive. The infrastructure is
already there, but it's used in a slightly different way.
An added bonus of using this new way is that IRQs will branch directly
to the handler, instead of first branching to some code that loads the
handler address, and then branching to the handler
I've modified the syntax for this directive slightly, so it can take the
form "weakexternal ['library'] [name 'name'] [set 'initialvalue'];"
instead of "weakexternal ['library'] [name 'name'];"
A short example:
procedure NoHandler;
begin
end;
procedure TestProc; weakexternal name 'TestProc' set 'NoHandler';
...
begin
TestProc; // This will call NoHandler
end.
If we modify the example:
procedure NoHandler;
begin
end;
procedure TestProcHandler; [public, alias: 'TestProc'];
begin
end;
procedure TestProc; weakexternal name 'TestProc' set 'NoHandler';
...
begin
TestProc; // This will call TestProcHandler
end.
All this is done either at compile time, or link time
What do you think about this proposal?
I've put a patch up here: http://j-software.dk/new/weakexternal.txt
And a small example of how lpc21x4.pp, for example, could be modified to
use the new functionality: http://j-software.dk/new/lpc21x4.txt
More information about the fpc-devel
mailing list