From e52a0f1bd949e1b6b6bcadc284c8f84464d46f2c Mon Sep 17 00:00:00 2001 From: Rainer Orth Date: Mon, 18 May 2020 17:59:43 +0200 Subject: [PATCH] Avoid short i386 register names on Solaris/x86 [PR25981] This is the 32-bit companion to Remove unused ps_lgetLDT etc. on Solaris/x86 [PR25981] https://sourceware.org/pipermail/gdb-patches/2020-May/168713.html A 32-bit-default gdb fails to compile with the updated . While it is also affected by the lack of a GS definition, which the compantion patch above fixes, it also fails to compile i386-sol2-nat.c like this /vol/src/gnu/gdb/hg/master/git/gdb/i386-sol2-nat.c:181:3: error: 'EAX' was not declared in this scope 181 | EAX, ECX, EDX, EBX, | ^~~ and several more. While this could be fixed by either including here or provding fallback definitions of the register macros, I chose to do what the 64-bit-default code in the same file (amd64_sol2_gregset32_reg_offset[]) does, namely just hardcode the numeric values instead. They are part of the ABI and thus guaranteed not to change. With this patch, a i386-pc-solaris2.11 configuration on master compiles again, however, it doesn't work. However, I could successfully test it on the gdb-9 branch. Compiling and testing proved to be messy, unfortunately: * For one, Solaris and largefile support used to be mutually exclusive (fixed in Solaris 11.4 and Illumos), which was exacerbated by the fact that g++ predefines _FILE_OFFSET_BITS=64 since GCC 9.1.0. For now I've worked around this by adding -U_FILE_OFFSET_BITS to CXXFLAGS and configuring with --disable-largefile. I hope to clean this up in a future patch. * gdb still defaults to startup-with-shell on. However, /bin/bash is a 64-bit executable which cannot be debugged by a 32-bit gdb. I hacked around that part by pointing $SHELL at a 32-bit bash before running make check. PR build/25981 * i386-sol2-nat.c [PR_MODEL_NATIVE != PR_MODEL_LP64] (regmap): Hardcode register numbers. --- gdb/ChangeLog | 4 ++++ gdb/i386-sol2-nat.c | 20 ++++++++++++++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index cba0464770c..cc13e41c649 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,9 @@ 2020-05-18 Rainer Orth + PR build/25981 + * i386-sol2-nat.c [PR_MODEL_NATIVE != PR_MODEL_LP64] (regmap): + Hardcode register numbers. + PR build/25981 * procfs.c [(__i386__ || __x86_64__) && sun] (proc_get_LDT_entry, procfs_find_LDT_entry): Remove. diff --git a/gdb/i386-sol2-nat.c b/gdb/i386-sol2-nat.c index f54b3b109e8..054d2ec81b6 100644 --- a/gdb/i386-sol2-nat.c +++ b/gdb/i386-sol2-nat.c @@ -178,10 +178,22 @@ fill_fpregset (const struct regcache *regcache, format and GDB's register array layout. */ static int regmap[] = { - EAX, ECX, EDX, EBX, - UESP, EBP, ESI, EDI, - EIP, EFL, CS, SS, - DS, ES, FS, GS + 11 /* EAX */, + 10 /* ECX */, + 9 /* EDX */, + 8 /* EBX */, + 17 /* UESP */, + 6 /* EBP */, + 5 /* ESI */, + 4 /* EDI */, + 14 /* EIP */, + 16 /* EFL */, + 15 /* CS */, + 18 /* SS */, + 3 /* DS */, + 2 /* ES */, + 1 /* FS */, + 0 /* GS */ }; /* Fill GDB's register array with the general-purpose register values -- 2.39.2