android - How to call arm assembly from C source files? -
i have found number of tutorials on compiling assembly code android ndk. not have information on how call assembly instructions c source files, believe possible. think have seen similar tutorials online. question if can have c source file, issues assembly calls. want able compile ndk. avoid using android studio , jni; 1 reason being not have java code. , have validated can compile , run c source files using ndk. know how compile c source files, , assembly files using ndk. have validated c code runs fine on phone. not sure how go calling assembly instructions c source files arm architecture. keep getting following error message when try compile simple source file:
/tmp/ccwua4gd.s: assembler messages: /tmp/ccwua4gd.s:18: error: selected processor not support thumb mode `smc #0'
here file:
#include <stdio.h> __asm__(" smc #0"); int main(void) { /*do something*/ return 0; }
the issue, way, not seem thumb vs. arm related. did try local_arm_mode := arm
statement in android.mk, did not fix anything. similar error arm instruction.
update: still error. here copy of android.mk did not have specify arm version or arm/thumb specification in earlier c source file in order execute on device. have read thumb , pros , cons associated option, , how specify support it. error persists when put in configure abi. 1 thing have not tried adding .arm extension c source files. saw reference in earlier post, , not figure out why make difference. believe op, in thread, implied fix error. can elaborate on that? has used it? effect of doing vs. android.mk statements relevant architecture?
local_path := $(call my-dir) include $(clear_vars) local_module := hello app_abi := armeabi-v7a file_list := $(wildcard $(local_path)/*.c) $(warning here in file_list after attempt collect c files$(file_list)) file_list += $(wildcard $(local_path)/*.s) $(warning here in file_list after attempt collect s files$(file_list)) local_src_files := $(file_list:$(local_path)/%=%) include $(build_executable)
another update - tried adding .arm suffix c source files changing foo.c foo.c.arm, did not address issue. appreciated. here doing in android.mk file:
file_list := $(patsubst %.c,%.c.arm,$(wildcard $(local_path)/*.c))
here updated version of error. changes word "thumb" "arm"
/tmp/cctk9siq.s: assembler messages: /tmp/cctk9siq.s:17: error: selected processor not support arm mode `smc #0'
hey did little more research, , found this link problem. updated android.mk file local_cflags := -mcpu=cortex-a8
instructed in page. problem did not go away, got informative message stating: warning: switch -mcpu=cortex-a8 conflicts -march=armv5te switch [enabled default]
commands suggested below did not take effect. know if should try change default settings of ndk-build , how? after warning; not error. not sure if took configuration or need else. getting error missing header file, stdio.h, not getting before. kind of tells me ndk-build handed build process make after warning. can provide guidance or solution this?
073015 update - realized there difference between application.mk , android.mk. after configuring applicaiton.mk parameters stated, able change architecture armv7-a same error; below:
jni/android.mk:6: in ndk_root /home/sansari/android/android-ndk-r10d [armeabi-v7a] assembly : hello_tz <= main_normal.filtered.s ./obj/local/armeabi-v7a/objs-debug/hello_tz/main_normal.filtered.s: assembler messages: ./obj/local/armeabi-v7a/objs-debug/hello_tz/main_normal.filtered.s:16: error: **selected processor not support arm mode `smc #0'** make: *** [obj/local/armeabi-v7a/objs-debug/hello_tz/main_normal.o] error 1
is there other config need make functionality want?
the problem you're injecting assembly armv6 or above. if not specify abi in ndk application.mk, tools assume armv5.
Comments
Post a Comment