diff mbox series

linux-user: Replace __u64 with uint64_t

Message ID 20211108194230.1836262-1-raj.khem@gmail.com (mailing list archive)
State New, archived
Headers show
Series linux-user: Replace __u64 with uint64_t | expand

Commit Message

Khem Raj Nov. 8, 2021, 7:42 p.m. UTC
uint64_t is available in all userspaces via compiler include stdint.h
therefore use it instead of __u64 which is linux internal type, it fixes
build on some platforms eg. aarch64 systems using musl C library

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 linux-user/host/aarch64/hostdep.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Philippe Mathieu-Daudé Nov. 9, 2021, 9:09 a.m. UTC | #1
On 11/8/21 20:42, Khem Raj wrote:
> uint64_t is available in all userspaces via compiler include stdint.h
> therefore use it instead of __u64 which is linux internal type, it fixes
> build on some platforms eg. aarch64 systems using musl C library
> 
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> ---
>  linux-user/host/aarch64/hostdep.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/linux-user/host/aarch64/hostdep.h b/linux-user/host/aarch64/hostdep.h
> index a8d41a21ad..34d934f665 100644
> --- a/linux-user/host/aarch64/hostdep.h
> +++ b/linux-user/host/aarch64/hostdep.h
> @@ -25,7 +25,7 @@ extern char safe_syscall_end[];
>  static inline void rewind_if_in_safe_syscall(void *puc)
>  {
>      ucontext_t *uc = puc;
> -    __u64 *pcreg = &uc->uc_mcontext.pc;
> +    uint64_t *pcreg = &uc->uc_mcontext.pc;
>  
>      if (*pcreg > (uintptr_t)safe_syscall_start
>          && *pcreg < (uintptr_t)safe_syscall_end) {
> 

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Warner Losh Nov. 9, 2021, 4:39 p.m. UTC | #2
> On Nov 8, 2021, at 12:42 PM, Khem Raj <raj.khem@gmail.com> wrote:
> 
> uint64_t is available in all userspaces via compiler include stdint.h
> therefore use it instead of __u64 which is linux internal type, it fixes
> build on some platforms eg. aarch64 systems using musl C library
> 
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> ---
> linux-user/host/aarch64/hostdep.h | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/linux-user/host/aarch64/hostdep.h b/linux-user/host/aarch64/hostdep.h
> index a8d41a21ad..34d934f665 100644
> --- a/linux-user/host/aarch64/hostdep.h
> +++ b/linux-user/host/aarch64/hostdep.h
> @@ -25,7 +25,7 @@ extern char safe_syscall_end[];
> static inline void rewind_if_in_safe_syscall(void *puc)
> {
>     ucontext_t *uc = puc;
> -    __u64 *pcreg = &uc->uc_mcontext.pc;
> +    uint64_t *pcreg = &uc->uc_mcontext.pc;
> 
>     if (*pcreg > (uintptr_t)safe_syscall_start
>         && *pcreg < (uintptr_t)safe_syscall_end) {

Reviewed-by: Warner Losh <imp@bsdimp.com>

I wonder why we don’t have a typedef like bed’s register_t though…
Richard Henderson Nov. 10, 2021, 9:25 a.m. UTC | #3
On 11/8/21 8:42 PM, Khem Raj wrote:
> uint64_t is available in all userspaces via compiler include stdint.h
> therefore use it instead of __u64 which is linux internal type, it fixes
> build on some platforms eg. aarch64 systems using musl C library
> 
> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> ---
>   linux-user/host/aarch64/hostdep.h | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/linux-user/host/aarch64/hostdep.h b/linux-user/host/aarch64/hostdep.h
> index a8d41a21ad..34d934f665 100644
> --- a/linux-user/host/aarch64/hostdep.h
> +++ b/linux-user/host/aarch64/hostdep.h
> @@ -25,7 +25,7 @@ extern char safe_syscall_end[];
>   static inline void rewind_if_in_safe_syscall(void *puc)
>   {
>       ucontext_t *uc = puc;
> -    __u64 *pcreg = &uc->uc_mcontext.pc;
> +    uint64_t *pcreg = &uc->uc_mcontext.pc;
>   
>       if (*pcreg > (uintptr_t)safe_syscall_start
>           && *pcreg < (uintptr_t)safe_syscall_end) {

Queued to tcg-next, since that's where the original patch came from.

r~
Richard Henderson Nov. 10, 2021, 3:12 p.m. UTC | #4
On 11/10/21 10:25 AM, Richard Henderson wrote:
> On 11/8/21 8:42 PM, Khem Raj wrote:
>> uint64_t is available in all userspaces via compiler include stdint.h
>> therefore use it instead of __u64 which is linux internal type, it fixes
>> build on some platforms eg. aarch64 systems using musl C library
>>
>> Signed-off-by: Khem Raj <raj.khem@gmail.com>
>> ---
>>   linux-user/host/aarch64/hostdep.h | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/linux-user/host/aarch64/hostdep.h b/linux-user/host/aarch64/hostdep.h
>> index a8d41a21ad..34d934f665 100644
>> --- a/linux-user/host/aarch64/hostdep.h
>> +++ b/linux-user/host/aarch64/hostdep.h
>> @@ -25,7 +25,7 @@ extern char safe_syscall_end[];
>>   static inline void rewind_if_in_safe_syscall(void *puc)
>>   {
>>       ucontext_t *uc = puc;
>> -    __u64 *pcreg = &uc->uc_mcontext.pc;
>> +    uint64_t *pcreg = &uc->uc_mcontext.pc;
>>       if (*pcreg > (uintptr_t)safe_syscall_start
>>           && *pcreg < (uintptr_t)safe_syscall_end) {
> 
> Queued to tcg-next, since that's where the original patch came from.

Dequeued.  We need something more, because on debian we now get:

../linux-user/host/aarch64/hostdep.h:28:23: error: initialization of 'uint64_t *' {aka 
'long unsigned int *'} from incompatible pointer type 'long long unsigned int *' 
[-Werror=incompatible-pointer-types]
      uint64_t *pcreg = &uc->uc_mcontext.pc;
                        ^
cc1: all warnings being treated as errors

Perhaps we need to use __typeof() to get the correct pointer type?  Oh for c++11 auto 
declarations... :-)


r~
Richard Henderson Nov. 10, 2021, 3:18 p.m. UTC | #5
On 11/10/21 4:12 PM, Richard Henderson wrote:
> On 11/10/21 10:25 AM, Richard Henderson wrote:
>> On 11/8/21 8:42 PM, Khem Raj wrote:
>>> uint64_t is available in all userspaces via compiler include stdint.h
>>> therefore use it instead of __u64 which is linux internal type, it fixes
>>> build on some platforms eg. aarch64 systems using musl C library
>>>
>>> Signed-off-by: Khem Raj <raj.khem@gmail.com>
>>> ---
>>>   linux-user/host/aarch64/hostdep.h | 2 +-
>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/linux-user/host/aarch64/hostdep.h b/linux-user/host/aarch64/hostdep.h
>>> index a8d41a21ad..34d934f665 100644
>>> --- a/linux-user/host/aarch64/hostdep.h
>>> +++ b/linux-user/host/aarch64/hostdep.h
>>> @@ -25,7 +25,7 @@ extern char safe_syscall_end[];
>>>   static inline void rewind_if_in_safe_syscall(void *puc)
>>>   {
>>>       ucontext_t *uc = puc;
>>> -    __u64 *pcreg = &uc->uc_mcontext.pc;
>>> +    uint64_t *pcreg = &uc->uc_mcontext.pc;
>>>       if (*pcreg > (uintptr_t)safe_syscall_start
>>>           && *pcreg < (uintptr_t)safe_syscall_end) {
>>
>> Queued to tcg-next, since that's where the original patch came from.
> 
> Dequeued.  We need something more, because on debian we now get:
> 
> ../linux-user/host/aarch64/hostdep.h:28:23: error: initialization of 'uint64_t *' {aka 
> 'long unsigned int *'} from incompatible pointer type 'long long unsigned int *' 
> [-Werror=incompatible-pointer-types]
>       uint64_t *pcreg = &uc->uc_mcontext.pc;
>                         ^
> cc1: all warnings being treated as errors
> 
> Perhaps we need to use __typeof() to get the correct pointer type?  Oh for c++11 auto 
> declarations... :-)

No, we need to not use a pointer at all and grab Warner's

   https://patchew.org/QEMU/20211108023738.42125-1-imp@bsdimp.com/

Even grabbing the first two patches of that series for 6.2 would fix this.


r~
Warner Losh Nov. 10, 2021, 4:03 p.m. UTC | #6
On Wed, Nov 10, 2021 at 8:19 AM Richard Henderson <
richard.henderson@linaro.org> wrote:

> On 11/10/21 4:12 PM, Richard Henderson wrote:
> > On 11/10/21 10:25 AM, Richard Henderson wrote:
> >> On 11/8/21 8:42 PM, Khem Raj wrote:
> >>> uint64_t is available in all userspaces via compiler include stdint.h
> >>> therefore use it instead of __u64 which is linux internal type, it
> fixes
> >>> build on some platforms eg. aarch64 systems using musl C library
> >>>
> >>> Signed-off-by: Khem Raj <raj.khem@gmail.com>
> >>> ---
> >>>   linux-user/host/aarch64/hostdep.h | 2 +-
> >>>   1 file changed, 1 insertion(+), 1 deletion(-)
> >>>
> >>> diff --git a/linux-user/host/aarch64/hostdep.h
> b/linux-user/host/aarch64/hostdep.h
> >>> index a8d41a21ad..34d934f665 100644
> >>> --- a/linux-user/host/aarch64/hostdep.h
> >>> +++ b/linux-user/host/aarch64/hostdep.h
> >>> @@ -25,7 +25,7 @@ extern char safe_syscall_end[];
> >>>   static inline void rewind_if_in_safe_syscall(void *puc)
> >>>   {
> >>>       ucontext_t *uc = puc;
> >>> -    __u64 *pcreg = &uc->uc_mcontext.pc;
> >>> +    uint64_t *pcreg = &uc->uc_mcontext.pc;
> >>>       if (*pcreg > (uintptr_t)safe_syscall_start
> >>>           && *pcreg < (uintptr_t)safe_syscall_end) {
> >>
> >> Queued to tcg-next, since that's where the original patch came from.
> >
> > Dequeued.  We need something more, because on debian we now get:
> >
> > ../linux-user/host/aarch64/hostdep.h:28:23: error: initialization of
> 'uint64_t *' {aka
> > 'long unsigned int *'} from incompatible pointer type 'long long
> unsigned int *'
> > [-Werror=incompatible-pointer-types]
> >       uint64_t *pcreg = &uc->uc_mcontext.pc;
> >                         ^
> > cc1: all warnings being treated as errors
> >
> > Perhaps we need to use __typeof() to get the correct pointer type?  Oh
> for c++11 auto
> > declarations... :-)
>
> No, we need to not use a pointer at all and grab Warner's
>
>    https://patchew.org/QEMU/20211108023738.42125-1-imp@bsdimp.com/
>
> Even grabbing the first two patches of that series for 6.2 would fix this.
>

I tried to do a pointer for this stuff, only to find several places where
there
were mismatches like's reported there.

I also have an improvement to that series I was going to send later today
that fixes the check-patch warning by moving some externs around.  I was
going to do that after looking through my inbox to see if there'd been more
comments or not. I'll make sure the relevant fixes are first for this issue.

Warner
Khem Raj Nov. 10, 2021, 4:31 p.m. UTC | #7
On Wed, Nov 10, 2021 at 8:03 AM Warner Losh <imp@bsdimp.com> wrote:
>
>
>
> On Wed, Nov 10, 2021 at 8:19 AM Richard Henderson <richard.henderson@linaro.org> wrote:
>>
>> On 11/10/21 4:12 PM, Richard Henderson wrote:
>> > On 11/10/21 10:25 AM, Richard Henderson wrote:
>> >> On 11/8/21 8:42 PM, Khem Raj wrote:
>> >>> uint64_t is available in all userspaces via compiler include stdint.h
>> >>> therefore use it instead of __u64 which is linux internal type, it fixes
>> >>> build on some platforms eg. aarch64 systems using musl C library
>> >>>
>> >>> Signed-off-by: Khem Raj <raj.khem@gmail.com>
>> >>> ---
>> >>>   linux-user/host/aarch64/hostdep.h | 2 +-
>> >>>   1 file changed, 1 insertion(+), 1 deletion(-)
>> >>>
>> >>> diff --git a/linux-user/host/aarch64/hostdep.h b/linux-user/host/aarch64/hostdep.h
>> >>> index a8d41a21ad..34d934f665 100644
>> >>> --- a/linux-user/host/aarch64/hostdep.h
>> >>> +++ b/linux-user/host/aarch64/hostdep.h
>> >>> @@ -25,7 +25,7 @@ extern char safe_syscall_end[];
>> >>>   static inline void rewind_if_in_safe_syscall(void *puc)
>> >>>   {
>> >>>       ucontext_t *uc = puc;
>> >>> -    __u64 *pcreg = &uc->uc_mcontext.pc;
>> >>> +    uint64_t *pcreg = &uc->uc_mcontext.pc;
>> >>>       if (*pcreg > (uintptr_t)safe_syscall_start
>> >>>           && *pcreg < (uintptr_t)safe_syscall_end) {
>> >>
>> >> Queued to tcg-next, since that's where the original patch came from.
>> >
>> > Dequeued.  We need something more, because on debian we now get:
>> >
>> > ../linux-user/host/aarch64/hostdep.h:28:23: error: initialization of 'uint64_t *' {aka
>> > 'long unsigned int *'} from incompatible pointer type 'long long unsigned int *'
>> > [-Werror=incompatible-pointer-types]
>> >       uint64_t *pcreg = &uc->uc_mcontext.pc;
>> >                         ^
>> > cc1: all warnings being treated as errors
>> >
>> > Perhaps we need to use __typeof() to get the correct pointer type?  Oh for c++11 auto
>> > declarations... :-)
>>
>> No, we need to not use a pointer at all and grab Warner's
>>
>>    https://patchew.org/QEMU/20211108023738.42125-1-imp@bsdimp.com/
>>
>> Even grabbing the first two patches of that series for 6.2 would fix this.
>
>
> I tried to do a pointer for this stuff, only to find several places where there
> were mismatches like's reported there.
>
> I also have an improvement to that series I was going to send later today
> that fixes the check-patch warning by moving some externs around.  I was
> going to do that after looking through my inbox to see if there'd been more
> comments or not. I'll make sure the relevant fixes are first for this issue.

Thanks Warner, if you are fixing it in your series, then we should
drop this.  Should we
use uintptr_t or something

>
> Warner
diff mbox series

Patch

diff --git a/linux-user/host/aarch64/hostdep.h b/linux-user/host/aarch64/hostdep.h
index a8d41a21ad..34d934f665 100644
--- a/linux-user/host/aarch64/hostdep.h
+++ b/linux-user/host/aarch64/hostdep.h
@@ -25,7 +25,7 @@  extern char safe_syscall_end[];
 static inline void rewind_if_in_safe_syscall(void *puc)
 {
     ucontext_t *uc = puc;
-    __u64 *pcreg = &uc->uc_mcontext.pc;
+    uint64_t *pcreg = &uc->uc_mcontext.pc;
 
     if (*pcreg > (uintptr_t)safe_syscall_start
         && *pcreg < (uintptr_t)safe_syscall_end) {