diff options
| author | grischka <grischka> | 2012-03-05 20:15:56 +0100 |
|---|---|---|
| committer | grischka <grischka> | 2012-03-05 20:15:56 +0100 |
| commit | a35b3059bb0aaaa5965022ad317aaba27e22f148 (patch) | |
| tree | 17df79be55c72aafe2d1856a20fc1c367c9e20e4 | |
| parent | a0db7162af0f694c25b278984ac66a46fa099000 (diff) | |
| download | tinycc-a35b3059bb0aaaa5965022ad317aaba27e22f148.tar.gz tinycc-a35b3059bb0aaaa5965022ad317aaba27e22f148.tar.bz2 | |
tcc.h: define TCC_IS_NATIVE
- disable tccrun feature for non-native (cross-) compilers
- define uplong for target adress size
- fix using -Wl,-Ttext=... for Win64 (tccpe: ADDR3264 imagebase)
| -rw-r--r-- | tcc.c | 4 | ||||
| -rw-r--r-- | tcc.h | 34 | ||||
| -rw-r--r-- | tccpe.c | 11 | ||||
| -rw-r--r-- | tccrun.c | 5 |
4 files changed, 34 insertions, 20 deletions
@@ -578,7 +578,11 @@ int main(int argc, char **argv) tcc_print_stats(s, getclock_us() - start_time); if (s->output_type == TCC_OUTPUT_MEMORY) { +#ifdef TCC_IS_NATIVE ret = tcc_run(s, argc - optind, argv + optind); +#else + tcc_error_noabort("-run is not available in a cross compiler"); +#endif } else if (s->output_type == TCC_OUTPUT_PREPROCESS) { if (s->outfile) fclose(s->outfile); @@ -49,9 +49,6 @@ #include <direct.h> /* getcwd */ #define inline __inline #define inp next_inp -#ifdef _WIN64 -# define uplong unsigned long long -#endif #ifdef LIBTCC_AS_DLL # define LIBTCCAPI __declspec(dllexport) #endif @@ -67,17 +64,10 @@ #endif /* !CONFIG_TCCBOOT */ -#ifndef uplong -#define uplong unsigned long -#endif - #ifndef PAGESIZE #define PAGESIZE 4096 #endif -#include "elf.h" -#include "stab.h" - #ifndef O_BINARY #define O_BINARY 0 #endif @@ -86,6 +76,8 @@ #define SA_SIGINFO 0x00000004u #endif +#include "elf.h" +#include "stab.h" #include "libtcc.h" /* parser debug */ @@ -131,8 +123,26 @@ #define TCC_TARGET_COFF #endif -#if !defined(CONFIG_TCCBOOT) -#define CONFIG_TCC_BACKTRACE +/* only native compiler supports -run */ +#if defined _WIN32 == defined TCC_TARGET_PE +# if (defined __i386__ || defined _X86_) && defined TCC_TARGET_I386 +# define TCC_IS_NATIVE +# elif (defined __x86_64__ || defined _AMD64_) && defined TCC_TARGET_X86_64 +# define TCC_IS_NATIVE +# elif defined __arm__ && defined TCC_TARGET_ARM +# define TCC_IS_NATIVE +# endif +#endif + +#if defined TCC_IS_NATIVE && !defined CONFIG_TCCBOOT +# define CONFIG_TCC_BACKTRACE +#endif + +/* target address type */ +#if defined TCC_TARGET_X86_64 && (!defined __x86_64__ || defined _WIN32) +# define uplong unsigned long long +#else +# define uplong unsigned long #endif /* ------------ path configuration ------------ */ @@ -38,10 +38,6 @@ # define ADDR3264 DWORD #endif -#if defined _WIN32 && (defined _WIN64) == (defined TCC_TARGET_X86_64) -#define TCC_IS_NATIVE -#endif - #ifdef _WIN32 void dbg_printf (const char *fmt, ...) { @@ -339,7 +335,7 @@ struct pe_info { const char *filename; int type; DWORD sizeofheaders; - DWORD imagebase; + ADDR3264 imagebase; DWORD start_addr; DWORD imp_offs; DWORD imp_size; @@ -1870,11 +1866,10 @@ ST_FUNC int pe_output_file(TCCState * s1, const char *filename) ret = pe_write(&pe); tcc_free(pe.sec_info); } else { -#ifndef TCC_IS_NATIVE - tcc_error_noabort("-run supported only on native platform"); -#endif +#ifdef TCC_IS_NATIVE pe.thunk = data_section; pe_build_imports(&pe); +#endif } #ifdef PE_PRINT_SECTIONS @@ -20,6 +20,9 @@ #include "tcc.h" +/* only native compiler supports -run */ +#ifdef TCC_IS_NATIVE + #ifdef CONFIG_TCC_BACKTRACE ST_DATA int rt_num_callers = 6; ST_DATA const char **rt_bound_error_msg; @@ -217,6 +220,8 @@ static void set_pages_executable(void *ptr, unsigned long length) } /* ------------------------------------------------------------- */ +#endif /* TCC_IS_NATIVE */ + #ifdef CONFIG_TCC_BACKTRACE PUB_FUNC void tcc_set_num_callers(int n) |
