OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gdb/] [gdb-6.8/] [sim/] [common/] [sim-config.h] - Blame information for rev 26

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 26 jlechner
/* The common simulator framework for GDB, the GNU Debugger.
2
 
3
   Copyright 2002, 2004, 2007, 2008 Free Software Foundation, Inc.
4
 
5
   Contributed by Andrew Cagney and Red Hat.
6
 
7
   This file is part of GDB.
8
 
9
   This program is free software; you can redistribute it and/or modify
10
   it under the terms of the GNU General Public License as published by
11
   the Free Software Foundation; either version 3 of the License, or
12
   (at your option) any later version.
13
 
14
   This program is distributed in the hope that it will be useful,
15
   but WITHOUT ANY WARRANTY; without even the implied warranty of
16
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
   GNU General Public License for more details.
18
 
19
   You should have received a copy of the GNU General Public License
20
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
 
22
 
23
#ifndef SIM_CONFIG_H
24
#define SIM_CONFIG_H
25
 
26
 
27
/* Host dependant:
28
 
29
   The CPP below defines information about the compilation host.  In
30
   particular it defines the macro's:
31
 
32
        WITH_HOST_BYTE_ORDER    The byte order of the host. Could
33
                                be any of LITTLE_ENDIAN, BIG_ENDIAN
34
                                or 0 (unknown).  Those macro's also
35
                                need to be defined.
36
 
37
 */
38
 
39
 
40
/* NetBSD:
41
 
42
   NetBSD is easy, everything you could ever want is in a header file
43
   (well almost :-) */
44
 
45
#if defined(__NetBSD__)
46
# include <machine/endian.h>
47
# if (WITH_HOST_BYTE_ORDER == 0)
48
#  undef WITH_HOST_BYTE_ORDER
49
#  define WITH_HOST_BYTE_ORDER BYTE_ORDER
50
# endif
51
# if (BYTE_ORDER != WITH_HOST_BYTE_ORDER)
52
#  error "host endian incorrectly configured, check config.h"
53
# endif
54
#endif
55
 
56
/* Linux is similarly easy.  */
57
 
58
#if defined(__linux__)
59
# include <endian.h>
60
# if defined(__LITTLE_ENDIAN) && !defined(LITTLE_ENDIAN)
61
#  define LITTLE_ENDIAN __LITTLE_ENDIAN
62
# endif
63
# if defined(__BIG_ENDIAN) && !defined(BIG_ENDIAN)
64
#  define BIG_ENDIAN __BIG_ENDIAN
65
# endif
66
# if defined(__BYTE_ORDER) && !defined(BYTE_ORDER)
67
#  define BYTE_ORDER __BYTE_ORDER
68
# endif
69
# if (WITH_HOST_BYTE_ORDER == 0)
70
#  undef WITH_HOST_BYTE_ORDER
71
#  define WITH_HOST_BYTE_ORDER BYTE_ORDER
72
# endif
73
# if (BYTE_ORDER != WITH_HOST_BYTE_ORDER)
74
#  error "host endian incorrectly configured, check config.h"
75
# endif
76
#endif
77
 
78
/* INSERT HERE - hosts that have available LITTLE_ENDIAN and
79
   BIG_ENDIAN macro's */
80
 
81
 
82
/* Some hosts don't define LITTLE_ENDIAN or BIG_ENDIAN, help them out */
83
 
84
#ifndef LITTLE_ENDIAN
85
#define LITTLE_ENDIAN 1234
86
#endif
87
#ifndef BIG_ENDIAN
88
#define BIG_ENDIAN 4321
89
#endif
90
 
91
 
92
/* SunOS on SPARC:
93
 
94
   Big endian last time I looked */
95
 
