Hi   I recently downloaded version tcc-0.9.27.tar.bz2 and built it with Visual 
Studio compiler.   I tried to write code with compiles and run from memory just 
like in libtcc_test.c example from tcc-0.9.27-win32-bin.zip (I could not find 
this example in tcc-0.9.27.tar.bz2 package)   There are few things wrong with 
version I don't know if previous versions work I did not try them.   1. DLL 
built from tcc-0.9.27.tar.bz2 does not export tcc_relocate function but dll in 
tcc-0.9.27-win32-bin.zip has it. Why ?  2. tcc_get_symbol does not work 
properly in DLL from tcc-0.9.27.tar.bz2 or tcc-0.9.27-win32-bin.zip. Instead of 
returning address of function in memory it returns byte offset from .text 
section to that function. In case of failure this function returns 0 but in 
case of symbol being at the begin of bytecode it will also return 0.  3. 
I'm not sure if compilation in memory ever worked in Windows newer than XP. 
Even in case where tcc_get_symbol would return proper address it's not 
gonna work because of DEP protection. Can somebody confirm that it works on 
Windows ?      My test program:   #include <libtcc/libtcc.h>   typedef 
int(*func)();   void compileTest()  {  HMODULE libtccHandle = 
GetModuleHandleA("libtcc");  void* p_tcc_relocate = 
GetProcAddress(libtccHandle, "tcc_relocate");   TCCState *s;   func z;  
 s = tcc_new();   tcc_set_output_type(s, TCC_OUTPUT_MEMORY);   const char* 
program =  "int test(int a){\n"  "return 5;\n"  "}\n"  
"int test1(int a){\n"  "return 2;"  "}\n"  "int 
main() {\n"  "return test(5)\n;"  "}\n";   int status = 
tcc_compile_string(s, program);   //tcc_relocate(s, TCC_RELOCATE_AUTO);   z = 
(func)tcc_get_symbol(s, "main");  void* pT = tcc_get_symbol(s, 
"test");  void* pT1 = tcc_get_symbol(s, "test1");   /* run the 
code */  int r = z();   tcc_delete(s);  }
_______________________________________________
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel

Reply via email to