dosbox breaks with MIPSpro, works with gcc
#4
RE: dosbox breaks with MIPSpro, works with gcc
I got the same 'mount' command behaviour with my MIPSPro built binaries and the fact that dosbox runs fine from a gcc build and not a MIPSPro build led me to believe that there is a gcc-ism not taken into account when compiling with non-gcc compilers.

The gcc-ism __attribute__((packed)) appears to be a prime candidate which i have encountered before and can be substituted with #pragma pack(1) in the MIPSPro preprocessor.

So i've cobbled up a patch file like this:
Code:
--- ./include/ipx.h.save    Sat Mar 16 22:31:25 2019
+++ ./include/ipx.h    Sat Mar 16 22:32:18 2019
@@ -66,7 +66,7 @@
 #define COMP_UNDELIVERABLE    0xfe
 #define COMP_HARDWAREERROR    0xff
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack(1)
 #endif
 
@@ -154,7 +154,7 @@
 void UnpackIP(PackedIP ipPack, IPaddress * ipAddr);
 void PackIP(IPaddress ipAddr, PackedIP *ipPack);
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack()
 #endif
 
--- ./include/paging.h.save    Sat Mar 16 22:28:01 2019
+++ ./include/paging.h    Sat Mar 16 22:28:50 2019
@@ -100,7 +100,7 @@
 void MEM_ResetPageHandler(Bitu phys_page, Bitu pages);
 
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__SGI)
 #pragma pack (1)
 #endif
 struct X86_PageEntryBlock{
@@ -130,7 +130,7 @@
     Bit32u        base:20;
 #endif
 } GCC_ATTRIBUTE(packed);
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__SGI)
 #pragma pack ()
 #endif
 
--- ./include/dos_inc.h.save    Sat Mar 16 22:21:57 2019
+++ ./include/dos_inc.h    Sat Mar 16 22:26:02 2019
@@ -30,7 +30,7 @@
 
 #include <stddef.h> //for offsetof
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack (1)
 #endif
 struct CommandTail{
@@ -37,7 +37,7 @@
   Bit8u count;                /* number of bytes returned */
   char buffer[127];             /* the buffer itself */
 } GCC_ATTRIBUTE(packed);
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack ()
 #endif
 
@@ -52,7 +52,7 @@
 };
 
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack (1)
 #endif
 union bootSector {
@@ -66,7 +66,7 @@
     } bootdata;
     Bit8u rawdata[512];
 } GCC_ATTRIBUTE(packed);
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack ()
 #endif
 
@@ -308,7 +308,7 @@
     Bit16u    FindEntryByHandle    (Bit8u handle);
             
 private:
-    #ifdef _MSC_VER
+    #if defined(_MSC_VER) || defined(__sgi)
     #pragma pack(1)
     #endif
     struct sPSP {
@@ -339,7 +339,7 @@
         Bit8u    fill_4[4];            /* unused */
         CommandTail cmdtail;        
     } GCC_ATTRIBUTE(packed);
-    #ifdef _MSC_VER
+    #if defined(_MSC_VER) || defined(__sgi)
     #pragma pack()
     #endif
     Bit16u    seg;
@@ -353,7 +353,7 @@
     void Clear(void);
     void LoadData(void);
     void SaveData(void);        /* Save it as an exec block */
-    #ifdef _MSC_VER
+    #if defined(_MSC_VER) || defined(__sgi)
     #pragma pack (1)
     #endif
     struct sOverlay {
@@ -368,7 +368,7 @@
         RealPt initsssp;
         RealPt initcsip;
     }GCC_ATTRIBUTE(packed);
-    #ifdef _MSC_VER
+    #if defined(_MSC_VER) || defined(__sgi)
     #pragma pack()
     #endif
     sExec exec;
@@ -392,7 +392,7 @@
     RealPt    GetPointer(void);
     Bit32u GetDeviceChain(void);
 
-    #ifdef _MSC_VER
+    #if defined(_MSC_VER) || defined(__sgi)
     #pragma pack(1)
     #endif
     struct sDIB {        
@@ -445,7 +445,7 @@
         Bit16u    startOfUMBChain;        //  0x66 segment of first UMB-MCB
         Bit16u    memAllocScanStart;        //  0x68 start paragraph for memory allocation
     } GCC_ATTRIBUTE(packed);
-    #ifdef _MSC_VER
+    #if defined(_MSC_VER) || defined(__sgi)
     #pragma pack ()
     #endif
     Bit16u    seg;
@@ -467,7 +467,7 @@
     Bit16u    GetDirID(void)                { return (Bit16u)sGet(sDTA,dirID); };
     Bit16u    GetDirIDCluster(void)        { return (Bit16u)sGet(sDTA,dirCluster); };
 private:
