r290533 - Driver: warn on -fPIC/-fpic/-fPIE/-fpie on Windows

Vitaly Buka via cfe-commits cfe-commits at lists.llvm.org
Mon Dec 26 18:22:01 PST 2016


This fails here
http://lab.llvm.org:8011/builders/sanitizer-windows/builds/3537/steps/run%20tests/logs/stdio

On Sun, Dec 25, 2016 at 7:45 PM Saleem Abdulrasool via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> Author: compnerd
> Date: Sun Dec 25 21:35:24 2016
> New Revision: 290533
>
> URL: http://llvm.org/viewvc/llvm-project?rev=290533&view=rev
> Log:
> Driver: warn on -fPIC/-fpic/-fPIE/-fpie on Windows
>
> Use of these flags would result in the use of ELF-style PIE/PIC code
> which is incorrect on Windows.  Windows is inherently PIC by means of
> the DLL slide that occurs at load.  This also mirrors the behaviour on
> GCC for MinGW.  Currently, the Windows x86_64 forces the relocation
> model to PIC (Level 2).  This is unchanged for now, though we should
> remove any assumptions on that and change it to a static relocation
> model.
>
> Added:
>     cfe/trunk/test/Driver/windows-pic.cpp
> Modified:
>     cfe/trunk/lib/Driver/Tools.cpp
>
> Modified: cfe/trunk/lib/Driver/Tools.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=290533&r1=290532&r2=290533&view=diff
>
> ==============================================================================
> --- cfe/trunk/lib/Driver/Tools.cpp (original)
> +++ cfe/trunk/lib/Driver/Tools.cpp Sun Dec 25 21:35:24 2016
> @@ -3859,6 +3859,17 @@ ParsePICArgs(const ToolChain &ToolChain,
>                                      options::OPT_fpic,
> options::OPT_fno_pic,
>                                      options::OPT_fPIE,
> options::OPT_fno_PIE,
>                                      options::OPT_fpie,
> options::OPT_fno_pie);
> +  if (Triple.isOSWindows() && LastPICArg &&
> +      LastPICArg ==
> +          Args.getLastArg(options::OPT_fPIC, options::OPT_fpic,
> +                          options::OPT_fPIE, options::OPT_fpie)) {
> +    ToolChain.getDriver().Diag(diag::err_drv_unsupported_opt_for_target)
> +        << LastPICArg->getSpelling() << Triple.str();
> +    if (Triple.getArch() == llvm::Triple::x86_64)
> +      return std::make_tuple(llvm::Reloc::PIC_, 2U, false);
> +    return std::make_tuple(llvm::Reloc::Static, 0U, 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 (!ToolChain.isPICDefaultForced()) {
>
> Added: cfe/trunk/test/Driver/windows-pic.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/windows-pic.cpp?rev=290533&view=auto
>
> ==============================================================================
> --- cfe/trunk/test/Driver/windows-pic.cpp (added)
> +++ cfe/trunk/test/Driver/windows-pic.cpp Sun Dec 25 21:35:24 2016
> @@ -0,0 +1,59 @@
> +// RUN: %clang -### -target i686-windows -fPIC %s 2>&1 | FileCheck
> -check-prefix CHECK-PIC-ERROR %s
> +// RUN: %clang -### -target i686-windows -fpic %s 2>&1 | FileCheck
> -check-prefix CHECK-pic-ERROR %s
> +// RUN: %clang -### -target i686-windows -fPIE %s 2>&1 | FileCheck
> -check-prefix CHECK-PIE-ERROR %s
> +// RUN: %clang -### -target i686-windows -fpie %s 2>&1 | FileCheck
> -check-prefix CHECK-pie-ERROR %s
> +// RUN: %clang -### -target i686-windows -fPIC -fno-pic %s
> +// RUN: %clang -### -target i686-windows -Fpic -fno-pic %s
> +// RUN: %clang -### -target i686-windows -fPIE -fno-pie %s
> +// RUN: %clang -### -target i686-windows -fpie -fno-pie %s
> +
> +// RUN: %clang -### -target i686-windows-itanium -fPIC %s 2>&1 |
> FileCheck -check-prefix CHECK-PIC-ERROR %s
> +// RUN: %clang -### -target i686-windows-itanium -fpic %s 2>&1 |
> FileCheck -check-prefix CHECK-pic-ERROR %s
> +// RUN: %clang -### -target i686-windows-itanium -fPIE %s 2>&1 |
> FileCheck -check-prefix CHECK-PIE-ERROR %s
> +// RUN: %clang -### -target i686-windows-itanium -fpie %s 2>&1 |
> FileCheck -check-prefix CHECK-pie-ERROR %s
> +// RUN: %clang -### -target i686-windows-itanium -fPIC -fno-pic %s
> +// RUN: %clang -### -target i686-windows-itanium -Fpic -fno-pic %s
> +// RUN: %clang -### -target i686-windows-itanium -fPIE -fno-pie %s
> +// RUN: %clang -### -target i686-windows-itanium -fpie -fno-pie %s
> +
> +// RUN: %clang -### -target i686-windows-gnu -fPIC %s 2>&1 | FileCheck
> -check-prefix CHECK-PIC-ERROR %s
> +// RUN: %clang -### -target i686-windows-gnu -fpic %s 2>&1 | FileCheck
> -check-prefix CHECK-pic-ERROR %s
> +// RUN: %clang -### -target i686-windows-gnu -fPIE %s 2>&1 | FileCheck
> -check-prefix CHECK-PIE-ERROR %s
> +// RUN: %clang -### -target i686-windows-gnu -fpie %s 2>&1 | FileCheck
> -check-prefix CHECK-pie-ERROR %s
> +// RUN: %clang -### -target i686-windows-gnu -fPIC -fno-pic %s
> +// RUN: %clang -### -target i686-windows-gnu -Fpic -fno-pic %s
> +// RUN: %clang -### -target i686-windows-gnu -fPIE -fno-pie %s
> +// RUN: %clang -### -target i686-windows-gnu -fpie -fno-pie %s
> +
> +// RUN: %clang -### -target x86_64-windows -fPIC %s 2>&1 | FileCheck
> -check-prefix CHECK-PIC-ERROR %s
> +// RUN: %clang -### -target x86_64-windows -fpic %s 2>&1 | FileCheck
> -check-prefix CHECK-pic-ERROR %s
> +// RUN: %clang -### -target x86_64-windows -fPIE %s 2>&1 | FileCheck
> -check-prefix CHECK-PIE-ERROR %s
> +// RUN: %clang -### -target x86_64-windows -fpie %s 2>&1 | FileCheck
> -check-prefix CHECK-pie-ERROR %s
> +// RUN: %clang -### -target x86_64-windows -fPIC -fno-pic %s
> +// RUN: %clang -### -target x86_64-windows -Fpic -fno-pic %s
> +// RUN: %clang -### -target x86_64-windows -fPIE -fno-pie %s
> +// RUN: %clang -### -target x86_64-windows -fpie -fno-pie %s
> +
> +// RUN: %clang -### -target x86_64-windows-itanium -fPIC %s 2>&1 |
> FileCheck -check-prefix CHECK-PIC-ERROR %s
> +// RUN: %clang -### -target x86_64-windows-itanium -fpic %s 2>&1 |
> FileCheck -check-prefix CHECK-pic-ERROR %s
> +// RUN: %clang -### -target x86_64-windows-itanium -fPIE %s 2>&1 |
> FileCheck -check-prefix CHECK-PIE-ERROR %s
> +// RUN: %clang -### -target x86_64-windows-itanium -fpie %s 2>&1 |
> FileCheck -check-prefix CHECK-pie-ERROR %s
> +// RUN: %clang -### -target x86_64-windows-itanium -fPIC -fno-pic %s
> +// RUN: %clang -### -target x86_64-windows-itanium -Fpic -fno-pic %s
> +// RUN: %clang -### -target x86_64-windows-itanium -fPIE -fno-pie %s
> +// RUN: %clang -### -target x86_64-windows-itanium -fpie -fno-pie %s
> +
> +// RUN: %clang -### -target x86_64-windows-gnu -fPIC %s 2>&1 | FileCheck
> -check-prefix CHECK-PIC-ERROR %s
> +// RUN: %clang -### -target x86_64-windows-gnu -fpic %s 2>&1 | FileCheck
> -check-prefix CHECK-pic-ERROR %s
> +// RUN: %clang -### -target x86_64-windows-gnu -fPIE %s 2>&1 | FileCheck
> -check-prefix CHECK-PIE-ERROR %s
> +// RUN: %clang -### -target x86_64-windows-gnu -fpie %s 2>&1 | FileCheck
> -check-prefix CHECK-pie-ERROR %s
> +// RUN: %clang -### -target x86_64-windows-gnu -fPIC -fno-pic %s
> +// RUN: %clang -### -target x86_64-windows-gnu -Fpic -fno-pic %s
> +// RUN: %clang -### -target x86_64-windows-gnu -fPIE -fno-pie %s
> +// RUN: %clang -### -target x86_64-windows-gnu -fpie -fno-pie %s
> +
> +// CHECK-PIC-ERROR: unsupported option '-fPIC' for target '{{.*}}
> +// CHECK-pic-ERROR: unsupported option '-fpic' for target '{{.*}}
> +// CHECK-PIE-ERROR: unsupported option '-fPIE' for target '{{.*}}
> +// CHECK-pie-ERROR: unsupported option '-fpie' for target '{{.*}}
> +
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20161227/c3f956e5/attachment.html>


More information about the cfe-commits mailing list