That's fine by me. Chad
On Nov 20, 2012, at 7:05 PM, 32bitmicro <[email protected]> wrote: > Since branching there were other changes in these 2 files below. > I am assuming you want all the revisions listed up to r168297. > Just need a stamp :) > > Pawel > > > cfe/lib/Driver/Tools.cpp > > r168217, r168168, r168063, r168024, r167846, r167799 > > cfe/test/Driver/pic.c > r167846 > > > Logs for changes between 3.2 branch and r168297. > > > cfe/lib/Driver/Tools.cpp > > ------------------------------------------------------------------------ > r168217 | void | 2012-11-16 17:03:00 -0600 (Fri, 16 Nov 2012) | 1 line > > Revert r167799. It's not really correct, and it doesn't fix the problem > that it > was intended to fix. > ------------------------------------------------------------------------ > r168168 | samsonov | 2012-11-16 06:53:14 -0600 (Fri, 16 Nov 2012) | 1 line > > UBSan: enable proper linking with UBsan runtime on Darwin. Turn on > building ubsa > n on OS X in 'make' build system. Patch by Jean-Daniel Dupas. > ------------------------------------------------------------------------ > r168063 | fjahanian | 2012-11-15 13:02:45 -0600 (Thu, 15 Nov 2012) | 5 lines > > block extended signatur option. Change previous option > to a cc1 -fencode-extended-block-signature and pass it > to cc1 and recognize this option to produce extended block > type signature. // rdar://12109031 > > ------------------------------------------------------------------------ > r168024 | nicholas | 2012-11-14 23:36:36 -0600 (Wed, 14 Nov 2012) | 3 lines > > Revert r167567, restoring the ability of clang to run gcc in cases where it > can't handle the input file type. This resulted in PR14338. > > r167846 | d0k | 2012-11-13 09:32:35 -0600 (Tue, 13 Nov 2012) | 9 lines > > This patch makes the behavior of clang consistent with the behavior of > gcc 4.6 i > n cases where both -fPIC and -fPIE is used. > > - Separately check if -fPIE was specified in the command line and define > both __ > PIC__ and __PIE__ when -fPIE is used. We need to check this separately > because - > fPIE will infer -fPIC even if its not explicitly used. > - Fixed existing tests. > - Added new tests for cases where both -fPIC and -fPIE is used. > > Author: Tareq A. Siraj <[email protected]> > Fixes: PR13221 > Review: http://llvm-reviews.chandlerc.com/D94 > > ------------------------------------------------------------------------ > r167799 | void | 2012-11-12 18:54:24 -0600 (Mon, 12 Nov 2012) | 6 lines > > Disable accelerator tables when compiling with LTO. > > LTO doesn't generate correct accelerator tables. This is due to the > general lack > correct of debug info for LTO. Disable it when using LTO. > <rdar://problem/12401423> > > > > > cfe/test/Driver/pic.c > > ------------------------------------------------------------------------ > r167846 | d0k | 2012-11-13 09:32:35 -0600 (Tue, 13 Nov 2012) | 9 lines > > This patch makes the behavior of clang consistent with the behavior of > gcc 4.6 i > n cases where both -fPIC and -fPIE is used. > > - Separately check if -fPIE was specified in the command line and define > both __ > PIC__ and __PIE__ when -fPIE is used. We need to check this separately > because - > fPIE will infer -fPIC even if its not explicitly used. > - Fixed existing tests. > - Added new tests for cases where both -fPIC and -fPIE is used. > > Author: Tareq A. Siraj <[email protected]> > Fixes: PR13221 > Review: http://llvm-reviews.chandlerc.com/D94 > > > > > > On 11/20/2012 3:55 PM, Chad Rosier wrote: >> That works too! :) >> >> >> >> On Nov 20, 2012, at 5:30 PM, Chandler Carruth <[email protected]> wrote: >> >>> It should be Pawel who is doing that this release I think. =] >>> >>> On Tue, Nov 20, 2012 at 12:40 PM, Chad Rosier <[email protected]> wrote: >>>> Sounds good to me. Bill, would you mind merging this to the branch? >>>> >>>> Chad >>>> >>>> >>>> On Nov 20, 2012, at 5:39 AM, Chandler Carruth <[email protected]> wrote: >>>> >>>>> Chad, I suspect this should go into 3.2... Without it, ASan is often >>>>> unable to link with PIE, and lots of other weird behavior is observed. >>>>> The bad range of commits is pretty good, ever since the intel patch >>>>> reworking this in the other direction. >>>>> >>>>> Pawel, Chad is the code owner for the driver. >>>>> >>>>> On Sun, Nov 18, 2012 at 7:52 PM, Chandler Carruth <[email protected]> >>>>> wrote: >>>>>> Author: chandlerc >>>>>> Date: Sun Nov 18 21:52:03 2012 >>>>>> New Revision: 168297 >>>>>> >>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=168297&view=rev >>>>>> Log: >>>>>> Completely re-work how the Clang driver interprets PIC and PIE options. >>>>>> >>>>>> There were numerous issues here that were all entangled, and so I've >>>>>> tried to do a general simplification of the logic. >>>>>> 1) The logic was mimicing actual GCC bugs, rather than "features". These >>>>>> have been fixed in trunk GCC, and this fixes Clang as well. Notably, >>>>>> the logic was always intended to be last-match-wins like any other >>>>>> flag. >>>>>> 2) The logic for handling '-mdynamic-no-pic' was preposterously unclear. >>>>>> It also allowed the use of this flag on non-Darwin platforms where it >>>>>> has no actual meaning. Now this option is handled directly based on >>>>>> tests of how llvm-gcc behaves, and it is only supported on Darwin. >>>>>> 3) The APIs for the Driver's ToolChains had the implementation ugliness >>>>>> of dynamic-no-pic leaking through them. They also had the >>>>>> implementation details of the LLVM relocation model flag names >>>>>> leaking through. >>>>>> 4) The actual results of passing these flags was incorrect on Darwin in >>>>>> many cases. For example, Darwin *always* uses PIC level 2 if it uses >>>>>> in PIC level, and Darwin *always* uses PIC on 64-bit regardless of >>>>>> the flags specified, including -fPIE. Darwin never compiles in PIE >>>>>> mode, but it can *link* in PIE mode. >>>>>> 5) Also, PIC was not always being enabled even when PIE was. This isn't >>>>>> a supported mode at all and may have caused some fallout in builds >>>>>> with complex PIC and PIE interactions. >>>>>> >>>>>> The result is (I hope) cleaner and clearer for readers. I've also left >>>>>> comments and tests about some of the truly strage behavior that is >>>>>> observed on Darwin platforms. We have no real testing of Windows >>>>>> platforms and PIC, but I don't have the tools handy to figure that out. >>>>>> Hopefully others can beef up our testing here. >>>>>> >>>>>> Unfortunately, I can't test this for every platform. =/ If folks have >>>>>> dependencies on these flags that aren't covered by tests, they may >>>>>> break. I've audited and ensured that all the changes in behavior of the >>>>>> existing tests are intentional and good. In particular I've tried to >>>>>> make sure the Darwin behavior (which is more suprising than the Linux >>>>>> behavior) also matches that of 'gcc' on my mac. >>>>>> >>>>>> Modified: >>>>>> cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td >>>>>> cfe/trunk/include/clang/Driver/ToolChain.h >>>>>> cfe/trunk/lib/Driver/ToolChains.cpp >>>>>> cfe/trunk/lib/Driver/ToolChains.h >>>>>> cfe/trunk/lib/Driver/Tools.cpp >>>>>> cfe/trunk/lib/Driver/WindowsToolChain.cpp >>>>>> cfe/trunk/test/Driver/pic.c >>>>>> >>>>>> Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td >>>>>> URL: >>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td?rev=168297&r1=168296&r2=168297&view=diff >>>>>> ============================================================================== >>>>>> --- cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td (original) >>>>>> +++ cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td Sun Nov 18 >>>>>> 21:52:03 2012 >>>>>> @@ -11,6 +11,8 @@ >>>>>> >>>>>> def err_drv_no_such_file : Error<"no such file or directory: '%0'">; >>>>>> def err_drv_unsupported_opt : Error<"unsupported option '%0'">; >>>>>> +def err_drv_unsupported_opt_for_target : Error< >>>>>> + "unsupported option '%0' for target '%1'">; >>>>>> def err_drv_unsupported_option_argument : Error< >>>>>> "unsupported argument '%1' to option '%0'">; >>>>>> def err_drv_unknown_stdin_type : Error< >>>>>> >>>>>> Modified: cfe/trunk/include/clang/Driver/ToolChain.h >>>>>> URL: >>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/ToolChain.h?rev=168297&r1=168296&r2=168297&view=diff >>>>>> ============================================================================== >>>>>> --- cfe/trunk/include/clang/Driver/ToolChain.h (original) >>>>>> +++ cfe/trunk/include/clang/Driver/ToolChain.h Sun Nov 18 21:52:03 2012 >>>>>> @@ -176,14 +176,13 @@ >>>>>> /// by default. >>>>>> virtual bool IsUnwindTablesDefault() const; >>>>>> >>>>>> - /// GetDefaultRelocationModel - Return the LLVM name of the default >>>>>> - /// relocation model for this tool chain. >>>>>> - virtual const char *GetDefaultRelocationModel() const = 0; >>>>>> - >>>>>> - /// GetForcedPicModel - Return the LLVM name of the forced PIC model >>>>>> - /// for this tool chain, or 0 if this tool chain does not force a >>>>>> - /// particular PIC mode. >>>>>> - virtual const char *GetForcedPicModel() const = 0; >>>>>> + /// \brief Test whether this toolchain defaults to PIC. >>>>>> + virtual bool isPICDefault() const = 0; >>>>>> + >>>>>> + /// \brief Tests whether this toolchain forces its default for PIC or >>>>>> non-PIC. >>>>>> + /// If this returns true, any PIC related flags should be ignored and >>>>>> instead >>>>>> + /// the result of \c isPICDefault() is used exclusively. >>>>>> + virtual bool isPICDefaultForced() const = 0; >>>>>> >>>>>> /// SupportsProfiling - Does this tool chain support -pg. >>>>>> virtual bool SupportsProfiling() const { return true; } >>>>>> >>>>>> Modified: cfe/trunk/lib/Driver/ToolChains.cpp >>>>>> URL: >>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=168297&r1=168296&r2=168297&view=diff >>>>>> ============================================================================== >>>>>> --- cfe/trunk/lib/Driver/ToolChains.cpp (original) >>>>>> +++ cfe/trunk/lib/Driver/ToolChains.cpp Sun Nov 18 21:52:03 2012 >>>>>> @@ -886,14 +886,12 @@ >>>>>> getTriple().getArch() == llvm::Triple::thumb); >>>>>> } >>>>>> >>>>>> -const char *Darwin::GetDefaultRelocationModel() const { >>>>>> - return "pic"; >>>>>> +bool Darwin::isPICDefault() const { >>>>>> + return true; >>>>>> } >>>>>> >>>>>> -const char *Darwin::GetForcedPicModel() const { >>>>>> - if (getArch() == llvm::Triple::x86_64) >>>>>> - return "pic"; >>>>>> - return 0; >>>>>> +bool Darwin::isPICDefaultForced() const { >>>>>> + return getArch() == llvm::Triple::x86_64; >>>>>> } >>>>>> >>>>>> bool Darwin::SupportsProfiling() const { >>>>>> @@ -1395,13 +1393,14 @@ >>>>>> return getArch() == llvm::Triple::x86_64; >>>>>> } >>>>>> >>>>>> -const char *Generic_GCC::GetDefaultRelocationModel() const { >>>>>> - return "static"; >>>>>> +bool Generic_GCC::isPICDefault() const { >>>>>> + return false; >>>>>> } >>>>>> >>>>>> -const char *Generic_GCC::GetForcedPicModel() const { >>>>>> - return 0; >>>>>> +bool Generic_GCC::isPICDefaultForced() const { >>>>>> + return false; >>>>>> } >>>>>> + >>>>>> /// Hexagon Toolchain >>>>>> >>>>>> Hexagon_TC::Hexagon_TC(const Driver &D, const llvm::Triple& Triple) >>>>>> @@ -1455,14 +1454,13 @@ >>>>>> return *T; >>>>>> } >>>>>> >>>>>> -const char *Hexagon_TC::GetDefaultRelocationModel() const { >>>>>> - return "static"; >>>>>> +bool Hexagon_TC::isPICDefault() const { >>>>>> + return false; >>>>>> } >>>>>> >>>>>> -const char *Hexagon_TC::GetForcedPicModel() const { >>>>>> - return 0; >>>>>> -} // End Hexagon >>>>>> - >>>>>> +bool Hexagon_TC::isPICDefaultForced() const { >>>>>> + return false; >>>>>> +} >>>>>> >>>>>> /// TCEToolChain - A tool chain using the llvm bitcode tools to perform >>>>>> /// all subcommands. See http://tce.cs.tut.fi for our peculiar target. >>>>>> @@ -1487,12 +1485,12 @@ >>>>>> return true; >>>>>> } >>>>>> >>>>>> -const char *TCEToolChain::GetDefaultRelocationModel() const { >>>>>> - return "static"; >>>>>> +bool TCEToolChain::isPICDefault() const { >>>>>> + return false; >>>>>> } >>>>>> >>>>>> -const char *TCEToolChain::GetForcedPicModel() const { >>>>>> - return 0; >>>>>> +bool TCEToolChain::isPICDefaultForced() const { >>>>>> + return false; >>>>>> } >>>>>> >>>>>> Tool &TCEToolChain::SelectTool(const Compilation &C, >>>>>> >>>>>> Modified: cfe/trunk/lib/Driver/ToolChains.h >>>>>> URL: >>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=168297&r1=168296&r2=168297&view=diff >>>>>> ============================================================================== >>>>>> --- cfe/trunk/lib/Driver/ToolChains.h (original) >>>>>> +++ cfe/trunk/lib/Driver/ToolChains.h Sun Nov 18 21:52:03 2012 >>>>>> @@ -129,8 +129,8 @@ >>>>>> const ActionList &Inputs) const; >>>>>> >>>>>> virtual bool IsUnwindTablesDefault() const; >>>>>> - virtual const char *GetDefaultRelocationModel() const; >>>>>> - virtual const char *GetForcedPicModel() const; >>>>>> + virtual bool isPICDefault() const; >>>>>> + virtual bool isPICDefaultForced() const; >>>>>> >>>>>> protected: >>>>>> /// \name ToolChain Implementation Helper Functions >>>>>> @@ -156,8 +156,8 @@ >>>>>> virtual Tool &SelectTool(const Compilation &C, const JobAction &JA, >>>>>> const ActionList &Inputs) const; >>>>>> >>>>>> - virtual const char *GetDefaultRelocationModel() const; >>>>>> - virtual const char *GetForcedPicModel() const; >>>>>> + virtual bool isPICDefault() const; >>>>>> + virtual bool isPICDefaultForced() const; >>>>>> }; >>>>>> >>>>>> /// Darwin - The base Darwin tool chain. >>>>>> @@ -344,8 +344,8 @@ >>>>>> virtual RuntimeLibType GetDefaultRuntimeLibType() const { >>>>>> return ToolChain::RLT_CompilerRT; >>>>>> } >>>>>> - virtual const char *GetDefaultRelocationModel() const; >>>>>> - virtual const char *GetForcedPicModel() const; >>>>>> + virtual bool isPICDefault() const; >>>>>> + virtual bool isPICDefaultForced() const; >>>>>> >>>>>> virtual bool SupportsProfiling() const; >>>>>> >>>>>> @@ -393,7 +393,7 @@ >>>>>> std::string ComputeEffectiveClangTriple(const ArgList &Args, >>>>>> types::ID InputType) const; >>>>>> >>>>>> - virtual const char *GetDefaultRelocationModel() const { return "pic"; >>>>>> } >>>>>> + virtual bool isPICDefault() const { return false; }; >>>>>> }; >>>>>> >>>>>> class LLVM_LIBRARY_VISIBILITY Generic_ELF : public Generic_GCC { >>>>>> @@ -534,8 +534,8 @@ >>>>>> virtual Tool &SelectTool(const Compilation &C, const JobAction &JA, >>>>>> const ActionList &Inputs) const; >>>>>> bool IsMathErrnoDefault() const; >>>>>> - const char* GetDefaultRelocationModel() const; >>>>>> - const char* GetForcedPicModel() const; >>>>>> + bool isPICDefault() const; >>>>>> + bool isPICDefaultForced() const; >>>>>> >>>>>> private: >>>>>> mutable llvm::DenseMap<unsigned, Tool*> Tools; >>>>>> @@ -557,8 +557,8 @@ >>>>>> >>>>>> virtual bool IsIntegratedAssemblerDefault() const; >>>>>> virtual bool IsUnwindTablesDefault() const; >>>>>> - virtual const char *GetDefaultRelocationModel() const; >>>>>> - virtual const char *GetForcedPicModel() const; >>>>>> + virtual bool isPICDefault() const; >>>>>> + virtual bool isPICDefaultForced() const; >>>>>> >>>>>> virtual void AddClangSystemIncludeArgs(const ArgList &DriverArgs, >>>>>> ArgStringList &CC1Args) const; >>>>>> >>>>>> Modified: cfe/trunk/lib/Driver/Tools.cpp >>>>>> URL: >>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=168297&r1=168296&r2=168297&view=diff >>>>>> ============================================================================== >>>>>> --- cfe/trunk/lib/Driver/Tools.cpp (original) >>>>>> +++ cfe/trunk/lib/Driver/Tools.cpp Sun Nov 18 21:52:03 2012 >>>>>> @@ -1769,38 +1769,46 @@ >>>>>> >>>>>> CheckCodeGenerationOptions(D, Args); >>>>>> >>>>>> - // Perform argument translation for LLVM backend. This >>>>>> - // takes some care in reconciling with llvm-gcc. The >>>>>> - // issue is that llvm-gcc translates these options based on >>>>>> - // the values in cc1, whereas we are processing based on >>>>>> - // the driver arguments. >>>>>> - >>>>>> - // This comes from the default translation the driver + cc1 >>>>>> - // would do to enable flag_pic. >>>>>> - >>>>>> - Arg *LastPICArg = Args.getLastArg(options::OPT_fPIC, >>>>>> options::OPT_fno_PIC, >>>>>> - options::OPT_fpic, >>>>>> options::OPT_fno_pic); >>>>>> - // We need to check for PIE flags separately because they can >>>>>> override the >>>>>> - // PIC flags. >>>>>> - Arg *LastPIEArg = Args.getLastArg(options::OPT_fPIE, >>>>>> options::OPT_fno_PIE, >>>>>> - options::OPT_fpie, >>>>>> options::OPT_fno_pie); >>>>>> - bool PICDisabled = false; >>>>>> - bool PICEnabled = false; >>>>>> - bool PICForPIE = false; >>>>>> - if (LastPIEArg) { >>>>>> - PICForPIE = (LastPIEArg->getOption().matches(options::OPT_fPIE) || >>>>>> - LastPIEArg->getOption().matches(options::OPT_fpie)); >>>>>> - } >>>>>> - if (LastPICArg || PICForPIE) { >>>>>> - // The last PIE enabled argument can infer that PIC is enabled. >>>>>> - PICEnabled = (PICForPIE || >>>>>> - LastPICArg->getOption().matches(options::OPT_fPIC) || >>>>>> - LastPICArg->getOption().matches(options::OPT_fpic)); >>>>>> - // We need to have PICDisabled inside the if statement because on >>>>>> darwin >>>>>> - // PIC is enabled by default even if PIC arguments are not in the >>>>>> command >>>>>> - // line (in this case causes PICDisabled to be true). >>>>>> - PICDisabled = !PICEnabled; >>>>>> + // For the PIC and PIE flag options, this logic is different from the >>>>>> legacy >>>>>> + // logic in very old versions of GCC, as that logic was just a bug no >>>>>> one had >>>>>> + // ever fixed. This logic is both more rational and consistent with >>>>>> GCC's new >>>>>> + // logic now that the bugs are fixed. The last argument relating to >>>>>> either >>>>>> + // PIC or PIE wins, and no other argument is used. If the last >>>>>> argument is >>>>>> + // any flavor of the '-fno-...' arguments, both PIC and PIE are >>>>>> disabled. Any >>>>>> + // PIE option implicitly enables PIC at the same level. >>>>>> + bool PIE = false; >>>>>> + bool PIC = getToolChain().isPICDefault(); >>>>>> + bool IsPICLevelTwo = PIC; >>>>>> + if (Arg *A = Args.getLastArg(options::OPT_fPIC, options::OPT_fno_PIC, >>>>>> + options::OPT_fpic, options::OPT_fno_pic, >>>>>> + options::OPT_fPIE, options::OPT_fno_PIE, >>>>>> + options::OPT_fpie, >>>>>> options::OPT_fno_pie)) { >>>>>> + Option O = A->getOption(); >>>>>> + if (O.matches(options::OPT_fPIC) || O.matches(options::OPT_fpic) || >>>>>> + O.matches(options::OPT_fPIE) || O.matches(options::OPT_fpie)) { >>>>>> + PIE = O.matches(options::OPT_fPIE) || >>>>>> O.matches(options::OPT_fpie); >>>>>> + PIC = PIE || O.matches(options::OPT_fPIC) || >>>>>> O.matches(options::OPT_fpic); >>>>>> + IsPICLevelTwo = O.matches(options::OPT_fPIE) || >>>>>> + O.matches(options::OPT_fPIC); >>>>>> + } else { >>>>>> + PIE = PIC = false; >>>>>> + } >>>>>> } >>>>>> + // Check whether the tool chain trumps the PIC-ness decision. If the >>>>>> PIC-ness >>>>>> + // is forced, then neither PIC nor PIE flags will have no effect. >>>>>> + if (getToolChain().isPICDefaultForced()) { >>>>>> + PIE = false; >>>>>> + PIC = getToolChain().isPICDefault(); >>>>>> + IsPICLevelTwo = PIC; >>>>>> + } >>>>>> + >>>>>> + // Inroduce a Darwin-specific hack. If the default is PIC but the >>>>>> flags >>>>>> + // specified while enabling PIC enabled level 1 PIC, just force it >>>>>> back to >>>>>> + // level 2 PIC instead. This matches the behavior of Darwin GCC >>>>>> (based on my >>>>>> + // informal testing). >>>>>> + if (PIC && getToolChain().getTriple().isOSDarwin()) >>>>>> + IsPICLevelTwo |= getToolChain().isPICDefault(); >>>>>> + >>>>>> // Note that these flags are trump-cards. Regardless of the order w.r.t. >>>>>> the >>>>>> // PIC or PIE options above, if these show up, PIC is disabled. >>>>>> llvm::Triple Triple(TripleStr); >>>>>> @@ -1808,44 +1816,43 @@ >>>>>> Args.hasArg(options::OPT_fapple_kext)) && >>>>>> (Triple.getOS() != llvm::Triple::IOS || >>>>>> Triple.isOSVersionLT(6))) >>>>>> - PICDisabled = true; >>>>>> + PIC = PIE = false; >>>>>> if (Args.hasArg(options::OPT_static)) >>>>>> - PICDisabled = true; >>>>>> - bool DynamicNoPIC = Args.hasArg(options::OPT_mdynamic_no_pic); >>>>>> + PIC = PIE = false; >>>>>> + >>>>>> + if (Arg *A = Args.getLastArg(options::OPT_mdynamic_no_pic)) { >>>>>> + // This is a very special mode. It trumps the other modes, almost >>>>>> no one >>>>>> + // uses it, and it isn't even valid on any OS but Darwin. >>>>>> + if (!getToolChain().getTriple().isOSDarwin()) >>>>>> + D.Diag(diag::err_drv_unsupported_opt_for_target) >>>>>> + << A->getSpelling() << getToolChain().getTriple().str(); >>>>>> + >>>>>> + // FIXME: Warn when this flag trumps some other PIC or PIE flag. >>>>>> >>>>>> - // Select the relocation model. >>>>>> - const char *Model = getToolChain().GetForcedPicModel(); >>>>>> - if (!Model) { >>>>>> - if (DynamicNoPIC) >>>>>> - Model = "dynamic-no-pic"; >>>>>> - else if (PICDisabled) >>>>>> - Model = "static"; >>>>>> - else if (PICEnabled) >>>>>> - Model = "pic"; >>>>>> - else >>>>>> - Model = getToolChain().GetDefaultRelocationModel(); >>>>>> - } >>>>>> - StringRef ModelStr = Model ? Model : ""; >>>>>> - if (Model && ModelStr != "pic") { >>>>>> CmdArgs.push_back("-mrelocation-model"); >>>>>> - CmdArgs.push_back(Model); >>>>>> - } >>>>>> + CmdArgs.push_back("dynamic-no-pic"); >>>>>> >>>>>> - // Infer the __PIC__ and __PIE__ values. >>>>>> - if (ModelStr == "pic" && PICForPIE) { >>>>>> - CmdArgs.push_back("-pic-level"); >>>>>> - CmdArgs.push_back((LastPIEArg && >>>>>> - >>>>>> LastPIEArg->getOption().matches(options::OPT_fPIE)) ? >>>>>> - "2" : "1"); >>>>>> - CmdArgs.push_back("-pie-level"); >>>>>> - CmdArgs.push_back((LastPIEArg && >>>>>> - >>>>>> LastPIEArg->getOption().matches(options::OPT_fPIE)) ? >>>>>> - "2" : "1"); >>>>>> - } else if (ModelStr == "pic" || ModelStr == "dynamic-no-pic") { >>>>>> - CmdArgs.push_back("-pic-level"); >>>>>> - CmdArgs.push_back(((ModelStr != "dynamic-no-pic" && LastPICArg && >>>>>> - >>>>>> LastPICArg->getOption().matches(options::OPT_fPIC)) || >>>>>> - getToolChain().getTriple().isOSDarwin()) ? "2" : >>>>>> "1"); >>>>>> + // Only a forced PIC mode can cause the actual compile to have PIC >>>>>> defines >>>>>> + // etc., no flags are sufficient. This behavior was selected to >>>>>> closely >>>>>> + // match that of llvm-gcc and Apple GCC before that. >>>>>> + if (getToolChain().isPICDefault() && >>>>>> getToolChain().isPICDefaultForced()) { >>>>>> + CmdArgs.push_back("-pic-level"); >>>>>> + CmdArgs.push_back("2"); >>>>>> + } >>>>>> + } else { >>>>>> + // Currently, LLVM only knows about PIC vs. static; the PIE >>>>>> differences are >>>>>> + // handled in Clang's IRGen by the -pie-level flag. >>>>>> + CmdArgs.push_back("-mrelocation-model"); >>>>>> + CmdArgs.push_back(PIC ? "pic" : "static"); >>>>>> + >>>>>> + if (PIC) { >>>>>> + CmdArgs.push_back("-pic-level"); >>>>>> + CmdArgs.push_back(IsPICLevelTwo ? "2" : "1"); >>>>>> + if (PIE) { >>>>>> + CmdArgs.push_back("-pie-level"); >>>>>> + CmdArgs.push_back(IsPICLevelTwo ? "2" : "1"); >>>>>> + } >>>>>> + } >>>>>> } >>>>>> >>>>>> if (!Args.hasFlag(options::OPT_fmerge_all_constants, >>>>>> >>>>>> Modified: cfe/trunk/lib/Driver/WindowsToolChain.cpp >>>>>> URL: >>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/WindowsToolChain.cpp?rev=168297&r1=168296&r2=168297&view=diff >>>>>> ============================================================================== >>>>>> --- cfe/trunk/lib/Driver/WindowsToolChain.cpp (original) >>>>>> +++ cfe/trunk/lib/Driver/WindowsToolChain.cpp Sun Nov 18 21:52:03 2012 >>>>>> @@ -84,14 +84,12 @@ >>>>>> return getArch() == llvm::Triple::x86_64; >>>>>> } >>>>>> >>>>>> -const char *Windows::GetDefaultRelocationModel() const { >>>>>> - return "static"; >>>>>> +bool Windows::isPICDefault() const { >>>>>> + return getArch() == llvm::Triple::x86_64; >>>>>> } >>>>>> >>>>>> -const char *Windows::GetForcedPicModel() const { >>>>>> - if (getArch() == llvm::Triple::x86_64) >>>>>> - return "pic"; >>>>>> - return 0; >>>>>> +bool Windows::isPICDefaultForced() const { >>>>>> + return getArch() == llvm::Triple::x86_64; >>>>>> } >>>>>> >>>>>> // FIXME: This probably should goto to some platform utils place. >>>>>> >>>>>> Modified: cfe/trunk/test/Driver/pic.c >>>>>> URL: >>>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/pic.c?rev=168297&r1=168296&r2=168297&view=diff >>>>>> ============================================================================== >>>>>> --- cfe/trunk/test/Driver/pic.c (original) >>>>>> +++ cfe/trunk/test/Driver/pic.c Sun Nov 18 21:52:03 2012 >>>>>> @@ -5,28 +5,34 @@ >>>>>> // CHECK-NO-PIC-NOT: "-pic-level" >>>>>> // CHECK-NO-PIC-NOT: "-pie-level" >>>>>> // >>>>>> -// CHECK-DYNAMIC-NO-PIC1: "-mrelocation-model" "dynamic-no-pic" >>>>>> -// CHECK-DYNAMIC-NO-PIC1: "-pic-level" "1" >>>>>> -// >>>>>> -// CHECK-DYNAMIC-NO-PIC2: "-mrelocation-model" "dynamic-no-pic" >>>>>> -// CHECK-DYNAMIC-NO-PIC2: "-pic-level" "2" >>>>>> -// >>>>>> -// CHECK-PIC1-NOT: "-mrelocation-model" >>>>>> +// CHECK-PIC1: "-mrelocation-model" "pic" >>>>>> // CHECK-PIC1: "-pic-level" "1" >>>>>> // >>>>>> -// CHECK-PIC2-NOT: "-mrelocation-model" >>>>>> +// CHECK-PIC2: "-mrelocation-model" "pic" >>>>>> // CHECK-PIC2: "-pic-level" "2" >>>>>> // >>>>>> -// CHECK-PIE1-NOT: "-mrelocation-model" >>>>>> +// CHECK-PIE1: "-mrelocation-model" "pic" >>>>>> +// CHECK-PIE1: "-pic-level" "1" >>>>>> // CHECK-PIE1: "-pie-level" "1" >>>>>> // >>>>>> -// CHECK-PIE2-NOT: "-mrelocation-model" >>>>>> +// CHECK-PIE2: "-mrelocation-model" "pic" >>>>>> +// CHECK-PIE2: "-pic-level" "2" >>>>>> // CHECK-PIE2: "-pie-level" "2" >>>>>> // >>>>>> -// CHECK-PIE3: "{{.*}}ld{{(.exe)?}}" >>>>>> -// CHECK-PIE3: "-pie" >>>>>> -// CHECK-PIE3: "Scrt1.o" "crti.o" "crtbeginS.o" >>>>>> -// CHECK-PIE3: "crtendS.o" "crtn.o" >>>>>> +// CHECK-PIE-LD: "{{.*}}ld{{(.exe)?}}" >>>>>> +// CHECK-PIE-LD: "-pie" >>>>>> +// CHECK-PIE-LD: "Scrt1.o" "crti.o" "crtbeginS.o" >>>>>> +// CHECK-PIE-LD: "crtendS.o" "crtn.o" >>>>>> +// >>>>>> +// CHECK-DYNAMIC-NO-PIC-32: "-mrelocation-model" "dynamic-no-pic" >>>>>> +// CHECK-DYNAMIC-NO-PIC-32-NOT: "-pic-level" >>>>>> +// CHECK-DYNAMIC-NO-PIC-32-NOT: "-pie-level" >>>>>> +// >>>>>> +// CHECK-DYNAMIC-NO-PIC-64: "-mrelocation-model" "dynamic-no-pic" >>>>>> +// CHECK-DYNAMIC-NO-PIC-64: "-pic-level" "2" >>>>>> +// CHECK-DYNAMIC-NO-PIC-64-NOT: "-pie-level" >>>>>> +// >>>>>> +// CHECK-NON-DARWIN-DYNAMIC-NO-PIC: error: unsupported option >>>>>> '-mdynamic-no-pic' for target 'i386-unknown-unknown' >>>>>> // >>>>>> // RUN: %clang -c %s -target i386-unknown-unknown -### 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> @@ -38,107 +44,141 @@ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-PIE1 >>>>>> // RUN: %clang -c %s -target i386-unknown-unknown -fPIE -### 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-PIE2 >>>>>> +// >>>>>> +// Check that PIC and PIE flags obey last-match-wins. If the last flag >>>>>> is >>>>>> +// a no-* variant, regardless of which variant or which flags precede >>>>>> it, we >>>>>> +// get no PIC. >>>>>> // RUN: %clang -c %s -target i386-unknown-unknown -fpic -fno-pic -### >>>>>> 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fno-PIC -### >>>>>> 2>&1 \ >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fno-pic -### >>>>>> 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fpie -fno-pic -### >>>>>> 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fno-pic -### >>>>>> 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> // RUN: %clang -c %s -target i386-unknown-unknown -fpic -fno-PIC -### >>>>>> 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fno-pic -### >>>>>> 2>&1 \ >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fno-PIC -### >>>>>> 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fpie -fno-PIC -### >>>>>> 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fno-PIC -### >>>>>> 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fpic -fno-pie -### >>>>>> 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fno-pie -### >>>>>> 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> // RUN: %clang -c %s -target i386-unknown-unknown -fpie -fno-pie -### >>>>>> 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fno-PIE -### >>>>>> 2>&1 \ >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fno-pie -### >>>>>> 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fpic -fno-PIE -### >>>>>> 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fno-PIE -### >>>>>> 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> // RUN: %clang -c %s -target i386-unknown-unknown -fpie -fno-PIE -### >>>>>> 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fno-pie -### >>>>>> 2>&1 \ >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fno-PIE -### >>>>>> 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fpie -fno-pic -### >>>>>> 2>&1 \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIC1 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fpie -fno-pic -### >>>>>> 2>&1 \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIE1 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fpic -fno-pie -### >>>>>> 2>&1 \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIC1 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fpic -fPIC -### 2>&1 >>>>>> \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fpic -### 2>&1 >>>>>> \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIC1 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fpic -fPIE -fpie >>>>>> -### 2>&1 \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIE1 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fpie -fPIC -fPIE >>>>>> -### 2>&1 \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIE2 >>>>>> // >>>>>> -// Cases where both pic and pie are specified >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fpic -fpie -### 2>&1 >>>>>> \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIC1 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fpic -fpie -### 2>&1 >>>>>> \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIE1 >>>>>> +// Last-match-wins where both pic and pie are specified. >>>>>> // RUN: %clang -c %s -target i386-unknown-unknown -fpie -fpic -### 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-PIC1 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fpie -fpic -### 2>&1 >>>>>> \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIE1 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fpic -fPIE -### 2>&1 >>>>>> \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fpic -fPIE -### 2>&1 >>>>>> \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIE2 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fpie -fPIC -### 2>&1 >>>>>> \ >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fpic -### 2>&1 >>>>>> \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-PIC1 >>>>>> // RUN: %clang -c %s -target i386-unknown-unknown -fpie -fPIC -### 2>&1 \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIE1 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fpie -fPIE -### 2>&1 >>>>>> \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fpie -fPIE -### 2>&1 >>>>>> \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIE2 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fpie -### 2>&1 >>>>>> \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIC1 >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fPIC -### 2>&1 >>>>>> \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fpic -fpie -### 2>&1 >>>>>> \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIE1 >>>>>> // RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fpie -### 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-PIE1 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fPIE -### 2>&1 >>>>>> \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fpic -fPIE -### 2>&1 >>>>>> \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIE2 >>>>>> // RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fPIE -### 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-PIE2 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fpic -### 2>&1 >>>>>> \ >>>>>> +// >>>>>> +// Last-match-wins when selecting level 1 vs. level 2. >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fpic -fPIC -### 2>&1 >>>>>> \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fpic -### 2>&1 >>>>>> \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIE2 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fpie -### 2>&1 >>>>>> \ >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fPIC -fpic -### 2>&1 >>>>>> \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-PIC1 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fpie -### 2>&1 >>>>>> \ >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fpic -fPIE -fpie >>>>>> -### 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-PIE1 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fPIC -### 2>&1 >>>>>> \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -fPIE -fPIC -### 2>&1 >>>>>> \ >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -fpie -fPIC -fPIE >>>>>> -### 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-PIE2 >>>>>> // >>>>>> -// Defaults change for Darwin. >>>>>> -// RUN: %clang -c %s -target i386-apple-darwin -### 2>&1 \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> -// RUN: %clang -c %s -target i386-apple-darwin -fno-pic -### 2>&1 \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> -// RUN: %clang -c %s -target i386-apple-darwin -fno-PIC -### 2>&1 \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> -// >>>>>> // Make sure -pie is passed to along to ld and that the right *crt* files >>>>>> // are linked in. >>>>>> // RUN: %clang %s -target i386-unknown-freebsd -fPIE -pie -### \ >>>>>> // RUN: --sysroot=%S/Inputs/basic_freebsd_tree 2>&1 \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIE3 >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIE-LD >>>>>> // RUN: %clang %s -target i386-linux-gnu -fPIE -pie -### \ >>>>>> // RUN: --sysroot=%S/Inputs/basic_linux_tree 2>&1 \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-PIE3 >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIE-LD >>>>>> +// RUN: %clang %s -target i386-linux-gnu -fPIC -pie -### \ >>>>>> +// RUN: --sysroot=%S/Inputs/basic_linux_tree 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIE-LD >>>>>> // >>>>>> // Disregard any of the PIC-specific flags if we have a trump-card flag. >>>>>> // RUN: %clang -c %s -target i386-unknown-unknown -mkernel -fPIC -### >>>>>> 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> // RUN: %clang -c %s -target i386-unknown-unknown -static -fPIC -### >>>>>> 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> -// RUN: %clang -c %s -target i386-unknown-unknown -mdynamic-no-pic >>>>>> -fPIC -### 2>&1 \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC1 >>>>>> -// RUN: %clang -c %s -target i386-apple-darwin -mdynamic-no-pic -fPIC >>>>>> -### 2>&1 \ >>>>>> -// RUN: | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC2 >>>>>> - >>>>>> -// Checks for ARM >>>>>> +// >>>>>> +// Darwin is a beautiful and unique snowflake when it comes to these >>>>>> flags. >>>>>> +// When targetting a 32-bit darwin system, the -fno-* flag variants >>>>>> work and >>>>>> +// disable PIC, but any other flag enables PIC (*not* PIE) even if the >>>>>> flag >>>>>> +// specifies PIE. On 64-bit targets, there is simply nothing you can >>>>>> do, there >>>>>> +// is no PIE, there is only PIC when it comes to compilation. >>>>>> +// RUN: %clang -c %s -target i386-apple-darwin -### 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> +// RUN: %clang -c %s -target i386-apple-darwin -fpic -### 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> +// RUN: %clang -c %s -target i386-apple-darwin -fPIC -### 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> +// RUN: %clang -c %s -target i386-apple-darwin -fpie -### 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> +// RUN: %clang -c %s -target i386-apple-darwin -fPIE -### 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> +// RUN: %clang -c %s -target i386-apple-darwin -fno-PIC -### 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> +// RUN: %clang -c %s -target i386-apple-darwin -fno-PIE -### 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-NO-PIC >>>>>> +// RUN: %clang -c %s -target i386-apple-darwin -fno-PIC -fpic -### 2>&1 >>>>>> \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> +// RUN: %clang -c %s -target i386-apple-darwin -fno-PIC -fPIE -### 2>&1 >>>>>> \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> +// RUN: %clang -c %s -target x86_64-apple-darwin -fno-PIC -### 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> +// RUN: %clang -c %s -target x86_64-apple-darwin -fno-PIE -### 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> +// RUN: %clang -c %s -target x86_64-apple-darwin -fpic -### 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> +// RUN: %clang -c %s -target x86_64-apple-darwin -fPIE -### 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> +// >>>>>> +// Darwin gets even more special with '-mdynamic-no-pic'. This flag is >>>>>> only >>>>>> +// valid on Darwin, and it's behavior is very strange but needs to >>>>>> remain >>>>>> +// consistent for compatibility. >>>>>> +// RUN: %clang -c %s -target i386-unknown-unknown -mdynamic-no-pic -### >>>>>> 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-NON-DARWIN-DYNAMIC-NO-PIC >>>>>> +// RUN: %clang -c %s -target i386-apple-darwin -mdynamic-no-pic -### >>>>>> 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC-32 >>>>>> +// RUN: %clang -c %s -target i386-apple-darwin -mdynamic-no-pic >>>>>> -fno-pic -### 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC-32 >>>>>> +// RUN: %clang -c %s -target i386-apple-darwin -mdynamic-no-pic -fpie >>>>>> -### 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC-32 >>>>>> +// RUN: %clang -c %s -target x86_64-apple-darwin -mdynamic-no-pic -### >>>>>> 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC-64 >>>>>> +// RUN: %clang -c %s -target x86_64-apple-darwin -mdynamic-no-pic >>>>>> -fno-pic -### 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC-64 >>>>>> +// RUN: %clang -c %s -target x86_64-apple-darwin -mdynamic-no-pic -fpie >>>>>> -### 2>&1 \ >>>>>> +// RUN: | FileCheck %s --check-prefix=CHECK-DYNAMIC-NO-PIC-64 >>>>>> +// >>>>>> +// Checks for ARM+Apple+IOS including -fapple-kext, -mkernel, and >>>>>> iphoneos >>>>>> +// version boundaries. >>>>>> // RUN: %clang -c %s -target armv7-apple-ios -fapple-kext >>>>>> -miphoneos-version-min=6.0.0 -### 2>&1 \ >>>>>> // RUN: | FileCheck %s --check-prefix=CHECK-PIC2 >>>>>> // RUN: %clang -c %s -target armv7-apple-ios -mkernel >>>>>> -miphoneos-version-min=6.0.0 -### 2>&1 \ >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> 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 >> >> > _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
