public inbox for gcc-regression@sourceware.org
help / color / mirror / Atom feed
* [TCWG CI] Regression caused by gdb: gdb, gdbserver: make target_waitstatus safe
@ 2021-10-22 4:07 ci_notify
0 siblings, 0 replies; only message in thread
From: ci_notify @ 2021-10-22 4:07 UTC (permalink / raw)
To: Simon Marchi; +Cc: gcc-regression
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=UTF-8, Size: 44845 bytes --]
[TCWG CI] Regression caused by gdb: gdb, gdbserver: make target_waitstatus safe:
commit 183be222907a6f419bd71f70ee650989026f0188
Author: Simon Marchi <simon.marchi@efficios.com>
gdb, gdbserver: make target_waitstatus safe
Results regressed to
# reset_artifacts:
-10
# true:
0
# build_abe binutils:
1
# build_abe stage1:
2
# build_abe linux:
3
# build_abe glibc:
4
# build_abe stage2:
5
# First few build errors in logs:
# 00:00:07 /home/simark/src/binutils-gdb/gdb/linux-nat.c:1271:12: runtime error: load of value 2686365, which is not a valid value for type 'gdb_signal'
# 00:01:27 ../../../../../../gdb/gdb/remote-sim.c:983:15: error: invalid use of member function âtarget_waitkind target_waitstatus::kind() constâ (did you forget the â()â ?)
# 00:01:27 ../../../../../../gdb/gdb/remote-sim.c:984:15: error: âstruct target_waitstatusâ has no member named âvalueâ; did you mean âtarget_waitstatus::<unnamed union> target_waitstatus::m_valueâ? (not accessible from this context)
# 00:01:27 ../../../../../../gdb/gdb/remote-sim.c:995:12: error: invalid use of member function âtarget_waitkind target_waitstatus::kind() constâ (did you forget the â()â ?)
# 00:01:27 ../../../../../../gdb/gdb/remote-sim.c:996:39: error: lvalue required as left operand of assignment
# 00:01:27 ../../../../../../gdb/gdb/remote-sim.c:1001:15: error: invalid use of member function âtarget_waitkind target_waitstatus::kind() constâ (did you forget the â()â ?)
# 00:01:27 ../../../../../../gdb/gdb/remote-sim.c:1002:42: error: lvalue required as left operand of assignment
# 00:01:27 make[1]: *** [Makefile:1649: remote-sim.o] Error 1
# 00:01:35 make: *** [Makefile:10436: all-gdb] Error 2
from
# reset_artifacts:
-10
# true:
0
# build_abe binutils:
1
# build_abe stage1:
2
# build_abe linux:
3
# build_abe glibc:
4
# build_abe stage2:
5
# build_abe gdb:
6
# build_abe qemu:
7
THIS IS THE END OF INTERESTING STUFF. BELOW ARE LINKS TO BUILDS, REPRODUCTION INSTRUCTIONS, AND THE RAW COMMIT.
This commit has regressed these CI configurations:
- tcwg_gnu_cross_build/master-aarch64
First_bad build: https://ci.linaro.org/job/tcwg_gnu_cross_build-bisect-master-aarch64/4/artifact/artifacts/build-183be222907a6f419bd71f70ee650989026f0188/
Last_good build: https://ci.linaro.org/job/tcwg_gnu_cross_build-bisect-master-aarch64/4/artifact/artifacts/build-c360a4732bd7999767616e5f211314510ea677f4/
Baseline build: https://ci.linaro.org/job/tcwg_gnu_cross_build-bisect-master-aarch64/4/artifact/artifacts/build-baseline/
Even more details: https://ci.linaro.org/job/tcwg_gnu_cross_build-bisect-master-aarch64/4/artifact/artifacts/
Reproduce builds:
<cut>
mkdir investigate-gdb-183be222907a6f419bd71f70ee650989026f0188
cd investigate-gdb-183be222907a6f419bd71f70ee650989026f0188
# Fetch scripts
git clone https://git.linaro.org/toolchain/jenkins-scripts
# Fetch manifests and test.sh script
mkdir -p artifacts/manifests
curl -o artifacts/manifests/build-baseline.sh https://ci.linaro.org/job/tcwg_gnu_cross_build-bisect-master-aarch64/4/artifact/artifacts/manifests/build-baseline.sh --fail
curl -o artifacts/manifests/build-parameters.sh https://ci.linaro.org/job/tcwg_gnu_cross_build-bisect-master-aarch64/4/artifact/artifacts/manifests/build-parameters.sh --fail
curl -o artifacts/test.sh https://ci.linaro.org/job/tcwg_gnu_cross_build-bisect-master-aarch64/4/artifact/artifacts/test.sh --fail
chmod +x artifacts/test.sh
# Reproduce the baseline build (build all pre-requisites)
./jenkins-scripts/tcwg_gnu-build.sh @@ artifacts/manifests/build-baseline.sh
# Save baseline build state (which is then restored in artifacts/test.sh)
mkdir -p ./bisect
rsync -a --del --delete-excluded --exclude /bisect/ --exclude /artifacts/ --exclude /gdb/ ./ ./bisect/baseline/
cd gdb
# Reproduce first_bad build
git checkout --detach 183be222907a6f419bd71f70ee650989026f0188
../artifacts/test.sh
# Reproduce last_good build
git checkout --detach c360a4732bd7999767616e5f211314510ea677f4
../artifacts/test.sh
cd ..
</cut>
Full commit (up to 1000 lines):
<cut>
commit 183be222907a6f419bd71f70ee650989026f0188
Author: Simon Marchi <simon.marchi@efficios.com>
Date: Thu Oct 21 16:12:04 2021 -0400
gdb, gdbserver: make target_waitstatus safe
I stumbled on a bug caused by the fact that a code path read
target_waitstatus::value::sig (expecting it to contain a gdb_signal
value) while target_waitstatus::kind was TARGET_WAITKIND_FORKED. This
meant that the active union field was in fact
target_waitstatus::value::related_pid, and contained a ptid. The read
signal value was therefore garbage, and that caused GDB to crash soon
after. Or, since that GDB was built with ubsan, this nice error
message:
/home/simark/src/binutils-gdb/gdb/linux-nat.c:1271:12: runtime error: load of value 2686365, which is not a valid value for type 'gdb_signal'
Despite being a large-ish change, I think it would be nice to make
target_waitstatus safe against that kind of bug. As already done
elsewhere (e.g. dynamic_prop), validate that the type of value read from
the union matches what is supposed to be the active field.
- Make the kind and value of target_waitstatus private.
- Make the kind initialized to TARGET_WAITKIND_IGNORE on
target_waitstatus construction. This is what most users appear to do
explicitly.
- Add setters, one for each kind. Each setter takes as a parameter the
data associated to that kind, if any. This makes it impossible to
forget to attach the associated data.
- Add getters, one for each associated data type. Each getter
validates that the data type fetched by the user matches the wait
status kind.
- Change "integer" to "exit_status", "related_pid" to "child_ptid",
just because that's more precise terminology.
- Fix all users.
That last point is semi-mechanical. There are a lot of obvious changes,
but some less obvious ones. For example, it's not possible to set the
kind at some point and the associated data later, as some users did.
But in any case, the intent of the code should not change in this patch.
This was tested on x86-64 Linux (unix, native-gdbserver and
native-extended-gdbserver boards). It was built-tested on x86-64
FreeBSD, NetBSD, MinGW and macOS. The rest of the changes to native
files was done as a best effort. If I forgot any place to update in
these files, it should be easy to fix (unless the change happens to
reveal an actual bug).
Change-Id: I0ae967df1ff6e28de78abbe3ac9b4b2ff4ad03b7
---
gdb/aix-thread.c | 4 +-
gdb/break-catch-sig.c | 6 +-
gdb/break-catch-syscall.c | 14 +--
gdb/breakpoint.c | 22 ++---
gdb/bsd-uthread.c | 4 +-
gdb/darwin-nat.c | 58 +++++-------
gdb/fbsd-nat.c | 33 ++++---
gdb/gdbthread.h | 2 +-
gdb/gnu-nat.c | 38 ++++----
gdb/go32-nat.c | 16 ++--
gdb/inf-child.c | 15 +--
gdb/inf-ptrace.c | 3 +-
gdb/infcmd.c | 3 +-
gdb/infrun.c | 189 +++++++++++++++++++------------------
gdb/infrun.h | 2 +-
gdb/linux-nat.c | 69 +++++++-------
gdb/linux-nat.h | 6 +-
gdb/linux-thread-db.c | 2 +-
gdb/nat/fork-inferior.c | 19 ++--
gdb/nat/windows-nat.c | 52 +++++-----
gdb/netbsd-nat.c | 26 +++--
gdb/nto-procfs.c | 37 +++-----
gdb/obsd-nat.c | 9 +-
gdb/procfs.c | 9 +-
gdb/ravenscar-thread.c | 4 +-
gdb/record-btrace.c | 26 +++--
gdb/record-full.c | 36 +++----
gdb/remote-sim.c | 4 +-
gdb/remote.c | 142 ++++++++++++----------------
gdb/rs6000-nat.c | 7 +-
gdb/sol-thread.c | 2 +-
gdb/target.c | 3 +-
gdb/target/waitstatus.c | 20 ++--
gdb/target/waitstatus.h | 236 +++++++++++++++++++++++++++++++++++++++++++++-
gdb/thread.c | 4 +-
gdb/windows-nat.c | 30 +++---
gdbserver/gdbthread.h | 4 +-
gdbserver/linux-low.cc | 132 +++++++++++++-------------
gdbserver/linux-low.h | 5 -
gdbserver/netbsd-low.cc | 50 ++++------
gdbserver/remote-utils.cc | 44 +++++----
gdbserver/server.cc | 90 +++++++++---------
gdbserver/target.cc | 14 +--
gdbserver/win32-low.cc | 40 ++++----
44 files changed, 826 insertions(+), 705 deletions(-)
diff --git a/gdb/aix-thread.c b/gdb/aix-thread.c
index 04649015d23..a604320d666 100644
--- a/gdb/aix-thread.c
+++ b/gdb/aix-thread.c
@@ -1092,8 +1092,8 @@ aix_thread_target::wait (ptid_t ptid, struct target_waitstatus *status,
return ptid_t (-1);
/* Check whether libpthdebug might be ready to be initialized. */
- if (!pd_active && status->kind == TARGET_WAITKIND_STOPPED
- && status->value.sig == GDB_SIGNAL_TRAP)
+ if (!pd_active && status->kind () == TARGET_WAITKIND_STOPPED
+ && status->sig () == GDB_SIGNAL_TRAP)
{
process_stratum_target *proc_target
= current_inferior ()->process_target ();
diff --git a/gdb/break-catch-sig.c b/gdb/break-catch-sig.c
index 5c7d62fe1ec..9c5db901614 100644
--- a/gdb/break-catch-sig.c
+++ b/gdb/break-catch-sig.c
@@ -155,10 +155,10 @@ signal_catchpoint_breakpoint_hit (const struct bp_location *bl,
= (const struct signal_catchpoint *) bl->owner;
gdb_signal signal_number;
- if (ws->kind != TARGET_WAITKIND_STOPPED)
+ if (ws->kind () != TARGET_WAITKIND_STOPPED)
return 0;
- signal_number = ws->value.sig;
+ signal_number = ws->sig ();
/* If we are catching specific signals in this breakpoint, then we
must guarantee that the called signal is the same signal we are
@@ -188,7 +188,7 @@ signal_catchpoint_print_it (bpstat bs)
get_last_target_status (nullptr, nullptr, &last);
- signal_name = signal_to_name_or_int (last.value.sig);
+ signal_name = signal_to_name_or_int (last.sig ());
annotate_catchpoint (b->number);
maybe_print_thread_hit_breakpoint (uiout);
diff --git a/gdb/break-catch-syscall.c b/gdb/break-catch-syscall.c
index 3d3b275c31e..633985d51f4 100644
--- a/gdb/break-catch-syscall.c
+++ b/gdb/break-catch-syscall.c
@@ -152,11 +152,11 @@ breakpoint_hit_catch_syscall (const struct bp_location *bl,
const struct syscall_catchpoint *c
= (const struct syscall_catchpoint *) bl->owner;
- if (ws->kind != TARGET_WAITKIND_SYSCALL_ENTRY
- && ws->kind != TARGET_WAITKIND_SYSCALL_RETURN)
+ if (ws->kind () != TARGET_WAITKIND_SYSCALL_ENTRY
+ && ws->kind () != TARGET_WAITKIND_SYSCALL_RETURN)
return 0;
- syscall_number = ws->value.syscall_number;
+ syscall_number = ws->syscall_number ();
/* Now, checking if the syscall is the same. */
if (!c->syscalls_to_be_caught.empty ())
@@ -189,7 +189,7 @@ print_it_catch_syscall (bpstat bs)
get_last_target_status (nullptr, nullptr, &last);
- get_syscall_by_number (gdbarch, last.value.syscall_number, &s);
+ get_syscall_by_number (gdbarch, last.syscall_number (), &s);
annotate_catchpoint (b->number);
maybe_print_thread_hit_breakpoint (uiout);
@@ -201,20 +201,20 @@ print_it_catch_syscall (bpstat bs)
if (uiout->is_mi_like_p ())
{
uiout->field_string ("reason",
- async_reason_lookup (last.kind == TARGET_WAITKIND_SYSCALL_ENTRY
+ async_reason_lookup (last.kind () == TARGET_WAITKIND_SYSCALL_ENTRY
? EXEC_ASYNC_SYSCALL_ENTRY
: EXEC_ASYNC_SYSCALL_RETURN));
uiout->field_string ("disp", bpdisp_text (b->disposition));
}
uiout->field_signed ("bkptno", b->number);
- if (last.kind == TARGET_WAITKIND_SYSCALL_ENTRY)
+ if (last.kind () == TARGET_WAITKIND_SYSCALL_ENTRY)
uiout->text (" (call to syscall ");
else
uiout->text (" (returned from syscall ");
if (s.name == NULL || uiout->is_mi_like_p ())
- uiout->field_signed ("syscall-number", last.value.syscall_number);
+ uiout->field_signed ("syscall-number", last.syscall_number ());
if (s.name != NULL)
uiout->field_string ("syscall-name", s.name);
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 4a5b160f760..e5f44be65de 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -7764,10 +7764,10 @@ breakpoint_hit_catch_fork (const struct bp_location *bl,
{
struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
- if (ws->kind != TARGET_WAITKIND_FORKED)
+ if (ws->kind () != TARGET_WAITKIND_FORKED)
return 0;
- c->forked_inferior_pid = ws->value.related_pid;
+ c->forked_inferior_pid = ws->child_ptid ();
return 1;
}
@@ -7880,10 +7880,10 @@ breakpoint_hit_catch_vfork (const struct bp_location *bl,
{
struct fork_catchpoint *c = (struct fork_catchpoint *) bl->owner;
- if (ws->kind != TARGET_WAITKIND_VFORKED)
+ if (ws->kind () != TARGET_WAITKIND_VFORKED)
return 0;
- c->forked_inferior_pid = ws->value.related_pid;
+ c->forked_inferior_pid = ws->child_ptid ();
return 1;
}
@@ -8002,7 +8002,7 @@ breakpoint_hit_catch_solib (const struct bp_location *bl,
{
struct solib_catchpoint *self = (struct solib_catchpoint *) bl->owner;
- if (ws->kind == TARGET_WAITKIND_LOADED)
+ if (ws->kind () == TARGET_WAITKIND_LOADED)
return 1;
for (breakpoint *other : all_breakpoints ())
@@ -8278,10 +8278,10 @@ breakpoint_hit_catch_exec (const struct bp_location *bl,
{
struct exec_catchpoint *c = (struct exec_catchpoint *) bl->owner;
- if (ws->kind != TARGET_WAITKIND_EXECD)
+ if (ws->kind () != TARGET_WAITKIND_EXECD)
return 0;
- c->exec_pathname = make_unique_xstrdup (ws->value.execd_pathname);
+ c->exec_pathname = make_unique_xstrdup (ws->execd_pathname ());
return 1;
}
@@ -9783,8 +9783,8 @@ breakpoint_hit_ranged_breakpoint (const struct bp_location *bl,
CORE_ADDR bp_addr,
const struct target_waitstatus *ws)
{
- if (ws->kind != TARGET_WAITKIND_STOPPED
- || ws->value.sig != GDB_SIGNAL_TRAP)
+ if (ws->kind () != TARGET_WAITKIND_STOPPED
+ || ws->sig () != GDB_SIGNAL_TRAP)
return 0;
return breakpoint_address_match_range (bl->pspace->aspace, bl->address,
@@ -12450,8 +12450,8 @@ bkpt_breakpoint_hit (const struct bp_location *bl,
const address_space *aspace, CORE_ADDR bp_addr,
const struct target_waitstatus *ws)
{
- if (ws->kind != TARGET_WAITKIND_STOPPED
- || ws->value.sig != GDB_SIGNAL_TRAP)
+ if (ws->kind () != TARGET_WAITKIND_STOPPED
+ || ws->sig () != GDB_SIGNAL_TRAP)
return 0;
if (!breakpoint_address_match (bl->pspace->aspace, bl->address,
diff --git a/gdb/bsd-uthread.c b/gdb/bsd-uthread.c
index 1e594983bcd..7709a81b3ce 100644
--- a/gdb/bsd-uthread.c
+++ b/gdb/bsd-uthread.c
@@ -389,8 +389,8 @@ bsd_uthread_target::wait (ptid_t ptid, struct target_waitstatus *status,
/* If the process is no longer alive, there's no point in figuring
out the thread ID. It will fail anyway. */
- if (status->kind == TARGET_WAITKIND_SIGNALLED
- || status->kind == TARGET_WAITKIND_EXITED)
+ if (status->kind () == TARGET_WAITKIND_SIGNALLED
+ || status->kind () == TARGET_WAITKIND_EXITED)
return ptid;
/* Fetch the corresponding thread ID, and augment the returned
diff --git a/gdb/darwin-nat.c b/gdb/darwin-nat.c
index 141eede11fe..e1aeb69e404 100644
--- a/gdb/darwin-nat.c
+++ b/gdb/darwin-nat.c
@@ -980,12 +980,12 @@ darwin_nat_target::decode_message (mach_msg_header_t *hdr,
printf_unfiltered
(_("darwin_wait: ill-formatted message (id=0x%x)\n"), hdr->msgh_id);
/* FIXME: send a failure reply? */
- status->kind = TARGET_WAITKIND_IGNORE;
+ status->set_ignore ();
return minus_one_ptid;
}
if (inf == NULL)
{
- status->kind = TARGET_WAITKIND_IGNORE;
+ status->set_ignore ();
return minus_one_ptid;
}
*pinf = inf;
@@ -995,7 +995,6 @@ darwin_nat_target::decode_message (mach_msg_header_t *hdr,
priv->pending_messages++;
- status->kind = TARGET_WAITKIND_STOPPED;
thread->msg_state = DARWIN_MESSAGE;
inferior_debug (4, _("darwin_wait: thread=0x%x, got %s\n"),
@@ -1005,25 +1004,25 @@ darwin_nat_target::decode_message (mach_msg_header_t *hdr,
switch (thread->event.ex_type)
{
case EXC_BAD_ACCESS:
- status->value.sig = GDB_EXC_BAD_ACCESS;
+ status->set_stopped (GDB_EXC_BAD_ACCESS);
break;
case EXC_BAD_INSTRUCTION:
- status->value.sig = GDB_EXC_BAD_INSTRUCTION;
+ status->set_stopped (GDB_EXC_BAD_INSTRUCTION);
break;
case EXC_ARITHMETIC:
- status->value.sig = GDB_EXC_ARITHMETIC;
+ status->set_stopped (GDB_EXC_ARITHMETIC);
break;
case EXC_EMULATION:
- status->value.sig = GDB_EXC_EMULATION;
+ status->set_stopped (GDB_EXC_EMULATION);
break;
case EXC_SOFTWARE:
if (thread->event.ex_data[0] == EXC_SOFT_SIGNAL)
{
- status->value.sig =
- gdb_signal_from_host (thread->event.ex_data[1]);
+ status->set_stopped
+ (gdb_signal_from_host (thread->event.ex_data[1]));
inferior_debug (5, _(" (signal %d: %s)\n"),
thread->event.ex_data[1],
- gdb_signal_to_name (status->value.sig));
+ gdb_signal_to_name (status->sig ()));
/* If the thread is stopped because it has received a signal
that gdb has just sent, continue. */
@@ -1032,20 +1031,20 @@ darwin_nat_target::decode_message (mach_msg_header_t *hdr,
thread->signaled = 0;
darwin_send_reply (inf, thread);
thread->msg_state = DARWIN_RUNNING;
- status->kind = TARGET_WAITKIND_IGNORE;
+ status->set_ignore ();
}
}
else
- status->value.sig = GDB_EXC_SOFTWARE;
+ status->set_stopped (GDB_EXC_SOFTWARE);
break;
case EXC_BREAKPOINT:
/* Many internal GDB routines expect breakpoints to be reported
as GDB_SIGNAL_TRAP, and will report GDB_EXC_BREAKPOINT
as a spurious signal. */
- status->value.sig = GDB_SIGNAL_TRAP;
+ status->set_stopped (GDB_SIGNAL_TRAP);
break;
default:
- status->value.sig = GDB_SIGNAL_UNKNOWN;
+ status->set_stopped (GDB_SIGNAL_UNKNOWN);
break;
}
@@ -1071,7 +1070,7 @@ darwin_nat_target::decode_message (mach_msg_header_t *hdr,
if (res < 0 || inf == NULL)
{
- status->kind = TARGET_WAITKIND_IGNORE;
+ status->set_ignore ();
return minus_one_ptid;
}
@@ -1089,18 +1088,15 @@ darwin_nat_target::decode_message (mach_msg_header_t *hdr,
{
printf_unfiltered (_("wait4: res=%d: %s\n"),
res_pid, safe_strerror (errno));
- status->kind = TARGET_WAITKIND_IGNORE;
+ status->set_ignore ();
return minus_one_ptid;
}
if (WIFEXITED (wstatus))
- {
- status->kind = TARGET_WAITKIND_EXITED;
- status->value.integer = WEXITSTATUS (wstatus);
- }
+ status->set_exited (WEXITSTATUS (wstatus));
else
{
- status->kind = TARGET_WAITKIND_SIGNALLED;
- status->value.sig = gdb_signal_from_host (WTERMSIG (wstatus));
+ status->set_signalled
+ (gdb_signal_from_host (WTERMSIG (wstatus)));
}
inferior_debug (4, _("darwin_wait: pid=%d exit, status=0x%x\n"),
@@ -1114,8 +1110,7 @@ darwin_nat_target::decode_message (mach_msg_header_t *hdr,
else
{
inferior_debug (4, _("darwin_wait: pid=%d\n"), inf->pid);
- status->kind = TARGET_WAITKIND_EXITED;
- status->value.integer = 0; /* Don't know. */
+ status->set_exited (0 /* Don't know. */);
return ptid_t (inf->pid, 0, 0);
}
}
@@ -1123,7 +1118,7 @@ darwin_nat_target::decode_message (mach_msg_header_t *hdr,
/* Unknown message. */
warning (_("darwin: got unknown message, id: 0x%x"), hdr->msgh_id);
- status->kind = TARGET_WAITKIND_IGNORE;
+ status->set_ignore ();
return minus_one_ptid;
}
@@ -1182,8 +1177,7 @@ darwin_nat_target::wait_1 (ptid_t ptid, struct target_waitstatus *status)
darwin_inferior *priv = get_darwin_inferior (inf);
- status->kind = TARGET_WAITKIND_STOPPED;
- status->value.sig = GDB_SIGNAL_TRAP;
+ status->set_stopped (GDB_SIGNAL_TRAP);
thread = priv->threads[0];
thread->msg_state = DARWIN_STOPPED;
return ptid_t (inf->pid, 0, thread->gdb_port);
@@ -1201,14 +1195,14 @@ darwin_nat_target::wait_1 (ptid_t ptid, struct target_waitstatus *status)
if (kret == MACH_RCV_INTERRUPTED)
{
- status->kind = TARGET_WAITKIND_IGNORE;
+ status->set_ignore ();
return minus_one_ptid;
}
if (kret != MACH_MSG_SUCCESS)
{
inferior_debug (5, _("mach_msg: ret=0x%x\n"), kret);
- status->kind = TARGET_WAITKIND_SPURIOUS;
+ status->set_spurious ();
return minus_one_ptid;
}
@@ -1225,7 +1219,7 @@ darwin_nat_target::wait_1 (ptid_t ptid, struct target_waitstatus *status)
if (inf == NULL)
return res;
}
- while (status->kind == TARGET_WAITKIND_IGNORE);
+ while (status->kind () == TARGET_WAITKIND_IGNORE);
/* Stop all tasks. */
for (inferior *inf : all_inferiors (this))
@@ -1400,8 +1394,8 @@ darwin_nat_target::stop_inferior (inferior *inf)
while (1)
{
ptid = wait_1 (ptid_t (inf->pid), &wstatus);
- if (wstatus.kind == TARGET_WAITKIND_STOPPED
- && wstatus.value.sig == GDB_SIGNAL_STOP)
+ if (wstatus.kind () == TARGET_WAITKIND_STOPPED
+ && wstatus.sig () == GDB_SIGNAL_STOP)
break;
}
}
diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c
index 1323626e3d0..e90aa12e442 100644
--- a/gdb/fbsd-nat.c
+++ b/gdb/fbsd-nat.c
@@ -1181,7 +1181,7 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
}
#endif
wptid = inf_ptrace_target::wait (ptid, ourstatus, target_options);
- if (ourstatus->kind == TARGET_WAITKIND_STOPPED)
+ if (ourstatus->kind () == TARGET_WAITKIND_STOPPED)
{
struct ptrace_lwpinfo pl;
pid_t pid;
@@ -1252,7 +1252,7 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
pl.pl_lwpid);
add_thread (this, wptid);
}
- ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
+ ourstatus->set_spurious ();
return wptid;
}
#endif
@@ -1263,14 +1263,14 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
#ifndef PTRACE_VFORK
struct kinfo_proc kp;
#endif
+ bool is_vfork = false;
ptid_t child_ptid;
pid_t child;
child = pl.pl_child_pid;
- ourstatus->kind = TARGET_WAITKIND_FORKED;
#ifdef PTRACE_VFORK
if (pl.pl_flags & PL_FLAG_VFORKED)
- ourstatus->kind = TARGET_WAITKIND_VFORKED;
+ is_vfork = true;
#endif
/* Make sure the other end of the fork is stopped too. */
@@ -1299,12 +1299,16 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
if (fbsd_fetch_kinfo_proc (child, &kp))
{
if (kp.ki_flag & P_PPWAIT)
- ourstatus->kind = TARGET_WAITKIND_VFORKED;
+ is_vfork = true;
}
else
warning (_("Failed to fetch process information"));
#endif
- ourstatus->value.related_pid = child_ptid;
+
+ if (is_vfork)
+ ourstatus->set_vforked (child_ptid);
+ else
+ ourstatus->set_forked (child_ptid);
return wptid;
}
@@ -1321,7 +1325,7 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
#ifdef PTRACE_VFORK
if (pl.pl_flags & PL_FLAG_VFORK_DONE)
{
- ourstatus->kind = TARGET_WAITKIND_VFORK_DONE;
+ ourstatus->set_vfork_done ();
return wptid;
}
#endif
@@ -1329,9 +1333,8 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
if (pl.pl_flags & PL_FLAG_EXEC)
{
- ourstatus->kind = TARGET_WAITKIND_EXECD;
- ourstatus->value.execd_pathname
- = xstrdup (pid_to_exec_file (pid));
+ ourstatus->set_execd
+ (make_unique_xstrdup (pid_to_exec_file (pid)));
return wptid;
}
@@ -1348,7 +1351,7 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
SIGTRAP, so only treat SIGTRAP events as system call
entry/exit events. */
if (pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX)
- && ourstatus->value.sig == SIGTRAP)
+ && ourstatus->sig () == SIGTRAP)
{
#ifdef HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE
if (catch_syscall_enabled ())
@@ -1356,10 +1359,10 @@ fbsd_nat_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
if (catching_syscall_number (pl.pl_syscall_code))
{
if (pl.pl_flags & PL_FLAG_SCE)
- ourstatus->kind = TARGET_WAITKIND_SYSCALL_ENTRY;
+ ourstatus->set_syscall_entry (pl.pl_syscall_code);
else
- ourstatus->kind = TARGET_WAITKIND_SYSCALL_RETURN;
- ourstatus->value.syscall_number = pl.pl_syscall_code;
+ ourstatus->set_syscall_return (pl.pl_syscall_code);
+
return wptid;
}
}
@@ -1490,7 +1493,7 @@ fbsd_nat_target::follow_fork (inferior *child_inf, ptid_t child_ptid,
perror_with_name (("ptrace"));
#ifndef PTRACE_VFORK
- if (fork_kind == TARGET_WAITKIND_VFORKED)
+ if (fork_kind () == TARGET_WAITKIND_VFORKED)
{
/* We can't insert breakpoints until the child process has
finished with the shared memory region. The parent
diff --git a/gdb/gdbthread.h b/gdb/gdbthread.h
index 7beccba4272..bd8d1a2952f 100644
--- a/gdb/gdbthread.h
+++ b/gdb/gdbthread.h
@@ -180,7 +180,7 @@ struct thread_suspend_state
enum target_stop_reason stop_reason = TARGET_STOPPED_BY_NO_REASON;
/* The waitstatus for this thread's last event. */
- struct target_waitstatus waitstatus {};
+ struct target_waitstatus waitstatus;
/* If true WAITSTATUS hasn't been handled yet. */
int waitstatus_pending_p = 0;
diff --git a/gdb/gnu-nat.c b/gdb/gnu-nat.c
index 67ce00e9c30..54838347f94 100644
--- a/gdb/gnu-nat.c
+++ b/gdb/gnu-nat.c
@@ -626,13 +626,13 @@ gnu_nat_target::_proc_free (struct proc *proc)
static struct inf *
make_inf (void)
{
- struct inf *inf = XNEW (struct inf);
+ struct inf *inf = new struct inf;
inf->task = 0;
inf->threads = 0;
inf->threads_up_to_date = 0;
inf->pid = 0;
- inf->wait.status.kind = TARGET_WAITKIND_SPURIOUS;
+ inf->wait.status.set_spurious ();
inf->wait.thread = 0;
inf->wait.exc.handler = MACH_PORT_NULL;
inf->wait.exc.reply = MACH_PORT_NULL;
@@ -661,7 +661,7 @@ void
gnu_nat_target::inf_clear_wait (struct inf *inf)
{
inf_debug (inf, "clearing wait");
- inf->wait.status.kind = TARGET_WAITKIND_SPURIOUS;
+ inf->wait.status.set_spurious ();
inf->wait.thread = 0;
inf->wait.suppress = 0;
if (inf->wait.exc.handler != MACH_PORT_NULL)
@@ -1326,8 +1326,8 @@ gnu_nat_target::inf_signal (struct inf *inf, enum gdb_signal sig)
{
struct inf_wait *w = &inf->wait;
- if (w->status.kind == TARGET_WAITKIND_STOPPED
- && w->status.value.sig == sig
+ if (w->status.kind () == TARGET_WAITKIND_STOPPED
+ && w->status.sig () == sig
&& w->thread && !w->thread->aborted)
/* We're passing through the last exception we received. This is
kind of bogus, because exceptions are per-thread whereas gdb
@@ -1549,7 +1549,7 @@ gnu_nat_target::wait (ptid_t ptid, struct target_waitstatus *status,
/* We're waiting for the inferior to finish execing. */
{
struct inf_wait *w = &inf->wait;
- enum target_waitkind kind = w->status.kind;
+ enum target_waitkind kind = w->status.kind ();
if (kind == TARGET_WAITKIND_SPURIOUS)
/* Since gdb is actually counting the number of times the inferior
@@ -1560,7 +1560,7 @@ gnu_nat_target::wait (ptid_t ptid, struct target_waitstatus *status,
inf_debug (inf, "pending_execs, ignoring minor event");
}
else if (kind == TARGET_WAITKIND_STOPPED
- && w->status.value.sig == GDB_SIGNAL_TRAP)
+ && w->status.sig () == GDB_SIGNAL_TRAP)
/* Ah hah! A SIGTRAP from the inferior while starting up probably
means we've succesfully completed an exec! */
{
@@ -1585,7 +1585,7 @@ gnu_nat_target::wait (ptid_t ptid, struct target_waitstatus *status,
}
/* Pass back out our results. */
- memcpy (status, &inf->wait.status, sizeof (*status));
+ *status = inf->wait.status;
thread = inf->wait.thread;
if (thread)
@@ -1608,7 +1608,7 @@ gnu_nat_target::wait (ptid_t ptid, struct target_waitstatus *status,
if (thread
&& ptid != minus_one_ptid
- && status->kind != TARGET_WAITKIND_SPURIOUS
+ && status->kind () != TARGET_WAITKIND_SPURIOUS
&& inf->pause_sc == 0 && thread->pause_sc == 0)
/* If something actually happened to THREAD, make sure we
suspend it. */
@@ -1658,12 +1658,10 @@ S_exception_raise_request (mach_port_t port, mach_port_t reply_port,
/* Store away the details; this will destroy any previous info. */
inf->wait.thread = thread;
- inf->wait.status.kind = TARGET_WAITKIND_STOPPED;
-
if (exception == EXC_BREAKPOINT)
/* GDB likes to get SIGTRAP for breakpoints. */
{
- inf->wait.status.value.sig = GDB_SIGNAL_TRAP;
+ inf->wait.status.set_stopped (GDB_SIGNAL_TRAP);
mach_port_deallocate (mach_task_self (), reply_port);
}
else
@@ -1696,8 +1694,8 @@ S_exception_raise_request (mach_port_t port, mach_port_t reply_port,
/* Exceptions are encoded in the signal space by putting
them after _NSIG; this assumes they're positive (and not
extremely large)! */
- inf->wait.status.value.sig =
- gdb_signal_from_host (_NSIG + exception);
+ inf->wait.status.set_stopped
+ (gdb_signal_from_host (_NSIG + exception));
}
}
else
@@ -1718,8 +1716,7 @@ inf_task_died_status (struct inf *inf)
{
warning (_("Pid %d died with unknown exit status, using SIGKILL."),
inf->pid);
- inf->wait.status.kind = TARGET_WAITKIND_SIGNALLED;
- inf->wait.status.value.sig = GDB_SIGNAL_KILL;
+ inf->wait.status.set_signalled (GDB_SIGNAL_KILL);
}
/* Notify server routines. The only real one is dead name notification. */
@@ -1825,7 +1822,7 @@ S_proc_wait_reply (mach_port_t reply, kern_return_t err,
else if (pid == inf->pid)
{
store_waitstatus (&inf->wait.status, status);
- if (inf->wait.status.kind == TARGET_WAITKIND_STOPPED)
+ if (inf->wait.status.kind () == TARGET_WAITKIND_STOPPED)
/* The process has sent us a signal, and stopped itself in a sane
state pending our actions. */
{
@@ -1915,10 +1912,7 @@ S_msg_sig_post_untraced_reply (mach_port_t reply, kern_return_t err)
like the process stopped (using a signal of 0 should mean that the
*next* time the user continues, it will pass signal 0, which the crash
server should like). */
- {
- inf->wait.status.kind = TARGET_WAITKIND_STOPPED;
- inf->wait.status.value.sig = GDB_SIGNAL_0;
- }
+ inf->wait.status.set_stopped (GDB_SIGNAL_0);
else if (err)
warning (_("Signal delivery failed: %s"), safe_strerror (err));
@@ -1994,7 +1988,7 @@ gnu_nat_target::resume (ptid_t ptid, int step, enum gdb_signal sig)
proc_abort (inf->wait.thread, 1);
warning (_("Aborting %s with unforwarded exception %s."),
proc_string (inf->wait.thread),
- gdb_signal_to_name (inf->wait.status.value.sig));
+ gdb_signal_to_name (inf->wait.status.sig ()));
}
if (port_msgs_queued (inf->event_port))
diff --git a/gdb/go32-nat.c b/gdb/go32-nat.c
index 093ed9e792e..528cb761c81 100644
--- a/gdb/go32-nat.c
+++ b/gdb/go32-nat.c
@@ -511,24 +511,20 @@ go32_nat_target::wait (ptid_t ptid, struct target_waitstatus *status,
chdir (current_directory);
if (a_tss.tss_irqn == 0x21)
- {
- status->kind = TARGET_WAITKIND_EXITED;
- status->value.integer = a_tss.tss_eax & 0xff;
- }
+ status->set_exited (a_tss.tss_eax & 0xff);
else
{
- status->value.sig = GDB_SIGNAL_UNKNOWN;
- status->kind = TARGET_WAITKIND_STOPPED;
+ status->set_stopped (GDB_SIGNAL_UNKNOWN);
for (i = 0; sig_map[i].go32_sig != -1; i++)
{
if (a_tss.tss_irqn == sig_map[i].go32_sig)
{
#if __DJGPP_MINOR__ < 3
- if ((status->value.sig = sig_map[i].gdb_sig) !=
- GDB_SIGNAL_TRAP)
- status->kind = TARGET_WAITKIND_SIGNALLED;
+ status->set_stopped (sig_map[i].gdb_sig);
+ if (status->sig () != GDB_SIGNAL_TRAP)
+ status->set_signalled (status->sig ());
#else
- status->value.sig = sig_map[i].gdb_sig;
+ status->set_stopped (sig_map[i].gdb_sig);
#endif
break;
}
diff --git a/gdb/inf-child.c b/gdb/inf-child.c
index 5084f448c1e..5e821f45598 100644
--- a/gdb/inf-child.c
+++ b/gdb/inf-child.c
@@ -58,20 +58,11 @@ void
store_waitstatus (struct target_waitstatus *ourstatus, int hoststatus)
{
if (WIFEXITED (hoststatus))
- {
- ourstatus->kind = TARGET_WAITKIND_EXITED;
- ourstatus->value.integer = WEXITSTATUS (hoststatus);
- }
+ ourstatus->set_exited (WEXITSTATUS (hoststatus));
else if (!WIFSTOPPED (hoststatus))
- {
- ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
- ourstatus->value.sig = gdb_signal_from_host (WTERMSIG (hoststatus));
- }
+ ourstatus->set_signalled (gdb_signal_from_host (WTERMSIG (hoststatus)));
else
- {
- ourstatus->kind = TARGET_WAITKIND_STOPPED;
- ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (hoststatus));
- }
+ ourstatus->set_stopped (gdb_signal_from_host (WSTOPSIG (hoststatus)));
}
inf_child_target::~inf_child_target ()
diff --git a/gdb/inf-ptrace.c b/gdb/inf-ptrace.c
index afa38de6ef7..852636ba646 100644
--- a/gdb/inf-ptrace.c
+++ b/gdb/inf-ptrace.c
@@ -324,8 +324,7 @@ inf_ptrace_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
safe_strerror (save_errno));
/* Claim it exited with unknown signal. */
- ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
- ourstatus->value.sig = GDB_SIGNAL_UNKNOWN;
+ ourstatus->set_signalled (GDB_SIGNAL_UNKNOWN);
return inferior_ptid;
}
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index b55a56c020d..6d3a8b09beb 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -482,8 +482,7 @@ run_command_1 (const char *args, int from_tty, enum run_how run_how)
{
thread_info *thr = inferior_thread ();
target_waitstatus ws;
- ws.kind = TARGET_WAITKIND_STOPPED;
- ws.value.sig = GDB_SIGNAL_0;
+ ws.set_stopped (GDB_SIGNAL_0);
thr->set_pending_waitstatus (ws);
}
diff --git a/gdb/infrun.c b/gdb/infrun.c
index af552e0090b..d97d469e112 100644
--- a/gdb/infrun.c
+++ b/gdb/infrun.c
@@ -404,12 +404,12 @@ show_follow_fork_mode_string (struct ui_file *file, int from_tty,
static bool
follow_fork_inferior (bool follow_child, bool detach_fork)
{
- target_waitkind fork_kind = inferior_thread ()->pending_follow.kind;
+ target_waitkind fork_kind = inferior_thread ()->pending_follow.kind ();
gdb_assert (fork_kind == TARGET_WAITKIND_FORKED
|| fork_kind == TARGET_WAITKIND_VFORKED);
bool has_vforked = fork_kind == TARGET_WAITKIND_VFORKED;
ptid_t parent_ptid = inferior_ptid;
- ptid_t child_ptid = inferior_thread ()->pending_follow.value.related_pid;
+ ptid_t child_ptid = inferior_thread ()->pending_follow.child_ptid ();
if (has_vforked
&& !non_stop /* Non-stop always resumes both branches. */
@@ -697,8 +697,8 @@ follow_fork ()
/* If not stopped at a fork event, then there's nothing else to
do. */
- if (wait_status.kind != TARGET_WAITKIND_FORKED
- && wait_status.kind != TARGET_WAITKIND_VFORKED)
+ if (wait_status.kind () != TARGET_WAITKIND_FORKED
+ && wait_status.kind () != TARGET_WAITKIND_VFORKED)
return 1;
/* Check if we switched over from WAIT_PTID, since the event was
@@ -721,7 +721,7 @@ follow_fork ()
/* If there were any forks/vforks that were caught and are now to be
followed, then do so now. */
- switch (tp->pending_follow.kind)
+ switch (tp->pending_follow.kind ())
{
case TARGET_WAITKIND_FORKED:
case TARGET_WAITKIND_VFORKED:
@@ -757,7 +757,7 @@ follow_fork ()
}
parent = inferior_ptid;
- child = tp->pending_follow.value.related_pid;
+ child = tp->pending_follow.child_ptid ();
process_stratum_target *parent_targ = tp->inf->process_target ();
/* Set up inferior(s) as specified by the caller, and tell the
@@ -777,7 +777,7 @@ follow_fork ()
to clear the pending follow request. */
tp = find_thread_ptid (parent_targ, parent);
if (tp)
- tp->pending_follow.kind = TARGET_WAITKIND_SPURIOUS;
+ tp->pending_follow.set_spurious ();
/* This makes sure we don't try to apply the "Switched
over from WAIT_PID" logic above. */
@@ -829,7 +829,7 @@ follow_fork ()
default:
internal_error (__FILE__, __LINE__,
"Unexpected pending_follow.kind %d\n",
- tp->pending_follow.kind);
+ tp->pending_follow.kind ());
break;
}
@@ -1785,6 +1785,25 @@ displaced_step_finish (thread_info *event_thread, enum gdb_signal signal)
discarded between events. */
struct execution_control_state
{
+ execution_control_state ()
+ {
+ this->reset ();
+ }
+
+ void reset ()
+ {
+ this->target = nullptr;
+ this->ptid = null_ptid;
+ this->event_thread = nullptr;
+ ws = target_waitstatus ();
+ stop_func_filled_in = 0;
+ stop_func_start = 0;
+ stop_func_end = 0;
+ stop_func_name = nullptr;
+ wait_some_more = 0;
+ hit_singlestep_breakpoint = 0;
+ }
+
process_stratum_target *target;
ptid_t ptid;
/* The thread that got the event, if this was a thread event; NULL
@@ -1810,7 +1829,7 @@ struct execution_control_state
static void
reset_ecs (struct execution_control_state *ecs, struct thread_info *tp)
{
- memset (ecs, 0, sizeof (*ecs));
+ ecs->reset ();
ecs->event_thread = tp;
ecs->ptid = tp->ptid;
}
@@ -3367,8 +3386,7 @@ infrun_thread_stop_requested (ptid_t ptid)
if (!tp->has_pending_waitstatus ())
{
target_waitstatus ws;
- ws.kind = TARGET_WAITKIND_STOPPED;
- ws.value.sig = GDB_SIGNAL_0;
+ ws.set_stopped (GDB_SIGNAL_0);
tp->set_pending_waitstatus (ws);
}
@@ -3562,7 +3580,7 @@ do_target_wait_1 (inferior *inf, ptid_t ptid,
tp->clear_pending_waitstatus ();
target_waitstatus ws;
- ws.kind = TARGET_WAITKIND_SPURIOUS;
+ ws.set_spurious ();
tp->set_pending_waitstatus (ws);
tp->set_stop_reason (TARGET_STOPPED_BY_NO_REASON);
}
@@ -3651,7 +3669,7 @@ do_target_wait (execution_control_state *ecs, target_wait_flags options)
if (num_inferiors == 0)
{
- ecs->ws.kind = TARGET_WAITKIND_IGNORE;
+ ecs->ws.set_ignore ();
return false;
}
@@ -3682,7 +3700,7 @@ do_target_wait (execution_control_state *ecs, target_wait_flags options)
{
ecs->ptid = do_target_wait_1 (inf, minus_one_ptid, &ecs->ws, options);
ecs->target = inf->process_target ();
- return (ecs->ws.kind != TARGET_WAITKIND_IGNORE);
+ return (ecs->ws.kind () != TARGET_WAITKIND_IGNORE);
};
/* Needed in 'all-stop + target-non-stop' mode, because we end up
@@ -3713,7 +3731,7 @@ do_target_wait (execution_control_state *ecs, target_wait_flags options)
return true;
}
- ecs->ws.kind = TARGET_WAITKIND_IGNORE;
+ ecs->ws.set_ignore ();
return false;
}
@@ -3856,8 +3874,6 @@ wait_for_inferior (inferior *inf)
struct execution_control_state ecss;
struct execution_control_state *ecs = &ecss;
- memset (ecs, 0, sizeof (*ecs));
-
overlay_cache_invalid = 1;
/* Flush target cache before starting to handle each event.
@@ -3999,8 +4015,6 @@ fetch_inferior_event ()
struct execution_control_state *ecs = &ecss;
int cmd_done = 0;
- memset (ecs, 0, sizeof (*ecs));
-
/* Events are always processed with the main UI as current UI. This
way, warnings, debug output, etc. are always consistently sent to
the main console. */
@@ -4055,7 +4069,7 @@ fetch_inferior_event ()
return;
}
- gdb_assert (ecs->ws.kind != TARGET_WAITKIND_IGNORE);
+ gdb_assert (ecs->ws.kind () != TARGET_WAITKIND_IGNORE);
/* Switch to the target that generated the event, so we can do
target calls. */
@@ -4133,7 +4147,7 @@ fetch_inferior_event ()
selected.". */
if (!non_stop
&& cmd_done
- && ecs->ws.kind != TARGET_WAITKIND_NO_RESUMED)
+ && ecs->ws.kind () != TARGET_WAITKIND_NO_RESUMED)
restore_thread.dont_restore ();
}
}
</cut>
>From hjl@sc.intel.com Fri Oct 22 08:44:35 2021
Return-Path: <hjl@sc.intel.com>
X-Original-To: gcc-regression@gcc.gnu.org
Delivered-To: gcc-regression@gcc.gnu.org
Received: from mga05.intel.com (mga05.intel.com [192.55.52.43])
by sourceware.org (Postfix) with ESMTPS id C06AA3857823
for <gcc-regression@gcc.gnu.org>; Fri, 22 Oct 2021 08:44:33 +0000 (GMT)
DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C06AA3857823
X-IronPort-AV: E=McAfee;i="6200,9189,10144"; a="315462789"
X-IronPort-AV: E=Sophos;i="5.87,172,1631602800"; d="scan'208";a="315462789"
Received: from fmsmga002.fm.intel.com ([10.253.24.26])
by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
22 Oct 2021 01:44:32 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.87,172,1631602800"; d="scan'208";a="576554004"
Received: from scymds02.sc.intel.com ([10.82.73.244])
by fmsmga002.fm.intel.com with ESMTP; 22 Oct 2021 01:44:32 -0700
Received: from gnu-ivb-1.sc.intel.com (gnu-ivb-1.sc.intel.com [172.25.70.227])
by scymds02.sc.intel.com with ESMTP id 19M8iWlX030031;
Fri, 22 Oct 2021 01:44:32 -0700
Received: by gnu-ivb-1.sc.intel.com (Postfix, from userid 1000)
id 1F005120233; Fri, 22 Oct 2021 01:44:32 -0700 (PDT)
Date: Fri, 22 Oct 2021 01:44:32 -0700
To: skpgkp2@gmail.com, hjl.tools@gmail.com, gcc-regression@gcc.gnu.org
Subject: Regressions on master at commit r12-4624 vs commit r12-4591 on
Linux/i686
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <20211022084432.1F005120233@gnu-ivb-1.sc.intel.com>
From: "H.J. Lu" <hjl@sc.intel.com>
X-Spam-Status: No, score=-3469.5 required=5.0 testsºYES_00, KAM_DMARC_STATUS,
KAM_LAZY_DOMAIN_SECURITY, KAM_NUMSUBJECT, KAM_SHORT, SPF_HELO_NONE, SPF_NONE,
TXREP autolearn=no autolearn_force=no version=3.4.4
X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on
server2.sourceware.org
X-BeenThere: gcc-regression@gcc.gnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Gcc-regression mailing list <gcc-regression.gcc.gnu.org>
List-Unsubscribe: <https://gcc.gnu.org/mailman/options/gcc-regression>,
<mailto:gcc-regression-request@gcc.gnu.org?subject=unsubscribe>
List-Archive: <https://gcc.gnu.org/pipermail/gcc-regression/>
List-Post: <mailto:gcc-regression@gcc.gnu.org>
List-Help: <mailto:gcc-regression-request@gcc.gnu.org?subject=help>
List-Subscribe: <https://gcc.gnu.org/mailman/listinfo/gcc-regression>,
<mailto:gcc-regression-request@gcc.gnu.org?subject=subscribe>
X-List-Received-Date: Fri, 22 Oct 2021 08:44:35 -0000
New failures:
New passes:
FAIL: gcc.dg/asan/pr78832.c -O1 (test for excess errors)
FAIL: gcc.dg/asan/pr78832.c -O2 -flto -fno-use-linker-plugin -flto-partition=none (test for excess errors)
FAIL: gcc.dg/asan/pr78832.c -O2 (test for excess errors)
FAIL: gcc.dg/asan/pr78832.c -O3 -g (test for excess errors)
FAIL: gcc.dg/asan/pr78832.c -Os (test for excess errors)
FAIL: gcc.dg/pr45055.c (test for excess errors)
FAIL: gcc.dg/pr45105.c (test for excess errors)
FAIL: gcc.dg/pr45865.c (test for excess errors)
FAIL: gcc.dg/torture/pr48343.c -O1 (test for excess errors)
FAIL: gcc.dg/torture/pr48343.c -Os (test for excess errors)
FAIL: gcc.target/i386/pr22076.c scan-assembler-not movl
FAIL: gcc.target/i386/pr22076.c scan-assembler-times movq 2
FAIL: gcc.target/i386/pr57106.c (test for excess errors)
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2021-10-22 4:07 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-22 4:07 [TCWG CI] Regression caused by gdb: gdb, gdbserver: make target_waitstatus safe ci_notify
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).