From: "Ayush Singh" <ayushdevel1325@gmail.com>
To: "devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: "Kinney, Michael D" <michael.d.kinney@intel.com>,
"mikuback@linux.microsoft.com" <mikuback@linux.microsoft.com>,
"Gaibusab, Jabeena B" <jabeena.b.gaibusab@intel.com>,
"Yao, Jiewen" <jiewen.yao@intel.com>
Subject: Casting i128 into f64 in UEFI Rust pagefaults
Date: Mon, 25 Jul 2022 23:03:57 +0530 [thread overview]
Message-ID: <15b0ac38-4b55-4b19-3f76-506c5b858949@gmail.com> (raw)
Hello everyone.While running Rust tests in UEFI environment, I have come
across a numeric test that causes a pagefault. A simple reproducible
example for this is given below:
```rust
fn main() {
use std::hint::black_box as b;
let z: i128 = b(1);
assert!((-z as f64) < 0.0);
}
```
The exception output is as follows:
```
!!!! X64 Exception Type - 0E(#PF - Page-Fault) CPU Apic ID - 00000000 !!!!
ExceptionData - 0000000000000000 I:0 R:0 U:0 W:0 P:0 PK:0 SS:0 SGX:0
RIP - 000000000603DB60, CS - 0000000000000038, RFLAGS - 0000000000000246
RAX - 0000000000000000, RCX - FFFFFFFFFFFFFFFF, RDX - FFFFFFFFFFFFFFFF
RBX - 0000000000000000, RSP - 0000000007EDF1D0, RBP - 0000000007EDF4C0
RSI - 0000000007EDF360, RDI - 0000000007EDF3C0
R8 - 0000000000000000, R9 - 0000000000000038, R10 - 0000000000000000
R11 - 0000000000000000, R12 - 00000000060C6018, R13 - 0000000007EDF520
R14 - 0000000007EDF6A8, R15 - 0000000005FA9490
DS - 0000000000000030, ES - 0000000000000030, FS - 0000000000000030
GS - 0000000000000030, SS - 0000000000000030
CR0 - 0000000080010033, CR2 - FFFFFFFFFFFFFFFF, CR3 - 0000000007C01000
CR4 - 0000000000000668, CR8 - 0000000000000000
DR0 - 0000000000000000, DR1 - 0000000000000000, DR2 - 0000000000000000
DR3 - 0000000000000000, DR6 - 00000000FFFF0FF0, DR7 - 0000000000000400
GDTR - 00000000079DE000 0000000000000047, LDTR - 0000000000000000
IDTR - 0000000007418018 0000000000000FFF, TR - 0000000000000000
FXSAVE_STATE - 0000000007EDEE30
!!!! Find image based on IP(0x603DB60)
/var/home/ayush/Documents/Programming/Rust/uefi/hello_world_std/target/x86_64-unknown-uefi/debug/deps/hello_world_std-338028f9369e2d42.pdb
(ImageBase=000000000603C000, EntryPoint=000000000603D8C0) !!!!
```
From my testing, the exception only occurs when a few conditions are met.
1. The binary is compiled in Debug mode. No error in Release mode.
2. `i128` is in a black_box [1]. Does not occur if `black_box` is not
present.
3. It has to be `i128`. `i64` or something else work fine.
4. The cast has to be done on `-z`. Doing the same with `+z` is fine.
I have also been discussing this in the Rust zulipchat [2], so feel free
to chime in there.
Additionally, here are links for more information about this program:
1. Assembly:
https://rust-lang.zulipchat.com/user_uploads/4715/od51Y9Dkfjahcg9HHcOud8Fm/hello_world_std-338028f9369e2d42.s
2. EFI Binary:
https://rust-lang.zulipchat.com/user_uploads/4715/CknqtXLR8SaJZmyOnXctQkpL/hello_world_std.efi
3. PDB file:
https://rust-lang.zulipchat.com/user_uploads/4715/zV4i6DsjgQXotp_gS1naEsU0/hello_world_std-338028f9369e2d42.pdb
Yours Sincerely,
Ayush Singh
[1]: https://doc.rust-lang.org/std/hint/fn.black_box.html
[2]:
https://rust-lang.zulipchat.com/#narrow/stream/182449-t-compiler.2Fhelp/topic/Casting.20i128.20to.20f64.20in.20black_box.20causes.20exception.20in.20UEFI
next reply other threads:[~2022-07-25 17:34 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-25 17:33 Ayush Singh [this message]
2022-07-25 17:51 ` [edk2-devel] Casting i128 into f64 in UEFI Rust pagefaults Andrew Fish
[not found] ` <170523E2507C1293.4676@groups.io>
2022-07-25 18:45 ` Andrew Fish
2022-07-25 18:54 ` Andrew Fish
2022-07-26 5:43 ` Ayush Singh
2022-07-26 17:50 ` Andrew Fish
2022-07-26 19:15 ` Ayush Singh
2022-07-26 21:38 ` Andrew Fish
2022-07-27 6:01 ` Ayush Singh
2022-07-26 19:12 ` Pedro Falcato
2022-07-26 19:24 ` Ayush Singh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=15b0ac38-4b55-4b19-3f76-506c5b858949@gmail.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox