Commit Graph
50 Commits
Author SHA1 Message Date
Ryan C. Gordon dc00a7e998 Implemented more APIs. Watcom C's "wasm.exe" works now. 2016-10-17 02:35:39 -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 544033f2ae Some APIs that Watcom's wasm.exe needs to start up. 2016-10-15 22:08:00 -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 b4d0e571e7 Implemented some file i/o APIs and stubbed some threading primitives.
Now EMX's build of cpp.exe (GNU's C preprocessor) runs on Linux...granted,
it picks up the Linux /usr/include headers, but this is still a triumph!
2016-10-09 13:45:58 -04:00
Ryan C. Gordon 086e05dd0c DosFlatToSel() is called like any other OS/2 API.
I must have been reading docs for device drivers, or something...?

Now it returns the top word of the linear pointer, in hopes that this will
just get mushed back together later, knock on wood.
2016-10-09 13:44:10 -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 c00940caf0 This is me trying to figure out how to change the %fs register on Linux. :) 2016-10-07 20:25:03 -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 fa77133baf Added program to test command line and environment variable passing. 2016-10-06 16:37:13 -04:00
Ryan C. Gordon 262b428f51 Implemented DosGetDateTime() and DosOpen(). 2016-10-06 15:56:20 -04:00
Ryan C. Gordon 97ced670ce Added FIXME and STUBBED macros 2016-10-06 15:55:37 -04:00
Ryan C. Gordon a13361e080 Added -D_FILE_OFFSET_BITS=64 2016-10-06 15:55:09 -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 88ca89f160 Implemented some HFILE-related code better. tests/helloc.exe now works! 2016-10-05 15:44:29 -04:00
Ryan C. Gordon 71653286cd Implemented some more APIs.
This is enough to survive emx.dll intialization and a printf("hello world")
mainline, but note that we need to properly implement DosQueryHType()
before EMX's printf() will work, though (as it currently thinks stdout isn't
open), so we're not quite through a proper C Hello World test yet.
2016-10-02 18:26:27 -04:00
Ryan C. Gordon 8a6c7fef87 Initialize the DosExitList() items' function pointers. 2016-10-02 18:23:28 -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 45eebeaa3f lx_dump: modules are indexed from 1, not zero. 2016-09-19 23:08:25 -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 b9bc6d88d7 Added a simple README. 2016-09-19 19:56:04 -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