This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

src/gdb ChangeLog ia64-hpux-nat.c ia64-hpux-td ...


CVSROOT:	/cvs/src
Module name:	src
Changes by:	brobecke@sourceware.org	2011-01-13 16:24:42

Modified files:
	gdb            : ChangeLog ia64-hpux-nat.c ia64-hpux-tdep.c 
	                 ia64-tdep.c ia64-tdep.h target.h 

Log message:
	[ia64-hpux] inferior function call support
	
	We have two stacks to deal with on ia64, when making a function call.
	The first is the usual stack frame, and the second is the register
	stack frame.  On ia64-linux, the register frame is setup by adjusting
	the BSP register.  Unfortunately for us, the HP-UX kernel does not allow
	the debugger to change the value of the BSP.
	
	To work around that limitation, the method I am using here is to push
	some assembly code on the stack. This assembly code contains, among
	other things, a call to the alloc insn, which sets up our frame for us.
	An extensive comment in ia64-hpux-tdep.c explains the entire procedure.
	
	Despite this approach, most of the code in ia64-tdep.c which sets up
	the function call is still applicable - and only a few things need
	to be done differently:  For instance, instead of changing the BSP,
	we do nothing.  We store the parameters at a different location, etc.
	So this patch also adjusts the inf-call code in ia64-tdep.c to make it
	a little more extensible: I create a new ia64_infcall_ops structure
	which allows an ABI to define how the few things that need to be
	differentiated.
	
	Another element that turned out to be necessary but is more of a detail
	is that the computation of the linkage pointer needs to be handled
	specially for symbols inside shared libraries.  This is especially
	visible when calling malloc, which happens everytime memory needs to
	be allocated in inferior memory...  The special treatment included
	again the necessity to use some routines only available on the host.
	So another target object TARGET_OBJECT_HPUX_SOLIB_GOT was created for
	that purpose.
	
	gdb/ChangeLog:
	
	* ia64-tdep.h (struct regcache): Forward declare.
	(struct ia64_infcall_ops): New struct type.
	(struct gdbarch_tdep): New fields "find_global_pointer_from_solib"
	and "infcall_ops".
	* ia64-tdep.c (ia64_find_global_pointer_from_dynamic_section):
	Renames ia64_find_global_pointer.
	(ia64_find_global_pointer, ia64_allocate_new_rse_frame)
	(ia64_store_argument_in_slot, ia64_set_function_addr: New function.
	(ia64_push_dummy_call): Adjust to use the new tdep ia64_infocall_ops
	methods.
	(ia64_infcall_ops): New static global constant.
	(ia64_gdbarch_init): Set tdep->infcall_ops.
	* ia64-hpux-nat.c (ia64_hpux_xfer_solib_got): New function.
	(ia64_hpux_xfer_partial): Add TARGET_OBJECT_HPUX_SOLIB_GOT handing.
	* ia64-hpux-tdep.c: Include "regcache.h", "gdbcore.h" and "inferior.h".
	(ia64_hpux_dummy_code): New static global constant.
	(ia64_hpux_push_dummy_code, ia64_hpux_allocate_new_rse_frame)
	(ia64_hpux_store_argument_in_slot, ia64_hpux_set_function_addr)
	(ia64_hpux_dummy_id, ia64_hpux_find_global_pointer_from_solib):
	New function.
	(ia64_hpux_infcall_ops): New static global constant.
	(ia64_hpux_init_abi): Install gdbarch and tdep methods needed
	for inferior function calls to work properly on ia64-hpux.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&r1=1.12473&r2=1.12474
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ia64-hpux-nat.c.diff?cvsroot=src&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ia64-hpux-tdep.c.diff?cvsroot=src&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ia64-tdep.c.diff?cvsroot=src&r1=1.210&r2=1.211
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ia64-tdep.h.diff?cvsroot=src&r1=1.17&r2=1.18
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/target.h.diff?cvsroot=src&r1=1.196&r2=1.197


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]