Re: [QEMU] Question regarding user mode support for ARM syscalls

2020-11-04 Thread Laurent Vivier
Le 04/11/2020 à 11:57, Lukasz Majewski a écrit :
> Hi Alistair,
> 
>> On Tue, Nov 3, 2020 at 8:55 AM Lukasz Majewski  wrote:
>>>
>>> Hi Alistair,
>>>  
 On Tue, Nov 3, 2020 at 3:03 AM Lukasz Majewski 
 wrote:  
>
> Dear Qemu Community,  

 Hey Lukasz,

 + QEMU Dev Mailing list
 + Laurent
  
>>>
>>> Thanks for reaching more people.
>>>  
>
> I would like to ask you for some advice regarding the usage of
> arm-linux-user/qemu-arm user space program simulation.
>
> Background:
> ---
>
> I'm looking for a way to efficiently test y2038 in-glibc
> solution for 32 bit architectures (e.g. ARM).
>
> For now I do use qemu-system-arm (part of Yocto/OE), which I'm
> using to run Linux kernel 5.1, glibc under test and Y2038
> tests. It works [1].
>
> Problem:
> 
>
> I would like to test cross-compiled tests (which are built from
> glibc sources) without the need to run the emulated system with
> qemu-system-arm.
>
> I've come across the "QEMU user mode", which would execute the
> cross-compiled test (with already cross-compiled glibc via -L
> switch) and just return exit status code. This sounds
> appealing.  

 As another advantage it is much, much faster at running the glibc
 tests.
  
>>>
>>> +1
>>>  
>
> As fair as I've read - QEMU user mode emulates ARM syscalls.
>
> During test execution (single qemu user mode process) I would
> need to adjust date with clock_settime64 syscall and then
> execute other syscalls if needed.
>
>
> Please correct me if I'm wrong:
> - It looks like qemu-arm doesn't have switch which would allow
> it to set time offset (to e.g. year 2039 - something similar to
>   qemu-system-arm -rtc=).
>
> - As of 5.1 qemu version there is no support for syscalls
> supporting 64 bit time on 32 bit architectures (e.g.
> clock_settime64 and friends from [2]).  

 There is some support in the current master, for example
 __NR_futex_time64 is supported.  
>>>
>>> I've just looked into v5.1.0 stable release. I will double check
>>> this with -master branch.
>>>  

 I started to add some support for RV32 once it was merged into
 glibc.  
>>>
>>> Ok.
>>>  
  
>
> For my example program [3] statically build for testing (it
> works with qemu-system-arm):
>
> ~/work/qemu-arm-tests-program$
> ../qemu-5.1.0-arm/arm-linux-user/qemu-arm -L
> ~/work/yocto/y2038/build/tmp/armv7at2hf-neon-poky-linux-gnueabi/y2038-glibc/2.30+git999-r0/image/opt
> -strace ./cst
>
> 17746 brk(NULL) = 0x00074000
> 17746 brk(0x000748a8) = 0x000748a8
> 17746 uname(0x40800370) = 0
> 17746 readlink("/proc/self/exe",0x407ff488,4096) = 43
> 17746 brk(0x000958a8) = 0x000958a8
> 17746 brk(0x00096000) = 0x00096000
> 17746 mprotect(0x0007,8192,PROT_READ) = 0
> 17746statx(1,"",AT_EMPTY_PATH|AT_NO_AUTOMOUNT,STATX_BASIC_STATS,0x407ffd70)
> = 0
> 17746 Unknown syscall 404 --> is the syscall number of
> clock_settime64  

 clock_settime64 is supported in master QEMU.  
>>>
>>> I will double check it - thanks for pointing this out.
>>>  
  
>
> 17746 dup(2) = 3
> 17746 fcntl64(3,F_GETFL) = 2
> 17746statx(3,"",AT_EMPTY_PATH|AT_NO_AUTOMOUNT,STATX_BASIC_STATS,0x407ff8e8)
> = 0 ERR
>
> Questions:
> --
>
> 1. Is there any plan to add support for emulating syscalls
> supporting 64 bit time on 32 bit architectures [2]?  

 I would like to have RV32 supported, but it's a low priority for
 me.  
>>>
>>> Having syscalls supporting 64 bit time on 32 bit machines indicated
>>> in [2] would be a very welcome for glibc testing.
>>>  
 I
 expect it's something that will eventually happen though.  
>>>
>>> Ok.
>>>  
  
>
> 2. Provide QEMU user space switch to adjust its time (i.e. add
> some offset to in-fly emulated time syscalls - like
> clock_settime64) when it is started?  

 That I'm not sure about.  
