Conditional jump or move depends on uninitialised value(s) - mips platform - valgrind

Have crosscompiled Valgrind-3.9.0 for mips platform, crosscompiled 'Hello World' program with -g option, still getting this error. --track-origins=yes didn't help
Same code working fine in Linux. Please let me know how to proceed
# valgrind ./executeApp
==522== Memcheck, a memory error detector
==522== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==522== Using Valgrind-3.9.0 and LibVEX; rerun with -h for copyright info
==522== Command: ./executeApp
==522== Conditional jump or move depends on uninitialised value(s)
==522== at 0x4006250: ??? (in /lib/ld-uClibc-0.9.29.so)
==522== by 0x400101C: _start (in /lib/ld-uClibc-0.9.29.so)
==522==
IR SANITY CHECK FAILURE
IRSB {
t0:I32 t1:I1
IR-NoOp
IR-NoOp
IR-NoOp
IR-NoOp
IR-NoOp
IR-NoOp
IR-NoOp
IR-NoOp
IR-NoOp
IR-NoOp
IR-NoOp
IR-NoOp
IR-NoOp
IR-NoOp
IR-NoOp
------ IMark(0x483C658, 4, 0) ------
PUT(40) = Add32(0x0:I32,0x0:I32)
PUT(128) = 0x483C65C:I32
------ IMark(0x483C65C, 4, 0) ------
PUT(32) = Add32(0x0:I32,0x1:I32)
PUT(128) = 0x483C660:I32
------ IMark(0x483C660, 4, 0) ------
t0 = DIRTY 1:I1 ::: mips32_dirtyhelper_mfc0{0x38341e58}(BBPTR,0xF:I32,0x0:I32)
PUT(40) = t0
PUT(128) = 0x483C664:I32
------ IMark(0x483C664, 4, 0) ------
PUT(48) = Add32(0x0:I32,0xFFFFFFE0:I32)
PUT(128) = 0x483C668:I32
------ IMark(0x483C668, 4, 0) ------
PUT(36) = 0x20000:I32
PUT(128) = 0x483C66C:I32
------ IMark(0x483C66C, 4, 0) ------
PUT(36) = Or32(GET:I32(36),0xA040:I32)
PUT(128) = 0x483C670:I32
------ IMark(0x483C670, 4, 0) ------
PUT(40) = And32(GET:I32(40),GET:I32(48))
PUT(128) = 0x483C674:I32
------ IMark(0x483C674, 4, 0) ------
t1 = CmpNE32(GET:I32(40),GET:I32(36))
if (t1) { PUT(128) = 0x483C67C:I32; exit-Boring }
PUT(128) = 0x483C678:I32
------ IMark(0x483C678, 4, 0) ------
PUT(32) = Add32(0x0:I32,0x111C:I32)
PUT(128) = 0x483C67C:I32
PUT(128) = GET:I32(128); exit-Boring
}
IN STATEMENT:
t0 = DIRTY 1:I1 ::: mips32_dirtyhelper_mfc0{0x38341e58}(BBPTR,0xF:I32,0x0:I32)
ERROR = IRStmt.Dirty.args: BBPTR requested, but no fxState declared
vex: the `impossible' happened:
sanityCheckFail: exiting due to bad IR
vex storage: T total 14676136 bytes allocated
vex storage: P total 0 bytes allocated
valgrind: the 'impossible' happened:
LibVEX called failure_exit().
==522== at 0x38042DF0: report_and_quit (m_libcassert.c:260)
==522== by 0x38043060: panic (m_libcassert.c:350)
==522== by 0x380430B4: vgPlain_core_panic_at (m_libcassert.c:355)
==522== by 0x380430D8: vgPlain_core_panic (m_libcassert.c:360)
==522== by 0x38066B48: failure_exit (m_translate.c:731)
==522== by 0x381353B8: vpanic (main_util.c:226)
==522== by 0x38141E0C: sanityCheckFail (ir_defs.c:3589)
==522== by 0x38143308: sanityCheckIRSB (ir_defs.c:4411)
==522== by 0x381338E4: LibVEX_Translate (main_main.c:719)
==522== by 0x380674E8: vgPlain_translate (m_translate.c:1602)
==522== by 0x380AB604: handle_chain_me (scheduler.c:1032)
==522== by 0x380AC5C0: vgPlain_scheduler (scheduler.c:1336)
==522== by 0x380C39B8: run_a_thread_NORETURN (syswrap-linux.c:103)
==522== by 0x380C3F48: vgPlain_main_thread_wrapper_NORETURN (syswrap-linux.c:395)
sched status:
running_tid=1
Thread 1: status = VgTs_Runnable
==522== at 0x483C658: memcpy (in /lib/libuClibc-0.9.29.so)
==522== by 0x4821E8C: ??? (in /lib/libuClibc-0.9.29.so)
======================== END ================

Congratulations, you have found a bug in valgrind.
You should follow the instructions at http://www.valgrind.org/support/bug_reports.html to report this bug so it can be fixed.

Related

How to get Cargo Test to Pretty Print Failure Outputs

I have a Rust test that is comparing two structs of a type that implements PartialEq and Debug.
According to the help page for the cargo test output, it should be possible to "pretty print" the left and right arguments to each failed assertion:
$ cargo test_foo --lib -- --help
warning: `google2005` (lib test) generated 4 warnings
Finished test [unoptimized + debuginfo] target(s) in 0.07s
Running unittests (target/debug/deps/foo)
Usage: test_foo [OPTIONS] [FILTERS...]
Options:
--include-ignored
Run ignored and not ignored tests
--ignored Run only ignored tests
...
***** snipped *****
...
--format pretty|terse|json|junit
Configure formatting of output:
pretty = Print verbose output;
terse = Display one character per test;
json = Output a json document;
junit = Output a JUnit document
...
***** snipped *****
I would expect this would print my structs with proper indentation, like when you use the {:#?} pretty print marker for Debug output. But it doesn't seem to have any effect:
$ cargo test test_foo --lib -- --format pretty
Finished test [unoptimized + debuginfo] target(s) in 0.07s
Running unittests (target/debug/deps/foo)
running 1 test
test parser::test::test_walk_scrapes_description ... FAILED
failures:
---- parser::test::test_walk_scrapes_description stdout ----
thread 'parser::test::test_walk_scrapes_description' panicked at 'assertion failed: `(left == right)`
left: `Cat { name: "Fluffy", age: 8, breed: "Siamese", color: "Brown", weight: 12, chip_number: 10001001 }`,
right: `Cat { name: "Fluffy", age: 8, breed: "Siamese", color: "Brown", weight: 13, chip_number: 10010001 }`', src/parser.rs:170:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
failures:
parser::test::test_walk_scrapes_description
test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 13 filtered out; finished in 0.00s
I thought it was possible to do achieve something like this:
left: `Cat {
name: "Fluffy",
age: 8,
breed: "Siamese",
color: "Brown",
weight: 12,
chip_number: 10001001
}`,
right: `Cat {
name: "Fluffy",
age: 8,
breed: "Siamese",
color: "Brown",
weight: 13,
chip_number: 10010001
}`',
I've tried both with rustc 1.59.0 (9d1b2106e 2022-02-23) and rustc 1.63.0-nightly (a6b8c6954 2022-06-03).
This is quite problematic since assert_eq!() itself prints the contents and cargo test gets already-formatted string.
It is also impossible to feature-gate the macro and under test pretty-print the variables, because std's code cannot be feature-gated (currently).
You can however write your macro to do that, or use a library like pretty-assertions.
Note, however, that there were RFCs to improve the display of the assert!() macros (it is not generally considered a breaking change), so it is possible that this will also be fixed in the future:
More readable assert_eq proposal
Tracking issue for RFC 2011: nicer assert messages

GPIO Raspberry Type B with MainLine Kernel

I have compiled uboot and a mainline kernel downloaded from kernel.org to run on a Raspberry Type B Module. I have a problem using the GPIO Interface. I am writing a module to manage two I/O's one of them should generate irq. When I call gpio_to_irq() or any other gpio related kernel api, the call always fail (return code -517 or -22). The same code, running on the raspberry kernel downloaded from the github RPI repository works. The mainline kernel, however, support BCM2835 that is the Soc used on RPI. Where is my approch wrong ? How does the gpio_api calls fail ? If I manually find the GPIO number (Virq) and I requests it with request_irq() everything works fine even with the mainline kernel from kernel.org.
The mainline kernel version is 4.11 while the rpi kernel version from github is 4.9.26. Here is the init function of the module:
I apologize for this. I will try to be more in toych now. Linux version (mainline) is 4.11 while the rpi linux version is 4.9.26. This is the init function of the module:
static int __init hello_init(void)
{
int result;
int temp;
printk(KERN_INFO "Hello world!\n");
printk(KERN_INFO "%s\n",Version);
/* Registering device */
result = register_chrdev(memory_major, "Bisio", &memory_fops);
if (result < 0)
{
printk(KERN_INFO "Memory Driver: Cannot Obtain Major Number %d\n", memory_major);
return -1;
}
/* Allocating memory for the buffer */
memory_buffer = kmalloc(MEMSIZE, GFP_KERNEL);
if (!memory_buffer) {
return -ENOMEM;
}
memset(memory_buffer, 0, MEMSIZE);
result = gpio_request(23,"MyIO");
printk(KERN_INFO "gpio_request: %d\n",result);
result = gpio_direction_input(23);
printk(KERN_INFO "gpio_direction_input: %d\n",result);
result = gpio_to_irq(23);
printk(KERN_INFO "gpio_to_irq: %d\n",result);
return 0; // Non-zero return means that the module couldn't be loaded.
}
Doing a insmod for this module I get:
[ 109.792257] nothing: loading out-of-tree module taints kernel.
[ 109.820350] Hello world!
[ 109.829341] Driver Version 1.27 - 10/09/2015 - 10:20
[ 109.841344] gpio_request: -517
[ 109.850737] gpio_direction_input: 0
[ 109.860187] gpio_to_irq: -22
while, doing the same with the rpi kernel (compiled with the same gcc crosscompiler version (5.20 soft float) works correctly and here is the output of the same init function:
[ 47.927565] nothing: loading out-of-tree module taints kernel.
[ 47.939771] Hello world!
[ 47.942333] Driver Version 1.27 - 10/09/2015 - 10:20
[ 47.947411] gpio_request: 0
[ 47.952798] gpio_direction_input: 0
[ 47.956314] gpio_to_irq: 183
what I am missing ?
Any help will be appreciated.
Regards
Marco Bisio

Xfce4 goes black randomly on DragonFly BSD release 4.2.4

The xfce4 desktop environment goes black on random occasions during use.
Install xf86-video-ffbdev.
Will post updates here, and the solution as soon as I've found it.
$ uname -v
DragonFly v4.2.4-RELEASE #6: Sun Aug 9 13:25:14 EDT 2015 root#www.shiningsilence.com:/usr/obj/home/justin/release/4_2/sys/X86_64_GENERIC
n00b207: you shouldn't need xf86-video-fbdev (that warning is because how Xorg probes available devices)
$ pciconf -lv
hostb0#pci0:0:0:0: class=0x060000 card=0x50001458 chip=0x0c008086 rev=0x06 hdr=0x00
vendor = 'Intel Corporation'
device = '4th Gen Core Processor DRAM Controller'
class = bridge
subclass = HOST-PCI
vgapci0#pci0:0:2:0: class=0x030000 card=0xd0001458 chip=0x041e8086 rev=0x06 hdr=0x00
vendor = 'Intel Corporation'
device = '4th Generation Core Processor Family Integrated Graphics Controller'
class = display
subclass = VGA
$ xset q
Keyboard Control:
auto repeat: on key click percent: 0 LED mask: 00000000
XKB indicators:
00: Caps Lock: off 01: Num Lock: off 02: Scroll Lock: off
03: Shift Lock: off 04: Group 2: off 05: Mouse Keys: off
auto repeat delay: 500 repeat rate: 20
auto repeating keys: 00feffffdffffbbf
fedfffffffdfe5ef
ffffffffffffffff
ffffffffffffffff
bell percent: 0 bell pitch: 400 bell duration: 100
Pointer Control:
acceleration: 2/1 threshold: 4
Screen Saver:
prefer blanking: yes allow exposures: yes
timeout: 600 cycle: 600
Colors:
default colormap: 0x22 BlackPixel: 0x0 WhitePixel: 0xffffff
Font Path:
/usr/local/share/fonts/misc/,/usr/local/share/fonts/TTF/,/usr/local/share/fonts/OTF/,/usr/local/share/fonts/Type1/,/usr/local/share/fonts/100dpi/,/usr/local/share/fonts/75dpi/,built-ins
DPMS (Energy Star):
Standby: 600 Suspend: 600 Off: 600
DPMS is Enabled
Monitor is On
Font cache:
Server does not have the FontCache Extension
n00b207: could you try "xset dpms force off" to check if it freezes (might need to repeat few times to fully go into turn off screen mode)
dmesg output: http://pastebin.com/9tk5JCBf
n00b207: looks like you hit xfce+Xorg combo, try "xset -dpms && xset s noblank && xset s off" to see if it repeats again

Undefined reference to `oslIsWlanPowerOn'

