bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Use uint32_t instead of unsigned32_t.


From: Samuel Thibault
Subject: Re: [PATCH] Use uint32_t instead of unsigned32_t.
Date: Mon, 4 Apr 2016 09:48:21 +0200
User-agent: Mutt/1.5.21+34 (58baf7c9f32f) (2010-12-30)

Flavio Cruz, on Wed 30 Mar 2016 02:26:28 +0200, wrote:
> Implement stdint.h and use it in gnumach.

Applied, thanks!

> Remove old type definitions such as signed* and unsigned*.
> 
> * Makefile.am: Add -ffreestanding.
> * i386/i386/xen.h: Use uint64_t.
> * i386/include/mach/i386/machine_types.defs: Use uint32_t and int32_t.
> * i386/include/mach/i386/vm_types.h: Remove definitions of int*, uint*,
> unsigned* and signed* types.
> * i386/xen/xen.c: Use uint64_t.
> * include/device/device_types.defs: Use uint32_t.
> * include/mach/std_types.defs: Use POSIX types.
> * include/mach/std_types.h: Include stdint.h.
> * include/stdint.h: New file with POSIX types.
> * include/sys/types.h: Include stdint.h.
> * ipc/ipc_kmsg.c: Use uint64_t.
> * kern/exception.c: Use uint32_t.
> * linux/dev/include/linux/types.h: Remove POSIX types.
> * xen/block.c: Use uint64_t.
> * xen/net.c: Do not use removed unsigned*_t types.
> * xen/ring.h: Use uint32_t instead.
> * xen/store.c: Use uint32_t.
> * xen/store.h: Use uint32_t.
> * xen/time.c: Use POSIX types only.
> * xen/time.h: Use uint64_t.
> ---
> On Mon, Mar 28, 2016 at 10:59:48PM +0200, Samuel Thibault wrote:
> > Samuel Thibault, on Tue 22 Mar 2016 23:32:40 +0100, wrote:
> > > Flavio Cruz, on Sun 20 Mar 2016 22:01:10 +0100, wrote:
> > > > I've tried to compile GNU Mach using stdint.h and
> > > > -ffreestanding and so far so good, however I'm not sure if removing
> > > > -nostdinc is a good idea since we may include some files from
> > > > /usr/include that should not included (things like sys/types.h and
> > > > sys/time.h which are implemented in gnumach/include).
> > > 
> > > Thinking again, perhaps we should just have our own posix-compliant
> > > include/stdint.h (just like we have stddef.h and string.h), used for
> > > kernel build, and installed headers can use the system's stdint.h
> > 
> > ping?
> > 
> > Samuel
> 
> Hey
> 
> Here's the updated gnumach patch with a "homegrown" stdint.h. Let me
> know what you think.
> 
> diff --git a/Makefile.am b/Makefile.am
> index 1c1bfff..bbcfc11 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -42,7 +42,7 @@ AM_LDFLAGS =
>  #
>  
>  AM_CPPFLAGS += \
> -     -nostdinc -imacros config.h
> +     -ffreestanding -nostdinc -imacros config.h
>  
>  AM_CPPFLAGS += \
>       -I$(systype) \
> diff --git a/i386/i386/xen.h b/i386/i386/xen.h
> index c681187..49b0d52 100644
> --- a/i386/i386/xen.h
> +++ b/i386/i386/xen.h
> @@ -356,8 +356,8 @@ _hypcall2(int, set_debugreg, int, reg, unsigned long, 
> value);
>  _hypcall1(unsigned long, get_debugreg, int, reg);
>  
>  /* x86-specific */
> -MACH_INLINE unsigned64_t hyp_cpu_clock(void) {
> -     unsigned64_t tsc;
> +MACH_INLINE uint64_t hyp_cpu_clock(void) {
> +     uint64_t tsc;
>       asm volatile("rdtsc":"=A"(tsc));
>       return tsc;
>  }
> diff --git a/i386/include/mach/i386/machine_types.defs 
> b/i386/include/mach/i386/machine_types.defs
> index 6ac17cf..6ff93db 100755
> --- a/i386/include/mach/i386/machine_types.defs
> +++ b/i386/include/mach/i386/machine_types.defs
> @@ -47,7 +47,7 @@
>   * a port in user space as an integer and
>   * in kernel space as a pointer.
>   */
> -type natural_t = unsigned32;
> +type natural_t = uint32_t;
>  
>  /*
>   * An integer_t is the signed counterpart
> @@ -56,6 +56,6 @@ type natural_t = unsigned32;
>   * other types in a machine-independent
>   * way.
>   */
> -type integer_t = int32;
> +type integer_t = int32_t;
>  
>  #endif       /* _MACHINE_MACHINE_TYPES_DEFS_ */
> diff --git a/i386/include/mach/i386/vm_types.h 
> b/i386/include/mach/i386/vm_types.h
> index 4a58b1c..4e259f9 100644
> --- a/i386/include/mach/i386/vm_types.h
> +++ b/i386/include/mach/i386/vm_types.h
> @@ -59,16 +59,6 @@ typedef unsigned int       natural_t;
>   */
>  typedef int          integer_t;
>  
> -#ifndef _POSIX_SOURCE
> -
> -/*
> - * An int32 is an integer that is at least 32 bits wide
> - */
> -typedef int          int32;
> -typedef unsigned int uint32;
> -
> -#endif /* _POSIX_SOURCE */
> -
>  /*
>   * A vm_offset_t is a type-neutral pointer,
>   * e.g. an offset into a virtual memory space.
> @@ -92,20 +82,6 @@ typedef unsigned long phys_addr_t;
>   */
>  typedef      natural_t       vm_size_t;
>  
> -/*
> - * These types are _exactly_ as wide as indicated in their names.
> - */
> -typedef signed char          signed8_t;
> -typedef signed short         signed16_t;
> -typedef signed int           signed32_t;
> -typedef signed long long     signed64_t;
> -typedef unsigned char                unsigned8_t;
> -typedef unsigned short               unsigned16_t;
> -typedef unsigned int         unsigned32_t;
> -typedef unsigned long long   unsigned64_t;
> -typedef float                        float32_t;
> -typedef double                       float64_t;
> -
>  #endif       /* __ASSEMBLER__ */
>  
>  /*
> diff --git a/i386/xen/xen.c b/i386/xen/xen.c
> index a46ee2c..44d37e6 100644
> --- a/i386/xen/xen.c
> +++ b/i386/xen/xen.c
> @@ -46,7 +46,7 @@ void hyp_failsafe_c_callback(struct failsafe_callback_regs 
> *regs) {
>  
>  extern void return_to_iret;
>  
> -void hypclock_machine_intr(int old_ipl, void *ret_addr, struct 
> i386_interrupt_state *regs, unsigned64_t delta) {
> +void hypclock_machine_intr(int old_ipl, void *ret_addr, struct 
> i386_interrupt_state *regs, uint64_t delta) {
>       if (ret_addr == &return_to_iret) {
>               clock_interrupt(delta/1000,             /* usec per tick */
>                       (regs->efl & EFL_VM) ||         /* user mode */ 
> diff --git a/include/device/device_types.defs 
> b/include/device/device_types.defs
> index 49cc271..e97d89c 100644
> --- a/include/device/device_types.defs
> +++ b/include/device/device_types.defs
> @@ -43,9 +43,9 @@
>  DEVICE_IMPORTS
>  #endif
>  
> -type recnum_t                = unsigned32;
> -type dev_mode_t              = unsigned32;
> -type dev_flavor_t    = unsigned32;
> +type recnum_t                = uint32_t;
> +type dev_mode_t              = uint32_t;
> +type dev_flavor_t    = uint32_t;
>  type dev_name_t              = (MACH_MSG_TYPE_STRING_C, 8*128);
>  type dev_status_t    = array[*:1024] of int;
>  type io_buf_ptr_t    = ^array[] of MACH_MSG_TYPE_INTEGER_8;
> diff --git a/include/mach/std_types.defs b/include/mach/std_types.defs
> index a1f156d..5d95ab4 100644
> --- a/include/mach/std_types.defs
> +++ b/include/mach/std_types.defs
> @@ -33,12 +33,12 @@
>  type char = MACH_MSG_TYPE_CHAR;
>  type short = MACH_MSG_TYPE_INTEGER_16;
>  type int = MACH_MSG_TYPE_INTEGER_32;
> -type int32 = MACH_MSG_TYPE_INTEGER_32;
> -type int64 = MACH_MSG_TYPE_INTEGER_64;
> +type int32_t = MACH_MSG_TYPE_INTEGER_32;
> +type int64_t = MACH_MSG_TYPE_INTEGER_64;
>  type boolean_t = MACH_MSG_TYPE_BOOLEAN;
>  type unsigned = MACH_MSG_TYPE_INTEGER_32;
> -type unsigned32 = MACH_MSG_TYPE_INTEGER_32;
> -type unsigned64 = MACH_MSG_TYPE_INTEGER_64;
> +type uint32_t = MACH_MSG_TYPE_INTEGER_32;
> +type uint64_t = MACH_MSG_TYPE_INTEGER_64;
>  
>  /* Get the definitions for natural_t and integer_t */
>  #include <mach/machine/machine_types.defs>
> diff --git a/include/mach/std_types.h b/include/mach/std_types.h
> index f78e236..553bd61 100644
> --- a/include/mach/std_types.h
> +++ b/include/mach/std_types.h
> @@ -37,6 +37,7 @@
>  #include <mach/kern_return.h>
>  #include <mach/port.h>
>  #include <mach/machine/vm_types.h>
> +#include <stdint.h>
>  
>  typedef      vm_offset_t     pointer_t;
>  typedef      vm_offset_t     vm_address_t;
> diff --git a/include/stdint.h b/include/stdint.h
> new file mode 100644
> index 0000000..0b1fd71
> --- /dev/null
> +++ b/include/stdint.h
> @@ -0,0 +1,55 @@
> +/*
> + * Copyright (C) 2016 Free Software Foundation, Inc.
> + *
> + * This file is part of GNU Mach.
> + *
> + * GNU Mach is free software; you can redistribute it and/or modify it
> + * under the terms of the GNU General Public License as published by the
> + * Free Software Foundation; either version 2, or (at your option) any later
> + * version.
> + * 
> + * This program is distributed in the hope that it will be useful, but
> + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
> + * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
> + * for more details.
> + * 
> + * You should have received a copy of the GNU General Public License along
> + * with this program; if not, write to the Free Software Foundation, Inc.,
> + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
> + */
> +
> +#ifndef _STDINT_H_
> +#define _STDINT_H_
> +
> +/*
> + * These types are _exactly_ as wide as indicated in their names.
> + */
> +
> +typedef char         int8_t;
> +typedef short                int16_t;
> +typedef int          int32_t;
> +#if __x86_64__
> +typedef long int     int64_t;
> +#else
> +typedef long long int        int64_t;
> +#endif /* __x86_64__ */
> +
> +typedef unsigned char                uint8_t;
> +typedef unsigned short               uint16_t;
> +typedef unsigned int         uint32_t;
> +#if __x86_64__
> +typedef unsigned long int    uint64_t;
> +#else
> +typedef unsigned long long int       uint64_t;
> +#endif /* __x86_64__ */
> +
> +/* Types for `void *' pointers.  */
> +#if __x86_64__
> +typedef long int             intptr_t;
> +typedef unsigned long int    uintptr_t;
> +#else
> +typedef int                  intptr_t;
> +typedef unsigned int         uintptr_t;
> +#endif /* __x86_64__ */
> +
> +#endif /* _STDINT_H_ */
> diff --git a/include/sys/types.h b/include/sys/types.h
> index 19e7b24..d576cc2 100644
> --- a/include/sys/types.h
> +++ b/include/sys/types.h
> @@ -27,6 +27,7 @@
>  #define      _MACH_SA_SYS_TYPES_H_
>  
>  #include <mach/machine/vm_types.h>
> +#include <stdint.h>
>  
>  #ifndef _SIZE_T
>  #define _SIZE_T
> @@ -58,20 +59,6 @@ typedef    unsigned int    time_t;
>  
>  #define RAND_MAX     0x7fffffff
>  
> -/* Posix types */
> -typedef signed8_t    int8_t;
> -typedef unsigned8_t  uint8_t;
> -typedef unsigned8_t  u_int8_t;
> -typedef signed16_t   int16_t;
> -typedef unsigned16_t uint16_t;
> -typedef unsigned16_t u_int16_t;
> -typedef signed32_t   int32_t;
> -typedef unsigned32_t uint32_t;
> -typedef unsigned32_t u_int32_t;
> -typedef signed64_t   int64_t;
> -typedef unsigned64_t uint64_t;
> -typedef unsigned64_t u_int64_t;
> -
>  /* Symbols not allowed by POSIX */
>  #ifndef _POSIX_SOURCE
>  
> diff --git a/ipc/ipc_kmsg.c b/ipc/ipc_kmsg.c
> index 5076809..21667ca 100644
> --- a/ipc/ipc_kmsg.c
> +++ b/ipc/ipc_kmsg.c
> @@ -1307,7 +1307,7 @@ ipc_kmsg_copyin_body(
>               mach_msg_type_number_t number;
>               boolean_t is_inline, longform, dealloc, is_port;
>               vm_offset_t data;
> -             unsigned64_t length;
> +             uint64_t length;
>               kern_return_t kr;
>  
>               type = (mach_msg_type_long_t *) saddr;
> @@ -1358,7 +1358,7 @@ ipc_kmsg_copyin_body(
>  
>               /* calculate length of data in bytes, rounding up */
>  
> -             length = (((unsigned64_t) number * size) + 7) >> 3;
> +             length = (((uint64_t) number * size) + 7) >> 3;
>  
>               if (is_inline) {
>                       vm_size_t amount;
> @@ -2351,7 +2351,7 @@ ipc_kmsg_copyout_body(
>               mach_msg_type_size_t size;
>               mach_msg_type_number_t number;
>               boolean_t is_inline, longform, is_port;
> -             unsigned64_t length;
> +             uint64_t length;
>               vm_offset_t addr;
>  
>               type = (mach_msg_type_long_t *) saddr;
> @@ -2382,7 +2382,7 @@ ipc_kmsg_copyout_body(
>  
>               /* calculate length of data in bytes, rounding up */
>  
> -             length = (((unsigned64_t) number * size) + 7) >> 3;
> +             length = (((uint64_t) number * size) + 7) >> 3;
>  
>               is_port = MACH_MSG_TYPE_PORT_ANY(name);
>  
> diff --git a/kern/exception.c b/kern/exception.c
> index 63a63d6..246c141 100644
> --- a/kern/exception.c
> +++ b/kern/exception.c
> @@ -757,7 +757,7 @@ exception_raise(
>  
>  /* Macro used by MIG to cleanly check the type.  */
>  #define BAD_TYPECHECK(type, check) unlikely (({\
> -  union { mach_msg_type_t t; unsigned32_t w; } _t, _c;\
> +  union { mach_msg_type_t t; uint32_t w; } _t, _c;\
>    _t.t = *(type); _c.t = *(check);_t.w != _c.w; }))
>  
>  /* Type descriptor for the return code.  */
> diff --git a/linux/dev/include/linux/types.h b/linux/dev/include/linux/types.h
> index b697d9e..eb086c2 100644
> --- a/linux/dev/include/linux/types.h
> +++ b/linux/dev/include/linux/types.h
> @@ -109,16 +109,6 @@ struct ustat {
>       char                    f_fpack[6];
>  };
>  
> -/* stdint.h */
> -typedef s8 int8_t;
> -typedef u8 uint8_t;
> -typedef s16 int16_t;
> -typedef u16 uint16_t;
> -typedef s32 int32_t;
> -typedef u32 uint32_t;
> -typedef s64 int64_t;
> -typedef u64 uint64_t;
> -
>  /* Yes, this is ugly.  But that's why it is called glue code.  */
>  
>  #define _MACH_SA_SYS_TYPES_H_
> diff --git a/xen/block.c b/xen/block.c
> index d98b31e..46df358 100644
> --- a/xen/block.c
> +++ b/xen/block.c
> @@ -489,7 +489,7 @@ device_read (void *d, ipc_port_t reply_port,
>        req->operation = BLKIF_OP_READ;
>        req->nr_segments = nbpages;
>        req->handle = bd->handle;
> -      req->id = (unsigned64_t) (unsigned long) &err; /* pointer on the stack 
> */
> +      req->id = (uint64_t) (unsigned long) &err; /* pointer on the stack */
>        req->sector_number = bn + offset / 512;
>        for (i = 0; i < nbpages; i++) {
>       req->seg[i].gref = gref[i] = hyp_grant_give(bd->domid, 
> atop(pages[i]->phys_addr), 0);
> @@ -641,7 +641,7 @@ device_write(void *d, ipc_port_t reply_port,
>      req->operation = BLKIF_OP_WRITE;
>      req->nr_segments = nbpages;
>      req->handle = bd->handle;
> -    req->id = (unsigned64_t) (unsigned long) &err; /* pointer on the stack */
> +    req->id = (uint64_t) (unsigned long) &err; /* pointer on the stack */
>      req->sector_number = bn + i*PAGE_SIZE / 512;
>  
>      for (j = 0; j < nbpages; j++) {
> diff --git a/xen/net.c b/xen/net.c
> index 5564365..a5db456 100644
> --- a/xen/net.c
> +++ b/xen/net.c
> @@ -119,10 +119,10 @@ static void enqueue_rx_buf(struct net_data *nd, int 
> number) {
>  }
>  
>  static int recompute_checksum(void *data, int len) {
> -     unsigned16_t *header16 = data;
> -     unsigned8_t *header8 = data;
> +     uint16_t *header16 = data;
> +     uint8_t *header8 = data;
>       unsigned length, i;
> -     unsigned32_t checksum = 0;
> +     uint32_t checksum = 0;
>  
>       /* IPv4 header length */
>       length = (header8[0] & 0xf) * 4;
> diff --git a/xen/public/elfstructs.h b/xen/public/elfstructs.h
> index 77362f3..65d5345 100644
> --- a/xen/public/elfstructs.h
> +++ b/xen/public/elfstructs.h
> @@ -353,7 +353,7 @@ typedef struct {
>  
>  #define      ELF64_R_SYM(info)       ((info) >> 32)
>  #define      ELF64_R_TYPE(info)      ((info) & 0xFFFFFFFF)
> -#define ELF64_R_INFO(s,t)    (((s) << 32) + (u_int32_t)(t))
> +#define ELF64_R_INFO(s,t)    (((s) << 32) + (uint32_t)(t))
>  
>  /* Program Header */
>  typedef struct {
> diff --git a/xen/ring.h b/xen/ring.h
> index c5c2fe3..1ac8b37 100644
> --- a/xen/ring.h
> +++ b/xen/ring.h
> @@ -19,7 +19,7 @@
>  #ifndef      XEN_RING_H
>  #define      XEN_RING_H
>  
> -typedef unsigned32_t hyp_ring_pos_t;
> +typedef uint32_t hyp_ring_pos_t;
>  
>  #define hyp_ring_idx(ring, pos) (((unsigned)(pos)) & (sizeof(ring)-1))
>  #define hyp_ring_cell(ring, pos) (ring)[hyp_ring_idx((ring), (pos))]
> diff --git a/xen/store.c b/xen/store.c
> index 739dc36..659a70c 100644
> --- a/xen/store.c
> +++ b/xen/store.c
> @@ -46,7 +46,7 @@ struct store_req {
>  };
>  
>  /* Send a request */
> -static void store_put(hyp_store_transaction_t t, unsigned32_t type, struct 
> store_req *req, unsigned nr_reqs) {
> +static void store_put(hyp_store_transaction_t t, uint32_t type, struct 
> store_req *req, unsigned nr_reqs) {
>       struct xsd_sockmsg head = {
>               .type = type,
>               .req_id = 0,
> @@ -105,7 +105,7 @@ static const char *errors[] = {
>  static struct xsd_sockmsg head;
>  const char *hyp_store_error;
>  
> -static void *store_put_wait(hyp_store_transaction_t t, unsigned32_t type, 
> struct store_req *req, unsigned nr_reqs) {
> +static void *store_put_wait(hyp_store_transaction_t t, uint32_t type, struct 
> store_req *req, unsigned nr_reqs) {
>       unsigned len;
>       const char **error;
>       void *data;
> diff --git a/xen/store.h b/xen/store.h
> index ae236eb..6bb78ea 100644
> --- a/xen/store.h
> +++ b/xen/store.h
> @@ -21,7 +21,7 @@
>  #include <machine/xen.h>
>  #include <xen/public/io/xenbus.h>
>  
> -typedef unsigned32_t hyp_store_transaction_t;
> +typedef uint32_t hyp_store_transaction_t;
>  
>  #define hyp_store_state_unknown              "0"
>  #define hyp_store_state_initializing "1"
> diff --git a/xen/time.c b/xen/time.c
> index 4ebe91f..3ad73e2 100644
> --- a/xen/time.c
> +++ b/xen/time.c
> @@ -28,14 +28,14 @@
>  #include "time.h"
>  #include "store.h"
>  
> -static unsigned64_t lastnsec;
> +static uint64_t lastnsec;
>  
>  /* 2^64 nanoseconds ~= 500 years */
> -static unsigned64_t hyp_get_stime(void) {
> -     unsigned32_t version;
> -     unsigned64_t cpu_clock, last_cpu_clock, delta, system_time;
> -     unsigned64_t delta_high, delta_low;
> -     unsigned32_t mul;
> +static uint64_t hyp_get_stime(void) {
> +     uint32_t version;
> +     uint64_t cpu_clock, last_cpu_clock, delta, system_time;
> +     uint64_t delta_high, delta_low;
> +     uint32_t mul;
>       signed8_t shift;
>       volatile struct vcpu_time_info *time = 
> &hyp_shared_info.vcpu_info[0].time;
>  
> @@ -56,14 +56,14 @@ static unsigned64_t hyp_get_stime(void) {
>       else
>               delta <<= shift;
>       delta_high = delta >> 32;
> -     delta_low = (unsigned32_t) delta;
> -     return system_time + ((delta_low * (unsigned64_t) mul) >> 32)
> -       + (delta_high * (unsigned64_t) mul);
> +     delta_low = (uint32_t) delta;
> +     return system_time + ((delta_low * (uint64_t) mul) >> 32)
> +       + (delta_high * (uint64_t) mul);
>  }
>  
> -unsigned64_t hyp_get_time(void) {
> -     unsigned32_t version;
> -     unsigned32_t sec, nsec;
> +uint64_t hyp_get_time(void) {
> +     uint32_t version;
> +     uint32_t sec, nsec;
>  
>       do {
>               version = hyp_shared_info.wc_version;
> @@ -77,7 +77,7 @@ unsigned64_t hyp_get_time(void) {
>  }
>  
>  static void hypclock_intr(int unit, int old_ipl, void *ret_addr, struct 
> i386_interrupt_state *regs) {
> -     unsigned64_t nsec, delta;
> +     uint64_t nsec, delta;
>  
>       if (!lastnsec)
>               return;
> @@ -116,7 +116,7 @@ int
>  readtodc(tp)
>       u_int   *tp;
>  {
> -     unsigned64_t t = hyp_get_time();
> +     uint64_t t = hyp_get_time();
>       u_int n = t / 1000000000;
>  
>       *tp = n;
> diff --git a/xen/time.h b/xen/time.h
> index 8c8bc53..cf28720 100644
> --- a/xen/time.h
> +++ b/xen/time.h
> @@ -20,6 +20,6 @@
>  #define XEN_TIME_H
>  
>  #include <mach/mach_types.h>
> -unsigned64_t hyp_get_time(void);
> +uint64_t hyp_get_time(void);
>  
>  #endif /* XEN_TIME_H */
> -- 
> 2.7.0
> 
> 

-- 
Samuel
 CN > J'ai enseigné l'algorythmique.
 GLG> C'est quoi l'algorythmique ? Une contrebasse programmée en Algol ?
 -+- in : Guide du Neuneu d'Usenet - Neuneu fait ses gammes. -+-



reply via email to

[Prev in Thread] Current Thread [Next in Thread]