[gnu.g++.bug] g++ on pmax

grunwald@foobar.colorado.edu (Dirk Grunwald) (10/03/89)

The latest beta release compiles on the pmax with a little prodding
using gcc 1.36.

I've had it blow off in one file (libg++/src/RNG.cc, using -O), but
haven't traced the bug because there's no debugging information yet.

But, there's no way to link programs, because it looks like support
for collect is gone. Is this correct?

I haven't gotten collect.c to work on the pmax yet - although I've
gotten it to compile (minor renaming of some symbols), it still blows
off by returning a bogus pointer from ldtbread(). If anyone makes more
progress on this front, I'd appreciate it.

I was also thinking that we could eliminate collect installation hassles;
simply have ld++.c be #ifdef'd on NO_GNU_LD to include a call like:

#ifdef NO_GNU_LD
	< body of collect, sending output to out-foo.s >
	system("as -o out-foo out-foo.s");
	system("ld -o the-right-stuff out-foo.o");
#else
	..the read ld
#endif

Then, collect can be eliminated & the gcc interface will be simpler.
Does this sound reasonable? Another approach is to always install collect
but only use it (similar to above) if you've defined NO_GNU_LD.

Dirk Grunwald -- Univ. of Colorado at Boulder	(grunwald@foobar.colorado.edu)

grunwald@foobar.colorado.edu (Dirk Grunwald) (10/03/89)

I speak too soon. Here's some diff's that make collect.c work on the PMAX.

The problem wasn't an error the code, it was an error in the Ultrix
documentation about the arguments passwd to ldtbread.

I'm concerned that I'm not handling ``auxillary entries'' correctly, but
I can't find any corresponding field in the ECOFF headers.

-----------------------------------------------------------------------------
RCS file: RCS/collect.c,v
retrieving revision 1.1
diff -r1.1 collect.c
42a43,44
> int target_flags;	/* satisfy dependency */
> 
291a294,296
> #ifdef mips
> 	int symbols = SYMHEADER(ldptr).isymMax+SYMHEADER(ldptr).iextMax;
> #else
292a298
> #endif
297c303
< 	     symindex += 1 + symbol.n_numaux) {
---
> 	     ) {
298a305,307
> #ifdef mips
> 	  SYMR symbol;
> #else
299a309,310
> #endif
> 
301a313
> 	  int returnCode;
303c315
< 	  ldtbread(ldptr, symindex, &symbol);
---
> 	  returnCode = ldtbread(ldptr, symindex, &symbol);
304a317,319
> 	  if ( returnCode <= 0 ) {
> 	    break;
> 	  }
305a321,322
> #ifdef mips
> 	  symindex += 1;
306a324,327
> 	  if (symbol.st == stType) continue;
> #else
> 	  symindex += 1 + symbol.n_numaux
> 	    /* Skip all type declarations */
307a329
> #endif
633a656
>