>>>
>>> For me it would be enough to have:
>>>
>>> qemu-arm -rtc="2039-01-01" -L... ./ctx
>>> So the emulated "time" would be after 32 bit time_t overflow when
>>> QEMU user space emulation process starts (as long as it doesn't
>>> touch the host machine time).
>>>
>>>
>>> Another option (workaround) would be to run clock_settime64() with
>>> time set to year 2038+ on the beginning of each glibc test. It
>>> shall work as long as we don't change host time (and all time
>>> changes would stay in the qemu user mode process).
>>>  
 I assume just running date/clock_settime64
 from a script wouldn't work with the glibc test framework?  
>>>
>>> Could you elaborate on this use case/scenario? Do you have some
>>> examples to share?  
>>
>> Whoops, I got confused here. The clock_gettime syscall goes to the
>> host, 

CONECT LOCAL MACHINE TO VIRTUAL MACHINE

2020-11-04 Thread Harbey Jair Guerrero
Hi My name Harbey I´m new using QEMU, I installed a CENTOS 8 VM with QEMU,
the local machine is a CENTOS 7, but i have some problems setting the
network, how I can fix it, or when i find documentation or information to
set the VM and the local machine with local network.
Thank you.


*HARBEY JAIR GUERRERO BULLA**Coordinador de TI*
UNIHILO Hilanderías Universal S.A.S
hguerr...@unihilo.com.co
Tel. (571) 4473661
Bogotá D.C. - Colombia

Por medio del presente aviso informamos que los datos personales recogidos
por medio de este canal de comunicación, serán tratados conforme a la Ley
1581 de 2012 y el Decreto 1377 de 2012, con la finalidad de prestar
adecuadamente los productos y servicios que ofrece HILANDERIAS UNIVERSAL
S.A.S. La información contenida en este correo electrónico puede tener
información confidencial y/o datos personales. En caso de que no sea un
destinatario autorizado de este mensaje, notifique de manera inmediata al
emisor, borre y destruya este mensaje, incluida la información adjunta. En
caso de divulgación, distribución, copia o uso no autorizado es considerado
ilegal y se encuentra penalizado por la Ley 1273 de 2009.

Tenga en cuenta que los comentarios y opiniones presentados en este correo
no son necesariamente en representación de HILANDERIAS UNIVERSAL S.A.S.

En caso de reclamo o consulta puede realizarla a través del correo
electrónico: protecciondeda...@unihilo.com.co

Para mayor información acerca del tratamiento de su información personal,
lo invitamos a que consulte la Política de Tratamiento de datos personales
en http://www.unihilo.com.co/


Re: [QEMU] Question regarding user mode support for ARM syscalls

2020-11-04 Thread Lukasz Majewski
Hi Alex,

> Lukasz Majewski  writes:
> 
> > Dear Qemu Community,
> >
> > I would like to ask you for some advice regarding the usage of
> > arm-linux-user/qemu-arm user space program simulation.
> >
> > Background:
> > ---
> >
> > I'm looking for a way to efficiently test y2038 in-glibc solution
> > for 32 bit architectures (e.g. ARM).
> >
> > For now I do use qemu-system-arm (part of Yocto/OE), which I'm
> > using to run Linux kernel 5.1, glibc under test and Y2038 tests. It
> > works [1].
> >
> > Problem:
> > 
> >
> > I would like to test cross-compiled tests (which are built from
> > glibc sources) without the need to run the emulated system with
> > qemu-system-arm.
> >
> > I've come across the "QEMU user mode", which would execute the
> > cross-compiled test (with already cross-compiled glibc via -L
> > switch) and just return exit status code. This sounds appealing.
> >
> > As fair as I've read - QEMU user mode emulates ARM syscalls.  
> 
> It's not strictly an emulation - it is more of a guided pass-through.
> QEMU may tweak details like re-arranging structures or handling
> byte-swapping but ultimately the syscall is passed down to the host
> system.

This means that clock_settime64 will run clock_settime on the host
system (x86_64 in my case) and adjust its time. My goal is to avoid
adjusting host time in any way.

> 
> > During test execution (single qemu user mode process) I would need
> > to adjust date with clock_settime64 syscall and then execute other
> > syscalls if needed.  
> 
> This will set the time on your host system.

Ok. Thanks for the clarification.

