TempleOSTS_131005.ISO

This commit is contained in:
Terry A. Davis authored and minexew committed 2018-09-08 21:45:52 +02:00
1 parent 1343005a29
commit 2d2a65d572
547 files changed
+33608 -12549

No files matched your search

+91 -72
View File
@@ -77,7 +77,7 @@ USE64
// OUT: RAX
SYS_HASH_STR::
XOR RAX,RAX
OR RSI,RSI
TEST RSI,RSI
JZ @@15
PUSH RSI
@@ -88,7 +88,7 @@ SYS_HASH_STR::
@@05: SHL1 RBX
ADC RBX,RAX
@@10: LODSB
OR AL,AL
TEST AL,AL
JNZ @@05
MOV RAX,RBX
@@ -111,7 +111,7 @@ SYS_HASH_STR::
SYS_HASH_SINGLE_TABLE_FIND1::
MOV RCX,1
SYS_HASH_SINGLE_TABLE_FIND::
OR RCX,RCX
TEST RCX,RCX
JNZ @@05
XOR RAX,RAX
RET
@@ -119,7 +119,7 @@ SYS_HASH_SINGLE_TABLE_FIND::
MOV RDX,U64 CHashTable.body[RDI]
LEA RDX,U64 [RDX+RAX*8]
@@10: MOV RAX,U64 [RDX]
OR RAX,RAX
TEST RAX,RAX
JNZ @@15
RET
@@ -133,14 +133,14 @@ SYS_HASH_SINGLE_TABLE_FIND::
CMP U8 [RDI],AL
JNE @@25
INC RDI
OR AL,AL
TEST AL,AL
JNZ @@20
POP RSI
POP RDI
POP RAX
LOOP @@30
INC U32 CHash.use_cnt[RAX]
OR RAX,RAX
TEST RAX,RAX
RET
@@25: POP RSI
@@ -167,7 +167,7 @@ SYS_HASH_FIND::
JNZ @@15
POP RAX
@@10: MOV RDI,U64 CHashTable.next[RDI]
OR RDI,RDI
TEST RDI,RDI
JNZ @@05
POP RDI
XOR RAX,RAX
@@ -175,7 +175,7 @@ SYS_HASH_FIND::
@@15: ADD RSP,8
POP RDI
OR RAX,RAX
TEST RAX,RAX
RET
// ************************************
// IN: RSI=STR
@@ -211,7 +211,7 @@ SYS_EXT_FIND::
@@10: MOV RAX,U64 CHashExport.val[RAX]
@@15: POP RBX
POP RDI
OR RAX,RAX
TEST RAX,RAX
RET
_EXT_FIND::
ENTER 0
@@ -341,12 +341,12 @@ _HASH_REPLACE::
PUSH RSI
PUSH RDI
MOV RCX,U64 SF_ARG1[RBP]
OR RCX,RCX
TEST RCX,RCX
JZ @@15
MOV RSI,U64 CHash.str[RCX]
XOR RBX,RBX
MOV EBX,U32 CHash.type[RCX]
AND EBX,~HTF_FLAGS_MASK&0xFFFFFFFF
AND EBX,~HTG_FLAGS_MASK&0xFFFFFFFF
MOV RDI,U64 SF_ARG2[RBP]
MOV RCX,U64 SF_ARG3[RBP]
CALL SYS_HASH_STR
@@ -381,7 +381,7 @@ _HASH_REPLACE::
MOV U64 [RDX],RCX
POPFD
OR RAX,RAX
TEST RAX,RAX
JZ @@15
PUSH_C_REGS
PUSH RAX
@@ -398,12 +398,12 @@ _HASH_REM_DEL::
PUSH RSI
PUSH RDI
MOV RCX,U64 SF_ARG1[RBP]
OR RCX,RCX
TEST RCX,RCX
JZ @@10
MOV RSI,U64 CHash.str[RCX]
XOR RBX,RBX
MOV EBX,U32 CHash.type[RCX]
AND EBX,~HTF_FLAGS_MASK&0xFFFFFFFF
AND EBX,~HTG_FLAGS_MASK&0xFFFFFFFF
MOV RDI,U64 SF_ARG2[RBP]
MOV RCX,U64 SF_ARG3[RBP]
CALL SYS_HASH_STR
@@ -461,7 +461,7 @@ _extern _HASH_REM_DEL Bool HashRemDel(CHash *temph,CHashTable *table,
I64 HashTypeNum(CHash *temph)
{
if (temph)
return Bsf(temph->type&HTT_TYPE_MASK);
return Bsf(temph->type&HTG_TYPE_MASK);
else
return -1;
}
@@ -533,37 +533,37 @@ CHashGeneric *HashGenericAdd(U8 *name,I64 type,I64 u0=0,I64 u1=0,I64 u2=0,CTask
return result;
}
I64 NamedFramePtr(U8 *name,CTask *task=NULL)
I64 FramePtr(U8 *name,CTask *task=NULL)
{
CHashGeneric *temph;
if (!task) task=Fs;
if (temph=HashFind(name,task->hash_table,HTT_NAMED_FRAME_PTR))
if (temph=HashFind(name,task->hash_table,HTT_FRAME_PTR))
return temph->user_data0;
else
return 0;
}
CHashGeneric *NamedFramePtrAdd(U8 *name,I64 val,CTask *task=NULL)
CHashGeneric *FramePtrAdd(U8 *name,I64 val,CTask *task=NULL)
{
return HashGenericAdd(name,HTT_NAMED_FRAME_PTR,val,0,0,task);
return HashGenericAdd(name,HTT_FRAME_PTR,val,0,0,task);
}
I64 NamedFramePtrSet(U8 *name,I64 val,CTask *task=NULL)
I64 FramePtrSet(U8 *name,I64 val,CTask *task=NULL)
{
CHashGeneric *temph;
if (!task) task=Fs;
if (temph=HashFind(name,task->hash_table,HTT_NAMED_FRAME_PTR))
if (temph=HashFind(name,task->hash_table,HTT_FRAME_PTR))
return LXchgU64(&temph->user_data0,val);
else
return 0;
}
I64 NamedFramePtrDel(U8 *name,CTask *task=NULL)
I64 FramePtrDel(U8 *name,CTask *task=NULL)
{
CHashGeneric *temph;
I64 result=0;
if (!task) task=Fs;
if (temph=HashFind(name,task->hash_table,HTT_NAMED_FRAME_PTR)) {
if (temph=HashFind(name,task->hash_table,HTT_FRAME_PTR)) {
result=temph->user_data0;
HashRemDel(temph,task->hash_table);
}
@@ -574,11 +574,9 @@ U0 LoadOneImport(U8 **_src,U8 *module_base,I64 ld_flags)
{
U8 *src=*_src,*ptr2,*st_ptr;
I64 i,etype;
CHashExport *tempess=NULL;
CHashExport *tempex=NULL;
CHashImport *tempiss;
Bool first=TRUE;
CHashFun *tempf;
CHashGlblVar *tempg;
while (etype=*src++) {
i=*src(U32 *)++;
@@ -590,11 +588,10 @@ U0 LoadOneImport(U8 **_src,U8 *module_base,I64 ld_flags)
return;
} else {
first=FALSE;
if (!(tempess=HashFind(st_ptr,Fs->hash_table,HTG_ALL-HTT_IMPORT_SYS_SYM))) {
if (!(tempex=HashFind(st_ptr,Fs->hash_table,HTG_ALL-HTT_IMPORT_SYS_SYM))) {
if (!(ld_flags & LDF_SILENT)) {
PutDefine("ST_UNRESOLVED_REFERENCE");
"" st_ptr;
NewLine;
"%s\n",st_ptr;
}
tempiss=CAlloc(sizeof(CHashImport));
tempiss->str=StrNew(st_ptr);
@@ -605,34 +602,24 @@ U0 LoadOneImport(U8 **_src,U8 *module_base,I64 ld_flags)
}
}
}
if (tempess) {
if (tempex) {
ptr2=module_base+i;
if (tempess->type & HTT_FUN) {
tempf=tempess;
if (etype & 1)
i=tempf->executable_addr;
else
i=tempf->executable_addr-module_base;
} else if (tempess->type & HTT_GLBL_VAR) {
tempg=tempess;
if (etype & 1)
i=tempg->data_addr;
else
i=tempg->data_addr-module_base;
} else {
if (etype & 1)
i=tempess->val;
else
i=tempess->val(U8 *)-module_base;
if (tempex->type & HTT_FUN)
i=tempex(CHashFun *)->executable_addr;
else if (tempex->type & HTT_GLBL_VAR)
i=tempex(CHashGlblVar *)->data_addr;
else
i=tempex->val;
switch (etype) {
case EIE_REL_U8: *ptr2(U8 *) =i-ptr2-1; break;
case EIE_IMM_U8: *ptr2(U8 *) =i; break;
case EIE_REL_U16: *ptr2(U16 *)=i-ptr2-2; break;
case EIE_IMM_U16: *ptr2(U16 *)=i; break;
case EIE_REL_U32: *ptr2(U32 *)=i-ptr2-4; break;
case EIE_IMM_U32: *ptr2(U32 *)=i; break;
case EIE_REL_U64: *ptr2(I64 *)=i-ptr2-8; break;
case EIE_IMM_U64: *ptr2(I64 *)=i; break;
}
if (etype<=EIE_LIT_U8)
*ptr2(U8 *)+=i;
else if (etype<=EIE_LIT_U16)
*ptr2(U16 *)+=i;
else if (etype<=EIE_LIT_U32)
*ptr2(U32 *)+=i;
else if (etype<=EIE_LIT_U64)
*ptr2(I64 *)+=i;
}
}
*_src=src-1;
@@ -653,25 +640,25 @@ U0 LoadPass1(U8 *src,U8 *module_base,I64 ld_flags)
{
U8 *ptr2,*ptr3,*st_ptr;
I64 i,j,cnt,etype;
CHashExport *tempess=NULL;
CHashExport *tempex=NULL;
while (etype=*src++) {
i=*src(U32 *)++;
st_ptr=src;
src+=StrLen(st_ptr)+1;
switch (etype) {
case EIE_REL_EXPORT:
case EIE_LIT_EXPORT:
tempess=CAlloc(sizeof(CHashExport));
tempess->str=StrNew(st_ptr);
tempess->type=HTT_EXPORT_SYS_SYM|HTF_LIT;
if (etype==EIE_LIT_EXPORT)
tempess->val=i;
case EIE_IMM_EXPORT:
tempex=CAlloc(sizeof(CHashExport));
tempex->str=StrNew(st_ptr);
tempex->type=HTT_EXPORT_SYS_SYM|HTF_IMM;
if (etype==EIE_IMM_EXPORT)
tempex->val=i;
else
tempess->val=i+module_base;
HashAdd(tempess,Fs->hash_table);
tempex->val=i+module_base;
HashAdd(tempex,Fs->hash_table);
SysSymImportsResolve(st_ptr,ld_flags);
break;
case EIE_REL_U8...EIE_LIT_U64:
case EIE_REL_U8...EIE_IMM_U64:
src=st_ptr-5;
LoadOneImport(&src,module_base,ld_flags);
break;
@@ -690,11 +677,11 @@ U0 LoadPass1(U8 *src,U8 *module_base,I64 ld_flags)
ptr3=MAlloc(*src(I64 *)++);
if (*st_ptr) {
tempess=CAlloc(sizeof(CHashExport));
tempess->str=StrNew(st_ptr);
tempess->type=HTT_EXPORT_SYS_SYM|HTF_LIT;
tempess->val=ptr3;
HashAdd(tempess,Fs->hash_table);
tempex=CAlloc(sizeof(CHashExport));
tempex->str=StrNew(st_ptr);
tempex->type=HTT_EXPORT_SYS_SYM|HTF_IMM;
tempex->val=ptr3;
HashAdd(tempex,Fs->hash_table);
}
cnt=i;
@@ -805,5 +792,37 @@ U0 LoadKernel()
//No main routines
// LoadPass2(sys_boot_patch_table_base,sys_boot_base,0);
}
Í"  Cat"8äCbs"X Dog"täDog"À Bird!D\`!h€ô!´\Ì!(\,!0@ôXHX`X`T`T`THTHXHlHl`ªxª\ÀxÀ\€H€`HHH`\H\`pHp`4H4`xðxðxð\ð\\\x$\$x8\8xL\Lx`\`x\x0\0xD\Dx\xx88ìÿÿÿ8ìÿÿÿ8ìÿÿÿxìÿÿÿxxH`H,H,4,4,4`4`H`!hh!HTXT!üÿÿÿ8@d
!P\Ì!\Ì4è!Tèdè!dèd!d�è!pè`è!\è\ô!\ô¼!ä!<L!LL(!L(Œ(!Œ(t!T\ !\ÐT!4ì`Ð!`T!tŒ0!Œ0H,!H,H!H<!ä!¼`ø!`ø`ì!`ìpì!�ìd!d`ì!`ìTì
Í  Cat8äCbsX DogtäDogÀ BirdD\`h€ô´\Ì(\,0@ô
XHX`
X`T`
T`TH
THXH
lHl`
ªxª\
ÀxÀ\
€H€`
HHH`
\H\`
pHp`
4H4`
xðx
ðxð\
ð\\
\x
$\$x
8\8x
L\Lx
`\`x
\x
0\0x
D\Dx
\x
x8
8ìÿÿÿ8
ìÿÿÿ8ìÿÿÿx
ìÿÿÿxx
H`H,
H,4,
4,4`
4`H`hhHTXTüÿÿÿ8@d
P\Ì\Ì4èTèdèdèdd�èpè`è\è\ô\ô¼ä<LLL(L(Œ(Œ(tT\ \ÐT4ì`Ð`TtŒ0Œ0H,H,HH<ä¼`ø`ø`ì`ìpì�ìdd`ì`ìTì