96
#if defined(sparc) || defined(__sparc__)
97
# if (WITH_HOST_BYTE_ORDER == 0)
98
#  undef WITH_HOST_BYTE_ORDER
99
#  define WITH_HOST_BYTE_ORDER BIG_ENDIAN
100
# endif
101
# if (WITH_HOST_BYTE_ORDER != BIG_ENDIAN)
102
#  error "sun was big endian last time I looked ..."
103
# endif
104
#endif
105
 
106
 
107
/* Random x86
108
 
109
   Little endian last time I looked */
110
 
111
#if defined(i386) || defined(i486) || defined(i586) || defined (i686) || defined(__i386__) || defined(__i486__) || defined(__i586__) || defined (__i686__)
112
# if (WITH_HOST_BYTE_ORDER == 0)
113
#  undef WITH_HOST_BYTE_ORDER
114
#  define WITH_HOST_BYTE_ORDER LITTLE_ENDIAN
115
# endif
116
# if (WITH_HOST_BYTE_ORDER != LITTLE_ENDIAN)
117
#  error "x86 was little endian last time I looked ..."
118
# endif
119
#endif
120
 
121
#if (defined (__i486__) || defined (__i586__) || defined (__i686__)) && defined(__GNUC__) && WITH_BSWAP
122
#undef  htonl
123
#undef  ntohl
124
#define htonl(IN) __extension__ ({ int _out; __asm__ ("bswap %0" : "=r" (_out) : "0" (IN)); _out; })
125
#define ntohl(IN) __extension__ ({ int _out; __asm__ ("bswap %0" : "=r" (_out) : "0" (IN)); _out; })
126
#endif
127
 
128
/* Power or PowerPC running AIX  */
129
#if defined(_POWER) && defined(_AIX)
130
# if (WITH_HOST_BYTE_ORDER == 0)
131
#  undef WITH_HOST_BYTE_ORDER
132
#  define WITH_HOST_BYTE_ORDER BIG_ENDIAN
133
# endif
134
# if (WITH_HOST_BYTE_ORDER != BIG_ENDIAN)
135
#  error "Power/PowerPC AIX was big endian last time I looked ..."
136
# endif
137
#endif
138
 
139
/* Solaris running PowerPC */
140
#if defined(__PPC) && defined(__sun__)
141
# if (WITH_HOST_BYTE_ORDER == 0)
142
#  undef WITH_HOST_BYTE_ORDER
143
#  define WITH_HOST_BYTE_ORDER LITTLE_ENDIAN
144
# endif
145
# if (WITH_HOST_BYTE_ORDER != LITTLE_ENDIAN)
146
#  error "Solaris on PowerPCs was little endian last time I looked ..."
147
# endif
148
#endif
149
 
150
/* HP/PA */
151
#if defined(__hppa__)
152
# if (WITH_HOST_BYTE_ORDER == 0)
153
#  undef WITH_HOST_BYTE_ORDER
154
#  define WITH_HOST_BYTE_ORDER BIG_ENDIAN
155
# endif
156
# if (WITH_HOST_BYTE_ORDER != BIG_ENDIAN)
157
#  error "HP/PA was big endian last time I looked ..."
158
# endif
159
#endif
160
 
161
/* Big endian MIPS */
162
#if defined(__MIPSEB__)
163
# if (WITH_HOST_BYTE_ORDER == 0)
164
#  undef WITH_HOST_BYTE_ORDER
165
#  define WITH_HOST_BYTE_ORDER BIG_ENDIAN
166
# endif
167
# if (WITH_HOST_BYTE_ORDER != BIG_ENDIAN)
168
#  error "MIPSEB was big endian last time I looked ..."
169
# endif
170
#endif
171
 
172
/* Little endian MIPS */
173
#if defined(__MIPSEL__)
174
# if (WITH_HOST_BYTE_ORDER == 0)
175
#  undef WITH_HOST_BYTE_ORDER
176
#  define WITH_HOST_BYTE_ORDER LITTLE_ENDIAN
177
# endif
178
# if (WITH_HOST_BYTE_ORDER != LITTLE_ENDIAN)
179
#  error "MIPSEL was little endian last time I looked ..."
180
# endif
181
#endif
182
 
