Darwin: sanitize %gs and %fs values.

Some Darwin kernels return values out of bounds for gs and fs segments.
With this commit, they are masked to avoid garbage.

gdb/ChangeLog:
	* i386-darwin-nat.c (i386_darwin_fetch_inferior_registers)
	(i386_darwin_store_inferior_registers): Sanitize gs and fs values
	on amd64.
This commit is contained in:
Tristan Gingold 2014-10-16 13:50:07 +02:00
parent f1885d1e59
commit 89c7137fad
2 changed files with 15 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2014-10-16 Tristan Gingold <gingold@adacore.com>
* i386-darwin-nat.c (i386_darwin_fetch_inferior_registers)
(i386_darwin_store_inferior_registers): Sanitize gs and fs values
on amd64.
2014-10-15 Pedro Alves <palves@redhat.com>
* dec-thread.c (dec_thread_count_gdb_threads)

View File

@ -73,6 +73,11 @@ i386_darwin_fetch_inferior_registers (struct target_ops *ops,
(unsigned long) current_thread);
MACH_CHECK_ERROR (ret);
}
/* Some kernels don't sanitize the values. */
gp_regs.uts.ts64.__fs &= 0xffff;
gp_regs.uts.ts64.__gs &= 0xffff;
amd64_supply_native_gregset (regcache, &gp_regs.uts, -1);
fetched++;
}
@ -183,6 +188,10 @@ i386_darwin_store_inferior_registers (struct target_ops *ops,
amd64_collect_native_gregset (regcache, &gp_regs.uts, regno);
/* Some kernels don't sanitize the values. */
gp_regs.uts.ts64.__fs &= 0xffff;
gp_regs.uts.ts64.__gs &= 0xffff;
ret = thread_set_state (current_thread, x86_THREAD_STATE,
(thread_state_t) &gp_regs,
x86_THREAD_STATE_COUNT);