This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PING^3][RFC, PATCH][ASAN] Implement dynamic allocas/VLAs sanitization.
- From: Maxim Ostapenko <m dot ostapenko at samsung dot com>
- To: Andreas Schwab <schwab at linux-m68k dot org>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>, Jakub Jelinek <jakub at redhat dot com>, Marek Polacek <polacek at redhat dot com>, Yuri Gribov <tetra2005 at gmail dot com>
- Date: Tue, 11 Jul 2017 19:27:40 +0300
- Subject: Re: [PING^3][RFC, PATCH][ASAN] Implement dynamic allocas/VLAs sanitization.
- Authentication-results: sourceware.org; auth=none
- Cms-type: 201P
- References: <CGME20170517122413eucas1p12f3a6e4e478c7fc2fddf513d2e3ea199@eucas1p1.samsung.com> <591C40E9.7030307@samsung.com> <CAJOtW+7_xMykY4ak20JyZWy70oyCeC5SPb0vvdLpBOe+v8pv8A@mail.gmail.com> <59365A82.2070806@samsung.com> <593FD67C.5040607@samsung.com> <87k23ihijg.fsf@linux-m68k.org> <596330E6.6070200@samsung.com> <mvmk23faxor.fsf@suse.de> <5964DFD2.9040501@samsung.com> <mvmbmorauoa.fsf@suse.de>
On 11/07/17 17:56, Andreas Schwab wrote:
On Jul 11 2017, Maxim Ostapenko <m.ostapenko@samsung.com> wrote:
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 608993a..6437979 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -4976,9 +4976,7 @@ expand_asan_emit_allocas_unpoison (tree exp)
EXPAND_NORMAL);
rtx ret = init_one_libfunc ("__asan_allocas_unpoison");
ret = emit_library_call_value (ret, NULL_RTX, LCT_NORMAL, ptr_mode, 2, top,
- TYPE_MODE (pointer_sized_int_node),
- virtual_stack_dynamic_rtx,
- TYPE_MODE (pointer_sized_int_node));
+ ptr_mode, virtual_stack_dynamic_rtx, ptr_mode);
That doesn't work, same backtrace.
Andreas.
Ok, I see, it seems that we need to add convert in
expand_asan_emit_allocas_unpoison too. This patch seems to work for me
on aarch64 -mabi=ilp32, could you check it as well?
-Maxim
gcc/ChangeLog:
2017-07-11 Maxim Ostapenko <m.ostapenko@samsung.com>
* asan.c (asan_emit_allocas_unpoison): Use ptr_mode for arguments
during expansion.
* builtins.c (expand_asan_emit_allocas_unpoison): Likewise.
diff --git a/gcc/asan.c b/gcc/asan.c
index 95004d7..89c2731 100644
--- a/gcc/asan.c
+++ b/gcc/asan.c
@@ -1567,9 +1567,10 @@ asan_emit_allocas_unpoison (rtx top, rtx bot, rtx_insn *before)
else
start_sequence ();
rtx ret = init_one_libfunc ("__asan_allocas_unpoison");
+ top = convert_memory_address (ptr_mode, top);
+ bot = convert_memory_address (ptr_mode, bot);
ret = emit_library_call_value (ret, NULL_RTX, LCT_NORMAL, ptr_mode, 2, top,
- TYPE_MODE (pointer_sized_int_node), bot,
- TYPE_MODE (pointer_sized_int_node));
+ ptr_mode, bot, ptr_mode);
do_pending_stack_adjust ();
rtx_insn *insns = get_insns ();
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 608993a..2deef72 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -4972,13 +4972,11 @@ static rtx
expand_asan_emit_allocas_unpoison (tree exp)
{
tree arg0 = CALL_EXPR_ARG (exp, 0);
- rtx top = expand_expr (arg0, NULL_RTX, GET_MODE (virtual_stack_dynamic_rtx),
- EXPAND_NORMAL);
+ rtx top = expand_expr (arg0, NULL_RTX, ptr_mode, EXPAND_NORMAL);
+ rtx bot = convert_memory_address (ptr_mode, virtual_stack_dynamic_rtx);
rtx ret = init_one_libfunc ("__asan_allocas_unpoison");
ret = emit_library_call_value (ret, NULL_RTX, LCT_NORMAL, ptr_mode, 2, top,
- TYPE_MODE (pointer_sized_int_node),
- virtual_stack_dynamic_rtx,
- TYPE_MODE (pointer_sized_int_node));
+ ptr_mode, bot, ptr_mode);
return ret;
}