Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -2156,9 +2156,10 @@ // Default small data limitation is eight. const char *SmallDataLimit = "8"; // Get small data limitation. - if (Args.getLastArg(options::OPT_shared, options::OPT_fpic, - options::OPT_fPIC)) { - // Not support linker relaxation for PIC. + if (Args.getLastArg(options::OPT_shared, + options::OPT_fpic, options::OPT_fPIC, + options::OPT_fpie, options::OPT_fPIE)) { + // Not support linker relaxation for PIC and PIE. SmallDataLimit = "0"; if (Args.hasArg(options::OPT_G)) { D.Diag(diag::warn_drv_unsupported_sdata); Index: clang/test/CodeGen/RISCV/riscv-sdata-module-flag.c =================================================================== --- clang/test/CodeGen/RISCV/riscv-sdata-module-flag.c +++ clang/test/CodeGen/RISCV/riscv-sdata-module-flag.c @@ -10,6 +10,8 @@ // RUN: | FileCheck %s -check-prefix=RV32-T16 // RUN: %clang -target riscv32-unknown-elf %s -S -emit-llvm -fpic -o - \ // RUN: | FileCheck %s -check-prefix=RV32-PIC +// RUN: %clang -target riscv32-unknown-elf %s -S -emit-llvm -fpie -o - \ +// RUN: | FileCheck %s -check-prefix=RV32-PIE // RUN: %clang -target riscv64-unknown-elf %s -S -emit-llvm -o - \ // RUN: | FileCheck %s -check-prefix=RV64-DEFAULT @@ -23,6 +25,8 @@ // RUN: | FileCheck %s -check-prefix=RV64-T16 // RUN: %clang -target riscv64-unknown-elf %s -S -emit-llvm -fpic -o - \ // RUN: | FileCheck %s -check-prefix=RV64-PIC +// RUN: %clang -target riscv64-unknown-elf %s -S -emit-llvm -fpie -o - \ +// RUN: | FileCheck %s -check-prefix=RV64-PIE // RUN: %clang -target riscv64-unknown-elf %s -S -emit-llvm -mcmodel=large -o - \ // RUN: | FileCheck %s -check-prefix=RV64-LARGE @@ -34,6 +38,7 @@ // RV32-S2G4: !{i32 1, !"SmallDataLimit", i32 4} // RV32-T16: !{i32 1, !"SmallDataLimit", i32 16} // RV32-PIC: !{i32 1, !"SmallDataLimit", i32 0} +// RV32-PIE: !{i32 1, !"SmallDataLimit", i32 0} // RV64-DEFAULT: !{i32 1, !"SmallDataLimit", i32 8} // RV64-G4: !{i32 1, !"SmallDataLimit", i32 4} @@ -42,6 +47,7 @@ // RV64-T16: !{i32 1, !"SmallDataLimit", i32 16} // RV64-PIC: !{i32 1, !"SmallDataLimit", i32 0} // RV64-LARGE: !{i32 1, !"SmallDataLimit", i32 0} +// RV64-PIE: !{i32 1, !"SmallDataLimit", i32 0} // The value will be passed by module flag instead of target feature. // RV32-S0-NOT: +small-data-limit=