blob: 60a5f31720fafcae6809014eba97ae295351f24b [file] [log] [blame]
/*
* Copyright (C) 1995 Advanced RISC Machines Limited. All rights reserved.
*
* This software may be freely used, copied, modified, and distributed
* provided that the above copyright notice is preserved in all copies of the
* software.
*/
/*> angel.h <*/
/*---------------------------------------------------------------------------*/
/* This header file is the main holder for the declarations and
* prototypes for the core Angel system. Some Angel concepts are
* described at the start of this file to ensure that a complete view
* of the Angel world can be derived purely from the source.
*
* $Revision$
* $Date$
*
*
* NOTE: Currently the Angel source is designed to be simple,
* understandable and easy to port to new hardware platforms. However,
* this does not always yield the highest performing system. The
* current layered approach introduces an overhead to the performance
* of the system. In a true commercial target, this code should be
* re-designed to build a system where the Angel logical message
* system, device driver and hardware accesses are merged to provide
* the best performance.
*/
/*---------------------------------------------------------------------------*/
/* Angel overview:
... some comments describing Angel ...
* Angel is designed as a kit-of-parts that can be used to provide
* run-time support for the development of ARM applications. The main
* core of Angel is in providing support for the "debug" message
* communication with a host system. These messages do not just cover
* debugging ARM processes, but also the process of downloading ARM
* programs or attaching to executing processes on the target.
*
* A stand-alone ROM based Angel world is the basic starting point for
* a system, since it will allow programs to be downloaded to the
* target. The ROM version of Angel will provide the generic debug
* support, but no system specific routines. The preferred method of
* using Angel is as a link library. This ensures that applications
* carry with them the Angel routines necessary to support debugging
* (and also ensure that the Angel version is up-to-date, independant
* of the version in the target ROM). Eventually, once a program has
* been fully debugged, a ROMmed version of the program can be
* generated with the Angel code being provided in the application.
.. more comments ..
* The standard Angel routines do *NOT* perform any dynamic memory
* allocation. To simplify the source, and aid the porting to a non C
* library world, memory is either pre-allocated (as build-time
* globals) or actually given to the particular Angel routine by the
* active run-time. This ensures that the interaction between Angel
* and the target O/S is minimised.
*
* Notes: We sub-include more header files to keep the source
* modular. Since Angel is a kit-of-parts alternative systems may need
* to change the prototypes of particular functions, whilst
* maintaining a fixed external interface. e.g. using the standard
* DEBUG messages, but with a different communications world.
*/
/*---------------------------------------------------------------------------*/
#ifndef __angel_h
#define __angel_h
/*---------------------------------------------------------------------------*/
/*-- Global Angel definitions and manifests ---------------------------------*/
/*---------------------------------------------------------------------------*/
/* When building Angel we may not include the standard library
* headers. However, it is useful coding using standard macro names
* since it makes the code easier to understand.
*/
typedef unsigned int word ;
typedef unsigned char byte ;
/* The following typedefs can be used to access I/O registers: */
typedef volatile unsigned int vuword ;
typedef volatile unsigned char vubyte ;
/*
* The following typedefs are used when defining objects that may also
* be created on a host system, where the word size is not
* 32bits. This ensures that the same data values are manipulated.
*/
#ifdef TARGET
typedef unsigned int unsigned32;
typedef signed int signed32;
typedef int int32;
typedef unsigned short int unsigned16;
typedef signed short int signed16;
/*
* yet another solution for the bool/boolean problem, this one is
* copied from Scott's modifications to clx/host.h
*/
# ifdef IMPLEMENT_BOOL_AS_ENUM
enum _bool { _false, _true };
# define _bool enum _bool
# elif defined(IMPLEMENT_BOOL_AS_INT) || !defined(__cplusplus)
# define _bool int
# define _false 0
# define _true 1
# endif
# ifdef _bool
# define bool _bool
# endif
# ifndef true
# define true _true
# define false _false
# endif
# ifndef YES
# define YES true
# define NO false
# endif
# undef TRUE /* some OSF headers define as 1 */
# define TRUE true
# undef FALSE /* some OSF headers define as 1 */
# define FALSE false
# ifndef NULL
# define NULL 0
# endif
#else
# include "host.h"
#endif
#ifndef IGNORE
# define IGNORE(x) ((x)=(x))
#endif
/* The following typedef allows us to cast between integral and
* function pointers. This isn't allowed by direct casting when
* conforming to the ANSI spec.
*/
typedef union ansibodge
{
word w ;
word *wp ;
void *vp ;
byte *bp ;
void (*vfn)(void) ;
word (*wfn)(void) ;
int (*ifn)(void) ;
byte (*bfn)(void) ;
} ansibodge ;
/*---------------------------------------------------------------------------*/
/* The amount setup aside by the run-time system for stack overflow
* handlers to execute in. This must be at least 256bytes, since that
* value is assumed by the current ARM Ltd compiler.
* This space is _only_ kept for the USR stack, not any of the privileged
* mode stacks, as stack overflow on these is always fatal - there is
* no point attemptingto recover. In addition is is important that
* Angel should keep privileged stack space requirements to a minimum.
*/
#define APCS_STACKGUARD 256
#endif /* __angel_h */
/* EOF angel.h */