... is able to produce OS/2 executables (cd \devel\pdos\pdpclib then pdmake -f makefile.sos then pdptest abc def) that appear to work. However, the executable is still crashing ArcaOS ...
That somehow contradicts itself. If it was working, it would not crash AcraOS. BTW, The fact that any version of OS/2 can be crashed by invalid EXE headers is known for many years (Someone remembers this 'Smallest Hello World Program' contest?) and it is very unlikely that this is going change.
BTW, there are more 'fishy' things than Rich already pointed out. The DOS stub is complete bogus (Load image size, memory requirement, initial SS:SP, CS:IP). Better remove it completely instead of using invalid values.
In the LX header:
- 'Auto DS object' is not set.
- The 'Module flags' don't define an API type (PM, Windowcompat, NotWindowCompat)
- Assuming that the entry table is empty, the 'Entry table offset' should point to the same address as 'Fixup page table offset'
- The 'Resident names table offset' is invalid. Thus the kernel cannot determine the internal module name of the image
- The 'Import module entry count' is set to two even though the 'Import module table' only contains one entry (DOSCALLS)
- The 'Import procedure names table offset' points beyond the end of the file
Also strange:
- OS/2 executables normally use a base address of 0x10000. That's the lowest possible virtual address.
- 'Object 3' is usually the stack. It's pages are not present in the executable. Instead they are flagged as 'ZERO FILLED'.
- Given 'Object 3' ist the stack, 'Starting ESP' should point a few bytes before the end (i.e. virtual size - some_space) of this object.
Turbo Dump Version 4.1 Copyright (c) 1988, 1994 Borland International
Display of File F:\XX\PDPTEST.EXE
Old Executable Header
DOS File Size 71ADh ( 29101. )
Load Image Size FFFFFFC0h (4294967232. )
Relocation Table entry count 0000h ( 0. )
Relocation Table address 0040h ( 64. )
Size of header record (in paragraphs) 0004h ( 4. )
Minimum Memory Requirement (in paragraphs) 0000h ( 0. )
Maximum Memory Requirement (in paragraphs) 0000h ( 0. )
File load checksum 0000h ( 0. )
Overlay Number 0000h ( 0. )
Initial Stack Segment (SS:SP) 0000:0000
Program Entry Point (CS:IP) 0000:0000
Linear Executable (LX) File
Header base: 00000040
Byte Order Little endian
Word Order Little endian
Format level 00000000
CPU type 80386
Operating system OS/2
Module version 00000000
Module flags 00000010
Instance init : No
Internal fixups removed : Yes
External fixups removed : No
API : Unknown
Errors in module : No
Module type : EXE
Instance termination : No
Page count 0000000Eh
Starting EIP object number 00000001h
Starting EIP 00000000h
Starting ESP object number 00000004h
Starting ESP 00008000h
Page size 00001000h
Page offset shift 00000000h
Fixup size 00000960h
Page checksum 00000000h
Loader section size 00000000h
Loader section checksum 00000000h
Object table offset 00006795h
Object count 00000003h
Object page map table offset 000067DDh
Object iterate data map offset 00000040h
Resource table offset 00000040h
Resource count 00000000h
Resident names table offset 00000040h
Entry table offset 00000040h
Module directives offset 00000040h
Module directives count 00000000h
Fixup page table offset 0000684Dh
Fixup record table offset 00006889h
Import module table offset 000071A4h
Import module entry count 00000002h
Import procedure names table offset 000071ADh
Per-page checksum table offset 00000040h
Data pages offset 000000F0h
Preload page count 00000000h
Non-resident names table offset 00000000h
Non-resident names table length 00000000h
Non-resident names table checksum 00000000h
Auto DS object 00000000h
Debug info offset 00000040h
Debug info length 00000000h
Instance preload pages 00000000h
Instance demand pages 00000000h
Heap size 00000000h
Object Table 3 Entries (00000003) File Base:06795h
Object 1
Virtual size : 00005FCDh Relocation Base Address: 00400000h
Page map index: 00000001h Page map entries : 00000006h
Object flags : 00002005h ( READABLE EXECUTABLE BIG )
====
Page: 01 Offset: 000000F0 Size: 1000 Flags 0000 (PHYSICAL)
Page: 02 Offset: 000010F0 Size: 1000 Flags 0000 (PHYSICAL)
Page: 03 Offset: 000020F0 Size: 1000 Flags 0000 (PHYSICAL)
Page: 04 Offset: 000030F0 Size: 1000 Flags 0000 (PHYSICAL)
Page: 05 Offset: 000040F0 Size: 1000 Flags 0000 (PHYSICAL)
Page: 06 Offset: 000050F0 Size: 0FCD Flags 0000 (PHYSICAL)
Object 2
Virtual size : 000006D8h Relocation Base Address: 00406000h
Page map index: 00000007h Page map entries : 00000001h
Object flags : 00002003h ( READABLE WRITEABLE BIG )
====
Page: 07 Offset: 000060BD Size: 06D8 Flags 0000 (PHYSICAL)
Object 3
Virtual size : 000067B0h Relocation Base Address: 00407000h
Page map index: 00000008h Page map entries : 00000007h
Object flags : 00002003h ( READABLE WRITEABLE BIG )
====
Page: 08 Offset: 00006795 Size: 1000 Flags 0000 (PHYSICAL)
Page: 09 Offset: 00007795 Size: 1000 Flags 0000 (PHYSICAL)
Page: 0A Offset: 00008795 Size: 1000 Flags 0000 (PHYSICAL)
Page: 0B Offset: 00009795 Size: 1000 Flags 0000 (PHYSICAL)
Page: 0C Offset: 0000A795 Size: 1000 Flags 0000 (PHYSICAL)
Page: 0D Offset: 0000B795 Size: 1000 Flags 0000 (PHYSICAL)
Page: 0E Offset: 0000C795 Size: 07B0 Flags 0000 (PHYSICAL)
No Resident names table present
No Non-resident names table present
Entry Table 1 Entries (00000001) File Base:040h
Unknown entry bundle type!!!
ERROR: Unable to create procedure names table
Fixup Table 1 Entries (00000001) File Base:06889h
Object 1
01284 01:000A0 offset32
01295 01:000B3 offset32
0129C 01:000B5 offset32
012AF 01:00274 offset32
012B4 01:000B7 offset32
012C0 01:000CF offset32
012DB 01:000E3 offset32
012FB 01:000ED offset32
01316 01:00101 offset32
01338 01:0010B offset32
01358 01:0011F offset32
01365 01:00132 offset32
0138D 01:0013D offset32
013CD 01:0014D offset32
01404 01:0014D offset32
01437 01:0014F offset32
0143E 01:00154 offset32
01447 01:00160 offset32
01464 01:0014F offset32
0146B 01:00154 offset32
01474 01:0017F offset32
0148B 03:00000 offset32
014A3 03:00000 offset32
014CE 01:00194 offset32
014E8 01:0019E offset32
0150E 01:001C0 offset32
01538 01:001E0 offset32
0157E 01:001FF offset32
01587 01:00202 offset32
01591 01:00220 offset32
0159D 01:00254 offset32
015AC 02:00000 offset32
015B8 02:00004 offset32
015C4 02:00008 offset32
0164A 03:01DA4 offset32
01652 03:01DB4 offset32
01657 02:0000C offset32
0165F 03:01D94 offset32
0166E 03:01C24 offset32
0167D 03:01D94 offset32
0168A 02:0000C offset32
01694 03:01C24 offset32
0169D 03:01C24 offset32
016A6 02:0000C offset32
016BB 03:01D84 offset32
016C0 03:01D94 offset32
016CA 02:0000C offset32
016D7 03:01C24 offset32
016E4 03:01D94 offset32
016F2 03:01D94 offset32
01717 03:01C24 offset32
01730 03:01D94 offset32
01741 03:01DB4 offset32
01746 03:01C24 offset32
01759 03:01D94 offset32
01766 03:01C24 offset32
0177C 03:01D84 offset32
01783 03:01800 offset32
0179A 03:01C24 offset32
017A8 03:01C24 offset32
017B8 03:01D94 offset32
017DD 03:01C24 offset32
017EB 03:01C24 offset32
01819 03:01C24 offset32
0183B 02:0003C offset32
01881 03:01DC4 offset32
018C8 03:01DC4 offset32
0191E 03:01DC4 offset32
0193E 03:01800 offset32
0195B 03:01D84 offset32
01963 03:01D94 offset32
019A9 01:0096D offset32
019AF 03:01DB4 offset32
019C1 03:01DC4 offset32
019CB 03:01DC4 offset32
019E7 03:01C24 offset32
019F5 03:01C24 offset32
01A08 01:00971 offset32
01A0E 03:01DB4 offset32
01A22 01:00975 offset32
01A28 03:01DB4 offset32
01A3A 03:01DC4 offset32
01A48 01:00979 offset32
01A4E 03:01DB4 offset32
01A62 01:0097D offset32
01A68 03:01DB4 offset32
01A7A 03:01DC4 offset32
01A8B 01:00981 offset32
01A91 03:01DB4 offset32
01AA5 01:00985 offset32
01AAB 03:01DB4 offset32
01ABD 03:01DC4 offset32
01ACE 01:00988 offset32
01AD4 03:01DB4 offset32
01AE6 03:01DC4 offset32
01AF7 01:0098B offset32
01AFD 03:01DB4 offset32
01B0F 03:01DC4 offset32
01B20 01:0098E offset32
01B26 03:01DB4 offset32
01B38 03:01DC4 offset32
01B49 01:00991 offset32
01B4F 03:01DB4 offset32
01B61 03:01DC4 offset32
01B72 01:00994 offset32
01B78 03:01DB4 offset32
01B8A 03:01DC4 offset32
01B9B 01:00997 offset32
01BA1 03:01DB4 offset32
01BB3 03:01DC4 offset32
01BC4 01:00999 offset32
01BCA 03:01DB4 offset32
01BDC 03:01DC4 offset32
01BED 01:0099B offset32
01BF3 03:01DB4 offset32
01C05 03:01DC4 offset32
01C14 03:01D94 offset32
01C2F 03:01DC4 offset32
01CD2 03:01DA4 offset32
01CF5 03:01C24 offset32
01CFB 03:01DA4 offset32
01D00 DOSCALLS.273 self-relative32
01D1A 03:01D94 offset32
01DA1 DOSCALLS.257 self-relative32
01DE7 02:0000C offset32
01E00 03:01800 offset32
01E16 01:00D6A offset32
01E47 DOSCALLS.281 self-relative32
01E9E 02:00010 offset32
01EA9 03:01BF4 offset32
01EB4 02:00010 offset32
01EBC 03:01BF5 offset32
01EC1 03:01BF4 offset32
01EC6 02:00010 offset32
01ED0 02:00010 offset32
01F29 DOSCALLS.284 self-relative32
01F6C 02:00010 offset32
01F77 03:01BF4 offset32
01F8E 02:00010 offset32
01F99 03:01BF4 offset32
01FA3 02:00010 offset32
01FAE 03:01BF4 offset32
01FB8 02:00010 offset32
01FC3 03:01BF4 offset32
01FFA 02:00010 offset32
--
02004 03:01BF4 offset32
02400 DOSCALLS.282 self-relative32
0296E 01:01898 offset32
02B18 01:0189F offset32
02CD8 01:01CDC offset32
02CDC 01:0264A offset32
02CE0 01:02698 offset32
02CE4 01:02698 offset32
02CE8 01:02656 offset32
02CEC 01:02698 offset32
02CF0 01:02698 offset32
02CF4 01:02698 offset32
02CF8 01:02698 offset32
02CFC 01:02698 offset32
02D00 01:02698 offset32
02D04 01:02662 offset32
02D08 01:0268A offset32
02D0C 01:02698 offset32
02D10 01:01D20 offset32
02D14 01:02698 offset32
02D18 01:02698 offset32
02D1C 01:026A2 offset32
02D47 02:006C4 offset32
02DC5 01:01C5E offset32
02EEB 02:006CC offset32
--
0327E 01:01898 offset32
03770 DOSCALLS.259 self-relative32
037A7 DOSCALLS.271 self-relative32
03C11 DOSCALLS.256 self-relative32
03D9C 01:02D46 offset32
03DAB 01:02D5D offset32
03DB9 01:02D74 offset32
03EC8 03:01C14 offset32
03EE2 DOSCALLS.284 self-relative32
03EED DOSCALLS.257 self-relative32
03F18 02:0001C offset32
03F1E 02:00020 offset32
03F25 02:00014 offset32
03F2C 02:00018 offset32
03F39 01:02DC7 offset32
03F3E DOSCALLS.273 self-relative32
03F5D 03:01C14 offset32
03F7F DOSCALLS.284 self-relative32
03FAC DOSCALLS.284 self-relative32
03FF1 02:0000C offset32
--
04008 03:01C24 offset32
04012 03:01D94 offset32
04033 02:0000C offset32
0404A 03:01800 offset32
0405B 03:01D94 offset32
040BE 02:0002B offset32
040C5 02:00024 offset32
040CF 02:00024 offset32
040E7 01:00979 offset32
040EC 01:00D6A offset32
04234 02:006C4 offset32
0437F 02:006C4 offset32
043B1 02:006C4 offset32
0448A 01:03168 offset32
04542 01:03168 offset32
0456B 01:03168 offset32
04771 02:006C4 offset32
047BA 02:006C4 offset32
04863 02:006CC offset32
04C09 02:006C4 offset32
04C29 02:006C4 offset32
04D11 02:006C4 offset32
04D5B 02:006C4 offset32
04FD6 01:03F78 offset32
--
0511A 01:03F6B offset32
05151 01:03F78 offset32
0529C 01:03F6D offset32
05401 01:03F78 offset32
05478 01:03F6B offset32
05549 01:03F78 offset32
055C4 01:03F6F offset32
05605 01:03F80 offset32
05612 01:03F78 offset32
05642 01:03F78 offset32
0566D 01:03F88 offset32
0567A 01:03F78 offset32
056C9 01:03F78 offset32
056E5 01:03F80 offset32
056F1 01:03F78 offset32
05791 01:03F78 offset32
05BBC 02:00034 offset32
05BC2 02:00034 offset32
05C00 02:00034 offset32
05C35 02:00034 offset32
05C4D 02:00034 offset32
05CAF 01:04C75 offset32
05CB9 01:04C8C offset32
05D5D DOSCALLS.299 self-relative32
05E3E DOSCALLS.304 self-relative32
--
Object 2
00003 02:00038 offset32
0000D 02:00038 offset32
0002D 02:00038 offset32
00077 02:006C4 offset32
000C0 01:05060 offset32
0013C 01:05060 offset32
00158 01:05060 offset32
0019E 01:05058 offset32
001AE 01:05060 offset32
00202 01:05058 offset32
00254 02:006C4 offset32
002B4 02:006CC offset32
00343 02:006C4 offset32
004EA 03:01DE0 offset32
0050A 03:01DE0 offset32
00522 DOSCALLS.227 self-relative32
0055F DOSCALLS.283 self-relative32
005DA 02:00050 offset32
005E2 03:01F38 offset32
005F5 02:0003C offset32
0061C 02:0003C offset32
00630 03:01800 offset32
00657 DOSCALLS.382 self-relative32
0066F 02:0003C offset32
00685 03:01E68 offset32
006C0 03:01E6C offset32
006D0 02:00054 offset32
006DC 03:01F38 offset32
006F1 02:00050 offset32
006F6 02:00050 offset32
006FE 03:01F38 offset32
0070C 02:0003C offset32
00717 02:0003C offset32
00737 03:01E68 offset32
0074C 03:01F38 offset32
00760 03:01E68 offset32
00769 02:00058 offset32
00795 03:01E68 offset32
007C7 03:01E68 offset32
007FF 01:055CC offset32
00812 DOSCALLS.312 self-relative32
0081E 01:055CD offset32
00831 03:01E68 offset32
0085B DOSCALLS.382 self-relative32
008D3 03:01F78 offset32
00A15 03:03788 offset32
00B4C 03:04F98 offset32
00C57 02:0003C offset32
00C69 02:0003C offset32
00C77 03:01F38 offset32
00C7D 02:00050 offset32
00CB7 03:01800 offset32
00CC0 02:0003C offset32
00D3E 02:00044 offset32
00D4C 02:00040 offset32
00D56 02:00044 offset32
00D5F 02:00040 offset32
00D73 02:00044 offset32
00D79 01:05D26 offset32
00D91 01:05D2A offset32
00DB3 01:05D30 offset32
00DC8 02:0005C offset32
00DDC 02:00060 offset32
00DF1 02:00060 offset32
00E08 02:00060 offset32
00E0C 01:05DFC offset32
00E35 02:006C4 offset32
00E4D 02:006C4 offset32
00E65 02:006C4 offset32
00E7D 02:006C4 offset32
00E95 02:006C4 offset32
00EAD 02:006C4 offset32
00EC5 02:006C4 offset32
00EDD 02:006C4 offset32
00EF9 02:006C4 offset32
00F15 02:006C4 offset32
00F31 02:006C4 offset32
00F4C 02:006C8 offset32
00F60 02:006CC offset32
00FC9 DOSCALLS.234 self-relative32
01000 03:01C34 offset32
00004 03:01CA0 offset32
00008 03:01D0C offset32
00058 01:00274 offset32
00060 01:05DFC offset32
00064 01:05DFC offset32
00068 01:05DFC offset32
0006C 01:05DFC offset32
00070 01:05DFC offset32
00074 01:05DFC offset32
00078 01:05DFC offset32
006C4 02:00082 offset32
006C8 02:002A2 offset32
006CC 02:004C2 offset32
--
Object 3
--
ERROR: Attempt to free import module namew when not allocated
What also appears strange is the large number of 'offset32' fixups. Maybe I'm wrong, but IMHO these could/should be resolved by the linker so that they won't end up in the executable image at all.