diff options
author | marius <marius@FreeBSD.org> | 2008-10-27 21:31:14 +0000 |
---|---|---|
committer | marius <marius@FreeBSD.org> | 2008-10-27 21:31:14 +0000 |
commit | 9555573a49572c3e2bf571588d941629fdcd17f0 (patch) | |
tree | a36f00fd2fdf620adbe23701d812888b7413ac13 /sys/sun4v | |
parent | ae1f87d8c5fb6a2025e480e673b2cffb04f8da75 (diff) | |
download | FreeBSD-src-9555573a49572c3e2bf571588d941629fdcd17f0.zip FreeBSD-src-9555573a49572c3e2bf571588d941629fdcd17f0.tar.gz |
- In GCC 4.2 __builtin_frame_address() was fixed to include the
V9 stack bias so we no longer need to add it in db_backtrace()
and stack_capture() respectively. This also reverts r182018,
which kludged around the resulting unaligned access.
- Sync the sun4v versions of db_trace.c and stack_machdep.c with
the sparc64 ones and fix some style bugs.
MFC after: 3 days
Diffstat (limited to 'sys/sun4v')
-rw-r--r-- | sys/sun4v/sun4v/db_trace.c | 15 | ||||
-rw-r--r-- | sys/sun4v/sun4v/stack_machdep.c | 23 |
2 files changed, 13 insertions, 25 deletions
diff --git a/sys/sun4v/sun4v/db_trace.c b/sys/sun4v/sun4v/db_trace.c index 632d256..260d2e1 100644 --- a/sys/sun4v/sun4v/db_trace.c +++ b/sys/sun4v/sun4v/db_trace.c @@ -22,10 +22,11 @@ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. - * - * $FreeBSD$ */ +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + #include <sys/param.h> #include <sys/systm.h> #include <sys/kdb.h> @@ -241,7 +242,6 @@ db_backtrace(struct thread *td, struct frame *fp, int count) db_addr_t pc; int trap; int user; - int quit; if (count == -1) count = 1024; @@ -249,7 +249,6 @@ db_backtrace(struct thread *td, struct frame *fp, int count) trap = 0; user = 0; npc = 0; - quit = 0; while (count-- && !user && !db_pager_quit) { pc = (db_addr_t)db_get_value((db_addr_t)&fp->fr_pc, sizeof(fp->fr_pc), FALSE); @@ -288,10 +287,9 @@ db_backtrace(struct thread *td, struct frame *fp, int count) void db_trace_self(void) { - db_expr_t addr; - addr = (db_expr_t)__builtin_frame_address(1); - db_backtrace(curthread, (struct frame *)(addr + SPOFF), -1); + db_backtrace(curthread, + (struct frame *)__builtin_frame_address(1), -1); } int @@ -300,5 +298,6 @@ db_trace_thread(struct thread *td, int count) struct pcb *ctx; ctx = kdb_thr_ctx(td); - return (db_backtrace(td, (struct frame*)(ctx->pcb_sp + SPOFF), count)); + return (db_backtrace(td, + (struct frame *)(ctx->pcb_sp + SPOFF), count)); } diff --git a/sys/sun4v/sun4v/stack_machdep.c b/sys/sun4v/sun4v/stack_machdep.c index 2ee0ff3..e29ce88 100644 --- a/sys/sun4v/sun4v/stack_machdep.c +++ b/sys/sun4v/sun4v/stack_machdep.c @@ -32,54 +32,43 @@ __FBSDID("$FreeBSD$"); #include <sys/stack.h> #include <sys/systm.h> -#include <vm/vm.h> -#include <vm/vm_page.h> -#include <vm/vm_map.h> - -#include <machine/cpu.h> #include <machine/pcb.h> #include <machine/stack.h> -#include <machine/trap.h> #include <machine/vmparam.h> +static void stack_capture(struct stack *st, struct frame *fp); + static void -stack_capture(struct stack *st, uint64_t addr) +stack_capture(struct stack *st, struct frame *fp) { - struct frame *fp; vm_offset_t callpc; stack_zero(st); - fp = (struct frame *)(addr + SPOFF); while (1) { callpc = fp->fr_pc; if (!INKERNEL(callpc)) break; if (stack_put(st, callpc) == -1) break; - fp = (struct frame *)(fp->fr_fp + SPOFF); + fp = v9next_frame(fp); } - } void stack_save_td(struct stack *st, struct thread *td) { - uint64_t addr; if (TD_IS_SWAPPED(td)) panic("stack_save_td: swapped"); if (TD_IS_RUNNING(td)) panic("stack_save_td: running"); - addr = td->td_pcb->pcb_sp; - stack_capture(st, addr); + stack_capture(st, (struct frame *)(td->td_pcb->pcb_sp + SPOFF)); } void stack_save(struct stack *st) { - uint64_t addr; - addr = (uint64_t)__builtin_frame_address(1); - stack_capture(st, addr); + stack_capture(st, (struct frame *)__builtin_frame_address(1)); } |