After thinking about this proposal for some time, I've decided that I
like the original proposal better than the one that involved typechecked
qualified procedure identifiers
I think it might be a bad idea to apply high-level semantics to it,
because it's not crossplatform(COFF doesn't seem to support it), and
it's already something that only makes sense to use in a limit amount of
cases.
I did a little change to the patch though. I changed the syntax to be
"weakexternal ['library'] [name 'name'] [default 'initialvalue'];" since
I figured default made more sense than set, in the given context. I
still think using weakexternal makes sense(over adding a new "weak"
keyword), since the meaning and functionality still is the same
You can find the slightly modified patch here:
http://j-software.dk/weakexternal3.patch.txt
Den 12-01-2011 06:29, Jeppe Johansen skrev:
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
_______________________________________________
fpc-devel maillist - [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel
_______________________________________________
fpc-devel maillist - [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel