Как сделать работоспособным присваивание main?

1,00
р.
Хочу скомпилировать такой код:
void function () { puts("Hello world") }
main = function
Местами он компилируется, но при выполнении падает с ошибкой, местами не компилируется:
prog.c:5:1: error: initializer element is not computable at load time main = function ^

Как сделать, чтобы такое скомпилировалась, запустилась и не упало хоть где-нибудь?

http://ideone.com/BZMp2V - изменение void на int и добавление return 0 не помогает:
int function () { puts("Hello world") return 0 }
main = function
На ideone программы 32-битные, так что с кастом указателя в неявный int тоже не связано.

Ответ
Задание выполнено, сэр!
#include #include
void func () { puts("xa-xa-xa") exit(0) }
void *main = func
avp@wubu:hashcode$ gcc t.c --entry=func && ./a.out xa-xa-xa avp@wubu:hashcode$
Правда, пришлось добавить exit().
Без exit валится. Если посмотреть в gdb,
(gdb) layout asm
то func() завершается вот так
0x400535 pop %rbp │ 0x400536 retq │
Смотрим стек
(gdb) si (gdb) p $sp $3 = (void *) 0x7fffffffde70 (gdb) p *(0x7fffffffde70) $5 = 1 (gdb)
и видим тут лежит 1, а не нормальный адрес возврата