android: signal 7 (SIGBUS), code 1 (BUS_ADRALN) #197

Closed
ozkriff opened this Issue Jul 26, 2016 · 14 comments

Comments

1 participant
@ozkriff
Owner

ozkriff commented Jul 26, 2016

На данный момент это происходит в ветке WIP_gfx, но мне что-то подсказывает, что оно не пропадет после вливания в мастер.


RIght now it crashes in WIP_gfx branch, but looks like it still be crashing after merging to into master.

adb logcat -v time | grep 'Rust\|DEBUG'
07-26 09:19:13.228 D/RustAndroidGlueStdouterr(19877): Entering android_main
07-26 09:19:13.228 D/RustAndroidGlueStdouterr(19877): Creating application thread
07-26 09:19:30.518 I/DEBUG   (  443): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
07-26 09:19:30.518 I/DEBUG   (  443): Build fingerprint: 'Xiaomi/kenzo/kenzo:5.1.1/LMY47V/V7.3.7.0.LHOMIDD:user/release-keys'
07-26 09:19:30.518 I/DEBUG   (  443): Revision: '0'
07-26 09:19:30.518 I/DEBUG   (  443): ABI: 'arm'
07-26 09:19:30.518 I/DEBUG   (  443): pid: 19877, tid: 19906, name: rust.zoc  >>> rust.zoc <<<
07-26 09:19:30.518 I/DEBUG   (  443): signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr 0xe32bd0c2
07-26 09:19:30.558 I/DEBUG   (  443):     r0 e3800fc8  r1 e32bd0c2  r2 00000001  r3 e32bd0c2
07-26 09:19:30.558 I/DEBUG   (  443):     r4 e3801164  r5 e38011ac  r6 0000001d  r7 00000000
07-26 09:19:30.558 I/DEBUG   (  443):     r8 e3801670  r9 e40263d8  sl e3801c78  fp e3800f98
07-26 09:19:30.558 I/DEBUG   (  443):     ip 00000004  sp e3800f68  lr e40ff138  pc e40ff3b8  cpsr 600d0010
07-26 09:19:30.558 I/DEBUG   (  443): 
07-26 09:19:30.558 I/DEBUG   (  443): backtrace:
07-26 09:19:30.558 I/DEBUG   (  443):     #00 pc 0024a3b8  /data/app/rust.zoc-2/lib/arm/libmain.so (_ZN10visualizer4geom26index_to_circle_vertex_rnd17h4fdc28498d8707a5E+64)
07-26 09:19:30.558 I/DEBUG   (  443):     #01 pc 0024a134  /data/app/rust.zoc-2/lib/arm/libmain.so (_ZN10visualizer4geom22exact_pos_to_world_pos17h78d4994f5f0296afE+380)
07-26 09:19:30.558 I/DEBUG   (  443):     #02 pc 0024fe8c  /data/app/rust.zoc-2/lib/arm/libmain.so (_ZN10visualizer15tactical_screen14TacticalScreen15add_map_objects17h420cba47cb86d87fE+1304)
07-26 09:19:30.558 I/DEBUG   (  443):     #03 pc 0024f13c  /data/app/rust.zoc-2/lib/arm/libmain.so (_ZN10visualizer15tactical_screen14TacticalScreen3new17h61f9a4ba53b2dc9bE+3912)
07-26 09:19:30.558 I/DEBUG   (  443):     #04 pc 0025814c  /data/app/rust.zoc-2/lib/arm/libmain.so (_ZN10visualizer16main_menu_screen14MainMenuScreen25handle_event_button_press17h93b77bec5c6ec831E+176)
07-26 09:19:30.558 I/DEBUG   (  443):     #05 pc 00258070  /data/app/rust.zoc-2/lib/arm/libmain.so (_ZN10visualizer16main_menu_screen14MainMenuScreen24handle_event_lmb_release17hbb0b76ad5b53e4d0E+108)
07-26 09:19:30.558 I/DEBUG   (  443):     #06 pc 002587c4  /data/app/rust.zoc-2/lib/arm/libmain.so (_ZN91_$LT$visualizer..main_menu_screen..MainMenuScreen$u20$as$u20$visualizer..screen..Screen$GT$12handle_event17h11b385386398d722E+348)
07-26 09:19:30.558 I/DEBUG   (  443):     #07 pc 00263688  /data/app/rust.zoc-2/lib/arm/libmain.so (_ZN10visualizer10Visualizer13handle_events17h61fc2bae63deec06E+820)
07-26 09:19:30.558 I/DEBUG   (  443):     #08 pc 002630e0  /data/app/rust.zoc-2/lib/arm/libmain.so (_ZN10visualizer10Visualizer4tick17hd01772e13b480bfeE+28)
07-26 09:19:30.558 I/DEBUG   (  443):     #09 pc 0017141c  /data/app/rust.zoc-2/lib/arm/libmain.so (_ZN3zoc4main17h308ba5ec18216eedE+68)
07-26 09:19:30.558 I/DEBUG   (  443):     #10 pc 005eb748  /data/app/rust.zoc-2/lib/arm/libmain.so (_ZN3std9panicking3try4call17h5df3ac2979db3c90E+28)
07-26 09:19:30.558 I/DEBUG   (  443):     #11 pc 005fa9f8  /data/app/rust.zoc-2/lib/arm/libmain.so (__rust_try+16)
07-26 09:19:30.558 I/DEBUG   (  443):     #12 pc 005fa8c4  /data/app/rust.zoc-2/lib/arm/libmain.so (__rust_maybe_catch_panic+28)
07-26 09:19:30.558 I/DEBUG   (  443):     #13 pc 005ea97c  /data/app/rust.zoc-2/lib/arm/libmain.so (_ZN3std2rt10lang_start17hfe9ab243c60ffb9bE+1188)
07-26 09:19:30.558 I/DEBUG   (  443):     #14 pc 001716f0  /data/app/rust.zoc-2/lib/arm/libmain.so (main+60)
07-26 09:19:30.558 I/DEBUG   (  443):     #15 pc 0068d078  /data/app/rust.zoc-2/lib/arm/libmain.so (_ZN8glue_obj12android_main28_$u7b$$u7b$closure$u7d$$u7d$17ha4de04c9f531cb2bE+28)
07-26 09:19:30.558 I/DEBUG   (  443):     #16 pc 00683968  /data/app/rust.zoc-2/lib/arm/libmain.so (_ZN23cargo_apk_injected_glue13android_main211main_thread17h46175ddba5b4db24E+172)
07-26 09:19:30.558 I/DEBUG   (  443):     #17 pc 0001333f  /system/lib/libc.so (_ZL15__pthread_startPv+30)
07-26 09:19:30.558 I/DEBUG   (  443):     #18 pc 00011357  /system/lib/libc.so (__start_thread+6)
07-26 09:19:30.718 I/DEBUG   (  443): 
07-26 09:19:30.718 I/DEBUG   (  443): Tombstone written to: /data/tombstones/tombstone_01

