From: Tristan Gingold Date: Thu, 16 Oct 2014 11:50:07 +0000 (+0200) Subject: Darwin: sanitize %gs and %fs values. X-Git-Tag: gdb-7.9.0-release~892 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=89c7137fad41711072e2a15ce539e2ad293bd065;p=external%2Fbinutils.git 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 336a3c1..62d1d06 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 a60bc6c..f99e415 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);