Re: [Qemu-devel] Patch: dyngen-exec.h for OpenBSD

2007-04-06 Thread Anthony Liguori

Paul Brook wrote:

On Thursday 05 April 2007 23:12, Todd T. Fries wrote:
  

Penned by Thiemo Seufer on 20070402 10:54.53, we have:
| >  /* NOTE: standard headers should be used with special care at this
| > point because host CPU registers are used as global variables. Some
| > host headers do not allow that. */
| >  #include 
| > -
| > +#ifdef __OpenBSD__
| > +#include 
Hello? Portability?  sys/types.h defines these types portably.
Doing so the way this code does it, is not portable.



If you want  portability you should be including stdint.h (or inttypes.h for 
old, broken systems).
  


I thought I'd add that this isn't just portability.  stdint.h is what 
C99 mandates although as Paul mentions, some older systems used inttypes.h.


Regards,

Anthony Liguori


Why is it that qemu knows what the definition of these prototypes
are on all systems without consulting the header files.  I have a
better idea, lets let the header files define the prototypes.
Who would have though of that?



See the big NOTE: comment above. dyngen is inherently unportable.

Paul



  






Re: [Qemu-devel] Patch: dyngen-exec.h for OpenBSD

2007-04-06 Thread Paul Brook
On Thursday 05 April 2007 23:12, Todd T. Fries wrote:
> Penned by Thiemo Seufer on 20070402 10:54.53, we have:
> | >  /* NOTE: standard headers should be used with special care at this
> | > point because host CPU registers are used as global variables. Some
> | > host headers do not allow that. */
> | >  #include 
> | > -
> | > +#ifdef __OpenBSD__
> | > +#include 
> Hello? Portability?  sys/types.h defines these types portably.
> Doing so the way this code does it, is not portable.

If you want  portability you should be including stdint.h (or inttypes.h for 
old, broken systems).

> Why is it that qemu knows what the definition of these prototypes
> are on all systems without consulting the header files.  I have a
> better idea, lets let the header files define the prototypes.
> Who would have though of that?

See the big NOTE: comment above. dyngen is inherently unportable.

Paul




Re: [Qemu-devel] Patch: dyngen-exec.h for OpenBSD

2007-04-06 Thread Thiemo Seufer
Todd T. Fries wrote:
> 
> Penned by Thiemo Seufer on 20070402 10:54.53, we have:
> | >  /* NOTE: standard headers should be used with special care at this
> | > point because host CPU registers are used as global variables. Some
> | > host headers do not allow that. */
> | >  #include 
> | > -
> | > +#ifdef __OpenBSD__
> | > +#include 
> | > +#else
> | >  typedef unsigned char uint8_t;
> | >  typedef unsigned short uint16_t;
> | >  typedef unsigned int uint32_t;
> | > @@ -61,6 +65,7 @@ typedef signed long int64_t;
> | >  typedef signed long long int64_t;
> | >  #endif
> | >  #endif
> | > +#endif
> | 
> | Is this specialcase really needed for OpenBSD?
> 
> Can you honestly tell me that on all platforms this is true?
> 
> Hello? Portability?  sys/types.h defines these types portably.
> Doing so the way this code does it, is not portable.
> 
> I left your non portable code to you; if systems in general
> define these types in sys/types.h then just remove the
> typedefs, problem solved.

Please consider the NOTE: above those includes.

> | >  /* XXX: This may be wrong for 64-bit ILP32 hosts.  */
> | >  typedef void * host_reg_t;
> | > @@ -78,11 +83,15 @@ typedef void * host_reg_t;
> | >  #define UINT32_MAX   (4294967295U)
> | >  #define UINT64_MAX   ((uint64_t)(18446744073709551615))
> | >  
> | > +#ifdef __OpenBSD__
> | > +typedef struct __sFILE FILE;
> | > +#else
> | >  typedef struct FILE FILE;
> | >  extern int fprintf(FILE *, const char *, ...);
> | >  extern int printf(const char *, ...);
> | >  #undef NULL
> | >  #define NULL 0
> | > +#endif
> | 
> | Shouldn't this cover only the FILE typedef?
> 
> Why is it that qemu knows what the definition of these prototypes
> are on all systems without consulting the header files.  I have a
> better idea, lets let the header files define the prototypes.
> Who would have though of that?
> 
> .. of course I purposefully intended to remove cruft that is
> in header files and belongs in header files.

