Hello,
I am using llvm-2.7 to run a native(executable) on a arm processor.
I have built my wxGtk sample app with llvm-gcc as frontend .
I am using llvm-2.7 and llvm-gcc-4.2.
I built llvm-2.7 with:
…/llvm-2.7/configure --prefix=/home/install-llvm --enable-optimized --enable-assertions
and llvm gcc with:
…/llvm-gcc-4.2-2.7.source/configure --prefix=/home//gcc-disable-shared --enable-languages=c++,c --enable-checking --enable-llvm=/home/ llvm-objects --disable-bootstrap --disable-multilib
Now from Samples, I am compiling minimal.cpp by llvm-gcc (binary for x86) using the following commands:
Step 1. llvm-gcc -O3 -emit-llvm minimal.cpp -c -o minimal.bc wxconfig –cxxflags
Step 2. llc minimal.bc –march=arm –o minimal.s (for generating arm assembly code)
Step 3 arm_v7_vfp_le-gcc minimal.s –o minimal.native wxconfig –libs
(arm compiler to compile this assembly code into native executable)
Now when I am running this native executable on my target it is crashing in g_object new(). However, if I build my application(wxGTK application) with a memory allocation using new in the very start, the same exe now would run successfully.
For your reference I am posting both the codes:
Case 1: Crash at a point when it tries to allocate memory in making an object of MyFrame in the code below.
bool MyApp::OnInit()
{
if ( !wxApp::OnInit() )
return false;
// create the main application window
MyFrame *frame = new MyFrame(_T(“Minimal wxWidgets App”));
frame->Show(true);
return true;
}
Case 2: The code below is same as above except the first line in the function body and it runs fine .
bool MyApp::OnInit()
{
char *ptr = new char[10000];
if ( !wxApp::OnInit() )
return false;
// create the main application window
MyFrame *frame = new MyFrame(_T(“Minimal wxWidgets App”));
frame->Show(true);
return true;
}
Can anybody give us an explanation for this??
How does using new in the start makes a difference??
Thanks & Regards,
Ankur Jain
Senior Software Engineer