mirror of
https://github.com/rvtr/twl_wrapsdk.git
synced 2025-10-31 06:11:10 -04:00
dynamic linking time measurement
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@167 4ee2a332-4b2b-5046-8439-1ba90f034370
This commit is contained in:
parent
1036af0f18
commit
e23288a77c
@ -178,10 +178,10 @@ u16 elLoadLibraryfromFile( ElDesc* elElfDesc, int ObjFile, void* buf);
|
||||
/*------------------------------------------------------
|
||||
ELFオブジェクトまたはそのアーカイブをユーザのリードAPIを通して再配置する
|
||||
-----------------------------------------------------*/
|
||||
#if (TARGET_OS_NITRO == 1)
|
||||
#else
|
||||
//#if (TARGET_OS_NITRO == 1)
|
||||
//#else
|
||||
u16 elLoadLibrary( ElDesc* elElfDesc, ElReadImage readfunc, u32 len, void* buf);
|
||||
#endif
|
||||
//#endif
|
||||
|
||||
/*------------------------------------------------------
|
||||
ELFオブジェクトまたはそのアーカイブをメモリからバッファに再配置する
|
||||
|
||||
@ -14,17 +14,25 @@
|
||||
#define _DLL_LINK_DYNAMIC_ (1)
|
||||
|
||||
|
||||
|
||||
#define DEBUG_DECLARE OSTick begin
|
||||
#define DEBUG_BEGIN() (begin=OS_GetTick())
|
||||
#define DEBUG_END(str) OS_TPrintf( "\n%s was consumed %d msec.\n", #str, (int)OS_TicksToMilliSeconds(OS_GetTick()-begin))
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
static変数
|
||||
*---------------------------------------------------------------------------*/
|
||||
static u32 lib_buf[8192];
|
||||
int fd;
|
||||
u32 alloc_total_size = 0;
|
||||
u32 alloc_max_size = 0;
|
||||
static u32 lib_buf[8192];
|
||||
static u32 obj_buf[8192];
|
||||
int fd;
|
||||
u32 alloc_total_size = 0;
|
||||
u32 alloc_max_size = 0;
|
||||
|
||||
#if (_DLL_LINK_DYNAMIC_ == 1)
|
||||
global_func_p global_func;
|
||||
g_func_p g_func;
|
||||
global_func_p global_func;
|
||||
g_func_p g_func;
|
||||
#endif
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -32,74 +40,32 @@ g_func_p g_func;
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void display_entries( void);
|
||||
u32 readlib( u32 offset, void* buf, u32 size);
|
||||
int no_data; //DLLが使うstatic側グローバル変数
|
||||
|
||||
int no_data;
|
||||
|
||||
//
|
||||
//ストリームAPI用関数 (FILE構造体を使いたいなら必要)
|
||||
//実際にはmalloc/freeなどが使えるようにするためのものなので、
|
||||
//間違って使ったらサイズが足りなくなるかも
|
||||
//
|
||||
/*
|
||||
#define MY_HEAP_SIZE (8192*6)//65536
|
||||
static u8 myHeap[MY_HEAP_SIZE/sizeof(u8)] ATTRIBUTE_ALIGN(32);
|
||||
static ID myMplID;
|
||||
|
||||
static void myInitHeap(void)
|
||||
{
|
||||
T_CMPL cmpl = { TA_TFIFO, MY_HEAP_SIZE, NULL };
|
||||
myMplID = acre_mpl(&cmpl);
|
||||
}
|
||||
static void *myAlloc(size_t size)
|
||||
{
|
||||
void *ptr;
|
||||
ER ercd = pget_mpl(myMplID, size, &ptr);
|
||||
if (ercd == E_OK) {
|
||||
T_RMPL rmpl;
|
||||
ref_mpl(myMplID, &rmpl);
|
||||
alloc_total_size += size;
|
||||
if( alloc_total_size > alloc_max_size) {
|
||||
alloc_max_size = alloc_total_size;
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
static void myFree(void *ptr)
|
||||
{
|
||||
rel_mpl(myMplID, ptr);
|
||||
}
|
||||
*/
|
||||
|
||||
static void *myAlloc(size_t size)
|
||||
{
|
||||
return( OS_Alloc( size));
|
||||
}
|
||||
|
||||
static void myFree(void *ptr)
|
||||
{
|
||||
OS_Free( ptr);
|
||||
}
|
||||
|
||||
|
||||
int main(void)
|
||||
{
|
||||
extern void _uitron_start(void);
|
||||
_uitron_start();
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* メインタスク
|
||||
*/
|
||||
void TwlSpMain( void)
|
||||
{
|
||||
ElDesc dll_desc;
|
||||
u32 i;
|
||||
OSHeapHandle heapHandle;
|
||||
u32 free_bytes, free_blocks, total_blocks;
|
||||
ElDesc dll_desc;
|
||||
u8 rslt;
|
||||
u32 len;
|
||||
u32 free_bytes, free_blocks, total_blocks;
|
||||
u32 i, len, obj_size;
|
||||
int result;
|
||||
DEBUG_DECLARE;
|
||||
|
||||
// OS初期化
|
||||
OS_Init();
|
||||
@ -135,7 +101,6 @@ void TwlSpMain( void)
|
||||
PRINTDEBUG( "rtfs_init success.\n");
|
||||
}
|
||||
}
|
||||
OS_Alloc( 32);
|
||||
|
||||
|
||||
/*SDドライバ初期化*/
|
||||
@ -161,41 +126,56 @@ void TwlSpMain( void)
|
||||
}
|
||||
|
||||
|
||||
/*----------*/
|
||||
// fd = po_open( (byte*)"\\libdlltest.a", (PO_CREAT|PO_BINARY|PO_WRONLY), PS_IREAD);
|
||||
fd = po_open( (byte*)"\\libsampledll_sp.twl.nodbg.a", (PO_CREAT|PO_BINARY|PO_WRONLY), PS_IREAD);
|
||||
/*-----DLLファイルオープン -----*/
|
||||
fd = po_open( (byte*)"\\libsampledll_sp.twl.nodbg.a", (PO_BINARY|PO_WRONLY), PS_IREAD);
|
||||
if( fd < 0) {
|
||||
PRINTDEBUG( "po_open failed.\n");
|
||||
while( 1) {};
|
||||
}
|
||||
PRINTDEBUG( "po_open success.\n");
|
||||
/*-------------------------------*/
|
||||
|
||||
/*----------*/
|
||||
obj_size = po_lseek( fd, 0, PSEEK_END);
|
||||
po_lseek( fd, 0, PSEEK_SET);
|
||||
if( obj_size > 0) {
|
||||
po_read( fd, (void*)obj_buf, obj_size);
|
||||
}else{
|
||||
PRINTDEBUG( "po_lseek failed.\n");
|
||||
}
|
||||
/*----------*/
|
||||
|
||||
elInit( myAlloc, myFree);//OS_Alloc, OS_Free);
|
||||
PRINTDEBUG( "%s, %d\n", __FUNCTION__, __LINE__);
|
||||
|
||||
elInit( myAlloc, myFree);
|
||||
elInitDesc( &dll_desc);
|
||||
PRINTDEBUG( "%s, %d\n", __FUNCTION__, __LINE__);
|
||||
|
||||
// elLoadLibraryfromFile( &dll_desc, fd, lib_buf);
|
||||
len = po_lseek( fd, 0, PSEEK_END);
|
||||
po_lseek( fd, 0, PSEEK_SET);
|
||||
elLoadLibrary( &dll_desc, (ElReadImage)readlib, len, lib_buf);
|
||||
PRINTDEBUG( "%s, %d\n", __FUNCTION__, __LINE__);
|
||||
DEBUG_BEGIN();
|
||||
#if 0
|
||||
elLoadLibrary( &dll_desc, (ElReadImage)readlib, len, lib_buf); //SD上のファイルからリンク
|
||||
DEBUG_END(elLoadLibrary from file);
|
||||
#else
|
||||
elLoadLibraryfromMem( &dll_desc, obj_buf, obj_size, lib_buf); //RAMからリンク
|
||||
DEBUG_END(elLoadLibrary from RAM);
|
||||
#endif
|
||||
PRINTDEBUG( "alloc size : 0x%x\n", alloc_max_size);
|
||||
|
||||
|
||||
elAddStaticSym();
|
||||
PRINTDEBUG( "%s, %d\n", __FUNCTION__, __LINE__);
|
||||
|
||||
elResolveAllLibrary( &dll_desc);
|
||||
PRINTDEBUG( "%s, %d\n", __FUNCTION__, __LINE__);
|
||||
|
||||
|
||||
DEBUG_BEGIN();
|
||||
elResolveAllLibrary( &dll_desc);
|
||||
DEBUG_END(elResolveAllLibrary);
|
||||
|
||||
|
||||
#if (_DLL_LINK_DYNAMIC_ == 1)
|
||||
PRINTDEBUG( "LINK : dynamic\n");
|
||||
global_func = (global_func_p)elGetGlobalAdr( "global_func\0");
|
||||
PRINTDEBUG( "0x%x\n", global_func);
|
||||
PRINTDEBUG( "global_func : 0x%x\n", global_func);
|
||||
g_func = (g_func_p)elGetGlobalAdr( "g_func\0");
|
||||
PRINTDEBUG( "0x%x\n", g_func);
|
||||
PRINTDEBUG( "g_func : 0x%x\n", g_func);
|
||||
#endif
|
||||
|
||||
PRINTDEBUG( "----- dll-func1 execution -----\n");
|
||||
@ -220,6 +200,8 @@ void TwlSpMain( void)
|
||||
while( 1 ) {};
|
||||
}
|
||||
|
||||
|
||||
|
||||
u32 readlib( u32 offset, void* buf, u32 size)
|
||||
{
|
||||
po_lseek( fd, offset, PSEEK_SET);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user