See above.


Thiemo




Re: [Qemu-devel] Patch: dyngen-exec.h for OpenBSD

2007-04-06 Thread Todd T. Fries

Penned by Thiemo Seufer on 20070402 10:54.53, we have:
| >  /* NOTE: standard headers should be used with special care at this
| > point because host CPU registers are used as global variables. Some
| > host headers do not allow that. */
| >  #include 
| > -
| > +#ifdef __OpenBSD__
| > +#include 
| > +#else
| >  typedef unsigned char uint8_t;
| >  typedef unsigned short uint16_t;
| >  typedef unsigned int uint32_t;
| > @@ -61,6 +65,7 @@ typedef signed long int64_t;
| >  typedef signed long long int64_t;
| >  #endif
| >  #endif
| > +#endif
| 
| Is this specialcase really needed for OpenBSD?

Can you honestly tell me that on all platforms this is true?

Hello? Portability?  sys/types.h defines these types portably.
Doing so the way this code does it, is not portable.

I left your non portable code to you; if systems in general
define these types in sys/types.h then just remove the
typedefs, problem solved.
 
| >  /* XXX: This may be wrong for 64-bit ILP32 hosts.  */
| >  typedef void * host_reg_t;
| > @@ -78,11 +83,15 @@ typedef void * host_reg_t;
| >  #define UINT32_MAX (4294967295U)
| >  #define UINT64_MAX ((uint64_t)(18446744073709551615))
| >  
| > +#ifdef __OpenBSD__
| > +typedef struct __sFILE FILE;
| > +#else
| >  typedef struct FILE FILE;
| >  extern int fprintf(FILE *, const char *, ...);
| >  extern int printf(const char *, ...);
| >  #undef NULL
| >  #define NULL 0
| > +#endif
| 
| Shouldn't this cover only the FILE typedef?

Why is it that qemu knows what the definition of these prototypes
are on all systems without consulting the header files.  I have a
better idea, lets let the header files define the prototypes.
Who would have though of that?

.. of course I purposefully intended to remove cruft that is
in header files and belongs in header files.

I'll look at your other comments later, but these I see later in
the discussion are nearing inclusion with your recommended tweaks.

I'll submit patches to correct things again if necessary.

Thanks,
-- 
Todd Fries .. [EMAIL PROTECTED]

 _
| \  1.636.410.0632 (voice)
| Free Daemon Consulting, LLC \  1.405.227.9094 (voice)
| http://FreeDaemonConsulting.com \  1.866.792.3418 (FAX)
| "..in support of free software solutions."  \  250797 (FWD)
| \
 \\
 
  37E7 D3EB 74D0 8D66 A68D  B866 0326 204E 3F42 004A
http://todd.fries.net/pgp.txt





Re: [Qemu-devel] Patch: dyngen-exec.h for OpenBSD

2007-04-02 Thread M. Warner Losh
In message: <[EMAIL PROTECTED]>
Thiemo Seufer <[EMAIL PROTECTED]> writes:
: M. Warner Losh wrote:
: > In message: <[EMAIL PROTECTED]>
: > Thiemo Seufer <[EMAIL PROTECTED]> writes:
: > : I made that "#ifdef _BSD" based on the assumption it is ok for all
: > : BSD variants, including Darwin.
: > 
: > _BSD isn't defined on all variants of BSD.  sys/param.h defines BSD to
: > be 199506 on all BSD systems (at least all of them derived from 4.4BSD
: > lite).  sys/param.h also defines BSD4_3 and BSD4_4.  FreeBSD defines
: > __FreeBSD__ in the compiler, NetBSD defined __NetBSD__, OpenBSD
: > defines __OpenBSD__.  I'm unsure what darwin/osx define.
: > 
: > so unless I missed a change elsewhere in the build system to define
: > _BSD, this change needs some more thought.
: 
: It is already used in other files. The define in qemu comes from the
: configure script via config.h, which might be a bug.

