@@ -1184,7 +1184,11 @@ lower_pointer_init(void)
11841184 /* 64-bit pointers */
11851185 } else {
11861186 }
1187- rilm = lower_null ();
1187+ if (!PTR_TARGETG (sptr )) {
1188+ rilm = lower_null ();
1189+ } else {
1190+ rilm = plower ("oS" , "BASE" , PTR_TARGETG (sptr ));
1191+ }
11881192 if (!XBIT (49 , 0x20000000 )) {
11891193 plower ("oii" , "PST" , lilm , rilm );
11901194 } else if (XBIT (49 , 0x100 )) {
@@ -4034,8 +4038,11 @@ lower_symbol(int sptr)
40344038 * emit this bit only if emitting ST_MODULE as ST_PROC
40354039 * this conversion happens in putstype()
40364040 */
4037- if (sptr != gbl .currsub )
4041+ if (sptr != gbl .currsub ) {
40384042 putbit ("is_interface" , IS_INTERFACEG (sptr ));
4043+ putval ("assocptr" , ASSOC_PTRG (sptr ));
4044+ putval ("ptrtarget" ,PTR_TARGETG (sptr ));
4045+ }
40394046
40404047 strip = 1 ;
40414048 }
@@ -4262,6 +4269,8 @@ lower_symbol(int sptr)
42624269#else
42634270 putbit ("tpalloc" , 0 );
42644271#endif
4272+ putval ("assocptr" , ASSOC_PTRG (sptr ));
4273+ putval ("ptrtarget" , PTR_TARGETG (sptr ));
42654274 strip = 1 ;
42664275 break ;
42674276
@@ -4309,6 +4318,8 @@ lower_symbol(int sptr)
43094318 putbit ("has_opts" , 0 );
43104319 putbit ("parref" , 0 );
43114320 putbit ("is_interface" , 0 );
4321+ putval ("assocptr" , 0 );
4322+ putval ("ptrtarget" , 0 );
43124323 strip = 1 ;
43134324 break ;
43144325
@@ -4508,6 +4519,8 @@ lower_symbol(int sptr)
45084519 putbit ("is_interface" , IS_INTERFACEG (sptr ));
45094520 if (SCG (sptr ) == SC_DUMMY )
45104521 putval ("descriptor" , IS_PROC_DUMMYG (sptr ) ? SDSCG (sptr ) : 0 );
4522+ putsym ("assocptr" , ASSOC_PTRG (sptr ));
4523+ putsym ("ptrtarget" , PTR_TARGETG (sptr ));
45114524 if (gbl .stbfil && DTY (DTYPEG (sptr ) + 2 )) {
45124525 if (fvalfirst ) {
45134526 putsym (NULL , FVALG (sptr ));
@@ -4741,6 +4754,18 @@ lower_symbols(void)
47414754 if (VISITG (sptr ) && STYPEG (sptr ) == ST_TYPEDEF && BASETYPEG (sptr )) {
47424755 lower_put_datatype_stb (BASETYPEG (sptr ));
47434756 }
4757+ if (VISITG (sptr ) && STYPEG (sptr ) == ST_PROC ) {
4758+ SPTR sym = ASSOC_PTRG (sptr );
4759+ if (sym > NOSYM && !VISITG (sym )) {
4760+ lower_symbol (sym );
4761+ VISITP (sym , 1 );
4762+ }
4763+ sym = PTR_TARGETG (sptr );
4764+ if (sym > NOSYM && !VISITG (sym )) {
4765+ lower_symbol (sym );
4766+ VISITP (sym , 1 );
4767+ }
4768+ }
47444769 if (VISITG (sptr ) && is_procedure_ptr (sptr )) {
47454770 /* make sure we lower type and subtype of procedure ptr */
47464771 int dtype = DTYPEG (sptr );
0 commit comments