diff --git a/src/backend/global.h b/src/backend/global.h index 323b6fbb58d4..ac36769973c6 100644 --- a/src/backend/global.h +++ b/src/backend/global.h @@ -351,7 +351,9 @@ SYMIDX symbol_add(Symbol *s); void freesymtab(Symbol **stab, SYMIDX n1, SYMIDX n2); Symbol * symbol_copy(Symbol *s); Symbol * symbol_searchlist(symlist_t sl, const char *vident); - +void slist_add(Symbol *s); +void slist_reset(); + #if TX86 // cg87.c diff --git a/src/backend/symbol.c b/src/backend/symbol.c index eed00f45f76e..1cac04064482 100644 --- a/src/backend/symbol.c +++ b/src/backend/symbol.c @@ -2354,5 +2354,43 @@ void symbol_gendebuginfo() #endif +/************************************ + * Add symbol to global slist, which are symbols we need to keep around + * for next obj file to be created. + */ + +static list_t slist; + +void slist_add(Symbol *s) +{ + list_prepend(&slist,s); +} + +/************************************* + * Resets Symbols so they are now "externs" to the next obj file being created. + */ + +void slist_reset() +{ + //printf("slist_reset()\n"); + for (list_t sl = slist; sl; sl = list_next(sl)) + { Symbol *s = list_symbol(sl); + +#if MACHOBJ + s->Soffset = 0; +#endif + s->Sxtrnnum = 0; + s->Stypidx = 0; + s->Sflags &= ~(STRoutdef | SFLweak); + if (s->Sclass == SCglobal || s->Sclass == SCcomdat || + s->Sfl == FLudata || s->Sclass == SCstatic) + { s->Sclass = SCextern; + s->Sfl = FLextern; + } + } +} + + + #endif /* !SPP */ diff --git a/src/msc.c b/src/msc.c index a7f48123e7cf..61176b4a0dbe 100644 --- a/src/msc.c +++ b/src/msc.c @@ -165,41 +165,6 @@ symbol *symboldata(targ_size_t offset,tym_t ty) return s; } -/************************************ - * Add symbol to slist. - */ - -static list_t slist; - -void slist_add(Symbol *s) -{ - list_prepend(&slist,s); -} - -/************************************* - */ - -void slist_reset() -{ - //printf("slist_reset()\n"); - for (list_t sl = slist; sl; sl = list_next(sl)) - { Symbol *s = list_symbol(sl); - -#if MACHOBJ - s->Soffset = 0; -#endif - s->Sxtrnnum = 0; - s->Stypidx = 0; - s->Sflags &= ~(STRoutdef | SFLweak); - if (s->Sclass == SCglobal || s->Sclass == SCcomdat || - s->Sfl == FLudata || s->Sclass == SCstatic) - { s->Sclass = SCextern; - s->Sfl = FLextern; - } - } -} - - /************************************** */