Thanks.

On Oct 20, 2023, Richard Biener <richard.guent...@gmail.com> wrote:

>> for  gcc/ada/ChangeLog
>> 
>> * gcc-interface/trans.cc (gigi): Mark __gnat_reraise_zcx with
>> ECF_XTHROW.
>> (build_raise_check): Likewise for all rcheck subprograms.
>> * gcc-interface/utils.cc (handle_expected_throw_attribute):
>> New.
>> (gnat_internal_attribute_table): Add expected_throw.
>> * libgnat/a-except.ads (Raise_Exception): Mark expected_throw.
>> (Reraise_Occurrence): Likewise.
>> (Raise_Exception_Always): Likewise.
>> (Raise_From_Controlled_Operation): Likewise.
>> (Reraise_Occurrence_Always): Likewise.
>> (Reraise_Occurrence_No_Defer): Likewise.
>> * libgnat/a-except.adb
>> (Exception_Propagation.Propagate_Exception): Likewise.
>> (Complete_And_Propagate_Occurrence): Likewise.
>> (Raise_Exception_No_Defer): Likewise.
>> (Raise_From_Signal_Handler): Likewise.
>> (Raise_With_Msg): Likewise.
>> (Raise_With_Location_And_Msg): Likewise.
>> (Raise_Constraint_Error): Likewise.
>> (Raise_Constraint_Error_Msg): Likewise.
>> (Raise_Program_Error): Likewise.
>> (Raise_Program_Error_Msg): Likewise.
>> (Raise_Storage_Error): Likewise.
>> (Raise_Storage_Error_Msg): Likewise.
>> (Reraise, Rcheck_*): Likewise.
>> * doc/gnat_rm/security_hardening_features.rst (Control Flow
>> Redundancy): Add -fhardcfr-check-noreturn-calls=no-xthrow.
>> Note the influence of expected_throw.  Document
>> -fhardcfr-skip-leaf.

Some of the above changes had already been contributed, but I had meant
to keep these in the commit message, but the ChangeLog checker wouldn't
let me.

I also had some typos in testsuite filenames in the ChangeLog entries.

Since the patch is big, I'm not posting it all again, but here's the
corrected set of ChangeLog entries that went in along with it:

for  gcc/ChangeLog

        * tree-core.h (ECF_XTHROW): New macro.
        * tree.cc (set_call_expr): Add expected_throw attribute when
        ECF_XTHROW is set.
        (build_common_builtin_node): Add ECF_XTHROW to
        __cxa_end_cleanup and _Unwind_Resume or _Unwind_SjLj_Resume.
        * calls.cc (flags_from_decl_or_type): Check for expected_throw
        attribute to set ECF_XTHROW.
        * gimple.cc (gimple_build_call_from_tree): Propagate
        ECF_XTHROW from decl flags to gimple call...
        (gimple_call_flags): ... and back.
        * gimple.h (GF_CALL_XTHROW): New gf_mask flag.
        (gimple_call_set_expected_throw): New.
        (gimple_call_expected_throw_p): New.
        * Makefile.in (OBJS): Add gimple-harden-control-flow.o.
        * builtins.def (BUILT_IN___HARDCFR_CHECK): New.
        * common.opt (fharden-control-flow-redundancy): New.
        (-fhardcfr-check-returning-calls): New.
        (-fhardcfr-check-exceptions): New.
        (-fhardcfr-check-noreturn-calls=*): New.
        (Enum hardcfr_check_noreturn_calls): New.
        (fhardcfr-skip-leaf): New.
        * doc/invoke.texi: Document them.
        (hardcfr-max-blocks, hardcfr-max-inline-blocks): New params.
        * flag-types.h (enum hardcfr_noret): New.
        * gimple-harden-control-flow.cc: New.
        * params.opt (-param=hardcfr-max-blocks=): New.
        (-param=hradcfr-max-inline-blocks=): New.
        * passes.def (pass_harden_control_flow_redundancy): Add.
        * tree-pass.h (make_pass_harden_control_flow_redundancy):
        Declare.
        * doc/extend.texi: Document expected_throw attribute.

