Hi,
Can you please take a look at this, Flavio?
```
subsystem test 10;
type int64_t = MACH_MSG_TYPE_INTEGER_64;
type time_value64_t = struct {
int64_t seconds;
int64_t nanoseconds;
};
type time_value64_2_t = struct[2] of int64_t;
```
I would expect the above two definitions to equate to the same interface
structures, but on 32 bit MiG they do not:
```
Subsystem test: base = 10
Type int64_t = (MACH_MSG_TYPE_INTEGER_64, 64)
Type time_value64_t = struct [4] of (MACH_MSG_TYPE_INTEGER_32, 32)
Type time_value64_2_t = struct [2] of (MACH_MSG_TYPE_INTEGER_64, 64)
```
It seems complex_alignof = 4 is causing the structures to recompute
their member sizes. Now while the total number of bytes still matches,
on (__LP64__ && USER32) kernel with 32 bit userspace, mig_usize is
computed differently in the user32 case, thus we get a MIG_TYPE_ERROR on
some RPCs that use 64 bit types embedded in structs. For example:
gnumach-test-failure MIG_TYPE_ERROR (0xfffffed4): host_get_time64
Firstly, is this a mig bug? If so, how do we fix it?
Cheers,
Damien