Somehow I missed that detail...  In that case, nevermind :-)

Warner




Re: [Qemu-devel] Patch: dyngen-exec.h for OpenBSD

2007-04-02 Thread Thiemo Seufer
M. Warner Losh wrote:
> In message: <[EMAIL PROTECTED]>
> Thiemo Seufer <[EMAIL PROTECTED]> writes:
> : I made that "#ifdef _BSD" based on the assumption it is ok for all
> : BSD variants, including Darwin.
> 
> _BSD isn't defined on all variants of BSD.  sys/param.h defines BSD to
> be 199506 on all BSD systems (at least all of them derived from 4.4BSD
> lite).  sys/param.h also defines BSD4_3 and BSD4_4.  FreeBSD defines
> __FreeBSD__ in the compiler, NetBSD defined __NetBSD__, OpenBSD
> defines __OpenBSD__.  I'm unsure what darwin/osx define.
> 
> so unless I missed a change elsewhere in the build system to define
> _BSD, this change needs some more thought.

It is already used in other files. The define in qemu comes from the
configure script via config.h, which might be a bug.


Thiemo




Re: [Qemu-devel] Patch: dyngen-exec.h for OpenBSD

2007-04-02 Thread M. Warner Losh
In message: <[EMAIL PROTECTED]>
Thiemo Seufer <[EMAIL PROTECTED]> writes:
: I made that "#ifdef _BSD" based on the assumption it is ok for all
: BSD variants, including Darwin.

_BSD isn't defined on all variants of BSD.  sys/param.h defines BSD to
be 199506 on all BSD systems (at least all of them derived from 4.4BSD
lite).  sys/param.h also defines BSD4_3 and BSD4_4.  FreeBSD defines
__FreeBSD__ in the compiler, NetBSD defined __NetBSD__, OpenBSD
defines __OpenBSD__.  I'm unsure what darwin/osx define.

so unless I missed a change elsewhere in the build system to define
_BSD, this change needs some more thought.

Warner




Re: [Qemu-devel] Patch: dyngen-exec.h for OpenBSD

2007-04-02 Thread Thiemo Seufer
Juergen Keil wrote:
> 
> > From: Thiemo Seufer <[EMAIL PROTECTED]>
> > Todd T. Fries wrote:
> > > This is relative to the 20070319 snapshot.
> > > 
> > > 
> > > --- dyngen-exec.h.origMon Feb  5 17:01:54 2007
> > > +++ dyngen-exec.h Sat Mar 10 16:39:39 2007
> ...
> > >  /* XXX: This may be wrong for 64-bit ILP32 hosts.  */
> > >  typedef void * host_reg_t;
> > > @@ -78,11 +83,15 @@ typedef void * host_reg_t;
> > >  #define UINT32_MAX   (4294967295U)
> > >  #define UINT64_MAX   ((uint64_t)(18446744073709551615))
> > >  
> > > +#ifdef __OpenBSD__
> > > +typedef struct __sFILE FILE;
> > > +#else
> > >  typedef struct FILE FILE;
> > >  extern int fprintf(FILE *, const char *, ...);
> > >  extern int printf(const char *, ...);
> > >  #undef NULL
> > >  #define NULL 0
> > > +#endif
> > 
> > Shouldn't this cover only the FILE typedef?
> 
> Probably.
> 
> My dyngen-exec.h has a similar change, when I made some NetBSD experiments:
> 
> Index: dyngen-exec.h
> ===
> RCS file: /cvsroot/qemu/qemu/dyngen-exec.h,v
> retrieving revision 1.33
> diff -u -B -r1.33 dyngen-exec.h
> --- dyngen-exec.h   30 Mar 2007 16:44:53 -  1.33
> +++ dyngen-exec.h   2 Apr 2007 09:42:03 -
> @@ -78,7 +78,11 @@
>  #define UINT32_MAX (4294967295U)
>  #define UINT64_MAX ((uint64_t)(18446744073709551615))
> 
> +#ifdef __NetBSD__
> +typedef struct __sFILE FILE;
> +#else
>  typedef struct FILE FILE;
> +#endif

