diff options
author | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2020-05-18 17:59:43 +0200 |
---|---|---|
committer | Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> | 2020-05-18 17:59:43 +0200 |
commit | e52a0f1bd949e1b6b6bcadc284c8f84464d46f2c (patch) | |
tree | c4be1ff7be4c601cac38c4ba1adb594924ca0e31 /gdb/i386-sol2-nat.c | |
parent | 7f2043399809c0ba5c4819172214371ed820e8c6 (diff) | |
download | gdb-e52a0f1bd949e1b6b6bcadc284c8f84464d46f2c.zip gdb-e52a0f1bd949e1b6b6bcadc284c8f84464d46f2c.tar.gz gdb-e52a0f1bd949e1b6b6bcadc284c8f84464d46f2c.tar.bz2 |
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 <sys/regset.h>.
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 <ucontext.h> 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 <sys/procfs.h> 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.
Diffstat (limited to 'gdb/i386-sol2-nat.c')
-rw-r--r-- | gdb/i386-sol2-nat.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/gdb/i386-sol2-nat.c b/gdb/i386-sol2-nat.c index f54b3b1..054d2ec 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 |