summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlavio Cruz <flaviocruz@gmail.com>2016-03-30 02:26:28 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2016-04-04 09:36:36 +0200
commit7bbfa39f59dcbc55b21d31abb9e2febef6a51ebb (patch)
tree840a881ede29701996d51a94272b4da3115e3412
parenta90dc34f976cd37da23af526120f2ac480cb131f (diff)
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.
-rw-r--r--Makefile.am2
-rw-r--r--i386/i386/xen.h4
-rwxr-xr-xi386/include/mach/i386/machine_types.defs4
-rw-r--r--i386/include/mach/i386/vm_types.h24
-rw-r--r--i386/xen/xen.c2
-rw-r--r--include/device/device_types.defs6
-rw-r--r--include/mach/std_types.defs8
-rw-r--r--include/mach/std_types.h1
-rw-r--r--include/stdint.h55
-rw-r--r--include/sys/types.h15
-rw-r--r--ipc/ipc_kmsg.c8
-rw-r--r--kern/exception.c2
-rw-r--r--linux/dev/include/linux/types.h10
-rw-r--r--xen/block.c4
-rw-r--r--xen/net.c6
-rw-r--r--xen/public/elfstructs.h2
-rw-r--r--xen/ring.h2
-rw-r--r--xen/store.c4
-rw-r--r--xen/store.h2
-rw-r--r--xen/time.c28
-rw-r--r--xen/time.h2
21 files changed, 100 insertions, 91 deletions
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 <mach/machine/machine_types.defs>
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 <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 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 <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 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 <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 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 <mach/mach_types.h>
-unsigned64_t hyp_get_time(void);
+uint64_t hyp_get_time(void);
#endif /* XEN_TIME_H */