Open kpcyrd opened 8 months ago
I merged in that change with #1521 as it seems to be the only one needed (had a brief look at ptrace code to make sure registers etc look correct). I still haven't got CI to behave and needing OpenSSL versions for the target might complicate it further so fixing the CI is still a TODO
Sorry for not getting back to this sooner, I'm still getting some errors with 0.30.0 on x86 musl:
error[E0308]: mismatched types
--> src/event_log.rs:126:43
|
126 | ... event.child = get_event_data(*pid).ok();
| ----------- ^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Option<i64>`, found `Option<i32>`
| |
| expected due to the type of this binding
|
= note: expected enum `std::option::Option<i64>`
found enum `std::option::Option<i32>`
error[E0308]: mismatched types
--> src/event_log.rs:132:43
|
132 | ... event.child = get_event_data(*pid).ok();
| ----------- ^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Option<i64>`, found `Option<i32>`
| |
| expected due to the type of this binding
|
= note: expected enum `std::option::Option<i64>`
found enum `std::option::Option<i32>`
error[E0308]: mismatched types
--> src/event_log.rs:138:43
|
138 | ... event.child = get_event_data(*pid).ok();
| ----------- ^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Option<i64>`, found `Option<i32>`
| |
| expected due to the type of this binding
|
= note: expected enum `std::option::Option<i64>`
found enum `std::option::Option<i32>`
error[E0308]: mismatched types
--> src/process_handling/breakpoint.rs:59:34
|
59 | let mut intdata = data & (!(0xFFu64 << self.shift) as i64);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `i32`, found `i64`
error[E0277]: no implementation for `i32 & i64`
--> src/process_handling/breakpoint.rs:59:32
|
59 | let mut intdata = data & (!(0xFFu64 << self.shift) as i64);
| ^ no implementation for `i32 & i64`
|
= help: the trait `std::ops::BitAnd<i64>` is not implemented for `i32`
= help: the following other types implement trait `std::ops::BitAnd<Rhs>`:
<i32 as std::ops::BitAnd>
<i32 as std::ops::BitAnd<&i32>>
<&'a i32 as std::ops::BitAnd<i32>>
<&i32 as std::ops::BitAnd<&i32>>
error[E0308]: mismatched types
--> src/process_handling/breakpoint.rs:60:20
|
60 | intdata |= (INT << self.shift) as i64;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `i32`, found `i64`
error[E0277]: no implementation for `i32 |= i64`
--> src/process_handling/breakpoint.rs:60:17
|
60 | intdata |= (INT << self.shift) as i64;
| ^^ no implementation for `i32 |= i64`
|
= help: the trait `std::ops::BitOrAssign<i64>` is not implemented for `i32`
= help: the following other types implement trait `std::ops::BitOrAssign<Rhs>`:
<i32 as std::ops::BitOrAssign>
<i32 as std::ops::BitOrAssign<&i32>>
error[E0308]: mismatched types
--> src/process_handling/breakpoint.rs:64:59
|
64 | write_to_address(pid, self.aligned_address(), intdata)
| ---------------- ^^^^^^^ expected `i64`, found `i32`
| |
| arguments to this function are incorrect
|
note: function defined here
--> src/process_handling/ptrace_control.rs:42:8
|
42 | pub fn write_to_address(pid: Pid, address: u64, data: i64) -> Result<()> {
| ^^^^^^^^^^^^^^^^ ---------
help: you can convert an `i32` to an `i64`
|
64 | write_to_address(pid, self.aligned_address(), intdata.into())
| +++++++
error[E0308]: mismatched types
--> src/process_handling/breakpoint.rs:71:34
|
71 | let mut orgdata = data & (!(0xFFu64 << self.shift) as i64);
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `i32`, found `i64`
error[E0277]: no implementation for `i32 & i64`
--> src/process_handling/breakpoint.rs:71:32
|
71 | let mut orgdata = data & (!(0xFFu64 << self.shift) as i64);
| ^ no implementation for `i32 & i64`
|
= help: the trait `std::ops::BitAnd<i64>` is not implemented for `i32`
= help: the following other types implement trait `std::ops::BitAnd<Rhs>`:
<i32 as std::ops::BitAnd>
<i32 as std::ops::BitAnd<&i32>>
<&'a i32 as std::ops::BitAnd<i32>>
<&i32 as std::ops::BitAnd<&i32>>
error[E0308]: mismatched types
--> src/process_handling/breakpoint.rs:72:20
|
72 | orgdata |= i64::from(self.data) << self.shift;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `i32`, found `i64`
error[E0277]: no implementation for `i32 |= i64`
--> src/process_handling/breakpoint.rs:72:17
|
72 | orgdata |= i64::from(self.data) << self.shift;
| ^^ no implementation for `i32 |= i64`
|
= help: the trait `std::ops::BitOrAssign<i64>` is not implemented for `i32`
= help: the following other types implement trait `std::ops::BitOrAssign<Rhs>`:
<i32 as std::ops::BitOrAssign>
<i32 as std::ops::BitOrAssign<&i32>>
error[E0308]: mismatched types
--> src/process_handling/breakpoint.rs:73:55
|
73 | write_to_address(pid, self.aligned_address(), orgdata)
| ---------------- ^^^^^^^ expected `i64`, found `i32`
| |
| arguments to this function are incorrect
|
note: function defined here
--> src/process_handling/ptrace_control.rs:42:8
|
42 | pub fn write_to_address(pid: Pid, address: u64, data: i64) -> Result<()> {
| ^^^^^^^^^^^^^^^^ ---------
help: you can convert an `i32` to an `i64`
|
73 | write_to_address(pid, self.aligned_address(), orgdata.into())
| +++++++
Some errors have detailed explanations: E0277, E0308.
For more information about an error, try `rustc --explain E0277`.
error: could not compile `cargo-tarpaulin` (lib) due to 13 previous errors
warning: build failed, waiting for other jobs to finish...
https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/65625
So I think the solution is a bit more liberal sprinkling of c_long
and c_ulong
just to keep the types as matched as possible. I tried to build it for i686 myself but unfortunately openssl doesn't like that and I haven't yet figured out a nice way to build it and check it builds myself.
I have pushed something to the fix/x86-build
branch though if you want to try that out and see if it works - that might get things moving quicker
Describe the bug
Opening this as a tracking issue, related to #1467 and https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/59413.
To Reproduce
Simply build for 32bit x86:
I didn't get around to fully port this yet, but one required change seems to be:
This wasn't caught earlier because tests for x86 secretly run on x86_64, see #1467.
Expected behavior
Builds on x86.