mailing list of musl libc
 help / color / mirror / code / Atom feed
* stat64 on mips
@ 2013-12-30 18:20 Justin Cormack
  2013-12-30 21:29 ` Rich Felker
  0 siblings, 1 reply; 8+ messages in thread
From: Justin Cormack @ 2013-12-30 18:20 UTC (permalink / raw)
  To: musl

MIPS is the most confusing architecture, but as far as I can make out,
the definition of struct stat64 that Musl has is probably the right
one for mips n32 but wrong for mips o32 which should be

struct stat {
  unsigned long   st_dev;
  unsigned long   __st_pad0[3];
  unsigned long long      st_ino;
  mode_t          st_mode;
  nlink_t         st_nlink;
  uid_t           st_uid;
  gid_t           st_gid;
  unsigned long   st_rdev;
  unsigned long   __st_pad1[3];
  long long       st_size;
  time_t          st_atime;
  unsigned long   st_atime_nsec;
  time_t          st_mtime;
  unsigned long   st_mtime_nsec;
  time_t          st_ctime;
  unsigned long   st_ctime_nsec;
  unsigned long   st_blksize;
  unsigned long   __st_pad2;
  long long       st_blocks;
};

It does appear that the syscalls for the two ABIs differ in this...

Justin


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: stat64 on mips
  2013-12-30 18:20 stat64 on mips Justin Cormack
@ 2013-12-30 21:29 ` Rich Felker
  2013-12-30 22:02   ` Justin Cormack
  0 siblings, 1 reply; 8+ messages in thread
From: Rich Felker @ 2013-12-30 21:29 UTC (permalink / raw)
  To: musl

On Mon, Dec 30, 2013 at 06:20:46PM +0000, Justin Cormack wrote:
> MIPS is the most confusing architecture, but as far as I can make out,
> the definition of struct stat64 that Musl has is probably the right
> one for mips n32 but wrong for mips o32 which should be
> 
> struct stat {
>   unsigned long   st_dev;
>   unsigned long   __st_pad0[3];
>   unsigned long long      st_ino;
>   mode_t          st_mode;
>   nlink_t         st_nlink;
>   uid_t           st_uid;
>   gid_t           st_gid;
>   unsigned long   st_rdev;
>   unsigned long   __st_pad1[3];
>   long long       st_size;
>   time_t          st_atime;
>   unsigned long   st_atime_nsec;
>   time_t          st_mtime;
>   unsigned long   st_mtime_nsec;
>   time_t          st_ctime;
>   unsigned long   st_ctime_nsec;
>   unsigned long   st_blksize;
>   unsigned long   __st_pad2;
>   long long       st_blocks;
> };
> 
> It does appear that the syscalls for the two ABIs differ in this...

This structure is identical to the one in musl except that it has
32-bit dev_t plus padding in place of 64-bit dev_t, and the musl
version has reserved space at the end. Can you check whether the dev_t
issue is actually a problem (it might be, based on endianness, and if
so I think it would require ugly fixups in userspace)?

Rich


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: stat64 on mips
  2013-12-30 21:29 ` Rich Felker
@ 2013-12-30 22:02   ` Justin Cormack
  2013-12-30 22:03     ` Rich Felker
  0 siblings, 1 reply; 8+ messages in thread
From: Justin Cormack @ 2013-12-30 22:02 UTC (permalink / raw)
  To: musl

On Mon, Dec 30, 2013 at 9:29 PM, Rich Felker <dalias@aerifal.cx> wrote:
> On Mon, Dec 30, 2013 at 06:20:46PM +0000, Justin Cormack wrote:
>> MIPS is the most confusing architecture, but as far as I can make out,
>> the definition of struct stat64 that Musl has is probably the right
>> one for mips n32 but wrong for mips o32 which should be
>>
>> struct stat {
>>   unsigned long   st_dev;
>>   unsigned long   __st_pad0[3];
>>   unsigned long long      st_ino;
>>   mode_t          st_mode;
>>   nlink_t         st_nlink;
>>   uid_t           st_uid;
>>   gid_t           st_gid;
>>   unsigned long   st_rdev;
>>   unsigned long   __st_pad1[3];
>>   long long       st_size;
>>   time_t          st_atime;
>>   unsigned long   st_atime_nsec;
>>   time_t          st_mtime;
>>   unsigned long   st_mtime_nsec;
>>   time_t          st_ctime;
>>   unsigned long   st_ctime_nsec;
>>   unsigned long   st_blksize;
>>   unsigned long   __st_pad2;
>>   long long       st_blocks;
>> };
>>
>> It does appear that the syscalls for the two ABIs differ in this...
>
> This structure is identical to the one in musl except that it has
> 32-bit dev_t plus padding in place of 64-bit dev_t, and the musl
> version has reserved space at the end. Can you check whether the dev_t
> issue is actually a problem (it might be, based on endianness, and if
> so I think it would require ugly fixups in userspace)?

