Optlink is on github
Walter Bright
newshound2 at digitalmars.com
Wed Mar 6 17:25:02 PST 2013
Some months ago, I did make the source to optlink available on github:
https://github.com/DigitalMars/optlink
Rainer Schuetze has improved it where it can be built with modern tools (the
older tools would not run on Win7). I know some of you are frustrated by optlink
problems. Well, now you can do something about it!
Note that the optlink source is quite a challenge to work on. It's very old
skool (80's style).
Here's an approach that I've used successfully to fix optlink seg faults:
1. Find out where in the source code it is. This is not so easy, even if using a
debugger. The trouble is the asm functions do not have standard stack frames, so
the debugger cannot do a stack trace. Even where there is a standard stack
frame, the modern Microsoft debuggers fail to recognize them. You gotta use an
older debugger under Windows XP.
So, what I do, is look at the asm code where the seg fault occurs, and then grep
through the asm source till I find it.
2. Convert the source file where the seg fault occurs to C. I do this one
function at a time, running the full set of tests at each step. Otherwise, it's
just impossible to figure out where you made a mistake in the conversion.
Sometimes, you gotta go even finer grained - using the inline assembler feature
of dmc to convert asm code line by line.
You gotta pay very, very close attention to which registers have parameters
passed through them, which registers are saved, and which registers have
parameters that are silently passed through a function to callees of that
function (!). This information is all pretty much utterly lacking in the
comments, and the comments are often dead wrong as they refer to much older
versions of the code.
3. Once it is in C, things get a lot easier. You can, for example, insert
printf's to figure out where things go wrong, and *then* fix it.
The full test suite for optlink has a lot of stuff I cannot publish on github.
However, what you can do is run the win32 tests for dmd. I, of course, will run
the full one when verifying pulls.
Happy hacking!
More information about the Digitalmars-d
mailing list