Chromebookで追加エンジンが起動エラーになる

不具合があればこちらにお願いします。
ゲスト

Chromebookで追加エンジンが起動エラーになる

投稿記事by ゲスト » 2017年3月04日(土) 10:09

Chromebookで使用しています。
エンジン登録までは出来るのですが、初期インストールされているgpsfish以外は
エンジン起動エラーになります。

原因は分かりますでしょうか?

管理人
管理人
記事: 33
登録日時: 2016年7月04日(月) 15:20
連絡を取る:

Re: Chromebookで追加エンジンが起動エラーになる

投稿記事by 管理人 » 2017年3月04日(土) 11:58

どういった機種でどのエンジンを試したのかわかりませんが、
1.搭載CPUにエンジンが未対応
2.メモリが足りない
どちらかだと思います。

ShogiDroidに付属しているgpsfishが一番いろいろな環境で動きます。

ゲスト

Re: Chromebookで追加エンジンが起動エラーになる

投稿記事by ゲスト » 2017年3月04日(土) 12:23

返信ありがとうございます。

機種ですが、ASUS Chromebook flip c302caになります。
CPUがIntel Core m3/メモリは4GBです。
CPUでしょうか、、、

ゲスト

Re: Chromebookで追加エンジンが起動エラーになる

投稿記事by ゲスト » 2017年3月04日(土) 12:34

すいません、試したエンジンを書いていませんでした。

技巧 20160727
真やねうら王

の2つです。

yusuke

Re: Chromebookで追加エンジンが起動エラーになる

投稿記事by yusuke » 2017年3月13日(月) 14:59

https://plus.google.com/u/1/11099731599 ... aY5pagQdKP から来ました。

手元にIntel CPU (Core i7)のChromebookがあるので試してみた所、確かに技巧 20160727のengineが起動直後にクラッシュしました。

コード: 全て選択

03-12 21:47:16.012 10412 10412 F libc    : Fatal signal 11 (SIGSEGV), code 128, fault addr 0x0 in tid 10412 (gikou_20160727)
03-12 21:47:16.063    22    22 F DEBUG   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
03-12 21:47:16.063    22    22 F DEBUG   : Revision: '0'
03-12 21:47:16.064    22    22 F DEBUG   : ABI: 'x86'
03-12 21:47:16.064    22    22 E DEBUG   : AM write failed: Broken pipe
03-12 21:47:16.064    22    22 F DEBUG   : pid: 10412, tid: 10412, name: gikou_20160727  >>> /data/user/0/com.siganus.ShogiDroid/files/engine/gikou_20160727/gikou_20160727 <<<
03-12 21:47:16.064    22    22 F DEBUG   : signal 11 (SIGSEGV), code 128 (SI_KERNEL), fault addr 0x0
03-12 21:47:16.065    22    22 F DEBUG   :     eax 60f35f28  ebx 5ed8deb8  ecx 5f6d71a0  edx 5f6ec7c0
03-12 21:47:16.065    22    22 F DEBUG   :     esi ffcf8220  edi 00000010
03-12 21:47:16.065    22    22 F DEBUG   :     xcs 00000023  xds 0000002b  xes 0000002b  xfs 00000000  xss 0000002b
03-12 21:47:16.065    22    22 F DEBUG   :     eip 5ecd0d6c  ebp ffcf86a0  esp ffcf8160  flags 00010206
03-12 21:47:16.068    22    22 F DEBUG   :
03-12 21:47:16.068    22    22 F DEBUG   : backtrace:
03-12 21:47:16.068    22    22 F DEBUG   :     #00 pc 00078d6c  /data/data/com.siganus.ShogiDroid/files/engine/gikou_20160727/gikou_20160727
03-12 21:47:16.068    22    22 F DEBUG   :     #01 pc 0007dd79  /data/data/com.siganus.ShogiDroid/files/engine/gikou_20160727/gikou_20160727
03-12 21:47:16.068    22    22 F DEBUG   :     #02 pc 0007e2f8  /data/data/com.siganus.ShogiDroid/files/engine/gikou_20160727/gikou_20160727
03-12 21:47:16.068    22    22 F DEBUG   :     #03 pc 0009b4f7  /data/data/com.siganus.ShogiDroid/files/engine/gikou_20160727/gikou_20160727
03-12 21:47:16.068    22    22 F DEBUG   :     #04 pc 00006536  /data/data/com.siganus.ShogiDroid/files/engine/gikou_20160727/gikou_20160727
03-12 21:47:16.078    22    22 F DEBUG   :
03-12 21:47:16.078    22    22 F DEBUG   : Tombstone written to: /data/tombstones/tombstone_07