Ah no, my mistake, you are right, the padding seems correct and I was
getting confused as usual by dev_t. However the 64 bit dev_t is a
problem on bigendian mips.

(Whats the reason for Musl using 64 bit dev_t? glibc compatibility?)

justin


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: stat64 on mips
  2013-12-30 22:02   ` Justin Cormack
@ 2013-12-30 22:03     ` Rich Felker
  2013-12-30 22:10       ` Justin Cormack
  0 siblings, 1 reply; 8+ messages in thread
From: Rich Felker @ 2013-12-30 22:03 UTC (permalink / raw)
  To: musl

On Mon, Dec 30, 2013 at 10:02:19PM +0000, Justin Cormack wrote:
> On Mon, Dec 30, 2013 at 9:29 PM, Rich Felker <dalias@aerifal.cx> wrote:
> > On Mon, Dec 30, 2013 at 06:20:46PM +0000, Justin Cormack wrote:
> >> MIPS is the most confusing architecture, but as far as I can make out,
> >> the definition of struct stat64 that Musl has is probably the right
> >> one for mips n32 but wrong for mips o32 which should be
> >>
> >> struct stat {
> >>   unsigned long   st_dev;
> >>   unsigned long   __st_pad0[3];
> >>   unsigned long long      st_ino;
> >>   mode_t          st_mode;
> >>   nlink_t         st_nlink;
> >>   uid_t           st_uid;
> >>   gid_t           st_gid;
> >>   unsigned long   st_rdev;
> >>   unsigned long   __st_pad1[3];
> >>   long long       st_size;
> >>   time_t          st_atime;
> >>   unsigned long   st_atime_nsec;
> >>   time_t          st_mtime;
> >>   unsigned long   st_mtime_nsec;
> >>   time_t          st_ctime;
> >>   unsigned long   st_ctime_nsec;
> >>   unsigned long   st_blksize;
> >>   unsigned long   __st_pad2;
> >>   long long       st_blocks;
> >> };
> >>
> >> It does appear that the syscalls for the two ABIs differ in this...
> >
> > This structure is identical to the one in musl except that it has
> > 32-bit dev_t plus padding in place of 64-bit dev_t, and the musl
> > version has reserved space at the end. Can you check whether the dev_t
> > issue is actually a problem (it might be, based on endianness, and if
> > so I think it would require ugly fixups in userspace)?
> 
> Ah no, my mistake, you are right, the padding seems correct and I was
> getting confused as usual by dev_t. However the 64 bit dev_t is a
> problem on bigendian mips.
> 
> (Whats the reason for Musl using 64 bit dev_t? glibc compatibility?)

And room for expansion, and consistency of the type between archs.
There's no justification for dev_t or similar types to be
arch-specific.

Rich


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: stat64 on mips
  2013-12-30 22:03     ` Rich Felker
@ 2013-12-30 22:10       ` Justin Cormack
  2013-12-30 22:13         ` Rich Felker
  0 siblings, 1 reply; 8+ messages in thread
From: Justin Cormack @ 2013-12-30 22:10 UTC (permalink / raw)
  To: musl

