Skip to content

Commit

Permalink
strub: Only unbias stack point for SPARC_STACK_BOUNDARY_HACK [PR113100]
Browse files Browse the repository at this point in the history
As PR113100 shows, the unbiasing introduced by r14-6737 can
cause the scrubbing to overrun and screw some critical data
on stack like saved toc base consequently cause segfault.

By checking PR112917, IMHO we should keep this unbiasing
guarded under SPARC_STACK_BOUNDARY_HACK (TARGET_ARCH64 &&
TARGET_STACK_BIAS), similar to some existing code special
treating SPARC stack bias.

	PR middle-end/113100

gcc/ChangeLog:

	* builtins.cc (expand_builtin_stack_address): Guard stack point
	adjustment with SPARC_STACK_BOUNDARY_HACK.
  • Loading branch information
jedilyn authored and Liaoshihua committed Mar 13, 2024
1 parent ba36d15 commit 1281929
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion gcc/builtins.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5450,6 +5450,7 @@ expand_builtin_stack_address ()
rtx ret = convert_to_mode (ptr_mode, copy_to_reg (stack_pointer_rtx),
STACK_UNSIGNED);

#ifdef SPARC_STACK_BOUNDARY_HACK
/* Unbias the stack pointer, bringing it to the boundary between the
stack area claimed by the active function calling this builtin,
and stack ranges that could get clobbered if it called another
Expand All @@ -5476,7 +5477,9 @@ expand_builtin_stack_address ()
(caller) function's active area as well, whereas those pushed or
allocated temporarily for a call are regarded as part of the
callee's stack range, rather than the caller's. */
ret = plus_constant (ptr_mode, ret, STACK_POINTER_OFFSET);
if (SPARC_STACK_BOUNDARY_HACK)
ret = plus_constant (ptr_mode, ret, STACK_POINTER_OFFSET);
#endif

return force_reg (ptr_mode, ret);
}
Expand Down

0 comments on commit 1281929

Please sign in to comment.