Subversion Repositories Kolibri OS

Compare Revisions

Ignore whitespace Rev 6409 → Rev 6410

/programs/develop/ktcc/trunk/libc/build.bat
6,10 → 6,10
rem #### CONFIG SECTION ####
set LIBNAME=libck.a
set INCLUDE=include
set CC=
set CC=kos32-tcc
set CFLAGS=-c -nostdinc -DGNUC -I"%cd%\%INCLUDE%"
set AR=
set ASM=
set AR=kos32-ar
set ASM=fasm
set dirs=stdio memory kolibrisys string stdlib
rem #### END OF CONFIG SECTION ####
 
/programs/develop/ktcc/trunk/libc/string/memmove.asm
6,7 → 6,7
public memcpy
public memmove
 
proc memcpy stdcall, to:dword,from:dword,count:dword
proc memcpy c, to:dword,from:dword,count:dword
 
mov ecx,[count]
test ecx,ecx
20,7 → 20,7
ret
endp
 
proc memmove stdcall, to:dword,from:dword,count:dword
proc memmove c, to:dword,from:dword,count:dword
 
mov ecx,[count]
test ecx,ecx
/programs/develop/ktcc/trunk/libc/string/strcat.c
2,7 → 2,7
{
char* res;
res=strDest;
while (*strDest++) ;
while (*strDest) strDest++;
while (*strDest++ = *strSource++) ;
return res;
}
/programs/develop/ktcc/trunk/libc/string/strcpy.c
2,6 → 2,6
{
char* res;
res=strDest;
while(*strDest++ == strSource++) ;
while(*strDest++ = *strSource++) ;
return res;
}
/programs/develop/ktcc/trunk/source/Makefile
1,4 → 1,4
OUTFILE = ktcc.kex
OBJS = tcc.o console.o
OBJS = tcc.o console.o getcwd.o
CGLAGS =-O2 -g -Wall -mpreferred-stack-boundary=2 -march=i386 -falign-functions=0 -fno-strict-aliasing
include $(MENUETDEV)/makefiles/Makefile_for_program
include Makefile_for_program
/programs/develop/ktcc/trunk/source/config.h
5,3 → 5,7
#define TCC_VERSION "0.9.23"
//#define TCC_TARGET_PE
#define TCC_TARGET_MEOS
 
/* enable bound checking code */
//#define CONFIG_TCC_BCHECK 1
 
/programs/develop/ktcc/trunk/source/console.asm
8,68 → 8,68
align 4
console_init:
 
pushad
pushad
 
mov eax,[console_init_status]
test eax,eax
jnz console_initializated
mov eax,[console_init_status]
test eax,eax
jnz console_initializated
 
mov [console_init_status],1
mov [console_init_status],1
 
mov eax,68
mov ebx,19
mov ecx,console_path
int 0x40
mov eax,68
mov ebx,19
mov ecx,console_path
int 0x40
 
test eax,eax
jz console_not_loaded
test eax,eax
jz console_not_loaded
 
mov ebx,[eax+4]
mov [con_start],ebx
mov ebx,[eax+4]
mov [con_start],ebx
 
mov ebx,[eax+4+16]
mov [con_init],ebx
mov ebx,[eax+4+16]
mov [con_init],ebx
 
mov ebx,[eax+4+32]
mov [con_printf],ebx
mov ebx,[eax+4+32]
mov [con_printf],ebx
 
push 1
call [con_start]
push 1
call [con_start]
 
push caption
push -1
push -1
push -1
push -1
call [con_init]
push caption
push -1
push -1
push -1
push -1
call [con_init]
 
console_not_loaded:
console_not_loaded:
 
console_initializated:
console_initializated:
 
popad
popad
 
ret
ret
 
align 4
console_printf:
 
pop [return_addres]
pop [return_addres]
 
call [con_printf]
;add esp,8
call [con_printf]
;add esp,8
 
push [return_addres]
push [return_addres]
 
ret
ret
 
align 4
console_exit:
 
push 0
call [con_exit]
push 0
call [con_exit]
 
ret
ret
 
 
;-----------------------------
77,9 → 77,9
caption db 'Console',0
 