On Mon, Dec 30, 2013 at 10:03 PM, Rich Felker <dalias@aerifal.cx> wrote:
> On Mon, Dec 30, 2013 at 10:02:19PM +0000, Justin Cormack wrote:
>> On Mon, Dec 30, 2013 at 9:29 PM, Rich Felker <dalias@aerifal.cx> wrote:
>> > On Mon, Dec 30, 2013 at 06:20:46PM +0000, Justin Cormack wrote:
>> >> MIPS is the most confusing architecture, but as far as I can make out,
>> >> the definition of struct stat64 that Musl has is probably the right
>> >> one for mips n32 but wrong for mips o32 which should be
>> >>
>> >> struct stat {
>> >>   unsigned long   st_dev;
>> >>   unsigned long   __st_pad0[3];
>> >>   unsigned long long      st_ino;
>> >>   mode_t          st_mode;
>> >>   nlink_t         st_nlink;
>> >>   uid_t           st_uid;
>> >>   gid_t           st_gid;
>> >>   unsigned long   st_rdev;
>> >>   unsigned long   __st_pad1[3];
>> >>   long long       st_size;
>> >>   time_t          st_atime;
>> >>   unsigned long   st_atime_nsec;
>> >>   time_t          st_mtime;
>> >>   unsigned long   st_mtime_nsec;
>> >>   time_t          st_ctime;
>> >>   unsigned long   st_ctime_nsec;
>> >>   unsigned long   st_blksize;
>> >>   unsigned long   __st_pad2;
>> >>   long long       st_blocks;
>> >> };
>> >>
>> >> It does appear that the syscalls for the two ABIs differ in this...
>> >
>> > This structure is identical to the one in musl except that it has
>> > 32-bit dev_t plus padding in place of 64-bit dev_t, and the musl
>> > version has reserved space at the end. Can you check whether the dev_t
>> > issue is actually a problem (it might be, based on endianness, and if
>> > so I think it would require ugly fixups in userspace)?
>>
>> Ah no, my mistake, you are right, the padding seems correct and I was
>> getting confused as usual by dev_t. However the 64 bit dev_t is a
>> problem on bigendian mips.
>>
>> (Whats the reason for Musl using 64 bit dev_t? glibc compatibility?)
>
> And room for expansion, and consistency of the type between archs.
> There's no justification for dev_t or similar types to be
> arch-specific.

But isnt the kernel dev_t 32 bit for all archs?

Justin


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: stat64 on mips
  2013-12-30 22:10       ` Justin Cormack
@ 2013-12-30 22:13         ` Rich Felker
  2013-12-30 22:15           ` Justin Cormack
  2013-12-30 22:53           ` Justin Cormack
  0 siblings, 2 replies; 8+ messages in thread
From: Rich Felker @ 2013-12-30 22:13 UTC (permalink / raw)
  To: musl

On Mon, Dec 30, 2013 at 10:10:59PM +0000, Justin Cormack wrote:
> On Mon, Dec 30, 2013 at 10:03 PM, Rich Felker <dalias@aerifal.cx> wrote:
> > On Mon, Dec 30, 2013 at 10:02:19PM +0000, Justin Cormack wrote:
> >> On Mon, Dec 30, 2013 at 9:29 PM, Rich Felker <dalias@aerifal.cx> wrote:
> >> > On Mon, Dec 30, 2013 at 06:20:46PM +0000, Justin Cormack wrote:
> >> >> MIPS is the most confusing architecture, but as far as I can make out,
> >> >> the definition of struct stat64 that Musl has is probably the right
> >> >> one for mips n32 but wrong for mips o32 which should be
> >> >>
> >> >> struct stat {
> >> >>   unsigned long   st_dev;
> >> >>   unsigned long   __st_pad0[3];
> >> >>   unsigned long long      st_ino;
> >> >>   mode_t          st_mode;
> >> >>   nlink_t         st_nlink;
> >> >>   uid_t           st_uid;
> >> >>   gid_t           st_gid;
> >> >>   unsigned long   st_rdev;
> >> >>   unsigned long   __st_pad1[3];
> >> >>   long long       st_size;
> >> >>   time_t          st_atime;
> >> >>   unsigned long   st_atime_nsec;
> >> >>   time_t          st_mtime;
> >> >>   unsigned long   st_mtime_nsec;
> >> >>   time_t          st_ctime;
> >> >>   unsigned long   st_ctime_nsec;
> >> >>   unsigned long   st_blksize;
> >> >>   unsigned long   __st_pad2;
> >> >>   long long       st_blocks;
> >> >> };
> >> >>
> >> >> It does appear that the syscalls for the two ABIs differ in this...
> >> >
> >> > This structure is identical to the one in musl except that it has
> >> > 32-bit dev_t plus padding in place of 64-bit dev_t, and the musl
> >> > version has reserved space at the end. Can you check whether the dev_t
> >> > issue is actually a problem (it might be, based on endianness, and if
> >> > so I think it would require ugly fixups in userspace)?
> >>
> >> Ah no, my mistake, you are right, the padding seems correct and I was
> >> getting confused as usual by dev_t. However the 64 bit dev_t is a
> >> problem on bigendian mips.
> >>
> >> (Whats the reason for Musl using 64 bit dev_t? glibc compatibility?)
> >
> > And room for expansion, and consistency of the type between archs.
> > There's no justification for dev_t or similar types to be
> > arch-specific.
> 
> But isnt the kernel dev_t 32 bit for all archs?

