Brian Cain <quic_bc...@quicinc.com> writes:

> On 9/16/2024 8:12 AM, Alex Bennée wrote:
>> Brian Cain <quic_bc...@quicinc.com> writes:
>>
>>> On 9/6/2024 9:39 PM, Brian Cain wrote:
>>>> With newer clang builds (19.x), there's a warning for implicit function
>>>> declarations and it rejects linux-test.c.
>>>>
>>>> glibc/musl's readdir64() declaration in dirent is guarded by
>>>> _LARGEFILE64_SOURCE, so we'll define it to fix the warning.
>>>>
>>>>         BUILD   hexagon-linux-user guest-tests
>>>>       
>>>> /local/mnt/workspace/upstream/toolchain_for_hexagon/qemu/tests/tcg/multiarch/linux/linux-test.c:189:14:
>>>>  error: call to undeclared function 'readdir64'; ISO C99 and later do not 
>>>> support implicit function declarations [-Wimplicit-function-declaration]
>>>>         189 |         de = readdir64(dir);
>>>>             |              ^
>>>>
>>>> Signed-off-by: Brian Cain <bc...@quicinc.com>
>>>> ---
>>>>    tests/tcg/multiarch/linux/linux-test.c | 1 +
>>>>    1 file changed, 1 insertion(+)
>>>>
>>>> diff --git a/tests/tcg/multiarch/linux/linux-test.c 
>>>> b/tests/tcg/multiarch/linux/linux-test.c
>>>> index 64f57cb287..4e0e862ad9 100644
>>>> --- a/tests/tcg/multiarch/linux/linux-test.c
>>>> +++ b/tests/tcg/multiarch/linux/linux-test.c
>>>> @@ -17,6 +17,7 @@
>>>>     *  along with this program; if not, see <http://www.gnu.org/licenses/>.
>>>>     */
>>>>    #define _GNU_SOURCE
>>>> +#define _LARGEFILE64_SOURCE
>>>>    #include <stdarg.h>
>>>>    #include <stdlib.h>
>>>>    #include <stdio.h>
>>>
>>> Alex -- what do you think about this one?
>> Actually scratch that, this is a 32 compat hack:
>>
>>    1f442da51e (tests/tcg/multiarch: fix 32bit linux-test on 64bit host)
>>
>> Is the __USE_LARGEFILE64 symbol in the hexagon headers?
>>
> musl does not define/use __USE_LARGEFILE64, no.  If it's well defined
> I could examine whether it makes sense to add this feature to musl,
> though.  How does __USE_LARGEFILE64 differ from _LARGEFILE64_SOURCE? 
> Is it more appropriate to define that here?

Digging into the GNU source _LARGEFILE* is the correct define, the __USE
flags are internal. features.h says:

   _LARGEFILE_SOURCE    Some more functions for correct standard I/O.
   _LARGEFILE64_SOURCE  Additional functionality from LFS for large files.

although looking at _LARGEFILE64_SOURCE should be defined by
_GNU_SOURCE which is already set for linux-test.c

According to the musl WHATSNEW:

  compatibility:
  - make _GNU_SOURCE imply _LARGEFILE64_SOURCE

So is this a hexagon only thing?

>
> -Brian

-- 
Alex Bennée
Virtualisation Tech Lead @ Linaro

Reply via email to