------- Comment #11 from danglin at gcc dot gnu dot org 2007-11-01 03:05 ------- Mark,
This is major progress. All the priority tests pass and there are no regressions on hppa2.0w-hp-hpux11.11 and hppa-unknown-linux-gnu. However, I don't think the patch is quite right. For example, in the gcc.dg/initpri1.c test, two identical routines for "c1" are emitted: .EXPORT c1,ENTRY,PRIV_LEV=3 c1: .PROC .CALLINFO FRAME=64,CALLS,SAVE_RP .ENTRY stw %r2,-20(%r30) addil LR'i-$global$,%r27 ldo 64(%r30),%r30 ldw RR'i-$global$(%r1),%r19 ldo 1(%r19),%r28 comib,<> 0,%r19,L$0036 stw %r28,RR'i-$global$(%r1) ldw -84(%r30),%r2 bv %r0(%r2) ldo -64(%r30),%r30 L$0036: .CALL bl abort,%r2 nop nop .EXIT .PROCEND and .EXPORT _GLOBAL__I_500_0_c1,ENTRY,PRIV_LEV=3 _GLOBAL__I_500_0_c1: .PROC .CALLINFO FRAME=64,CALLS,SAVE_RP .ENTRY stw %r2,-20(%r30) addil LR'i-$global$,%r27 ldo 64(%r30),%r30 ldw RR'i-$global$(%r1),%r19 ldo 1(%r19),%r28 comib,<> 0,%r19,L$0040 stw %r28,RR'i-$global$(%r1) ldw -84(%r30),%r2 bv %r0(%r2) ldo -64(%r30),%r30 L$0040: .CALL bl abort,%r2 nop nop .EXIT .PROCEND In the test, only _GLOBAL__I_500_0_c1 is actually called. I believe _GLOBAL__I_500_0_c1 should call c1, or more optimally be an alias for c1. For example, this handles the case where there is static data private to c1, and c1 is called more than once. I'm not particularly concerned about using aliases although I think it is doable with GNU as. Dave -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33579