• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

GNU Binutils with patches for OS216


Commit MetaInfo

Revision2e83593c514fad6fd41bd29efb1c31284a536f3d (tree)
Zeit2017-07-10 22:42:51
AutorYao Qi <yao.qi@lina...>
CommiterYao Qi

Log Message

Centralize amd64-linux target descriptions

This patch adds a new function amd64_linux_read_description, which
creates amd64-linux target descriptions according to its two
arguments, xcr0 and is_x32.

gdb:

2017-06-07 Yao Qi <yao.qi@linaro.org>

* amd64-linux-tdep.c (amd64_linux_read_description): New
function.
(amd64_linux_core_read_description): Call
amd64_linux_read_description.
(amd64_linux_init_abi): Likewise.
(amd64_x32_linux_init_abi): Likewise.
* amd64-linux-tdep.h (amd64_linux_read_description): Declare.
* x86-linux-nat.c (x86_linux_read_description): Call
amd64_linux_read_description.

Ändern Zusammenfassung

Diff

--- a/gdb/amd64-linux-tdep.c
+++ b/gdb/amd64-linux-tdep.c
@@ -1575,54 +1575,61 @@ amd64_linux_record_signal (struct gdbarch *gdbarch,
15751575 return 0;
15761576 }
15771577
1578-/* Get Linux/x86 target description from core dump. */
1579-
1580-static const struct target_desc *
1581-amd64_linux_core_read_description (struct gdbarch *gdbarch,
1582- struct target_ops *target,
1583- bfd *abfd)
1578+const target_desc *
1579+amd64_linux_read_description (uint64_t xcr0_features_bit, bool is_x32)
15841580 {
1585- /* Linux/x86-64. */
1586- uint64_t xcr0 = i386_linux_core_read_xcr0 (abfd);
1587-
1588- switch (xcr0 & X86_XSTATE_ALL_MASK)
1581+ switch (xcr0_features_bit)
15891582 {
15901583 case X86_XSTATE_AVX_MPX_AVX512_PKU_MASK:
1591- if (gdbarch_ptr_bit (gdbarch) == 32)
1584+ if (is_x32)
15921585 /* No MPX, PKU on x32, fallback to AVX-AVX512. */
15931586 return tdesc_x32_avx_avx512_linux;
15941587 else
15951588 return tdesc_amd64_avx_mpx_avx512_pku_linux;
15961589 case X86_XSTATE_AVX_AVX512_MASK:
1597- if (gdbarch_ptr_bit (gdbarch) == 32)
1590+ if (is_x32)
15981591 return tdesc_x32_avx_avx512_linux;
15991592 else
16001593 return tdesc_amd64_avx_avx512_linux;
16011594 case X86_XSTATE_MPX_MASK:
1602- if (gdbarch_ptr_bit (gdbarch) == 32)
1595+ if (is_x32)
16031596 /* No MPX on x32, fallback to AVX. */
16041597 return tdesc_x32_avx_linux;
16051598 else
16061599 return tdesc_amd64_mpx_linux;
16071600 case X86_XSTATE_AVX_MPX_MASK:
1608- if (gdbarch_ptr_bit (gdbarch) == 32)
1601+ if (is_x32)
16091602 /* No MPX on x32, fallback to AVX. */
16101603 return tdesc_x32_avx_linux;
16111604 else
16121605 return tdesc_amd64_avx_mpx_linux;
16131606 case X86_XSTATE_AVX_MASK:
1614- if (gdbarch_ptr_bit (gdbarch) == 32)
1607+ if (is_x32)
16151608 return tdesc_x32_avx_linux;
16161609 else
16171610 return tdesc_amd64_avx_linux;
16181611 default:
1619- if (gdbarch_ptr_bit (gdbarch) == 32)
1612+ if (is_x32)
16201613 return tdesc_x32_linux;
16211614 else
16221615 return tdesc_amd64_linux;
16231616 }
16241617 }
16251618
1619+/* Get Linux/x86 target description from core dump. */
1620+
1621+static const struct target_desc *
1622+amd64_linux_core_read_description (struct gdbarch *gdbarch,
1623+ struct target_ops *target,
1624+ bfd *abfd)
1625+{
1626+ /* Linux/x86-64. */
1627+ uint64_t xcr0 = i386_linux_core_read_xcr0 (abfd);
1628+
1629+ return amd64_linux_read_description (xcr0 & X86_XSTATE_ALL_MASK,
1630+ gdbarch_ptr_bit (gdbarch) == 32);
1631+}
1632+
16261633 /* Similar to amd64_supply_fpregset, but use XSAVE extended state. */
16271634
16281635 static void
@@ -1881,7 +1888,7 @@ amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
18811888 set_gdbarch_num_regs (gdbarch, AMD64_LINUX_NUM_REGS);
18821889
18831890 if (! tdesc_has_registers (tdesc))
1884- tdesc = tdesc_amd64_linux;
1891+ tdesc = amd64_linux_read_description (X86_XSTATE_SSE_MASK, false);
18851892 tdep->tdesc = tdesc;
18861893
18871894 feature = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.linux");
@@ -2098,7 +2105,7 @@ amd64_x32_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
20982105 set_gdbarch_num_regs (gdbarch, AMD64_LINUX_NUM_REGS);
20992106
21002107 if (! tdesc_has_registers (tdesc))
2101- tdesc = tdesc_x32_linux;
2108+ tdesc = amd64_linux_read_description (X86_XSTATE_SSE_MASK, true);
21022109 tdep->tdesc = tdesc;
21032110
21042111 feature = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.linux");
--- a/gdb/amd64-linux-tdep.h
+++ b/gdb/amd64-linux-tdep.h
@@ -43,6 +43,12 @@ extern struct target_desc *tdesc_x32_linux;
4343 extern struct target_desc *tdesc_x32_avx_linux;
4444 extern struct target_desc *tdesc_x32_avx_avx512_linux;
4545
46+/* Return the right amd64-linux target descriptions according to
47+ XCR0_FEATURES_BIT and IS_X32. */
48+
49+const target_desc *amd64_linux_read_description (uint64_t xcr0_features_bit,
50+ bool is_x32);
51+
4652 /* Enum that defines the syscall identifiers for amd64 linux.
4753 Used for process record/replay, these will be translated into
4854 a gdb-canonical set of syscall ids in linux-record.c. */
--- a/gdb/x86-linux-nat.c
+++ b/gdb/x86-linux-nat.c
@@ -192,40 +192,7 @@ x86_linux_read_description (struct target_ops *ops)
192192 if (is_64bit)
193193 {
194194 #ifdef __x86_64__
195- switch (xcr0_features_bits)
196- {
197- case X86_XSTATE_AVX_MPX_AVX512_PKU_MASK:
198- if (is_x32)
199- /* No MPX, PKU on x32, fall back to AVX-AVX512. */
200- return tdesc_x32_avx_avx512_linux;
201- else
202- return tdesc_amd64_avx_mpx_avx512_pku_linux;
203- case X86_XSTATE_AVX_AVX512_MASK:
204- if (is_x32)
205- return tdesc_x32_avx_avx512_linux;
206- else
207- return tdesc_amd64_avx_avx512_linux;
208- case X86_XSTATE_MPX_MASK:
209- if (is_x32)
210- return tdesc_x32_avx_linux; /* No MPX on x32 using AVX. */
211- else
212- return tdesc_amd64_mpx_linux;
213- case X86_XSTATE_AVX_MPX_MASK:
214- if (is_x32)
215- return tdesc_x32_avx_linux; /* No MPX on x32 using AVX. */
216- else
217- return tdesc_amd64_avx_mpx_linux;
218- case X86_XSTATE_AVX_MASK:
219- if (is_x32)
220- return tdesc_x32_avx_linux;
221- else
222- return tdesc_amd64_avx_linux;
223- default:
224- if (is_x32)
225- return tdesc_x32_linux;
226- else
227- return tdesc_amd64_linux;
228- }
195+ return amd64_linux_read_description (xcr0_features_bits, is_x32);
229196 #endif
230197 }
231198 else