I am developing a PSP homebrew application and I using the makefile from the exampel but it won't link because the stupid (excuse my French) linker says that oslIsWlanPowrOn is undefined. I know I am linking the right library, plus I am following an example so it should compile. I know most stackoverflow users don't use the oslib or do much psp programming but any help would be appreciated. I have also tried reordering the order of the libs but still states the same linker errors. Anyhow here is the code below:
Makefile
TARGET = main
OBJS = main.o
CFLAGS = -O2 -g -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
LIBDIR =
LIBS= -lpspwlan -losl -lpng -lz -lpspnet \
-lpsphprm -lpspsdk -lpspctrl -lpsprtc -lpsppower -lpspgu -lpspgum -lpspaudiolib -lpspaudio \
-lpspnet_adhocmatching -lpspnet_adhoc -lpspnet_adhocctl -lm -ljpeg
LDFLAGS =
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = PSP Chat
#PSP_EBOOT_ICON = ICON0.PNG
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak
Error details:
1>------ Build started: Project: PSP Chat, Configuration: Debug Win32 ------
1> psp-gcc -I. -IC:/pspsdk/psp/sdk/include -O2 -g -G0 -Wall -D_PSP_FW_VERSION=150 -L. -LC:/pspsdk/psp/sdk/lib main.o -lpspwlan -losl -lpng -lz -lpspnet -lpsphprm -lpspsdk -lpspctrl -lpsprtc -lpsppower -lpspgu -lpspgum -lpspaudiolib -lpspaudio -lpspnet_adhocmatching -lpspnet_adhoc -lpspnet_adhocctl -lm -ljpeg -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspsdk -lc -lpspnet -lpspnet_inet -lpspnet_apctl -lpspnet_resolver -lpsputility -lpspuser -lpspkernel -o main.elf
1> main.o: In function `main':
1> c:\Users\Danny\documents\visual studio 2010\Projects\PSP Chat\PSP Chat/main.cpp (24) : undefined reference to `oslIsWlanPowerOn'
1> c:\Users\Danny\documents\visual studio 2010\Projects\PSP Chat\PSP Chat/main.cpp (52) : undefined reference to `oslIsWlanPowerOn'
1> C:\pspsdk\bin\make: *** [main.elf] Error 1
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
main.cpp
#include <pspkernel.h>
#include <oslib\oslib.h>
PSP_MODULE_INFO("PSP Chat", 0, 1, 0);
OSL_FONT* font;
int main()
{
char* screename = (char*)malloc(100);
int skip = 0;
printf("Initializing OSL...");
oslInit(0);
printf("Loading Font...");
oslIntraFontInit(INTRAFONT_CACHE_MED);
font = oslLoadFontFile("flash0:/font/ltn0.pgf");
printf("Configuring Font Style...");
oslIntraFontSetStyle(font, 1.0, RGBA(0, 0, 255, 255), RGBA(0, 0, 0, 0), INTRAFONT_ALIGN_LEFT);
printf("Setting Font...");
oslSetFont(font);
while(!osl_quit)
{
if (!skip)
{
oslStartDrawing();
if (oslIsWlanPowerOn())
{
oslDrawString(10, 10, "Please Enter Screename By Pressing X (Client)...");
oslDrawString(10, 25, "Please Press O To Act As Server...");
if (oslOskIsActive()){
oslDrawOsk();
if (oslGetOskStatus() == PSP_UTILITY_DIALOG_NONE)
{
if (oslOskGetResult() == OSL_OSK_CANCEL)
{
screename = (char*)"Client";
}
else
{
oslOskGetText(screename);
}
oslEndOsk();
}
}
else
{
oslDrawString(10, 10, "Please turn on the wlan switch!");
}
oslEndDrawing();
}
oslEndFrame();
skip = oslSyncFrame();
oslReadKeys();
if (osl_keys->released.cross && oslIsWlanPowerOn())
{
oslInitOsk((char*)"Please enter screename!", (char*)"Client", 99, 1, -1);
}
}
}
sceKernelExitGame();
return 0;
}
There was a problem with the installation of the sdk and so I reinstalled it. Voila--it worked.
Thanks for everyone who tried to diagnose the problem.

Building release version of a project with Android NDK r6

I am compiling helloworld example of Android NDK r6b using cygwin and Windows Vista. I have noticed that the following code takes between 14 and 20 mseconds on my Android phone (it has an 800mhz CPU Qualcomm MSM7227T chipset, with hardware floating point support):
float *v1, *v2, *v3, tot;
int num = 50000;
v1 = new float[num];
v2 = new float[num];
v3 = new float[num];
// Initialize vectors. RandomEqualREAL() returns a floating point number in a specified range.
for ( int i = 0; i < num; i++ )
{
v1[i] = RandomEqualREAL( -10.0f, 10.0f );
if (v1[i] == 0.0f) v1[i] = 1.0f;
v2[i] = RandomEqualREAL( -10.0f, 10.0f );
if (v2[i] == 0.0f) v2[i] = 1.0f;
}
clock_t start = clock() / (CLOCKS_PER_SEC / 1000);
tot = 0.0f;
for ( int k = 0; k < 1000; k++)
{
for ( int i = 0; i < num; i++ )
{
v3[i] = v1[i] / (v2[i]);
tot += v3[i];
}
}
clock_t end = clock() / (CLOCKS_PER_SEC / 1000);
printf("time %f\n", tot, (end-start)/1000.0f);
On my 2.4ghz notebook it takes .45 msec (timings taken when the system is full of other programs running, like Chrome, 2/3 ides, .pdf opens etc...). I wonder if the helloworld application is builded as a release version. I noticed that g++ get called with
-msoft-float.
Does this means that it is using floating point emulations?
What command line options i need to use in order to build an optimized version of the program? How to specify those options?
This is how g++ get called.:
/cygdrive/d/android/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebu
ilt/windows/bin/arm-linux-androideabi-g++ -MMD -MP -MF D:/android/workspace/hell
oworld/obj/local/armeabi/objs/ndkfoo/ndkfoo.o.d.org -fpic -ffunction-sections -f
unwind-tables -fstack-protector -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_
5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -f
no-exceptions -fno-rtti -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -f
inline-limit=64 -ID:/android/workspace/helloworld/jni/boost -ID:/android/workspa
ce/helloworld/jni/../../mylib/jni -ID:/android/android-ndk-r6b/sources/cxx-stl/g
nu-libstdc++/include -ID:/android/android-ndk-r6b/sources/cxx-stl/gnu-libstdc++/
libs/armeabi/include -ID:/android/workspace/helloworld/jni -DANDROID -Wa,--noex
ecstack -fexceptions -frtti -O2 -DNDEBUG -g -ID:/android/android-ndk-r6b/plat
forms/android-9/arch-arm/usr/include -c D:/android/workspace/helloworld/jni/ndk
foo.cpp -o D:/android/workspace/helloworld/obj/local/armeabi/objs/ndkfoo/ndkfoo.
o && ( if [ -f "D:/android/workspace/helloworld/obj/local/armeabi/objs/ndkfoo/nd
kfoo.o.d.org" ]; then awk -f /cygdrive/d/android/android-ndk-r6b/build/awk/conve
rt-deps-to-cygwin.awk D:/android/workspace/helloworld/obj/local/armeabi/objs/ndk
foo/ndkfoo.o.d.org > D:/android/workspace/helloworld/obj/local/armeabi/objs/ndkf
oo/ndkfoo.o.d && rm -f D:/android/workspace/helloworld/obj/local/armeabi/objs/nd
kfoo/ndkfoo.o.d.org; fi )
Prebuilt : libstdc++.a <= <NDK>/sources/cxx-stl/gnu-libstdc++/libs/armeabi
/
cp -f /cygdrive/d/android/android-ndk-r6b/sources/cxx-stl/gnu-libstdc++/libs/arm
eabi/libstdc++.a /cygdrive/d/android/workspace/helloworld/obj/local/armeabi/libs
tdc++.a
SharedLibrary : libndkfoo.so
/cygdrive/d/android/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebu
ilt/windows/bin/arm-linux-androideabi-g++ -Wl,-soname,libndkfoo.so -shared --sys
root=D:/android/android-ndk-r6b/platforms/android-9/arch-arm D:/android/workspac
e/helloworld/obj/local/armeabi/objs/ndkfoo/ndkfoo.o D:/android/workspace/hellow
orld/obj/local/armeabi/libstdc++.a D:/android/android-ndk-r6b/toolchains/arm-lin
ux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3
/libgcc.a -Wl,--no-undefined -Wl,-z,noexecstack -lc -lm -lsupc++ -o D:/androi
d/workspace/helloworld/obj/local/armeabi/libndkfoo.so
Install : libndkfoo.so => libs/armeabi/libndkfoo.so
mkdir -p /cygdrive/d/android/workspace/helloworld/libs/armeabi
install -p /cygdrive/d/android/workspace/helloworld/obj/local/armeabi/libndkfoo.
so /cygdrive/d/android/workspace/helloworld/libs/armeabi/libndkfoo.so
/cygdrive/d/android/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebu
ilt/windows/bin/arm-linux-androideabi-strip --strip-unneeded D:/android/workspac
e/helloworld/libs/armeabi/libndkfoo.so
Edit.
I have run the commnad adb shell cat /proc/cpuinfo. This is the result:
Processor : ARMv6-compatible processor rev 5 (v6l)
BogoMIPS : 532.48
Features : swp half thumb fastmult vfp edsp java
CPU implementer : 0x41
CPU architecture: 6TEJ
CPU variant : 0x1
CPU part : 0xb36
CPU revision : 5
Hardware : GELATO Global board (LGE LGP690)
Revision : 0000
Serial : 0000000000000000
I don't understand what swp, half thumb fastmult vfp edsp and java means, but i don't like that 'vfp'!! Does it means virtual-floating points? That processor should have a floating point unit...
You are right, -msoft-float is a synonym for -mfloat-abi=soft (see list of gcc ARM options) and means floating point emulation.
For hardware floating point the following flags can be used:
LOCAL_CFLAGS += -march=armv6 -marm -mfloat-abi=softfp -mfpu=vfp
To see what floating point unit you really have on your device you can check the output of adb shell cat /proc/cpuinfo command. Some units are compatible with another: vfp < vfpv3-d16 < vfpv3 < neon - so if you have vfpv3, then vfp also works for you.
Also you might want to add the line
APP_OPTIM := release
into your Application.mk file. This setting overrides automatic 'debug' mode for native part of application if the manifest sets android:debuggable to 'true'
But even with all these settings NDK will put -march=armv5te -mtune=xscale -msoft-float into the beginning of compiler options. And this behavior can not be changed without modifications in NDK sources (these options are hardcoded in file $NDKROOT\toolchains\arm-linux-androideabi-4.4.3\setup.mk).