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
This commit is contained in:
grischka
2017-04-04 08:34:52 +02:00
parent c4c3f5009e
commit 536ed76d5a
7 changed files with 166 additions and 170 deletions

1
tcc.h
View File

@ -458,6 +458,7 @@ typedef struct Sym {
/* special flag, too */
#define SECTION_ABS ((void *)1)
#define SECTION_COMMON ((void *)2)
typedef struct Section {
unsigned long data_offset; /* current data offset */