From mboxrd@z Thu Jan 1 00:00:00 1970 From: "John David Anglin" To: law@redhat.com Cc: mark@codesourcery.com, gcc@gcc.gnu.org Subject: Re: C++ Issue on GCC 3.0 branch Date: Tue, 24 Apr 2001 20:23:00 -0000 Message-id: <200104250323.XAA05283@hiauly1.hia.nrc.ca> References: <24879.988165434@slagheap.cygnus.com> X-SW-Source: 2001-04/msg01152.html > In message < 200104232221.SAA21738@hiauly1.hia.nrc.ca >you write: > > As can be seen, the eh context stuff has been pushed to the beginning of > > the function. We need insn 43 to be at the beginning before the eh > > context stuff. We try to put the save at the start in hppa_init_pic_save: > Interesting. I'm not sure if I'll have time to peek at this tonight/tomorrow. > So, if you've got time, you'd want to investigate precisely how the code to > call get_eh_context gets inserted before the code to save the PIC register. Yes! I think that I have the fix. See below. The call to get_eh_context gets inserted before the code to save the PIC register with the same technique that we use to save the PIC register: rtx get_eh_context () { if (current_function_ehc == 0) { rtx insn; current_function_ehc = gen_reg_rtx (Pmode); insn = gen_rtx_USE (GET_MODE (current_function_ehc), current_function_ehc); insn = emit_insn_before (insn, get_first_nonparm_insn ()); REG_NOTES (insn) = gen_rtx_EXPR_LIST (REG_EH_CONTEXT, current_function_ehc, REG_NOTES (insn)); } return current_function_ehc; } Here are my latest test results for libstdc++-v3: (chmod + ./mkcheck; \ srcdir=`cd ../../../libstdc++-v3; pwd`; builddir=`pwd`; \ test -d testsuite || (mkdir testsuite; chmod u+w testsuite); \ cd testsuite; ${builddir}/mkcheck 0 ${builddir} ${srcdir}) running mkcheck /xxx/gnu/gcc-3.0/objdir/hppa1.1-hp-hpux10.20/libstdc++-v3/mkcheck: testing the build directory making utility ./printnow.exe Detailed test results in ../20010424-mkcheck.txt +: pass, -b: build failure, -r: run failure, x: disabled ------------------------------------------------------------------------ static shared test ------------------------------------------------------------------------ + + 17_intro/header_ciso646.cc + + 17_intro/header_cstdio.cc + + 17_intro/header_cstdlib.cc + + 17_intro/header_cstring.cc + + 17_intro/header_ctime.cc + + 17_intro/header_cwchar.cc + + 17_intro/header_cwctype.cc + + 17_intro/header_fstream.cc + + 17_intro/header_iomanip.cc + + 17_intro/header_ios.cc + + 17_intro/header_iosfwd.cc + + 17_intro/header_iostream.cc + + 17_intro/header_istream.cc + + 17_intro/header_ostream.cc + + 17_intro/header_sstream.cc + + 17_intro/header_streambuf.cc + + 17_intro/headers.cc + + 17_intro/headers_c++.cc + + 17_intro/headers_c.cc + + 18_support/numeric_limits.cc + + 19_diagnostics/stdexceptions.cc + + 20_util/auto_ptr.cc + -r 21_strings/append.cc -b -b 21_strings/capacity.cc + + 21_strings/char_traits_requirements.cc + + 21_strings/char_traits_typedefs.cc + + 21_strings/compare.cc -r -r 21_strings/ctor_copy_dtor.cc + -r 21_strings/element_access.cc + + 21_strings/find.cc + -r 21_strings/insert.cc + + 21_strings/inserters_extractors.cc + + 21_strings/invariants.cc + + 21_strings/nonmember.cc + + 21_strings/operations.cc + + 21_strings/replace.cc + + 21_strings/rfind.cc + -r 21_strings/substr.cc + + 22_locale/codecvt_char_char.cc + + 22_locale/codecvt_unicode_char.cc + + 22_locale/codecvt_unicode_wchar_t.cc + + 22_locale/codecvt_wchar_t_char.cc + + 22_locale/ctor_copy_dtor.cc + + 22_locale/ctype.cc -r /xxx/gnu/gcc-3.0/objdir/hppa1.1-hp-hpux10.20/libstdc++-v3/mkcheck: printf: failed: invalid number -r /xxx/gnu/gcc-3.0/objdir/hppa1.1-hp-hpux10.20/libstdc++-v3/mkcheck: printf: failed: invalid number 22_locale/ctype_char_members.cc + + 22_locale/ctype_wchar_t_members.cc + + 22_locale/facet.cc + + 22_locale/global_templates.cc + + 22_locale/members.cc -b -b 22_locale/numpunct.cc + + 22_locale/numpunct_byname.cc + + 22_locale/numpunct_char_members.cc + + 22_locale/operators.cc + + 22_locale/static_members.cc + + 23_containers/bitset_ctor.cc + + 23_containers/bitset_shift.cc -b -b 23_containers/map_operators.cc + + 23_containers/multiset.cc -b -b 23_containers/set_operators.cc + + 23_containers/vector_capacity.cc + + 23_containers/vector_ctor.cc + -r 23_containers/vector_element_access.cc + + 23_containers/vector_modifiers.cc + + 24_iterators/istreambuf_iterator.cc + + 24_iterators/iterator.cc + + 25_algorithms/equal.cc + + 25_algorithms/lower_bound.cc + + 25_algorithms/min_max.cc + /xxx/gnu/gcc-3.0/objdir/hppa1.1-hp-hpux10.20/libstdc++-v3/mkcheck: printf: =: invalid number + /xxx/gnu/gcc-3.0/objdir/hppa1.1-hp-hpux10.20/libstdc++-v3/mkcheck: printf: =: invalid number 26_numerics/binary_closure.cc + + 26_numerics/buggy_complex.cc + + 26_numerics/c99_macros.cc + + 26_numerics/c_math.cc + + 26_numerics/complex_inserters_extractors.cc + + 26_numerics/complex_value.cc + + 26_numerics/valarray.cc -b -b 27_io/filebuf.cc + + 27_io/filebuf_members.cc + + 27_io/fpos.cc + + 27_io/ifstream_members.cc + + 27_io/ios_base_callbacks.cc -r /xxx/gnu/gcc-3.0/objdir/hppa1.1-hp-hpux10.20/libstdc++-v3/mkcheck: printf: 24689timemark: invalid number -r /xxx/gnu/gcc-3.0/objdir/hppa1.1-hp-hpux10.20/libstdc++-v3/mkcheck: printf: 24689timemark: invalid number 27_io/ios_base_members_static.cc + + 27_io/ios_base_storage.cc + + 27_io/ios_ctor.cc + + 27_io/ios_manip_basefield.cc + + 27_io/ios_manip_fmtflags.cc + -r 27_io/ios_members.cc + + 27_io/istream.cc + + 27_io/istream_extractor_arith.cc -r /xxx/gnu/gcc-3.0/objdir/hppa1.1-hp-hpux10.20/libstdc++-v3/mkcheck: printf: failed: invalid number -r /xxx/gnu/gcc-3.0/objdir/hppa1.1-hp-hpux10.20/libstdc++-v3/mkcheck: printf: failed: invalid number 27_io/istream_extractor_char.cc + + 27_io/istream_extractor_other.cc + + 27_io/istream_manip.cc -b -b 27_io/istream_seeks.cc + + 27_io/istream_sentry.cc diff: ./istream_unformatted-2.txt: No such file or directory + diff: ./istream_unformatted-2.txt: No such file or directory + 27_io/istream_unformatted.cc + + 27_io/istringstream_members.cc + /xxx/gnu/gcc-3.0/objdir/hppa1.1-hp-hpux10.20/libstdc++-v3/mkcheck: printf: cout: invalid number + /xxx/gnu/gcc-3.0/objdir/hppa1.1-hp-hpux10.20/libstdc++-v3/mkcheck: printf: cout: invalid number 27_io/narrow_stream_objects.cc + + 27_io/ofstream_members.cc + + 27_io/ostream.cc + + 27_io/ostream_inserter_arith.cc + + 27_io/ostream_inserter_char.cc + + 27_io/ostream_inserter_other.cc + + 27_io/ostream_manip.cc + + 27_io/ostream_seeks.cc + + 27_io/ostream_unformatted.cc + + 27_io/streambuf.cc + + 27_io/stringbuf.cc + + 27_io/stringstream.cc + + 27_io/wide_stream_objects.cc + + ext/headers.cc testrun == 9137 seconds Most of the shared test now run sucessfully! Yeah! Here is the configuration: 1) Patch below to add the pic save to the parameter insns. 2) Hack to make type constructors static: < http://gcc.gnu.org/ml/gcc/2001-04/msg01011.html >. Mark was going to provide a correct fix for this. 3) NM_FLAG fix: < http://gcc.gnu.org/ml/gcc-patches/2001-04/msg01058.html >. 4) Full length subspace names: < http://gcc.gnu.org/ml/gcc/2001-04/msg01067.html >. 5) GNU tools (as, nm, etc.) rather than HP. I will try to look further into the section name problem tomorrow (I've just driven 12 hours today). I did notice that HP `nm -p' prints the subspace names as `t' symbols and they still come out even with "-pg". I will post full testresults tomorrow. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) 2001-01-04 John David Anglin * pa.c (hppa_init_pic_save): Update last_parm_insn after emitting pic save insn. --- pa.c.orig Tue Apr 17 14:36:50 2001 +++ pa.c Tue Apr 24 00:03:33 2001 @@ -3359,7 +3359,7 @@ /* Emit the insn at the beginning of the function after the prologue. */ push_topmost_sequence (); - emit_insn_after (insn, last_parm_insn ? last_parm_insn : get_insns ()); + last_parm_insn = emit_insn_before (insn, get_first_nonparm_insn ()); pop_topmost_sequence (); }