Hi,

I was experimenting with gtk3 a bit and a simple program was failing to
execute properly.

It's very simple:

gtk_init(@argc, @argv);

WType := gtk_window_get_type();

WinClass := g_type_class_ref( WType );

assembler is like so:
WType is -0x20(%rbp)

1 00000000004AD18E e875eafeff  callq  0x49bc08 <gtk_init@plt>
2 00000000004AD193 e8a0e5ffff  callq  0x4ab738 <gtk_window_get_type@plt>
3 00000000004AD198 488945e0    mov    %rax,-0x20(%rbp)
4 00000000004AD19C 488b75e0    mov    -0x20(%rbp),%rsi
5 00000000004AD1A0 488d7dd8    lea    -0x28(%rbp),%rdi
6 00000000004AD1A4 e85f4bffff  callq  0x4a1d08 <g_type_class_ref@plt>
7 00000000004AD1A9 488b45d8    mov    -0x28(%rbp),%rax
8 00000000004AD1AD 488945f0    mov    %rax,-0x10(%rbp)
9 00000000004AD1B1 488b45f0    mov    -0x10(%rbp),%rax

shouldn't line 4 be "mov    -0x20(%rbp),%rdi"
Line 5 shouldn't be there?
Line 7 overwrites the returned value before we've copied it anywhere?

Here's part of the assembly fpc generated:

# [39] begin
        subq    $280,%rsp
.Lc7:
# Var Win located in register rax
# Var WinClass located in register rax
# Var P2 located in register rsi
# Var WType located in register rsi
        movq    %rbx,264(%rsp)
        movq    %r12,272(%rsp)
.Ll12:
# [40] gtk_init(@argc, @argv);
        movq    $operatingsystem_parameter_argv,%rsi
        movq    $operatingsystem_parameter_argc,%rdi
        call    gtk_init
.Ll13:
# [41] WType := gtk_window_get_type();
        call    gtk_window_get_type
        movq    %rax,%rsi
.Ll14:
# [42] WinClass:=PGtkWindowClass(g_type_class_ref(WType));
        movq    %rsp,%rdi
        call    g_type_class_ref
        movq    (%rsp),%rax

I've got the same problem with fpc 2.5.1 and 2.7.1. I'll try 2.4.4 as
soon as it's downloaded.

Same result with 2.4.4

Regards,

Andrew Haines
        

_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to