-    #ifdef _MSC_VER
+    #if defined(_MSC_VER) || defined(__sgi)
     #pragma pack(1)
     #endif
     struct sDTA {
@@ -484,7 +484,7 @@
         Bit32u size;
         char name[DOS_NAMELENGTH_ASCII];
     } GCC_ATTRIBUTE(packed);
-    #ifdef _MSC_VER
+    #if defined(_MSC_VER) || defined(__sgi)
     #pragma pack()
     #endif
 };
@@ -512,7 +512,7 @@
 private:
     bool extended;
     PhysPt real_pt;
-    #ifdef _MSC_VER
+    #if defined(_MSC_VER) || defined(__sgi)
     #pragma pack (1)
     #endif
     struct sFCB {
@@ -534,7 +534,7 @@
         Bit8u  cur_rec;            /* Current record in current block */
         Bit32u rndm;            /* Current relative record number */
     } GCC_ATTRIBUTE(packed);
-    #ifdef _MSC_VER
+    #if defined(_MSC_VER) || defined(__sgi)
     #pragma pack ()
     #endif
 };
@@ -551,7 +551,7 @@
     Bit16u GetSize(void) { return (Bit16u)sGet(sMCB,size);}
     Bit16u GetPSPSeg(void) { return (Bit16u)sGet(sMCB,psp_segment);}
 private:
-    #ifdef _MSC_VER
+    #if defined(_MSC_VER) || defined(__sgi)
     #pragma pack (1)
     #endif
     struct sMCB {
@@ -561,7 +561,7 @@
         Bit8u unused[3];
         Bit8u filename[8];
     } GCC_ATTRIBUTE(packed);
-    #ifdef _MSC_VER
+    #if defined(_MSC_VER) || defined(__sgi)
     #pragma pack ()
     #endif
 };
@@ -579,7 +579,7 @@
     
     
 private:
-    #ifdef _MSC_VER
+    #if defined(_MSC_VER) || defined(__sgi)
     #pragma pack (1)
     #endif
     struct sSDA {
@@ -599,7 +599,7 @@
         Bit8u extended_break_flag;     /* 0x17 extended break flag */
         Bit8u fill[2];            /* 0x18 flag: code page switching || flag: copy of previous byte in case of INT 24 Abort*/
     } GCC_ATTRIBUTE(packed);
-    #ifdef _MSC_VER
+    #if defined(_MSC_VER) || defined(__sgi)
     #pragma pack()
     #endif
 };
--- ./include/cpu.h.save    Sat Mar 16 22:29:22 2019
+++ ./include/cpu.h    Sat Mar 16 22:30:57 2019
@@ -223,7 +223,7 @@
 #define DESC_CODE_R_C_A                0x1e
 #define DESC_CODE_R_C_NA            0x1f
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack (1)
 #endif
 
@@ -320,7 +320,7 @@
     Bit32u ldt;                  /* The local descriptor table */
 } GCC_ATTRIBUTE(packed);
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack()
 #endif
 class Descriptor
--- ./src/dos/wnaspi32.h.save    Sat Mar 16 22:51:15 2019
+++ ./src/dos/wnaspi32.h    Sat Mar 16 22:53:02 2019
@@ -25,7 +25,7 @@
 #pragma option -a1
 #endif //__BORLANDC__
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack(1)
 #endif //__MSC_VER
 
@@ -343,7 +343,7 @@
 #pragma option -a.
 #endif //__BORLANDC__
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack()
 #endif //_MSC_VER
 
--- ./src/dos/dos_mscdex.cpp.save    Sat Mar 16 22:58:13 2019
+++ ./src/dos/dos_mscdex.cpp    Sat Mar 16 22:59:26 2019
@@ -70,7 +70,7 @@
     void    SetStrategy            (Bit16u ofs)    { sSave(sDeviceHeader,strategy,ofs);            };
 
 public:
-    #ifdef _MSC_VER
+    #if defined(_MSC_VER) || defined(__sgi)
     #pragma pack(1)
     #endif
     struct sDeviceHeader{
@@ -83,7 +83,7 @@
         Bit8u    driveLetter;
         Bit8u    numSubUnits;
     } GCC_ATTRIBUTE(packed) TDeviceHeader;
-    #ifdef _MSC_VER
+    #if defined(_MSC_VER) || defined(__sgi)
     #pragma pack()
     #endif
 };
--- ./src/dos/drives.h.save    Sat Mar 16 22:53:20 2019
+++ ./src/dos/drives.h    Sat Mar 16 22:55:03 2019
@@ -87,7 +87,7 @@
     } allocation;
 };
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack (1)
 #endif
 struct bootstrap {
@@ -140,7 +140,7 @@
     Bit8u  magic2; /* 0xaa */
 } GCC_ATTRIBUTE(packed);
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack ()
 #endif
 