183
/* Windows NT */
184
#if defined(__WIN32__)
185
# if (WITH_HOST_BYTE_ORDER == 0)
186
#  undef WITH_HOST_BYTE_ORDER
187
#  define WITH_HOST_BYTE_ORDER LITTLE_ENDIAN
188
# endif
189
# if (WITH_HOST_BYTE_ORDER != LITTLE_ENDIAN)
190
#  error "Windows NT was little endian last time I looked ..."
191
# endif
192
#endif
193
 
194
/* Alpha running DEC unix */
195
#if defined(__osf__) && defined(__alpha__)
196
# if (WITH_HOST_BYTE_ORDER == 0)
197
#  undef WITH_HOST_BYTE_ORDER
198
#  define WITH_HOST_BYTE_ORDER LITTLE_ENDIAN
199
# endif
200
# if (WITH_HOST_BYTE_ORDER != LITTLE_ENDIAN)
201
#  error "AXP running DEC unix was little endian last time I looked ..."
202
# endif
203
#endif
204
 
205
 
206
/* INSERT HERE - additional hosts that do not have LITTLE_ENDIAN and
207
   BIG_ENDIAN definitions available.  */
208
 
209
/* Until devices and tree properties are sorted out, tell sim-config.c
210
   not to call the tree_find_foo fns.  */
211
#define WITH_TREE_PROPERTIES 0
212
 
213
 
214
/* endianness of the host/target:
215
 
216
   If the build process is aware (at compile time) of the endianness
217
   of the host/target it is able to eliminate slower generic endian
218
   handling code.
219
 
220
   Possible values are 0 (unknown), LITTLE_ENDIAN, BIG_ENDIAN */
221
 
222
#ifndef WITH_HOST_BYTE_ORDER
223
#define WITH_HOST_BYTE_ORDER            0 /*unknown*/
224
#endif
225
 
226
#ifndef WITH_TARGET_BYTE_ORDER
227
#define WITH_TARGET_BYTE_ORDER          0 /*unknown*/
228
#endif
229
 
230
#ifndef WITH_DEFAULT_TARGET_BYTE_ORDER
231
#define WITH_DEFAULT_TARGET_BYTE_ORDER 0 /* fatal */
232
#endif
233
 
234
extern int current_host_byte_order;
235
#define CURRENT_HOST_BYTE_ORDER (WITH_HOST_BYTE_ORDER \
236
                                 ? WITH_HOST_BYTE_ORDER \
237
                                 : current_host_byte_order)
238
extern int current_target_byte_order;
239
#define CURRENT_TARGET_BYTE_ORDER (WITH_TARGET_BYTE_ORDER \
240
                                   ? WITH_TARGET_BYTE_ORDER \
241
                                   : current_target_byte_order)
242
 
243
 
244
 
245
/* XOR endian.
246
 
247
   In addition to the above, the simulator can support the horrible
248
   XOR endian mode (as found in the PowerPC and MIPS ISA).  See
249
   sim-core for more information.
250
 
251
   If WITH_XOR_ENDIAN is non-zero, it specifies the number of bytes
252
   potentially involved in the XOR munge. A typical value is 8. */
253
 
254
#ifndef WITH_XOR_ENDIAN
255
#define WITH_XOR_ENDIAN         0
256
#endif
257
 
258
 
259
 
260
/* Intel host BSWAP support:
261
 
262
   Whether to use bswap on the 486 and pentiums rather than the 386
263
   sequence that uses xchgb/rorl/xchgb */
264
#ifndef WITH_BSWAP
265
#define WITH_BSWAP 0
266
#endif
267
 
268
 
269
 
