Skip to content

Commit cbca6f1

Browse files
committed
1.77.0-beta.1
1 parent 5f6ba88 commit cbca6f1

File tree

7 files changed

+66
-27
lines changed

7 files changed

+66
-27
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 1.77.0 - Pending
4+
5+
+ `1.77.0-beta.1`: 2024-03-25
6+
37
## 1.76.1 - Pending
48

59
- debugger: trace allocations (Box, Arc, Rc)

command/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "firedbg-cli"
3-
version = "1.76.0"
3+
version = "1.77.0-beta.1"
44
edition = "2021"
55
license = "MIT OR Apache-2.0"
66
authors = [

debugger/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "firedbg-rust-debugger"
3-
version = "1.76.0"
3+
version = "1.77.0-beta.1"
44
edition = "2021"
55
license = "MIT OR Apache-2.0"
66
build = "build.rs"

debugger/src/debugger/return_value.rs

Lines changed: 53 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -599,23 +599,47 @@ pub(super) fn write_return_value(
599599
None
600600
};
601601
event.write_option(rwriter, RETVAL, return_type.name(), value);
602+
} else if matches!(left, ValueType::i128 | ValueType::u128) {
603+
let val = {
604+
#[cfg(target_arch = "x86_64")]
605+
{
606+
let rdx_u64 = read_u64(&rdx())?;
607+
let rcx_u64 = read_u64(&rcx())?;
608+
let res_is_rcx = (rdx_u64 == 0 && rcx_u64 == 1)
609+
|| (rdx_u64 == 0 && rcx_u64 == 0);
610+
if res_is_rcx && (read_u64(&rdx())? & 0xF) != 0 {
611+
let v = {
612+
let v = [reg("rsi"), reg("r8")];
613+
&values_to_bytes::<16, _>(v.into_iter(), 2)?
614+
};
615+
Some(rwriter.prim_v(left.primitive_name(), v))
616+
} else if !res_is_rcx && (read_u64(&rdx())? & 0xF) != 0 {
617+
let v = {
618+
let v = [reg("rdi"), reg("r8")];
619+
&values_to_bytes::<16, _>(v.into_iter(), 2)?
620+
};
621+
Some(rwriter.prim_v(left.primitive_name(), v))
622+
} else {
623+
None
624+
}
625+
}
626+
#[cfg(target_arch = "aarch64")]
627+
{
628+
if opt != 0 {
629+
let v = {
630+
let v = [reg("x2"), reg("x3")];
631+
&values_to_bytes::<16, _>(v.into_iter(), 2)?
632+
};
633+
Some(rwriter.prim_v(left.primitive_name(), v))
634+
} else {
635+
None
636+
}
637+
}
638+
};
639+
event.write_option(rwriter, RETVAL, return_type.name(), val);
602640
} else if opt != 0 {
603641
let val = if left_size == 0 {
604642
rwriter.unit_v()
605-
} else if matches!(left, ValueType::i128 | ValueType::u128) {
606-
let v = {
607-
#[cfg(target_arch = "x86_64")]
608-
{
609-
// we are using rcx too
610-
&values_to_bytes::<16, _>([rdx(), rcx()].into_iter(), 2)?
611-
}
612-
#[cfg(target_arch = "aarch64")]
613-
{
614-
let v = [reg("x2"), reg("x3")];
615-
&values_to_bytes::<16, _>(v.into_iter(), 2)?
616-
}
617-
};
618-
rwriter.prim_v(left.primitive_name(), v)
619643
} else if matches!(left, ValueType::Slice(_)) {
620644
get_slice_from_rax_rdx(rwriter, &left, &left_type)?
621645
} else if left.is_thin_ptr() {
@@ -793,17 +817,27 @@ pub(super) fn write_return_value(
793817
{
794818
// Result<i128, i128>, Result<u128, u128>, Result<i128, ()>, Result<(), u128>
795819
log::trace!("{} rcx, rdx", return_type.name());
796-
let res = read_u64(&rax())?;
797-
let v = {
820+
let (res, v) = {
798821
#[cfg(target_arch = "x86_64")]
799822
{
800-
// we are using rcx too
801-
&values_to_bytes::<16, _>([rdx(), rcx()].into_iter(), 2)?
823+
let rdx_u64 = read_u64(&rdx())?;
824+
let rcx_u64 = read_u64(&rcx())?;
825+
let res_is_rcx = (rdx_u64 == 0 && rcx_u64 == 1)
826+
|| (rdx_u64 == 0 && rcx_u64 == 0);
827+
let has_unit = left_size == 0 || right_size == 0;
828+
let res = if res_is_rcx { rcx_u64 } else { rdx_u64 };
829+
let v = if res_is_rcx {
830+
[reg("rsi"), reg("r8")]
831+
} else {
832+
[reg("rdi"), reg("r8")]
833+
};
834+
(res, &values_to_bytes::<16, _>(v.into_iter(), 2)?)
802835
}
803836
#[cfg(target_arch = "aarch64")]
804837
{
838+
let res = read_u64(&rax())?;
805839
let v = [reg("x2"), reg("x3")];
806-
&values_to_bytes::<16, _>(v.into_iter(), 2)?
840+
(res, &values_to_bytes::<16, _>(v.into_iter(), 2)?)
807841
}
808842
};
809843
let val = if left_size == 0 && res == 0 {

indexer/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "firedbg-stream-indexer"
3-
version = "1.76.0"
3+
version = "1.77.0-beta.1"
44
edition = "2021"
55
license = "MIT OR Apache-2.0"
66
authors = [
@@ -28,7 +28,7 @@ tokio = { version = "1", optional = true }
2828
pretty_assertions = { version = "1", optional = true }
2929
async-trait = { version = "0.1", optional = true }
3030
# workspace
31-
firedbg-rust-debugger = { path = "../debugger", version = "1.76.0", default-features = false }
31+
firedbg-rust-debugger = { path = "../debugger", version = "1.77.0-beta.1", default-features = false }
3232

3333
[features]
3434
# The base feature only exports the sea-orm entities

indexer/src/validator.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ use crate::{
99
Processor,
1010
};
1111
use firedbg_rust_debugger::{
12-
Breakpoint, Event, EventStream, InfoMessage, SourceFile, BREAKPOINT_STREAM, EVENT_STREAM,
13-
FILE_STREAM, INFO_STREAM,
12+
Breakpoint, Event, EventStream, InfoMessage, SourceFile, ALLOCATION_STREAM, BREAKPOINT_STREAM,
13+
EVENT_STREAM, FILE_STREAM, INFO_STREAM,
1414
};
1515

1616
#[derive(Debug, Default, Serialize, Deserialize)]
@@ -57,6 +57,7 @@ impl Processor for Validator {
5757
event.redacted();
5858
self.data.events.push(event);
5959
}
60+
ALLOCATION_STREAM => {}
6061
_ => anyhow::bail!("Unexpected stream key {}", message.stream_key()),
6162
}
6263
}

parser/src/parsing/workspace.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ pub(crate) fn parse_workspace(raw_workspace: raw::Workspace) -> Workspace {
1212
fn parse_packages(raw_packages: Vec<raw::Package>, workspace_root_dir: &str) -> Vec<Package> {
1313
let get_package_root_dir = |id: &str| -> String {
1414
let (_, after) = id.split_once("path+file://").expect("Have path");
15-
let root_dir = after.chars().take_while(|c| ')'.ne(c)).collect();
15+
let root_dir = after.chars().take_while(|c| '#'.ne(c)).collect();
1616
root_dir
1717
};
1818
raw_packages
@@ -22,7 +22,7 @@ fn parse_packages(raw_packages: Vec<raw::Package>, workspace_root_dir: &str) ->
2222
let version = &raw_package.version;
2323
let package_id = &raw_package.id;
2424
// Is local package
25-
if package_id.starts_with(&format!("{name} {version} (path+file://")) {
25+
if package_id.starts_with("path+file://") {
2626
let root_dir = get_package_root_dir(&package_id);
2727
// Is within the root workspace directory
2828
if root_dir.starts_with(workspace_root_dir) {

0 commit comments

Comments
 (0)