ChromebookのAndroid環境はMarshmallowで32bit (Android OSが動作しているコンテナ内で動くのは32bit processes)です。上のbacktraceのアドレスとengineのバイナリのobjdumpの結果を見比べた所、

コード: 全て選択

 void Position::InitStateInfo() {
 ...
   current_state_info_->checkers = ComputeCheckers();

の代入のところ

コード: 全て選択

   78d6c:       66 0f 7f 08             movdqa %xmm1,(%eax)

でとりあえずSEGVしていまして、ComputeCheckers()の戻したtemporary objectからのcopyは__m128i同士のcopyだと思いますが、 にもかかわらず一方のアドレス(eax)が16 byteにalignしていないのが問題のようでした。eaxが16でなく8 byteにalign (0x60f35f28) してしまっています。

あまりちゃんとコードを読んでいないので色々勘違いがあるかもしれませんが、多分operator newやmallocが8 byte alignのアドレスを戻すような環境では技巧は動作しないということだと思われ、技巧の本家のページに64bit OSのみ対応と書いてあるのはこれが理由かなと思います。念のため、src/bitboard.h の32bit Windows向けworkaroundと思われる mm_allocator とそれを使っている箇所を有効にして試してみましたが、32bit Linux向けには十分ではないようで、別の箇所(多分newされた__m128iを持つobjectを触る所)で同じくalignmentの問題でクラッシュしました。

で...なるべくソースコードに触らずに、最小限の変更でIntel Chromebookで動くようにする方法があるかなぁと思って試してみた所、美しくありませんが下記patchでoperator newの戻りを強制的に16 byte alignedにすることで一応Intel Chromebookで技巧が動作しました。

コード: 全て選択

diff -ur Gikou-android_20160727.orig/jni/Android.mk Gikou-android_20160727/jni/Android.mk
--- Gikou-android_20160727.orig/jni/Android.mk  2016-07-27 04:21:52.000000000 -0700
+++ Gikou-android_20160727/jni/Android.mk       2017-03-12 19:06:18.315009762 -0700
@@ -44,6 +44,10 @@
 LOCAL_LDFLAGS += -fPIE -pie
 LOCAL_LDLIBS =
 
+ifeq ($(TARGET_ARCH_ABI),x86)
+  LOCAL_LDFLAGS += -Wl,--wrap,malloc
+endif
+
 LOCAL_C_INCLUDES := ../ ../src
 LOCAL_CPP_FEATURES += exceptions rtti
 
diff -ur Gikou-android_20160727.orig/src/bitboard.cc Gikou-android_20160727/src/bitboard.cc
--- Gikou-android_20160727.orig/src/bitboard.cc 2016-07-27 04:21:52.000000000 -0700
+++ Gikou-android_20160727/src/bitboard.cc      2017-03-12 19:30:09.222978004 -0700
@@ -524,3 +524,11 @@
 }
 
 } // namespace
+
+#if !defined(IS_ARM) && !defined(IS_64BIT)
+#include <stdlib.h>
+extern "C" void* __wrap_malloc(size_t size) {
+  return ::memalign(16, size);
+}
+#endif
+

技巧 20160727以外のエンジンは試していないです。Intel Chromebookを使わずにこの問題を再現させる簡単な方法があるかも見ていないです。

主に上のguestさんへ:
技巧 20160727ですが、CloudPad(?)というIntel CPUのAndroid tablet (Marshmallow) だと問題なく動きました。うっかり確認し忘れましたが、多分OSが64bit版で上記alignmentの問題が起こらないからだと思われます。また、ARM Chromebook (32bit Marshmallow) でも問題なく動きました。一方、MarshmallowなAndroidを使っている(今のところ全ての)Intel Chromebook ではCPUの型番によらず問題が再現するだろうと思います。

https://www.youtube.com/watch?v=86MBG-k4m6Y などによるとChromebookのAndroid環境はMarshmallowからNougatに移行中で、Nougatになれば32bit Intelでも技巧 20160727が動作するようになるんじゃないかと思います(Nougatではmemory allocatorがdlmallocからjemallocというのに確か入れ替わっていて、jemallocのmallocは確か32bit Intelでも常に16 byteにalignしたアドレスを戻すので。) ただ、お使いのIntel ChromebookがNougatにupdateされるかまではアナウンスされていないと思います。

yusuke

Re: Chromebookで追加エンジンが起動エラーになる

投稿記事by yusuke » 2017年3月14日(火) 11:06

一点細かい訂正ですが、私が試したCloudPadもuserlandは32bitでした。恐らくdlmallocに手が入っているかjemallocを使っているかで問題が再現しないのだと思います。


“不具合報告” へ戻る

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[1人]