align 4
con_start rd 1
con_init rd 1
con_printf rd 1
con_exit rd 1
console_init_status rd 1
return_addres rd 1
con_start rd 1
con_init rd 1
con_printf rd 1
con_exit rd 1
console_init_status rd 1
return_addres rd 1
/programs/develop/ktcc/trunk/source/libtcc1.c
399,7 → 399,7
if (vv.s.high < 0)
vv.ll = __negdi2 (vv.ll);
__udivmoddi4 (uu.ll, vv.ll, &w);
__udivmoddi4 (uu.ll, vv.ll, (UDWtype *) &w);
if (c)
w = __negdi2 (w);
return w;
466,7 → 466,7
u.s.high = (unsigned)u.s.low << (b - 32);
u.s.low = 0;
} else if (b != 0) {
u.s.high = ((unsigned)u.s.high << b) | (u.s.low >> (32 - b));
u.s.high = ((unsigned)u.s.high << b) | ((unsigned)u.s.low >> (32 - b));
u.s.low = (unsigned)u.s.low << b;
}
return u.ll;
/programs/develop/ktcc/trunk/source/start.asm
8,14 → 8,14
 
;start_:
virtual at 0
db 'MENUET01' ; 1. Magic number (8 bytes)
dd 0x01 ; 2. Version of executable file
dd start ; 3. Start address
dd 0x0 ; 4. Size of image
dd 0x100000 ; 5. Size of needed memory
dd 0x100000 ; 6. Pointer to stack
hparams dd 0x0 ; 7. Pointer to program arguments
hpath dd 0x0 ; 8. Pointer to program path
db 'MENUET01' ; 1. Magic number (8 bytes)
dd 0x01 ; 2. Version of executable file
dd start ; 3. Start address
dd 0x0 ; 4. Size of image
dd 0x100000 ; 5. Size of needed memory
dd 0x100000 ; 6. Pointer to stack
hparams dd 0x0 ; 7. Pointer to program arguments
hpath dd 0x0 ; 8. Pointer to program path
end virtual
 
start:
28,12 → 28,12
;DEBUGF ' path "%s"\n params "%s"\n', .path, .params
; check for overflow
mov al, [path+buf_len-1]
or al, [params+buf_len-1]
or al, [params+buf_len-1]
jnz .crash
; check if path written by OS
mov eax, [hparams]
test eax, eax
jz .without_path
jz .without_path
mov eax, path
.without_path:
mov esi, eax
41,21 → 41,21
; retrieving parameters
mov esi, params
xor edx, edx ; dl - èä¸ò ïàðàìåòð(1) èëè ðàçäåëèòåëè(0)
; dh - ñèìâîë ñ êîòîðîãî íà÷àëñÿ ïàðàìåòð (1 êàâû÷êè, 0 îñòàëüíîå)
; dh - ñèìâîë ñ êîòîðîãî íà÷àëñÿ ïàðàìåòð (1 êàâû÷êè, 0 îñòàëüíîå)
mov ecx, 1 ; cl = 1
; ch = 0 ïðîñòî íîëü
; ch = 0 ïðîñòî íîëü
.parse:
lodsb
test al, al
jz .run
jz .run
test dl, dl
jnz .findendparam
;{åñëè áûë ðàçäåëèòåëü
;{åñëè áûë ðàçäåëèòåëü
cmp al, ' '
jz .parse ;çàãðóæåí ïðîáåë, ãðóçèì ñëåäóþùèé ñèìâîë
jz .parse ;çàãðóæåí ïðîáåë, ãðóçèì ñëåäóþùèé ñèìâîë
mov dl, cl ;íà÷èíàåòñÿ ïàðàìåòð
cmp al, '"'
jz @f ;çàãðóæåíû êàâû÷êè
jz @f ;çàãðóæåíû êàâû÷êè
mov dh, ch ;ïàðàìåòð áåç êàâû÷åê
dec esi
call push_param
69,9 → 69,9
 
.findendparam:
test dh, dh
jz @f ; áåç êàâû÷åê
jz @f ; áåç êàâû÷åê
cmp al, '"'
jz .clear
jz .clear
jmp .parse
@@:
cmp al, ' '
100,7 → 100,7
xor eax,eax
dec eax
int 0x40
dd -1
dd -1
.crash:
;DEBUGF 'E:buffer overflowed\n'
jmp .exit
127,10 → 127,10
section '.bss'
buf_len = 0x400
max_parameters=0x20
argc rd 1
argv rd max_parameters
path rb buf_len
params rb buf_len
argc rd 1
argv rd max_parameters
path rb buf_len
params rb buf_len
 
;section '.data'
;include_debug_strings ; ALWAYS present in data section
/programs/develop/ktcc/trunk/source/tcc.c
1034,7 → 1034,8
#ifdef MEM_DEBUG
mem_cur_size -= malloc_usable_size(ptr);
#endif
free(ptr);
//2016-04-27 siemargl commented to fix crash temporally. Need to fix
// free(ptr);
}
 
static void *tcc_malloc(unsigned long size)
10591,7 → 10592,7
return optind;
}
 
int app_main(int argc, char **argv)
int main(int argc, char **argv)
{
int i;
TCCState *s;