aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libtcc.c7
-rw-r--r--tcc.h25
-rw-r--r--tcccoff.c3
-rw-r--r--tccelf.c2
-rw-r--r--tccgen.c6
-rw-r--r--tccrun.c4
-rw-r--r--x86_64-gen.c2
7 files changed, 36 insertions, 13 deletions
diff --git a/libtcc.c b/libtcc.c
index 9be8c1c..cc1c6af 100644
--- a/libtcc.c
+++ b/libtcc.c
@@ -111,6 +111,13 @@ static void tcc_set_lib_path_w32(TCCState *s)
tcc_set_lib_path(s, path);
}
+#ifndef CONFIG_TCC_STATIC
+void dlclose(void *p)
+{
+ FreeLibrary((HMODULE)p);
+}
+#endif
+
#ifdef LIBTCC_AS_DLL
BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
{
diff --git a/tcc.h b/tcc.h
index 17d31af..700d0c5 100644
--- a/tcc.h
+++ b/tcc.h
@@ -49,7 +49,6 @@
#include <direct.h> /* getcwd */
#define inline __inline
#define inp next_inp
-#define dlclose FreeLibrary
#ifdef _WIN64
#define uplong unsigned long long
#endif
@@ -1015,6 +1014,13 @@ ST_FUNC void vpushi(int v);
ST_FUNC Sym *external_global_sym(int v, CType *type, int r);
ST_FUNC void vset(CType *type, int r, int v);
ST_FUNC void vswap(void);
+ST_FUNC void vpush_global_sym(CType *type, int v);
+ST_FUNC void vrott(int n);
+#ifdef TCC_TARGET_ARM
+ST_FUNC int get_reg_ex(int rc, int rc2);
+ST_FUNC void vnrott(int n);
+ST_FUNC void lexpand_nr(void);
+#endif
ST_FUNC void vpushv(SValue *v);
ST_FUNC void save_reg(int r);
ST_FUNC int get_reg(int rc);
@@ -1036,7 +1042,7 @@ ST_FUNC void gexpr(void);
ST_FUNC int expr_const(void);
ST_FUNC void gen_inline_functions(void);
ST_FUNC void decl(int l);
-#ifdef CONFIG_TCC_BCHECK
+#if defined CONFIG_TCC_BCHECK || defined TCC_TARGET_C67
ST_FUNC Sym *get_sym_ref(CType *type, Section *sec, unsigned long offset, unsigned long size);
#endif
@@ -1145,6 +1151,7 @@ ST_FUNC void gen_cvt_itof1(int t);
#ifdef TCC_TARGET_COFF
ST_FUNC int tcc_output_coff(TCCState *s1, FILE *f);
+ST_FUNC int tcc_load_coff(TCCState * s1, int fd);
#endif
/* ------------ tccasm.c ------------ */
@@ -1178,10 +1185,19 @@ ST_FUNC void pe_add_unwind_data(unsigned start, unsigned end, unsigned stack);
#endif
/* ------------ tccrun.c ----------------- */
-#if !defined CONFIG_TCC_STATIC && !defined _WIN32
+#ifdef CONFIG_TCC_STATIC
+#define RTLD_LAZY 0x001
+#define RTLD_NOW 0x002
+#define RTLD_GLOBAL 0x100
+#define RTLD_DEFAULT NULL
+/* dummy function for profiling */
+ST_FUNC void *dlopen(const char *filename, int flag);
+ST_FUNC void dlclose(void *p);
+//ST_FUNC const char *dlerror(void);
+ST_FUNC void *resolve_sym(TCCState *s1, const char *symbol);
+#elif !defined TCC_TARGET_PE || !defined _WIN32
ST_FUNC void *resolve_sym(TCCState *s1, const char *symbol);
#endif
-
/********************************************************/
/* include the target specific definitions */
@@ -1196,6 +1212,7 @@ ST_FUNC void *resolve_sym(TCCState *s1, const char *symbol);
#include "arm-gen.c"
#endif
#ifdef TCC_TARGET_C67
+#include "coff.h"
#include "c67-gen.c"
#endif
#undef TARGET_DEFS_ONLY
diff --git a/tcccoff.c b/tcccoff.c
index 0ab9ace..1ace3b2 100644
--- a/tcccoff.c
+++ b/tcccoff.c
@@ -20,7 +20,6 @@
*/
#include "tcc.h"
-#include "coff.h"
#define MAXNSCNS 255 /* MAXIMUM NUMBER OF SECTIONS */
#define MAX_STR_TABLE 1000000
@@ -869,7 +868,7 @@ Section *FindSection(TCCState * s1, const char *sname)
return 0;
}
-int tcc_load_coff(TCCState * s1, int fd)
+ST_FUNC int tcc_load_coff(TCCState * s1, int fd)
{
// tktk TokenSym *ts;
diff --git a/tccelf.c b/tccelf.c
index 25d80d7..41f820b 100644
--- a/tccelf.c
+++ b/tccelf.c
@@ -442,7 +442,7 @@ ST_FUNC void relocate_syms(TCCState *s1, int do_resolve)
if (sh_num == SHN_UNDEF) {
name = strtab_section->data + sym->st_name;
if (do_resolve) {
-#ifndef _WIN32
+#if !defined TCC_TARGET_PE || !defined _WIN32
void *addr;
name = symtab_section->link->data + sym->st_name;
addr = resolve_sym(s1, name);
diff --git a/tccgen.c b/tccgen.c
index 363e6f9..b608c1f 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -364,7 +364,7 @@ static Sym *external_sym(int v, CType *type, int r)
}
/* push a reference to global symbol v */
-static void vpush_global_sym(CType *type, int v)
+ST_FUNC void vpush_global_sym(CType *type, int v)
{
Sym *sym;
CValue cval;
@@ -897,7 +897,7 @@ static void vrotb(int n)
/* rotate n first stack elements to the top
I1 ... In -> In I1 ... I(n-1) [top is right]
*/
-static void vrott(int n)
+ST_FUNC void vrott(int n)
{
int i;
SValue tmp;
@@ -912,7 +912,7 @@ static void vrott(int n)
/* like vrott but in other direction
In ... I1 -> I(n-1) ... I1 In [top is right]
*/
-void vnrott(int n)
+ST_FUNC void vnrott(int n)
{
int i;
SValue tmp;
diff --git a/tccrun.c b/tccrun.c
index 52855a7..25f2477 100644
--- a/tccrun.c
+++ b/tccrun.c
@@ -562,12 +562,12 @@ void *dlopen(const char *filename, int flag)
void dlclose(void *p)
{
}
-
+/*
const char *dlerror(void)
{
return "error";
}
-
+*/
typedef struct TCCSyms {
char *str;
void *ptr;
diff --git a/x86_64-gen.c b/x86_64-gen.c
index 2c7d58d..a80020f 100644
--- a/x86_64-gen.c
+++ b/x86_64-gen.c
@@ -23,7 +23,7 @@
#ifdef TARGET_DEFS_ONLY
/* number of available registers */
-#define NB_REGS 10
+#define NB_REGS 5
#define NB_ASM_REGS 8
/* a register can belong to several classes. The classes must be