Segmentation fault when malloc in C

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Segmentation fault when malloc in C

Mathieu Suen-2
Hi,

When ever gst invoke my binding in C I got a Seg fault.
The code in is look like :


jit_stack *
alloc_jit_state (size_t insnSize)
{
  jit_stack * new_jit_stack;
  jit_insn * new_pc;
  new_pc = malloc (insnSize);
  new_jit_stack = malloc (sizeof (jit_stack));
  new_jit_stack->state.x.pc = new_pc;    // Line 5
  new_jit_stack->codeBuffer = new_pc;
  return new_jit_stack;
}

And my binding is set with:

  _gst_vm_proxy->defineCFunc ("lightningAllocJitState", alloc_jit_state);

Then in smalltalk I wrote the method that call the binding:

CJitState class >> primAlloc: nByte [
        "Allocate a new jit_state that hold the assembly code"
        <category: 'primitive allocation'>
        <cCall: 'lightningAllocJitState' returning: #{CJitState} args: #(#ulong)>
]

With all this I got the Seg fault and the backtrace is:

_gst_mem_alloc (h=0x28622100, sz=48) at alloc.c:226
226      blk->vSmall.avail--;
(gdb) bt
#0  _gst_mem_alloc (h=0x28622100, sz=48) at alloc.c:226
#1  0x280b7bb3 in _gst_tenure_oop (oop=0x28c08260) at oop.c:736
#2  0x280b7c19 in _gst_tenure_all_survivors () at oop.c:1692
#3  0x280b8fb0 in _gst_global_gc (next_allocation=0) at oop.c:1102
#4  0x280ba095 in _gst_scavenge () at oop.c:1269
#5  0x280b9861 in _gst_alloc_obj (size=32, p_oop=0xbfbfdf78) at oop.c:769
#6  0x280e5a07 in VMpr_Behavior_basicNewColon (id=71, numArgs=1) at dict.inl:704
#7  0x280e6401 in _gst_send_message_internal (sendSelector=0x28c01e30, sendArgs=1, receiver=0x28c02320,
    method_class=0x28c055e0) at interp.c:2699
#8  0x280ecc24 in _gst_interpret (processOOP=0x28c08260) at vm.def:713
#9  0x280f7cf0 in _gst_nvmsg_send (receiver=0x28c01800, sendSelector=0x28c08210, args=0x0, sendArgs=0)
    at interp.c:2271
#10 0x280af3a3 in _gst_execute_statements (temps=0x0, statements=0x2862712c, undeclared=UNDECLARED_TEMPORARIES,
    quiet=true) at comp.c:691
#11 0x280a0bb2 in parse_eval_definition (p=0xbfbfea70) at gst-parse.c:594
#12 0x280a222b in parse_doit (p=0xbfbfea70, fail_at_eof=Variable "fail_at_eof" is not available.
) at gst-parse.c:501
#13 0x280a2876 in parse_chunks (p=0xbfbfea70) at gst-parse.c:364
#14 0x280a2c4b in _gst_parse_chunks () at gst-parse.c:341
#15 0x280a3165 in _gst_parse_stream (method=false) at lex.c:1186
#16 0x280d1aca in _gst_process_file (fileName=0xbfbfed8f "test.st", dir=GST_DIR_ABS) at input.c:846
#17 0x08049302 in main (argc=750813184, argv=0x2cd9b000) at main.c:401

But I soon as I remove the line 5 (see the code in C) the seg fault disappear.
I don't really see why.

Thanks for the help

        Mth





       

       
               
___________________________________________________________________________
Yahoo! Mail réinvente le mail ! Découvrez le nouveau Yahoo! Mail et son interface révolutionnaire.
http://fr.mail.yahoo.com

_______________________________________________
help-smalltalk mailing list
[hidden email]
http://lists.gnu.org/mailman/listinfo/help-smalltalk
Reply | Threaded
Open this post in threaded view
|

Re: Segmentation fault when malloc in C

Mathieu Suen-2
Oops sorry there were a bug else were.
Problem solved :)

        Mth



On Jun 30, 2010, at 8:46 PM, Mathieu Suen wrote:

