diff options
author | John Baldwin <jhb@FreeBSD.org> | 2023-08-28 14:18:19 -0700 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2023-08-28 14:18:19 -0700 |
commit | a388ab0b863a07ddb37d1e98ae8e7443ab85746c (patch) | |
tree | 9bb1a51cd7e8cd1d955ecac026342577a13d2cd7 /gdb/i386-tdep.c | |
parent | d39b60f2e036f4af7224adf06c2d70bb3f8f71f3 (diff) | |
download | gdb-a388ab0b863a07ddb37d1e98ae8e7443ab85746c.zip gdb-a388ab0b863a07ddb37d1e98ae8e7443ab85746c.tar.gz gdb-a388ab0b863a07ddb37d1e98ae8e7443ab85746c.tar.bz2 |
gdb: Store an x86_xsave_layout in i386_gdbarch_tdep.
This structure is fetched from the current target in i386_gdbarch_init
via a new "fetch_x86_xsave_layout" target method.
Approved-By: Simon Marchi <simon.marchi@efficios.com>
Diffstat (limited to 'gdb/i386-tdep.c')
-rw-r--r-- | gdb/i386-tdep.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c index a97e116..d542368 100644 --- a/gdb/i386-tdep.c +++ b/gdb/i386-tdep.c @@ -8504,10 +8504,21 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) int bnd0_regnum; int num_bnd_cooked; + x86_xsave_layout xsave_layout = target_fetch_x86_xsave_layout (); + /* If there is already a candidate, use it. */ - arches = gdbarch_list_lookup_by_info (arches, &info); - if (arches != NULL) - return arches->gdbarch; + for (arches = gdbarch_list_lookup_by_info (arches, &info); + arches != NULL; + arches = gdbarch_list_lookup_by_info (arches->next, &info)) + { + /* Check that the XSAVE layout of ARCHES matches the layout for + the current target. */ + i386_gdbarch_tdep *other_tdep + = gdbarch_tdep<i386_gdbarch_tdep> (arches->gdbarch); + + if (other_tdep->xsave_layout == xsave_layout) + return arches->gdbarch; + } /* Allocate space for the new architecture. Assume i386 for now. */ gdbarch *gdbarch @@ -8762,6 +8773,7 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) gdbarch_free (gdbarch); return NULL; } + tdep->xsave_layout = xsave_layout; num_bnd_cooked = (tdep->bnd0r_regnum > 0 ? I387_NUM_BND_REGS : 0); |