diff options
| author | Patrick Mooney <pmooney@pfmooney.com> | 2022-04-04 17:55:30 +0000 |
|---|---|---|
| committer | Patrick Mooney <pmooney@oxide.computer> | 2022-04-05 11:22:32 -0500 |
| commit | 33fd73fedeb5cd61dbbb7562fd927c0b6994653a (patch) | |
| tree | e3a4ae176e25ffb1c2642d79cd47ba9416f9588a | |
| parent | 634770c0a7f8598164ab825cfe419cc8b03c36e5 (diff) | |
| download | rust-33fd73fedeb5cd61dbbb7562fd927c0b6994653a.tar.gz rust-33fd73fedeb5cd61dbbb7562fd927c0b6994653a.zip | |
Update libc to 0.2.121
With the updated libc, UNIX stack overflow handling in libstd can now use the common `si_addr` accessor function, rather than attempting to use a field from that name in `siginfo_t`. This simplifies the collection of the fault address, particularly on platforms where that data resides within a union in `siginfo_t`.
| -rw-r--r-- | Cargo.lock | 4 | ||||
| -rw-r--r-- | library/std/src/sys/unix/stack_overflow.rs | 18 |
2 files changed, 3 insertions, 19 deletions
diff --git a/Cargo.lock b/Cargo.lock index d8cb1133c73..bdfb5176176 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2019,9 +2019,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" [[package]] name = "libc" -version = "0.2.116" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "565dbd88872dbe4cc8a46e527f26483c1d1f7afa6b884a3bd6cd893d4f98da74" +checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f" dependencies = [ "rustc-std-workspace-core", ] diff --git a/library/std/src/sys/unix/stack_overflow.rs b/library/std/src/sys/unix/stack_overflow.rs index 1e8d1137ac8..75a5c0f9279 100644 --- a/library/std/src/sys/unix/stack_overflow.rs +++ b/library/std/src/sys/unix/stack_overflow.rs @@ -54,22 +54,6 @@ mod imp { use crate::sys::unix::os::page_size; use crate::sys_common::thread_info; - #[cfg(any(target_os = "linux", target_os = "android"))] - unsafe fn siginfo_si_addr(info: *mut libc::siginfo_t) -> usize { - #[repr(C)] - struct siginfo_t { - a: [libc::c_int; 3], // si_signo, si_errno, si_code - si_addr: *mut libc::c_void, - } - - (*(info as *const siginfo_t)).si_addr as usize - } - - #[cfg(not(any(target_os = "linux", target_os = "android")))] - unsafe fn siginfo_si_addr(info: *mut libc::siginfo_t) -> usize { - (*info).si_addr as usize - } - // Signal handler for the SIGSEGV and SIGBUS handlers. We've got guard pages // (unmapped pages) at the end of every thread's stack, so if a thread ends // up running into the guard page it'll trigger this handler. We want to @@ -97,7 +81,7 @@ mod imp { _data: *mut libc::c_void, ) { let guard = thread_info::stack_guard().unwrap_or(0..0); - let addr = siginfo_si_addr(info); + let addr = (*info).si_addr() as usize; // If the faulting address is within the guard page, then we print a // message saying so and abort. |
