[comp.sys.hp] making Gnu Emacs on HP9000/340

harperb@eecae.ee.msu.edu (Brett Harper) (08/23/89)

I am currently trying to make Gnu Emacs 18.54 under HP-UX 6.5.  Things
seem to be going ok (with a few compilation warnings) until the linking
stage, when the following externals come up missing:
   flag_fpa
   fpa_loc
   float_loc

Does anyone have any idea what these are, are better yet where they are?
I am using m-hp9000s300.h and s-hpux.h as recommended in etc/MACHINES.
If I should be making a different version of emacs, I can do that too.

Can somebody please give me some help here?  I would also like to make
emacs to take advantage of X windows, anything special I need to know
to make this work? (besides defining HAVE_X_WINDOWS, and X11)

Thanks, Brett

Brett Harper
harperb@frith.egr.msu.edu
...!uunet!frith!harperb



----- News saved at 22 Aug 89 17:01:02 GMT
I am currently trying to make Gnu Emacs 18.54 under HP-UX 6.5.  Things
seem to be going ok (with a few compilation warnings) until the linking
stage, when the following externals come up missing:
   flag_fpa
   fpa_loc
   float_loc

Does anyone have any idea what these are, are better yet where they are?
I am using m-hp9000s300.h and s-hpux.h as recommended in etc/MACHINES.
If I should make a different version, then I can do that too.
Can somebody please give me some help here?  I would also like to make
emacs to take advantage of X windows, anything special I need to know
to make this work? (besides defining HAVE_X_WINDOWS, and X11)

Thanks, Brett

Brett Harper
harperb@frith.egr.msu.edu
...!uunet!frith!harperb



Newsgroups: comp.gnu.emacs,comp.sys.hp
Subject: making Gnu Emacs on hp9000/340
Expires: 
References: 
Sender: Brett Harper
Reply-To: harperb@frith.egr.msu.edu ()
Followup-To: 
Distribution: world
Organization: Michigan State University, ERDL
Keywords: emacs hp

I am currently trying to make Gnu Emacs 18.54 under HP-UX 6.5.  Things
seem to be going ok (with a few compilation warnings) until the linking
stage, when the following externals come up missing:
   flag_fpa
   fpa_loc
   float_loc

Does anyone have any idea what these are, are better yet where they are?
I am using m-hp9000s300.h and s-hpux.h as recommended in etc/MACHINES.
If I should make a different version, then I can do that too.
Can somebody please give me some help here?  I would also like to make
emacs to take advantage of X windows, anything special I need to know
to make this work? (besides defining HAVE_X_WINDOWS, and X11)

Thanks, Brett

Brett Harper
harperb@frith.egr.msu.edu
...!uunet!frith!harperb

glad@janus.dk (Michael Glad) (08/23/89)

I've successfully installed Emacs 18-54 on HP9000 models 340,360 and
370 with full X Windows support.

I started out with the configuration files m-hp9000s300.h and s-hpux.h
and got missing externals as reported.

I finally succeeded by patching the xmakefile generated in the
src directory.

The patches are:

37c37
< LIBES =   -lcurses $(LIBX) -lsetjmp -lc
---
> LIBES =   -lcurses $(LIBX) /usr/lib/end.o -lc

As far as I remember (I solved the problem in june...)
the setjmp facility has changed under 6.5 and libsetjmp.a are
kept for compatibility purposes.

The externals flag_fpa, fpa_loc and float_loc which ld complains about
when running an unpatched xmakefile are referenced in /usr/lib/end.o.

I know this is a hack but I got a perfect emacs 18-54 by using it
so it may be worth trying until someone makes a cleaner solution.

---
Michael Glad, programmer,
Computer Science Department,
Aarhus University, Denmark

email: glad@daimi.dk

stark@sbcs.sunysb.edu (Eugene Stark) (08/23/89)

In article <722@eecae.ee.msu.edu> harperb@eecae.ee.msu.edu (Brett Harper) writes:

>   I am currently trying to make Gnu Emacs 18.54 under HP-UX 6.5.  Things
>   seem to be going ok (with a few compilation warnings) until the linking
>   stage, when the following externals come up missing:
>      flag_fpa
>      fpa_loc
>      float_loc
>
>   Does anyone have any idea what these are, are better yet where they are?
>   I am using m-hp9000s300.h and s-hpux.h as recommended in etc/MACHINES.
>   If I should be making a different version of emacs, I can do that too.

I did this several months ago, and came across the same problem.
These things are variables and constants that are defined in a new C
run-time file that I think is called "end.o" or something, but I have
really forgotten now.  In any case, lacking the source to the HP C runtime
start up files, I looked at the object code with a debugger, and eventually
created the following file, which I called "hack.s":

	global float_loc
	set float_loc,0xFFFFB000

	global fpa_loc
	set fpa_loc,0xFFF08000

	bss
	global flag_fpa
flag_fpa:
	space 4*1

Linking this file in at the end of emacs makes things work.  I don't
really like to do stuff like this, but since HP chose not to supply source
for crt0.o and end.o, it was necessary to guess.

						Gene Stark
						SUNY at Stony Brook

zac@hpislx.HP.COM (Steve Elbinger) (08/23/89)

