[Bug middle-end/78098] error: interrupt service routine can't be called directly
marxin at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Oct 27 07:19:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78098
--- Comment #13 from Martin Liška <marxin at gcc dot gnu.org> ---
(In reply to H.J. Lu from comment #12)
> (In reply to Martin Liška from comment #10)
> > (In reply to H.J. Lu from comment #9)
> > > (In reply to Richard Biener from comment #6)
> > > > Why would we be not able to tailcall in an interupt handler?
> > >
> > > We need to verify that the only instruction in an interrupt handler
> > > is a tail call to another interrupt handler. On the other hand,
> > > this interrupt handler isn't really needed at all.
> >
> > That can be vefief by fact that the symbol should have only one call (tail
> > call) and set node->icf_merged == true.
>
> Another issue with ICF tail call:
>
> ;; Function foo1 (foo1, funcdef_no=3, decl_uid=1443, cgraph_uid=0,
> symbol_order=0)
>
> foo1 (void * p)
> {
> ;; basic block 2, loop depth 0
> ;; pred: ENTRY
> foo2 (p_2(D)); [tail call]
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^ This isn't the same as sibcall.
> return;
> ^^^^^^ Here is a return statement.
> ;; succ: EXIT
>
> }
If I remember correctly, this is gimple representation of the tail-call. If you
look at the generated binary, you'll see really just the jump instruction:
foo2:
.LFB1:
.cfi_startproc
movl $4276093056, %eax
movl $0, (%rax)
ret
.cfi_endproc
.LFE1:
.size foo2, .-foo2
.p2align 4,,15
.globl foo1
.type foo1, @function
foo1:
.LFB3:
.cfi_startproc
jmp foo2
.cfi_endproc
More information about the Gcc-bugs
mailing list