Skip to content

Instantly share code, notes, and snippets.

@nnn1590
Last active August 27, 2022 00:25
Show Gist options
  • Select an option

  • Save nnn1590/300fdee6fff55dce4821b265e8bdd358 to your computer and use it in GitHub Desktop.

Select an option

Save nnn1590/300fdee6fff55dce4821b265e8bdd358 to your computer and use it in GitHub Desktop.
?

cpu_featuresの使用時なんかバグる(?)

環境

ホスト

  • Ubuntu 20.04 LTS amd64
  • Google Android SDK, NDK, AVD

エミュ

  • Android 1.0~2.3.3 (API 1~10) armeabi(armeabi-v5te?)
    • Android 1.1, 1.2のエミュはSDK 1.0 r2とSDK 1.1 r1内にあるtools/emulatorを実行しているゾ
    • 1.5以降のエミュはIntellij IDEA/Android StudioのAVD Managerからダウンロード&追加したシステムイメージ、AVDを Android SDK r24.4.1のemulatorから実行しているゾ(新しいemulatorでは動かないゾ)

手順

  1. Android NDK r6, r16bをダウンロード&展開
  2. NDKへのパスの環境変数をセットしておく
    # TODO: Change NDK paths
    export ANDROID_NDK_R16B="$HOME/Android/android-ndk-r16b"
    export ANDROID_NDK_R6="$HOME/Android/android-ndk-r6"
  3. cpu_featuresをクローン&cd
    git clone https://github.com/google/cpu_features.git --depth=1
    cd cpu_features
  4. cpu_featuresのビルド
    cmake -S. -Bbuild \
    	-D{BUILD_TESTING=0,CMAKE_BUILD_TYPE=Release,CMAKE_TOOLCHAIN_FILE="${ANDROID_NDK_R16B}/build/cmake/android.toolchain.cmake"} \
    	-D{ANDROID_ABI=armeabi,ANDROID_PLATFORM=android-1,ANDROID_PIE=0}
    cmake --build build --config Release -j
  5. showinfo.cのビルド (build.sh参照)
  6. adb push showinfo-armv5 /data/local/tmp
    adb shell /data/local/tmp/showinfo-armv5
  7. なぜか一部デバイスでセグフォったり中止(Aborted)になったりフリーズしたりArmInfo.revisionが0になったりするゾ
    showinfo.c内最初のprintf, fflushを消したりすると実行結果が変わるゾ
    Android 1.5(API 3)や2.0(API 5)、2.3.3(API 10)らへんでバグりやすい?

ライセンス

Apache License 2.0 2022 NNN1590

このGistでは一部cpu_featuresのコードを使用しているゾ

The cpu_features library is licensed under the terms of the Apache license. See LICENSE for more information.

#!/usr/bin/env bash
#set -e
# TODO: Change NDK paths
declare -r ANDROID_NDK_R16B="$HOME/Android/android-ndk-r16b"
declare -r ANDROID_NDK_R6="$HOME/Android/android-ndk-r6"
# "${ANDROID_NDK_R6}/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc" \
"${ANDROID_NDK_R16B}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc" \
-D{ANDROID,__ANDROID__} \
-Wall -Wextra \
--sysroot="${ANDROID_NDK_R6}/platforms/android-3/arch-arm" \
-Iinclude -Lbuild \
-o showinfo-armv5 \
showinfo.c \
-lcpu_features
#include <stdio.h>
#include "cpu_features_macros.h"
#ifdef CPU_FEATURES_ARCH_ARM
# include "cpuinfo_arm.h"
#else
# error Compiling for Non-ARM CPUs are not supported
#endif
int main() {
printf(".\n");
fflush(stdout);
const ArmInfo info = GetArmInfo();
printf("ARM revision: %d\n", info.revision);
printf("AES : %s\n", (info.features.aes ? "true" : "false"));
printf("PMULL: %s\n", (info.features.pmull ? "true" : "false"));
printf("SHA2 : %s\n", (info.features.sha2 ? "true" : "false"));
return 0;
}
@nnn1590
Copy link
Copy Markdown
Author

nnn1590 commented Apr 29, 2022

少し追ってみた感じ
src/impl_arm_linux_or_android.cArmInfo GetArmInfo(void)FillProcCpuInfoData(&info, &proc_cpu_info_data);らへんでエラーが発生するみたいっすね:
https://github.com/google/cpu_features/blob/0bf4ea05294061560a0f84fa39af4db66b91b943/src/impl_arm_linux_or_android.c#L198
こ↑こ↓(GetArmInfo内)でもprintfした文字数かなんかによって処理変わりますね…

@nnn1590
Copy link
Copy Markdown
Author

nnn1590 commented Apr 30, 2022

なんかいろいろ試してみたらAVDが強制終了してしまったゾ
(再起動後はなんか普通に動いてるみたいで)これもうわかんねぇな

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