>> I am currently trying to make Gnu Emacs 18.54 under HP-UX 6.5.  Things
>> seem to be going ok (with a few compilation warnings) until the linking
>> stage, when the following externals come up missing:
>>    flag_fpa
>>    fpa_loc
>>    float_loc

These are located in /lib/crt0.o .  From the crt0 man page:


	  float_loc	A constant defining the location in memory of
			the 98635 floating point card.

	
The man page doesn't describe flag_fpa and fpa_loc.  They have a similar
function  for the  floating  point  accelerator  that runs on the Series
330 - 370.

Steve Elbinger

steve@quonset.cfht.hawaii.edu (Steven Smith) (08/24/89)

Your fix worked fine for me, but I kept this fix around, never tried 
it though:

Article 2403 of comp.sys.hp
Path: uwila!uhccux!humu!nosc!helios.ee.lbl.gov!pasteur!ucbvax!hplabs!hp-pcd!hpvc
fs1!ericr
From: ericr@hpvcfs1.HP.COM (Eric Ross)
Newsgroups: comp.sys.hp
Subject: Re: Problem compiling gnuEmacs
Date: 7 Jun 89 15:29:40 GMT
References: <9223@boulder.Colorado.EDU>
Organization: Hewlett Packard, Vancouver, WA
Lines: 68

Here is the context diff that I use for 6.5 to define those globals.
crt0.c has been a major thorn of incompatibility ever since Gnu Emacs
has been ported to the Series 300.  In any case this should fix
your problem.

Eric Ross
Hewlett Packard, Vancouver Division
ericr%hpvcper@hplabs.hp.com

*** crt0.c      Wed Apr 26 07:13:17 1989
--- crt0.c.orig Tue Aug 30 23:48:46 1988
***************
*** 446,455
  #else /* new hp assembler */

        asm("   text");
-       asm("   set     float_loc,0xFFFFB000");
-       asm("   set     fpa_loc,0xFFF08000");
-       asm("   global  float_loc");
-       asm("   global  fpa_loc");
        asm("   global  __start");
        asm("   global  _exit");
        asm("   global  _main");

--- 446,451 -----
  #else /* new hp assembler */

        asm("   text");
        asm("   global  __start");
        asm("   global  _exit");
        asm("   global  _main");
***************
*** 465,473
        asm("skip_float:");
        asm("   subx.w  %d1,%d1");
        asm("   mov.w   %d1,flag_68010");
-       asm("   add.l   %d0,%d0");
-       asm("   subx.w  %d1,%d1");
-       asm("   mov.w   %d1,flag_fpa");
        asm("   mov.l   4(%a7),%d0");
        asm("   beq.b   skip_1");
        asm("   mov.l   %d0,%a0");
--- 461,466 -----
        asm("skip_float:");
        asm("   subx.w  %d1,%d1");
        asm("   mov.w   %d1,flag_68010");
        asm("   mov.l   4(%a7),%d0");
        asm("   beq.b   skip_1");
        asm("   mov.l   %d0,%a0");
***************
*** 499,505
        asm("   comm    float_soft, 4");
        asm("   comm    flag_68881, 4");
        asm("   comm    flag_68010, 4");
-       asm("   comm    flag_fpa,   4");

  #endif /* new hp assembler */
  #endif /* hp9000s300 */

--- 492,497 -----
        asm("   comm    float_soft, 4");
        asm("   comm    flag_68881, 4");
        asm("   comm    flag_68010, 4");

  #endif /* new hp assembler */
  #endif /* hp9000s300 */


Steven S. Smith 		Canada-France-Hawaii Telescope Corp. 
				PO Box 1597 Kamuela
				Hawaii 96743
				(808) 885-7944
				INTERNET	steve@cfht.hawaii.edu
				FAX		(808) 885-7288
				TELEX		633147 CFHT

marc@hpfcdc.HP.COM (Marc[e] Sabatella) (08/24/89)

>These things are variables and constants that are defined in a new C
>run-time file that I think is called "end.o" or something, but I have
>really forgotten now.  In any case, lacking the source to the HP C runtime
>start up files, I looked at the object code with a debugger, and eventually
>created the following file, which I called "hack.s":

Actually, they are in crt0.o
I don't think supplying source would help all that much - the mapping from
assembly source to object file is pretty much one-to-one anyhow, so the
debugger disassembly would be just as good.

In any case, rather than always picking on HP for our "non-standard" crt0,
it would be much more profitable to pick on Stallman et al for their incredible
stupidity in trying to redefine crt0.  There is nothing OS-independent you can
do there that you couldn't have done in main(), and all the standards texts are
pretty clear on the point that the run time code belongs to the implementor.
Why does GNU persist in this inherently non-portable practice?

Another example would be Sun's crt0.o, which includes support for shared
libraries and dynamic loading/linking.  Does GNU supply a Sun-specific crt0,
or do they tell you to compile with archive libraries?  We will undoubtedly
run into the same thing when HP-UX supports shared libraries.  Of course, if
you use GCC and the GNU libraries, you aren't going to get shared libraries
anyhow, but then again, you won't need the implementor's crt0.

--------------
Marc Sabatella
HP Colorado Language Lab
marc%hpfcrt@hplabs.hp.com