/* Copyright (c) 2011 The Regents of the University of California
 * Barret Rhoden <brho@cs.berkeley.edu>
 * See LICENSE for details.
 *
 * x86-specific Kernel debugging headers and static inlines */

#pragma once

#include <ros/common.h>
#include <arch/x86.h>

/* Returns a PC/EIP in the function that called us, preferably near the call
 * site.  Returns 0 when we can't jump back any farther. */
static inline uintptr_t get_caller_pc(void)
{
	unsigned long *ebp = (unsigned long*)read_bp();

	if (!ebp)
		return 0;
	/* this is part of the way back into the call() instruction's bytes
	 * eagle-eyed readers should be able to explain why this is good enough,
	 * and retaddr (just *(ebp + 1) is not) */
	return *(ebp + 1) - 1;
}

static inline uintptr_t get_caller_fp(void)
{
	unsigned long *ebp = (unsigned long*)read_bp();

	if (!ebp)
		return 0;
	return *ebp;
}