> 
> > Please correct me if I'm wrong:
> > - It looks like qemu-arm doesn't have switch which would allow it to
> >   set time offset (to e.g. year 2039 - something similar to
> >   qemu-system-arm -rtc=).  
> 
> No - most of the command line switches pertain to memory layout and
> how libraries are searched for. The details of the results of system
> calls are very much left up to the host.
> 
> >
> > - As of 5.1 qemu version there is no support for syscalls
> > supporting 64 bit time on 32 bit architectures (e.g.
> > clock_settime64 and friends from [2]).  
> 
> Hmm since 5bcb4986384e02669418a411cac10377cf48e698 the syscall table
> has had mappings for all of those:
> 
> # 402 is unused
> 403   common  clock_gettime64
> sys_clock_gettime 404 common  clock_settime64
>   sys_clock_settime 405   common
> clock_adjtime64   sys_clock_adjtime
> 

Ok. I've been using v5.1.0 instead of -master branch.

> >
> > For my example program [3] statically build for testing (it works
> > with qemu-system-arm):
> >
> > ~/work/qemu-arm-tests-program$
> > ../qemu-5.1.0-arm/arm-linux-user/qemu-arm -L
> > ~/work/yocto/y2038/build/tmp/armv7at2hf-neon-poky-linux-gnueabi/y2038-glibc/2.30+git999-r0/image/opt
> > -strace ./cst
> >
> > 17746 brk(NULL) = 0x00074000
> > 17746 brk(0x000748a8) = 0x000748a8
> > 17746 uname(0x40800370) = 0
> > 17746 readlink("/proc/self/exe",0x407ff488,4096) = 43
> > 17746 brk(0x000958a8) = 0x000958a8 
> > 17746 brk(0x00096000) = 0x00096000
> > 17746 mprotect(0x0007,8192,PROT_READ) = 0
> > 17746statx(1,"",AT_EMPTY_PATH|AT_NO_AUTOMOUNT,STATX_BASIC_STATS,0x407ffd70)
> > = 0 
> > 17746 Unknown syscall 404 --> is the syscall number of
> > clock_settime64
> >
> > 17746 dup(2) = 3
> > 17746 fcntl64(3,F_GETFL) = 2
> > 17746statx(3,"",AT_EMPTY_PATH|AT_NO_AUTOMOUNT,STATX_BASIC_STATS,0x407ff8e8)
> > = 0 ERR
> >
> > Questions:
> > --
> >
> > 1. Is there any plan to add support for emulating syscalls
> > supporting 64 bit time on 32 bit architectures [2]?  
> 
> It's certainly a bug if it's not working for you.
> 
> >
> > 2. Provide QEMU user space switch to adjust its time (i.e. add some
> > offset to in-fly emulated time syscalls - like clock_settime64)
> > when it is started?  
> 
> Unlikely - but you could carry a local patch for your own purposes.
> 

My goal would be to test if syscalls with 64 bit time (e.g. struct
timespec) work correctly, so I would need to adjust many syscalls as I
do test for example if futex change times out. 

It looks like having Yocto/OE crafted BSP with qemu-system-arm is a
better solution as I do have proper syscalls support out of the box.

Anyway, big thanks for the clarification.


Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,  Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lu...@denx.de


pgpvZ5pcPUEtY.pgp
Description: OpenPGP digital signature


Re: [QEMU] Question regarding user mode support for ARM syscalls

2020-11-04 Thread Lukasz Majewski
Hi Alistair,

