shared libstdc++ is broken on hppa1.1-hp-hpux9.01

John David Anglin dave@hiauly1.hia.nrc.ca
Sat Jul 31 23:33:00 GMT 1999


> > 
> > >   In message <199907171614.MAA09812@hiauly1.hia.nrc.ca>you write:
> > >   > When gcc-2.95 is configured with --enable-shared, the number of unexpected
> > >   > failures in check-g++ increases from 2 to 69:

...

> However, immdiate binding allowed debugging the problem and it becomes
> clearer what the problem is.  The "longjmp" from __sjthrow occurs from the
> data section in the second quadrant.  It branches to normal text space in the
> first quadrant.  The branch is taken with a bv instruction which doesn't
> update IASQ.  The problem may be the indirect_jump insn defined in
> pa.md which can't handle interspace branches.  Could the problem be
> fixed by computing the space register for the jump from the upper two
> bits of the branch address and using a branch which supports interspace
> transfers (e.g., be)?

I made the following experimental change to pa.md:

--- pa.md.orig	Wed Jul 14 16:55:13 1999
+++ pa.md	Tue Jul 20 10:26:22 1999
@@ -4642,7 +4642,7 @@
 (define_insn "indirect_jump"
   [(set (pc) (match_operand:SI 0 "register_operand" "r"))]
   ""
-  "bv%* %%r0(%0)"
+  "be%* 0(%%sr4,%0)"
   [(set_attr "type" "branch")
    (set_attr "length" "4")])
 
The above assumes that the target of an indirect jump is always in the
first quadrant.  Possibly, this is not always the case.  However, the
above patch reduces the number of g++ failures with a shared libstdc++
to 8:

Running /xxx/gnu/gcc-2.95/gcc/testsuite/g++.old-deja/old-deja.exp ...
FAIL: g++.eh/spec2.C  Execution test
FAIL: g++.eh/spec3.C  Execution test
FAIL: g++.eh/spec4.C  Execution test
FAIL: g++.ext/attrib5.C (test for excess errors)
FAIL: g++.mike/eh25.C  Execution test
XPASS: g++.mike/eh33.C (test for excess errors)
XPASS: g++.mike/eh50.C (test for excess errors)
FAIL: g++.mike/eh51.C  Execution test
FAIL: g++.other/delete3.C (test for excess errors)
XPASS: g++.pt/instantiate6.C (test for excess errors)
FAIL: g++.pt/static6.C (test for excess errors)

		=== g++ Summary ===

# of expected passes            5159
# of unexpected failures        8
# of unexpected successes       3
# of expected failures          85
# of untested testcases         11
/xxx/gnu/gcc-2.95/objdir/gcc/testsuite/../xgcc version 2.95 19990717 (prerelease)

I didn't see any degradation in other tests as a result of the patch.

Dave
-- 
J. David Anglin                                  dave.anglin@nrc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6605)



More information about the Gcc-bugs mailing list