т.е. вообще какая-то внезапная ошибка не с самой графикой, а с геометрическими вычислениями О.о


Very strange error: it is not caused by GFX or something graphics-related, just math in Core module O.o

pub fn index_to_circle_vertex_rnd(count: ZInt, i: ZInt, pos: &MapPos) -> VertexCoord {                                                   
    let n = 2.0 * PI * (i as ZFloat) / (count as ZFloat);                                                                                
    let n = n + ((pos.v.x as ZFloat + pos.v.y as ZFloat) * 7.0) % 4.0; // TODO: remove magic numbers                                     
    VertexCoord {                                                                                                                        
        v: Vector3{x: n.cos(), y: n.sin(), z: 0.0} * HEX_EX_RADIUS                                                                       
    }                                                                                                                                    
}

что, блин, в этой функции так громко упасть вообще может я даже не знаю


I have no idead what can go wrong in that simple func

@ozkriff

This comment has been minimized.

Show comment
Hide comment
@ozkriff

ozkriff Jul 26, 2016

Owner

гугл говорит, что ошибка с выравниванием какая-то


Looks like it is related to memory alignment =\

Owner

ozkriff commented Jul 26, 2016

гугл говорит, что ошибка с выравниванием какая-то


Looks like it is related to memory alignment =\

@ozkriff