> Hi,
>
> When ever gst invoke my binding in C I got a Seg fault.
> The code in is look like :
>
>
> jit_stack *
> alloc_jit_state (size_t insnSize)
> {
>  jit_stack * new_jit_stack;
>  jit_insn * new_pc;
>  new_pc = malloc (insnSize);
>  new_jit_stack = malloc (sizeof (jit_stack));
>  new_jit_stack->state.x.pc = new_pc;    // Line 5
>  new_jit_stack->codeBuffer = new_pc;
>  return new_jit_stack;
> }
>
> And my binding is set with:
>
>  _gst_vm_proxy->defineCFunc ("lightningAllocJitState", alloc_jit_state);
>
> Then in smalltalk I wrote the method that call the binding:
>
> CJitState class >> primAlloc: nByte [
> "Allocate a new jit_state that hold the assembly code"
> <category: 'primitive allocation'>
> <cCall: 'lightningAllocJitState' returning: #{CJitState} args: #(#ulong)>
> ]
>
> With all this I got the Seg fault and the backtrace is:
>
> _gst_mem_alloc (h=0x28622100, sz=48) at alloc.c:226
> 226      blk->vSmall.avail--;
> (gdb) bt
> #0  _gst_mem_alloc (h=0x28622100, sz=48) at alloc.c:226
> #1  0x280b7bb3 in _gst_tenure_oop (oop=0x28c08260) at oop.c:736
> #2  0x280b7c19 in _gst_tenure_all_survivors () at oop.c:1692
> #3  0x280b8fb0 in _gst_global_gc (next_allocation=0) at oop.c:1102
> #4  0x280ba095 in _gst_scavenge () at oop.c:1269
> #5  0x280b9861 in _gst_alloc_obj (size=32, p_oop=0xbfbfdf78) at oop.c:769
> #6  0x280e5a07 in VMpr_Behavior_basicNewColon (id=71, numArgs=1) at dict.inl:704
> #7  0x280e6401 in _gst_send_message_internal (sendSelector=0x28c01e30, sendArgs=1, receiver=0x28c02320,
>    method_class=0x28c055e0) at interp.c:2699
> #8  0x280ecc24 in _gst_interpret (processOOP=0x28c08260) at vm.def:713
> #9  0x280f7cf0 in _gst_nvmsg_send (receiver=0x28c01800, sendSelector=0x28c08210, args=0x0, sendArgs=0)
>    at interp.c:2271
> #10 0x280af3a3 in _gst_execute_statements (temps=0x0, statements=0x2862712c, undeclared=UNDECLARED_TEMPORARIES,
>    quiet=true) at comp.c:691
> #11 0x280a0bb2 in parse_eval_definition (p=0xbfbfea70) at gst-parse.c:594
> #12 0x280a222b in parse_doit (p=0xbfbfea70, fail_at_eof=Variable "fail_at_eof" is not available.
> ) at gst-parse.c:501
> #13 0x280a2876 in parse_chunks (p=0xbfbfea70) at gst-parse.c:364
> #14 0x280a2c4b in _gst_parse_chunks () at gst-parse.c:341
> #15 0x280a3165 in _gst_parse_stream (method=false) at lex.c:1186
> #16 0x280d1aca in _gst_process_file (fileName=0xbfbfed8f "test.st", dir=GST_DIR_ABS) at input.c:846
> #17 0x08049302 in main (argc=750813184, argv=0x2cd9b000) at main.c:401
>
> But I soon as I remove the line 5 (see the code in C) the seg fault disappear.
> I don't really see why.
>
> Thanks for the help
>
> Mth
>
>
>
>
>
>
>
>
>
> ___________________________________________________________________________
> Yahoo! Mail réinvente le mail ! Découvrez le nouveau Yahoo! Mail et son interface révolutionnaire.
> http://fr.mail.yahoo.com
>
> _______________________________________________
> help-smalltalk mailing list
> [hidden email]
> http://lists.gnu.org/mailman/listinfo/help-smalltalk


       

       
               
___________________________________________________________________________
Yahoo! Mail réinvente le mail ! Découvrez le nouveau Yahoo! Mail et son interface révolutionnaire.
http://fr.mail.yahoo.com

_______________________________________________
help-smalltalk mailing list
[hidden email]
http://lists.gnu.org/mailman/listinfo/help-smalltalk