From 89c7137fad41711072e2a15ce539e2ad293bd065 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Thu, 16 Oct 2014 13:50:07 +0200 Subject: [PATCH] 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. --- gdb/ChangeLog | 6 ++++++ gdb/i386-darwin-nat.c | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 336a3c152d3..62d1d068f8b 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2014-10-16 Tristan Gingold + + * 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 * dec-thread.c (dec_thread_count_gdb_threads) diff --git a/gdb/i386-darwin-nat.c b/gdb/i386-darwin-nat.c index a60bc6ce3e0..f99e4157eb3 100644 --- a/gdb/i386-darwin-nat.c +++ b/gdb/i386-darwin-nat.c @@ -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); -- 2.30.2