This comment has been minimized.

Show comment
Hide comment
@ozkriff

ozkriff Jul 26, 2016

Owner

если заменить все вызовы index_to_circle_vertex_rnd, то падает с ровно такой же ошибкой в недрах collision-rs, точнее при конструировании cgmath::Point3::new, где падать вообще нечему:


If I remove all index_to_circle_vertex_rnd calls then i fails with almost same error in cgmath::Point3::new c-tor somewhere inside collision-rs lib O.o

07-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 } }

Owner

ozkriff commented Jul 26, 2016

если заменить все вызовы index_to_circle_vertex_rnd, то падает с ровно такой же ошибкой в недрах collision-rs, точнее при конструировании cgmath::Point3::new, где падать вообще нечему:


If I remove all index_to_circle_vertex_rnd calls then i fails with almost same error in cgmath::Point3::new c-tor somewhere inside collision-rs lib O.o

07-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 } }

@ozkriff

This comment has been minimized.

Show comment
Hide comment
@ozkriff

ozkriff Jul 26, 2016

Owner

Чего-то я чувствую, самым эффективным способом решения проблемы будет попытка создать минимальный пример такой ошибки и https://github.com/rust-lang/rust/issues . Но это если получится воспроизвести на малом количестве кода, потому что остальная математика, вроде, вполне себе рабочая на телефоне.

Еще есть вариант старые версии cargo-apk попробовать, на всякий.

Owner

ozkriff commented Jul 26, 2016

Чего-то я чувствую, самым эффективным способом решения проблемы будет попытка создать минимальный пример такой ошибки и https://github.com/rust-lang/rust/issues . Но это если получится воспроизвести на малом количестве кода, потому что остальная математика, вроде, вполне себе рабочая на телефоне.

Еще есть вариант старые версии cargo-apk попробовать, на всякий.

@ozkriff

This comment has been minimized.

Show comment
Hide comment
@ozkriff

ozkriff Jul 26, 2016

Owner

not-fl3 предложил попробовать убрать #[repr(C, packed)] из cgmath'овских типов.


not-fl3 proposed removing of #[repr(C, packed)] from cgmath's structs

Owner

ozkriff commented Jul 26, 2016

not-fl3 предложил попробовать убрать #[repr(C, packed)] из cgmath'овских типов.


not-fl3 proposed removing of #[repr(C, packed)] from cgmath's structs

@ozkriff

This comment has been minimized.

Show comment
Hide comment
@ozkriff

ozkriff Jul 26, 2016

Owner

убрал repr(C, packed) из объявления типов в cgmath - помогло. Вопрос теперь в том, что с этим делать дальше)


Yay, it works without #[repr(C, packed)]

Owner

ozkriff commented Jul 26, 2016

убрал repr(C, packed) из объявления типов в cgmath - помогло. Вопрос теперь в том, что с этим делать дальше)


Yay, it works without #[repr(C, packed)]

@ozkriff

This comment has been minimized.

Show comment
Hide comment
@ozkriff

ozkriff Jul 29, 2016

Owner

Для начала надо обновиться до cgmath 0.10, до этого ничего делать не стоит


Anyway, first I must update to cgmath 0.10

Owner

ozkriff commented Jul 29, 2016

Для начала надо обновиться до cgmath 0.10, до этого ничего делать не стоит


Anyway, first I must update to cgmath 0.10

@ozkriff

This comment has been minimized.

Show comment
Hide comment
@ozkriff

ozkriff Jul 29, 2016

Owner

Blocked by #190

Owner

ozkriff commented Jul 29, 2016

Blocked by #190

@ozkriff

This comment has been minimized.

Show comment
Hide comment
@ozkriff

