Deleted Added
full compact
Tools.cpp (194179) Tools.cpp (195341)
1//===--- Tools.cpp - Tools Implementations ------------------------------*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//

--- 484 unchanged lines hidden (view full) ---

493 Args.AddLastArg(CmdArgs, options::OPT_fobjc_nonfragile_abi);
494 Args.AddLastArg(CmdArgs, options::OPT_fobjc_tight_layout);
495 Args.AddLastArg(CmdArgs, options::OPT_fdiagnostics_print_source_range_info);
496 Args.AddLastArg(CmdArgs, options::OPT_ftime_report);
497 Args.AddLastArg(CmdArgs, options::OPT_ftrapv);
498 Args.AddLastArg(CmdArgs, options::OPT_fvisibility_EQ);
499 Args.AddLastArg(CmdArgs, options::OPT_fwritable_strings);
500
1//===--- Tools.cpp - Tools Implementations ------------------------------*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//

--- 484 unchanged lines hidden (view full) ---

493 Args.AddLastArg(CmdArgs, options::OPT_fobjc_nonfragile_abi);
494 Args.AddLastArg(CmdArgs, options::OPT_fobjc_tight_layout);
495 Args.AddLastArg(CmdArgs, options::OPT_fdiagnostics_print_source_range_info);
496 Args.AddLastArg(CmdArgs, options::OPT_ftime_report);
497 Args.AddLastArg(CmdArgs, options::OPT_ftrapv);
498 Args.AddLastArg(CmdArgs, options::OPT_fvisibility_EQ);
499 Args.AddLastArg(CmdArgs, options::OPT_fwritable_strings);
500
501 // Forward stack protector flags.
502 if (Arg *A = Args.getLastArg(options::OPT_fno_stack_protector,
503 options::OPT_fstack_protector_all,
504 options::OPT_fstack_protector)) {
505 if (A->getOption().matches(options::OPT_fno_stack_protector))
506 CmdArgs.push_back("--stack-protector=0");
507 else if (A->getOption().matches(options::OPT_fstack_protector))
508 CmdArgs.push_back("--stack-protector=1");
509 else
510 CmdArgs.push_back("--stack-protector=2");
511 }
512
501 // Forward -f options with positive and negative forms; we translate
502 // these by hand.
503
504 // -fbuiltin is default, only pass non-default.
505 if (!Args.hasFlag(options::OPT_fbuiltin, options::OPT_fno_builtin))
506 CmdArgs.push_back("-fbuiltin=0");
507
508 // -fblocks default varies depending on platform and language; only

--- 102 unchanged lines hidden (view full) ---

611 else if (II.isFilename())
612 CmdArgs.push_back(II.getFilename());
613 else
614 II.getInputArg().renderAsInput(Args, CmdArgs);
615 }
616
617 const char *Exec =
618 Args.MakeArgString(getToolChain().GetProgramPath(C, "clang-cc").c_str());
513 // Forward -f options with positive and negative forms; we translate
514 // these by hand.
515
516 // -fbuiltin is default, only pass non-default.
517 if (!Args.hasFlag(options::OPT_fbuiltin, options::OPT_fno_builtin))
518 CmdArgs.push_back("-fbuiltin=0");
519
520 // -fblocks default varies depending on platform and language; only

--- 102 unchanged lines hidden (view full) ---

