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

Saleem Abdulrasool via cfe-commits cfe-commits at lists.llvm.org
Mon Dec 26 19:27:20 PST 2016


On Mon, Dec 26, 2016 at 6:22 PM, Vitaly Buka <vitalybuka at google.com> wrote:

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

Thanks for letting me know.  Should be addressed in SVN r290571.


>
> 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
>>
>


-- 
Saleem Abdulrasool
compnerd (at) compnerd (dot) org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20161226/be3fa033/attachment-0001.html>


More information about the cfe-commits mailing list