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