From 57d4d653e8199c53202b6a2d2a8e2b6c4644448d Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Thu, 31 Oct 2013 12:10:01 +0000 Subject: [PATCH] re PR sanitizer/58543 (Invalid unpoisoning of stack redzones on ARM) 2013-10-31 Richard Sandiford Yury Gribov PR sanitizer/58543 * asan.c (asan_clear_shadow): Allocate a new vreg for temporary shadow pointer to avoid clobbering the main one. Co-Authored-By: Yury Gribov From-SVN: r204251 --- gcc/ChangeLog | 7 +++++++ gcc/asan.c | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fab5bc5c0ead..6efde54b2e6a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2013-10-31 Richard Sandiford + Yury Gribov + + PR sanitizer/58543 + * asan.c (asan_clear_shadow): Allocate a new vreg for temporary + shadow pointer to avoid clobbering the main one. + 2013-10-31 Zhenqiang Chen * lower-subreg.c (resolve_simple_move): Copy REG_INC note. diff --git a/gcc/asan.c b/gcc/asan.c index f2934b0490dd..81397198f605 100644 --- a/gcc/asan.c +++ b/gcc/asan.c @@ -898,7 +898,7 @@ asan_clear_shadow (rtx shadow_mem, HOST_WIDE_INT len) gcc_assert ((len & 3) == 0); top_label = gen_label_rtx (); - addr = force_reg (Pmode, XEXP (shadow_mem, 0)); + addr = copy_to_mode_reg (Pmode, XEXP (shadow_mem, 0)); shadow_mem = adjust_automodify_address (shadow_mem, SImode, addr, 0); end = force_reg (Pmode, plus_constant (Pmode, addr, len)); emit_label (top_label); -- 2.43.5