diff options
author | Anton Korobeynikov <anton@korobeynikov.info> | 2019-01-25 09:41:20 +0000 |
---|---|---|
committer | Anton Korobeynikov <anton@korobeynikov.info> | 2019-01-25 09:41:20 +0000 |
commit | 56bf7b56dcb2796525e9d1aa5e735de8495f44cd (patch) | |
tree | 70b20e0bb0b685f01131d1bd03a20749a579bf0a /clang | |
parent | 2a1f300bb54473f3b38bba63291eb584bd4f7c1d (diff) | |
download | bcm5719-llvm-56bf7b56dcb2796525e9d1aa5e735de8495f44cd.tar.gz bcm5719-llvm-56bf7b56dcb2796525e9d1aa5e735de8495f44cd.zip |
Disable PIC/PIE for MSP430 target by default.
Relocatable code generation is meaningless on MSP430, as the platform is too small to use shared libraries.
Patch by Dmitry Mikushev!
Differential Revision: https://reviews.llvm.org/D56927
llvm-svn: 352181
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Driver/ToolChains/MSP430.h | 4 | ||||
-rw-r--r-- | clang/test/CodeGen/msp430-reloc.c | 29 |
2 files changed, 33 insertions, 0 deletions
diff --git a/clang/lib/Driver/ToolChains/MSP430.h b/clang/lib/Driver/ToolChains/MSP430.h index 61fd0e1455b..b5308a8dd68 100644 --- a/clang/lib/Driver/ToolChains/MSP430.h +++ b/clang/lib/Driver/ToolChains/MSP430.h @@ -36,6 +36,10 @@ public: llvm::opt::ArgStringList &CC1Args, Action::OffloadKind) const override; + bool isPICDefault() const override { return false; } + bool isPIEDefault() const override { return false; } + bool isPICDefaultForced() const override { return true; } + protected: Tool *buildLinker() const override; diff --git a/clang/test/CodeGen/msp430-reloc.c b/clang/test/CodeGen/msp430-reloc.c new file mode 100644 index 00000000000..c69e8e64af8 --- /dev/null +++ b/clang/test/CodeGen/msp430-reloc.c @@ -0,0 +1,29 @@ +// RUN: %clang -target msp430 -fPIC -S %s -o - | FileCheck %s + +// Check the compilation does not crash as it was crashing before with "-fPIC" enabled + +void *alloca(unsigned int size); + +// CHECK: .globl foo +short foo(char** data, char encoding) +{ + char* encoding_addr = alloca(sizeof(char)); + *encoding_addr = encoding; + + char tmp3 = *encoding_addr; + short conv2 = tmp3; + short and = conv2 & 0xf; + + switch (and) + { + case 0 : + case 4 : + case 10 : + return 1; + case 11 : + return 2; + } + + return 0; +} + |