This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PING^3][RFC, PATCH][ASAN] Implement dynamic allocas/VLAs sanitization.​


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;
 }
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]