public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] Remove support for pre-5.0 FreeBSD/i386 signal trampolines.
@ 2022-01-28 19:16 John Baldwin
0 siblings, 0 replies; only message in thread
From: John Baldwin @ 2022-01-28 19:16 UTC (permalink / raw)
To: gdb-cvs
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=bf84b776bda0945300f40432580156af99c000f6
commit bf84b776bda0945300f40432580156af99c000f6
Author: John Baldwin <jhb@FreeBSD.org>
Date: Fri Jan 28 11:14:37 2022 -0800
Remove support for pre-5.0 FreeBSD/i386 signal trampolines.
The last relevant release (FreeBSD 4.11) was released in January of
2005.
Diff:
---
gdb/i386-fbsd-tdep.c | 93 +++++-----------------------------------------------
1 file changed, 9 insertions(+), 84 deletions(-)
diff --git a/gdb/i386-fbsd-tdep.c b/gdb/i386-fbsd-tdep.c
index f09a4947e98..8c19b447243 100644
--- a/gdb/i386-fbsd-tdep.c
+++ b/gdb/i386-fbsd-tdep.c
@@ -37,12 +37,10 @@
/* Return whether THIS_FRAME corresponds to a FreeBSD sigtramp
routine. */
-/* FreeBSD/i386 supports three different signal trampolines, one for
- versions before 4.0, a second for 4.x, and a third for 5.0 and
- later. To complicate matters, FreeBSD/i386 binaries running under
- an amd64 kernel use a different set of trampolines. These
- trampolines differ from the i386 kernel trampolines in that they
- omit a middle section that conditionally restores %gs. */
+/* FreeBSD/i386 binaries running under an amd64 kernel use a different
+ trampoline This trampoline differs from the i386 kernel trampoline
+ in that it omits a middle section that conditionally restores
+ %gs. */
static const gdb_byte i386fbsd_sigtramp_start[] =
{
@@ -65,62 +63,6 @@ static const gdb_byte i386fbsd_sigtramp_end[] =
0xcd, 0x80 /* int $0x80 */
};
-static const gdb_byte i386fbsd_freebsd4_sigtramp_start[] =
-{
- 0x8d, 0x44, 0x24, 0x14, /* lea SIGF_UC4(%esp),%eax */
- 0x50 /* pushl %eax */
-};
-
-static const gdb_byte i386fbsd_freebsd4_sigtramp_middle[] =
-{
- 0xf7, 0x40, 0x54, 0x00, 0x00, 0x02, 0x00,
- /* testl $PSL_VM,UC4_EFLAGS(%eax) */
- 0x75, 0x03, /* jne +3 */
- 0x8e, 0x68, 0x14 /* mov UC4_GS(%eax),%gs */
-};
-
-static const gdb_byte i386fbsd_freebsd4_sigtramp_end[] =
-{
- 0xb8, 0x58, 0x01, 0x00, 0x00, /* movl $344,%eax */
- 0x50, /* pushl %eax */
- 0xcd, 0x80 /* int $0x80 */
-};
-
-static const gdb_byte i386fbsd_osigtramp_start[] =
-{
- 0x8d, 0x44, 0x24, 0x14, /* lea SIGF_SC(%esp),%eax */
- 0x50 /* pushl %eax */
-};
-
-static const gdb_byte i386fbsd_osigtramp_middle[] =
-{
- 0xf7, 0x40, 0x18, 0x00, 0x00, 0x02, 0x00,
- /* testl $PSL_VM,SC_PS(%eax) */
- 0x75, 0x03, /* jne +3 */
- 0x8e, 0x68, 0x44 /* mov SC_GS(%eax),%gs */
-};
-
-static const gdb_byte i386fbsd_osigtramp_end[] =
-{
- 0xb8, 0x67, 0x00, 0x00, 0x00, /* movl $103,%eax */
- 0x50, /* pushl %eax */
- 0xcd, 0x80 /* int $0x80 */
-};
-
-/* The three different trampolines are all the same size. */
-gdb_static_assert (sizeof i386fbsd_sigtramp_start
- == sizeof i386fbsd_freebsd4_sigtramp_start);
-gdb_static_assert (sizeof i386fbsd_sigtramp_start
- == sizeof i386fbsd_osigtramp_start);
-gdb_static_assert (sizeof i386fbsd_sigtramp_middle
- == sizeof i386fbsd_freebsd4_sigtramp_middle);
-gdb_static_assert (sizeof i386fbsd_sigtramp_middle
- == sizeof i386fbsd_osigtramp_middle);
-gdb_static_assert (sizeof i386fbsd_sigtramp_end
- == sizeof i386fbsd_freebsd4_sigtramp_end);
-gdb_static_assert (sizeof i386fbsd_sigtramp_end
- == sizeof i386fbsd_osigtramp_end);
-
/* We assume that the middle is the largest chunk below. */
gdb_static_assert (sizeof i386fbsd_sigtramp_middle
> sizeof i386fbsd_sigtramp_start);
@@ -132,31 +74,13 @@ i386fbsd_sigtramp_p (struct frame_info *this_frame)
{
CORE_ADDR pc = get_frame_pc (this_frame);
gdb_byte buf[sizeof i386fbsd_sigtramp_middle];
- const gdb_byte *middle, *end;
/* Look for a matching start. */
if (!safe_frame_unwind_memory (this_frame, pc,
{buf, sizeof i386fbsd_sigtramp_start}))
return 0;
if (memcmp (buf, i386fbsd_sigtramp_start, sizeof i386fbsd_sigtramp_start)
- == 0)
- {
- middle = i386fbsd_sigtramp_middle;
- end = i386fbsd_sigtramp_end;
- }
- else if (memcmp (buf, i386fbsd_freebsd4_sigtramp_start,
- sizeof i386fbsd_freebsd4_sigtramp_start) == 0)
- {
- middle = i386fbsd_freebsd4_sigtramp_middle;
- end = i386fbsd_freebsd4_sigtramp_end;
- }
- else if (memcmp (buf, i386fbsd_osigtramp_start,
- sizeof i386fbsd_osigtramp_start) == 0)
- {
- middle = i386fbsd_osigtramp_middle;
- end = i386fbsd_osigtramp_end;
- }
- else
+ != 0)
return 0;
/* Since the end is shorter than the middle, check for a matching end
@@ -165,14 +89,15 @@ i386fbsd_sigtramp_p (struct frame_info *this_frame)
if (!safe_frame_unwind_memory (this_frame, pc,
{buf, sizeof i386fbsd_sigtramp_end}))
return 0;
- if (memcmp (buf, end, sizeof i386fbsd_sigtramp_end) == 0)
+ if (memcmp (buf, i386fbsd_sigtramp_end, sizeof i386fbsd_sigtramp_end) == 0)
return 1;
/* If the end didn't match, check for a matching middle. */
if (!safe_frame_unwind_memory (this_frame, pc,
{buf, sizeof i386fbsd_sigtramp_middle}))
return 0;
- if (memcmp (buf, middle, sizeof i386fbsd_sigtramp_middle) != 0)
+ if (memcmp (buf, i386fbsd_sigtramp_middle, sizeof i386fbsd_sigtramp_middle)
+ != 0)
return 0;
/* The middle matched, check for a matching end. */
@@ -180,7 +105,7 @@ i386fbsd_sigtramp_p (struct frame_info *this_frame)
if (!safe_frame_unwind_memory (this_frame, pc,
{buf, sizeof i386fbsd_sigtramp_end}))
return 0;
- if (memcmp (buf, end, sizeof i386fbsd_sigtramp_end) != 0)
+ if (memcmp (buf, i386fbsd_sigtramp_end, sizeof i386fbsd_sigtramp_end) != 0)
return 0;
return 1;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-01-28 19:16 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-28 19:16 [binutils-gdb] Remove support for pre-5.0 FreeBSD/i386 signal trampolines John Baldwin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).