Yes and no. They have adjacent padding reserved to make it up to
128-bit, despite the fact that intmax_t is 64-bit everywhere and thus
128-bit types can't really be used. I suspect on big-endian the
padding is at the other side to allow for this already, but it might
be misaligned with respect to the 64/128 bit size in musl at present.

Rich


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: stat64 on mips
  2013-12-30 22:13         ` Rich Felker
@ 2013-12-30 22:15           ` Justin Cormack
  2013-12-30 22:53           ` Justin Cormack
  1 sibling, 0 replies; 8+ messages in thread
From: Justin Cormack @ 2013-12-30 22:15 UTC (permalink / raw)
  To: musl

On Mon, Dec 30, 2013 at 10:13 PM, Rich Felker <dalias@aerifal.cx> wrote:
> On Mon, Dec 30, 2013 at 10:10:59PM +0000, Justin Cormack wrote:
>> On Mon, Dec 30, 2013 at 10:03 PM, Rich Felker <dalias@aerifal.cx> wrote:
>> > On Mon, Dec 30, 2013 at 10:02:19PM +0000, Justin Cormack wrote:
>> >> On Mon, Dec 30, 2013 at 9:29 PM, Rich Felker <dalias@aerifal.cx> wrote:
>> >> > On Mon, Dec 30, 2013 at 06:20:46PM +0000, Justin Cormack wrote:
>> >> >> MIPS is the most confusing architecture, but as far as I can make out,
>> >> >> the definition of struct stat64 that Musl has is probably the right
>> >> >> one for mips n32 but wrong for mips o32 which should be
>> >> >>
>> >> >> struct stat {
>> >> >>   unsigned long   st_dev;
>> >> >>   unsigned long   __st_pad0[3];
>> >> >>   unsigned long long      st_ino;
>> >> >>   mode_t          st_mode;
>> >> >>   nlink_t         st_nlink;
>> >> >>   uid_t           st_uid;
>> >> >>   gid_t           st_gid;
>> >> >>   unsigned long   st_rdev;
>> >> >>   unsigned long   __st_pad1[3];
>> >> >>   long long       st_size;
>> >> >>   time_t          st_atime;
>> >> >>   unsigned long   st_atime_nsec;
>> >> >>   time_t          st_mtime;
>> >> >>   unsigned long   st_mtime_nsec;
>> >> >>   time_t          st_ctime;
>> >> >>   unsigned long   st_ctime_nsec;
>> >> >>   unsigned long   st_blksize;
>> >> >>   unsigned long   __st_pad2;
>> >> >>   long long       st_blocks;
>> >> >> };
>> >> >>
>> >> >> It does appear that the syscalls for the two ABIs differ in this...
>> >> >
>> >> > This structure is identical to the one in musl except that it has
>> >> > 32-bit dev_t plus padding in place of 64-bit dev_t, and the musl
>> >> > version has reserved space at the end. Can you check whether the dev_t
>> >> > issue is actually a problem (it might be, based on endianness, and if
>> >> > so I think it would require ugly fixups in userspace)?
>> >>
>> >> Ah no, my mistake, you are right, the padding seems correct and I was
>> >> getting confused as usual by dev_t. However the 64 bit dev_t is a
>> >> problem on bigendian mips.
>> >>
>> >> (Whats the reason for Musl using 64 bit dev_t? glibc compatibility?)
>> >
>> > And room for expansion, and consistency of the type between archs.
>> > There's no justification for dev_t or similar types to be
>> > arch-specific.
>>
>> But isnt the kernel dev_t 32 bit for all archs?
>
> Yes and no. They have adjacent padding reserved to make it up to
> 128-bit, despite the fact that intmax_t is 64-bit everywhere and thus
> 128-bit types can't really be used. I suspect on big-endian the
> padding is at the other side to allow for this already, but it might
> be misaligned with respect to the 64/128 bit size in musl at present.

Let me just double check on both endians. Maybe I made a mistake...

Justin


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: stat64 on mips
  2013-12-30 22:13         ` Rich Felker
  2013-12-30 22:15           ` Justin Cormack
@ 2013-12-30 22:53           ` Justin Cormack
  1 sibling, 0 replies; 8+ messages in thread
