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


CVSROOT:	/cvs/src
Module name:	src
Changes by:	brobecke@sourceware.org	2012-08-16 23:55:02

Modified files:
	gdb            : ChangeLog ia64-hpux-nat.c 

Log message:
	fix internal_error during fork event handling.
	
	When running on ia64-hpux a program that calls fork, GDB currently
	reports the following internal error:
	
	internal-error: Can't determine the current address space of thread process 1882
	
	Here is what happens:
	1. GDB receives a "fork" event;
	2. handle_inferior_event calls detach_breakpoints for the child process;
	3. detach_breakpoints calls ia64's gdbarch remove_breakpoint hook,
	which needs to read an entire instruction slot in order to remove
	a breakpoint instruction from memory;
	4. To read inferior memory, the ia64-hpux code needs to know where
	that memory is located relative to the bsp..bspstore area,
	and thus needs to read the value of those registers;
	5. To get the value of those registers, ia64_hpux_xfer_memory current
	uses the current regcache.
	
	The problem is that at the time we are trying to remove the breakpoints
	from the child, the child process is not part of the list of inferiors
	really known to GDB (it has not been added to inferior_list), so trying
	to create a regcache for it triggers an internal error when creating
	address space for the regcache (as the address space is ultimately
	fetched from the inferior).
	
	To work around this limitation, ia64_hpux_xfer_memory has been modified
	to detect the fact the current inferior is not in our inferior list,
	and to go, in that case, straight to the source to fetch the registers
	it needs.
	
	gdb/ChangeLog:
	
	* ia64-hpux-nat.c (ia64_hpux_get_register_from_save_state_t):
	New function.
	(ia64_hpux_xfer_memory): Check if inferior_ptid is known before
	using the regache.  Use ia64_hpux_get_register_from_save_state_t
	to access the bsp and bspstore registers if not.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ChangeLog.diff?cvsroot=src&r1=1.14597&r2=1.14598
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ia64-hpux-nat.c.diff?cvsroot=src&r1=1.7&r2=1.8


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