[LLVMdev] direct calls to inttoptr constants

Tobias ubub at gmx.net
Tue Feb 10 04:51:50 PST 2009


I'm compiling code which contains indirect function calls
via their absolute addresses, which are known/fixed at compile-time:

pseudo c code:
int main() {
int (* f)(int) = (int (*)(int))12345678;
return (*f)(0);
}

the IR looks like:
define i32 @main() nounwind {
entry:
%0 = tail call i32 inttoptr (i64 12345678 to i32 (i32)*)(i32 0) nounwind
ret i32 %0
}

on X86 llc 2.4 compiles this to:
 .text
 .align 16
 .globl main
 .type main, at function
main:
 subl $4, %esp
 movl $0, (%esp)
 movl $12345678, %eax
 call *%eax
 addl $4, %esp
 ret
 .size main, .-main

 .section .note.GNU-stack,"", at progbits

take a look at:
movl $12345678, %eax
call *%eax

does anyone know a way to cause llc to call the address directly?
hints where to start patching the codegen are also welcome.

expected assembly:
call *12345678

best regards
tobias




More information about the llvm-dev mailing list