From 536ed76d5a69d8e3c0e247d6557f5942818cb253 Mon Sep 17 00:00:00 2001 From: grischka Date: Tue, 4 Apr 2017 08:34:52 +0200 Subject: tccgen/win32: let __declspec(dllimport) imply extern Also, retain storage qualifiers in type_decl, in particular also for function pointers. This allows to get rid of this very early hack in decl() type.t |= (btype.t & VT_STATIC); /* Retain "static". */ which was to fix the case of int main() { static int (*foo)(); ... Also: - missing __declspec(dllimport) is an error now - except if the symbol is "_imp__symbol" - demonstrate export/import of data in the dll example (while 'extern' isn't strictly required with dllimport anymore) - new function 'patch_storage()' replaces 'weaken_symbol()' and 'apply_visibility()' - new function 'update_storage()' applies storage attributes to Elf symbols. - put_extern_sym/2 accepts new pseudo section SECTION_COMMON - add -Wl,-export-all-symbols as alias for -rdynamic - add -Wl,-subsystem=windows for mingw compatibility - redefinition of 'sym' error for initialized global data --- tcc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'tcc.c') diff --git a/tcc.c b/tcc.c index 2cca7a8..9ae84fc 100644 --- a/tcc.c +++ b/tcc.c @@ -117,13 +117,14 @@ static const char help2[] = "-Wl,... linker options:\n" " -nostdlib do not link with standard crt/libs\n" " -[no-]whole-archive load lib(s) fully/only as needed\n" + " -export-all-symbols same as -rdynamic\n" " -image-base= -Ttext= set base address of executable\n" " -section-alignment= set section alignment in executable\n" #ifdef TCC_TARGET_PE " -file-alignment= set PE file alignment\n" " -stack= set PE stack reserve\n" " -large-address-aware set related PE option\n" - " -subsystem=[console gui] set PE subsystem\n" + " -subsystem=[console/windows] set PE subsystem\n" " -oformat=[pe-* binary] set executable output format\n" "Predefined macros:\n" " tcc -E -dM - < nul\n" -- cgit v1.3.1