623 else if (II.isFilename())
624 CmdArgs.push_back(II.getFilename());
625 else
626 II.getInputArg().renderAsInput(Args, CmdArgs);
627 }
628
629 const char *Exec =
630 Args.MakeArgString(getToolChain().GetProgramPath(C, "clang-cc").c_str());
619 Dest.addCommand(new Command(Exec, CmdArgs));
631 Dest.addCommand(new Command(JA, Exec, CmdArgs));
620
621 // Explicitly warn that these options are unsupported, even though
622 // we are allowing compilation to continue.
623 // FIXME: Use iterator.
624 for (ArgList::const_iterator
625 it = Args.begin(), ie = Args.end(); it != ie; ++it) {
626 const Arg *A = *it;
627 if (A->getOption().matches(options::OPT_pg)) {

--- 114 unchanged lines hidden (view full) ---

742 // Don't render as input, we need gcc to do the translations.
743 II.getInputArg().render(Args, CmdArgs);
744 }
745
746 const char *GCCName =
747 getToolChain().getHost().getDriver().CCCGenericGCCName.c_str();
748 const char *Exec =
749 Args.MakeArgString(getToolChain().GetProgramPath(C, GCCName).c_str());
632
633 // Explicitly warn that these options are unsupported, even though
634 // we are allowing compilation to continue.
635 // FIXME: Use iterator.
636 for (ArgList::const_iterator
637 it = Args.begin(), ie = Args.end(); it != ie; ++it) {
638 const Arg *A = *it;
639 if (A->getOption().matches(options::OPT_pg)) {

--- 114 unchanged lines hidden (view full) ---

754 // Don't render as input, we need gcc to do the translations.
755 II.getInputArg().render(Args, CmdArgs);
756 }
757
758 const char *GCCName =
759 getToolChain().getHost().getDriver().CCCGenericGCCName.c_str();
760 const char *Exec =
761 Args.MakeArgString(getToolChain().GetProgramPath(C, GCCName).c_str());
750 Dest.addCommand(new Command(Exec, CmdArgs));
762 Dest.addCommand(new Command(JA, Exec, CmdArgs));
751}
752
753void gcc::Preprocess::RenderExtraToolArgs(ArgStringList &CmdArgs) const {
754 CmdArgs.push_back("-E");
755}
756
757void gcc::Precompile::RenderExtraToolArgs(ArgStringList &CmdArgs) const {
758 // The type is good enough.

--- 359 unchanged lines hidden (view full) ---

1118 CmdArgs.append(OutputArgs.begin(), OutputArgs.end());
1119 }
1120
1121 Args.AddAllArgs(CmdArgs, options::OPT_d_Group);
1122
1123 const char *CC1Name = getCC1Name(Inputs[0].getType());
1124 const char *Exec =
1125 Args.MakeArgString(getToolChain().GetProgramPath(C, CC1Name).c_str());
763}
764
765void gcc::Preprocess::RenderExtraToolArgs(ArgStringList &CmdArgs) const {
766 CmdArgs.push_back("-E");
767}
768
769void gcc::Precompile::RenderExtraToolArgs(ArgStringList &CmdArgs) const {
770 // The type is good enough.

--- 359 unchanged lines hidden (view full) ---

1130 CmdArgs.append(OutputArgs.begin(), OutputArgs.end());
1131 }
1132
1133 Args.AddAllArgs(CmdArgs, options::OPT_d_Group);
1134
1135 const char *CC1Name = getCC1Name(Inputs[0].getType());
1136 const char *Exec =
1137 Args.MakeArgString(getToolChain().GetProgramPath(C, CC1Name).c_str());
1126 Dest.addCommand(new Command(Exec, CmdArgs));
1138 Dest.addCommand(new Command(JA, Exec, CmdArgs));
1127}
1128
1129void darwin::Compile::ConstructJob(Compilation &C, const JobAction &JA,
1130 Job &Dest, const InputInfo &Output,
1131 const InputInfoList &Inputs,
1132 const ArgList &Args,
1133 const char *LinkingOutput) const {
1134 const Driver &D = getToolChain().getHost().getDriver();

--- 71 unchanged lines hidden (view full) ---

1206
1207 CmdArgs.push_back("--output-pch=");
1208 CmdArgs.push_back(Output.getFilename());
1209 }
1210
1211 const char *CC1Name = getCC1Name(Inputs[0].getType());
1212 const char *Exec =
1213 Args.MakeArgString(getToolChain().GetProgramPath(C, CC1Name).c_str());
1139}
1140
1141void darwin::Compile::ConstructJob(Compilation &C, const JobAction &JA,
1142 Job &Dest, const InputInfo &Output,
1143 const InputInfoList &Inputs,
1144 const ArgList &Args,
1145 const char *LinkingOutput) const {
1146 const Driver &D = getToolChain().getHost().getDriver();

--- 71 unchanged lines hidden (view full) ---

1218
1219 CmdArgs.push_back("--output-pch=");
1220 CmdArgs.push_back(Output.getFilename());
1221 }
1222
1223 const char *CC1Name = getCC1Name(Inputs[0].getType());
1224 const char *Exec =
1225 Args.MakeArgString(getToolChain().GetProgramPath(C, CC1Name).c_str());
1214 Dest.addCommand(new Command(Exec, CmdArgs));
1226 Dest.addCommand(new Command(JA, Exec, CmdArgs));
1215}
1216
1217void darwin::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
1218 Job &Dest, const InputInfo &Output,
1219 const InputInfoList &Inputs,
1220 const ArgList &Args,
1221 const char *LinkingOutput) const {
1222 ArgStringList CmdArgs;

--- 36 unchanged lines hidden (view full) ---

1259 assert(Input.isFilename() && "Invalid input.");
1260 CmdArgs.push_back(Input.getFilename());
1261 }
1262
1263 // asm_final spec is empty.
1264
1265 const char *Exec =
1266 Args.MakeArgString(getToolChain().GetProgramPath(C, "as").c_str());
1227}
1228
1229void darwin::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
1230 Job &Dest, const InputInfo &Output,
1231 const InputInfoList &Inputs,
1232 const ArgList &Args,
1233 const char *LinkingOutput) const {
1234 ArgStringList CmdArgs;

--- 36 unchanged lines hidden (view full) ---

1271 assert(Input.isFilename() && "Invalid input.");
1272 CmdArgs.push_back(Input.getFilename());
1273 }
1274
1275 // asm_final spec is empty.
1276
1277 const char *Exec =
1278 Args.MakeArgString(getToolChain().GetProgramPath(C, "as").c_str());
1267 Dest.addCommand(new Command(Exec, CmdArgs));
1279 Dest.addCommand(new Command(JA, Exec, CmdArgs));
1268}
1269
1270/// Helper routine for seeing if we should use dsymutil; this is a
1271/// gcc compatible hack, we should remove it and use the input
1272/// type information.
1273static bool isSourceSuffix(const char *Str) {
1274 // match: 'C', 'CPP', 'c', 'cc', 'cp', 'c++', 'cpp', 'cxx', 'm',
1275 // 'mm'.

--- 407 unchanged lines hidden (view full) ---

1683 // endfile_spec is empty.
1684 }
1685
1686 Args.AddAllArgs(CmdArgs, options::OPT_T_Group);
1687 Args.AddAllArgs(CmdArgs, options::OPT_F);
1688
1689 const char *Exec =
1690 Args.MakeArgString(getToolChain().GetProgramPath(C, "ld").c_str());
1280}
1281
1282/// Helper routine for seeing if we should use dsymutil; this is a
1283/// gcc compatible hack, we should remove it and use the input
1284/// type information.
1285static bool isSourceSuffix(const char *Str) {
1286 // match: 'C', 'CPP', 'c', 'cc', 'cp', 'c++', 'cpp', 'cxx', 'm',
1287 // 'mm'.

--- 407 unchanged lines hidden (view full) ---

1695 // endfile_spec is empty.
1696 }
1697
1698 Args.AddAllArgs(CmdArgs, options::OPT_T_Group);
1699 Args.AddAllArgs(CmdArgs, options::OPT_F);
1700
1701 const char *Exec =
1702 Args.MakeArgString(getToolChain().GetProgramPath(C, "ld").c_str());
1691 Dest.addCommand(new Command(Exec, CmdArgs));
1703 Dest.addCommand(new Command(JA, Exec, CmdArgs));
1692
1693 // Find the first non-empty base input (we want to ignore linker
1694 // inputs).
1695 const char *BaseInput = "";
1696 for (unsigned i = 0, e = Inputs.size(); i != e; ++i) {
1697 if (Inputs[i].getBaseInput()[0] != '\0') {
1698 BaseInput = Inputs[i].getBaseInput();
1699 break;

--- 13 unchanged lines hidden (view full) ---

1713 // the suffix (not the -x type), and then only of the first
1714 // source input. Awesome.
1715 const char *Suffix = strrchr(BaseInput, '.');
1716 if (Suffix && isSourceSuffix(Suffix + 1)) {
1717 const char *Exec =
1718 Args.MakeArgString(getToolChain().GetProgramPath(C, "dsymutil").c_str());
1719 ArgStringList CmdArgs;
1720 CmdArgs.push_back(Output.getFilename());
1704
1705 // Find the first non-empty base input (we want to ignore linker
1706 // inputs).
1707 const char *BaseInput = "";
1708 for (unsigned i = 0, e = Inputs.size(); i != e; ++i) {
1709 if (Inputs[i].getBaseInput()[0] != '\0') {
1710 BaseInput = Inputs[i].getBaseInput();
1711 break;

--- 13 unchanged lines hidden (view full) ---

1725 // the suffix (not the -x type), and then only of the first
1726 // source input. Awesome.
1727 const char *Suffix = strrchr(BaseInput, '.');
1728 if (Suffix && isSourceSuffix(Suffix + 1)) {
1729 const char *Exec =
1730 Args.MakeArgString(getToolChain().GetProgramPath(C, "dsymutil").c_str());
1731 ArgStringList CmdArgs;
1732 CmdArgs.push_back(Output.getFilename());
1721 C.getJobs().addCommand(new Command(Exec, CmdArgs));
1733 C.getJobs().addCommand(new Command(JA, Exec, CmdArgs));
1722 }
1723 }
1724}
1725
1726void darwin::Lipo::ConstructJob(Compilation &C, const JobAction &JA,
1727 Job &Dest, const InputInfo &Output,
1728 const InputInfoList &Inputs,
1729 const ArgList &Args,

--- 9 unchanged lines hidden (view full) ---

1739 for (InputInfoList::const_iterator
1740 it = Inputs.begin(), ie = Inputs.end(); it != ie; ++it) {
1741 const InputInfo &II = *it;
1742 assert(II.isFilename() && "Unexpected lipo input.");
1743 CmdArgs.push_back(II.getFilename());
1744 }
1745 const char *Exec =
1746 Args.MakeArgString(getToolChain().GetProgramPath(C, "lipo").c_str());
1734 }
1735 }
1736}
1737
1738void darwin::Lipo::ConstructJob(Compilation &C, const JobAction &JA,
1739 Job &Dest, const InputInfo &Output,
1740 const InputInfoList &Inputs,
1741 const ArgList &Args,

--- 9 unchanged lines hidden (view full) ---

1751 for (InputInfoList::const_iterator
1752 it = Inputs.begin(), ie = Inputs.end(); it != ie; ++it) {
1753 const InputInfo &II = *it;
1754 assert(II.isFilename() && "Unexpected lipo input.");
1755 CmdArgs.push_back(II.getFilename());
1756 }
1757 const char *Exec =
1758 Args.MakeArgString(getToolChain().GetProgramPath(C, "lipo").c_str());
1747 Dest.addCommand(new Command(Exec, CmdArgs));
1759 Dest.addCommand(new Command(JA, Exec, CmdArgs));
1748}
1749
1760}
1761
1762void openbsd::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
1763 Job &Dest, const InputInfo &Output,
1764 const InputInfoList &Inputs,
1765 const ArgList &Args,
1766 const char *LinkingOutput) const
1767{
1768 ArgStringList CmdArgs;
1750
1769
1770 Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA,
1771 options::OPT_Xassembler);
1772
1773 CmdArgs.push_back("-o");
1774 if (Output.isPipe())
1775 CmdArgs.push_back("-");
1776 else
1777 CmdArgs.push_back(Output.getFilename());
1778
1779 for (InputInfoList::const_iterator
1780 it = Inputs.begin(), ie = Inputs.end(); it != ie; ++it) {
1781 const InputInfo &II = *it;
1782 if (II.isPipe())
1783 CmdArgs.push_back("-");
1784 else
1785 CmdArgs.push_back(II.getFilename());
1786 }
1787
1788 const char *Exec =
1789 Args.MakeArgString(getToolChain().GetProgramPath(C, "as").c_str());
1790 Dest.addCommand(new Command(JA, Exec, CmdArgs));
1791}
1792
1793void openbsd::Link::ConstructJob(Compilation &C, const JobAction &JA,
1794 Job &Dest, const InputInfo &Output,
1795 const InputInfoList &Inputs,
1796 const ArgList &Args,
1797 const char *LinkingOutput) const {
1798 const Driver &D = getToolChain().getHost().getDriver();
1799 ArgStringList CmdArgs;
1800
1801 if (Args.hasArg(options::OPT_static)) {
1802 CmdArgs.push_back("-Bstatic");
1803 } else {
1804 CmdArgs.push_back("--eh-frame-hdr");
1805 if (Args.hasArg(options::OPT_shared)) {
1806 CmdArgs.push_back("-Bshareable");
1807 } else {
1808 CmdArgs.push_back("-dynamic-linker");
1809 CmdArgs.push_back("/usr/libexec/ld.so");
1810 }
1811 }
1812
1813 if (Output.isPipe()) {
1814 CmdArgs.push_back("-o");
1815 CmdArgs.push_back("-");
1816 } else if (Output.isFilename()) {
1817 CmdArgs.push_back("-o");
1818 CmdArgs.push_back(Output.getFilename());
1819 } else {
1820 assert(Output.isNothing() && "Invalid output.");
1821 }
1822
1823 if (!Args.hasArg(options::OPT_nostdlib) &&
1824 !Args.hasArg(options::OPT_nostartfiles)) {
1825 if (!Args.hasArg(options::OPT_shared)) {
1826 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crt0.o").c_str()));
1827 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtbegin.o").c_str()));
1828 } else {
1829 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtbeginS.o").c_str()));
1830 }
1831 }
1832
1833 Args.AddAllArgs(CmdArgs, options::OPT_L);
1834 Args.AddAllArgs(CmdArgs, options::OPT_T_Group);
1835 Args.AddAllArgs(CmdArgs, options::OPT_e);
1836
1837 for (InputInfoList::const_iterator
1838 it = Inputs.begin(), ie = Inputs.end(); it != ie; ++it) {
1839 const InputInfo &II = *it;
1840
1841 // Don't try to pass LLVM inputs to a generic gcc.
1842 if (II.getType() == types::TY_LLVMBC)
1843 D.Diag(clang::diag::err_drv_no_linker_llvm_support)
1844 << getToolChain().getTripleString().c_str();
1845
1846 if (II.isPipe())
1847 CmdArgs.push_back("-");
1848 else if (II.isFilename())
1849 CmdArgs.push_back(II.getFilename());
1850 else
1851 II.getInputArg().renderAsInput(Args, CmdArgs);
1852 }
1853
1854 if (!Args.hasArg(options::OPT_nostdlib) &&
1855 !Args.hasArg(options::OPT_nodefaultlibs)) {
1856
1857 if (Args.hasArg(options::OPT_pthread))
1858 CmdArgs.push_back("-pthread");
1859 CmdArgs.push_back("-lc");
1860 }
1861
1862 if (!Args.hasArg(options::OPT_nostdlib) &&
1863 !Args.hasArg(options::OPT_nostartfiles)) {
1864 if (!Args.hasArg(options::OPT_shared))
1865 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtend.o").c_str()));
1866 else
1867 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtendS.o").c_str()));
1868 }
1869
1870 const char *Exec =
1871 Args.MakeArgString(getToolChain().GetProgramPath(C, "ld").c_str());
1872 Dest.addCommand(new Command(JA, Exec, CmdArgs));
1873}
1874
1751void freebsd::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
1752 Job &Dest, const InputInfo &Output,
1753 const InputInfoList &Inputs,
1754 const ArgList &Args,
1755 const char *LinkingOutput) const
1756{
1757 ArgStringList CmdArgs;
1758

--- 17 unchanged lines hidden (view full) ---

1776 if (II.isPipe())
1777 CmdArgs.push_back("-");
1778 else
1779 CmdArgs.push_back(II.getFilename());
1780 }
1781
1782 const char *Exec =
1783 Args.MakeArgString(getToolChain().GetProgramPath(C, "as").c_str());
1875void freebsd::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
1876 Job &Dest, const InputInfo &Output,
1877 const InputInfoList &Inputs,
1878 const ArgList &Args,
1879 const char *LinkingOutput) const
1880{
1881 ArgStringList CmdArgs;
1882

--- 17 unchanged lines hidden (view full) ---

1900 if (II.isPipe())
1901 CmdArgs.push_back("-");
1902 else
1903 CmdArgs.push_back(II.getFilename());
1904 }
1905
1906 const char *Exec =
1907 Args.MakeArgString(getToolChain().GetProgramPath(C, "as").c_str());
1784 Dest.addCommand(new Command(Exec, CmdArgs));
1908 Dest.addCommand(new Command(JA, Exec, CmdArgs));
1785}
1786
1787void freebsd::Link::ConstructJob(Compilation &C, const JobAction &JA,
1788 Job &Dest, const InputInfo &Output,
1789 const InputInfoList &Inputs,
1790 const ArgList &Args,
1791 const char *LinkingOutput) const {
1792 const Driver &D = getToolChain().getHost().getDriver();

--- 94 unchanged lines hidden (view full) ---

1887 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtend.o").c_str()));
1888 else
1889 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtendS.o").c_str()));
1890 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtn.o").c_str()));
1891 }
1892
1893 const char *Exec =
1894 Args.MakeArgString(getToolChain().GetProgramPath(C, "ld").c_str());
1909}
1910
1911void freebsd::Link::ConstructJob(Compilation &C, const JobAction &JA,
1912 Job &Dest, const InputInfo &Output,
1913 const InputInfoList &Inputs,
1914 const ArgList &Args,
1915 const char *LinkingOutput) const {
1916 const Driver &D = getToolChain().getHost().getDriver();

--- 94 unchanged lines hidden (view full) ---

2011 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtend.o").c_str()));
2012 else
2013 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtendS.o").c_str()));
2014 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtn.o").c_str()));
2015 }
2016
2017 const char *Exec =
2018 Args.MakeArgString(getToolChain().GetProgramPath(C, "ld").c_str());
1895 Dest.addCommand(new Command(Exec, CmdArgs));
2019 Dest.addCommand(new Command(JA, Exec, CmdArgs));
1896}
1897
1898/// DragonFly Tools
1899
1900// For now, DragonFly Assemble does just about the same as for
1901// FreeBSD, but this may change soon.
1902void dragonfly::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
1903 Job &Dest, const InputInfo &Output,

