Static member functions failing on hp10.20 (egcs 1.1.1)

Doug Semler doug@seaspace.com
Thu Mar 11 07:22:00 GMT 1999


The following causes the hp linker to core dump on hppa1.1-hpux10.20
It only occurs if the static function is defined in a different module.
It does not appear in pre 1.1.1 releases.  Is this fixed?????  If not,
I humbly submit that this is a show stopper :)


-=-=-=-=-=-=-=-=-
interface.h

class base
{
public:
	static void static_function();
};

class derived : public base
{
public:
	void caller(void (*func)(void));
	void i();
};

-=-=-=-=-=-=-=-
foo.cc

 #include "interface.h"

void derived::caller(void (*func)(void))
{
}

void derived::i()
{
	caller(static_function);
}

-=-=-=-=-=-=-=-

bar.cc

 #include "interface.h"

void base::static_function()
{
}

-=-=-=-=-=-=-=-

baz.cc

 #include "interface.h"

int main()
{
	derived g;
	g.i();
}


g++ -c foo.cc bar.cc
ar rv libfoo.a foo.o bar.o
g++ baz.cc -L. -lfoo
collect2: ld terminated with signal 10 , core dumped
/usr/ccs/bin/ld: Unsatisfied symbols:
   base::static_function(void)(data)

I did a g++ -S on the files using both 1.1.1 and 2.91.57,
the only difference which appears is that in foo.cc (the calling
module), is that when using 2.91.57, base::static_function is
declared an import symbol...


-=-=-=-=-=-=-=-
foo.s (generated using 1.1.1)

	.LEVEL 1.1
	.SPACE $PRIVATE$
	.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
	.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
	.SPACE $TEXT$
	.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
	.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
	.IMPORT $global$,DATA
	.IMPORT $$dyncall,MILLICODE
; gcc_compiled.:
	.SPACE $TEXT$
	.SUBSPA $CODE$

	.align 4
	.NSUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
	.EXPORT caller__7derivedPFv_v,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR
caller__7derivedPFv_v
	.PROC
	.CALLINFO FRAME=64,NO_CALLS,SAVE_SP,ENTRY_GR=3
	.ENTRY
	copy %r3,%r1
	copy %r30,%r3
	stwm %r1,64(0,%r30)
	copy %r26,%r19
	stw %r25,-40(0,%r3)
	bl,n L$0002,0
	bl,n L$0001,0
L$0002
L$0001
	ldo 64(%r3),%r30
	ldwm -64(0,%r30),%r3
	bv,n 0(%r2)
	.EXIT
	.PROCEND
	.SPACE $PRIVATE$
	.SUBSPA $DATA$

	.align 4
L$C0000
	.word P%static_function__4base
	.SPACE $TEXT$
	.SUBSPA $CODE$

	.align 4
	.NSUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
	.EXPORT i__7derived,ENTRY,PRIV_LEV=3,ARGW0=GR
i__7derived
	.PROC
	.CALLINFO FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=4
	.ENTRY
	stw %r2,-20(0,%r30)
	copy %r3,%r1
	copy %r30,%r3
	stwm %r1,64(0,%r30)
	stw %r4,8(0,%r3)
	copy %r26,%r4
	copy %r4,%r26
	ldil LR'L$C0000,%r20
	ldo RR'L$C0000(%r20),%r19
	ldw 0(0,%r19),%r25
	.CALL ARGW0=GR,ARGW1=GR
	bl caller__7derivedPFv_v,%r2
	nop
	bl,n L$0004,0
	bl,n L$0003,0
L$0004
L$0003
	ldw -20(0,%r3),%r2
	ldw 8(0,%r3),%r4
	ldo 64(%r3),%r30
	ldwm -64(0,%r30),%r3
	bv,n 0(%r2)
	.EXIT
	.PROCEND


-=-=-=-=-=-=-=-=-
ofoo.s (made with 2.91.57)


	.LEVEL 1.1
	.SPACE $PRIVATE$
	.SUBSPA $DATA$,QUAD=1,ALIGN=8,ACCESS=31
	.SUBSPA $BSS$,QUAD=1,ALIGN=8,ACCESS=31,ZERO,SORT=82
	.SPACE $TEXT$
	.SUBSPA $LIT$,QUAD=0,ALIGN=8,ACCESS=44
	.SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
	.IMPORT $global$,DATA
	.IMPORT $$dyncall,MILLICODE
; gcc_compiled.:
	.SPACE $TEXT$
	.SUBSPA $CODE$

	.align 4
	.NSUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
	.EXPORT caller__7derivedPFv_v,ENTRY,PRIV_LEV=3,ARGW0=GR,ARGW1=GR
caller__7derivedPFv_v
	.PROC
	.CALLINFO FRAME=64,NO_CALLS,SAVE_SP,ENTRY_GR=3
	.ENTRY
	copy %r3,%r1
	copy %r30,%r3
	stwm %r1,64(0,%r30)
	copy %r26,%r19
	stw %r25,-40(0,%r3)
	bl,n L$0002,0
	bl,n L$0001,0
L$0002
L$0001
	ldo 64(%r3),%r30
	ldwm -64(0,%r30),%r3
	bv,n 0(%r2)
	.EXIT
	.PROCEND
	.IMPORT static_function__4base,CODE
	.SPACE $PRIVATE$
	.SUBSPA $DATA$

	.align 4
L$C0000
	.word P%static_function__4base
	.SPACE $TEXT$
	.SUBSPA $CODE$

	.align 4
	.NSUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY
	.EXPORT i__7derived,ENTRY,PRIV_LEV=3,ARGW0=GR
i__7derived
	.PROC
	.CALLINFO FRAME=64,CALLS,SAVE_RP,SAVE_SP,ENTRY_GR=4
	.ENTRY
	stw %r2,-20(0,%r30)
	copy %r3,%r1
	copy %r30,%r3
	stwm %r1,64(0,%r30)
	stw %r4,8(0,%r3)
	copy %r26,%r4
	copy %r4,%r26
	ldil LR'L$C0000,%r20
	ldo RR'L$C0000(%r20),%r19
	ldw 0(0,%r19),%r25
	.CALL ARGW0=GR,ARGW1=GR
	bl caller__7derivedPFv_v,%r2
	nop
	bl,n L$0004,0
	bl,n L$0003,0
L$0004
L$0003
	ldw -20(0,%r3),%r2
	ldw 8(0,%r3),%r4
	ldo 64(%r3),%r30
	ldwm -64(0,%r30),%r3
	bv,n 0(%r2)
	.EXIT
	.PROCEND


-=-=-=-=-=-=-=-=-

differences

--- ofoo.s      Thu Mar 11 07:17:41 1999
+++ foo.s       Thu Mar 11 07:17:27 1999
@@ -32,7 +32,6 @@
        bv,n 0(%r2)
        .EXIT
        .PROCEND
-       .IMPORT static_function__4base,CODE
        .SPACE $PRIVATE$
        .SUBSPA $DATA$



More information about the Gcc-bugs mailing list