m3core/src/runtime/ex_frame/RTStackC.c


/* Copyright (C) 1995, Digital Equipment Corporation           */
/* All rights reserved.                                        */
/* See the file COPYRIGHT for a full description.              */
/* Last modified on Thu May  4 09:13:59 PDT 1995 by kalsow     */

/* This file implements the default stack walking functions of
   the RTStack interface for platforms that don't support stack
   walking. */

#ifdef _MSC_VER
#undef _DLL
#ifndef _MT
#define _MT
#endif
#pragma warning(disable:4514) /* unused inline function */
#pragma warning(disable:4100) /* unused parameter */
#pragma warning(disable:4255) /* () converted to (void) */
#endif

#if !defined(_MSC_VER) && !defined(__cdecl)
#define __cdecl /* nothing */
#endif

#include <stdlib.h>

#ifdef __cplusplus
extern "C" {
#endif

#if 1 /* defined(__STDC__) || defined(__cplusplus) || defined(_MSC_VER) || defined(__GNUC__) */
#define ANSI(x) x
#define KR(x)
#else
#define ANSI(x)
#define KR(x) x
#endif

/* TYPE Frame = RECORD pc, sp: ADDRESS END; */
typedef struct {
  unsigned long pc;
  unsigned long sp;
} Frame;


/*---------------------------------------------------------------------------*/
/* PROCEDURE GetThreadFrame (VAR f: Frame;  start: ADDRESS;  len: INTEGER);
   Return in "f" the frame of the thread whose machine state is in bytes
   [start .. start+len).  Returns with f.pc=NIL on failure. */

void __cdecl RTStack__GetThreadFrame ANSI((Frame *f, char *start, int len))
      KR((f, start, len) Frame *f; char *start; int len;)
{
  abort ();
}

/*---------------------------------------------------------------------------*/
/* PROCEDURE CurrentFrame (VAR(*OUT*) f: Frame);
   Return in "f" the frame of its caller.  Returns with pc = NIL on failure. */

void __cdecl RTStack__CurFrame ANSI((Frame *f))
     KR((f) Frame *f;)
{
  abort ();
}

/*---------------------------------------------------------------------------*/
/* PROCEDURE PreviousFrame (READONLY f: Frame): Frame;
   Return the stack frame that called "f".  Returns with pc = NIL if
   "f" is the first frame on the stack or its predecessor is ill-formed. */

void __cdecl RTStack__PrevFrame ANSI((Frame *callee, Frame *caller))
    KR((callee, caller) Frame *callee; Frame *caller;)
{
  abort ();
}

/*---------------------------------------------------------------------------*/
/* PROCEDURE Unwind (READONLY f: Frame);
   Restore the machine state back to the frame "f".  All callee-saved
   registers must be restored to the state they were in when frame "f"
   made its last call. */

void __cdecl RTStack__Unwind ANSI((Frame *target))
    KR((target) Frame *target;)
{
  abort ();
}

/*---------------------------------------------------------------------------*/
/* PROCEDURE ProcName (READONLY f: Frame): ADDRESS;
   Return the null-terminated constant string that names the procedure
   corresponding to the stack frame "f".  Returns NIL if no name is
   known. */

char* __cdecl RTStack__ProcName ANSI((Frame *f))
    KR((f) Frame *f;)
{
  return (char*)0;
}

#ifdef __cplusplus
} /* extern "C" */
#endif