diff options
Diffstat (limited to 'clang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r-- | clang/lib/Frontend/CompilerInvocation.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp index b9f7579..08cf0ae 100644 --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -1541,6 +1541,25 @@ void CompilerInvocation::setDefaultPointerAuthOptions( Key::ASIA, LangOpts.PointerAuthInitFiniAddressDiscrimination, Discrimination::Constant, InitFiniPointerConstantDiscriminator); } + + Opts.ObjCMethodListFunctionPointers = + PointerAuthSchema(Key::ASIA, true, Discrimination::None); + Opts.ObjCMethodListPointer = + PointerAuthSchema(Key::ASDA, true, Discrimination::Constant, + MethodListPointerConstantDiscriminator); + if (LangOpts.PointerAuthObjcIsa) { + Opts.ObjCIsaPointers = + PointerAuthSchema(Key::ASDA, true, Discrimination::Constant, + IsaPointerConstantDiscriminator); + Opts.ObjCSuperPointers = + PointerAuthSchema(Key::ASDA, true, Discrimination::Constant, + SuperPointerConstantDiscriminator); + } + + if (LangOpts.PointerAuthObjcClassROPointers) + Opts.ObjCClassROPointers = + PointerAuthSchema(Key::ASDA, true, Discrimination::Constant, + ClassROConstantDiscriminator); } Opts.ReturnAddresses = LangOpts.PointerAuthReturns; Opts.AuthTraps = LangOpts.PointerAuthAuthTraps; @@ -3573,6 +3592,12 @@ static void GeneratePointerAuthArgs(const LangOptions &Opts, GenerateArg(Consumer, OPT_fptrauth_elf_got); if (Opts.AArch64JumpTableHardening) GenerateArg(Consumer, OPT_faarch64_jump_table_hardening); + if (Opts.PointerAuthObjcIsa) + GenerateArg(Consumer, OPT_fptrauth_objc_isa); + if (Opts.PointerAuthObjcInterfaceSel) + GenerateArg(Consumer, OPT_fptrauth_objc_interface_sel); + if (Opts.PointerAuthObjcClassROPointers) + GenerateArg(Consumer, OPT_fptrauth_objc_class_ro); } static void ParsePointerAuthArgs(LangOptions &Opts, ArgList &Args, @@ -3596,6 +3621,15 @@ static void ParsePointerAuthArgs(LangOptions &Opts, ArgList &Args, Opts.PointerAuthELFGOT = Args.hasArg(OPT_fptrauth_elf_got); Opts.AArch64JumpTableHardening = Args.hasArg(OPT_faarch64_jump_table_hardening); + + Opts.PointerAuthObjcIsa = Args.hasArg(OPT_fptrauth_objc_isa); + Opts.PointerAuthObjcClassROPointers = Args.hasArg(OPT_fptrauth_objc_class_ro); + Opts.PointerAuthObjcInterfaceSel = + Args.hasArg(OPT_fptrauth_objc_interface_sel); + + if (Opts.PointerAuthObjcInterfaceSel) + Opts.PointerAuthObjcInterfaceSelKey = + static_cast<unsigned>(PointerAuthSchema::ARM8_3Key::ASDB); } /// Check if input file kind and language standard are compatible. |