> On Tue, Nov 3, 2020 at 8:55 AM Lukasz Majewski  wrote:
> >
> > Hi Alistair,
> >  
> > > On Tue, Nov 3, 2020 at 3:03 AM Lukasz Majewski 
> > > wrote:  
> > > >
> > > > Dear Qemu Community,  
> > >
> > > Hey Lukasz,
> > >
> > > + QEMU Dev Mailing list
> > > + Laurent
> > >  
> >
> > Thanks for reaching more people.
> >  
> > > >
> > > > I would like to ask you for some advice regarding the usage of
> > > > arm-linux-user/qemu-arm user space program simulation.
> > > >
> > > > Background:
> > > > ---
> > > >
> > > > I'm looking for a way to efficiently test y2038 in-glibc
> > > > solution for 32 bit architectures (e.g. ARM).
> > > >
> > > > For now I do use qemu-system-arm (part of Yocto/OE), which I'm
> > > > using to run Linux kernel 5.1, glibc under test and Y2038
> > > > tests. It works [1].
> > > >
> > > > Problem:
> > > > 
> > > >
> > > > I would like to test cross-compiled tests (which are built from
> > > > glibc sources) without the need to run the emulated system with
> > > > qemu-system-arm.
> > > >
> > > > I've come across the "QEMU user mode", which would execute the
> > > > cross-compiled test (with already cross-compiled glibc via -L
> > > > switch) and just return exit status code. This sounds
> > > > appealing.  
> > >
> > > As another advantage it is much, much faster at running the glibc
> > > tests.
> > >  
> >
> > +1
> >  
> > > >
> > > > As fair as I've read - QEMU user mode emulates ARM syscalls.
> > > >
> > > > During test execution (single qemu user mode process) I would
> > > > need to adjust date with clock_settime64 syscall and then
> > > > execute other syscalls if needed.
> > > >
> > > >
> > > > Please correct me if I'm wrong:
> > > > - It looks like qemu-arm doesn't have switch which would allow
> > > > it to set time offset (to e.g. year 2039 - something similar to
> > > >   qemu-system-arm -rtc=).
> > > >
> > > > - As of 5.1 qemu version there is no support for syscalls
> > > > supporting 64 bit time on 32 bit architectures (e.g.
> > > > clock_settime64 and friends from [2]).  
> > >
> > > There is some support in the current master, for example
> > > __NR_futex_time64 is supported.  
> >
> > I've just looked into v5.1.0 stable release. I will double check
> > this with -master branch.
> >  
> > >
> > > I started to add some support for RV32 once it was merged into
> > > glibc.  
> >
> > Ok.
> >  
> > >  
> > > >
> > > > For my example program [3] statically build for testing (it
> > > > works with qemu-system-arm):
> > > >
> > > > ~/work/qemu-arm-tests-program$
> > > > ../qemu-5.1.0-arm/arm-linux-user/qemu-arm -L
> > > > ~/work/yocto/y2038/build/tmp/armv7at2hf-neon-poky-linux-gnueabi/y2038-glibc/2.30+git999-r0/image/opt
> > > > -strace ./cst
> > > >
> > > > 17746 brk(NULL) = 0x00074000
> > > > 17746 brk(0x000748a8) = 0x000748a8
> > > > 17746 uname(0x40800370) = 0
> > > > 17746 readlink("/proc/self/exe",0x407ff488,4096) = 43
> > > > 17746 brk(0x000958a8) = 0x000958a8
> > > > 17746 brk(0x00096000) = 0x00096000
> > > > 17746 mprotect(0x0007,8192,PROT_READ) = 0
> > > > 17746statx(1,"",AT_EMPTY_PATH|AT_NO_AUTOMOUNT,STATX_BASIC_STATS,0x407ffd70)
> > > > = 0
> > > > 17746 Unknown syscall 404 --> is the syscall number of
> > > > clock_settime64  
> > >
> > > clock_settime64 is supported in master QEMU.  
> >
> > I will double check it - thanks for pointing this out.
> >  
> > >  
> > > >
> > > > 17746 dup(2) = 3
> > > > 17746 fcntl64(3,F_GETFL) = 2
> > > > 17746statx(3,"",AT_EMPTY_PATH|AT_NO_AUTOMOUNT,STATX_BASIC_STATS,0x407ff8e8)
> > > > = 0 ERR
> > > >
> > > > Questions:
> > > > --
> > > >
> > > > 1. Is there any plan to add support for emulating syscalls
> > > > supporting 64 bit time on 32 bit architectures [2]?  
> > >
> > > I would like to have RV32 supported, but it's a low priority for
> > > me.  
> >
> > Having syscalls supporting 64 bit time on 32 bit machines indicated
> > in [2] would be a very welcome for glibc testing.
> >  
> > > I
> > > expect it's something that will eventually happen though.  
> >
> > Ok.
> >  
> > >  
> > > >
> > > > 2. Provide QEMU user space switch to adjust its time (i.e. add
> > > > some offset to in-fly emulated time syscalls - like
> > > > clock_settime64) when it is started?  
> > >
> > > That I'm not sure about.  
> >
> > For me it would be enough to have:
> >
> > qemu-arm -rtc="2039-01-01" -L... ./ctx
> > So the emulated "time" would be after 32 bit time_t overflow when
> > QEMU user space emulation process starts (as long as it doesn't
> > touch the host machine time).
> >
> >
> > Another option (workaround) would be to run clock_settime64() with
> > time set to year 2038+ on the beginning of each glibc test. It
> > shall work as long as we don't change host time (and all time
> > changes would stay in the qemu user mode process).
> >  
> > > I assume just running date/clock_settime64
> > > from a script wouldn't work with the glibc test framework?  
> >
> > Could you elaborate on this use