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