diff --git a/src/driver/slbt_driver_ctx.c b/src/driver/slbt_driver_ctx.c index d03d1ed..bfb2206 100644 --- a/src/driver/slbt_driver_ctx.c +++ b/src/driver/slbt_driver_ctx.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #define ARGV_DRIVER @@ -886,6 +887,11 @@ static void slbt_free_driver_ctx_impl(struct slbt_driver_ctx_alloc * ictx) if (ictx->ctx.libname) free(ictx->ctx.libname); + if (ictx->ctx.lconf.addr) + munmap( + ictx->ctx.lconf.addr, + ictx->ctx.lconf.size); + for (objlistp=ictx->ctx.objlistv; objlistp->name; objlistp++) { free(objlistp->objv); free(objlistp->addr); diff --git a/src/internal/slibtool_driver_impl.h b/src/internal/slibtool_driver_impl.h index f633adf..f563638 100644 --- a/src/internal/slibtool_driver_impl.h +++ b/src/internal/slibtool_driver_impl.h @@ -14,6 +14,7 @@ #include #include "slibtool_dprintf_impl.h" +#include "slibtool_mapfile_impl.h" #include "argv/argv.h" #define SLBT_OPTV_ELEMENTS 128 @@ -124,6 +125,7 @@ struct slbt_driver_ctx_impl { struct slbt_host_strs host; struct slbt_host_strs ahost; struct slbt_fd_ctx fdctx; + struct slbt_map_info lconf; struct slbt_obj_list * objlistv; const struct slbt_archive_ctx * arctx; diff --git a/src/internal/slibtool_lconf_impl.c b/src/internal/slibtool_lconf_impl.c index b1bde60..da0ffdd 100644 --- a/src/internal/slibtool_lconf_impl.c +++ b/src/internal/slibtool_lconf_impl.c @@ -807,7 +807,8 @@ int slbt_get_lconf_flags( /* all done */ - munmap(addr,st.st_size); + ctx->lconf.addr = addr; + ctx->lconf.size = st.st_size; return 0; }