270
/* SMP support:
271
 
272
   Sets a limit on the number of processors that can be simulated.  If
273
   WITH_SMP is set to zero (0), the simulator is restricted to
274
   suporting only one processor (and as a consequence leaves the SMP
275
   code out of the build process).
276
 
277
   The actual number of processors is taken from the device
278
   /options/smp@<nr-cpu> */
279
 
280
#if defined (WITH_SMP) && (WITH_SMP > 0)
281
#define MAX_NR_PROCESSORS               WITH_SMP
282
#endif
283
 
284
#ifndef MAX_NR_PROCESSORS
285
#define MAX_NR_PROCESSORS               1
286
#endif
287
 
288
 
289
/* Size of target word, address and OpenFirmware Cell:
290
 
291
   The target word size is determined by the natural size of its
292
   reginsters.
293
 
294
   On most hosts, the address and cell are the same size as a target
295
   word.  */
296
 
297
#ifndef WITH_TARGET_WORD_BITSIZE
298
#define WITH_TARGET_WORD_BITSIZE        32
299
#endif
300
 
301
#ifndef WITH_TARGET_ADDRESS_BITSIZE
302
#define WITH_TARGET_ADDRESS_BITSIZE     WITH_TARGET_WORD_BITSIZE
303
#endif
304
 
305
#ifndef WITH_TARGET_CELL_BITSIZE
306
#define WITH_TARGET_CELL_BITSIZE        WITH_TARGET_WORD_BITSIZE
307
#endif
308
 
309
#ifndef WITH_TARGET_FLOATING_POINT_BITSIZE
310
#define WITH_TARGET_FLOATING_POINT_BITSIZE 64
311
#endif
312
 
313
 
314
 
315
/* Most significant bit of target:
316
 
317
   Set this according to your target's bit numbering convention.  For
318
   the PowerPC it is zero, for many other targets it is 31 or 63.
319
 
320
   For targets that can both have either 32 or 64 bit words and number
321
   MSB as 31, 63.  Define this to be (WITH_TARGET_WORD_BITSIZE - 1) */
322
 
323
#ifndef WITH_TARGET_WORD_MSB
324
#define WITH_TARGET_WORD_MSB            0
325
#endif
326
 
327
 
328
 
329
/* Program environment:
330
 
331
   Three environments are available - UEA (user), VEA (virtual) and
332
   OEA (perating).  The former two are environment that users would
333
   expect to see (VEA includes things like coherency and the time
334
   base) while OEA is what an operating system expects to see.  By
335
   setting these to specific values, the build process is able to
336
   eliminate non relevent environment code.
337
 
338
   STATE_ENVIRONMENT(sd) specifies which of vea or oea is required for
339
   the current runtime.
340
 
341
   ALL_ENVIRONMENT is used during configuration as a value for
342
   WITH_ENVIRONMENT to indicate the choice is runtime selectable.
343
   The default is then USER_ENVIRONMENT [since allowing the user to choose
344
   the default at configure time seems like featuritis and since people using
345
   OPERATING_ENVIRONMENT have more to worry about than selecting the
346
   default].
347
   ALL_ENVIRONMENT is also used to set STATE_ENVIRONMENT to the
348
   "uninitialized" state.  */
349
 
350
enum sim_environment {
351
  ALL_ENVIRONMENT,
352
  USER_ENVIRONMENT,
353
  VIRTUAL_ENVIRONMENT,
354
  OPERATING_ENVIRONMENT
355
};
356
 
357
/* If the simulator specified SIM_AC_OPTION_ENVIRONMENT, indicate so.  */
358
#ifdef WITH_ENVIRONMENT
359
#define SIM_HAVE_ENVIRONMENT
360
#endif
361
 
362
/* If the simulator doesn't specify SIM_AC_OPTION_ENVIRONMENT in its
363
   configure.in, the only supported environment is the user environment.  */
364
#ifndef WITH_ENVIRONMENT
365
#define WITH_ENVIRONMENT USER_ENVIRONMENT
366
#endif
367
 