@@ -232,7 +232,7 @@
     char driveLetter;
 };
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack (1)
 #endif
 struct isoPVD {
@@ -285,7 +285,7 @@
     Bit8u ident[222];
 } GCC_ATTRIBUTE(packed);
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack ()
 #endif
 
--- ./src/dos/dos_execute.cpp.save    Sat Mar 16 22:55:27 2019
+++ ./src/dos/dos_execute.cpp    Sat Mar 16 22:56:38 2019
@@ -30,7 +30,7 @@
 
 const char * RunningProgram="DOSBOX";
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack(1)
 #endif
 struct EXE_Header {
@@ -49,7 +49,7 @@
     Bit16u reloctable;
     Bit16u overlay;
 } GCC_ATTRIBUTE(packed);
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack()
 #endif
 
--- ./src/dos/dos_tables.cpp.save    Sat Mar 16 22:59:38 2019
+++ ./src/dos/dos_tables.cpp    Sat Mar 16 23:00:27 2019
@@ -23,7 +23,7 @@
 #include "dos_inc.h"
 #include "callback.h"
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack(1)
 #endif
 struct DOS_TableCase {    
@@ -31,7 +31,7 @@
     Bit8u chars[256];
 }
 GCC_ATTRIBUTE (packed);
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack ()
 #endif
 
--- ./src/dos/dos_files.cpp.save    Sat Mar 16 22:56:59 2019
+++ ./src/dos/dos_files.cpp    Sat Mar 16 22:57:53 2019
@@ -785,7 +785,7 @@
     Bitu index=0;
     Bit8u fill=' ';
 /* First get the old data from the fcb */
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack (1)
 #endif
     union {
@@ -796,7 +796,7 @@
         } GCC_ATTRIBUTE (packed) part;
         char full[DOS_FCBNAME];
     } fcb_name;
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack()
 #endif
     /* Get the old information from the previous fcb */
--- ./src/hardware/adlib.cpp.save    Sat Mar 16 23:01:24 2019
+++ ./src/hardware/adlib.cpp    Sat Mar 16 23:02:09 2019
@@ -99,7 +99,7 @@
 
 /* Raw DRO capture stuff */
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack (1)
 #endif
 
@@ -120,7 +120,7 @@
     Bit8u delayShift8;            /* 0x18, Bit8u (delay + 1)*256 */            
     Bit8u conversionTableSize;    /* 0x191, Bit8u Raw Conversion Table size */
 } GCC_ATTRIBUTE(packed);
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack()
 #endif
 /*
--- ./src/ints/xms.cpp.save    Sat Mar 16 23:06:22 2019
+++ ./src/ints/xms.cpp    Sat Mar 16 23:07:00 2019
@@ -81,7 +81,7 @@
     bool    free;
 };
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack (1)
 #endif
 struct XMS_MemMove{
@@ -98,7 +98,7 @@
     } dest;
 
 } GCC_ATTRIBUTE(packed);
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack ()
 #endif
 
--- ./src/ints/int10_vesa.cpp.save    Sat Mar 16 23:04:49 2019
+++ ./src/ints/int10_vesa.cpp    Sat Mar 16 23:05:37 2019
@@ -41,7 +41,7 @@
 static char string_productname[]="DOSBox - The DOS Emulator";
 static char string_productrev[]="DOSBox " VERSION;
 
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack (1)
 #endif
 struct MODE_INFO{
@@ -79,7 +79,7 @@
     Bit16u OffScreenMemSize;
     Bit8u Reserved[206];
 } GCC_ATTRIBUTE(packed);
-#ifdef _MSC_VER
+#if defined(_MSC_VER) || defined(__sgi)
 #pragma pack()
 #endif
 

This seems to work, although i have used it in combination with -signed in the CFLAGS/CXXFLAGS so i'm not completely sure which one did it. More testing needed tomorrow. It could be kind of ironic though that a preprocessor command meant for the Windows environment can help out our IRIX build :-)

But with this effort i have a working mount command in dosbox and successfully installed Wolfenstein3D. My challengeS didn't like the sound calls to ALmedia libraries, so i had to disable that in dosbox.conf. The game runs at a glacial speed from my R4400@175MHz over the network, so i'm sure it can do better on other machines.

The SDL i use is 1.2.15 with a modified configure script to enable the SDL_CDROM_DUMMY driver and disable SDL_CDROM_DISABLE which causes the dosbox exit with the CDROM init failure message. I'll post that later.
(This post was last modified: 03-17-2019, 01:19 AM by dexter1.)
dexter1
Administrator

Trade Count: (1)
Posts: 297
Threads: 17
Joined: May 2018
Location: The Netherlands
Find Reply
03-17-2019, 01:18 AM


Messages In This Thread

Forum Jump:


Users browsing this thread: 1 Guest(s)