diff --git a/lld/wasm/Config.h b/lld/wasm/Config.h --- a/lld/wasm/Config.h +++ b/lld/wasm/Config.h @@ -27,6 +27,7 @@ bool compressRelocations; bool demangle; bool disableVerify; + bool experimentalPic; bool emitRelocs; bool exportAll; bool exportDynamic; diff --git a/lld/wasm/Driver.cpp b/lld/wasm/Driver.cpp --- a/lld/wasm/Driver.cpp +++ b/lld/wasm/Driver.cpp @@ -332,6 +332,7 @@ config->demangle = args.hasFlag(OPT_demangle, OPT_no_demangle, true); config->disableVerify = args.hasArg(OPT_disable_verify); config->emitRelocs = args.hasArg(OPT_emit_relocs); + config->experimentalPic = args.hasArg(OPT_experimental_pic); config->entry = getEntry(args); config->exportAll = args.hasArg(OPT_export_all); config->exportTable = args.hasArg(OPT_export_table); @@ -468,6 +469,23 @@ if (config->sharedMemory) error("-r and --shared-memory may not be used together"); } + + // To begin to prepare for Module Linking-style shared libraries, start + // warning about uses of `-shared` and related flags outside of Experimental + // mode, to give anyone using them a heads-up that they will be changing. + // + // Also, warn about flags which request explicit exports. + if (!config->experimentalPic) { + // -shared will change meaning when Module Linking is implemented. + if (config->shared) { + warn("creating shared libraries, with -shared, is not yet stable"); + } + + // -pie will change meaning when Module Linking is implemented. + if (config->pie) { + warn("creating PIEs, with -pie, is not yet stable"); + } + } } // Force Sym to be entered in the output. Used for -u or equivalent. diff --git a/lld/wasm/Options.td b/lld/wasm/Options.td --- a/lld/wasm/Options.td +++ b/lld/wasm/Options.td @@ -200,3 +200,7 @@ defm thinlto_cache_policy: Eq<"thinlto-cache-policy", "Pruning policy for the ThinLTO cache">; def thinlto_jobs: J<"thinlto-jobs=">, HelpText<"Number of ThinLTO jobs. Default to --threads=">; + +// Experimental PIC mode. +def experimental_pic: F<"experimental-pic">, + HelpText<"Enable Experimental PIC">;