Repository navigation
android: signal 7 (SIGBUS), code 1 (BUS_ADRALN) #197
Description
Activity
гугл говорит, что ошибка с выравниванием какая-то
Looks like it is related to memory alignment =\
если заменить все вызовы
index_to_circle_vertex_rnd, то падает с ровно такой же ошибкой в недрах collision-rs, точнее при конструировании cgmath::Point3::new, где падать вообще нечему:
If I remove all
index_to_circle_vertex_rndcalls then i fails with almost same error incgmath::Point3::newc-tor somewhere inside collision-rs lib O.o07-26 09:40:04.568 I/DEBUG ( 443): backtrace: 07-26 09:40:04.568 I/DEBUG ( 443): #00 pc 0018e528 /data/app/rust.zoc-1/lib/arm/libmain.so (_ZN39_$LT$cgmath..point..Point3$LT$S$GT$$GT$3new17h0753e21f3596c886E+32) 07-26 09:40:04.568 I/DEBUG ( 443): #01 pc 0017225c /data/app/rust.zoc-1/lib/arm/libmain.so (_ZN105_$LT$cgmath..point..Point3$LT$S$GT$$u20$as$u20$core..ops..Add$LT$cgmath..vector..Vector3$LT$S$GT$$GT$$GT$3add17hd507749fa516a21aE+724) 07-26 09:40:04.568 I/DEBUG ( 443): #02 pc 00180d8c /data/app/rust.zoc-1/lib/arm/libmain.so (_ZN272_$LT$$LP$collision..plane..Plane$LT$S$GT$$C$$u20$collision..ray..Ray$LT$S$C$$u20$cgmath..point..Point3$LT$S$GT$$C$$u20$cgmath..vector..Vector3$LT$S$GT$$GT$$RP$$u20$as$u20$collision..intersect..Intersect$LT$core..option..Option$LT$cgmath..point..Point3$LT$S$GT$$GT$$GT$$GT$12intersection17h404085f2a945f6f2E+1064) 07-26 09:40:04.568 I/DEBUG ( 443): #03 pc 0024f7b8 /data/app/rust.zoc-1/lib/arm/libmain.so (_ZN10visualizer15tactical_screen14TacticalScreen14pick_world_pos17hd1c4219807a621e1E+1220) 07-26 09:40:04.568 I/DEBUG ( 443): #04 pc 00253b10 /data/app/rust.zoc-1/lib/arm/libmain.so (_ZN10visualizer15tactical_screen14TacticalScreen9pick_tile17h0f086d055293d05eE+40) 07-26 09:40:04.568 I/DEBUG ( 443): #05 pc 00252a5c /data/app/rust.zoc-1/lib/arm/libmain.so (_ZN10visualizer15tactical_screen14TacticalScreen24handle_event_lmb_release17heee9bead32eea7eaE+108) 07-26 09:40:04.568 I/DEBUG ( 443): #06 pc 00255698 /data/app/rust.zoc-1/lib/arm/libmain.so (_ZN90_$LT$visualizer..tactical_screen..TacticalScreen$u20$as$u20$visualizer..screen..Screen$GT$12handle_event17h9f172044ec151ed4E+652) 07-26 09:40:04.568 I/DEBUG ( 443): #07 pc 002636b8 /data/app/rust.zoc-1/lib/arm/libmain.so (_ZN10visualizer10Visualizer13handle_events17h61fc2bae63deec06E+820) 07-26 09:40:04.568 I/DEBUG ( 443): #08 pc 00263110 /data/app/rust.zoc-1/lib/arm/libmain.so (_ZN10visualizer10Visualizer4tick17hd01772e13b480bfeE+28) ...pub fn new(x: S, y: S, z: S) -> Point3<S> { { x: x, y: y, z: z } }Чего-то я чувствую, самым эффективным способом решения проблемы будет попытка создать минимальный пример такой ошибки и https://github.com/rust-lang/rust/issues . Но это если получится воспроизвести на малом количестве кода, потому что остальная математика, вроде, вполне себе рабочая на телефоне.
Еще есть вариант старые версии cargo-apk попробовать, на всякий.
not-fl3 предложил попробовать убрать
#[repr(C, packed)]из cgmath'овских типов.
not-fl3 proposed removing of
#[repr(C, packed)]from cgmath's structsубрал repr(C, packed) из объявления типов в cgmath - помогло. Вопрос теперь в том, что с этим делать дальше)
Yay, it works without
#[repr(C, packed)]Для начала надо обновиться до cgmath 0.10, до этого ничего делать не стоит
Anyway, first I must update to cgmath 0.10
Blocked by #190
Экспериментальным путем выяснено, что для нормального функционирования ZoC на андроиде можно убирать
#[repr(C, packed)]не со всех типов, а только с Point3 и Vector2:
Minimal cgmath patch:
diff --git a/src/point.rs b/src/point.rs index 8ee8393..394eeba 100644 --- a/src/point.rs +++ b/src/point.rs @@ -52,9 +52,8 @@ pub struct Point2<S> { /// A point in 3-dimensional space. /// /// This type is marked as `#[repr(C, packed)]`. -#[repr(C, packed)] #[derive(PartialEq, Eq, Copy, Clone, Hash)] #[cfg_attr(feature = "rustc-serialize", derive(RustcEncodable, RustcDecodable))] #[cfg_attr(feature = "eders", derive(Serialize, Deserialize))] pub struct Point3<S> { diff --git a/src/vector.rs b/src/vector.rs index d3c7997..35238d5 100644 --- a/src/vector.rs +++ b/src/vector.rs @@ -39,9 +39,9 @@ pub struct Vector1<S> { /// A 2-dimensional vector. /// /// This type is marked as `#[repr(C, packed)]`. -#[repr(C, packed)] #[derive(PartialEq, Eq, Copy, Clone, Hash)] #[cfg_attr(feature = "rustc-serialize", derive(RustcEncodable, RustcDecodable))] #[cfg_attr(feature = "eders", derive(Serialize, Deserialize))] pub struct Vector2<S> {
Хз почему именно так, странно все это.
I still don't understand why
Надо попробовать создать отдельный репозиторий с минимальным примеров воспроизведения аналогичной ошибки. Может задачу стоит и в https://github.com/rust-lang/rust/issues сразу создавать, хз.
Should I create an issue in cgmath repo? Or in rust-lang/rust? Hmmm
Из мастера cgmath удалили
repr(packed), оставили толькоrepr(C). Надо проверить как игра теперь себя на андроиде ведет.
All
repr(packed)were removed in cgmath's master branch, onlyrepr(C)are left.С переопределенными зависимостями прошло хорошо, надо теперь настоящие зависимости починить: cgmath обновлен и выложен на crates.io, но collision-rs надо обновить самому. С виду ничего очень сложного, просто так же перепилить на использование пакета approx.
It works ok with overriden deps, now real deps must be updated. Bjz updated
cgmathon crates.io.Not I'll go and update
collision-rsto latestcgmath. Looks not to difficult, just employ newapproxcrate.Done. Waiting for https://github.com/csherratt/collision-rs/pull/20
На данный момент это происходит в ветке WIP_gfx, но мне что-то подсказывает, что оно не пропадет после вливания в мастер.
RIght now it crashes in WIP_gfx branch, but looks like it still be crashing after merging to into master.
т.е. вообще какая-то внезапная ошибка не с самой графикой, а с геометрическими вычислениями О.о
Very strange error: it is not caused by GFX or something graphics-related, just math in Core module O.o
что, блин, в этой функции так громко упасть вообще может я даже не знаю
I have no idead what can go wrong in that simple func