Commit Graph
40 Commits
Author SHA1 Message Date
Ryan C. Gordon cbffb2ff60 Initialize the PIB at startup.
Otherwise, it won't be available to DLL init code when run before the
main executable starts.

Fixes Watcom C's wlink.exe crashing because it gets a NULL command line.
2016-10-17 17:00:32 -04:00
Ryan C. Gordon 8047d55bcb Wire up loading of LX name tables. Fixes DosQueryProcAddr() with strings. 2016-10-17 15:43:08 -04:00
Ryan C. Gordon 2c2526abe1 Fixed some details of DLL loading. 2016-10-17 12:00:57 -04:00
Ryan C. Gordon e011e5cec1 Implemented more APIs; a little further into Watcom C's wcc386.exe now... 2016-10-17 10:56:50 -04:00
Ryan C. Gordon b2e32aeb37 Separate TIB from OS/2 stack. 2016-10-16 12:24:38 -04:00
Ryan C. Gordon ef4d529544 Pass actual selector (without shifting) so we deinit the segment correctly. 2016-10-16 12:23:24 -04:00
Ryan C. Gordon d8f62859c7 Library init passes the library module handle on the stack, as it should. 2016-10-16 12:21:32 -04:00
Ryan C. Gordon af2e92fa73 Pass the exe's module handle to the OS/2 process entry point. 2016-10-15 22:10:29 -04:00
Ryan C. Gordon 6454917556 Fixed environment/command line tables passed in at OS/2 process entry.
This worked before on EMX-based binaries, but this fix makes it also work
on binaries compiled with Watcom C.
2016-10-15 22:09:56 -04:00
Ryan C. Gordon ea0a7618b1 Turned some error output back on. 2016-10-14 03:40:24 -04:00
Ryan C. Gordon 68aa18c5a1 Consolidate and turn off all the debug logging for now. 2016-10-14 02:51:37 -04:00
Ryan C. Gordon 0349122bd7 Bunch More Work: more APIs, subprocesses, multithreading.
EMX's GCC compiler can now build hello.c when run from lx_loader!
2016-10-14 02:39:17 -04:00
Ryan C. Gordon ccad3a0dbb Hooked up the FS register and TIB support. 2016-10-08 16:34:59 -04:00
Ryan C. Gordon b04f032caa Fixed passing of command lines to LX program. 2016-10-06 16:37:46 -04:00
Ryan C. Gordon 95d666c01b Add native modules to the loaded modules list.
Otherwise we'd reload/reinit libdoscalls.so (etc) for every module!
2016-10-05 15:52:11 -04:00
Ryan C. Gordon fae99dc048 Turn off some debug output. I'm sure I'll regret this soon. :) 2016-10-05 15:45:23 -04:00
Ryan C. Gordon d9823705c0 Nop out the read of the FS register in EMX's syscall interface for now.
Eventually, we'll maybe need to set the FS register to be a proper TIB pointer,
but I'm mostly hoping that everything else was well-behaved enough to always
use DosGetInfoBlocks() instead. Yeah, right.
2016-10-02 18:21:51 -04:00
Ryan C. Gordon f681be1b1f Reworked the native module loading code. 2016-10-02 18:18:31 -04:00
Ryan C. Gordon ebe5f95a3e Put a real CMake project in here. 2016-09-30 18:08:36 -04:00
Ryan C. Gordon bee2afe62b Bunch More Work, mostly cleanup and organization.
Wanted to do this now before it gets out of hand.

Ideally, this can be used for a Winelib-like option eventually, too, where you
don't load OS/2 binaries at all but rather compile and link your OS/2-based
source code against this API reimplementation.
2016-09-30 15:58:48 -04:00
Ryan C. Gordon 6220544d06 Bunch More Work on getting an EMX-based "hello world" to run.
It looks like most of the remaining work for that is filling in dozens of
OS/2 APIs that EMX uses at startup just so we can get to our single
printf() call.  :)
2016-09-30 10:36:33 -04:00
Ryan C. Gordon 08eaf1f59f Fixed buffer overflow. 2016-09-27 10:07:47 -04:00
Ryan C. Gordon 3df4fc0544 Report caller address for missing functions. 2016-09-27 10:05:08 -04:00
Ryan C. Gordon 141ff8bdcd More fixup fixes. We're now into EMX crt0.s, calling missing doscalls APIs. 2016-09-26 15:31:54 -04:00
Ryan C. Gordon 4c09b9b6f5 Call library init/termination code. 2016-09-26 12:14:45 -04:00
Ryan C. Gordon d3e686276b Fixups fixes. 2016-09-26 12:13:18 -04:00
Ryan C. Gordon 41e66c9071 Some more work on getting DLLs working. 2016-09-25 14:21:31 -04:00
Ryan C. Gordon c3d9945942 Fixup source offsets are signed values (and sometimes negative!). 2016-09-25 14:20:20 -04:00
Ryan C. Gordon 17a64c9407 Don't load modules that are marked as non-loadable.
(Whatever that means in practice.)
2016-09-25 11:06:34 -04:00
Ryan C. Gordon b82eabcdac Try loading modules at random locations and see what happens. 2016-09-24 01:06:00 -04:00
Ryan C. Gordon ce8215ff40 Realign the stack before calling _exit().
Just in case I ever get this working on macOS.  :)
2016-09-24 01:05:33 -04:00
Ryan C. Gordon acb3c5c42e Get exported ordinals parsed, fixup correct pages. 2016-09-23 23:55:10 -04:00
Ryan C. Gordon 1a21e64a51 Fixed typo. 2016-09-23 23:54:36 -04:00
Ryan C. Gordon dbda4e03d0 Corrected entry ordinals in lx_dump, a few other things. 2016-09-23 00:27:50 -04:00
Ryan C. Gordon 817af8d715 Load all the object pages into memory before fixing them up.
Otherwise, we might fixup a page that isn't loaded yet!
2016-09-22 10:46:42 -04:00
Ryan C. Gordon 443bcf2178 Huge reworking to get shared libraries (and native replacements) working.
Not there yet, but the framework is pretty close to what I want.
2016-09-21 03:38:20 -04:00
Ryan C. Gordon 1d8ad0ce35 Extremely initial work on dealing with external modules. 2016-09-20 00:48:56 -04:00
Ryan C. Gordon dbacb96215 Don't map resource objects.
For one, they generally have a base address of 0x0, but also, we're probably
going to load/parse these into a hashtable somewhere in the loader
and use that for resource lookups instead of parsing LX binaries during
DosGetResource(), and that is more of a malloc() thing than an mmap() thing.
2016-09-19 23:02:21 -04:00
Ryan C. Gordon 5aff2d5b02 Fixed mmap execute flags.
(I guess on i386, PROT_READ implies PROT_EXEC anyhow.)
2016-09-19 22:02:12 -04:00
Ryan C. Gordon 161cde892e Initial add. Runs exactly one program.
Run make.sh on a Linux box to see it run tests/hello.exe!
2016-09-19 19:41:11 -04:00