79 lines
2.6 KiB
C
79 lines
2.6 KiB
C
|
/***************************************************************************
|
||
|
* ARM Stack Unwinder, Michael.McTernan.2001@cs.bris.ac.uk
|
||
|
*
|
||
|
* This program is PUBLIC DOMAIN.
|
||
|
* This means that there is no copyright and anyone is able to take a copy
|
||
|
* for free and use it as they wish, with or without modifications, and in
|
||
|
* any context, commercially or otherwise. The only limitation is that I
|
||
|
* don't guarantee that the software is fit for any purpose or accept any
|
||
|
* liability for it's use or misuse - this software is without warranty.
|
||
|
***************************************************************************
|
||
|
* File Description: Implementation of the interface into the ARM unwinder.
|
||
|
**************************************************************************/
|
||
|
|
||
|
#define MODULE_NAME "UNWARMINDER"
|
||
|
|
||
|
/***************************************************************************
|
||
|
* Include Files
|
||
|
**************************************************************************/
|
||
|
|
||
|
#include "types.h"
|
||
|
#include <stdio.h>
|
||
|
#include <string.h>
|
||
|
#include "unwarminder.h"
|
||
|
#include "unwarm.h"
|
||
|
|
||
|
|
||
|
/***************************************************************************
|
||
|
* Manifest Constants
|
||
|
**************************************************************************/
|
||
|
|
||
|
|
||
|
/***************************************************************************
|
||
|
* Type Definitions
|
||
|
**************************************************************************/
|
||
|
|
||
|
|
||
|
/***************************************************************************
|
||
|
* Variables
|
||
|
**************************************************************************/
|
||
|
|
||
|
|
||
|
/***************************************************************************
|
||
|
* Macros
|
||
|
**************************************************************************/
|
||
|
|
||
|
|
||
|
/***************************************************************************
|
||
|
* Local Functions
|
||
|
**************************************************************************/
|
||
|
|
||
|
|
||
|
/***************************************************************************
|
||
|
* Global Functions
|
||
|
**************************************************************************/
|
||
|
|
||
|
UnwResult UnwindStart(Int32 pcValue,
|
||
|
Int32 spValue,
|
||
|
const UnwindCallbacks *cb,
|
||
|
void *data)
|
||
|
{
|
||
|
UnwState state;
|
||
|
|
||
|
/* Initialise the unwinding state */
|
||
|
UnwInitState(&state, cb, data, pcValue, spValue);
|
||
|
|
||
|
/* Check the Thumb bit */
|
||
|
if(pcValue & 0x1)
|
||
|
{
|
||
|
return UnwStartThumb(&state);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return UnwStartArm(&state);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* END OF FILE */
|
||
|
|