Re: Changes to stat ABI

From: Warner Losh <imp_at_bsdimp.com>
Date: Sun, 15 May 2022 17:31:39 UTC
Scratch that, this is a clang 11 vs clang13 issue.

Most likely clang 13 is more aggressively optimizing, so fstat is not
actually on the stack... Because
of LTO, you'll need to check the disassembled binary to know for sure.

Warner

On Sun, May 15, 2022 at 11:30 AM Warner Losh <imp@bsdimp.com> wrote:

> ino64 has gone into the tree. The stat structure layout
> changed. 69921123490b99c2588b0c743bc4af32bbe6601c went into the tree a
> while ago, but maybe recently enough to mess this up.
>
> Author: Konstantin Belousov <kib@FreeBSD.org>
> Date:   Tue May 23 09:29:05 2017 +0000
>
>     Commit the 64-bit inode project.
>
>     Extend the ino_t, dev_t, nlink_t types to 64-bit ints.  Modify
>     struct dirent layout to add d_off, increase the size of d_fileno
>     to 64-bits, increase the size of d_namlen to 16-bits, and change
>     the required alignment.  Increase struct statfs f_mntfromname[] and
>     f_mntonname[] array length MNAMELEN to 1024.
>
> On Sat, May 14, 2022 at 2:10 PM Paul Floyd <paulf2718@gmail.com> wrote:
>
>> Hi
>>
>>
>> Has anything changed in the way that the libc functions in the stat
>> family are compiled on FreeBSD 13.1 amd64 with clang 13?
>>
>>
>> I'm getting a few Valgrind regression test failures related to this:
>>
>> FreeBSD 13 / clang 11
>>
>> ==84746== Syscall param fstatat(flag) contains uninitialised byte(s)
>> ==84746==    at 0x49942EA: ??? (in /lib/libc.so.7)
>> ==84746==    by 0x499018B: fstatat (in /lib/libc.so.7)
>> ==84746==    by 0x201E7D: main (stat.c:67)
>>
>> FreeBSD 13.1 / clang 13
>>
>> ==57383== Syscall param fstatat(flag) contains uninitialised byte(s)
>> ==57383==    at 0x499239A: ??? (in /lib/libc.so.7)
>> ==57383==    by 0x201E57: main (stat.c:67)
>>
>> A+
>>
>> Paul
>>
>>
>>
>>