From: Justin Cormack @ 2013-12-30 22:53 UTC (permalink / raw)
  To: musl

On Mon, Dec 30, 2013 at 10:13 PM, Rich Felker <dalias@aerifal.cx> wrote:
> On Mon, Dec 30, 2013 at 10:10:59PM +0000, Justin Cormack wrote:
>> On Mon, Dec 30, 2013 at 10:03 PM, Rich Felker <dalias@aerifal.cx> wrote:
>> > On Mon, Dec 30, 2013 at 10:02:19PM +0000, Justin Cormack wrote:
>> >> On Mon, Dec 30, 2013 at 9:29 PM, Rich Felker <dalias@aerifal.cx> wrote:
>> >> > On Mon, Dec 30, 2013 at 06:20:46PM +0000, Justin Cormack wrote:
>> >> >> MIPS is the most confusing architecture, but as far as I can make out,
>> >> >> the definition of struct stat64 that Musl has is probably the right
>> >> >> one for mips n32 but wrong for mips o32 which should be
>> >> >>
>> >> >> struct stat {
>> >> >>   unsigned long   st_dev;
>> >> >>   unsigned long   __st_pad0[3];
>> >> >>   unsigned long long      st_ino;
>> >> >>   mode_t          st_mode;
>> >> >>   nlink_t         st_nlink;
>> >> >>   uid_t           st_uid;
>> >> >>   gid_t           st_gid;
>> >> >>   unsigned long   st_rdev;
>> >> >>   unsigned long   __st_pad1[3];
>> >> >>   long long       st_size;
>> >> >>   time_t          st_atime;
>> >> >>   unsigned long   st_atime_nsec;
>> >> >>   time_t          st_mtime;
>> >> >>   unsigned long   st_mtime_nsec;
>> >> >>   time_t          st_ctime;
>> >> >>   unsigned long   st_ctime_nsec;
>> >> >>   unsigned long   st_blksize;
>> >> >>   unsigned long   __st_pad2;
>> >> >>   long long       st_blocks;
>> >> >> };
>> >> >>
>> >> >> It does appear that the syscalls for the two ABIs differ in this...
>> >> >
>> >> > This structure is identical to the one in musl except that it has
>> >> > 32-bit dev_t plus padding in place of 64-bit dev_t, and the musl
>> >> > version has reserved space at the end. Can you check whether the dev_t
>> >> > issue is actually a problem (it might be, based on endianness, and if
>> >> > so I think it would require ugly fixups in userspace)?
>> >>
>> >> Ah no, my mistake, you are right, the padding seems correct and I was
>> >> getting confused as usual by dev_t. However the 64 bit dev_t is a
>> >> problem on bigendian mips.
>> >>
>> >> (Whats the reason for Musl using 64 bit dev_t? glibc compatibility?)
>> >
>> > And room for expansion, and consistency of the type between archs.
>> > There's no justification for dev_t or similar types to be
>> > arch-specific.
>>
>> But isnt the kernel dev_t 32 bit for all archs?
>
> Yes and no. They have adjacent padding reserved to make it up to
> 128-bit, despite the fact that intmax_t is 64-bit everywhere and thus
> 128-bit types can't really be used. I suspect on big-endian the
> padding is at the other side to allow for this already, but it might
> be misaligned with respect to the 64/128 bit size in musl at present.

I am having toolchain trouble with my machine. Just ignore until I can
replicate after reinstalling with a more recent Linux than the one it
shipped with.

Justin


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2013-12-30 22:53 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-12-30 18:20 stat64 on mips Justin Cormack
2013-12-30 21:29 ` Rich Felker
2013-12-30 22:02   ` Justin Cormack
2013-12-30 22:03     ` Rich Felker
2013-12-30 22:10       ` Justin Cormack
2013-12-30 22:13         ` Rich Felker
2013-12-30 22:15           ` Justin Cormack
2013-12-30 22:53           ` Justin Cormack

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).