From 7bbfa39f59dcbc55b21d31abb9e2febef6a51ebb Mon Sep 17 00:00:00 2001 From: Flavio Cruz Date: Wed, 30 Mar 2016 02:26:28 +0200 Subject: Use uint32_t instead of unsigned32_t. Implement stdint.h and use it in gnumach. 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. --- Makefile.am | 2 +- i386/i386/xen.h | 4 +-- i386/include/mach/i386/machine_types.defs | 4 +-- i386/include/mach/i386/vm_types.h | 24 -------------- i386/xen/xen.c | 2 +- include/device/device_types.defs | 6 ++-- include/mach/std_types.defs | 8 ++--- include/mach/std_types.h | 1 + include/stdint.h | 55 +++++++++++++++++++++++++++++++ include/sys/types.h | 15 +-------- ipc/ipc_kmsg.c | 8 ++--- kern/exception.c | 2 +- linux/dev/include/linux/types.h | 10 ------ xen/block.c | 4 +-- xen/net.c | 6 ++-- xen/public/elfstructs.h | 2 +- xen/ring.h | 2 +- xen/store.c | 4 +-- xen/store.h | 2 +- xen/time.c | 28 ++++++++-------- xen/time.h | 2 +- 21 files changed, 100 insertions(+), 91 deletions(-) create mode 100644 include/stdint.h diff --git a/Makefile.am b/Makefile.am index 1c1bffff..bbcfc111 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 c6811873..49b0d52f 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 6ac17cf4..6ff93dbd 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 4a58b1cb..4e259f9b 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 a46ee2c6..44d37e6f 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 49cc2717..e97d89ca 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 a1f156d9..5d95ab42 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 diff --git a/include/mach/std_types.h b/include/mach/std_types.h index f78e236a..553bd618 100644 --- a/include/mach/std_types.h +++ b/include/mach/std_types.h @@ -37,6 +37,7 @@ #include #include #include +#include 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 00000000..bea277ec --- /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 19e7b242..d576cc2a 100644 --- a/include/sys/types.h +++ b/include/sys/types.h @@ -27,6 +27,7 @@ #define _MACH_SA_SYS_TYPES_H_ #include +#include #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 5076809e..21667cae 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 63a63d66..246c1419 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 b697d9ec..eb086c20 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 d98b31e2..46df3589 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 55643651..a5db4568 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 77362f3b..65d53457 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 c5c2fe39..1ac8b37d 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 739dc367..659a70c7 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 ae236eb6..6bb78ea1 100644 --- a/xen/store.h +++ b/xen/store.h @@ -21,7 +21,7 @@ #include #include -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 4ebe91fa..3ad73e23 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 8c8bc53e..cf28720f 100644 --- a/xen/time.h +++ b/xen/time.h @@ -20,6 +20,6 @@ #define XEN_TIME_H #include -unsigned64_t hyp_get_time(void); +uint64_t hyp_get_time(void); #endif /* XEN_TIME_H */ -- cgit v1.2.3