-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Commit
The following fixes have been applied to make delve work with rr 5.7.0 - added a new launch prefix to exclude from stderr output - allow the thread selection packet to be sent for 'c' commands even when the stub supports thread suffixes, because the specification is unclear over what should be done with bc and bs packets with thread suffixes. - changed the way qRRCmd are escaped and added a thread selector to them to match changes to rr codebase
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -985,7 +985,10 @@ func (conn *gdbConn) queryThreads(first bool) (threads []string, err error) { | |
} | ||
|
||
func (conn *gdbConn) selectThread(kind byte, threadID string, context string) error { | ||
if conn.threadSuffixSupported { | ||
if conn.threadSuffixSupported && kind != 'c' { | ||
// kind == 'c' is still allowed because 'rr' is weird about it's support | ||
// for thread suffixes and the specification for it doesn't really say how | ||
// it should be used with packets 'bc' and 'bs'. | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
aarzilli
Author
Member
|
||
panic("selectThread when thread suffix is supported") | ||
} | ||
conn.outbuf.Reset() | ||
|
@@ -1189,9 +1192,15 @@ func (conn *gdbConn) qRRCmd(args ...string) (string, error) { | |
} | ||
conn.outbuf.Reset() | ||
fmt.Fprint(&conn.outbuf, "$qRRCmd") | ||
for _, arg := range args { | ||
for i, arg := range args { | ||
fmt.Fprint(&conn.outbuf, ":") | ||
writeAsciiBytes(&conn.outbuf, []byte(arg)) | ||
if i == 0 && conn.threadSuffixSupported { | ||
// newer versions of RR require the command to be followed by a thread id | ||
// and the command name to be unescaped. | ||
fmt.Fprintf(&conn.outbuf, "%s:-1", arg) | ||
This comment has been minimized.
Sorry, something went wrong.
rocallahan
|
||
} else { | ||
writeAsciiBytes(&conn.outbuf, []byte(arg)) | ||
} | ||
} | ||
resp, err := conn.exec(conn.outbuf.Bytes(), "qRRCmd") | ||
if err != nil { | ||
|
I don't quite understand the issue here. What's weird about rr's support for thread suffixes?