[PATCH, V5 1/9] gas: scfi: make scfi_state_restore_reg function more precise
Jan Beulich
jbeulich@suse.com
Mon Jul 15 06:30:29 GMT 2024
On 13.07.2024 09:38, Indu Bhagat wrote:
> [No changes in V3, V4, V5]
>
> [New in V2]
> - This patch is orthogonal to aarch64 support. It is included here
> because the testcase added for it is aarch64 specific. It is a
> bugfix really.
> [End of New in V2]
>
> When the SCFI machinery detects that a register has been restored from
> stack, it makes some state changes in the SCFI state object.
>
> Prior to the patch, scfi_state_restore_reg () was setting a value of
> (reg, CFI_IN_REG) for (base, state) respectively. This was causing
> issues in the cmp_scfi_state () function:
> - The default state of all (callee-saved) regs at the beginning of
> function is set to (0, CFI_UNDEFINED).
> - If a register is saved and restored on some control path, the state
> of reg is (reg, CFI_IN_REG) on that path.
> - On another control path where the register was perhaps not
> used (or saved/restored on stack) remains (0, CFI_UNDEFINED).
> - The two states should be treated equal, however, at the point in
> program after the register has been restored.
>
> Fix this by resetting the state to (0, CFI_UNDEFINED) in
> scfi_state_restore_reg ().
>
> A testcase (scfi-cfg-4.s) for this is added in a subsequent commit.
>
> gas/
> * scfi.c (scfi_state_restore_reg): Reset to 0, CFI_UNDEFINED
> for base, state.
Okay (just in case none was given so far).
Jan
More information about the Binutils
mailing list