[02/22] Use i386_target_description to get tdesc_i386

Message ID 1503329347-26711-3-git-send-email-yao.qi@linaro.org
State New, archived
Headers

Commit Message

Yao Qi Aug. 21, 2017, 3:28 p.m. UTC
  GDB can call function i386_target_description to get the right target
description rather than tdesc_i386.

gdb:

2017-08-18  Yao Qi  <yao.qi@linaro.org>

	* amd64-fbsd-nat.c (amd64fbsd_read_description): Call
	i386_target_description.
	* i386-fbsd-nat.c (i386fbsd_read_description): Call
	i386_target_description.
	* i386-tdep.c (i386_gdbarch_init): Likewise.
---
 gdb/amd64-fbsd-nat.c |  2 +-
 gdb/i386-fbsd-nat.c  | 10 ++++------
 gdb/i386-tdep.c      |  2 +-
 3 files changed, 6 insertions(+), 8 deletions(-)
  

Comments

John Baldwin Aug. 21, 2017, 4:11 p.m. UTC | #1
On Monday, August 21, 2017 04:28:47 PM Yao Qi wrote:
> GDB can call function i386_target_description to get the right target
> description rather than tdesc_i386.
> 
> gdb:
> 
> 2017-08-18  Yao Qi  <yao.qi@linaro.org>
> 
> 	* amd64-fbsd-nat.c (amd64fbsd_read_description): Call
> 	i386_target_description.
> 	* i386-fbsd-nat.c (i386fbsd_read_description): Call
> 	i386_target_description.
> 	* i386-tdep.c (i386_gdbarch_init): Likewise.
> ---
>  gdb/amd64-fbsd-nat.c |  2 +-
>  gdb/i386-fbsd-nat.c  | 10 ++++------
>  gdb/i386-tdep.c      |  2 +-
>  3 files changed, 6 insertions(+), 8 deletions(-)
> 
> diff --git a/gdb/amd64-fbsd-nat.c b/gdb/amd64-fbsd-nat.c
> index f3ddbdd..a22b82b 100644
> --- a/gdb/amd64-fbsd-nat.c
> +++ b/gdb/amd64-fbsd-nat.c
> @@ -181,7 +181,7 @@ amd64fbsd_read_description (struct target_ops *ops)
>    if (is64)
>      return amd64_target_description (X86_XSTATE_SSE_MASK);
>    else
> -    return tdesc_i386;
> +    return i386_target_description (X86_XSTATE_SSE_MASK);
>  }

Hmm, I think we can further simplify amd64fbsd_read_description by always
using amd64/i386_target_description and just setting xcr0 to
X86_XSTATE_SSE_MASK in the #else case and if xsave_len is 0.
  

Patch

diff --git a/gdb/amd64-fbsd-nat.c b/gdb/amd64-fbsd-nat.c
index f3ddbdd..a22b82b 100644
--- a/gdb/amd64-fbsd-nat.c
+++ b/gdb/amd64-fbsd-nat.c
@@ -181,7 +181,7 @@  amd64fbsd_read_description (struct target_ops *ops)
   if (is64)
     return amd64_target_description (X86_XSTATE_SSE_MASK);
   else
-    return tdesc_i386;
+    return i386_target_description (X86_XSTATE_SSE_MASK);
 }
 
 /* Provide a prototype to silence -Wmissing-prototypes.  */
diff --git a/gdb/i386-fbsd-nat.c b/gdb/i386-fbsd-nat.c
index dca6c01..ab671ef 100644
--- a/gdb/i386-fbsd-nat.c
+++ b/gdb/i386-fbsd-nat.c
@@ -139,12 +139,10 @@  i386fbsd_read_description (struct target_ops *ops)
       xsave_probed = 1;
     }
 
-  if (x86bsd_xsave_len != 0)
-    {
-      return i386_target_description (xcr0);
-    }
-  else
-    return tdesc_i386;
+  if (x86bsd_xsave_len == 0)
+    xcr0 = X86_XSTATE_SSE_MASK;
+
+  return i386_target_description (xcr0);
 }
 #endif
 
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index b1e5afd..9d0dd3d 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -8549,7 +8549,7 @@  i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   /* Get the x86 target description from INFO.  */
   tdesc = info.target_desc;
   if (! tdesc_has_registers (tdesc))
-    tdesc = tdesc_i386;
+    tdesc = i386_target_description (X86_XSTATE_SSE_MASK);
   tdep->tdesc = tdesc;
 
   tdep->num_core_regs = I386_NUM_GREGS + I387_NUM_REGS;