368
#define DEFAULT_ENVIRONMENT (WITH_ENVIRONMENT != ALL_ENVIRONMENT \
369
                             ? WITH_ENVIRONMENT \
370
                             : USER_ENVIRONMENT)
371
 
372
/* To be prepended to simulator calls with absolute file paths and
373
   chdir:ed at startup.  */
374
extern char *simulator_sysroot;
375
 
376
/* Callback & Modulo Memory.
377
 
378
   Core includes a builtin memory type (raw_memory) that is
379
   implemented using an array.  raw_memory does not require any
380
   additional functions etc.
381
 
382
   Callback memory is where the core calls a core device for the data
383
   it requires.  Callback memory can be layered using priorities.
384
 
385
   Modulo memory is a variation on raw_memory where ADDRESS & (MODULO
386
   - 1) is used as the index into the memory array.
387
 
388
   The OEA model uses callback memory for devices.
389
 
390
   The VEA model uses callback memory to capture `page faults'.
391
 
392
   BTW, while raw_memory could have been implemented as a callback,
393
   profiling has shown that there is a biger win (at least for the
394
   x86) in eliminating a function call for the most common
395
   (raw_memory) case. */
396
 
397
#ifndef WITH_CALLBACK_MEMORY
398
#define WITH_CALLBACK_MEMORY            1
399
#endif
400
 
401
#ifndef WITH_MODULO_MEMORY
402
#define WITH_MODULO_MEMORY              0
403
#endif
404
 
405
 
406
 
407
/* Alignment:
408
 
409
   A processor architecture may or may not handle miss aligned
410
   transfers.
411
 
412
   As alternatives: both little and big endian modes take an exception
413
   (STRICT_ALIGNMENT); big and little endian models handle mis aligned
414
   transfers (NONSTRICT_ALIGNMENT); or the address is forced into
415
   alignment using a mask (FORCED_ALIGNMENT).
416
 
417
   Mixed alignment should be specified when the simulator needs to be
418
   able to change the alignment requirements on the fly (eg for
419
   bi-endian support). */
420
 
421
enum sim_alignments {
422
  MIXED_ALIGNMENT,
423
  NONSTRICT_ALIGNMENT,
424
  STRICT_ALIGNMENT,
425
  FORCED_ALIGNMENT,
426
};
427
 
428
extern enum sim_alignments current_alignment;
429
 
430
#if !defined (WITH_ALIGNMENT)
431
#define WITH_ALIGNMENT 0
432
#endif
433
 
434
#if !defined (WITH_DEFAULT_ALIGNMENT)
435
#define WITH_DEFAULT_ALIGNMENT 0 /* fatal */
436
#endif
437
 
438
 
439
 
440
 
441
#define CURRENT_ALIGNMENT (WITH_ALIGNMENT \
442
                           ? WITH_ALIGNMENT \
443
                           : current_alignment)
444
 
445
 
446
 
447
/* Floating point suport:
448
 
449
   Should the processor trap for all floating point instructions (as
450
   if the hardware wasn't implemented) or implement the floating point
451
   instructions directly. */
452
 
453
#if defined (WITH_FLOATING_POINT)
454
 
455
#define SOFT_FLOATING_POINT             1
456
#define HARD_FLOATING_POINT             2
457
 
458
extern int current_floating_point;
459
#define CURRENT_FLOATING_POINT (WITH_FLOATING_POINT \
460
                                ? WITH_FLOATING_POINT \
461
                                : current_floating_point)
462
 
463
#endif
464
 
465
 
466
 
467
/* Engine module.
468
 
469
   Use the common start/stop/restart framework (sim-engine).
470
   Simulators using the other modules but not the engine should define
471
   WITH_ENGINE=0. */
472
 
473
#ifndef WITH_ENGINE
474
#define WITH_ENGINE                     1
475
#endif
476
 
477
 
