diff --git a/clang/lib/Driver/ToolChains/Linux.cpp b/clang/lib/Driver/ToolChains/Linux.cpp --- a/clang/lib/Driver/ToolChains/Linux.cpp +++ b/clang/lib/Driver/ToolChains/Linux.cpp @@ -919,8 +919,9 @@ } bool Linux::isPIEDefault() const { - return (getTriple().isAndroid() && !getTriple().isAndroidVersionLT(16)) || - getTriple().isMusl() || getSanitizerArgs().requiresPIE(); + return ((getTriple().isAndroid() && !getTriple().isAndroidVersionLT(16)) || + getTriple().isMusl() || getSanitizerArgs().requiresPIE()) && + getTriple().getArch() != llvm::Triple::hexagon; } bool Linux::isNoExecStackDefault() const { diff --git a/clang/test/Driver/hexagon-toolchain-elf.c b/clang/test/Driver/hexagon-toolchain-elf.c --- a/clang/test/Driver/hexagon-toolchain-elf.c +++ b/clang/test/Driver/hexagon-toolchain-elf.c @@ -576,3 +576,21 @@ // RUN: | FileCheck -check-prefix=CHECK082 %s // CHECK082-NOT: -march= // CHECK082-NOT: -mcpu= +// ----------------------------------------------------------------------------- +// Check default relocation model +// ----------------------------------------------------------------------------- +// RUN: %clang -### -target hexagon-linux-unknown-musl \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv60 \ +// RUN: %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK083 %s +// CHECK083: "-mrelocation-model" "static" +// ----------------------------------------------------------------------------- +// Check default relocation model when -fpic is passed +// ----------------------------------------------------------------------------- +// RUN: %clang -### -target hexagon-linux-unknown-musl -fpic \ +// RUN: -ccc-install-dir %S/Inputs/hexagon_tree/Tools/bin \ +// RUN: -mcpu=hexagonv60 \ +// RUN: %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK084 %s +// CHECK084: "-mrelocation-model" "pic"