ia64/xen-unstable

view tools/ioemu/cpu-defs.h @ 7238:971e7c7411b3

Raise an exception if an error appears on the pipes to our children, and make
sure that the child's pipes are closed even under that exception. Move the
handling of POLLHUP to the end of the loop, so that we guarantee to read any
remaining data from the child if POLLHUP and POLLIN appear at the same time.

Signed-off-by: Ewan Mellor <ewan@xensource.com>
author emellor@ewan
date Thu Oct 06 10:13:11 2005 +0100 (2005-10-06)
parents 8e5fc5fe636c
children f7b43e5c42b9
line source
1 /*
2 * common defines for all CPUs
3 *
4 * Copyright (c) 2003 Fabrice Bellard
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20 #ifndef CPU_DEFS_H
21 #define CPU_DEFS_H
23 #include "config.h"
24 #include <setjmp.h>
25 #include <inttypes.h>
26 #include "osdep.h"
28 #ifndef TARGET_LONG_BITS
29 #error TARGET_LONG_BITS must be defined before including this header
30 #endif
32 #if defined(__alpha__) || defined (__ia64__) || defined(__x86_64__)
33 #define HOST_LONG_BITS 64
34 #else
35 #define HOST_LONG_BITS 32
36 #endif
38 #ifndef TARGET_PHYS_ADDR_BITS
39 #if TARGET_LONG_BITS >= HOST_LONG_BITS
40 #define TARGET_PHYS_ADDR_BITS TARGET_LONG_BITS
41 #else
42 #define TARGET_PHYS_ADDR_BITS HOST_LONG_BITS
43 #endif
44 #endif
46 #define TARGET_LONG_SIZE (TARGET_LONG_BITS / 8)
48 /* target_ulong is the type of a virtual address */
49 #if TARGET_LONG_SIZE == 4
50 typedef int32_t target_long;
51 typedef uint32_t target_ulong;
52 #elif TARGET_LONG_SIZE == 8
53 typedef int64_t target_long;
54 typedef uint64_t target_ulong;
55 #else
56 #error TARGET_LONG_SIZE undefined
57 #endif
59 /* target_phys_addr_t is the type of a physical address (its size can
60 be different from 'target_ulong'). We have sizeof(target_phys_addr)
61 = max(sizeof(unsigned long),
62 sizeof(size_of_target_physical_address)) because we must pass a
63 host pointer to memory operations in some cases */
65 #if TARGET_PHYS_ADDR_BITS == 32
66 typedef uint32_t target_phys_addr_t;
67 #elif TARGET_PHYS_ADDR_BITS == 64
68 typedef uint64_t target_phys_addr_t;
69 #else
70 #error TARGET_PHYS_ADDR_BITS undefined
71 #endif
73 #define HOST_LONG_SIZE (HOST_LONG_BITS / 8)
75 #define EXCP_INTERRUPT 256 /* async interruption */
76 #define EXCP_HLT 257 /* hlt instruction reached */
77 #define EXCP_DEBUG 258 /* cpu stopped after a breakpoint or singlestep */
79 #define MAX_BREAKPOINTS 32
81 #define CPU_TLB_SIZE 256
83 typedef struct CPUTLBEntry {
84 /* bit 31 to TARGET_PAGE_BITS : virtual address
85 bit TARGET_PAGE_BITS-1..IO_MEM_SHIFT : if non zero, memory io
86 zone number
87 bit 3 : indicates that the entry is invalid
88 bit 2..0 : zero
89 */
90 target_ulong address;
91 /* addend to virtual address to get physical address */
92 target_phys_addr_t addend;
93 } CPUTLBEntry;
95 #endif