@@ -3604,7 +3604,8 @@ static void RenderSSPOptions(const Driver &D, const ToolChain &TC,
3604
3604
if (Arg *A = Args.getLastArg (options::OPT_mstack_protector_guard_EQ)) {
3605
3605
StringRef Value = A->getValue ();
3606
3606
if (!EffectiveTriple.isX86 () && !EffectiveTriple.isAArch64 () &&
3607
- !EffectiveTriple.isARM () && !EffectiveTriple.isThumb ())
3607
+ !EffectiveTriple.isARM () && !EffectiveTriple.isThumb () &&
3608
+ !EffectiveTriple.isRISCV ())
3608
3609
D.Diag (diag::err_drv_unsupported_opt_for_target)
3609
3610
<< A->getAsString (Args) << TripleStr;
3610
3611
if ((EffectiveTriple.isX86 () || EffectiveTriple.isARM () ||
@@ -3644,13 +3645,28 @@ static void RenderSSPOptions(const Driver &D, const ToolChain &TC,
3644
3645
<< A->getOption ().getName () << Value << " sysreg global" ;
3645
3646
return ;
3646
3647
}
3648
+ if (EffectiveTriple.isRISCV ()) {
3649
+ if (Value != " tls" && Value != " global" ) {
3650
+ D.Diag (diag::err_drv_invalid_value_with_suggestion)
3651
+ << A->getOption ().getName () << Value << " tls global" ;
3652
+ return ;
3653
+ }
3654
+ if (Value == " tls" ) {
3655
+ if (!Args.hasArg (options::OPT_mstack_protector_guard_offset_EQ)) {
3656
+ D.Diag (diag::err_drv_ssp_missing_offset_argument)
3657
+ << A->getAsString (Args);
3658
+ return ;
3659
+ }
3660
+ }
3661
+ }
3647
3662
A->render (Args, CmdArgs);
3648
3663
}
3649
3664
3650
3665
if (Arg *A = Args.getLastArg (options::OPT_mstack_protector_guard_offset_EQ)) {
3651
3666
StringRef Value = A->getValue ();
3652
3667
if (!EffectiveTriple.isX86 () && !EffectiveTriple.isAArch64 () &&
3653
- !EffectiveTriple.isARM () && !EffectiveTriple.isThumb ())
3668
+ !EffectiveTriple.isARM () && !EffectiveTriple.isThumb () &&
3669
+ !EffectiveTriple.isRISCV ())
3654
3670
D.Diag (diag::err_drv_unsupported_opt_for_target)
3655
3671
<< A->getAsString (Args) << TripleStr;
3656
3672
int Offset;
@@ -3669,7 +3685,8 @@ static void RenderSSPOptions(const Driver &D, const ToolChain &TC,
3669
3685
3670
3686
if (Arg *A = Args.getLastArg (options::OPT_mstack_protector_guard_reg_EQ)) {
3671
3687
StringRef Value = A->getValue ();
3672
- if (!EffectiveTriple.isX86 () && !EffectiveTriple.isAArch64 ())
3688
+ if (!EffectiveTriple.isX86 () && !EffectiveTriple.isAArch64 () &&
3689
+ !EffectiveTriple.isRISCV ())
3673
3690
D.Diag (diag::err_drv_unsupported_opt_for_target)
3674
3691
<< A->getAsString (Args) << TripleStr;
3675
3692
if (EffectiveTriple.isX86 () && (Value != " fs" && Value != " gs" )) {
@@ -3681,6 +3698,11 @@ static void RenderSSPOptions(const Driver &D, const ToolChain &TC,
3681
3698
D.Diag (diag::err_drv_invalid_value) << A->getOption ().getName () << Value;
3682
3699
return ;
3683
3700
}
3701
+ if (EffectiveTriple.isRISCV () && Value != " tp" ) {
3702
+ D.Diag (diag::err_drv_invalid_value_with_suggestion)
3703
+ << A->getOption ().getName () << Value << " tp" ;
3704
+ return ;
3705
+ }
3684
3706
A->render (Args, CmdArgs);
3685
3707
}
3686
3708
0 commit comments