Commit 17f5f329 by Richard Kenner

(expand_computed_goto): If -fcheck-memory-usage, check that computed address of…

(expand_computed_goto): If -fcheck-memory-usage, check that computed address of a goto is executable.

(expand_computed_goto): If -fcheck-memory-usage, check that computed address
of a goto is executable.
(expand_asm, expand_asm_operands): If -fcheck-memory-usage, disallow
asm statments.

From-SVN: r14616
parent 8960ab1a
...@@ -627,6 +627,11 @@ expand_computed_goto (exp) ...@@ -627,6 +627,11 @@ expand_computed_goto (exp)
#endif #endif
emit_queue (); emit_queue ();
/* Be sure the function is executable. */
if (flag_check_memory_usage)
emit_library_call (chkr_check_exec_libfunc, 1,
VOIDmode, 1, x, ptr_mode);
do_pending_stack_adjust (); do_pending_stack_adjust ();
emit_indirect_jump (x); emit_indirect_jump (x);
} }
...@@ -1352,6 +1357,12 @@ expand_asm (body) ...@@ -1352,6 +1357,12 @@ expand_asm (body)
return; return;
} }
if (flag_check_memory_usage)
{
error ("`asm' cannot be used with `-fcheck-memory-usage'");
return;
}
if (TREE_CODE (body) == ADDR_EXPR) if (TREE_CODE (body) == ADDR_EXPR)
body = TREE_OPERAND (body, 0); body = TREE_OPERAND (body, 0);
...@@ -1404,6 +1415,12 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line) ...@@ -1404,6 +1415,12 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
return; return;
} }
if (flag_check_memory_usage)
{
error ("`asm' cannot be used with `-fcheck-memory-usage'");
return;
}
/* Count the number of meaningful clobbered registers, ignoring what /* Count the number of meaningful clobbered registers, ignoring what
we would ignore later. */ we would ignore later. */
nclobbers = 0; nclobbers = 0;
...@@ -1502,7 +1519,8 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line) ...@@ -1502,7 +1519,8 @@ expand_asm_operands (string, outputs, inputs, clobbers, vol, filename, line)
mark_addressable (TREE_VALUE (tail)); mark_addressable (TREE_VALUE (tail));
output_rtx[i] output_rtx[i]
= expand_expr (TREE_VALUE (tail), NULL_RTX, VOIDmode, 0); = expand_expr (TREE_VALUE (tail), NULL_RTX, VOIDmode,
EXPAND_MEMORY_USE_WO);
if (! allows_reg && GET_CODE (output_rtx[i]) != MEM) if (! allows_reg && GET_CODE (output_rtx[i]) != MEM)
error ("output number %d not directly addressable", i); error ("output number %d not directly addressable", i);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment