Subject: Re: [resend] ia64 stack unwind.
To: None <cherry@mahiti.org>
From: Takayoshi Kochi <kochi@NetBSD.org>
List: port-ia64
Date: 12/28/2005 10:44:45
Hi,

> I'm trying to implement DDB's db_stack_trace_print() for ia64 with some
> basic functionality ( like a call tracing for a start ). This really
> doesn't require all of the stack unwind stuff, because I'm trying to add
> support just for the kernel at the moment, and kernel call stacks are
> really quite simple ( because we don't pass tremendous numbers of
> arguments to functions within the kernel, and, we don't do floating
> point stuff within the kernel ( am I right ? ) ).

I think you already know, ia64 uses some floating point registers
for the kernel (such as divdi3 in libkern).  If you use division
in C code, gcc generates calls to libgcc (libkern) functions.
On ia64, floating point registers are used even when you use only
integers in your C code.

> FreeBSD uses  HP licensed code ( see
> http://fxr.watson.org/fxr/source/contrib/ia64/libuwx/src/uwx.h )
> 
> So here's what I'm asking:
> 
> Would it be ok to carefully sync with the gcc version distributed with
> NetBSD source and implement a slightly non-conformant ( to the IA64
> run-time spec document ) but embarassingly simple stack unwind method
> ( very similar to how the  hppa port does this ), 

Have you look at libunwind?
http://www.hpl.hp.com/research/linux/libunwind/

It's MIT-license.

---
Takayoshi Kochi