ozkriff Jul 29, 2016

Owner

Экспериментальным путем выяснено, что для нормального функционирования 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

Owner

ozkriff commented Jul 29, 2016

Экспериментальным путем выяснено, что для нормального функционирования 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

@ozkriff

This comment has been minimized.

Show comment
Hide comment
@ozkriff

ozkriff Jul 29, 2016

Owner

Надо попробовать создать отдельный репозиторий с минимальным примеров воспроизведения аналогичной ошибки. Может задачу стоит и в https://github.com/rust-lang/rust/issues сразу создавать, хз.


Should I create an issue in cgmath repo? Or in rust-lang/rust? Hmmm

Owner

ozkriff commented Jul 29, 2016

Надо попробовать создать отдельный репозиторий с минимальным примеров воспроизведения аналогичной ошибки. Может задачу стоит и в https://github.com/rust-lang/rust/issues сразу создавать, хз.


Should I create an issue in cgmath repo? Or in rust-lang/rust? Hmmm

@ozkriff

This comment has been minimized.

Show comment
Hide comment
@ozkriff

ozkriff Sep 1, 2016

Owner

Из мастера cgmath удалили repr(packed), оставили только repr(C). Надо проверить как игра теперь себя на андроиде ведет.


All repr(packed) were removed in cgmath's master branch, only repr(C) are left.

Owner

ozkriff commented Sep 1, 2016

Из мастера cgmath удалили repr(packed), оставили только repr(C). Надо проверить как игра теперь себя на андроиде ведет.


All repr(packed) were removed in cgmath's master branch, only repr(C) are left.

@ozkriff

This comment has been minimized.

Show comment
Hide comment
@ozkriff

ozkriff Sep 15, 2016

Owner

С переопределенными зависимостями прошло хорошо, надо теперь настоящие зависимости починить: cgmath обновлен и выложен на crates.io, но collision-rs надо обновить самому. С виду ничего очень сложного, просто так же перепилить на использование пакета approx.


It works ok with overriden deps, now real deps must be updated. Bjz updated cgmath on crates.io.

Not I'll go and update collision-rs to latest cgmath. Looks not to difficult, just employ new approx crate.

Owner

ozkriff commented Sep 15, 2016

С переопределенными зависимостями прошло хорошо, надо теперь настоящие зависимости починить: cgmath обновлен и выложен на crates.io, но collision-rs надо обновить самому. С виду ничего очень сложного, просто так же перепилить на использование пакета approx.


It works ok with overriden deps, now real deps must be updated. Bjz updated cgmath on crates.io.

Not I'll go and update collision-rs to latest cgmath. Looks not to difficult, just employ new approx crate.

@ozkriff

This comment has been minimized.

Show comment
Hide comment
@ozkriff

This comment has been minimized.

Show comment
Hide comment
@ozkriff

ozkriff Sep 16, 2016

Owner

collision обновлен, #222 я тоже закрыл. Осталось собрать версию с чистыми зависимостями под андроид и посмотреть как оно себя поведет.


collision is updated, #222 is closed. Everything must work now, I will check fresh build on device this evening.

Owner

ozkriff commented Sep 16, 2016

collision обновлен, #222 я тоже закрыл. Осталось собрать версию с чистыми зависимостями под андроид и посмотреть как оно себя поведет.


collision is updated, #222 is closed. Everything must work now, I will check fresh build on device this evening.

@ozkriff

This comment has been minimized.

Show comment
Hide comment
@ozkriff

ozkriff Sep 16, 2016

Owner

После обновления android_glue до 2.1 (f78c1a9) андроид-версия наконец-то хорошо работает, еееее!


After updating android_glue to 2.1 (f78c1a9) ZoC finally works on android again, yay!

Owner

ozkriff commented Sep 16, 2016

После обновления android_glue до 2.1 (f78c1a9) андроид-версия наконец-то хорошо работает, еееее!


After updating android_glue to 2.1 (f78c1a9) ZoC finally works on android again, yay!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment