diff --git a/lld/ELF/Config.h b/lld/ELF/Config.h index 221ea21e0880..dc43534f20ad 100644 --- a/lld/ELF/Config.h +++ b/lld/ELF/Config.h @@ -152,7 +152,6 @@ struct Configuration { bool exportDynamic; bool fixCortexA53Errata843419; bool fixCortexA8; - bool forceBTI; bool formatBinary = false; bool gcSections; bool gdbIndex; @@ -176,7 +175,6 @@ struct Configuration { bool oFormatBinary; bool omagic; bool optRemarksWithHotness; - bool pacPlt; bool picThunk; bool pie; bool printGcSections; @@ -204,6 +202,7 @@ struct Configuration { bool writeAddends; bool zCombreloc; bool zCopyreloc; + bool zForceBti; bool zForceIbt; bool zGlobal; bool zHazardplt; @@ -216,6 +215,7 @@ struct Configuration { bool zNodlopen; bool zNow; bool zOrigin; + bool zPacPlt; bool zRelro; bool zRodynamic; bool zShstk; diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index 5206c1566a79..021895aa4e97 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -351,9 +351,9 @@ static void checkOptions() { error("-z force-ibt may not be used with -z retpolineplt"); if (config->emachine != EM_AARCH64) { - if (config->pacPlt) + if (config->zPacPlt) error("-z pac-plt only supported on AArch64"); - if (config->forceBTI) + if (config->zForceBti) error("-z force-bti only supported on AArch64"); } } @@ -907,7 +907,6 @@ static void readConfigs(opt::InputArgList &args) { !args.hasArg(OPT_relocatable); config->fixCortexA8 = args.hasArg(OPT_fix_cortex_a8) && !args.hasArg(OPT_relocatable); - config->forceBTI = hasZOption(args, "force-bti"); config->gcSections = args.hasFlag(OPT_gc_sections, OPT_no_gc_sections, false); config->gnuUnique = args.hasFlag(OPT_gnu_unique, OPT_no_gnu_unique, true); config->gdbIndex = args.hasFlag(OPT_gdb_index, OPT_no_gdb_index, false); @@ -947,7 +946,6 @@ static void readConfigs(opt::InputArgList &args) { config->optimize = args::getInteger(args, OPT_O, 1); config->orphanHandling = getOrphanHandling(args); config->outputFile = args.getLastArgValue(OPT_o); - config->pacPlt = hasZOption(args, "pac-plt"); config->pie = args.hasFlag(OPT_pie, OPT_no_pie, false); config->printIcfSections = args.hasFlag(OPT_print_icf_sections, OPT_no_print_icf_sections, false); @@ -1001,6 +999,7 @@ static void readConfigs(opt::InputArgList &args) { args.hasFlag(OPT_warn_symbol_ordering, OPT_no_warn_symbol_ordering, true); config->zCombreloc = getZFlag(args, "combreloc", "nocombreloc", true); config->zCopyreloc = getZFlag(args, "copyreloc", "nocopyreloc", true); + config->zForceBti = hasZOption(args, "force-bti"); config->zForceIbt = hasZOption(args, "force-ibt"); config->zGlobal = hasZOption(args, "global"); config->zGnustack = getZGnuStack(args); @@ -1015,6 +1014,7 @@ static void readConfigs(opt::InputArgList &args) { config->zNodlopen = hasZOption(args, "nodlopen"); config->zNow = getZFlag(args, "now", "lazy", false); config->zOrigin = hasZOption(args, "origin"); + config->zPacPlt = hasZOption(args, "pac-plt"); config->zRelro = getZFlag(args, "relro", "norelro", true); config->zRetpolineplt = hasZOption(args, "retpolineplt"); config->zRodynamic = hasZOption(args, "rodynamic"); @@ -1735,7 +1735,7 @@ template static uint32_t getAndFeatures() { uint32_t ret = -1; for (InputFile *f : objectFiles) { uint32_t features = cast>(f)->andFeatures; - if (config->forceBTI && !(features & GNU_PROPERTY_AARCH64_FEATURE_1_BTI)) { + if (config->zForceBti && !(features & GNU_PROPERTY_AARCH64_FEATURE_1_BTI)) { warn(toString(f) + ": -z force-bti: file does not have BTI property"); features |= GNU_PROPERTY_AARCH64_FEATURE_1_BTI; } else if (config->zForceIbt && @@ -1749,7 +1749,7 @@ template static uint32_t getAndFeatures() { // Force enable pointer authentication Plt, we don't warn in this case as // this does not require support in the object for correctness. - if (config->pacPlt) + if (config->zPacPlt) ret |= GNU_PROPERTY_AARCH64_FEATURE_1_PAC; // Force enable Shadow Stack. if (config->zShstk)