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"
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;
}
#endif
/*---------------------------------------------------------
@ -48,6 +50,7 @@ static u8 *load_elf32_half(Elf32_Half *dest, u8 *org, int lsb)
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;
}
#endif
/*---------------------------------------------------------
ELFヘッダを読み出す
@ -249,6 +253,7 @@ void *ELF_LoadELFHeader(const void *buf, Elf32_Ehdr *ehdr)
}
#if 0
/*---------------------------------------------------------
Relocation Entry Load
--------------------------------------------------------*/
@ -336,6 +341,6 @@ static void *ELF_LoadSectionHeader(const void *buf,Elf32_Shdr *shdr)
return file_ptr;
}
#endif

View File

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

View File

@ -1,8 +1,8 @@
/*---------------------------------------------------------------------------*
Project: CTR - ELF Loader
Project: TWL - ELF Loader
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
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として書き出す
-----------------------------------------------------*/
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
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);
memcpy( ExportAdrEntry->name, sym_str, copy_size);
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));
if( (CurrentSymEx->Sym.st_shndx) < SHN_LORESERVE) { //関連セクションがある場合
if( (CurrentSymEx->Sym.st_shndx == SHN_ABS)) {
//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->thumb_flag = CurrentSymEx->thumb_flag;
@ -501,6 +507,7 @@ void ELi_DiscriminateGlobalSym( ELHandle* ElfHandle, u32 symsh_index)
}
EL_AddAdrEntry( ExportAdrEntry); //登録
}
}
}
}
/*----------------------------------------------------------------*/
@ -582,13 +589,13 @@ u32 ELi_DoRelocate( ELUnresolvedEntry* UnresolvedInfo)
signed_val = (( (s32)(_S_) + _A_) | (s32)(_T_)) - (s32)(_P_);
signed_val >>= 1;
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);
}else{ /*BLX命令でThumbからARMに飛ぶ(v5未満だとBL→ベニアでBXという仕組みが必要)*/
if( (signed_val & 0x1)) { //_P_が4バイトアラインされていないとここに来る
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 = (vu16)relocation_val;

View File

@ -1,8 +1,8 @@
/*---------------------------------------------------------------------------*
Project: CTR - ELF Loader
Project: TWL - ELF Loader
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
proprietary information of Nintendo of America Inc. and/or Nintendo