bzs@bu-cs.UUCP (09/30/87)
Someone was asking about building gnu emacs on an encore multimax, I just had to fix some things to get 18.49 to build so I figured I'd pass them along (FSF: I consider these tentative, they do the right thing but I don't believe in the right way. Either we need a new symbol for the new Umax systems, or these might work on the old one (haven't tried yet) or a different approach is needed, this should get someone thru the night anyhow.) The only change is three #if[n]def UMAX's added to unexec.c which I've appended below, the new Umax systems relocate data slightly differently than unexec was handling. This is for Multimax/320s (NS32332) running Umax 3.0 or above (which I believe they have to be, 2.0 only runs on the 120, right? Anyhow.) If you want to compile emacs optimized (-O) then you will also need to add: #define C_SWITCH_MACHINE -q nocompiler-registers (see 'man cc') to config.h. Remember that you use m-ns16.h and s-umax.h as described in ./etc/MACHINES . Cheers. -Barry Shein, Boston University *** unexec.c-dist Tue Sep 29 15:20:15 1987 --- unexec.c Tue Sep 29 17:50:03 1987 *************** *** 428,433 register int scns; #endif /* COFF */ unsigned int bss_end; pagemask = getpagesize () - 1; --- 428,436 ----- register int scns; #endif /* COFF */ unsigned int bss_end; + #ifdef UMAX + extern etext; + #endif pagemask = getpagesize () - 1; *************** *** 435,440 #ifdef NO_REMAP data_start = (int) start_of_data (); #else /* not NO_REMAP */ if (!data_start) data_start = (int) start_of_data (); #endif /* not NO_REMAP */ --- 438,444 ----- #ifdef NO_REMAP data_start = (int) start_of_data (); #else /* not NO_REMAP */ + #ifndef UMAX if (!data_start) #endif data_start = (int) start_of_data (); *************** *** 436,441 data_start = (int) start_of_data (); #else /* not NO_REMAP */ if (!data_start) data_start = (int) start_of_data (); #endif /* not NO_REMAP */ data_start = ADDR_CORRECT (data_start); --- 440,446 ----- #else /* not NO_REMAP */ #ifndef UMAX if (!data_start) + #endif data_start = (int) start_of_data (); #endif /* not NO_REMAP */ data_start = ADDR_CORRECT (data_start); *************** *** 526,531 #endif #ifndef NO_REMAP f_ohdr.text_start = (long) start_of_text (); f_ohdr.tsize = data_start - f_ohdr.text_start; f_ohdr.data_start = data_start; #endif /* NO_REMAP */ --- 531,539 ----- #endif #ifndef NO_REMAP f_ohdr.text_start = (long) start_of_text (); + #ifdef UMAX + f_ohdr.tsize = (long) &etext; + #else f_ohdr.tsize = data_start - f_ohdr.text_start; #endif f_ohdr.data_start = data_start; *************** *** 527,532 #ifndef NO_REMAP f_ohdr.text_start = (long) start_of_text (); f_ohdr.tsize = data_start - f_ohdr.text_start; f_ohdr.data_start = data_start; #endif /* NO_REMAP */ f_ohdr.dsize = bss_start - f_ohdr.data_start; --- 535,541 ----- f_ohdr.tsize = (long) &etext; #else f_ohdr.tsize = data_start - f_ohdr.text_start; + #endif f_ohdr.data_start = data_start; #endif /* NO_REMAP */ f_ohdr.dsize = bss_start - f_ohdr.data_start;