fix makelst

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@206 4ee2a332-4b2b-5046-8439-1ba90f034370
This commit is contained in:
shirait 2007-07-23 09:29:22 +00:00
parent 84b2da973c
commit 4e994e11e9
5 changed files with 32 additions and 18 deletions

View File

@ -8,9 +8,10 @@
#include "stdlib.h" #include "stdlib.h"
static int endian; static int endian;
static BOOL load_strndx_done = FALSE; //static BOOL load_strndx_done = FALSE;
#if 0
/*--------------------------------------------------------- /*---------------------------------------------------------
--------------------------------------------------------*/ --------------------------------------------------------*/
@ -24,6 +25,7 @@ static u8 *load_elf32_byte(u8 *dest, u8 *org, int lsb)
return temp_ptr; return temp_ptr;
} }
#endif
/*--------------------------------------------------------- /*---------------------------------------------------------
@ -48,6 +50,7 @@ static u8 *load_elf32_half(Elf32_Half *dest, u8 *org, int lsb)
return (void *)temp_ptr; return (void *)temp_ptr;
} }
#if 0
/*--------------------------------------------------------- /*---------------------------------------------------------
--------------------------------------------------------*/ --------------------------------------------------------*/
@ -108,6 +111,7 @@ static u8 *load_elf32_word(Elf32_Word *dest, u8 *org, int lsb)
} }
return (void *)temp_ptr; return (void *)temp_ptr;
} }
#endif
/*--------------------------------------------------------- /*---------------------------------------------------------
ELFヘッダを読み出す ELFヘッダを読み出す
@ -249,6 +253,7 @@ void *ELF_LoadELFHeader(const void *buf, Elf32_Ehdr *ehdr)
} }
#if 0
/*--------------------------------------------------------- /*---------------------------------------------------------
Relocation Entry Load Relocation Entry Load
--------------------------------------------------------*/ --------------------------------------------------------*/
@ -336,6 +341,6 @@ static void *ELF_LoadSectionHeader(const void *buf,Elf32_Shdr *shdr)
return file_ptr; return file_ptr;
} }
#endif

View File

