1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-26 21:20:30 +02:00

Properly correct read of freed memory

This commit is contained in:
pcpa 2015-03-08 16:22:10 -03:00
parent 20955b2bfc
commit 1507bc7ee5
3 changed files with 17 additions and 7 deletions

View file

@ -1068,10 +1068,10 @@ int main(int argc, char *argv[])
@rem{/* call the generated code@comma{} passing its size as argument */}
myFunction((char*)jit_address(end) - (char*)jit_address(start));
jit_clear_state();
jit_disassemble();
jit_clear_state();
jit_destroy_state();
finish_jit();
return 0;
@ -1127,15 +1127,15 @@ call must be done after the @code{emit} call or either a fatal error
will happen (if @lightning{} is built with assertions enable) or an
undefined value will be returned.
@item jit_disassemble();
@code{disassemble} will dump the generated code to standard output,
unless @lightning{} was built with the disassembler disabled, in which
case no output will be shown.
@item jit_clear_state();
Note that @code{jit_clear_state} was called after executing jit in
this example. It was done because it must be called after any call
to @code{jit_address} or @code{jit_print}.
@item jit_disassemble();
@code{disassemble} will dump the generated code to standard output,
unless @lightning{} was built with the disassembler disabled, in which
case no output will be shown.
@end table
@node RPN calculator

View file

@ -30,10 +30,10 @@ int main(int argc, char *argv[])
/* call the generated code, passing its size as argument */
myFunction((char*)jit_address(end) - (char*)jit_address(start));
jit_clear_state();
jit_disassemble();
jit_clear_state();
jit_destroy_state();
finish_jit();
return 0;

View file

@ -832,6 +832,13 @@ jit_new_state(void)
void
_jit_clear_state(jit_state_t *_jit)
{
#if DEVEL_DISASSEMBLER
# define jit_really_clear_state() _jit_really_clear_state(_jit)
}
void _jit_really_clear_state(jit_state_t *_jit)
{
#endif
jit_word_t offset;
jit_function_t *function;
@ -889,6 +896,9 @@ _jit_clear_state(jit_state_t *_jit)
void
_jit_destroy_state(jit_state_t *_jit)
{
#if DEVEL_DISASSEMBLER
jit_really_clear_state();
#endif
if (!_jit->user_code)
munmap(_jit->code.ptr, _jit->code.length);
if (!_jit->user_data)