diff --git a/src/libtools/libc_net32.c b/src/libtools/libc_net32.c index 533104d2..73e660e6 100644 --- a/src/libtools/libc_net32.c +++ b/src/libtools/libc_net32.c @@ -160,7 +160,7 @@ struct i386_ifaddrs ptr_t ifa_netmask;// struct sockaddr * ptr_t ifa_ifu; // union of struct sockaddr ptr_t ifa_data; // void * -}; +} __attribute__((packed, aligned(4))); EXPORT int my32_getifaddrs(x64emu_t* emu, void** res) { @@ -197,7 +197,7 @@ struct protoent_32 ptr_t p_name; //char* ptr_t p_aliases;// char** int p_proto; -}; +} __attribute__((packed, aligned(4))); EXPORT void* my32_getprotobyname(x64emu_t* emu, void* name) { diff --git a/src/libtools/threads32.c b/src/libtools/threads32.c index cd365827..ae2a48c7 100755 --- a/src/libtools/threads32.c +++ b/src/libtools/threads32.c @@ -53,7 +53,7 @@ typedef struct threadstack_s { } threadstack_t; // longjmp / setjmp -typedef struct jump_buff_i386_s { +typedef struct __attribute__((packed, aligned(4))) jump_buff_i386_s { uint32_t save_ebx; uint32_t save_esi; uint32_t save_edi; @@ -63,7 +63,7 @@ typedef struct jump_buff_i386_s { } jump_buff_i386_t; // sigset_t should have the same size on 32bits and 64bits machine (64bits) -typedef struct __jmp_buf_tag_s { +typedef struct __attribute__((packed, aligned(4))) __jmp_buf_tag_s { jump_buff_i386_t __jmpbuf; int __mask_was_saved; sigset_t __saved_mask; @@ -75,8 +75,8 @@ typedef struct i386_unwind_buff_s { int __mask_was_saved; } __cancel_jmp_buf[1]; ptr_t __pad[2]; - void* __pad3; -} i386_unwind_buff_t __attribute__((__aligned__)); + ptr_t __pad3; +} __attribute__((packed, aligned(4))) i386_unwind_buff_t; // those are define in thread.c emuthread_t* thread_get_et(); @@ -496,7 +496,7 @@ static void del_cond(void* cond) mutex_unlock(&my_context->mutex_thread); } -typedef struct pthread_cond_2_0_s { +typedef struct __attribute__((packed, aligned(4))) pthread_cond_2_0_s { ptr_t cond; // pthread_cond_t* } pthread_cond_2_0_t;