On Wed, Apr 25, 2012 at 1:18 PM, James Molloy <[email protected]> wrote: > Hi Evgeniy, > > Looks like this broke the windows build: > http://bb.pgr.jp/builders/cmake-clang-i686-msvc10/builds/2668/steps/test_cla > ng/logs/Clang%20%3A%3A%20Driver___asan-ld.c > > E:\bb-win7\cmake-clang-i686-msvc10\llvm-project\clang\test\Driver\asan-ld.c: > 9:17: error: expected string not found in input > // CHECK-LINUX: lib/linux/libclang_rt.asan-i386.a" > > Probably should ensure that test is windows-safe.
Sorry. Should be fixed in r155543. > > Cheers, > > James > > -----Original Message----- > From: [email protected] > [mailto:[email protected]] On Behalf Of Evgeniy Stepanov > Sent: 25 April 2012 09:59 > To: [email protected] > Subject: [cfe-commits] r155541 - in /cfe/trunk: lib/Driver/ test/Driver/ > test/Driver/Inputs/basic_android_tree/ > test/Driver/Inputs/basic_android_tree/usr/ > test/Driver/Inputs/basic_android_tree/usr/lib/ > > Author: eugenis > Date: Wed Apr 25 03:59:22 2012 > New Revision: 155541 > > URL: http://llvm.org/viewvc/llvm-project?rev=155541&view=rev > Log: > Clang driver support for linking on Android. > > Added: > cfe/trunk/test/Driver/Inputs/basic_android_tree/ > cfe/trunk/test/Driver/Inputs/basic_android_tree/usr/ > cfe/trunk/test/Driver/Inputs/basic_android_tree/usr/lib/ > > cfe/trunk/test/Driver/Inputs/basic_android_tree/usr/lib/crtbegin_dynamic.o > cfe/trunk/test/Driver/Inputs/basic_android_tree/usr/lib/crtbegin_so.o > > cfe/trunk/test/Driver/Inputs/basic_android_tree/usr/lib/crtbegin_static.o > cfe/trunk/test/Driver/Inputs/basic_android_tree/usr/lib/crtend_android.o > cfe/trunk/test/Driver/Inputs/basic_android_tree/usr/lib/crtend_so.o > cfe/trunk/test/Driver/asan-ld.c > Modified: > cfe/trunk/lib/Driver/Tools.cpp > cfe/trunk/test/Driver/linux-ld.c > > Modified: cfe/trunk/lib/Driver/Tools.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=15554 > 1&r1=155540&r2=155541&view=diff > ============================================================================ > == > --- cfe/trunk/lib/Driver/Tools.cpp (original) > +++ cfe/trunk/lib/Driver/Tools.cpp Wed Apr 25 03:59:22 2012 > @@ -1269,22 +1269,33 @@ > /// This needs to be called before we add the C run-time (malloc, etc). > static void addAsanRTLinux(const ToolChain &TC, const ArgList &Args, > ArgStringList &CmdArgs) { > - // Add asan linker flags when linking an executable, but not a shared > object. > - if (Args.hasArg(options::OPT_shared) || > - !Args.hasFlag(options::OPT_faddress_sanitizer, > + if (!Args.hasFlag(options::OPT_faddress_sanitizer, > options::OPT_fno_address_sanitizer, false)) > return; > + if(TC.getTriple().getEnvironment() == llvm::Triple::ANDROIDEABI) { > + if (!Args.hasArg(options::OPT_shared)) { > + // For an executable, we add a .preinit_array stub. > + CmdArgs.push_back("-u"); > + CmdArgs.push_back("__asan_preinit"); > + CmdArgs.push_back("-lasan"); > + } > > - // LibAsan is "libclang_rt.asan-<ArchName>.a" in the Linux library > resource > - // directory. > - SmallString<128> LibAsan(TC.getDriver().ResourceDir); > - llvm::sys::path::append(LibAsan, "lib", "linux", > - (Twine("libclang_rt.asan-") + > - TC.getArchName() + ".a")); > - CmdArgs.push_back(Args.MakeArgString(LibAsan)); > - CmdArgs.push_back("-lpthread"); > - CmdArgs.push_back("-ldl"); > - CmdArgs.push_back("-export-dynamic"); > + CmdArgs.push_back("-lasan_preload"); > + CmdArgs.push_back("-ldl"); > + } else { > + if (!Args.hasArg(options::OPT_shared)) { > + // LibAsan is "libclang_rt.asan-<ArchName>.a" in the Linux library > + // resource directory. > + SmallString<128> LibAsan(TC.getDriver().ResourceDir); > + llvm::sys::path::append(LibAsan, "lib", "linux", > + (Twine("libclang_rt.asan-") + > + TC.getArchName() + ".a")); > + CmdArgs.push_back(Args.MakeArgString(LibAsan)); > + CmdArgs.push_back("-lpthread"); > + CmdArgs.push_back("-ldl"); > + CmdArgs.push_back("-export-dynamic"); > + } > + } > } > > static bool shouldUseFramePointer(const ArgList &Args, > @@ -5116,9 +5127,10 @@ > C.addCommand(new Command(JA, *this, Exec, CmdArgs)); > } > > -static void AddLibgcc(const Driver &D, ArgStringList &CmdArgs, > - const ArgList &Args) { > - bool StaticLibgcc = Args.hasArg(options::OPT_static) || > +static void AddLibgcc(llvm::Triple Triple, const Driver &D, > + ArgStringList &CmdArgs, const ArgList &Args) { > + bool isAndroid = Triple.getEnvironment() == llvm::Triple::ANDROIDEABI; > + bool StaticLibgcc = isAndroid || Args.hasArg(options::OPT_static) || > Args.hasArg(options::OPT_static_libgcc); > if (!D.CCCIsCXX) > CmdArgs.push_back("-lgcc"); > @@ -5134,7 +5146,7 @@ > CmdArgs.push_back("--no-as-needed"); > } > > - if (StaticLibgcc) > + if (StaticLibgcc && !isAndroid) > CmdArgs.push_back("-lgcc_eh"); > else if (!Args.hasArg(options::OPT_shared) && D.CCCIsCXX) > CmdArgs.push_back("-lgcc"); > @@ -5148,6 +5160,9 @@ > const toolchains::Linux& ToolChain = > static_cast<const toolchains::Linux&>(getToolChain()); > const Driver &D = ToolChain.getDriver(); > + const bool isAndroid = ToolChain.getTriple().getEnvironment() == > + llvm::Triple::ANDROIDEABI; > + > ArgStringList CmdArgs; > > // Silence warning for "clang -g foo.o -o foo" > @@ -5208,6 +5223,10 @@ > CmdArgs.push_back("-static"); > } else if (Args.hasArg(options::OPT_shared)) { > CmdArgs.push_back("-shared"); > + if ((ToolChain.getArch() == llvm::Triple::arm > + || ToolChain.getArch() == llvm::Triple::thumb) && isAndroid) { > + CmdArgs.push_back("-Bsymbolic"); > + } > } > > if (ToolChain.getArch() == llvm::Triple::arm || > @@ -5215,7 +5234,9 @@ > (!Args.hasArg(options::OPT_static) && > !Args.hasArg(options::OPT_shared))) { > CmdArgs.push_back("-dynamic-linker"); > - if (ToolChain.getArch() == llvm::Triple::x86) > + if (isAndroid) > + CmdArgs.push_back("/system/bin/linker"); > + else if (ToolChain.getArch() == llvm::Triple::x86) > CmdArgs.push_back("/lib/ld-linux.so.2"); > else if (ToolChain.getArch() == llvm::Triple::arm || > ToolChain.getArch() == llvm::Triple::thumb) > @@ -5239,25 +5260,27 @@ > > if (!Args.hasArg(options::OPT_nostdlib) && > !Args.hasArg(options::OPT_nostartfiles)) { > - const char *crt1 = NULL; > - if (!Args.hasArg(options::OPT_shared)){ > - if (Args.hasArg(options::OPT_pie)) > - crt1 = "Scrt1.o"; > - else > - crt1 = "crt1.o"; > - } > - if (crt1) > - CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crt1))); > + if (!isAndroid) { > + const char *crt1 = NULL; > + if (!Args.hasArg(options::OPT_shared)){ > + if (Args.hasArg(options::OPT_pie)) > + crt1 = "Scrt1.o"; > + else > + crt1 = "crt1.o"; > + } > + if (crt1) > + CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crt1))); > > - CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crti.o"))); > + > CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crti.o"))); > + } > > const char *crtbegin; > if (Args.hasArg(options::OPT_static)) > - crtbegin = "crtbeginT.o"; > + crtbegin = isAndroid ? "crtbegin_static.o" : "crtbeginT.o"; > else if (Args.hasArg(options::OPT_shared) || > Args.hasArg(options::OPT_pie)) > - crtbegin = "crtbeginS.o"; > + crtbegin = isAndroid ? "crtbegin_so.o" : "crtbeginS.o"; > else > - crtbegin = "crtbegin.o"; > + crtbegin = isAndroid ? "crtbegin_dynamic.o" : "crtbegin.o"; > CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtbegin))); > } > > @@ -5298,7 +5321,7 @@ > if (Args.hasArg(options::OPT_static)) > CmdArgs.push_back("--start-group"); > > - AddLibgcc(D, CmdArgs, Args); > + AddLibgcc(ToolChain.getTriple(), D, CmdArgs, Args); > > if (Args.hasArg(options::OPT_pthread) || > Args.hasArg(options::OPT_pthreads)) > @@ -5309,18 +5332,19 @@ > if (Args.hasArg(options::OPT_static)) > CmdArgs.push_back("--end-group"); > else > - AddLibgcc(D, CmdArgs, Args); > + AddLibgcc(ToolChain.getTriple(), D, CmdArgs, Args); > > > if (!Args.hasArg(options::OPT_nostartfiles)) { > const char *crtend; > if (Args.hasArg(options::OPT_shared) || > Args.hasArg(options::OPT_pie)) > - crtend = "crtendS.o"; > + crtend = isAndroid ? "crtend_so.o" : "crtendS.o"; > else > - crtend = "crtend.o"; > + crtend = isAndroid ? "crtend_android.o" : "crtend.o"; > > CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath(crtend))); > - > CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtn.o"))); > + if (!isAndroid) > + > CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtn.o"))); > } > } > > > Added: > cfe/trunk/test/Driver/Inputs/basic_android_tree/usr/lib/crtbegin_dynamic.o > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/basic_andro > id_tree/usr/lib/crtbegin_dynamic.o?rev=155541&view=auto > ============================================================================ > == > (empty) > > Added: cfe/trunk/test/Driver/Inputs/basic_android_tree/usr/lib/crtbegin_so.o > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/basic_andro > id_tree/usr/lib/crtbegin_so.o?rev=155541&view=auto > ============================================================================ > == > (empty) > > Added: > cfe/trunk/test/Driver/Inputs/basic_android_tree/usr/lib/crtbegin_static.o > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/basic_andro > id_tree/usr/lib/crtbegin_static.o?rev=155541&view=auto > ============================================================================ > == > (empty) > > Added: > cfe/trunk/test/Driver/Inputs/basic_android_tree/usr/lib/crtend_android.o > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/basic_andro > id_tree/usr/lib/crtend_android.o?rev=155541&view=auto > ============================================================================ > == > (empty) > > Added: cfe/trunk/test/Driver/Inputs/basic_android_tree/usr/lib/crtend_so.o > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/basic_andro > id_tree/usr/lib/crtend_so.o?rev=155541&view=auto > ============================================================================ > == > (empty) > > Added: cfe/trunk/test/Driver/asan-ld.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/asan-ld.c?rev=1555 > 41&view=auto > ============================================================================ > == > --- cfe/trunk/test/Driver/asan-ld.c (added) > +++ cfe/trunk/test/Driver/asan-ld.c Wed Apr 25 03:59:22 2012 > @@ -0,0 +1,31 @@ > +// Test AddressSanitizer ld flags. > + > +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ > +// RUN: -target i386-unknown-linux -faddress-sanitizer \ > +// RUN: --sysroot=%S/Inputs/basic_linux_tree \ > +// RUN: | FileCheck --check-prefix=CHECK-LINUX %s > +// CHECK-LINUX: "{{.*}}ld{{(.exe)?}}" > +// CHECK-LINUX-NOT: "-lc" > +// CHECK-LINUX: lib/linux/libclang_rt.asan-i386.a" > +// CHECK-LINUX: "-lpthread" > +// CHECK-LINUX: "-ldl" > +// CHECK-LINUX: "-export-dynamic" > + > +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ > +// RUN: -target arm-linux-androideabi -faddress-sanitizer \ > +// RUN: --sysroot=%S/Inputs/basic_android_tree \ > +// RUN: | FileCheck --check-prefix=CHECK-ANDROID %s > +// CHECK-ANDROID: "{{.*}}ld{{(.exe)?}}" > +// CHECK-ANDROID-NOT: "-lc" > +// CHECK-ANDROID: "-u" "__asan_preinit" "-lasan" > +// CHECK-ANDROID: "-lasan_preload" "-ldl" > + > +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ > +// RUN: -target arm-linux-androideabi -faddress-sanitizer \ > +// RUN: --sysroot=%S/Inputs/basic_android_tree \ > +// RUN: -shared \ > +// RUN: | FileCheck --check-prefix=CHECK-ANDROID-SHARED %s > +// CHECK-ANDROID-SHARED: "{{.*}}ld{{(.exe)?}}" > +// CHECK-ANDROID-SHARED-NOT: "-lc" > +// CHECK-ANDROID-SHARED-NOT: "-lasan" > +// CHECK-ANDROID-SHARED: "-lasan_preload" "-ldl" > > Modified: cfe/trunk/test/Driver/linux-ld.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/linux-ld.c?rev=155 > 541&r1=155540&r2=155541&view=diff > ============================================================================ > == > --- cfe/trunk/test/Driver/linux-ld.c (original) > +++ cfe/trunk/test/Driver/linux-ld.c Wed Apr 25 03:59:22 2012 > @@ -268,3 +268,39 @@ > // CHECK-DEBIAN-PPC64: "-L[[SYSROOT]]/lib" > // CHECK-DEBIAN-PPC64: "-L[[SYSROOT]]/usr/lib" > // > +// Test linker invocation on Android. > +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ > +// RUN: -target arm-linux-androideabi \ > +// RUN: --sysroot=%S/Inputs/basic_android_tree \ > +// RUN: | FileCheck --check-prefix=CHECK-ANDROID %s > +// CHECK-ANDROID: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" > +// CHECK-ANDROID: "{{.*}}/crtbegin_dynamic.o" > +// CHECK-ANDROID: "-L[[SYSROOT]]/usr/lib" > +// CHECK-ANDROID-NOT: "gcc_s" > +// CHECK-ANDROID: "-lgcc" > +// CHECK-ANDROID-NOT: "gcc_s" > +// CHECK-ANDROID: "{{.*}}/crtend_android.o" > +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ > +// RUN: -target arm-linux-androideabi \ > +// RUN: --sysroot=%S/Inputs/basic_android_tree \ > +// RUN: -shared \ > +// RUN: | FileCheck --check-prefix=CHECK-ANDROID-SO %s > +// CHECK-ANDROID-SO: "{{.*}}ld{{(.exe)?}}" "--sysroot=[[SYSROOT:[^"]+]]" > +// CHECK-ANDROID-SO: "{{.*}}/crtbegin_so.o" > +// CHECK-ANDROID-SO: "-L[[SYSROOT]]/usr/lib" > +// CHECK-ANDROID-SO-NOT: "gcc_s" > +// CHECK-ANDROID-SO: "-lgcc" > +// CHECK-ANDROID-SO-NOT: "gcc_s" > +// CHECK-ANDROID-SO: "{{.*}}/crtend_so.o" > +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \ > +// RUN: -target arm-linux-androideabi \ > +// RUN: --sysroot=%S/Inputs/basic_android_tree \ > +// RUN: -static \ > +// RUN: | FileCheck --check-prefix=CHECK-ANDROID-STATIC %s > +// CHECK-ANDROID-STATIC: "{{.*}}ld{{(.exe)?}}" > "--sysroot=[[SYSROOT:[^"]+]]" > +// CHECK-ANDROID-STATIC: "{{.*}}/crtbegin_static.o" > +// CHECK-ANDROID-STATIC: "-L[[SYSROOT]]/usr/lib" > +// CHECK-ANDROID-STATIC-NOT: "gcc_s" > +// CHECK-ANDROID-STATIC: "-lgcc" > +// CHECK-ANDROID-STATIC-NOT: "gcc_s" > +// CHECK-ANDROID-STATIC: "{{.*}}/crtend_android.o" > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits > > > > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
