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