@ -1,5 +1,5 @@
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Project: CTR - ELF Loader Project: TWL - ELF Loader
File: elf_loader.c File: elf_loader.c
Copyright 2006,2007 Nintendo. All rights reserved. Copyright 2006,2007 Nintendo. All rights reserved.
@ -25,13 +25,15 @@ ELAdrEntry* ELAdrEntStart = NULL;
ELUnresolvedEntry* ELUnrEntStart = NULL; ELUnresolvedEntry* ELUnrEntStart = NULL;
extern u16 dbg_print_flag; extern u16 dbg_print_flag;
extern u32 unresolved_table_block_flag; extern u16 unresolved_table_block_flag;
#define MAKELST_DS_API " elAddAdrEntry" //DS上でアドレステーブルに追加するAPI関数名 #define MAKELST_DS_API " elAddAdrEntry" //DS上でアドレステーブルに追加するAPI関数名
extern char c_source_line_str[256]; extern char c_source_line_str[256];
extern FILE* CSourceFilep; extern FILE* CSourceFilep;
extern void file_write( char* c_str, FILE* Fp);
/*------------------------------------------------------ /*------------------------------------------------------
@ -522,7 +524,7 @@ u16 EL_ResolveAllLibrary( void)
/*------------------------------------------------------ /*------------------------------------------------------
-----------------------------------------------------*/ -----------------------------------------------------*/
u16 EL_ExtractStaticSym1( void) void EL_ExtractStaticSym1( void)
{ {
// ELAdrEntry* AdrEnt; // ELAdrEntry* AdrEnt;
// ELUnresolvedEntry* RemoveUnrEnt; // ELUnresolvedEntry* RemoveUnrEnt;
@ -608,7 +610,7 @@ u16 EL_ExtractStaticSym1( void)
/*------------------------------------------------------ /*------------------------------------------------------
APIとして書き出す APIとして書き出す
-----------------------------------------------------*/ -----------------------------------------------------*/
u16 EL_ExtractStaticSym2( void) void EL_ExtractStaticSym2( void)
{ {
// ELAdrEntry* AdrEnt; // ELAdrEntry* AdrEnt;
// ELUnresolvedEntry* RemoveUnrEnt; // ELUnresolvedEntry* RemoveUnrEnt;

View File

@ -1,8 +1,8 @@
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Project: CTR - ELF Loader Project: TWL - ELF Loader
File: elf_loader.h File: elf_loader.h
Copyright 2006 Nintendo. All rights reserved. Copyright 2006,2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo proprietary information of Nintendo of America Inc. and/or Nintendo
@ -151,11 +151,11 @@ u16 EL_ResolveAllLibrary( void);
/*------------------------------------------------------ /*------------------------------------------------------
-----------------------------------------------------*/ -----------------------------------------------------*/
u16 EL_ExtractStaticSym1( void); void EL_ExtractStaticSym1( void);
/*------------------------------------------------------ /*------------------------------------------------------
APIとして書き出す APIとして書き出す
-----------------------------------------------------*/ -----------------------------------------------------*/
u16 EL_ExtractStaticSym2( void); void EL_ExtractStaticSym2( void);
/*------------------------------------------------------ /*------------------------------------------------------

View File

@ -1,5 +1,5 @@
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Project: CTR - ELF Loader Project: TWL - ELF Loader
File: loader_subset.c File: loader_subset.c
Copyright 2006,2007 Nintendo. All rights reserved. Copyright 2006,2007 Nintendo. All rights reserved.
@ -485,9 +485,15 @@ void ELi_DiscriminateGlobalSym( ELHandle* ElfHandle, u32 symsh_index)
//MI_CpuCopy8( sym_str, ExportAdrEntry->name, copy_size); //MI_CpuCopy8( sym_str, ExportAdrEntry->name, copy_size);
memcpy( ExportAdrEntry->name, sym_str, copy_size); memcpy( ExportAdrEntry->name, sym_str, copy_size);
CurrentShdrEx = ELi_GetShdrExfromList( ElfHandle->ShdrEx, CurrentSymEx->Sym.st_shndx); if( (CurrentSymEx->Sym.st_shndx) < SHN_LORESERVE) { //関連セクションがある場合
//Sym.st_valueは偶数/奇数でARM/Thumbを判別できるように調整されている場合があるので、その調整を削除して正味の値を出す if( (CurrentSymEx->Sym.st_shndx == SHN_ABS)) {
ExportAdrEntry->adr = (void*)(CurrentShdrEx->loaded_adr + ((CurrentSymEx->Sym.st_value)&0xFFFFFFFE)); //Sym.st_valueは偶数/奇数でARM/Thumbを判別できるように調整されている場合があるので、その調整を削除して正味の値を出す
ExportAdrEntry->adr = (void*)((CurrentSymEx->Sym.st_value)&0xFFFFFFFE);
}else{
CurrentShdrEx = ELi_GetShdrExfromList( ElfHandle->ShdrEx, CurrentSymEx->Sym.st_shndx);
//Sym.st_valueは偶数/奇数でARM/Thumbを判別できるように調整されている場合があるので、その調整を削除して正味の値を出す
ExportAdrEntry->adr = (void*)(CurrentShdrEx->loaded_adr + ((CurrentSymEx->Sym.st_value)&0xFFFFFFFE));
}
ExportAdrEntry->func_flag = (u16)(ELF32_ST_TYPE( CurrentSymEx->Sym.st_info)); ExportAdrEntry->func_flag = (u16)(ELF32_ST_TYPE( CurrentSymEx->Sym.st_info));
ExportAdrEntry->thumb_flag = CurrentSymEx->thumb_flag; ExportAdrEntry->thumb_flag = CurrentSymEx->thumb_flag;
@ -501,6 +507,7 @@ void ELi_DiscriminateGlobalSym( ELHandle* ElfHandle, u32 symsh_index)
} }
EL_AddAdrEntry( ExportAdrEntry); //登録 EL_AddAdrEntry( ExportAdrEntry); //登録
} }
}
} }
} }
/*----------------------------------------------------------------*/ /*----------------------------------------------------------------*/
@ -582,13 +589,13 @@ u32 ELi_DoRelocate( ELUnresolvedEntry* UnresolvedInfo)
signed_val = (( (s32)(_S_) + _A_) | (s32)(_T_)) - (s32)(_P_); signed_val = (( (s32)(_S_) + _A_) | (s32)(_T_)) - (s32)(_P_);
signed_val >>= 1; signed_val >>= 1;
if( _T_) { /*BL命令でThumbからThumbに飛ぶ*/ if( _T_) { /*BL命令でThumbからThumbに飛ぶ*/
relocation_val = (*(vu16*)relocation_adr & 0xF800) | ((signed_val>>11) & 0x07FF) + relocation_val = ((*(vu16*)relocation_adr & 0xF800) | ((signed_val>>11) & 0x07FF)) +
((((*((vu16*)(relocation_adr)+1)) & 0xF800) | (signed_val & 0x07FF)) << 16); ((((*((vu16*)(relocation_adr)+1)) & 0xF800) | (signed_val & 0x07FF)) << 16);
}else{ /*BLX命令でThumbからARMに飛ぶ(v5未満だとBL→ベニアでBXという仕組みが必要)*/ }else{ /*BLX命令でThumbからARMに飛ぶ(v5未満だとBL→ベニアでBXという仕組みが必要)*/
if( (signed_val & 0x1)) { //_P_が4バイトアラインされていないとここに来る if( (signed_val & 0x1)) { //_P_が4バイトアラインされていないとここに来る
signed_val += 1; signed_val += 1;
} }
relocation_val = (*(vu16*)relocation_adr & 0xF800) | ((signed_val>>11) & 0x07FF) + relocation_val = ((*(vu16*)relocation_adr & 0xF800) | ((signed_val>>11) & 0x07FF)) +
((((*((vu16*)(relocation_adr)+1)) & 0xE800) | (signed_val & 0x07FF)) << 16); ((((*((vu16*)(relocation_adr)+1)) & 0xE800) | (signed_val & 0x07FF)) << 16);
} }
*(vu16*)relocation_adr = (vu16)relocation_val; *(vu16*)relocation_adr = (vu16)relocation_val;

View File

@ -1,8 +1,8 @@
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Project: CTR - ELF Loader Project: TWL - ELF Loader
File: loader_subset.h File: loader_subset.h
Copyright 2006 Nintendo. All rights reserved. Copyright 2006,2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo proprietary information of Nintendo of America Inc. and/or Nintendo