for  gcc/ada/ChangeLog

        * gcc-interface/trans.cc (gigi): Mark __gnat_reraise_zcx with
        ECF_XTHROW.
        (build_raise_check): Likewise for all rcheck subprograms.

for  gcc/c-family/ChangeLog

        * c-attribs.cc (handle_expected_throw_attribute): New.
        (c_common_attribute_table): Add expected_throw.

for  gcc/cp/ChangeLog

        * decl.cc (push_throw_library_fn): Mark with ECF_XTHROW.
        * except.cc (build_throw): Likewise __cxa_throw,
        _ITM_cxa_throw, __cxa_rethrow.

for  gcc/testsuite/ChangeLog

        * c-c++-common/torture/harden-cfr.c: New.
        * c-c++-common/harden-cfr-noret-never-O0.c: New.
        * c-c++-common/torture/harden-cfr-noret-never.c: New.
        * c-c++-common/torture/harden-cfr-noret-noexcept.c: New.
        * c-c++-common/torture/harden-cfr-noret-nothrow.c: New.
        * c-c++-common/torture/harden-cfr-noret.c: New.
        * c-c++-common/torture/harden-cfr-notail.c: New.
        * c-c++-common/torture/harden-cfr-returning.c: New.
        * c-c++-common/torture/harden-cfr-tail.c: New.
        * c-c++-common/torture/harden-cfr-abrt-always.c: New.
        * c-c++-common/torture/harden-cfr-abrt-never.c: New.
        * c-c++-common/torture/harden-cfr-abrt-no-xthrow.c: New.
        * c-c++-common/torture/harden-cfr-abrt-nothrow.c: New.
        * c-c++-common/torture/harden-cfr-abrt.c: New.
        * c-c++-common/torture/harden-cfr-always.c: New.
        * c-c++-common/torture/harden-cfr-never.c: New.
        * c-c++-common/torture/harden-cfr-no-xthrow.c: New.
        * c-c++-common/torture/harden-cfr-nothrow.c: New.
        * c-c++-common/torture/harden-cfr-bret-always.c: New.
        * c-c++-common/torture/harden-cfr-bret-never.c: New.
        * c-c++-common/torture/harden-cfr-bret-noopt.c: New.
        * c-c++-common/torture/harden-cfr-bret-noret.c: New.
        * c-c++-common/torture/harden-cfr-bret-no-xthrow.c: New.
        * c-c++-common/torture/harden-cfr-bret-nothrow.c: New.
        * c-c++-common/torture/harden-cfr-bret-retcl.c: New.
        * c-c++-common/torture/harden-cfr-bret.c: New.
        * g++.dg/harden-cfr-throw-always-O0.C: New.
        * g++.dg/harden-cfr-throw-returning-O0.C: New.
        * g++.dg/torture/harden-cfr-noret-always-no-nothrow.C: New.
        * g++.dg/torture/harden-cfr-noret-never-no-nothrow.C: New.
        * g++.dg/torture/harden-cfr-noret-no-nothrow.C: New.
        * g++.dg/torture/harden-cfr-throw-always.C: New.
        * g++.dg/torture/harden-cfr-throw-never.C: New.
        * g++.dg/torture/harden-cfr-throw-no-xthrow.C: New.
        * g++.dg/torture/harden-cfr-throw-no-xthrow-expected.C: New.
        * g++.dg/torture/harden-cfr-throw-nothrow.C: New.
        * g++.dg/torture/harden-cfr-throw-nocleanup.C: New.
        * g++.dg/torture/harden-cfr-throw-returning.C: New.
        * g++.dg/torture/harden-cfr-throw.C: New.
        * gcc.dg/torture/harden-cfr-noret-no-nothrow.c: New.
        * gcc.dg/torture/harden-cfr-tail-ub.c: New.
        * gnat.dg/hardcfr.adb: New.

for  libgcc/ChangeLog

        * Makefile.in (LIB2ADD): Add hardcfr.c.
        * hardcfr.c: New.

-- 
Alexandre Oliva, happy hacker            https://FSFLA.org/blogs/lxo/
   Free Software Activist                   GNU Toolchain Engineer
More tolerance and less prejudice are key for inclusion and diversity
Excluding neuro-others for not behaving ""normal"" is *not* inclusive

Reply via email to