I made that "#ifdef _BSD" based on the assumption it is ok for all
BSD variants, including Darwin.


Thiemo




Re: [Qemu-devel] Patch: dyngen-exec.h for OpenBSD

2007-04-02 Thread Juergen Keil

> From: Thiemo Seufer <[EMAIL PROTECTED]>
> Todd T. Fries wrote:
> > This is relative to the 20070319 snapshot.
> > 
> > 
> > --- dyngen-exec.h.orig  Mon Feb  5 17:01:54 2007
> > +++ dyngen-exec.h   Sat Mar 10 16:39:39 2007
...
> >  /* XXX: This may be wrong for 64-bit ILP32 hosts.  */
> >  typedef void * host_reg_t;
> > @@ -78,11 +83,15 @@ typedef void * host_reg_t;
> >  #define UINT32_MAX (4294967295U)
> >  #define UINT64_MAX ((uint64_t)(18446744073709551615))
> >  
> > +#ifdef __OpenBSD__
> > +typedef struct __sFILE FILE;
> > +#else
> >  typedef struct FILE FILE;
> >  extern int fprintf(FILE *, const char *, ...);
> >  extern int printf(const char *, ...);
> >  #undef NULL
> >  #define NULL 0
> > +#endif
> 
> Shouldn't this cover only the FILE typedef?

Probably.

My dyngen-exec.h has a similar change, when I made some NetBSD experiments:

Index: dyngen-exec.h
===
RCS file: /cvsroot/qemu/qemu/dyngen-exec.h,v
retrieving revision 1.33
diff -u -B -r1.33 dyngen-exec.h
--- dyngen-exec.h   30 Mar 2007 16:44:53 -  1.33
+++ dyngen-exec.h   2 Apr 2007 09:42:03 -
@@ -78,7 +78,11 @@
 #define UINT32_MAX (4294967295U)
 #define UINT64_MAX ((uint64_t)(18446744073709551615))

+#ifdef __NetBSD__
+typedef struct __sFILE FILE;
+#else
 typedef struct FILE FILE;
+#endif
 extern int fprintf(FILE *, const char *, ...);
 extern int fputs(const char *, FILE *);
 extern int printf(const char *, ...);





Re: [Qemu-devel] Patch: dyngen-exec.h for OpenBSD

2007-04-02 Thread Thiemo Seufer
Todd T. Fries wrote:
> This is relative to the 20070319 snapshot.
> 
> 
> --- dyngen-exec.h.origMon Feb  5 17:01:54 2007
> +++ dyngen-exec.h Sat Mar 10 16:39:39 2007
> @@ -27,11 +27,15 @@
>  #define _FILEDEFED
>  #endif
>  
> +#include "config.h"
> +

Doesn't seem to be necessary in the header.

>  /* NOTE: standard headers should be used with special care at this
> point because host CPU registers are used as global variables. Some
> host headers do not allow that. */
>  #include 
> -
> +#ifdef __OpenBSD__
> +#include 
> +#else
>  typedef unsigned char uint8_t;
>  typedef unsigned short uint16_t;
>  typedef unsigned int uint32_t;
> @@ -61,6 +65,7 @@ typedef signed long int64_t;
>  typedef signed long long int64_t;
>  #endif
>  #endif
> +#endif

Is this specialcase really needed for OpenBSD?

>  /* XXX: This may be wrong for 64-bit ILP32 hosts.  */
>  typedef void * host_reg_t;
> @@ -78,11 +83,15 @@ typedef void * host_reg_t;
>  #define UINT32_MAX   (4294967295U)
>  #define UINT64_MAX   ((uint64_t)(18446744073709551615))
>  
> +#ifdef __OpenBSD__
> +typedef struct __sFILE FILE;
> +#else
>  typedef struct FILE FILE;
>  extern int fprintf(FILE *, const char *, ...);
>  extern int printf(const char *, ...);
>  #undef NULL
>  #define NULL 0
> +#endif

Shouldn't this cover only the FILE typedef?


Thiemo