Lines Matching defs:arg
89 return {ctx, ctx.arg.noinhibitExec ? DiagLevel::Warn : DiagLevel::Err};
140 ctx.arg.progName = args[0];
235 if (!ctx.arg.fatLTOObjects)
255 if (ctx.arg.formatBinary) {
310 if (ctx.arg.isStatic) {
363 if (ctx.arg.emachine == EM_MIPS && ctx.arg.gnuHash)
367 if (ctx.arg.emachine == EM_ARM) {
368 if (!ctx.arg.cmseImplib) {
369 if (!ctx.arg.cmseInputLib.empty())
371 if (!ctx.arg.cmseOutputLib.empty())
375 if (ctx.arg.cmseImplib)
377 if (!ctx.arg.cmseInputLib.empty())
379 if (!ctx.arg.cmseOutputLib.empty())
383 if (ctx.arg.fixCortexA53Errata843419 && ctx.arg.emachine != EM_AARCH64)
387 if (ctx.arg.fixCortexA8 && ctx.arg.emachine != EM_ARM)
390 if (ctx.arg.armBe8 && ctx.arg.emachine != EM_ARM)
393 if (ctx.arg.fixCortexA8 && !ctx.arg.isLE)
396 if (ctx.arg.tocOptimize && ctx.arg.emachine != EM_PPC64)
399 if (ctx.arg.pcRelOptimize && ctx.arg.emachine != EM_PPC64)
402 if (ctx.arg.relaxGP && ctx.arg.emachine != EM_RISCV)
405 if (ctx.arg.pie && ctx.arg.shared)
408 if (!ctx.arg.shared && !ctx.arg.filterList.empty())
411 if (!ctx.arg.shared && !ctx.arg.auxiliaryList.empty())
414 if (ctx.arg.strip == StripPolicy::All && ctx.arg.emitRelocs)
417 if (ctx.arg.zText && ctx.arg.zIfuncNoplt)
420 if (ctx.arg.relocatable) {
421 if (ctx.arg.shared)
423 if (ctx.arg.gdbIndex)
425 if (ctx.arg.icf != ICFLevel::None)
427 if (ctx.arg.pie)
429 if (ctx.arg.exportDynamic)
431 if (ctx.arg.debugNames)
433 if (!ctx.arg.zSectionHeader)
437 if (ctx.arg.executeOnly) {
438 if (ctx.arg.emachine != EM_AARCH64)
441 if (ctx.arg.singleRoRx && !ctx.script->hasSectionsCommand)
446 if (ctx.arg.zRetpolineplt && ctx.arg.zForceIbt)
449 if (ctx.arg.emachine != EM_AARCH64) {
450 if (ctx.arg.zPacPlt)
452 if (ctx.arg.zForceBti)
454 if (ctx.arg.zBtiReport != "none")
456 if (ctx.arg.zPauthReport != "none")
458 if (ctx.arg.zGcsReport != "none")
460 if (ctx.arg.zGcs != GcsPolicy::Implicit)
464 if (ctx.arg.emachine != EM_386 && ctx.arg.emachine != EM_X86_64 &&
465 ctx.arg.zCetReport != "none")
470 if (auto *arg = args.getLastArg(OPT_reproduce))
471 return arg->getValue();
477 for (auto *arg : args.filtered(OPT_z))
478 if (key == arg->getValue()) {
480 arg->claim();
487 for (auto *arg : args.filtered(OPT_z)) {
488 StringRef v = arg->getValue();
495 arg->claim();
502 for (auto *arg : args.filtered(OPT_z)) {
503 StringRef v = arg->getValue();
512 arg->claim();
519 for (auto *arg : args.filtered(OPT_z)) {
520 StringRef v = arg->getValue();
529 arg->claim();
536 for (auto *arg : args.filtered(OPT_z)) {
537 std::pair<StringRef, StringRef> kv = StringRef(arg->getValue()).split('=');
539 arg->claim();
558 for (auto *arg : args.filtered(OPT_z)) {
559 std::pair<StringRef, StringRef> kv = StringRef(arg->getValue()).split('=');
561 arg->claim();
582 for (auto *arg : args.filtered(OPT_z))
583 if (!arg->isClaimed())
584 Warn(ctx) << "unknown -z value: " << StringRef(arg->getValue());
655 if (ctx.arg.timeTraceEnabled)
656 timeTraceProfilerInitialize(ctx.arg.timeTraceGranularity, ctx.arg.progName);
675 if (ctx.arg.timeTraceEnabled) {
678 ctx.arg.outputFile));
697 bool diagRegular = !ctx.arg.shared, diagShlib = !ctx.arg.shared;
699 for (const opt::Arg *arg : args) {
700 switch (arg->getOption().getID()) {
702 StringRef s = arg->getValue();
724 if (StringRef(arg->getValue()) == "defs")
726 else if (StringRef(arg->getValue()) == "undefs")
730 arg->claim();
741 ctx.arg.unresolvedSymbols =
743 ctx.arg.unresolvedSymbolsInShlib =
769 auto *arg =
771 if (!arg)
773 if (arg->getOption().getID() == OPT_discard_all)
775 if (arg->getOption().getID() == OPT_discard_locals)
781 auto *arg = args.getLastArg(OPT_dynamic_linker, OPT_no_dynamic_linker);
782 if (!arg)
784 if (arg->getOption().getID() == OPT_no_dynamic_linker) {
786 ctx.arg.noDynamicLinker = true;
789 return arg->getValue();
795 if (ctx.arg.androidMemtagStack)
798 else if (ctx.arg.androidMemtagHeap)
817 auto *arg = args.getLastArg(OPT_icf_none, OPT_icf_safe, OPT_icf_all);
818 if (!arg || arg->getOption().getID() == OPT_icf_none)
820 if (arg->getOption().getID() == OPT_icf_safe)
828 if (!ctx.arg.zSectionHeader)
831 auto *arg = args.getLastArg(OPT_strip_all, OPT_strip_debug);
832 if (!arg)
834 if (arg->getOption().getID() == OPT_strip_all)
841 const opt::Arg &arg) {
845 ErrAlways(ctx) << "invalid argument: " << arg.getAsString(args);
852 for (auto *arg : args.filtered(OPT_section_start)) {
855 std::tie(name, addr) = StringRef(arg->getValue()).split('=');
856 ret[name] = parseSectionAddress(ctx, addr, args, *arg);
859 if (auto *arg = args.getLastArg(OPT_Ttext))
860 ret[".text"] = parseSectionAddress(ctx, arg->getValue(), args, *arg);
861 if (auto *arg = args.getLastArg(OPT_Tdata))
862 ret[".data"] = parseSectionAddress(ctx, arg->getValue(), args, *arg);
863 if (auto *arg = args.getLastArg(OPT_Tbss))
864 ret[".bss"] = parseSectionAddress(ctx, arg->getValue(), args, *arg);
896 auto *arg = args.getLastArg(OPT_build_id);
897 if (!arg)
900 StringRef s = arg->getValue();
942 if (ctx.arg.warnSymbolOrdering)
965 ctx.arg.callGraphProfile[std::make_pair(from, to)] += count;
1003 symbolIndices.push_back(rel.getSymbol(ctx.arg.isMips64EL));
1010 symbolIndices.push_back(rel.getSymbol(ctx.arg.isMips64EL));
1044 ctx.arg.callGraphProfile[{from, to}] += cgpe.cgp_weight;
1088 for (auto *arg : args.filtered(OPT_lto_known_safe_vtables)) {
1089 StringRef knownSafeName = arg->getValue();
1140 static StringRef getAliasSpelling(opt::Arg *arg) {
1141 if (const opt::Arg *alias = arg->getAlias())
1143 return arg->getSpelling();
1148 auto *arg = args.getLastArg(id);
1149 if (!arg)
1152 StringRef s = arg->getValue();
1155 ErrAlways(ctx) << getAliasSpelling(arg)
1173 if (!names.insert(s) && ctx.arg.warnSymbolOrdering)
1184 ctx.arg.emachine);
1186 for (auto *arg : args.filtered(OPT_z)) {
1187 StringRef s(arg->getValue());
1194 arg->claim();
1203 const char *argv[] = {ctx.arg.progName.data(), opt.data()};
1210 static bool isValidReportString(StringRef arg) {
1211 return arg == "none" || arg == "warning" || arg == "error";
1223 ctx.arg.remapInputs[fields[0]] = fields[1];
1225 ctx.arg.remapInputsWildcards.emplace_back(std::move(*pat), fields[1]);
1239 ctx.arg.allowMultipleDefinition =
1243 ctx.arg.androidMemtagHeap =
1245 ctx.arg.androidMemtagStack = args.hasFlag(OPT_android_memtag_stack,
1247 ctx.arg.fatLTOObjects =
1249 ctx.arg.androidMemtagMode = getMemtagMode(ctx, args);
1250 ctx.arg.auxiliaryList = args::getStrings(args, OPT_auxiliary);
1251 ctx.arg.armBe8 = args.hasArg(OPT_be8);
1252 if (opt::Arg *arg = args.getLastArg(
1255 if (arg->getOption().matches(OPT_Bsymbolic_non_weak_functions))
1256 ctx.arg.bsymbolic = BsymbolicKind::NonWeakFunctions;
1257 else if (arg->getOption().matches(OPT_Bsymbolic_functions))
1258 ctx.arg.bsymbolic = BsymbolicKind::Functions;
1259 else if (arg->getOption().matches(OPT_Bsymbolic_non_weak))
1260 ctx.arg.bsymbolic = BsymbolicKind::NonWeak;
1261 else if (arg->getOption().matches(OPT_Bsymbolic))
1262 ctx.arg.bsymbolic = BsymbolicKind::All;
1264 ctx.arg.callGraphProfileSort = getCGProfileSortKind(ctx, args);
1265 ctx.arg.checkSections =
1267 ctx.arg.chroot = args.getLastArgValue(OPT_chroot);
1268 if (auto *arg = args.getLastArg(OPT_compress_debug_sections)) {
1269 ctx.arg.compressDebugSections =
1270 getCompressionType(ctx, arg->getValue(), "--compress-debug-sections");
1272 ctx.arg.cref = args.hasArg(OPT_cref);
1273 ctx.arg.optimizeBBJumps =
1275 ctx.arg.debugNames = args.hasFlag(OPT_debug_names, OPT_no_debug_names, false);
1276 ctx.arg.demangle = args.hasFlag(OPT_demangle, OPT_no_demangle, true);
1277 ctx.arg.dependencyFile = args.getLastArgValue(OPT_dependency_file);
1278 ctx.arg.dependentLibraries =
1280 ctx.arg.disableVerify = args.hasArg(OPT_disable_verify);
1281 ctx.arg.discard = getDiscard(args);
1282 ctx.arg.dwoDir = args.getLastArgValue(OPT_plugin_opt_dwo_dir_eq);
1283 ctx.arg.dynamicLinker = getDynamicLinker(ctx, args);
1284 ctx.arg.ehFrameHdr =
1286 ctx.arg.emitLLVM = args.hasArg(OPT_lto_emit_llvm);
1287 ctx.arg.emitRelocs = args.hasArg(OPT_emit_relocs);
1288 ctx.arg.enableNewDtags =
1290 ctx.arg.enableNonContiguousRegions =
1292 ctx.arg.entry = args.getLastArgValue(OPT_entry);
1296 ctx.arg.executeOnly =
1298 ctx.arg.exportDynamic =
1301 ctx.arg.filterList = args::getStrings(args, OPT_filter);
1302 ctx.arg.fini = args.getLastArgValue(OPT_fini, "_fini");
1303 ctx.arg.fixCortexA53Errata843419 =
1305 ctx.arg.cmseImplib = args.hasArg(OPT_cmse_implib);
1306 ctx.arg.cmseInputLib = args.getLastArgValue(OPT_in_implib);
1307 ctx.arg.cmseOutputLib = args.getLastArgValue(OPT_out_implib);
1308 ctx.arg.fixCortexA8 =
1310 ctx.arg.fortranCommon =
1312 ctx.arg.gcSections = args.hasFlag(OPT_gc_sections, OPT_no_gc_sections, false);
1313 ctx.arg.gnuUnique = args.hasFlag(OPT_gnu_unique, OPT_no_gnu_unique, true);
1314 ctx.arg.gdbIndex = args.hasFlag(OPT_gdb_index, OPT_no_gdb_index, false);
1315 ctx.arg.icf = getICF(args);
1316 ctx.arg.ignoreDataAddressEquality =
1318 ctx.arg.ignoreFunctionAddressEquality =
1320 ctx.arg.init = args.getLastArgValue(OPT_init, "_init");
1321 ctx.arg.ltoAAPipeline = args.getLastArgValue(OPT_lto_aa_pipeline);
1322 ctx.arg.ltoCSProfileGenerate = args.hasArg(OPT_lto_cs_profile_generate);
1323 ctx.arg.ltoCSProfileFile = args.getLastArgValue(OPT_lto_cs_profile_file);
1324 ctx.arg.ltoPGOWarnMismatch = args.hasFlag(OPT_lto_pgo_warn_mismatch,
1326 ctx.arg.ltoDebugPassManager = args.hasArg(OPT_lto_debug_pass_manager);
1327 ctx.arg.ltoEmitAsm = args.hasArg(OPT_lto_emit_asm);
1328 ctx.arg.ltoNewPmPasses = args.getLastArgValue(OPT_lto_newpm_passes);
1329 ctx.arg.ltoWholeProgramVisibility =
1332 ctx.arg.ltoValidateAllVtablesHaveTypeInfos =
1335 ctx.arg.ltoo = args::getInteger(args, OPT_lto_O, 2);
1336 if (ctx.arg.ltoo > 3)
1337 ErrAlways(ctx) << "invalid optimization level for LTO: " << ctx.arg.ltoo;
1339 args::getInteger(args, OPT_lto_CGO, args::getCGOptLevel(ctx.arg.ltoo));
1341 ctx.arg.ltoCgo = *level;
1344 ctx.arg.ltoObjPath = args.getLastArgValue(OPT_lto_obj_path_eq);
1345 ctx.arg.ltoPartitions = args::getInteger(args, OPT_lto_partitions, 1);
1346 ctx.arg.ltoSampleProfile = args.getLastArgValue(OPT_lto_sample_profile);
1347 ctx.arg.ltoBBAddrMap =
1350 ctx.arg.ltoBasicBlockSections =
1352 ctx.arg.ltoUniqueBasicBlockSectionNames =
1355 ctx.arg.mapFile = args.getLastArgValue(OPT_Map);
1356 ctx.arg.mipsGotSize = args::getInteger(args, OPT_mips_got_size, 0xfff0);
1357 ctx.arg.mergeArmExidx =
1359 ctx.arg.mmapOutputFile =
1361 ctx.arg.nmagic = args.hasFlag(OPT_nmagic, OPT_no_nmagic, false);
1362 ctx.arg.noinhibitExec = args.hasArg(OPT_noinhibit_exec);
1363 ctx.arg.nostdlib = args.hasArg(OPT_nostdlib);
1364 ctx.arg.oFormatBinary = isOutputFormatBinary(ctx, args);
1365 ctx.arg.omagic = args.hasFlag(OPT_omagic, OPT_no_omagic, false);
1366 ctx.arg.optRemarksFilename = args.getLastArgValue(OPT_opt_remarks_filename);
1367 ctx.arg.optStatsFilename = args.getLastArgValue(OPT_plugin_opt_stats_file);
1370 if (auto *arg = args.getLastArg(OPT_opt_remarks_hotness_threshold)) {
1371 auto resultOrErr = remarks::parseHotnessThresholdOption(arg->getValue());
1373 ErrAlways(ctx) << arg->getSpelling() << ": invalid argument '"
1374 << arg->getValue()
1377 ctx.arg.optRemarksHotnessThreshold = *resultOrErr;
1380 ctx.arg.optRemarksPasses = args.getLastArgValue(OPT_opt_remarks_passes);
1381 ctx.arg.optRemarksWithHotness = args.hasArg(OPT_opt_remarks_with_hotness);
1382 ctx.arg.optRemarksFormat = args.getLastArgValue(OPT_opt_remarks_format);
1383 ctx.arg.optimize = args::getInteger(args, OPT_O, 1);
1384 ctx.arg.orphanHandling = getOrphanHandling(ctx, args);
1385 ctx.arg.outputFile = args.getLastArgValue(OPT_o);
1386 ctx.arg.packageMetadata = args.getLastArgValue(OPT_package_metadata);
1387 ctx.arg.pie = args.hasFlag(OPT_pie, OPT_no_pie, false);
1388 ctx.arg.printIcfSections =
1390 ctx.arg.printGcSections =
1392 ctx.arg.printMemoryUsage = args.hasArg(OPT_print_memory_usage);
1393 ctx.arg.printArchiveStats = args.getLastArgValue(OPT_print_archive_stats);
1394 ctx.arg.printSymbolOrder = args.getLastArgValue(OPT_print_symbol_order);
1395 ctx.arg.rejectMismatch = !args.hasArg(OPT_no_warn_mismatch);
1396 ctx.arg.relax = args.hasFlag(OPT_relax, OPT_no_relax, true);
1397 ctx.arg.relaxGP = args.hasFlag(OPT_relax_gp, OPT_no_relax_gp, false);
1398 ctx.arg.rpath = getRpath(args);
1399 ctx.arg.relocatable = args.hasArg(OPT_relocatable);
1400 ctx.arg.resolveGroups =
1406 ctx.arg.saveTempsArgs.insert(s);
1408 for (auto *arg : args.filtered(OPT_save_temps_eq)) {
1409 StringRef s = arg->getValue();
1411 ctx.arg.saveTempsArgs.insert(s);
1417 ctx.arg.searchPaths = args::getStrings(args, OPT_library_path);
1418 ctx.arg.sectionStartMap = getSectionStartMap(ctx, args);
1419 ctx.arg.shared = args.hasArg(OPT_shared);
1421 ctx.arg.randomizeSectionPadding =
1423 ctx.arg.singleRoRx = !args.hasFlag(OPT_rosegment, OPT_no_rosegment, true);
1424 ctx.arg.soName = args.getLastArgValue(OPT_soname);
1425 ctx.arg.sortSection = getSortSection(ctx, args);
1426 ctx.arg.splitStackAdjustSize =
1428 ctx.arg.zSectionHeader =
1430 ctx.arg.strip = getStrip(ctx, args); // needs zSectionHeader
1431 ctx.arg.sysroot = args.getLastArgValue(OPT_sysroot);
1432 ctx.arg.target1Rel = args.hasFlag(OPT_target1_rel, OPT_target1_abs, false);
1433 ctx.arg.target2 = getTarget2(ctx, args);
1434 ctx.arg.thinLTOCacheDir = args.getLastArgValue(OPT_thinlto_cache_dir);
1435 ctx.arg.thinLTOCachePolicy = CHECK(
1438 ctx.arg.thinLTOEmitImportsFiles = args.hasArg(OPT_thinlto_emit_imports_files);
1439 ctx.arg.thinLTOEmitIndexFiles = args.hasArg(OPT_thinlto_emit_index_files) ||
1442 ctx.arg.thinLTOIndexOnly = args.hasArg(OPT_thinlto_index_only) ||
1444 ctx.arg.thinLTOIndexOnlyArg = args.getLastArgValue(OPT_thinlto_index_only_eq);
1445 ctx.arg.thinLTOObjectSuffixReplace =
1447 std::tie(ctx.arg.thinLTOPrefixReplaceOld, ctx.arg.thinLTOPrefixReplaceNew,
1448 ctx.arg.thinLTOPrefixReplaceNativeObject) =
1450 if (ctx.arg.thinLTOEmitIndexFiles && !ctx.arg.thinLTOIndexOnly) {
1458 if (!ctx.arg.thinLTOPrefixReplaceNativeObject.empty() &&
1459 ctx.arg.thinLTOIndexOnlyArg.empty()) {
1464 ctx.arg.thinLTOModulesToCompile =
1466 ctx.arg.timeTraceEnabled =
1468 ctx.arg.timeTraceGranularity =
1470 ctx.arg.trace = args.hasArg(OPT_trace);
1471 ctx.arg.undefined = args::getStrings(args, OPT_undefined);
1472 ctx.arg.undefinedVersion =
1474 ctx.arg.unique = args.hasArg(OPT_unique);
1475 ctx.arg.useAndroidRelrTags = args.hasFlag(
1477 ctx.arg.warnBackrefs =
1479 ctx.arg.warnCommon = args.hasFlag(OPT_warn_common, OPT_no_warn_common, false);
1480 ctx.arg.warnSymbolOrdering =
1482 ctx.arg.whyExtract = args.getLastArgValue(OPT_why_extract);
1483 ctx.arg.zCombreloc = getZFlag(args, "combreloc", "nocombreloc", true);
1484 ctx.arg.zCopyreloc = getZFlag(args, "copyreloc", "nocopyreloc", true);
1485 ctx.arg.zForceBti = hasZOption(args, "force-bti");
1486 ctx.arg.zForceIbt = hasZOption(args, "force-ibt");
1487 ctx.arg.zGcs = getZGcs(ctx, args);
1488 ctx.arg.zGlobal = hasZOption(args, "global");
1489 ctx.arg.zGnustack = getZGnuStack(args);
1490 ctx.arg.zHazardplt = hasZOption(args, "hazardplt");
1491 ctx.arg.zIfuncNoplt = hasZOption(args, "ifunc-noplt");
1492 ctx.arg.zInitfirst = hasZOption(args, "initfirst");
1493 ctx.arg.zInterpose = hasZOption(args, "interpose");
1494 ctx.arg.zKeepTextSectionPrefix = getZFlag(
1496 ctx.arg.zLrodataAfterBss =
1498 ctx.arg.zNoBtCfi = hasZOption(args, "nobtcfi");
1499 ctx.arg.zNodefaultlib = hasZOption(args, "nodefaultlib");
1500 ctx.arg.zNodelete = hasZOption(args, "nodelete");
1501 ctx.arg.zNodlopen = hasZOption(args, "nodlopen");
1502 ctx.arg.zNow = getZFlag(args, "now", "lazy", false);
1503 ctx.arg.zOrigin = hasZOption(args, "origin");
1504 ctx.arg.zPacPlt = hasZOption(args, "pac-plt");
1505 ctx.arg.zRelro = getZFlag(args, "relro", "norelro", true);
1506 ctx.arg.zRetpolineplt = hasZOption(args, "retpolineplt");
1507 ctx.arg.zRodynamic = hasZOption(args, "rodynamic");
1508 ctx.arg.zSeparate = getZSeparate(args);
1509 ctx.arg.zShstk = hasZOption(args, "shstk");
1510 ctx.arg.zStackSize = args::getZOptionValue(args, OPT_z, "stack-size", 0);
1511 ctx.arg.zStartStopGC =
1513 ctx.arg.zStartStopVisibility = getZStartStopVisibility(ctx, args);
1514 ctx.arg.zText = getZFlag(args, "text", "notext", true);
1515 ctx.arg.zWxneeded = hasZOption(args, "wxneeded");
1517 ctx.arg.power10Stubs = args.getLastArgValue(OPT_power10_stubs_eq) != "no";
1519 if (opt::Arg *arg = args.getLastArg(OPT_eb, OPT_el)) {
1520 if (arg->getOption().matches(OPT_eb))
1521 ctx.arg.optEB = true;
1523 ctx.arg.optEL = true;
1526 for (opt::Arg *arg : args.filtered(OPT_remap_inputs)) {
1527 StringRef value(arg->getValue());
1528 remapInputs(ctx, value, arg->getSpelling());
1530 for (opt::Arg *arg : args.filtered(OPT_remap_inputs_file)) {
1531 StringRef filename(arg->getValue());
1541 for (opt::Arg *arg : args.filtered(OPT_shuffle_sections)) {
1543 std::pair<StringRef, StringRef> kv = StringRef(arg->getValue()).split('=');
1546 << arg->getValue() << "'";
1555 ctx.arg.shuffleSections.emplace_back(std::move(*pat), uint32_t(v));
1560 auto reports = {std::make_pair("bti-report", &ctx.arg.zBtiReport),
1561 std::make_pair("cet-report", &ctx.arg.zCetReport),
1562 std::make_pair("gcs-report", &ctx.arg.zGcsReport),
1563 std::make_pair("pauth-report", &ctx.arg.zPauthReport)};
1564 for (opt::Arg *arg : args.filtered(OPT_z)) {
1566 StringRef(arg->getValue()).split('=');
1570 arg->claim();
1580 for (opt::Arg *arg : args.filtered(OPT_compress_sections)) {
1582 StringRef(arg->getValue()).split(fields, '=');
1584 ErrAlways(ctx) << arg->getSpelling()
1589 auto type = getCompressionType(ctx, typeStr, arg->getSpelling());
1594 << arg->getSpelling()
1599 ctx.arg.compressSections.emplace_back(std::move(*pat), type, level);
1601 ErrAlways(ctx) << arg->getSpelling() << ": " << pat.takeError();
1606 for (opt::Arg *arg : args.filtered(OPT_z)) {
1608 StringRef(arg->getValue()).split('=');
1611 arg->claim();
1624 ctx.arg.deadRelocInNonAlloc.emplace_back(std::move(*pat), v);
1632 if (auto *arg = args.getLastArg(OPT_plugin_opt_mcpu_eq))
1633 parseClangOption(ctx, ctx.saver.save("-mcpu=" + StringRef(arg->getValue())),
1634 arg->getSpelling());
1636 for (opt::Arg *arg : args.filtered(OPT_plugin_opt_eq_minus))
1637 parseClangOption(ctx, std::string("-") + arg->getValue(),
1638 arg->getSpelling());
1644 for (opt::Arg *arg : args.filtered(OPT_plugin_opt_eq)) {
1645 StringRef v(arg->getValue());
1647 ErrAlways(ctx) << arg->getSpelling() << ": unknown plugin option '"
1648 << arg->getValue() << "'";
1651 ctx.arg.passPlugins = args::getStrings(args, OPT_load_pass_plugins);
1654 for (const auto *arg : args.filtered(OPT_mllvm)) {
1655 parseClangOption(ctx, arg->getValue(), arg->getSpelling());
1656 ctx.arg.mllvmOpts.emplace_back(arg->getValue());
1659 ctx.arg.ltoKind = LtoKind::Default;
1660 if (auto *arg = args.getLastArg(OPT_lto)) {
1661 StringRef s = arg->getValue();
1663 ctx.arg.ltoKind = LtoKind::UnifiedThin;
1665 ctx.arg.ltoKind = LtoKind::UnifiedRegular;
1667 ctx.arg.ltoKind = LtoKind::Default;
1676 if (auto *arg = args.getLastArg(OPT_threads)) {
1677 StringRef v(arg->getValue());
1680 ErrAlways(ctx) << arg->getSpelling()
1682 << arg->getValue() << "'";
1684 ctx.arg.thinLTOJobs = v;
1689 if (auto *arg = args.getLastArg(OPT_thinlto_jobs_eq))
1690 ctx.arg.thinLTOJobs = arg->getValue();
1691 ctx.arg.threadCount = parallel::strategy.compute_thread_count();
1693 if (ctx.arg.ltoPartitions == 0)
1695 if (!get_threadpool_strategy(ctx.arg.thinLTOJobs))
1697 << ctx.arg.thinLTOJobs;
1699 if (ctx.arg.splitStackAdjustSize < 0)
1712 if (auto *arg = args.getLastArg(OPT_m)) {
1713 StringRef s = arg->getValue();
1714 std::tie(ctx.arg.ekind, ctx.arg.emachine, ctx.arg.osabi) =
1716 ctx.arg.mipsN32Abi =
1718 ctx.arg.emulation = s;
1722 if (auto *arg = args.getLastArg(OPT_hash_style)) {
1723 StringRef s = arg->getValue();
1725 ctx.arg.sysvHash = true;
1727 ctx.arg.gnuHash = true;
1729 ctx.arg.sysvHash = ctx.arg.gnuHash = true;
1735 ctx.arg.mapFile = "-";
1740 if (ctx.arg.nmagic || ctx.arg.omagic || ctx.arg.relocatable)
1741 ctx.arg.zRelro = false;
1743 std::tie(ctx.arg.buildId, ctx.arg.buildIdVector) = getBuildId(ctx, args);
1746 ctx.arg.relrGlibc = true;
1747 ctx.arg.relrPackDynRelocs = true;
1749 std::tie(ctx.arg.androidPackDynRelocs, ctx.arg.relrPackDynRelocs) =
1753 if (auto *arg = args.getLastArg(OPT_symbol_ordering_file)){
1757 if (auto buffer = readFile(ctx, arg->getValue()))
1758 ctx.arg.symbolOrderingFile = getSymbolOrderingFile(ctx, *buffer);
1761 assert(ctx.arg.versionDefinitions.empty());
1762 ctx.arg.versionDefinitions.push_back(
1764 ctx.arg.versionDefinitions.push_back(
1769 if (auto *arg = args.getLastArg(OPT_retain_symbols_file)) {
1770 ctx.arg.versionDefinitions[VER_NDX_LOCAL].nonLocalPatterns.push_back(
1772 if (std::optional<MemoryBufferRef> buffer = readFile(ctx, arg->getValue()))
1774 ctx.arg.versionDefinitions[VER_NDX_GLOBAL].nonLocalPatterns.push_back(
1778 for (opt::Arg *arg : args.filtered(OPT_warn_backrefs_exclude)) {
1779 StringRef pattern(arg->getValue());
1781 ctx.arg.warnBackrefsExclude.push_back(std::move(*pat));
1783 ErrAlways(ctx) << arg->getSpelling() << ": " << pat.takeError() << ": "
1792 for (auto *arg : args.filtered(OPT_export_dynamic_symbol))
1793 ctx.arg.dynamicList.push_back(
1794 {arg->getValue(), /*isExternCpp=*/false,
1795 /*hasWildcard=*/hasWildcard(arg->getValue())});
1800 ctx.arg.symbolic =
1801 ctx.arg.bsymbolic == BsymbolicKind::All || args.hasArg(OPT_dynamic_list);
1802 for (auto *arg :
1804 if (std::optional<MemoryBufferRef> buffer = readFile(ctx, arg->getValue()))
1807 for (auto *arg : args.filtered(OPT_version_script))
1808 if (std::optional<std::string> path = searchScript(ctx, arg->getValue())) {
1812 ErrAlways(ctx) << "cannot find version script " << arg->getValue();
1821 ELFKind k = ctx.arg.ekind;
1822 uint16_t m = ctx.arg.emachine;
1824 ctx.arg.copyRelocs = (ctx.arg.relocatable || ctx.arg.emitRelocs);
1825 ctx.arg.is64 = (k == ELF64LEKind || k == ELF64BEKind);
1826 ctx.arg.isLE = (k == ELF32LEKind || k == ELF64LEKind);
1827 ctx.arg.endianness = ctx.arg.isLE ? endianness::little : endianness::big;
1828 ctx.arg.isMips64EL = (k == ELF64LEKind && m == EM_MIPS);
1829 ctx.arg.isPic = ctx.arg.pie || ctx.arg.shared;
1830 ctx.arg.picThunk = args.hasArg(OPT_pic_veneer, ctx.arg.isPic);
1831 ctx.arg.wordsize = ctx.arg.is64 ? 8 : 4;
1847 ctx.arg.isRela = getIsRela(ctx, args);
1854 ctx.arg.writeAddends = args.hasFlag(OPT_apply_dynamic_relocs,
1856 !ctx.arg.isRela;
1865 ctx.arg.checkDynamicRelocs =
1868 ctx.arg.tocOptimize =
1870 ctx.arg.pcRelOptimize =
1874 if (ctx.arg.emachine == EM_MIPS)
1875 ctx.arg.sysvHash = true;
1877 ctx.arg.sysvHash = ctx.arg.gnuHash = true;
1882 ctx.arg.warnMissingEntry =
1883 (!ctx.arg.entry.empty() || (!ctx.arg.shared && !ctx.arg.relocatable));
1884 if (ctx.arg.entry.empty() && !ctx.arg.relocatable)
1885 ctx.arg.entry = ctx.arg.emachine == EM_MIPS ? "__start" : "_start";
1886 if (ctx.arg.outputFile.empty())
1887 ctx.arg.outputFile = "a.out";
1894 if (auto e = tryCreateFile(ctx.arg.outputFile))
1895 ErrAlways(ctx) << "cannot open output file " << ctx.arg.outputFile << ": "
1897 if (auto e = tryCreateFile(ctx.arg.mapFile))
1898 ErrAlways(ctx) << "cannot open map file " << ctx.arg.mapFile << ": "
1900 if (auto e = tryCreateFile(ctx.arg.whyExtract))
1901 ErrAlways(ctx) << "cannot open --why-extract= file " << ctx.arg.whyExtract
1922 ctx.arg.isStatic = ctx.arg.relocatable;
1929 for (auto *arg : args) {
1930 switch (arg->getOption().getID()) {
1932 addLibrary(arg->getValue());
1936 addFile(arg->getValue(), /*withLOption=*/false);
1940 readDefsym(ctx, MemoryBufferRef(arg->getValue(), "--defsym"));
1946 searchScript(ctx, arg->getValue())) {
1948 if (arg->getOption().matches(OPT_default_script)) {
1957 ErrAlways(ctx) << "cannot find linker script " << arg->getValue();
1960 ctx.arg.asNeeded = true;
1963 ctx.arg.formatBinary = isFormatBinary(ctx, arg->getValue());
1966 ctx.arg.asNeeded = false;
1971 ctx.arg.isStatic = true;
1974 if (!ctx.arg.relocatable)
1975 ctx.arg.isStatic = false;
1984 if (std::optional<MemoryBufferRef> mb = readFile(ctx, arg->getValue())) {
1993 readFile(ctx, arg->getValue()))
2023 stack.emplace_back(ctx.arg.asNeeded, ctx.arg.isStatic, inWholeArchive);
2030 std::tie(ctx.arg.asNeeded, ctx.arg.isStatic, inWholeArchive) =
2045 if (ctx.arg.ekind != ELFNoneKind)
2054 ctx.arg.ekind = f->ekind;
2055 ctx.arg.emachine = f->emachine;
2056 ctx.arg.mipsN32Abi = ctx.arg.emachine == EM_MIPS && isMipsN32Abi(ctx, *f);
2058 ctx.arg.osabi = f->osabi;
2076 if (ctx.arg.nmagic || ctx.arg.omagic) {
2094 if (ctx.arg.nmagic || ctx.arg.omagic) {
2101 if (val > ctx.arg.maxPageSize)
2102 val = ctx.arg.maxPageSize;
2108 // Because we are using `ctx.arg.maxPageSize` here, this function has to be
2110 auto *arg = args.getLastArg(OPT_image_base);
2111 if (!arg)
2114 StringRef s = arg->getValue();
2120 if ((v % ctx.arg.maxPageSize) != 0)
2129 for (auto *arg : args.filtered(OPT_exclude_libs)) {
2130 StringRef s = arg->getValue();
2184 if (!ctx.arg.whyExtract.empty())
2191 static void handleUndefinedGlob(Ctx &ctx, StringRef arg) {
2192 Expected<GlobPattern> pat = GlobPattern::create(arg);
2194 ErrAlways(ctx) << "--undefined-glob: " << pat.takeError() << ": " << arg;
2212 if (!ctx.arg.whyExtract.empty())
2219 if (ctx.arg.printArchiveStats.empty())
2223 raw_fd_ostream os = ctx.openAuxiliaryFile(ctx.arg.printArchiveStats, ec);
2226 << ctx.arg.printArchiveStats << ": " << ec.message();
2249 if (ctx.arg.whyExtract.empty())
2253 raw_fd_ostream os = ctx.openAuxiliaryFile(ctx.arg.whyExtract, ec);
2255 ErrAlways(ctx) << "cannot open --why-extract= file " << ctx.arg.whyExtract
2275 for (const llvm::GlobPattern &pat : ctx.arg.warnBackrefsExclude)
2312 raw_fd_ostream os = ctx.openAuxiliaryFile(ctx.arg.dependencyFile, ec);
2314 ErrAlways(ctx) << "cannot open " << ctx.arg.dependencyFile << ": "
2342 os << ctx.arg.outputFile << ":";
2343 for (StringRef path : ctx.arg.dependencyFiles) {
2349 for (StringRef path : ctx.arg.dependencyFiles) {
2396 for (auto *arg : args.filtered(OPT_keep_unique)) {
2397 StringRef name = arg->getValue();
2409 if (ctx.arg.icf == ICFLevel::All && ctx.arg.ignoreDataAddressEquality)
2414 bool icfSafe = ctx.arg.icf == ICFLevel::Safe;
2487 if (!ctx.arg.sectionStartMap.empty())
2491 if (ctx.arg.emachine == EM_MIPS)
2553 if (!ctx.arg.relocatable)
2590 for (auto *arg : args.filtered(OPT_wrap)) {
2591 StringRef name = arg->getValue();
2670 ? ctx.arg.versionDefinitions[sym2->versionId].name == suffix1 + 1
2701 if (ctx.arg.versionDefinitions.size() > 2)
2734 if (ctx.arg.emachine != EM_386 && ctx.arg.emachine != EM_X86_64 &&
2735 ctx.arg.emachine != EM_AARCH64)
2738 ctx.arg.andFeatures = -1;
2741 if (ctx.arg.emachine == EM_AARCH64) {
2768 reportUnless(ctx.arg.zBtiReport,
2774 reportUnless(ctx.arg.zGcsReport,
2780 reportUnless(ctx.arg.zCetReport, features & GNU_PROPERTY_X86_FEATURE_1_IBT)
2785 reportUnless(ctx.arg.zCetReport,
2791 if (ctx.arg.zForceBti && !(features & GNU_PROPERTY_AARCH64_FEATURE_1_BTI)) {
2793 if (ctx.arg.zBtiReport == "none")
2797 } else if (ctx.arg.zForceIbt &&
2799 if (ctx.arg.zCetReport == "none")
2805 if (ctx.arg.zPacPlt && !(hasValidPauthAbiCoreInfo ||
2813 ctx.arg.andFeatures &= features;
2819 report(ctx.arg.zPauthReport)
2836 if (ctx.arg.zShstk)
2837 ctx.arg.andFeatures |= GNU_PROPERTY_X86_FEATURE_1_SHSTK;
2840 if (ctx.arg.zGcs == GcsPolicy::Always)
2841 ctx.arg.andFeatures |= GNU_PROPERTY_AARCH64_FEATURE_1_GCS;
2842 else if (ctx.arg.zGcs == GcsPolicy::Never)
2843 ctx.arg.andFeatures &= ~GNU_PROPERTY_AARCH64_FEATURE_1_GCS;
2890 for (auto *arg : args.filtered(OPT_trace_symbol))
2891 ctx.symtab->insert(arg->getValue())->traced = true;
2897 for (StringRef name : ctx.arg.undefined)
2904 ctx.hasDynsym = !ctx.sharedFiles.empty() || ctx.arg.shared ||
2905 (ctx.arg.pie && !ctx.arg.noDynamicLinker);
2907 ctx.arg.hasDynSymTab = ctx.hasDynsym || ctx.arg.isPic;
2910 if (Symbol *sym = ctx.symtab->find(ctx.arg.entry))
2923 for (StringRef name : ctx.arg.undefined)
2928 if (Symbol *sym = dyn_cast_or_null<Defined>(ctx.symtab->find(ctx.arg.init)))
2930 if (Symbol *sym = dyn_cast_or_null<Defined>(ctx.symtab->find(ctx.arg.fini)))
3001 if (!ctx.arg.relocatable)
3009 if (!ctx.arg.relocatable) {
3023 const bool skipLinkedOutput = ctx.arg.thinLTOIndexOnly || ctx.arg.emitLLVM ||
3024 ctx.arg.ltoEmitAsm ||
3025 !ctx.arg.thinLTOModulesToCompile.empty();
3028 if (ctx.arg.ltoValidateAllVtablesHaveTypeInfos)
3122 if (ctx.arg.strip != StripPolicy::None) {
3138 if (!ctx.arg.dependencyFile.empty())
3154 ctx.arg.eflags = ctx.target->calcEFlags();
3159 ctx.arg.maxPageSize = getMaxPageSize(ctx, args);
3165 ctx.arg.commonPageSize = getCommonPageSize(ctx, args);
3167 ctx.arg.imageBase = getImageBase(ctx, args);
3170 if (!ctx.arg.relocatable)
3195 if (!ctx.arg.relocatable)
3199 if (ctx.arg.emachine == EM_RISCV)
3229 if (ctx.arg.icf != ICFLevel::None) {
3235 if (ctx.arg.callGraphProfileSort != CGProfileSortKind::None) {
3236 if (auto *arg = args.getLastArg(OPT_call_graph_ordering_file)) {
3238 readFile(ctx, arg->getValue()))