--- 22 unchanged lines hidden (view full) ---

1926 if (II.isPipe())
1927 CmdArgs.push_back("-");
1928 else
1929 CmdArgs.push_back(II.getFilename());
1930 }
1931
1932 const char *Exec =
1933 Args.MakeArgString(getToolChain().GetProgramPath(C, "as").c_str());
2020}
2021
2022/// DragonFly Tools
2023
2024// For now, DragonFly Assemble does just about the same as for
2025// FreeBSD, but this may change soon.
2026void dragonfly::Assemble::ConstructJob(Compilation &C, const JobAction &JA,
2027 Job &Dest, const InputInfo &Output,

--- 22 unchanged lines hidden (view full) ---

2050 if (II.isPipe())
2051 CmdArgs.push_back("-");
2052 else
2053 CmdArgs.push_back(II.getFilename());
2054 }
2055
2056 const char *Exec =
2057 Args.MakeArgString(getToolChain().GetProgramPath(C, "as").c_str());
1934 Dest.addCommand(new Command(Exec, CmdArgs));
2058 Dest.addCommand(new Command(JA, Exec, CmdArgs));
1935}
1936
1937void dragonfly::Link::ConstructJob(Compilation &C, const JobAction &JA,
1938 Job &Dest, const InputInfo &Output,
1939 const InputInfoList &Inputs,
1940 const ArgList &Args,
1941 const char *LinkingOutput) const {
1942 const Driver &D = getToolChain().getHost().getDriver();

--- 107 unchanged lines hidden (view full) ---

2050 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtend.o").c_str()));
2051 else
2052 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtendS.o").c_str()));
2053 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtn.o").c_str()));
2054 }
2055
2056 const char *Exec =
2057 Args.MakeArgString(getToolChain().GetProgramPath(C, "ld").c_str());
2059}
2060
2061void dragonfly::Link::ConstructJob(Compilation &C, const JobAction &JA,
2062 Job &Dest, const InputInfo &Output,
2063 const InputInfoList &Inputs,
2064 const ArgList &Args,
2065 const char *LinkingOutput) const {
2066 const Driver &D = getToolChain().getHost().getDriver();

--- 107 unchanged lines hidden (view full) ---

2174 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtend.o").c_str()));
2175 else
2176 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtendS.o").c_str()));
2177 CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath(C, "crtn.o").c_str()));
2178 }
2179
2180 const char *Exec =
2181 Args.MakeArgString(getToolChain().GetProgramPath(C, "ld").c_str());
2058 Dest.addCommand(new Command(Exec, CmdArgs));
2182 Dest.addCommand(new Command(JA, Exec, CmdArgs));
2059}
2183}