From e990e39ea0dbab989d1d6de47a2998afe9fac55b Mon Sep 17 00:00:00 2001 From: midipix Date: Sat, 16 Mar 2024 04:07:48 +0000 Subject: slbt_ar_output_mapfile(): properly set strong aliases of weak symbols. --- src/arbits/slbt_archive_mapfile.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/arbits/slbt_archive_mapfile.c b/src/arbits/slbt_archive_mapfile.c index 3e7d4df..18f94dc 100644 --- a/src/arbits/slbt_archive_mapfile.c +++ b/src/arbits/slbt_archive_mapfile.c @@ -33,11 +33,14 @@ static int slbt_ar_output_mapfile_impl( bool fsort; bool fcoff; bool fmach; + const char * dot; + const char * mark; const char * regex; const char ** symv; const char ** symstrv; regex_t regctx; regmatch_t pmatch[2] = {{0,0},{0,0}}; + char strbuf[4096]; fsort = !(dctx->cctx->fmtflags & SLBT_OUTPUT_ARCHIVE_NOSORT); @@ -84,6 +87,17 @@ static int slbt_ar_output_mapfile_impl( return SLBT_SYSTEM_ERROR(dctx,0); } } + /* coff weak symbols: expsym = .weak.alias.strong */ + } else if (fcoff && !strncmp(*symv,".weak.",6)) { + mark = &(*symv)[6]; + dot = strchr(mark,'.'); + + strncpy(strbuf,mark,dot-mark); + strbuf[dot-mark] = '\0'; + + if (!regex || !regexec(®ctx,strbuf,1,pmatch,0)) + if (slbt_dprintf(fdout," %s = %s\n",strbuf,++dot) < 0) + return SLBT_SYSTEM_ERROR(dctx,0); } } -- cgit v1.2.3