<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>Neither backend would add these checks themself, it is m3cg, IR later.<br><br>> Subject: Re: [M3devel] checking function pointers for null?<br>> From: hosking@cs.purdue.edu<br>> Date: Mon, 21 Jun 2010 10:26:31 -0400<br>> CC: m3devel@elegosoft.com<br>> To: jay.krell@cornell.edu<br>> <br>> Is this code from M3CG or the Windows native backend?<br>> <br>> If from M3CG perhaps you can show us the M3CG IR code.<br>> <br>> On 21 Jun 2010, at 03:55, Jay K wrote:<br>> <br>> > <br>> > This is code that calls a function pointer:<br>> > <br>> > <br>> >         testq   %rbx, %rbx ; test function pointer for null<br>> >         je      L6<br>> >         cmpq    $-1, (%rbx) ; check for closure marker<br>> >         jne     L6  ; if not a closure, goto L6<br>> >         movq    16(%rbx), %r13 ; r13=static chain (ought to use r10?) <br>> >         movq    8(%rbx), %rax ; rax=actual function pointer<br>> >         jmp     L8<br>> > L6:<br>> >         movq    %rbx, %rax ; rax=actual function pointer<br>> > L8:<br>> >         movq    %r13, %r10 ; r10=static chain (it should have just used r10 in the first place? or is r13 otherwise the previous static chain?)<br>> >         call    *%rax<br>> > <br>> > <br>> > What is the point of the initial testq/je, if we are just going to jump to the address anyway?<br>> > Should we do something else if in fact the function pointer is null? Or just let a jump to null fail as it will?<br>> > You know -- it seems me we should do either more or less here.<br>> > More: report a null deref by calling m3_fault<br>> > Less: remove the null check <br>> > <br>> > <br>> >  - Jay<br>> >          <br>> <br>                                           </body>
</html>