Index: lib/Driver/ToolChains/Clang.cpp =================================================================== --- lib/Driver/ToolChains/Clang.cpp +++ lib/Driver/ToolChains/Clang.cpp @@ -1799,6 +1799,14 @@ CmdArgs.push_back("-target-abi"); CmdArgs.push_back(ABIName); + + // Passing small data section limitaion if has -G flag. + if (Arg *A = Args.getLastArg(options::OPT_G)) { + StringRef v = A->getValue(); + CmdArgs.push_back("-mllvm"); + CmdArgs.push_back(Args.MakeArgString("-riscv-ssection-threshold=" + v)); + A->claim(); + } } void Clang::AddSparcTargetArgs(const ArgList &Args, Index: test/Driver/riscv-features.c =================================================================== --- test/Driver/riscv-features.c +++ test/Driver/riscv-features.c @@ -11,3 +11,9 @@ // NO-RELAX: "-target-feature" "-relax" // DEFAULT-NOT: "-target-feature" "+relax" // DEFAULT-NOT: "-target-feature" "-relax" + +/// -G +// RUN: %clang -target riscv32 -### -S %s \ +// RUN: -G 16 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-RISCV-G %s +// CHECK-RISCV-G: "-mllvm" "-riscv-ssection-threshold=16"