478
 
479
/* Debugging:
480
 
481
   Control the inclusion of debugging code.
482
   Debugging is only turned on in rare circumstances [say during development]
483
   and is not intended to be turned on otherwise.  */
484
 
485
#ifndef WITH_DEBUG
486
#define WITH_DEBUG                      0
487
#endif
488
 
489
/* Include the tracing code.  Disabling this eliminates all tracing
490
   code */
491
 
492
#ifndef WITH_TRACE
493
#define WITH_TRACE                      (-1)
494
#endif
495
 
496
/* Include the profiling code.  Disabling this eliminates all profiling
497
   code.  */
498
 
499
#ifndef WITH_PROFILE
500
#define WITH_PROFILE                    (-1)
501
#endif
502
 
503
 
504
/* include code that checks assertions scattered through out the
505
   program */
506
 
507
#ifndef WITH_ASSERT
508
#define WITH_ASSERT                     1
509
#endif
510
 
511
 
512
/* Whether to check instructions for reserved bits being set */
513
 
514
/* #define WITH_RESERVED_BITS           1 */
515
 
516
 
517
 
518
/* include monitoring code */
519
 
520
#define MONITOR_INSTRUCTION_ISSUE       1
521
#define MONITOR_LOAD_STORE_UNIT         2
522
/* do not define WITH_MON by default */
523
#define DEFAULT_WITH_MON                (MONITOR_LOAD_STORE_UNIT \
524
                                         | MONITOR_INSTRUCTION_ISSUE)
525
 
526
 
527
/* Current CPU model (models are in the generated models.h include file)  */
528
#ifndef WITH_MODEL
529
#define WITH_MODEL                      0
530
#endif
531
 
532
#define CURRENT_MODEL (WITH_MODEL       \
533
                       ? WITH_MODEL     \
534
                       : current_model)
535
 
536
#ifndef WITH_DEFAULT_MODEL
537
#define WITH_DEFAULT_MODEL              DEFAULT_MODEL
538
#endif
539
 
540
#define MODEL_ISSUE_IGNORE              (-1)
541
#define MODEL_ISSUE_PROCESS             1
542
 
543
#ifndef WITH_MODEL_ISSUE
544
#define WITH_MODEL_ISSUE                0
545
#endif
546
 
547
extern int current_model_issue;
548
#define CURRENT_MODEL_ISSUE (WITH_MODEL_ISSUE   \
549
                             ? WITH_MODEL_ISSUE \
550
                             : current_model_issue)
551
 
552
 
553
 
554
/* Whether or not input/output just uses stdio, or uses printf_filtered for
555
   output, and polling input for input.  */
556
 
557
#define DONT_USE_STDIO                  2
558
#define DO_USE_STDIO                    1
559
 
560
#ifndef WITH_STDIO
561
#define WITH_STDIO                      0
562
#endif
563
 
564
extern int current_stdio;
565
#define CURRENT_STDIO (WITH_STDIO       \
566
                       ? WITH_STDIO     \
567
                       : current_stdio)
568
 
569
 
570
 
571
/* Specify that configured calls pass parameters in registers when the
572
   convention is that they are placed on the stack */
573
 
574
#ifndef WITH_REGPARM
575
#define WITH_REGPARM                   0
576
#endif
577
 
578
/* Specify that configured calls use an alternative calling mechanism */
579
 
580
#ifndef WITH_STDCALL
581
#define WITH_STDCALL                   0
582
#endif
583
 
584
 
585
/* Set the default state configuration, before parsing argv.  */
586
 
587
extern void sim_config_default (SIM_DESC sd);
588
 
589
/* Complete and verify the simulator configuration.  */
590
 
591
extern SIM_RC sim_config (SIM_DESC sd);
592
 
593
/* Print the simulator configuration.  */
594
 
595
extern void print_sim_config (SIM_DESC sd);
596
 
597
 
598
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.