Strip down TCC source code by removing useless targets
This commit is contained in:
parent
f6385c0530
commit
05611e2658
141 changed files with 241 additions and 66118 deletions
9
.gitignore
vendored
9
.gitignore
vendored
|
@ -68,3 +68,12 @@ tests/vla_test
|
|||
tests/hello
|
||||
tests/tests2/fred.txt
|
||||
libtcc.dylib
|
||||
Makefile
|
||||
*.in
|
||||
*.status
|
||||
aclocal.m4
|
||||
stamp-h1
|
||||
*_old
|
||||
*.cache
|
||||
.deps
|
||||
build-aux
|
522
Makefile
522
Makefile
|
@ -1,522 +0,0 @@
|
|||
# --------------------------------------------------------------------------
|
||||
#
|
||||
# Tiny C Compiler Makefile
|
||||
#
|
||||
|
||||
ifndef TOP
|
||||
TOP = .
|
||||
INCLUDED = no
|
||||
endif
|
||||
|
||||
ifeq ($(findstring $(MAKECMDGOALS),clean distclean),)
|
||||
include $(TOP)/config.mak
|
||||
endif
|
||||
|
||||
ifeq (-$(GCC_MAJOR)-$(findstring $(GCC_MINOR),56789)-,-4--)
|
||||
CFLAGS += -D_FORTIFY_SOURCE=0
|
||||
endif
|
||||
|
||||
LIBTCC = libtcc.a
|
||||
LIBTCC1 = libtcc1.a
|
||||
LINK_LIBTCC =
|
||||
LIBS =
|
||||
CFLAGS += $(CPPFLAGS)
|
||||
VPATH = $(TOPSRC)
|
||||
-LTCC = $(TOP)/$(LIBTCC)
|
||||
|
||||
ifdef CONFIG_WIN32
|
||||
CFG = -win
|
||||
ifneq ($(CONFIG_static),yes)
|
||||
LIBTCC = libtcc$(DLLSUF)
|
||||
LIBTCCDEF = libtcc.def
|
||||
endif
|
||||
ifneq ($(CONFIG_debug),yes)
|
||||
LDFLAGS += -s
|
||||
endif
|
||||
NATIVE_TARGET = $(ARCH)-win$(if $(findstring arm,$(ARCH)),ce,32)
|
||||
else
|
||||
CFG = -unx
|
||||
LIBS+=-lm
|
||||
ifneq ($(CONFIG_ldl),no)
|
||||
LIBS+=-ldl
|
||||
endif
|
||||
ifneq ($(CONFIG_pthread),no)
|
||||
LIBS+=-lpthread
|
||||
endif
|
||||
# make libtcc as static or dynamic library?
|
||||
ifeq ($(CONFIG_static),no)
|
||||
LIBTCC=libtcc$(DLLSUF)
|
||||
export LD_LIBRARY_PATH := $(CURDIR)/$(TOP)
|
||||
ifneq ($(CONFIG_rpath),no)
|
||||
ifndef CONFIG_OSX
|
||||
LINK_LIBTCC += -Wl,-rpath,"$(libdir)"
|
||||
else
|
||||
# macOS doesn't support env-vars libdir out of the box - which we need for
|
||||
# `make test' when libtcc.dylib is used (configure --disable-static), so
|
||||
# we bake a relative path into the binary. $libdir is used after install.
|
||||
LINK_LIBTCC += -Wl,-rpath,"@executable_path/$(TOP)" -Wl,-rpath,"$(libdir)"
|
||||
# -current/compatibility_version must not contain letters.
|
||||
MACOS_DYLIB_VERSION := $(firstword $(subst rc, ,$(VERSION)))
|
||||
DYLIBVER += -current_version $(MACOS_DYLIB_VERSION)
|
||||
DYLIBVER += -compatibility_version $(MACOS_DYLIB_VERSION)
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
NATIVE_TARGET = $(ARCH)
|
||||
ifdef CONFIG_OSX
|
||||
NATIVE_TARGET = $(ARCH)-osx
|
||||
ifneq ($(CC_NAME),tcc)
|
||||
LDFLAGS += -flat_namespace
|
||||
ifneq (1,$(shell expr $(GCC_MAJOR) ">=" 15))
|
||||
LDFLAGS += -undefined warning # depreciated in clang >= 15.0
|
||||
endif
|
||||
endif
|
||||
export MACOSX_DEPLOYMENT_TARGET := 10.6
|
||||
endif
|
||||
endif
|
||||
|
||||
# run local version of tcc with local libraries and includes
|
||||
TCCFLAGS-unx = -B$(TOP) -I$(TOPSRC)/include -I$(TOPSRC) -I$(TOP)
|
||||
TCCFLAGS-win = -B$(TOPSRC)/win32 -I$(TOPSRC)/include -I$(TOPSRC) -I$(TOP) -L$(TOP)
|
||||
TCCFLAGS = $(TCCFLAGS$(CFG))
|
||||
TCC_LOCAL = $(TOP)/tcc$(EXESUF)
|
||||
TCC = $(TCC_LOCAL) $(TCCFLAGS)
|
||||
|
||||
# run tests with the installed tcc instead
|
||||
ifdef TESTINSTALL
|
||||
TCC_LOCAL = $(bindir)/tcc
|
||||
TCCFLAGS-unx = -I$(TOP)
|
||||
TCCFLAGS-win = -B$(bindir) -I$(TOP)
|
||||
-LTCC = $(libdir)/$(LIBTCC) $(LINK_LIBTCC)
|
||||
endif
|
||||
|
||||
CFLAGS_P = $(CFLAGS) -pg -static -DCONFIG_TCC_STATIC -DTCC_PROFILE
|
||||
LIBS_P = $(LIBS)
|
||||
LDFLAGS_P = $(LDFLAGS)
|
||||
|
||||
DEF-i386 = -DTCC_TARGET_I386
|
||||
DEF-i386-win32 = -DTCC_TARGET_I386 -DTCC_TARGET_PE
|
||||
DEF-i386-OpenBSD = $(DEF-i386) -DTARGETOS_OpenBSD
|
||||
DEF-x86_64 = -DTCC_TARGET_X86_64
|
||||
DEF-x86_64-win32 = -DTCC_TARGET_X86_64 -DTCC_TARGET_PE
|
||||
DEF-x86_64-osx = -DTCC_TARGET_X86_64 -DTCC_TARGET_MACHO
|
||||
DEF-arm-fpa = -DTCC_TARGET_ARM
|
||||
DEF-arm-fpa-ld = -DTCC_TARGET_ARM -DLDOUBLE_SIZE=12
|
||||
DEF-arm-vfp = -DTCC_TARGET_ARM -DTCC_ARM_VFP
|
||||
DEF-arm-eabi = -DTCC_TARGET_ARM -DTCC_ARM_VFP -DTCC_ARM_EABI
|
||||
DEF-arm-eabihf = $(DEF-arm-eabi) -DTCC_ARM_HARDFLOAT
|
||||
DEF-arm = $(DEF-arm-eabihf)
|
||||
DEF-arm-NetBSD = $(DEF-arm-eabihf) -DTARGETOS_NetBSD
|
||||
DEF-arm-wince = $(DEF-arm-eabihf) -DTCC_TARGET_PE
|
||||
DEF-arm64 = -DTCC_TARGET_ARM64
|
||||
DEF-arm64-osx = $(DEF-arm64) -DTCC_TARGET_MACHO
|
||||
DEF-arm64-FreeBSD = $(DEF-arm64) -DTARGETOS_FreeBSD
|
||||
DEF-arm64-NetBSD = $(DEF-arm64) -DTARGETOS_NetBSD
|
||||
DEF-arm64-OpenBSD = $(DEF-arm64) -DTARGETOS_OpenBSD
|
||||
DEF-riscv64 = -DTCC_TARGET_RISCV64
|
||||
DEF-c67 = -DTCC_TARGET_C67 -w # disable warnigs
|
||||
DEF-x86_64-FreeBSD = $(DEF-x86_64) -DTARGETOS_FreeBSD
|
||||
DEF-x86_64-NetBSD = $(DEF-x86_64) -DTARGETOS_NetBSD
|
||||
DEF-x86_64-OpenBSD = $(DEF-x86_64) -DTARGETOS_OpenBSD
|
||||
|
||||
ifeq ($(INCLUDED),no)
|
||||
# --------------------------------------------------------------------------
|
||||
# running top Makefile
|
||||
|
||||
PROGS = tcc$(EXESUF)
|
||||
TCCLIBS = $(LIBTCCDEF) $(LIBTCC) $(LIBTCC1)
|
||||
TCCDOCS = tcc.1 tcc-doc.html tcc-doc.info
|
||||
|
||||
all: $(PROGS) $(TCCLIBS) $(TCCDOCS)
|
||||
|
||||
# cross compiler targets to build
|
||||
TCC_X = i386 x86_64 i386-win32 x86_64-win32 x86_64-osx arm arm64 arm-wince c67
|
||||
TCC_X += riscv64 arm64-osx
|
||||
# TCC_X += arm-fpa arm-fpa-ld arm-vfp arm-eabi
|
||||
|
||||
# cross libtcc1.a targets to build
|
||||
LIBTCC1_X = $(filter-out c67,$(TCC_X))
|
||||
|
||||
PROGS_CROSS = $(foreach X,$(TCC_X),$X-tcc$(EXESUF))
|
||||
LIBTCC1_CROSS = $(foreach X,$(LIBTCC1_X),$X-libtcc1.a)
|
||||
|
||||
# build cross compilers & libs
|
||||
cross: $(LIBTCC1_CROSS) $(PROGS_CROSS)
|
||||
|
||||
# build specific cross compiler & lib
|
||||
cross-%: %-tcc$(EXESUF) %-libtcc1.a ;
|
||||
|
||||
install: ; @$(MAKE) --no-print-directory install$(CFG)
|
||||
install-strip: ; @$(MAKE) --no-print-directory install$(CFG) CONFIG_strip=yes
|
||||
uninstall: ; @$(MAKE) --no-print-directory uninstall$(CFG)
|
||||
|
||||
ifdef CONFIG_cross
|
||||
all : cross
|
||||
endif
|
||||
|
||||
# --------------------------------------------
|
||||
|
||||
T = $(or $(CROSS_TARGET),$(NATIVE_TARGET),unknown)
|
||||
X = $(if $(CROSS_TARGET),$(CROSS_TARGET)-)
|
||||
|
||||
DEFINES += $(DEF-$T)
|
||||
DEFINES += $(if $(ROOT-$T),-DCONFIG_SYSROOT="\"$(ROOT-$T)\"")
|
||||
DEFINES += $(if $(CRT-$T),-DCONFIG_TCC_CRTPREFIX="\"$(CRT-$T)\"")
|
||||
DEFINES += $(if $(LIB-$T),-DCONFIG_TCC_LIBPATHS="\"$(LIB-$T)\"")
|
||||
DEFINES += $(if $(INC-$T),-DCONFIG_TCC_SYSINCLUDEPATHS="\"$(INC-$T)\"")
|
||||
DEFINES += $(if $(ELF-$T),-DCONFIG_TCC_ELFINTERP="\"$(ELF-$T)\"")
|
||||
DEFINES += $(DEF-$(or $(findstring win,$T),unx))
|
||||
|
||||
ifneq ($(X),)
|
||||
$(if $(DEF-$T),,$(error error: unknown target: '$T'))
|
||||
DEF-$(NATIVE_TARGET) =
|
||||
DEF-$T += -DCONFIG_TCC_CROSSPREFIX="\"$X\""
|
||||
ifneq ($(CONFIG_WIN32),yes)
|
||||
DEF-win += -DCONFIG_TCCDIR="\"$(tccdir)/win32\""
|
||||
endif
|
||||
else
|
||||
# using values from config.h
|
||||
DEF-$(NATIVE_TARGET) =
|
||||
endif
|
||||
|
||||
# include custom configuration (see make help)
|
||||
-include config-extra.mak
|
||||
|
||||
ifneq ($(T),$(NATIVE_TARGET))
|
||||
# assume support files for cross-targets in "/usr/<triplet>" by default
|
||||
TRIPLET-i386 ?= i686-linux-gnu
|
||||
TRIPLET-x86_64 ?= x86_64-linux-gnu
|
||||
TRIPLET-arm ?= arm-linux-gnueabi
|
||||
TRIPLET-arm64 ?= aarch64-linux-gnu
|
||||
TRIPLET-riscv64 ?= riscv64-linux-gnu
|
||||
MARCH-i386 ?= i386-linux-gnu
|
||||
MARCH-$T ?= $(TRIPLET-$T)
|
||||
TR = $(if $(TRIPLET-$T),$T,ignored)
|
||||
CRT-$(TR) ?= /usr/$(TRIPLET-$T)/lib
|
||||
LIB-$(TR) ?= {B}:/usr/$(TRIPLET-$T)/lib:/usr/lib/$(MARCH-$T)
|
||||
INC-$(TR) ?= {B}/include:/usr/$(TRIPLET-$T)/include:/usr/include
|
||||
endif
|
||||
|
||||
CORE_FILES = tcc.c tcctools.c libtcc.c tccpp.c tccgen.c tccdbg.c tccelf.c tccasm.c tccrun.c
|
||||
CORE_FILES += tcc.h config.h libtcc.h tcctok.h
|
||||
i386_FILES = $(CORE_FILES) i386-gen.c i386-link.c i386-asm.c i386-asm.h i386-tok.h
|
||||
i386-win32_FILES = $(i386_FILES) tccpe.c
|
||||
x86_64_FILES = $(CORE_FILES) x86_64-gen.c x86_64-link.c i386-asm.c x86_64-asm.h
|
||||
x86_64-win32_FILES = $(x86_64_FILES) tccpe.c
|
||||
x86_64-osx_FILES = $(x86_64_FILES) tccmacho.c
|
||||
arm_FILES = $(CORE_FILES) arm-gen.c arm-link.c arm-asm.c arm-tok.h
|
||||
arm-wince_FILES = $(arm_FILES) tccpe.c
|
||||
arm-eabihf_FILES = $(arm_FILES)
|
||||
arm-fpa_FILES = $(arm_FILES)
|
||||
arm-fpa-ld_FILES = $(arm_FILES)
|
||||
arm-vfp_FILES = $(arm_FILES)
|
||||
arm-eabi_FILES = $(arm_FILES)
|
||||
arm-eabihf_FILES = $(arm_FILES)
|
||||
arm64_FILES = $(CORE_FILES) arm64-gen.c arm64-link.c arm64-asm.c
|
||||
arm64-osx_FILES = $(arm64_FILES) tccmacho.c
|
||||
c67_FILES = $(CORE_FILES) c67-gen.c c67-link.c tcccoff.c
|
||||
riscv64_FILES = $(CORE_FILES) riscv64-gen.c riscv64-link.c riscv64-asm.c
|
||||
|
||||
TCCDEFS_H$(subst yes,,$(CONFIG_predefs)) = tccdefs_.h
|
||||
|
||||
# libtcc sources
|
||||
LIBTCC_SRC = $(filter-out tcc.c tcctools.c,$(filter %.c,$($T_FILES)))
|
||||
|
||||
ifeq ($(ONE_SOURCE),yes)
|
||||
LIBTCC_OBJ = $(X)libtcc.o
|
||||
LIBTCC_INC = $($T_FILES)
|
||||
TCC_FILES = $(X)tcc.o
|
||||
$(X)tcc.o $(X)libtcc.o : $(TCCDEFS_H)
|
||||
else
|
||||
LIBTCC_OBJ = $(patsubst %.c,$(X)%.o,$(LIBTCC_SRC))
|
||||
LIBTCC_INC = $(filter %.h %-gen.c %-link.c,$($T_FILES))
|
||||
TCC_FILES = $(X)tcc.o $(LIBTCC_OBJ)
|
||||
$(X)tccpp.o : $(TCCDEFS_H)
|
||||
$(X)libtcc.o : DEFINES += -DONE_SOURCE=0
|
||||
$(CROSS_TARGET)-tcc.o : DEFINES += -DONE_SOURCE=0
|
||||
endif
|
||||
# native tcc always made from tcc.o and libtcc.[so|a]
|
||||
tcc.o : DEFINES += -DONE_SOURCE=0
|
||||
DEFINES += -I$(TOP)
|
||||
|
||||
GITHASH:=$(shell git rev-parse --abbrev-ref HEAD 2>/dev/null || echo no)
|
||||
ifneq ($(GITHASH),no)
|
||||
GITHASH:=$(shell git log -1 --date=short --pretty='format:%cd $(GITHASH)@%h')
|
||||
GITMODF:=$(shell git diff --quiet || echo '*')
|
||||
DEF_GITHASH:= -DTCC_GITHASH="\"$(GITHASH)$(GITMODF)\""
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_debug),yes)
|
||||
CFLAGS += -g
|
||||
LDFLAGS += -g
|
||||
endif
|
||||
|
||||
# convert "include/tccdefs.h" to "tccdefs_.h"
|
||||
%_.h : include/%.h conftest.c
|
||||
$S$(CC) -DC2STR $(filter %.c,$^) -o c2str.exe && ./c2str.exe $< $@
|
||||
|
||||
# target specific object rule
|
||||
$(X)%.o : %.c $(LIBTCC_INC)
|
||||
$S$(CC) -o $@ -c $< $(addsuffix ,$(DEFINES) $(CFLAGS))
|
||||
|
||||
# additional dependencies
|
||||
$(X)tcc.o : tcctools.c
|
||||
$(X)tcc.o : DEFINES += $(DEF_GITHASH)
|
||||
|
||||
# Host Tiny C Compiler
|
||||
tcc$(EXESUF): tcc.o $(LIBTCC)
|
||||
$S$(CC) -o $@ $^ $(addsuffix ,$(LIBS) $(LDFLAGS) $(LINK_LIBTCC))
|
||||
|
||||
# Cross Tiny C Compilers
|
||||
# (the TCCDEFS_H dependency is only necessary for parallel makes,
|
||||
# ala 'make -j x86_64-tcc i386-tcc tcc', which would create multiple
|
||||
# c2str.exe and tccdefs_.h files in parallel, leading to access errors.
|
||||
# This forces it to be made only once. Make normally tracks multiple paths
|
||||
# to the same goals and only remakes it once, but that doesn't work over
|
||||
# sub-makes like in this target)
|
||||
%-tcc$(EXESUF): $(TCCDEFS_H) FORCE
|
||||
@$(MAKE) --no-print-directory $@ CROSS_TARGET=$* ONE_SOURCE=$(or $(ONE_SOURCE),yes)
|
||||
|
||||
$(CROSS_TARGET)-tcc$(EXESUF): $(TCC_FILES)
|
||||
$S$(CC) -o $@ $^ $(LIBS) $(LDFLAGS)
|
||||
|
||||
# profiling version
|
||||
tcc_p$(EXESUF): $($T_FILES)
|
||||
$S$(CC) -o $@ $< $(DEFINES) $(CFLAGS_P) $(LIBS_P) $(LDFLAGS_P)
|
||||
|
||||
# static libtcc library
|
||||
libtcc.a: $(LIBTCC_OBJ)
|
||||
$S$(AR) rcs $@ $^
|
||||
|
||||
# dynamic libtcc library
|
||||
libtcc.so: $(LIBTCC_OBJ)
|
||||
$S$(CC) -shared -Wl,-soname,$@ -o $@ $^ $(LIBS) $(LDFLAGS)
|
||||
|
||||
libtcc.so: override CFLAGS += -fPIC
|
||||
libtcc.so: override LDFLAGS += -fPIC
|
||||
|
||||
# OSX dynamic libtcc library
|
||||
libtcc.dylib: $(LIBTCC_OBJ)
|
||||
$S$(CC) -dynamiclib $(DYLIBVER) -install_name @rpath/$@ -o $@ $^ $(LDFLAGS)
|
||||
|
||||
# OSX libtcc.dylib (without rpath/ prefix)
|
||||
libtcc.osx: $(LIBTCC_OBJ)
|
||||
$S$(CC) -shared -install_name libtcc.dylib -o libtcc.dylib $^ $(LDFLAGS)
|
||||
|
||||
# windows dynamic libtcc library
|
||||
libtcc.dll : $(LIBTCC_OBJ)
|
||||
$S$(CC) -shared -o $@ $^ $(LDFLAGS)
|
||||
libtcc.dll : DEFINES += -DLIBTCC_AS_DLL
|
||||
|
||||
# import file for windows libtcc.dll
|
||||
libtcc.def : libtcc.dll tcc$(EXESUF)
|
||||
$S$(XTCC) -impdef $< -o $@
|
||||
XTCC ?= ./tcc$(EXESUF)
|
||||
|
||||
# TinyCC runtime libraries
|
||||
libtcc1.a : tcc$(EXESUF) FORCE
|
||||
@$(MAKE) -C lib
|
||||
|
||||
# Cross libtcc1.a
|
||||
%-libtcc1.a : %-tcc$(EXESUF) FORCE
|
||||
@$(MAKE) -C lib CROSS_TARGET=$*
|
||||
|
||||
.PRECIOUS: %-libtcc1.a
|
||||
FORCE:
|
||||
|
||||
# WHICH = which $1 2>/dev/null
|
||||
# some versions of gnu-make do not recognize 'command' as a shell builtin
|
||||
WHICH = sh -c 'command -v $1'
|
||||
|
||||
run-if = $(if $(shell $(call WHICH,$1)),$S $1 $2)
|
||||
S = $(if $(findstring yes,$(SILENT)),@$(info * $@))
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# documentation and man page
|
||||
tcc-doc.html: tcc-doc.texi
|
||||
$(call run-if,makeinfo,--no-split --html --number-sections -o $@ $<)
|
||||
|
||||
tcc-doc.info: tcc-doc.texi
|
||||
$(call run-if,makeinfo,$< || true)
|
||||
|
||||
tcc.1 : tcc-doc.pod
|
||||
$(call run-if,pod2man,--section=1 --center="Tiny C Compiler" \
|
||||
--release="$(VERSION)" $< >$@)
|
||||
%.pod : %.texi
|
||||
$(call run-if,perl,$(TOPSRC)/texi2pod.pl $< $@)
|
||||
|
||||
doc : $(TCCDOCS)
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# install
|
||||
|
||||
INSTALL = install -m644
|
||||
INSTALLBIN = install -m755 $(STRIP_$(CONFIG_strip))
|
||||
STRIP_yes = -s
|
||||
|
||||
LIBTCC1_W = $(filter %-win32-libtcc1.a %-wince-libtcc1.a,$(LIBTCC1_CROSS))
|
||||
LIBTCC1_U = $(filter-out $(LIBTCC1_W),$(wildcard *-libtcc1.a))
|
||||
IB = $(if $1,$(IM) mkdir -p $2 && $(INSTALLBIN) $1 $2)
|
||||
IBw = $(call IB,$(wildcard $1),$2)
|
||||
IF = $(if $1,$(IM) mkdir -p $2 && $(INSTALL) $1 $2)
|
||||
IFw = $(call IF,$(wildcard $1),$2)
|
||||
IR = $(IM) mkdir -p $2 && cp -r $1/. $2
|
||||
IM = @echo "-> $2 : $1" ;
|
||||
BINCHECK = $(if $(wildcard $(PROGS) *-tcc$(EXESUF)),,@echo "Makefile: nothing found to install" && exit 1)
|
||||
|
||||
EXTRA_O = runmain.o bt-exe.o bt-dll.o bt-log.o bcheck.o
|
||||
|
||||
# install progs & libs
|
||||
install-unx:
|
||||
$(call BINCHECK)
|
||||
$(call IBw,$(PROGS) *-tcc,"$(bindir)")
|
||||
$(call IFw,$(LIBTCC1) $(EXTRA_O) $(LIBTCC1_U),"$(tccdir)")
|
||||
$(call IF,$(TOPSRC)/include/*.h $(TOPSRC)/tcclib.h,"$(tccdir)/include")
|
||||
$(call $(if $(findstring .so,$(LIBTCC)),IBw,IFw),$(LIBTCC),"$(libdir)")
|
||||
$(call IF,$(TOPSRC)/libtcc.h,"$(includedir)")
|
||||
$(call IFw,tcc.1,"$(mandir)/man1")
|
||||
$(call IFw,tcc-doc.info,"$(infodir)")
|
||||
$(call IFw,tcc-doc.html,"$(docdir)")
|
||||
ifneq "$(wildcard $(LIBTCC1_W))" ""
|
||||
$(call IFw,$(TOPSRC)/win32/lib/*.def $(LIBTCC1_W),"$(tccdir)/win32/lib")
|
||||
$(call IR,$(TOPSRC)/win32/include,"$(tccdir)/win32/include")
|
||||
$(call IF,$(TOPSRC)/include/*.h $(TOPSRC)/tcclib.h,"$(tccdir)/win32/include")
|
||||
endif
|
||||
|
||||
# uninstall
|
||||
uninstall-unx:
|
||||
@rm -fv $(addprefix "$(bindir)/",$(PROGS) $(PROGS_CROSS))
|
||||
@rm -fv $(addprefix "$(libdir)/", libtcc*.a libtcc*.so libtcc.dylib,$P)
|
||||
@rm -fv $(addprefix "$(includedir)/", libtcc.h)
|
||||
@rm -fv "$(mandir)/man1/tcc.1" "$(infodir)/tcc-doc.info"
|
||||
@rm -fv "$(docdir)/tcc-doc.html"
|
||||
@rm -frv "$(tccdir)"
|
||||
|
||||
# install progs & libs on windows
|
||||
install-win:
|
||||
$(call BINCHECK)
|
||||
$(call IBw,$(PROGS) *-tcc.exe libtcc.dll,"$(bindir)")
|
||||
$(call IF,$(TOPSRC)/win32/lib/*.def,"$(tccdir)/lib")
|
||||
$(call IFw,libtcc1.a $(EXTRA_O) $(LIBTCC1_W),"$(tccdir)/lib")
|
||||
$(call IF,$(TOPSRC)/include/*.h $(TOPSRC)/tcclib.h,"$(tccdir)/include")
|
||||
$(call IR,$(TOPSRC)/win32/include,"$(tccdir)/include")
|
||||
$(call IR,$(TOPSRC)/win32/examples,"$(tccdir)/examples")
|
||||
$(call IF,$(TOPSRC)/tests/libtcc_test.c,"$(tccdir)/examples")
|
||||
$(call IFw,$(TOPSRC)/libtcc.h libtcc.def libtcc.a,"$(libdir)")
|
||||
$(call IFw,$(TOPSRC)/win32/tcc-win32.txt tcc-doc.html,"$(docdir)")
|
||||
ifneq "$(wildcard $(LIBTCC1_U))" ""
|
||||
$(call IFw,$(LIBTCC1_U),"$(tccdir)/lib")
|
||||
$(call IF,$(TOPSRC)/include/*.h $(TOPSRC)/tcclib.h,"$(tccdir)/lib/include")
|
||||
endif
|
||||
|
||||
# uninstall on windows
|
||||
uninstall-win:
|
||||
@rm -fv $(foreach P,libtcc*.dll $(PROGS) *-tcc.exe,"$(bindir)"/$P)
|
||||
@rm -fr $(foreach P,doc examples include lib libtcc,"$(tccdir)"/$P/*)
|
||||
@rm -frv $(foreach P,doc examples include lib libtcc,"$(tccdir)"/$P)
|
||||
|
||||
# the msys-git shell works to configure && make except it does not have install
|
||||
ifeq ($(OS),Windows_NT)
|
||||
ifeq ($(shell $(call WHICH,install) || echo no),no)
|
||||
INSTALL = cp
|
||||
INSTALLBIN = cp
|
||||
endif
|
||||
endif
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# other stuff
|
||||
|
||||
TAGFILES = *.[ch] include/*.h lib/*.[chS]
|
||||
tags : ; ctags $(TAGFILES)
|
||||
# cannot have both tags and TAGS on windows
|
||||
ETAGS : ; etags $(TAGFILES)
|
||||
|
||||
# create release tarball from *current* git branch (including tcc-doc.html
|
||||
# and converting two files to CRLF)
|
||||
TCC-VERSION = tcc-$(VERSION)
|
||||
TCC-VERSION = tinycc-mob-$(shell git rev-parse --short=7 HEAD)
|
||||
tar: tcc-doc.html
|
||||
mkdir -p $(TCC-VERSION)
|
||||
( cd $(TCC-VERSION) && git --git-dir ../.git checkout -f )
|
||||
cp tcc-doc.html $(TCC-VERSION)
|
||||
for f in tcc-win32.txt build-tcc.bat ; do \
|
||||
cat win32/$$f | sed 's,\(.*\),\1\r,g' > $(TCC-VERSION)/win32/$$f ; \
|
||||
done
|
||||
tar cjf $(TCC-VERSION).tar.bz2 $(TCC-VERSION)
|
||||
rm -rf $(TCC-VERSION)
|
||||
git reset
|
||||
|
||||
config.mak:
|
||||
$(if $(wildcard $@),,@echo "Please run ./configure." && exit 1)
|
||||
|
||||
# run all tests
|
||||
test:
|
||||
@$(MAKE) -C tests
|
||||
# run test(s) from tests2 subdir (see make help)
|
||||
tests2.%:
|
||||
@$(MAKE) -C tests/tests2 $@
|
||||
# run test(s) from testspp subdir (see make help)
|
||||
testspp.%:
|
||||
@$(MAKE) -C tests/pp $@
|
||||
# run tests with code coverage
|
||||
tcov-tes% : tcc_c$(EXESUF)
|
||||
@rm -f $<.tcov
|
||||
@$(MAKE) --no-print-directory TCC_LOCAL=$(CURDIR)/$< tes$*
|
||||
tcc_c$(EXESUF): $($T_FILES)
|
||||
$S$(TCC) tcc.c -o $@ -ftest-coverage $(DEFINES) $(LIBS)
|
||||
# test the installed tcc instead
|
||||
test-install: $(TCCDEFS_H)
|
||||
@$(MAKE) -C tests TESTINSTALL=yes #_all
|
||||
|
||||
clean:
|
||||
@rm -f tcc *-tcc tcc_p tcc_c
|
||||
@rm -f tags ETAGS *.o *.a *.so* *.out *.log lib*.def *.exe *.dll
|
||||
@rm -f a.out *.dylib *_.h *.pod *.tcov
|
||||
@$(MAKE) -s -C lib $@
|
||||
@$(MAKE) -s -C tests $@
|
||||
|
||||
distclean: clean
|
||||
@rm -vf config.h config.mak config.texi
|
||||
@rm -vf $(TCCDOCS)
|
||||
|
||||
.PHONY: all clean test tar tags ETAGS doc distclean install uninstall FORCE
|
||||
|
||||
help:
|
||||
@echo "make"
|
||||
@echo " build native compiler (from separate objects)"
|
||||
@echo "make cross"
|
||||
@echo " build cross compilers (from one source)"
|
||||
@echo "make ONE_SOURCE=no/yes SILENT=no/yes"
|
||||
@echo " force building from separate/one object(s), less/more silently"
|
||||
@echo "make cross-TARGET"
|
||||
@echo " build one specific cross compiler for 'TARGET'. Currently supported:"
|
||||
@echo " $(wordlist 1,8,$(TCC_X))"
|
||||
@echo " $(wordlist 9,99,$(TCC_X))"
|
||||
@echo "make test"
|
||||
@echo " run all tests"
|
||||
@echo "make tests2.all / make tests2.37 / make tests2.37+"
|
||||
@echo " run all/single test(s) from tests2, optionally update .expect"
|
||||
@echo "make testspp.all / make testspp.17"
|
||||
@echo " run all/single test(s) from tests/pp"
|
||||
@echo "make tcov-test / tcov-tests2... / tcov-testspp..."
|
||||
@echo " run tests as above with code coverage. After test(s) see tcc_c$(EXESUF).tcov"
|
||||
@echo "make test-install"
|
||||
@echo " run tests with the installed tcc"
|
||||
@echo "Other supported make targets:"
|
||||
@echo " install install-strip uninstall doc [dist]clean tags ETAGS tar help"
|
||||
@echo "Custom configuration:"
|
||||
@echo " The makefile includes a file 'config-extra.mak' if it is present."
|
||||
@echo " This file may contain some custom configuration. For example to"
|
||||
@echo " configure the search paths for a cross-compiler, assuming the"
|
||||
@echo " support files in /usr/i686-linux-gnu:"
|
||||
@echo " ROOT-i386 = /usr/i686-linux-gnu"
|
||||
@echo " CRT-i386 = {R}/lib"
|
||||
@echo " LIB-i386 = {B}:{R}/lib"
|
||||
@echo " INC-i386 = {B}/include:{R}/include (*)"
|
||||
@echo " DEF-i386 += -D__linux__"
|
||||
@echo " Or also, for the cross platform files in /usr/<triplet>"
|
||||
@echo " TRIPLET-i386 = i686-linux-gnu"
|
||||
@echo " (*) tcc replaces {B} by 'tccdir' and {R} by 'CONFIG_SYSROOT'"
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
endif # ($(INCLUDED),no)
|
12
Makefile.am
Normal file
12
Makefile.am
Normal file
|
@ -0,0 +1,12 @@
|
|||
AM_CFLAGS =
|
||||
|
||||
|
||||
noinst_LIBRARIES = libtcc.a
|
||||
libtcc_a_SOURCES = libtcc.c tccpp.c tccgen.c tccdbg.c tccasm.c tccelf.c i386-gen.c i386-link.c i386-asm.c
|
||||
libtcc_a_CPPFLAGS = -I$(top_srcdir)
|
||||
|
||||
bin_PROGRAMS = tcc
|
||||
|
||||
tcc_SOURCES = tcc.c
|
||||
tcc_LDADD = libtcc.a
|
||||
tcc_CPPFLAGS = -I$(top_srcdir)
|
444
arm-link.c
444
arm-link.c
|
@ -1,444 +0,0 @@
|
|||
#ifdef TARGET_DEFS_ONLY
|
||||
|
||||
#define EM_TCC_TARGET EM_ARM
|
||||
|
||||
/* relocation type for 32 bit data relocation */
|
||||
#define R_DATA_32 R_ARM_ABS32
|
||||
#define R_DATA_PTR R_ARM_ABS32
|
||||
#define R_JMP_SLOT R_ARM_JUMP_SLOT
|
||||
#define R_GLOB_DAT R_ARM_GLOB_DAT
|
||||
#define R_COPY R_ARM_COPY
|
||||
#define R_RELATIVE R_ARM_RELATIVE
|
||||
|
||||
#define R_NUM R_ARM_NUM
|
||||
|
||||
#define ELF_START_ADDR 0x00010000
|
||||
#define ELF_PAGE_SIZE 0x10000
|
||||
|
||||
#define PCRELATIVE_DLLPLT 1
|
||||
#define RELOCATE_DLLPLT 1
|
||||
|
||||
enum float_abi {
|
||||
ARM_SOFTFP_FLOAT,
|
||||
ARM_HARD_FLOAT,
|
||||
};
|
||||
|
||||
#else /* !TARGET_DEFS_ONLY */
|
||||
|
||||
#include "tcc.h"
|
||||
|
||||
#ifdef NEED_RELOC_TYPE
|
||||
/* Returns 1 for a code relocation, 0 for a data relocation. For unknown
|
||||
relocations, returns -1. */
|
||||
ST_FUNC int code_reloc (int reloc_type)
|
||||
{
|
||||
switch (reloc_type) {
|
||||
case R_ARM_MOVT_ABS:
|
||||
case R_ARM_MOVW_ABS_NC:
|
||||
case R_ARM_THM_MOVT_ABS:
|
||||
case R_ARM_THM_MOVW_ABS_NC:
|
||||
case R_ARM_ABS32:
|
||||
case R_ARM_REL32:
|
||||
case R_ARM_GOTPC:
|
||||
case R_ARM_GOTOFF:
|
||||
case R_ARM_GOT32:
|
||||
case R_ARM_GOT_PREL:
|
||||
case R_ARM_COPY:
|
||||
case R_ARM_GLOB_DAT:
|
||||
case R_ARM_NONE:
|
||||
case R_ARM_TARGET1:
|
||||
case R_ARM_MOVT_PREL:
|
||||
case R_ARM_MOVW_PREL_NC:
|
||||
return 0;
|
||||
|
||||
case R_ARM_PC24:
|
||||
case R_ARM_CALL:
|
||||
case R_ARM_JUMP24:
|
||||
case R_ARM_PLT32:
|
||||
case R_ARM_THM_PC22:
|
||||
case R_ARM_THM_JUMP24:
|
||||
case R_ARM_PREL31:
|
||||
case R_ARM_V4BX:
|
||||
case R_ARM_JUMP_SLOT:
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Returns an enumerator to describe whether and when the relocation needs a
|
||||
GOT and/or PLT entry to be created. See tcc.h for a description of the
|
||||
different values. */
|
||||
ST_FUNC int gotplt_entry_type (int reloc_type)
|
||||
{
|
||||
switch (reloc_type) {
|
||||
case R_ARM_NONE:
|
||||
case R_ARM_COPY:
|
||||
case R_ARM_GLOB_DAT:
|
||||
case R_ARM_JUMP_SLOT:
|
||||
return NO_GOTPLT_ENTRY;
|
||||
|
||||
case R_ARM_PC24:
|
||||
case R_ARM_CALL:
|
||||
case R_ARM_JUMP24:
|
||||
case R_ARM_PLT32:
|
||||
case R_ARM_THM_PC22:
|
||||
case R_ARM_THM_JUMP24:
|
||||
case R_ARM_MOVT_ABS:
|
||||
case R_ARM_MOVW_ABS_NC:
|
||||
case R_ARM_THM_MOVT_ABS:
|
||||
case R_ARM_THM_MOVW_ABS_NC:
|
||||
case R_ARM_PREL31:
|
||||
case R_ARM_ABS32:
|
||||
case R_ARM_REL32:
|
||||
case R_ARM_V4BX:
|
||||
case R_ARM_TARGET1:
|
||||
case R_ARM_MOVT_PREL:
|
||||
case R_ARM_MOVW_PREL_NC:
|
||||
return AUTO_GOTPLT_ENTRY;
|
||||
|
||||
case R_ARM_GOTPC:
|
||||
case R_ARM_GOTOFF:
|
||||
return BUILD_GOT_ONLY;
|
||||
|
||||
case R_ARM_GOT32:
|
||||
case R_ARM_GOT_PREL:
|
||||
return ALWAYS_GOTPLT_ENTRY;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef NEED_BUILD_GOT
|
||||
ST_FUNC unsigned create_plt_entry(TCCState *s1, unsigned got_offset, struct sym_attr *attr)
|
||||
{
|
||||
Section *plt = s1->plt;
|
||||
uint8_t *p;
|
||||
unsigned plt_offset;
|
||||
|
||||
/* when building a DLL, GOT entry accesses must be done relative to
|
||||
start of GOT (see x86_64 example above) */
|
||||
|
||||
/* empty PLT: create PLT0 entry that push address of call site and
|
||||
jump to ld.so resolution routine (GOT + 8) */
|
||||
if (plt->data_offset == 0) {
|
||||
p = section_ptr_add(plt, 20);
|
||||
write32le(p, 0xe52de004); /* push {lr} */
|
||||
write32le(p+4, 0xe59fe004); /* ldr lr, [pc, #4] */
|
||||
write32le(p+8, 0xe08fe00e); /* add lr, pc, lr */
|
||||
write32le(p+12, 0xe5bef008); /* ldr pc, [lr, #8]! */
|
||||
/* p+16 is set in relocate_plt */
|
||||
}
|
||||
plt_offset = plt->data_offset;
|
||||
|
||||
if (attr->plt_thumb_stub) {
|
||||
p = section_ptr_add(plt, 4);
|
||||
write32le(p, 0x4778); /* bx pc */
|
||||
write32le(p+2, 0x46c0); /* nop */
|
||||
}
|
||||
p = section_ptr_add(plt, 16);
|
||||
/* save GOT offset for relocate_plt */
|
||||
write32le(p + 4, got_offset);
|
||||
return plt_offset;
|
||||
}
|
||||
|
||||
/* relocate the PLT: compute addresses and offsets in the PLT now that final
|
||||
address for PLT and GOT are known (see fill_program_header) */
|
||||
ST_FUNC void relocate_plt(TCCState *s1)
|
||||
{
|
||||
uint8_t *p, *p_end;
|
||||
|
||||
if (!s1->plt)
|
||||
return;
|
||||
|
||||
p = s1->plt->data;
|
||||
p_end = p + s1->plt->data_offset;
|
||||
|
||||
if (p < p_end) {
|
||||
int x = s1->got->sh_addr - s1->plt->sh_addr - 12;
|
||||
write32le(s1->plt->data + 16, x - 4);
|
||||
p += 20;
|
||||
while (p < p_end) {
|
||||
unsigned off = x + read32le(p + 4) + (s1->plt->data - p) + 4;
|
||||
if (read32le(p) == 0x46c04778) /* PLT Thumb stub present */
|
||||
p += 4;
|
||||
write32le(p, 0xe28fc200 | ((off >> 28) & 0xf)); // add ip, pc, #0xN0000000
|
||||
write32le(p + 4, 0xe28cc600 | ((off >> 20) & 0xff)); // add ip, pc, #0xNN00000
|
||||
write32le(p + 8, 0xe28cca00 | ((off >> 12) & 0xff)); // add ip, ip, #0xNN000
|
||||
write32le(p + 12, 0xe5bcf000 | (off & 0xfff)); // ldr pc, [ip, #0xNNN]!
|
||||
p += 16;
|
||||
}
|
||||
}
|
||||
|
||||
if (s1->plt->reloc) {
|
||||
ElfW_Rel *rel;
|
||||
p = s1->got->data;
|
||||
for_each_elem(s1->plt->reloc, 0, rel, ElfW_Rel) {
|
||||
write32le(p + rel->r_offset, s1->plt->sh_addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
ST_FUNC void relocate(TCCState *s1, ElfW_Rel *rel, int type, unsigned char *ptr, addr_t addr, addr_t val)
|
||||
{
|
||||
ElfW(Sym) *sym;
|
||||
int sym_index, esym_index;
|
||||
|
||||
sym_index = ELFW(R_SYM)(rel->r_info);
|
||||
sym = &((ElfW(Sym) *)symtab_section->data)[sym_index];
|
||||
|
||||
switch(type) {
|
||||
case R_ARM_PC24:
|
||||
case R_ARM_CALL:
|
||||
case R_ARM_JUMP24:
|
||||
case R_ARM_PLT32:
|
||||
{
|
||||
int x, is_thumb, is_call, h, blx_avail, is_bl, th_ko;
|
||||
x = (*(int *) ptr) & 0xffffff;
|
||||
#ifdef DEBUG_RELOC
|
||||
printf ("reloc %d: x=0x%x val=0x%x ", type, x, val);
|
||||
#endif
|
||||
(*(int *)ptr) &= 0xff000000;
|
||||
if (x & 0x800000)
|
||||
x -= 0x1000000;
|
||||
x <<= 2;
|
||||
blx_avail = (CONFIG_TCC_CPUVER >= 5);
|
||||
is_thumb = val & 1;
|
||||
is_bl = (*(unsigned *) ptr) >> 24 == 0xeb;
|
||||
is_call = (type == R_ARM_CALL || (type == R_ARM_PC24 && is_bl));
|
||||
x += val - addr;
|
||||
#ifdef DEBUG_RELOC
|
||||
printf (" newx=0x%x name=%s\n", x,
|
||||
(char *) symtab_section->link->data + sym->st_name);
|
||||
#endif
|
||||
h = x & 2;
|
||||
th_ko = (x & 3) && (!blx_avail || !is_call);
|
||||
if (th_ko || x >= 0x2000000 || x < -0x2000000)
|
||||
tcc_error_noabort("can't relocate value at %x,%d",addr, type);
|
||||
x >>= 2;
|
||||
x &= 0xffffff;
|
||||
/* Only reached if blx is avail and it is a call */
|
||||
if (is_thumb) {
|
||||
x |= h << 24;
|
||||
(*(int *)ptr) = 0xfa << 24; /* bl -> blx */
|
||||
}
|
||||
(*(int *) ptr) |= x;
|
||||
}
|
||||
return;
|
||||
/* Since these relocations only concern Thumb-2 and blx instruction was
|
||||
introduced before Thumb-2, we can assume blx is available and not
|
||||
guard its use */
|
||||
case R_ARM_THM_PC22:
|
||||
case R_ARM_THM_JUMP24:
|
||||
{
|
||||
int x, hi, lo, s, j1, j2, i1, i2, imm10, imm11;
|
||||
int to_thumb, is_call, to_plt, blx_bit = 1 << 12;
|
||||
Section *plt;
|
||||
|
||||
/* weak reference */
|
||||
if (sym->st_shndx == SHN_UNDEF &&
|
||||
ELFW(ST_BIND)(sym->st_info) == STB_WEAK)
|
||||
return;
|
||||
|
||||
/* Get initial offset */
|
||||
hi = (*(uint16_t *)ptr);
|
||||
lo = (*(uint16_t *)(ptr+2));
|
||||
s = (hi >> 10) & 1;
|
||||
j1 = (lo >> 13) & 1;
|
||||
j2 = (lo >> 11) & 1;
|
||||
i1 = (j1 ^ s) ^ 1;
|
||||
i2 = (j2 ^ s) ^ 1;
|
||||
imm10 = hi & 0x3ff;
|
||||
imm11 = lo & 0x7ff;
|
||||
x = (s << 24) | (i1 << 23) | (i2 << 22) |
|
||||
(imm10 << 12) | (imm11 << 1);
|
||||
if (x & 0x01000000)
|
||||
x -= 0x02000000;
|
||||
|
||||
/* Relocation infos */
|
||||
to_thumb = val & 1;
|
||||
plt = s1->plt;
|
||||
to_plt = (val >= plt->sh_addr) &&
|
||||
(val < plt->sh_addr + plt->data_offset);
|
||||
is_call = (type == R_ARM_THM_PC22);
|
||||
|
||||
if (!to_thumb && !to_plt && !is_call) {
|
||||
int index;
|
||||
uint8_t *p;
|
||||
char *name, buf[1024];
|
||||
Section *text;
|
||||
|
||||
name = (char *) symtab_section->link->data + sym->st_name;
|
||||
text = s1->sections[sym->st_shndx];
|
||||
/* Modify reloc to target a thumb stub to switch to ARM */
|
||||
snprintf(buf, sizeof(buf), "%s_from_thumb", name);
|
||||
index = put_elf_sym(symtab_section,
|
||||
text->data_offset + 1,
|
||||
sym->st_size, sym->st_info, 0,
|
||||
sym->st_shndx, buf);
|
||||
to_thumb = 1;
|
||||
val = text->data_offset + 1;
|
||||
rel->r_info = ELFW(R_INFO)(index, type);
|
||||
/* Create a thumb stub function to switch to ARM mode */
|
||||
put_elf_reloc(symtab_section, text,
|
||||
text->data_offset + 4, R_ARM_JUMP24,
|
||||
sym_index);
|
||||
p = section_ptr_add(text, 8);
|
||||
write32le(p, 0x4778); /* bx pc */
|
||||
write32le(p+2, 0x46c0); /* nop */
|
||||
write32le(p+4, 0xeafffffe); /* b $sym */
|
||||
}
|
||||
|
||||
/* Compute final offset */
|
||||
x += val - addr;
|
||||
if (!to_thumb && is_call) {
|
||||
blx_bit = 0; /* bl -> blx */
|
||||
x = (x + 3) & -4; /* Compute offset from aligned PC */
|
||||
}
|
||||
|
||||
/* Check that relocation is possible
|
||||
* offset must not be out of range
|
||||
* if target is to be entered in arm mode:
|
||||
- bit 1 must not set
|
||||
- instruction must be a call (bl) or a jump to PLT */
|
||||
if (!to_thumb || x >= 0x1000000 || x < -0x1000000)
|
||||
if (to_thumb || (val & 2) || (!is_call && !to_plt))
|
||||
tcc_error_noabort("can't relocate value at %x,%d",addr, type);
|
||||
|
||||
/* Compute and store final offset */
|
||||
s = (x >> 24) & 1;
|
||||
i1 = (x >> 23) & 1;
|
||||
i2 = (x >> 22) & 1;
|
||||
j1 = s ^ (i1 ^ 1);
|
||||
j2 = s ^ (i2 ^ 1);
|
||||
imm10 = (x >> 12) & 0x3ff;
|
||||
imm11 = (x >> 1) & 0x7ff;
|
||||
(*(uint16_t *)ptr) = (uint16_t) ((hi & 0xf800) |
|
||||
(s << 10) | imm10);
|
||||
(*(uint16_t *)(ptr+2)) = (uint16_t) ((lo & 0xc000) |
|
||||
(j1 << 13) | blx_bit | (j2 << 11) |
|
||||
imm11);
|
||||
}
|
||||
return;
|
||||
case R_ARM_MOVT_ABS:
|
||||
case R_ARM_MOVW_ABS_NC:
|
||||
{
|
||||
int x, imm4, imm12;
|
||||
if (type == R_ARM_MOVT_ABS)
|
||||
val >>= 16;
|
||||
imm12 = val & 0xfff;
|
||||
imm4 = (val >> 12) & 0xf;
|
||||
x = (imm4 << 16) | imm12;
|
||||
if (type == R_ARM_THM_MOVT_ABS)
|
||||
*(int *)ptr |= x;
|
||||
else
|
||||
*(int *)ptr += x;
|
||||
}
|
||||
return;
|
||||
case R_ARM_MOVT_PREL:
|
||||
case R_ARM_MOVW_PREL_NC:
|
||||
{
|
||||
int insn = *(int *)ptr;
|
||||
int addend = ((insn >> 4) & 0xf000) | (insn & 0xfff);
|
||||
|
||||
addend = (addend ^ 0x8000) - 0x8000;
|
||||
val += addend - addr;
|
||||
if (type == R_ARM_MOVT_PREL)
|
||||
val >>= 16;
|
||||
*(int *)ptr = (insn & 0xfff0f000) |
|
||||
((val & 0xf000) << 4) | (val & 0xfff);
|
||||
}
|
||||
return;
|
||||
case R_ARM_THM_MOVT_ABS:
|
||||
case R_ARM_THM_MOVW_ABS_NC:
|
||||
{
|
||||
int x, i, imm4, imm3, imm8;
|
||||
if (type == R_ARM_THM_MOVT_ABS)
|
||||
val >>= 16;
|
||||
imm8 = val & 0xff;
|
||||
imm3 = (val >> 8) & 0x7;
|
||||
i = (val >> 11) & 1;
|
||||
imm4 = (val >> 12) & 0xf;
|
||||
x = (imm3 << 28) | (imm8 << 16) | (i << 10) | imm4;
|
||||
if (type == R_ARM_THM_MOVT_ABS)
|
||||
*(int *)ptr |= x;
|
||||
else
|
||||
*(int *)ptr += x;
|
||||
}
|
||||
return;
|
||||
case R_ARM_PREL31:
|
||||
{
|
||||
int x;
|
||||
x = (*(int *)ptr) & 0x7fffffff;
|
||||
(*(int *)ptr) &= 0x80000000;
|
||||
x = (x * 2) / 2;
|
||||
x += val - addr;
|
||||
if((x^(x>>1))&0x40000000)
|
||||
tcc_error_noabort("can't relocate value at %x,%d",addr, type);
|
||||
(*(int *)ptr) |= x & 0x7fffffff;
|
||||
}
|
||||
return;
|
||||
case R_ARM_ABS32:
|
||||
case R_ARM_TARGET1:
|
||||
if (s1->output_type & TCC_OUTPUT_DYN) {
|
||||
esym_index = get_sym_attr(s1, sym_index, 0)->dyn_index;
|
||||
qrel->r_offset = rel->r_offset;
|
||||
if (esym_index) {
|
||||
qrel->r_info = ELFW(R_INFO)(esym_index, R_ARM_ABS32);
|
||||
qrel++;
|
||||
return;
|
||||
} else {
|
||||
qrel->r_info = ELFW(R_INFO)(0, R_ARM_RELATIVE);
|
||||
qrel++;
|
||||
}
|
||||
}
|
||||
*(int *)ptr += val;
|
||||
return;
|
||||
case R_ARM_REL32:
|
||||
*(int *)ptr += val - addr;
|
||||
return;
|
||||
case R_ARM_GOTPC:
|
||||
*(int *)ptr += s1->got->sh_addr - addr;
|
||||
return;
|
||||
case R_ARM_GOTOFF:
|
||||
*(int *)ptr += val - s1->got->sh_addr;
|
||||
return;
|
||||
case R_ARM_GOT32:
|
||||
/* we load the got offset */
|
||||
*(int *)ptr += get_sym_attr(s1, sym_index, 0)->got_offset;
|
||||
return;
|
||||
case R_ARM_GOT_PREL:
|
||||
/* we load the pc relative got offset */
|
||||
*(int *)ptr += s1->got->sh_addr +
|
||||
get_sym_attr(s1, sym_index, 0)->got_offset -
|
||||
addr;
|
||||
return;
|
||||
case R_ARM_COPY:
|
||||
return;
|
||||
case R_ARM_V4BX:
|
||||
/* trade Thumb support for ARMv4 support */
|
||||
if ((0x0ffffff0 & *(int*)ptr) == 0x012FFF10)
|
||||
*(int*)ptr ^= 0xE12FFF10 ^ 0xE1A0F000; /* BX Rm -> MOV PC, Rm */
|
||||
return;
|
||||
case R_ARM_GLOB_DAT:
|
||||
case R_ARM_JUMP_SLOT:
|
||||
*(addr_t *)ptr = val;
|
||||
return;
|
||||
case R_ARM_NONE:
|
||||
/* Nothing to do. Normally used to indicate a dependency
|
||||
on a certain symbol (like for exception handling under EABI). */
|
||||
return;
|
||||
case R_ARM_RELATIVE:
|
||||
#ifdef TCC_TARGET_PE
|
||||
add32le(ptr, val - s1->pe_imagebase);
|
||||
#endif
|
||||
/* do nothing */
|
||||
return;
|
||||
default:
|
||||
fprintf(stderr,"FIXME: handle reloc type %d at %x [%p] to %x\n",
|
||||
type, (unsigned)addr, ptr, (unsigned)val);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* !TARGET_DEFS_ONLY */
|
383
arm-tok.h
383
arm-tok.h
|
@ -1,383 +0,0 @@
|
|||
/* ------------------------------------------------------------------ */
|
||||
/* WARNING: relative order of tokens is important. */
|
||||
|
||||
/* register */
|
||||
|
||||
DEF_ASM(r0)
|
||||
DEF_ASM(r1)
|
||||
DEF_ASM(r2)
|
||||
DEF_ASM(r3)
|
||||
DEF_ASM(r4)
|
||||
DEF_ASM(r5)
|
||||
DEF_ASM(r6)
|
||||
DEF_ASM(r7)
|
||||
DEF_ASM(r8)
|
||||
DEF_ASM(r9)
|
||||
DEF_ASM(r10)
|
||||
DEF_ASM(r11) /* fp */
|
||||
DEF_ASM(r12) /* ip[c] */
|
||||
DEF_ASM(r13) /* sp */
|
||||
DEF_ASM(r14) /* lr */
|
||||
DEF_ASM(r15) /* pc */
|
||||
|
||||
/* register macros */
|
||||
|
||||
DEF_ASM(fp) /* alias for r11 */
|
||||
DEF_ASM(ip) /* alias for r12 */
|
||||
DEF_ASM(sp) /* alias for r13 */
|
||||
DEF_ASM(lr) /* alias for r14 */
|
||||
DEF_ASM(pc) /* alias for r15 */
|
||||
|
||||
/* coprocessors */
|
||||
|
||||
DEF_ASM(p0)
|
||||
DEF_ASM(p1)
|
||||
DEF_ASM(p2)
|
||||
DEF_ASM(p3)
|
||||
DEF_ASM(p4)
|
||||
DEF_ASM(p5)
|
||||
DEF_ASM(p6)
|
||||
DEF_ASM(p7)
|
||||
DEF_ASM(p8)
|
||||
DEF_ASM(p9)
|
||||
DEF_ASM(p10)
|
||||
DEF_ASM(p11)
|
||||
DEF_ASM(p12)
|
||||
DEF_ASM(p13)
|
||||
DEF_ASM(p14)
|
||||
DEF_ASM(p15)
|
||||
|
||||
/* coprocessor registers */
|
||||
|
||||
DEF_ASM(c0)
|
||||
DEF_ASM(c1)
|
||||
DEF_ASM(c2)
|
||||
DEF_ASM(c3)
|
||||
DEF_ASM(c4)
|
||||
DEF_ASM(c5)
|
||||
DEF_ASM(c6)
|
||||
DEF_ASM(c7)
|
||||
DEF_ASM(c8)
|
||||
DEF_ASM(c9)
|
||||
DEF_ASM(c10)
|
||||
DEF_ASM(c11)
|
||||
DEF_ASM(c12)
|
||||
DEF_ASM(c13)
|
||||
DEF_ASM(c14)
|
||||
DEF_ASM(c15)
|
||||
|
||||
/* single-precision VFP registers */
|
||||
|
||||
DEF_ASM(s0)
|
||||
DEF_ASM(s1)
|
||||
DEF_ASM(s2)
|
||||
DEF_ASM(s3)
|
||||
DEF_ASM(s4)
|
||||
DEF_ASM(s5)
|
||||
DEF_ASM(s6)
|
||||
DEF_ASM(s7)
|
||||
DEF_ASM(s8)
|
||||
DEF_ASM(s9)
|
||||
DEF_ASM(s10)
|
||||
DEF_ASM(s11)
|
||||
DEF_ASM(s12)
|
||||
DEF_ASM(s13)
|
||||
DEF_ASM(s14)
|
||||
DEF_ASM(s15)
|
||||
DEF_ASM(s16)
|
||||
DEF_ASM(s17)
|
||||
DEF_ASM(s18)
|
||||
DEF_ASM(s19)
|
||||
DEF_ASM(s20)
|
||||
DEF_ASM(s21)
|
||||
DEF_ASM(s22)
|
||||
DEF_ASM(s23)
|
||||
DEF_ASM(s24)
|
||||
DEF_ASM(s25)
|
||||
DEF_ASM(s26)
|
||||
DEF_ASM(s27)
|
||||
DEF_ASM(s28)
|
||||
DEF_ASM(s29)
|
||||
DEF_ASM(s30)
|
||||
DEF_ASM(s31)
|
||||
|
||||
/* double-precision VFP registers */
|
||||
|
||||
DEF_ASM(d0)
|
||||
DEF_ASM(d1)
|
||||
DEF_ASM(d2)
|
||||
DEF_ASM(d3)
|
||||
DEF_ASM(d4)
|
||||
DEF_ASM(d5)
|
||||
DEF_ASM(d6)
|
||||
DEF_ASM(d7)
|
||||
DEF_ASM(d8)
|
||||
DEF_ASM(d9)
|
||||
DEF_ASM(d10)
|
||||
DEF_ASM(d11)
|
||||
DEF_ASM(d12)
|
||||
DEF_ASM(d13)
|
||||
DEF_ASM(d14)
|
||||
DEF_ASM(d15)
|
||||
|
||||
/* VFP status registers */
|
||||
|
||||
DEF_ASM(fpsid)
|
||||
DEF_ASM(fpscr)
|
||||
DEF_ASM(fpexc)
|
||||
|
||||
/* VFP magical ARM register */
|
||||
|
||||
DEF_ASM(apsr_nzcv)
|
||||
|
||||
/* data processing directives */
|
||||
|
||||
DEF_ASM(asl)
|
||||
|
||||
/* instructions that have no condition code */
|
||||
|
||||
DEF_ASM(cdp2)
|
||||
DEF_ASM(ldc2)
|
||||
DEF_ASM(ldc2l)
|
||||
DEF_ASM(stc2)
|
||||
DEF_ASM(stc2l)
|
||||
|
||||
#define ARM_INSTRUCTION_GROUP(tok) ((((tok) - TOK_ASM_nopeq) & 0xFFFFFFF0) + TOK_ASM_nopeq)
|
||||
|
||||
/* Note: condition code is 4 bits */
|
||||
#define DEF_ASM_CONDED(x) \
|
||||
DEF(TOK_ASM_ ## x ## eq, #x "eq") \
|
||||
DEF(TOK_ASM_ ## x ## ne, #x "ne") \
|
||||
DEF(TOK_ASM_ ## x ## cs, #x "cs") \
|
||||
DEF(TOK_ASM_ ## x ## cc, #x "cc") \
|
||||
DEF(TOK_ASM_ ## x ## mi, #x "mi") \
|
||||
DEF(TOK_ASM_ ## x ## pl, #x "pl") \
|
||||
DEF(TOK_ASM_ ## x ## vs, #x "vs") \
|
||||
DEF(TOK_ASM_ ## x ## vc, #x "vc") \
|
||||
DEF(TOK_ASM_ ## x ## hi, #x "hi") \
|
||||
DEF(TOK_ASM_ ## x ## ls, #x "ls") \
|
||||
DEF(TOK_ASM_ ## x ## ge, #x "ge") \
|
||||
DEF(TOK_ASM_ ## x ## lt, #x "lt") \
|
||||
DEF(TOK_ASM_ ## x ## gt, #x "gt") \
|
||||
DEF(TOK_ASM_ ## x ## le, #x "le") \
|
||||
DEF(TOK_ASM_ ## x, #x) \
|
||||
DEF(TOK_ASM_ ## x ## rsvd, #x "rsvd")
|
||||
|
||||
/* Note: condition code is 4 bits */
|
||||
#define DEF_ASM_CONDED_WITH_SUFFIX(x, y) \
|
||||
DEF(TOK_ASM_ ## x ## eq ## _ ## y, #x "eq." #y) \
|
||||
DEF(TOK_ASM_ ## x ## ne ## _ ## y, #x "ne." #y) \
|
||||
DEF(TOK_ASM_ ## x ## cs ## _ ## y, #x "cs." #y) \
|
||||
DEF(TOK_ASM_ ## x ## cc ## _ ## y, #x "cc." #y) \
|
||||
DEF(TOK_ASM_ ## x ## mi ## _ ## y, #x "mi." #y) \
|
||||
DEF(TOK_ASM_ ## x ## pl ## _ ## y, #x "pl." #y) \
|
||||
DEF(TOK_ASM_ ## x ## vs ## _ ## y, #x "vs." #y) \
|
||||
DEF(TOK_ASM_ ## x ## vc ## _ ## y, #x "vc." #y) \
|
||||
DEF(TOK_ASM_ ## x ## hi ## _ ## y, #x "hi." #y) \
|
||||
DEF(TOK_ASM_ ## x ## ls ## _ ## y, #x "ls." #y) \
|
||||
DEF(TOK_ASM_ ## x ## ge ## _ ## y, #x "ge." #y) \
|
||||
DEF(TOK_ASM_ ## x ## lt ## _ ## y, #x "lt." #y) \
|
||||
DEF(TOK_ASM_ ## x ## gt ## _ ## y, #x "gt." #y) \
|
||||
DEF(TOK_ASM_ ## x ## le ## _ ## y, #x "le." #y) \
|
||||
DEF(TOK_ASM_ ## x ## _ ## y, #x "." #y) \
|
||||
DEF(TOK_ASM_ ## x ## rsvd ## _ ## y, #x "rsvd." #y)
|
||||
|
||||
#define DEF_ASM_CONDED_VFP_F32_F64(x) \
|
||||
DEF_ASM_CONDED_WITH_SUFFIX(x, f32) \
|
||||
DEF_ASM_CONDED_WITH_SUFFIX(x, f64)
|
||||
|
||||
#define DEF_ASM_CONDED_WITH_TWO_SUFFIXES(x, y, z) \
|
||||
DEF(TOK_ASM_ ## x ## eq ## _ ## y ## _ ## z, #x "eq." #y "." #z) \
|
||||
DEF(TOK_ASM_ ## x ## ne ## _ ## y ## _ ## z, #x "ne." #y "." #z) \
|
||||
DEF(TOK_ASM_ ## x ## cs ## _ ## y ## _ ## z, #x "cs." #y "." #z) \
|
||||
DEF(TOK_ASM_ ## x ## cc ## _ ## y ## _ ## z, #x "cc." #y "." #z) \
|
||||
DEF(TOK_ASM_ ## x ## mi ## _ ## y ## _ ## z, #x "mi." #y "." #z) \
|
||||
DEF(TOK_ASM_ ## x ## pl ## _ ## y ## _ ## z, #x "pl." #y "." #z) \
|
||||
DEF(TOK_ASM_ ## x ## vs ## _ ## y ## _ ## z, #x "vs." #y "." #z) \
|
||||
DEF(TOK_ASM_ ## x ## vc ## _ ## y ## _ ## z, #x "vc." #y "." #z) \
|
||||
DEF(TOK_ASM_ ## x ## hi ## _ ## y ## _ ## z, #x "hi." #y "." #z) \
|
||||
DEF(TOK_ASM_ ## x ## ls ## _ ## y ## _ ## z, #x "ls." #y "." #z) \
|
||||
DEF(TOK_ASM_ ## x ## ge ## _ ## y ## _ ## z, #x "ge." #y "." #z) \
|
||||
DEF(TOK_ASM_ ## x ## lt ## _ ## y ## _ ## z, #x "lt." #y "." #z) \
|
||||
DEF(TOK_ASM_ ## x ## gt ## _ ## y ## _ ## z, #x "gt." #y "." #z) \
|
||||
DEF(TOK_ASM_ ## x ## le ## _ ## y ## _ ## z, #x "le." #y "." #z) \
|
||||
DEF(TOK_ASM_ ## x ## _ ## y ## _ ## z, #x "." #y "." #z) \
|
||||
DEF(TOK_ASM_ ## x ## rsvd ## _ ## y ## _ ## z, #x "rsvd." #y "." #z)
|
||||
|
||||
/* Note: add new tokens after nop (MUST always use DEF_ASM_CONDED) */
|
||||
|
||||
DEF_ASM_CONDED(nop)
|
||||
DEF_ASM_CONDED(wfe)
|
||||
DEF_ASM_CONDED(wfi)
|
||||
DEF_ASM_CONDED(swi)
|
||||
DEF_ASM_CONDED(svc)
|
||||
|
||||
/* misc */
|
||||
DEF_ASM_CONDED(clz)
|
||||
|
||||
/* size conversion */
|
||||
|
||||
DEF_ASM_CONDED(sxtb)
|
||||
DEF_ASM_CONDED(sxth)
|
||||
DEF_ASM_CONDED(uxtb)
|
||||
DEF_ASM_CONDED(uxth)
|
||||
DEF_ASM_CONDED(movt)
|
||||
DEF_ASM_CONDED(movw)
|
||||
|
||||
/* multiplication */
|
||||
|
||||
DEF_ASM_CONDED(mul)
|
||||
DEF_ASM_CONDED(muls)
|
||||
DEF_ASM_CONDED(mla)
|
||||
DEF_ASM_CONDED(mlas)
|
||||
DEF_ASM_CONDED(smull)
|
||||
DEF_ASM_CONDED(smulls)
|
||||
DEF_ASM_CONDED(umull)
|
||||
DEF_ASM_CONDED(umulls)
|
||||
DEF_ASM_CONDED(smlal)
|
||||
DEF_ASM_CONDED(smlals)
|
||||
DEF_ASM_CONDED(umlal)
|
||||
DEF_ASM_CONDED(umlals)
|
||||
|
||||
/* load/store */
|
||||
|
||||
DEF_ASM_CONDED(ldr)
|
||||
DEF_ASM_CONDED(ldrb)
|
||||
DEF_ASM_CONDED(str)
|
||||
DEF_ASM_CONDED(strb)
|
||||
DEF_ASM_CONDED(ldrex)
|
||||
DEF_ASM_CONDED(ldrexb)
|
||||
DEF_ASM_CONDED(strex)
|
||||
DEF_ASM_CONDED(strexb)
|
||||
DEF_ASM_CONDED(ldrh)
|
||||
DEF_ASM_CONDED(ldrsh)
|
||||
DEF_ASM_CONDED(ldrsb)
|
||||
DEF_ASM_CONDED(strh)
|
||||
|
||||
DEF_ASM_CONDED(stmda)
|
||||
DEF_ASM_CONDED(ldmda)
|
||||
DEF_ASM_CONDED(stm)
|
||||
DEF_ASM_CONDED(ldm)
|
||||
DEF_ASM_CONDED(stmia)
|
||||
DEF_ASM_CONDED(ldmia)
|
||||
DEF_ASM_CONDED(stmdb)
|
||||
DEF_ASM_CONDED(ldmdb)
|
||||
DEF_ASM_CONDED(stmib)
|
||||
DEF_ASM_CONDED(ldmib)
|
||||
|
||||
DEF_ASM_CONDED(ldc)
|
||||
DEF_ASM_CONDED(ldcl)
|
||||
DEF_ASM_CONDED(stc)
|
||||
DEF_ASM_CONDED(stcl)
|
||||
|
||||
/* instruction macros */
|
||||
|
||||
DEF_ASM_CONDED(push)
|
||||
DEF_ASM_CONDED(pop)
|
||||
|
||||
/* branches */
|
||||
|
||||
DEF_ASM_CONDED(b)
|
||||
DEF_ASM_CONDED(bl)
|
||||
DEF_ASM_CONDED(bx)
|
||||
DEF_ASM_CONDED(blx)
|
||||
|
||||
/* data processing instructions; order is important */
|
||||
|
||||
DEF_ASM_CONDED(and)
|
||||
DEF_ASM_CONDED(ands)
|
||||
DEF_ASM_CONDED(eor)
|
||||
DEF_ASM_CONDED(eors)
|
||||
DEF_ASM_CONDED(sub)
|
||||
DEF_ASM_CONDED(subs)
|
||||
DEF_ASM_CONDED(rsb)
|
||||
DEF_ASM_CONDED(rsbs)
|
||||
DEF_ASM_CONDED(add)
|
||||
DEF_ASM_CONDED(adds)
|
||||
DEF_ASM_CONDED(adc)
|
||||
DEF_ASM_CONDED(adcs)
|
||||
DEF_ASM_CONDED(sbc)
|
||||
DEF_ASM_CONDED(sbcs)
|
||||
DEF_ASM_CONDED(rsc)
|
||||
DEF_ASM_CONDED(rscs)
|
||||
DEF_ASM_CONDED(tst)
|
||||
DEF_ASM_CONDED(tsts) // necessary here--but not useful to the user
|
||||
DEF_ASM_CONDED(teq)
|
||||
DEF_ASM_CONDED(teqs) // necessary here--but not useful to the user
|
||||
DEF_ASM_CONDED(cmp)
|
||||
DEF_ASM_CONDED(cmps) // necessary here--but not useful to the user
|
||||
DEF_ASM_CONDED(cmn)
|
||||
DEF_ASM_CONDED(cmns) // necessary here--but not useful to the user
|
||||
DEF_ASM_CONDED(orr)
|
||||
DEF_ASM_CONDED(orrs)
|
||||
DEF_ASM_CONDED(mov)
|
||||
DEF_ASM_CONDED(movs)
|
||||
DEF_ASM_CONDED(bic)
|
||||
DEF_ASM_CONDED(bics)
|
||||
DEF_ASM_CONDED(mvn)
|
||||
DEF_ASM_CONDED(mvns)
|
||||
|
||||
DEF_ASM_CONDED(lsl)
|
||||
DEF_ASM_CONDED(lsls)
|
||||
DEF_ASM_CONDED(lsr)
|
||||
DEF_ASM_CONDED(lsrs)
|
||||
DEF_ASM_CONDED(asr)
|
||||
DEF_ASM_CONDED(asrs)
|
||||
DEF_ASM_CONDED(ror)
|
||||
DEF_ASM_CONDED(rors)
|
||||
DEF_ASM_CONDED(rrx)
|
||||
DEF_ASM_CONDED(rrxs)
|
||||
|
||||
DEF_ASM_CONDED(cdp)
|
||||
DEF_ASM_CONDED(mcr)
|
||||
DEF_ASM_CONDED(mrc)
|
||||
|
||||
// Floating point high-level instructions
|
||||
|
||||
DEF_ASM_CONDED(vldr)
|
||||
DEF_ASM_CONDED(vstr)
|
||||
|
||||
DEF_ASM_CONDED_VFP_F32_F64(vmla)
|
||||
DEF_ASM_CONDED_VFP_F32_F64(vmls)
|
||||
DEF_ASM_CONDED_VFP_F32_F64(vnmls)
|
||||
DEF_ASM_CONDED_VFP_F32_F64(vnmla)
|
||||
DEF_ASM_CONDED_VFP_F32_F64(vmul)
|
||||
DEF_ASM_CONDED_VFP_F32_F64(vnmul)
|
||||
DEF_ASM_CONDED_VFP_F32_F64(vadd)
|
||||
DEF_ASM_CONDED_VFP_F32_F64(vsub)
|
||||
DEF_ASM_CONDED_VFP_F32_F64(vdiv)
|
||||
DEF_ASM_CONDED_VFP_F32_F64(vneg)
|
||||
DEF_ASM_CONDED_VFP_F32_F64(vabs)
|
||||
DEF_ASM_CONDED_VFP_F32_F64(vsqrt)
|
||||
DEF_ASM_CONDED_VFP_F32_F64(vcmp)
|
||||
DEF_ASM_CONDED_VFP_F32_F64(vcmpe)
|
||||
DEF_ASM_CONDED_VFP_F32_F64(vmov)
|
||||
|
||||
DEF_ASM_CONDED_WITH_TWO_SUFFIXES(vcvtr, s32, f64)
|
||||
DEF_ASM_CONDED_WITH_TWO_SUFFIXES(vcvtr, s32, f32)
|
||||
DEF_ASM_CONDED_WITH_TWO_SUFFIXES(vcvtr, u32, f64)
|
||||
DEF_ASM_CONDED_WITH_TWO_SUFFIXES(vcvtr, u32, f32)
|
||||
|
||||
DEF_ASM_CONDED_WITH_TWO_SUFFIXES(vcvt, s32, f64)
|
||||
DEF_ASM_CONDED_WITH_TWO_SUFFIXES(vcvt, s32, f32)
|
||||
DEF_ASM_CONDED_WITH_TWO_SUFFIXES(vcvt, u32, f64)
|
||||
DEF_ASM_CONDED_WITH_TWO_SUFFIXES(vcvt, u32, f32)
|
||||
|
||||
DEF_ASM_CONDED_WITH_TWO_SUFFIXES(vcvt, f64, s32)
|
||||
DEF_ASM_CONDED_WITH_TWO_SUFFIXES(vcvt, f32, s32)
|
||||
DEF_ASM_CONDED_WITH_TWO_SUFFIXES(vcvt, f64, u32)
|
||||
DEF_ASM_CONDED_WITH_TWO_SUFFIXES(vcvt, f32, u32)
|
||||
|
||||
DEF_ASM_CONDED_WITH_TWO_SUFFIXES(vcvt, f64, f32)
|
||||
DEF_ASM_CONDED_WITH_TWO_SUFFIXES(vcvt, f32, f64)
|
||||
|
||||
DEF_ASM_CONDED(vpush)
|
||||
DEF_ASM_CONDED(vpop)
|
||||
DEF_ASM_CONDED(vldm)
|
||||
DEF_ASM_CONDED(vldmia)
|
||||
DEF_ASM_CONDED(vldmdb)
|
||||
DEF_ASM_CONDED(vstm)
|
||||
DEF_ASM_CONDED(vstmia)
|
||||
DEF_ASM_CONDED(vstmdb)
|
||||
DEF_ASM_CONDED(vmsr)
|
||||
DEF_ASM_CONDED(vmrs)
|
94
arm64-asm.c
94
arm64-asm.c
|
@ -1,94 +0,0 @@
|
|||
/*************************************************************/
|
||||
/*
|
||||
* ARM64 dummy assembler for TCC
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef TARGET_DEFS_ONLY
|
||||
|
||||
#define CONFIG_TCC_ASM
|
||||
#define NB_ASM_REGS 16
|
||||
|
||||
ST_FUNC void g(int c);
|
||||
ST_FUNC void gen_le16(int c);
|
||||
ST_FUNC void gen_le32(int c);
|
||||
|
||||
/*************************************************************/
|
||||
#else
|
||||
/*************************************************************/
|
||||
#define USING_GLOBALS
|
||||
#include "tcc.h"
|
||||
|
||||
static void asm_error(void)
|
||||
{
|
||||
tcc_error("ARM asm not implemented.");
|
||||
}
|
||||
|
||||
/* XXX: make it faster ? */
|
||||
ST_FUNC void g(int c)
|
||||
{
|
||||
int ind1;
|
||||
if (nocode_wanted)
|
||||
return;
|
||||
ind1 = ind + 1;
|
||||
if (ind1 > cur_text_section->data_allocated)
|
||||
section_realloc(cur_text_section, ind1);
|
||||
cur_text_section->data[ind] = c;
|
||||
ind = ind1;
|
||||
}
|
||||
|
||||
ST_FUNC void gen_le16 (int i)
|
||||
{
|
||||
g(i);
|
||||
g(i>>8);
|
||||
}
|
||||
|
||||
ST_FUNC void gen_le32 (int i)
|
||||
{
|
||||
gen_le16(i);
|
||||
gen_le16(i>>16);
|
||||
}
|
||||
|
||||
ST_FUNC void gen_expr32(ExprValue *pe)
|
||||
{
|
||||
gen_le32(pe->v);
|
||||
}
|
||||
|
||||
ST_FUNC void asm_opcode(TCCState *s1, int opcode)
|
||||
{
|
||||
asm_error();
|
||||
}
|
||||
|
||||
ST_FUNC void subst_asm_operand(CString *add_str, SValue *sv, int modifier)
|
||||
{
|
||||
asm_error();
|
||||
}
|
||||
|
||||
/* generate prolog and epilog code for asm statement */
|
||||
ST_FUNC void asm_gen_code(ASMOperand *operands, int nb_operands,
|
||||
int nb_outputs, int is_output,
|
||||
uint8_t *clobber_regs,
|
||||
int out_reg)
|
||||
{
|
||||
}
|
||||
|
||||
ST_FUNC void asm_compute_constraints(ASMOperand *operands,
|
||||
int nb_operands, int nb_outputs,
|
||||
const uint8_t *clobber_regs,
|
||||
int *pout_reg)
|
||||
{
|
||||
}
|
||||
|
||||
ST_FUNC void asm_clobber(uint8_t *clobber_regs, const char *str)
|
||||
{
|
||||
asm_error();
|
||||
}
|
||||
|
||||
ST_FUNC int asm_parse_regvar (int t)
|
||||
{
|
||||
asm_error();
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*************************************************************/
|
||||
#endif /* ndef TARGET_DEFS_ONLY */
|
2172
arm64-gen.c
2172
arm64-gen.c
File diff suppressed because it is too large
Load diff
322
arm64-link.c
322
arm64-link.c
|
@ -1,322 +0,0 @@
|
|||
#ifdef TARGET_DEFS_ONLY
|
||||
|
||||
#define EM_TCC_TARGET EM_AARCH64
|
||||
|
||||
#define R_DATA_32 R_AARCH64_ABS32
|
||||
#define R_DATA_PTR R_AARCH64_ABS64
|
||||
#define R_JMP_SLOT R_AARCH64_JUMP_SLOT
|
||||
#define R_GLOB_DAT R_AARCH64_GLOB_DAT
|
||||
#define R_COPY R_AARCH64_COPY
|
||||
#define R_RELATIVE R_AARCH64_RELATIVE
|
||||
|
||||
#define R_NUM R_AARCH64_NUM
|
||||
|
||||
#define ELF_START_ADDR 0x00400000
|
||||
#define ELF_PAGE_SIZE 0x10000
|
||||
|
||||
#define PCRELATIVE_DLLPLT 1
|
||||
#define RELOCATE_DLLPLT 1
|
||||
|
||||
#else /* !TARGET_DEFS_ONLY */
|
||||
|
||||
#include "tcc.h"
|
||||
|
||||
#ifdef NEED_RELOC_TYPE
|
||||
/* Returns 1 for a code relocation, 0 for a data relocation. For unknown
|
||||
relocations, returns -1. */
|
||||
ST_FUNC int code_reloc (int reloc_type)
|
||||
{
|
||||
switch (reloc_type) {
|
||||
case R_AARCH64_ABS32:
|
||||
case R_AARCH64_ABS64:
|
||||
case R_AARCH64_PREL32:
|
||||
case R_AARCH64_MOVW_UABS_G0_NC:
|
||||
case R_AARCH64_MOVW_UABS_G1_NC:
|
||||
case R_AARCH64_MOVW_UABS_G2_NC:
|
||||
case R_AARCH64_MOVW_UABS_G3:
|
||||
case R_AARCH64_ADR_PREL_PG_HI21:
|
||||
case R_AARCH64_ADD_ABS_LO12_NC:
|
||||
case R_AARCH64_ADR_GOT_PAGE:
|
||||
case R_AARCH64_LD64_GOT_LO12_NC:
|
||||
case R_AARCH64_LDST128_ABS_LO12_NC:
|
||||
case R_AARCH64_LDST64_ABS_LO12_NC:
|
||||
case R_AARCH64_LDST32_ABS_LO12_NC:
|
||||
case R_AARCH64_LDST16_ABS_LO12_NC:
|
||||
case R_AARCH64_LDST8_ABS_LO12_NC:
|
||||
case R_AARCH64_GLOB_DAT:
|
||||
case R_AARCH64_COPY:
|
||||
return 0;
|
||||
|
||||
case R_AARCH64_JUMP26:
|
||||
case R_AARCH64_CALL26:
|
||||
case R_AARCH64_JUMP_SLOT:
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Returns an enumerator to describe whether and when the relocation needs a
|
||||
GOT and/or PLT entry to be created. See tcc.h for a description of the
|
||||
different values. */
|
||||
ST_FUNC int gotplt_entry_type (int reloc_type)
|
||||
{
|
||||
switch (reloc_type) {
|
||||
case R_AARCH64_PREL32:
|
||||
case R_AARCH64_MOVW_UABS_G0_NC:
|
||||
case R_AARCH64_MOVW_UABS_G1_NC:
|
||||
case R_AARCH64_MOVW_UABS_G2_NC:
|
||||
case R_AARCH64_MOVW_UABS_G3:
|
||||
case R_AARCH64_ADR_PREL_PG_HI21:
|
||||
case R_AARCH64_ADD_ABS_LO12_NC:
|
||||
case R_AARCH64_LDST128_ABS_LO12_NC:
|
||||
case R_AARCH64_LDST64_ABS_LO12_NC:
|
||||
case R_AARCH64_LDST32_ABS_LO12_NC:
|
||||
case R_AARCH64_LDST16_ABS_LO12_NC:
|
||||
case R_AARCH64_LDST8_ABS_LO12_NC:
|
||||
case R_AARCH64_GLOB_DAT:
|
||||
case R_AARCH64_JUMP_SLOT:
|
||||
case R_AARCH64_COPY:
|
||||
return NO_GOTPLT_ENTRY;
|
||||
|
||||
case R_AARCH64_ABS32:
|
||||
case R_AARCH64_ABS64:
|
||||
case R_AARCH64_JUMP26:
|
||||
case R_AARCH64_CALL26:
|
||||
return AUTO_GOTPLT_ENTRY;
|
||||
|
||||
case R_AARCH64_ADR_GOT_PAGE:
|
||||
case R_AARCH64_LD64_GOT_LO12_NC:
|
||||
return ALWAYS_GOTPLT_ENTRY;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef NEED_BUILD_GOT
|
||||
ST_FUNC unsigned create_plt_entry(TCCState *s1, unsigned got_offset, struct sym_attr *attr)
|
||||
{
|
||||
Section *plt = s1->plt;
|
||||
uint8_t *p;
|
||||
unsigned plt_offset;
|
||||
|
||||
if (plt->data_offset == 0) {
|
||||
section_ptr_add(plt, 32);
|
||||
}
|
||||
plt_offset = plt->data_offset;
|
||||
|
||||
p = section_ptr_add(plt, 16);
|
||||
write32le(p, got_offset);
|
||||
write32le(p + 4, (uint64_t) got_offset >> 32);
|
||||
return plt_offset;
|
||||
}
|
||||
|
||||
/* relocate the PLT: compute addresses and offsets in the PLT now that final
|
||||
address for PLT and GOT are known (see fill_program_header) */
|
||||
ST_FUNC void relocate_plt(TCCState *s1)
|
||||
{
|
||||
uint8_t *p, *p_end;
|
||||
|
||||
if (!s1->plt)
|
||||
return;
|
||||
|
||||
p = s1->plt->data;
|
||||
p_end = p + s1->plt->data_offset;
|
||||
|
||||
if (p < p_end) {
|
||||
uint64_t plt = s1->plt->sh_addr;
|
||||
uint64_t got = s1->got->sh_addr + 16;
|
||||
uint64_t off = (got >> 12) - (plt >> 12);
|
||||
if ((off + ((uint32_t)1 << 20)) >> 21)
|
||||
tcc_error_noabort("Failed relocating PLT (off=0x%lx, got=0x%lx, plt=0x%lx)", (long)off, (long)got, (long)plt);
|
||||
write32le(p, 0xa9bf7bf0); // stp x16,x30,[sp,#-16]!
|
||||
write32le(p + 4, (0x90000010 | // adrp x16,...
|
||||
(off & 0x1ffffc) << 3 | (off & 3) << 29));
|
||||
write32le(p + 8, (0xf9400211 | // ldr x17,[x16,#...]
|
||||
(got & 0xff8) << 7));
|
||||
write32le(p + 12, (0x91000210 | // add x16,x16,#...
|
||||
(got & 0xfff) << 10));
|
||||
write32le(p + 16, 0xd61f0220); // br x17
|
||||
write32le(p + 20, 0xd503201f); // nop
|
||||
write32le(p + 24, 0xd503201f); // nop
|
||||
write32le(p + 28, 0xd503201f); // nop
|
||||
p += 32;
|
||||
got = s1->got->sh_addr;
|
||||
while (p < p_end) {
|
||||
uint64_t pc = plt + (p - s1->plt->data);
|
||||
uint64_t addr = got + read64le(p);
|
||||
uint64_t off = (addr >> 12) - (pc >> 12);
|
||||
if ((off + ((uint32_t)1 << 20)) >> 21)
|
||||
tcc_error_noabort("Failed relocating PLT (off=0x%lx, addr=0x%lx, pc=0x%lx)", (long)off, (long)addr, (long)pc);
|
||||
write32le(p, (0x90000010 | // adrp x16,...
|
||||
(off & 0x1ffffc) << 3 | (off & 3) << 29));
|
||||
write32le(p + 4, (0xf9400211 | // ldr x17,[x16,#...]
|
||||
(addr & 0xff8) << 7));
|
||||
write32le(p + 8, (0x91000210 | // add x16,x16,#...
|
||||
(addr & 0xfff) << 10));
|
||||
write32le(p + 12, 0xd61f0220); // br x17
|
||||
p += 16;
|
||||
}
|
||||
}
|
||||
|
||||
if (s1->plt->reloc) {
|
||||
ElfW_Rel *rel;
|
||||
p = s1->got->data;
|
||||
for_each_elem(s1->plt->reloc, 0, rel, ElfW_Rel) {
|
||||
write64le(p + rel->r_offset, s1->plt->sh_addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
ST_FUNC void relocate(TCCState *s1, ElfW_Rel *rel, int type, unsigned char *ptr, addr_t addr, addr_t val)
|
||||
{
|
||||
int sym_index = ELFW(R_SYM)(rel->r_info), esym_index;
|
||||
#ifdef DEBUG_RELOC
|
||||
ElfW(Sym) *sym = &((ElfW(Sym) *)symtab_section->data)[sym_index];
|
||||
#endif
|
||||
|
||||
switch(type) {
|
||||
case R_AARCH64_ABS64:
|
||||
if ((s1->output_type & TCC_OUTPUT_DYN)) {
|
||||
esym_index = get_sym_attr(s1, sym_index, 0)->dyn_index;
|
||||
qrel->r_offset = rel->r_offset;
|
||||
if (esym_index) {
|
||||
qrel->r_info = ELFW(R_INFO)(esym_index, R_AARCH64_ABS64);
|
||||
qrel->r_addend = rel->r_addend;
|
||||
qrel++;
|
||||
break;
|
||||
} else {
|
||||
qrel->r_info = ELFW(R_INFO)(0, R_AARCH64_RELATIVE);
|
||||
qrel->r_addend = read64le(ptr) + val;
|
||||
qrel++;
|
||||
}
|
||||
}
|
||||
add64le(ptr, val);
|
||||
return;
|
||||
case R_AARCH64_ABS32:
|
||||
if (s1->output_type & TCC_OUTPUT_DYN) {
|
||||
/* XXX: this logic may depend on TCC's codegen
|
||||
now TCC uses R_AARCH64_RELATIVE even for a 64bit pointer */
|
||||
qrel->r_offset = rel->r_offset;
|
||||
qrel->r_info = ELFW(R_INFO)(0, R_AARCH64_RELATIVE);
|
||||
/* Use sign extension! */
|
||||
qrel->r_addend = (int)read32le(ptr) + val;
|
||||
qrel++;
|
||||
}
|
||||
add32le(ptr, val);
|
||||
return;
|
||||
case R_AARCH64_PREL32:
|
||||
if (s1->output_type == TCC_OUTPUT_DLL) {
|
||||
/* DLL relocation */
|
||||
esym_index = get_sym_attr(s1, sym_index, 0)->dyn_index;
|
||||
if (esym_index) {
|
||||
qrel->r_offset = rel->r_offset;
|
||||
qrel->r_info = ELFW(R_INFO)(esym_index, R_AARCH64_PREL32);
|
||||
/* Use sign extension! */
|
||||
qrel->r_addend = (int)read32le(ptr) + rel->r_addend;
|
||||
qrel++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
add32le(ptr, val - addr);
|
||||
return;
|
||||
case R_AARCH64_MOVW_UABS_G0_NC:
|
||||
write32le(ptr, ((read32le(ptr) & 0xffe0001f) |
|
||||
(val & 0xffff) << 5));
|
||||
return;
|
||||
case R_AARCH64_MOVW_UABS_G1_NC:
|
||||
write32le(ptr, ((read32le(ptr) & 0xffe0001f) |
|
||||
(val >> 16 & 0xffff) << 5));
|
||||
return;
|
||||
case R_AARCH64_MOVW_UABS_G2_NC:
|
||||
write32le(ptr, ((read32le(ptr) & 0xffe0001f) |
|
||||
(val >> 32 & 0xffff) << 5));
|
||||
return;
|
||||
case R_AARCH64_MOVW_UABS_G3:
|
||||
write32le(ptr, ((read32le(ptr) & 0xffe0001f) |
|
||||
(val >> 48 & 0xffff) << 5));
|
||||
return;
|
||||
case R_AARCH64_ADR_PREL_PG_HI21: {
|
||||
uint64_t off = (val >> 12) - (addr >> 12);
|
||||
if ((off + ((uint64_t)1 << 20)) >> 21)
|
||||
tcc_error_noabort("R_AARCH64_ADR_PREL_PG_HI21 relocation failed");
|
||||
write32le(ptr, ((read32le(ptr) & 0x9f00001f) |
|
||||
(off & 0x1ffffc) << 3 | (off & 3) << 29));
|
||||
return;
|
||||
}
|
||||
case R_AARCH64_ADD_ABS_LO12_NC:
|
||||
case R_AARCH64_LDST8_ABS_LO12_NC:
|
||||
write32le(ptr, ((read32le(ptr) & 0xffc003ff) |
|
||||
(val & 0xfff) << 10));
|
||||
return;
|
||||
case R_AARCH64_LDST16_ABS_LO12_NC:
|
||||
write32le(ptr, ((read32le(ptr) & 0xffc003ff) |
|
||||
(val & 0xffe) << 9));
|
||||
return;
|
||||
case R_AARCH64_LDST32_ABS_LO12_NC:
|
||||
write32le(ptr, ((read32le(ptr) & 0xffc003ff) |
|
||||
(val & 0xffc) << 8));
|
||||
return;
|
||||
case R_AARCH64_LDST64_ABS_LO12_NC:
|
||||
write32le(ptr, ((read32le(ptr) & 0xffc003ff) |
|
||||
(val & 0xff8) << 7));
|
||||
return;
|
||||
case R_AARCH64_LDST128_ABS_LO12_NC:
|
||||
write32le(ptr, ((read32le(ptr) & 0xffc003ff) |
|
||||
(val & 0xff0) << 6));
|
||||
return;
|
||||
case R_AARCH64_JUMP26:
|
||||
case R_AARCH64_CALL26:
|
||||
#ifdef DEBUG_RELOC
|
||||
printf ("reloc %d @ 0x%lx: val=0x%lx name=%s\n", type, addr, val,
|
||||
(char *) symtab_section->link->data + sym->st_name);
|
||||
#endif
|
||||
if (((val - addr) + ((uint64_t)1 << 27)) & ~(uint64_t)0xffffffc)
|
||||
tcc_error_noabort("R_AARCH64_(JUMP|CALL)26 relocation failed"
|
||||
" (val=%lx, addr=%lx)", (long)val, (long)addr);
|
||||
write32le(ptr, (0x14000000 |
|
||||
(uint32_t)(type == R_AARCH64_CALL26) << 31 |
|
||||
((val - addr) >> 2 & 0x3ffffff)));
|
||||
return;
|
||||
case R_AARCH64_ADR_GOT_PAGE: {
|
||||
uint64_t off =
|
||||
(((s1->got->sh_addr +
|
||||
get_sym_attr(s1, sym_index, 0)->got_offset) >> 12) - (addr >> 12));
|
||||
if ((off + ((uint64_t)1 << 20)) >> 21)
|
||||
tcc_error_noabort("R_AARCH64_ADR_GOT_PAGE relocation failed");
|
||||
write32le(ptr, ((read32le(ptr) & 0x9f00001f) |
|
||||
(off & 0x1ffffc) << 3 | (off & 3) << 29));
|
||||
return;
|
||||
}
|
||||
case R_AARCH64_LD64_GOT_LO12_NC:
|
||||
write32le(ptr,
|
||||
((read32le(ptr) & 0xfff803ff) |
|
||||
((s1->got->sh_addr +
|
||||
get_sym_attr(s1, sym_index, 0)->got_offset) & 0xff8) << 7));
|
||||
return;
|
||||
case R_AARCH64_COPY:
|
||||
return;
|
||||
case R_AARCH64_GLOB_DAT:
|
||||
case R_AARCH64_JUMP_SLOT:
|
||||
/* They don't need addend */
|
||||
#ifdef DEBUG_RELOC
|
||||
printf ("reloc %d @ 0x%lx: val=0x%lx name=%s\n", type, addr,
|
||||
val - rel->r_addend,
|
||||
(char *) symtab_section->link->data + sym->st_name);
|
||||
#endif
|
||||
write64le(ptr, val - rel->r_addend);
|
||||
return;
|
||||
case R_AARCH64_RELATIVE:
|
||||
#ifdef TCC_TARGET_PE
|
||||
add32le(ptr, val - s1->pe_imagebase);
|
||||
#endif
|
||||
/* do nothing */
|
||||
return;
|
||||
default:
|
||||
fprintf(stderr, "FIXME: handle reloc type %x at %x [%p] to %x\n",
|
||||
type, (unsigned)addr, ptr, (unsigned)val);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* !TARGET_DEFS_ONLY */
|
3
bootstrap
Normal file
3
bootstrap
Normal file
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
autoreconf -i -f
|
125
c67-link.c
125
c67-link.c
|
@ -1,125 +0,0 @@
|
|||
#ifdef TARGET_DEFS_ONLY
|
||||
|
||||
#define EM_TCC_TARGET EM_C60
|
||||
|
||||
/* relocation type for 32 bit data relocation */
|
||||
#define R_DATA_32 R_C60_32
|
||||
#define R_DATA_PTR R_C60_32
|
||||
#define R_JMP_SLOT R_C60_JMP_SLOT
|
||||
#define R_GLOB_DAT R_C60_GLOB_DAT
|
||||
#define R_COPY R_C60_COPY
|
||||
#define R_RELATIVE R_C60_RELATIVE
|
||||
|
||||
#define R_NUM R_C60_NUM
|
||||
|
||||
#define ELF_START_ADDR 0x00000400
|
||||
#define ELF_PAGE_SIZE 0x1000
|
||||
|
||||
#define PCRELATIVE_DLLPLT 0
|
||||
#define RELOCATE_DLLPLT 0
|
||||
|
||||
#else /* !TARGET_DEFS_ONLY */
|
||||
|
||||
#include "tcc.h"
|
||||
|
||||
/* Returns 1 for a code relocation, 0 for a data relocation. For unknown
|
||||
relocations, returns -1. */
|
||||
ST_FUNC int code_reloc (int reloc_type)
|
||||
{
|
||||
switch (reloc_type) {
|
||||
case R_C60_32:
|
||||
case R_C60LO16:
|
||||
case R_C60HI16:
|
||||
case R_C60_GOT32:
|
||||
case R_C60_GOTOFF:
|
||||
case R_C60_GOTPC:
|
||||
case R_C60_COPY:
|
||||
return 0;
|
||||
|
||||
case R_C60_PLT32:
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Returns an enumerator to describe whether and when the relocation needs a
|
||||
GOT and/or PLT entry to be created. See tcc.h for a description of the
|
||||
different values. */
|
||||
ST_FUNC int gotplt_entry_type (int reloc_type)
|
||||
{
|
||||
switch (reloc_type) {
|
||||
case R_C60_32:
|
||||
case R_C60LO16:
|
||||
case R_C60HI16:
|
||||
case R_C60_COPY:
|
||||
return NO_GOTPLT_ENTRY;
|
||||
|
||||
case R_C60_GOTOFF:
|
||||
case R_C60_GOTPC:
|
||||
return BUILD_GOT_ONLY;
|
||||
|
||||
case R_C60_PLT32:
|
||||
case R_C60_GOT32:
|
||||
return ALWAYS_GOTPLT_ENTRY;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
ST_FUNC unsigned create_plt_entry(TCCState *s1, unsigned got_offset, struct sym_attr *attr)
|
||||
{
|
||||
tcc_error_noabort("C67 got not implemented");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* relocate the PLT: compute addresses and offsets in the PLT now that final
|
||||
address for PLT and GOT are known (see fill_program_header) */
|
||||
ST_FUNC void relocate_plt(TCCState *s1)
|
||||
{
|
||||
uint8_t *p, *p_end;
|
||||
|
||||
if (!s1->plt)
|
||||
return;
|
||||
|
||||
p = s1->plt->data;
|
||||
p_end = p + s1->plt->data_offset;
|
||||
|
||||
if (p < p_end) {
|
||||
/* XXX: TODO */
|
||||
while (p < p_end) {
|
||||
/* XXX: TODO */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ST_FUNC void relocate(TCCState *s1, ElfW_Rel *rel, int type, unsigned char *ptr, addr_t addr, addr_t val)
|
||||
{
|
||||
switch(type) {
|
||||
case R_C60_32:
|
||||
*(int *)ptr += val;
|
||||
break;
|
||||
case R_C60LO16:
|
||||
{
|
||||
uint32_t orig;
|
||||
|
||||
/* put the low 16 bits of the absolute address add to what is
|
||||
already there */
|
||||
orig = ((*(int *)(ptr )) >> 7) & 0xffff;
|
||||
orig |= (((*(int *)(ptr+4)) >> 7) & 0xffff) << 16;
|
||||
|
||||
/* patch both at once - assumes always in pairs Low - High */
|
||||
*(int *) ptr = (*(int *) ptr & (~(0xffff << 7)) ) |
|
||||
(((val+orig) & 0xffff) << 7);
|
||||
*(int *)(ptr+4) = (*(int *)(ptr+4) & (~(0xffff << 7)) ) |
|
||||
((((val+orig)>>16) & 0xffff) << 7);
|
||||
}
|
||||
break;
|
||||
case R_C60HI16:
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr,"FIXME: handle reloc type %x at %x [%p] to %x\n",
|
||||
type, (unsigned) addr, ptr, (unsigned) val);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* !TARGET_DEFS_ONLY */
|
239
coff.h
239
coff.h
|
@ -3,82 +3,58 @@
|
|||
/* COFF data structures and related definitions used by the linker */
|
||||
/**************************************************************************/
|
||||
|
||||
# include <stdint.h>
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* COFF FILE HEADER */
|
||||
/*------------------------------------------------------------------------*/
|
||||
struct filehdr {
|
||||
unsigned short f_magic; /* magic number */
|
||||
unsigned short f_nscns; /* number of sections */
|
||||
long f_timdat; /* time & date stamp */
|
||||
long f_symptr; /* file pointer to symtab */
|
||||
long f_nsyms; /* number of symtab entries */
|
||||
unsigned short f_opthdr; /* sizeof(optional hdr) */
|
||||
unsigned short f_flags; /* flags */
|
||||
unsigned short f_TargetID; /* for C6x = 0x0099 */
|
||||
};
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* File header flags */
|
||||
/*------------------------------------------------------------------------*/
|
||||
#define F_RELFLG 0x01 /* relocation info stripped from file */
|
||||
#define F_EXEC 0x02 /* file is executable (no unresolved refs) */
|
||||
#define F_LNNO 0x04 /* line numbers stripped from file */
|
||||
#define F_LSYMS 0x08 /* local symbols stripped from file */
|
||||
#define F_GSP10 0x10 /* 34010 version */
|
||||
#define F_GSP20 0x20 /* 34020 version */
|
||||
#define F_SWABD 0x40 /* bytes swabbed (in names) */
|
||||
#define F_AR16WR 0x80 /* byte ordering of an AR16WR (PDP-11) */
|
||||
#define F_LITTLE 0x100 /* byte ordering of an AR32WR (vax) */
|
||||
#define F_BIG 0x200 /* byte ordering of an AR32W (3B, maxi) */
|
||||
#define F_PATCH 0x400 /* contains "patch" list in optional header */
|
||||
#define F_NODF 0x400
|
||||
typedef struct filehdr
|
||||
{
|
||||
uint16_t f_magic;
|
||||
uint16_t f_nscns;
|
||||
int32_t f_timdat;
|
||||
int32_t f_symptr;
|
||||
int32_t f_nsyms;
|
||||
uint16_t f_opthdr;
|
||||
uint16_t f_flags;
|
||||
} FILHDR;
|
||||
|
||||
#define F_VERSION (F_GSP10 | F_GSP20)
|
||||
#define F_BYTE_ORDER (F_LITTLE | F_BIG)
|
||||
#define FILHDR struct filehdr
|
||||
# define FILHSZ sizeof(FILHDR)
|
||||
|
||||
/* #define FILHSZ sizeof(FILHDR) */
|
||||
#define FILHSZ 22 /* above rounds to align on 4 bytes which causes problems */
|
||||
# define F_MACH_I386 0x14c
|
||||
|
||||
#define COFF_C67_MAGIC 0x00c2
|
||||
# define F_RELFLG 0x0001
|
||||
# define F_EXEC 0x0002
|
||||
# define F_LNNO 0x0004
|
||||
# define F_LSYMS 0x0008
|
||||
# define F_LITTLE 0x0100
|
||||
# define F_BIG 0x0200
|
||||
# define F_SYMMERGE 0x1000
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* Macros to recognize magic numbers */
|
||||
/*------------------------------------------------------------------------*/
|
||||
#define ISMAGIC(x) (((unsigned short)(x))==(unsigned short)magic)
|
||||
#define ISARCHIVE(x) ((((unsigned short)(x))==(unsigned short)ARTYPE))
|
||||
#define BADMAGIC(x) (((unsigned short)(x) & 0x8080) && !ISMAGIC(x))
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* OPTIONAL FILE HEADER */
|
||||
/*------------------------------------------------------------------------*/
|
||||
typedef struct aouthdr {
|
||||
short magic; /* see magic.h */
|
||||
short vstamp; /* version stamp */
|
||||
long tsize; /* text size in bytes, padded to FW bdry*/
|
||||
long dsize; /* initialized data " " */
|
||||
long bsize; /* uninitialized data " " */
|
||||
long entrypt; /* entry pt. */
|
||||
long text_start; /* base of text used for this file */
|
||||
long data_start; /* base of data used for this file */
|
||||
typedef struct aouthdr
|
||||
{
|
||||
int16_t magic;
|
||||
int16_t vstamp;
|
||||
int32_t tsize;
|
||||
int32_t dsize;
|
||||
int32_t bsize;
|
||||
int32_t entry;
|
||||
int32_t text_start;
|
||||
int32_t data_start;
|
||||
} AOUTHDR;
|
||||
|
||||
#define AOUTSZ sizeof(AOUTHDR)
|
||||
# define AOUTHSZ sizeof(AOUTHDR)
|
||||
|
||||
/*----------------------------------------------------------------------*/
|
||||
/* When a UNIX aout header is to be built in the optional header, */
|
||||
/* the following magic numbers can appear in that header: */
|
||||
/* */
|
||||
/* AOUT1MAGIC : default : readonly sharable text segment */
|
||||
/* AOUT2MAGIC: : writable text segment */
|
||||
/* PAGEMAGIC : : configured for paging */
|
||||
/*----------------------------------------------------------------------*/
|
||||
#define AOUT1MAGIC 0410
|
||||
#define AOUT2MAGIC 0407
|
||||
#define PAGEMAGIC 0413
|
||||
# define OMAGIC 0404
|
||||
# define NMAGIC 0410
|
||||
# define ZMAGIC 0413
|
||||
# define STMAGIC 0401
|
||||
# define SHMAGIC 0443
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* COMMON ARCHIVE FILE STRUCTURES */
|
||||
/* */
|
||||
|
@ -125,28 +101,42 @@ struct ar_hdr /* archive file member header - printable ascii */
|
|||
char ar_fmag[2]; /* ARFMAG - string to end header */
|
||||
};
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* SECTION HEADER */
|
||||
/*------------------------------------------------------------------------*/
|
||||
struct scnhdr {
|
||||
char s_name[8]; /* section name */
|
||||
long s_paddr; /* physical address */
|
||||
long s_vaddr; /* virtual address */
|
||||
long s_size; /* section size */
|
||||
long s_scnptr; /* file ptr to raw data for section */
|
||||
long s_relptr; /* file ptr to relocation */
|
||||
long s_lnnoptr; /* file ptr to line numbers */
|
||||
unsigned int s_nreloc; /* number of relocation entries */
|
||||
unsigned int s_nlnno; /* number of line number entries */
|
||||
unsigned int s_flags; /* flags */
|
||||
unsigned short s_reserved; /* reserved byte */
|
||||
unsigned short s_page; /* memory page id */
|
||||
};
|
||||
|
||||
#define SCNHDR struct scnhdr
|
||||
typedef struct scnhdr
|
||||
{
|
||||
int8_t s_name[8];
|
||||
int32_t s_paddr;
|
||||
int32_t s_vaddr;
|
||||
int32_t s_size;
|
||||
int32_t s_scnptr;
|
||||
int32_t s_relptr;
|
||||
int32_t s_lnnoptr;
|
||||
uint16_t s_nreloc;
|
||||
uint16_t s_nlnno;
|
||||
int32_t s_flags;
|
||||
} __attribute__((packed)) SCNHDR;
|
||||
|
||||
# define SCNHSZ sizeof(SCNHDR)
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* The low 4 bits of s_flags is used as a section "type" */
|
||||
/*------------------------------------------------------------------------*/
|
||||
# define STYP_REG 0x000 /* "regular" : allocated, relocated, loaded */
|
||||
# define STYP_DSECT 0x001 /* "dummy" : not allocated, relocated, not loaded */
|
||||
# define STYP_NOLOAD 0x002 /* "noload" : allocated, relocated, not loaded */
|
||||
# define STYP_GROUP 0x004 /* "grouped" : formed of input sections */
|
||||
# define STYP_PAD 0x008 /* "padding" : not allocated, not relocated, loaded */
|
||||
# define STYP_COPY 0x010 /* "copy" : used for C init tables */
|
||||
# define STYP_TEXT 0x020 /* section contains text only */
|
||||
# define STYP_DATA 0x040 /* section contains data only */
|
||||
# define STYP_BSS 0x080 /* section contains bss only */
|
||||
# define STYP_INFO 0x200
|
||||
# define STYP_OVER 0x400
|
||||
# define STYP_LIB 0x800
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* Define constants for names of "special" sections */
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
@ -156,67 +146,28 @@ struct scnhdr {
|
|||
#define _CINIT ".cinit"
|
||||
#define _TV ".tv"
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* The low 4 bits of s_flags is used as a section "type" */
|
||||
/*------------------------------------------------------------------------*/
|
||||
#define STYP_REG 0x00 /* "regular" : allocated, relocated, loaded */
|
||||
#define STYP_DSECT 0x01 /* "dummy" : not allocated, relocated, not loaded */
|
||||
#define STYP_NOLOAD 0x02 /* "noload" : allocated, relocated, not loaded */
|
||||
#define STYP_GROUP 0x04 /* "grouped" : formed of input sections */
|
||||
#define STYP_PAD 0x08 /* "padding" : not allocated, not relocated, loaded */
|
||||
#define STYP_COPY 0x10 /* "copy" : used for C init tables -
|
||||
not allocated, relocated,
|
||||
loaded; reloc & lineno
|
||||
entries processed normally */
|
||||
#define STYP_TEXT 0x20 /* section contains text only */
|
||||
#define STYP_DATA 0x40 /* section contains data only */
|
||||
#define STYP_BSS 0x80 /* section contains bss only */
|
||||
|
||||
#define STYP_ALIGN 0x100 /* align flag passed by old version assemblers */
|
||||
#define ALIGN_MASK 0x0F00 /* part of s_flags that is used for align vals */
|
||||
#define ALIGNSIZE(x) (1 << ((x & ALIGN_MASK) >> 8))
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* RELOCATION ENTRIES */
|
||||
/*------------------------------------------------------------------------*/
|
||||
struct reloc
|
||||
typedef struct reloc
|
||||
{
|
||||
long r_vaddr; /* (virtual) address of reference */
|
||||
short r_symndx; /* index into symbol table */
|
||||
unsigned short r_disp; /* additional bits for address calculation */
|
||||
unsigned short r_type; /* relocation type */
|
||||
};
|
||||
|
||||
#define RELOC struct reloc
|
||||
#define RELSZ 10 /* sizeof(RELOC) */
|
||||
uint32_t r_vaddr; /* address of reference */
|
||||
uint32_t r_symndx; /* symbol address */
|
||||
uint16_t r_type; /* relocation type */
|
||||
} __attribute__((packed)) RELOC;
|
||||
# define RELSZ 10
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
/* define all relocation types */
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
#define R_ABS 0 /* absolute address - no relocation */
|
||||
#define R_DIR16 01 /* UNUSED */
|
||||
#define R_REL16 02 /* UNUSED */
|
||||
#define R_DIR24 04 /* UNUSED */
|
||||
#define R_REL24 05 /* 24 bits, direct */
|
||||
#define R_DIR32 06 /* UNUSED */
|
||||
#define R_RELBYTE 017 /* 8 bits, direct */
|
||||
#define R_RELWORD 020 /* 16 bits, direct */
|
||||
#define R_RELLONG 021 /* 32 bits, direct */
|
||||
#define R_PCRBYTE 022 /* 8 bits, PC-relative */
|
||||
#define R_PCRWORD 023 /* 16 bits, PC-relative */
|
||||
#define R_PCRLONG 024 /* 32 bits, PC-relative */
|
||||
#define R_OCRLONG 030 /* GSP: 32 bits, one's complement direct */
|
||||
#define R_GSPPCR16 031 /* GSP: 16 bits, PC relative (in words) */
|
||||
#define R_GSPOPR32 032 /* GSP: 32 bits, direct big-endian */
|
||||
#define R_PARTLS16 040 /* Brahma: 16 bit offset of 24 bit address*/
|
||||
#define R_PARTMS8 041 /* Brahma: 8 bit page of 24 bit address */
|
||||
#define R_PARTLS7 050 /* DSP: 7 bit offset of 16 bit address */
|
||||
#define R_PARTMS9 051 /* DSP: 9 bit page of 16 bit address */
|
||||
#define R_REL13 052 /* DSP: 13 bits, direct */
|
||||
# define R_ABS 0x00 /* absolute address - no relocation */
|
||||
# define R_DIR32 0x06 /* */
|
||||
# define R_DIR32NB 0x07 /* */
|
||||
# define R_SECREL 0x0B
|
||||
# define R_REL32 0x24 /* 32 bits, PC-relative */
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* LINE NUMBER ENTRIES */
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
@ -234,7 +185,6 @@ struct lineno
|
|||
#define LINENO struct lineno
|
||||
#define LINESZ 6 /* sizeof(LINENO) */
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* STORAGE CLASSES */
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
@ -266,8 +216,7 @@ struct lineno
|
|||
#define C_LINE 104 /* dummy sclass for line number entry */
|
||||
#define C_ALIAS 105 /* duplicate tag */
|
||||
#define C_HIDDEN 106 /* special storage class for external */
|
||||
/* symbols in dmert public libraries */
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* SYMBOL TABLE ENTRIES */
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
@ -276,25 +225,26 @@ struct lineno
|
|||
#define FILNMLEN 14 /* Number of characters in a file name */
|
||||
#define DIMNUM 4 /* Number of array dimensions in auxiliary entry */
|
||||
|
||||
|
||||
struct syment
|
||||
typedef struct syment
|
||||
{
|
||||
union
|
||||
{
|
||||
char _n_name[SYMNMLEN]; /* old COFF version */
|
||||
char _n_name[SYMNMLEN]; /* symbol name */
|
||||
struct
|
||||
{
|
||||
long _n_zeroes; /* new == 0 */
|
||||
long _n_offset; /* offset into string table */
|
||||
int32_t _n_zeroes; /* symbol name */
|
||||
int32_t _n_offset; /* loc in str table */
|
||||
} _n_n;
|
||||
char *_n_nptr[2]; /* allows for overlaying */
|
||||
uint32_t _n_nptr[2];
|
||||
} _n;
|
||||
long n_value; /* value of symbol */
|
||||
short n_scnum; /* section number */
|
||||
unsigned short n_type; /* type and derived type */
|
||||
char n_sclass; /* storage class */
|
||||
char n_numaux; /* number of aux. entries */
|
||||
};
|
||||
uint32_t n_value;
|
||||
int16_t n_scnum;
|
||||
uint16_t n_type;
|
||||
int8_t n_sclass;
|
||||
int8_t n_numaux;
|
||||
} __attribute__((packed)) SYMENT;
|
||||
|
||||
# define SYMESZ 18
|
||||
|
||||
#define n_name _n._n_name
|
||||
#define n_nptr _n._n_nptr[1]
|
||||
|
@ -312,7 +262,6 @@ struct syment
|
|||
#define N_TV (unsigned short)-3 /* needs transfer vector (preload) */
|
||||
#define P_TV (unsigned short)-4 /* needs transfer vector (postload) */
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* The fundamental type of a symbol packed into the low */
|
||||
/* 4 bits of the word. */
|
||||
|
@ -370,7 +319,6 @@ struct syment
|
|||
#define INCREF_COFF(x) ((((x)&~N_BTMASK_COFF)<<N_TSHIFT_COFF)|(DT_PTR<<N_BTSHFT_COFF)|(x&N_BTMASK_COFF))
|
||||
#define DECREF_COFF(x) ((((x)>>N_TSHIFT_COFF)&~N_BTMASK_COFF)|((x)&N_BTMASK_COFF))
|
||||
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
/* AUXILIARY SYMBOL ENTRY */
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
@ -414,9 +362,6 @@ union auxent
|
|||
} x_scn;
|
||||
};
|
||||
|
||||
#define SYMENT struct syment
|
||||
#define SYMESZ 18 /* sizeof(SYMENT) */
|
||||
|
||||
#define AUXENT union auxent
|
||||
#define AUXESZ 18 /* sizeof(AUXENT) */
|
||||
|
||||
|
|
750
configure
vendored
750
configure
vendored
|
@ -1,750 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# tcc configure script (c) 2003 Fabrice Bellard
|
||||
|
||||
# set temporary file name
|
||||
# if test ! -z "$TMPDIR" ; then
|
||||
# TMPDIR1="${TMPDIR}"
|
||||
# elif test ! -z "$TEMPDIR" ; then
|
||||
# TMPDIR1="${TEMPDIR}"
|
||||
# else
|
||||
# TMPDIR1="/tmp"
|
||||
# fi
|
||||
#
|
||||
# bashism: TMPN="${TMPDIR1}/tcc-conf-${RANDOM}-$$-${RANDOM}.c"
|
||||
|
||||
TMPN="./conftest-$$"
|
||||
TMPH=$TMPN.h
|
||||
|
||||
# default parameters
|
||||
prefix=""
|
||||
execprefix=""
|
||||
bindir=""
|
||||
libdir=""
|
||||
tccdir=""
|
||||
includedir=""
|
||||
mandir=""
|
||||
infodir=""
|
||||
sysroot=""
|
||||
cross_prefix=""
|
||||
cc="gcc"
|
||||
ar="ar"
|
||||
bigendian="no"
|
||||
mingw32="no"
|
||||
LIBSUF=".a"
|
||||
EXESUF=""
|
||||
DLLSUF=".so"
|
||||
tcc_usrinclude=""
|
||||
tcc_sysincludepaths=""
|
||||
tcc_libpaths=""
|
||||
tcc_crtprefix=""
|
||||
tcc_elfinterp=""
|
||||
triplet=
|
||||
tcc_lddir=
|
||||
confvars=
|
||||
suggest="yes"
|
||||
gcc_major=0
|
||||
gcc_minor=0
|
||||
cc_name="gcc"
|
||||
ar_set=
|
||||
cpu=
|
||||
cpuver=
|
||||
dwarf=
|
||||
targetos=
|
||||
build_cross=
|
||||
|
||||
# use CC/AR from environment when set
|
||||
test -n "$CC" && cc="$CC"
|
||||
test -n "$AR" && ar="$AR"
|
||||
|
||||
# set default CFLAGS if unset in environment
|
||||
test -z "$CFLAGS" && CFLAGS="-Wall -O2"
|
||||
|
||||
# find source path
|
||||
source_path=${0%configure}
|
||||
source_path=${source_path%/}
|
||||
|
||||
# $1: --OPTNAME=VALUE [, $2: NAME to assign-to instead of OPTNAME]
|
||||
assign_opt() {
|
||||
set -- "${2:-${1%%=*}}" "${1#*=}" # [--OPT]NAME VALUE
|
||||
eval ${1#--}=\$2 # no risk of IFS/glob in [OPT]NAME
|
||||
}
|
||||
|
||||
# succeed if $1 doesn't IFS-split funny (globs, spaces, ...)
|
||||
good_split() {
|
||||
set -- "$1" $1
|
||||
test $# = 2 && test "$1" = "$2"
|
||||
}
|
||||
|
||||
# $1: NAME[=VALUE] succeed if confvars has NAME or NAME=* element
|
||||
confvars_has() {
|
||||
! case " $confvars " in *" ${1%%=*} "* | *" ${1%%=*}="*)
|
||||
false
|
||||
esac
|
||||
}
|
||||
|
||||
# [multiple] NAME or NAME=VAL
|
||||
confvars_set() {
|
||||
for cv; do
|
||||
good_split "$cv" || { echo "configure: ERROR: bad config '$cv'"; exit 1; }
|
||||
confvars_has "$cv" && echo "configure: WARNING: duplicate config '$cv'"
|
||||
confvars="$confvars $cv"
|
||||
done
|
||||
}
|
||||
|
||||
for opt do
|
||||
eval opt=\"$opt\"
|
||||
case "$opt" in
|
||||
--prefix=*) assign_opt "$opt"
|
||||
;;
|
||||
--exec-prefix=*) assign_opt "$opt" execprefix
|
||||
;;
|
||||
--tccdir=*) assign_opt "$opt"
|
||||
;;
|
||||
--bindir=*) assign_opt "$opt"
|
||||
;;
|
||||
--libdir=*) assign_opt "$opt"
|
||||
;;
|
||||
--includedir=*) assign_opt "$opt"
|
||||
;;
|
||||
--sharedir=*) assign_opt "$opt"
|
||||
;;
|
||||
--mandir=*) assign_opt "$opt"
|
||||
;;
|
||||
--infodir=*) assign_opt "$opt"
|
||||
;;
|
||||
--docdir=*) assign_opt "$opt"
|
||||
;;
|
||||
--sysroot=*) assign_opt "$opt"
|
||||
;;
|
||||
--targetos=*) assign_opt "$opt"
|
||||
;;
|
||||
--source-path=*) assign_opt "$opt" source_path
|
||||
;;
|
||||
--cross-prefix=*) assign_opt "$opt" cross_prefix
|
||||
;;
|
||||
--cc=*) assign_opt "$opt"
|
||||
;;
|
||||
--ar=*) assign_opt "$opt" ; ar_set="yes"
|
||||
;;
|
||||
--extra-cflags=*) assign_opt "$opt" CFLAGS
|
||||
;;
|
||||
--extra-ldflags=*) assign_opt "$opt" LDFLAGS
|
||||
;;
|
||||
--extra-libs=*) assign_opt "$opt" extralibs
|
||||
;;
|
||||
--sysincludepaths=*) assign_opt "$opt" tcc_sysincludepaths
|
||||
;;
|
||||
--libpaths=*) assign_opt "$opt" tcc_libpaths
|
||||
;;
|
||||
--crtprefix=*) assign_opt "$opt" tcc_crtprefix
|
||||
;;
|
||||
--elfinterp=*) assign_opt "$opt" tcc_elfinterp
|
||||
;;
|
||||
--triplet=*) assign_opt "$opt"
|
||||
;;
|
||||
--cpu=*) assign_opt "$opt"
|
||||
;;
|
||||
--dwarf=*) confvars_set "dwarf=${opt#*=}"
|
||||
;;
|
||||
--enable-cross) confvars_set cross
|
||||
;;
|
||||
--disable-static) confvars_set static=no
|
||||
;;
|
||||
--enable-static) confvars_set static
|
||||
;;
|
||||
--disable-rpath) confvars_set rpath=no
|
||||
;;
|
||||
--debug) confvars_set debug
|
||||
;;
|
||||
--with-libgcc) confvars_set libgcc
|
||||
;;
|
||||
--with-selinux) confvars_set selinux
|
||||
;;
|
||||
--tcc-switches=*) assign_opt "$opt" tcc_switches
|
||||
;;
|
||||
--config-mingw32) mingw32=yes
|
||||
;;
|
||||
--config-mingw32=*) assign_opt "$opt" mingw32
|
||||
;;
|
||||
--config-*) confvars_set "${opt#--config-}"; suggest="no"
|
||||
;;
|
||||
--help|-h) show_help="yes"
|
||||
;;
|
||||
*) echo "configure: WARNING: unrecognized option $opt"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
show_help() {
|
||||
cat << EOF
|
||||
Usage: configure [options]
|
||||
Options: [defaults in brackets after descriptions]
|
||||
|
||||
Standard options:
|
||||
--help print this message
|
||||
--prefix=PREFIX install in PREFIX [$prefix]
|
||||
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
|
||||
[same as prefix]
|
||||
--bindir=DIR user executables in DIR [EPREFIX/bin]
|
||||
--libdir=DIR object code libraries in DIR [EPREFIX/lib]
|
||||
--tccdir=DIR installation directory [EPREFIX/lib/tcc]
|
||||
--includedir=DIR C header files in DIR [PREFIX/include]
|
||||
--sharedir=DIR documentation root DIR [PREFIX/share]
|
||||
--docdir=DIR documentation in DIR [SHAREDIR/doc/tcc]
|
||||
--mandir=DIR man documentation in DIR [SHAREDIR/man]
|
||||
--infodir=DIR info documentation in DIR [SHAREDIR/info]
|
||||
|
||||
Advanced options (experts only):
|
||||
--source-path=PATH path of source code [$source_path]
|
||||
--sysroot=PREFIX prepend PREFIX to library/include paths [$sysroot]
|
||||
--cc=CC use C compiler CC [$cc]
|
||||
--ar=AR create archives using AR [$ar]
|
||||
--extra-cflags= specify compiler flags [$CFLAGS]
|
||||
--extra-ldflags= specify linker options [$LDFLAGS]
|
||||
|
||||
--debug include debug info with resulting binaries
|
||||
--disable-static make libtcc.so instead of libtcc.a
|
||||
--enable-static make libtcc.a instead of libtcc.dll (win32)
|
||||
--disable-rpath disable use of -rpath with libtcc.so
|
||||
--with-libgcc use libgcc_s.so.1 instead of libtcc1.a
|
||||
--with-selinux use mmap for executable memory (tcc -run)
|
||||
--enable-cross build cross compilers (see also 'make help')
|
||||
|
||||
--sysincludepaths=... specify system include paths, colon separated
|
||||
--libpaths=... specify system library paths, colon separated
|
||||
--crtprefix=... specify locations of crt?.o, colon separated
|
||||
--elfinterp=... specify elf interpreter
|
||||
--triplet=... specify system library/include directory triplet
|
||||
--tcc-switches=... specify implicit switches passed to tcc
|
||||
|
||||
--config-uClibc,-musl enable system specific configurations
|
||||
--config-mingw32[=yes|no] build on windows using msys, busybox, etc.
|
||||
--config-backtrace=no disable stack backtraces (with -run or -bt)
|
||||
--config-bcheck=no disable bounds checker (-b)
|
||||
--config-predefs=no do not compile tccdefs.h, instead just include
|
||||
--config-new_macho=no|yes force apple object format (autodetect osx <= 10)
|
||||
--config-new_dtags=yes use new ELF DTAGs (DT_RUNPATH instead of DT_RPATH)
|
||||
--config-codesign=no do not use codesign on apple to sign executables
|
||||
--config-dwarf=x use dwarf debug info instead of stabs (x=2..5)
|
||||
|
||||
Cross build options (experimental):
|
||||
--cpu=CPU target CPU [$cpu]
|
||||
--targetos=... target OS (Darwin,WIN32,Android/Termux) [$targetos]
|
||||
--cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]
|
||||
EOF
|
||||
exit 1
|
||||
}
|
||||
|
||||
default() # set variable unless already set and not empty
|
||||
{
|
||||
test -n "$2" && eval : \${$1:=\$2} # ': ${foo:=$2}'
|
||||
}
|
||||
|
||||
default_conf() # add one config to confvars unless already present
|
||||
{
|
||||
confvars_has "$1" || confvars_set "$1"
|
||||
}
|
||||
|
||||
if test -z "${source_path#.}" ; then
|
||||
source_path=$(pwd)
|
||||
source_path_used="no"
|
||||
else
|
||||
source_path_used="yes"
|
||||
fi
|
||||
|
||||
# OS specific
|
||||
buildos=$(uname)
|
||||
cpu_sys=$(uname -m)
|
||||
|
||||
case $buildos in
|
||||
Windows_NT|MINGW*|MSYS*|CYGWIN*)
|
||||
buildos="WIN32"
|
||||
test "$MSYSTEM" = "MINGW32" && cpu_sys=i386
|
||||
;;
|
||||
Linux)
|
||||
if test "$(uname -o)" = "Android"; then
|
||||
buildos=Android
|
||||
if test -n "$TERMUX_VERSION"; then
|
||||
buildos=Termux
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if test "$mingw32" = "yes"; then
|
||||
default targetos WIN32
|
||||
else
|
||||
default targetos "$buildos"
|
||||
fi
|
||||
|
||||
default cpu "$cpu_sys"
|
||||
|
||||
# check for crpss build
|
||||
if test "$cpu" != "$cpu_sys" ||
|
||||
test "$targetos" != "$buildos" ||
|
||||
test -n "$cross_prefix"
|
||||
then
|
||||
build_cross="yes"
|
||||
cc="${cross_prefix}${cc}"
|
||||
ar="${cross_prefix}${ar}"
|
||||
fi
|
||||
|
||||
case "$cpu" in
|
||||
x86|i386|i486|i586|i686|i86pc|BePC|i686-AT386)
|
||||
cpu="i386"
|
||||
;;
|
||||
x86_64|amd64|x86-64)
|
||||
cpu="x86_64"
|
||||
;;
|
||||
evbarm)
|
||||
case "`uname -p`" in
|
||||
aarch64|arm64)
|
||||
cpu="arm64"
|
||||
;;
|
||||
earmv*)
|
||||
cpu="arm"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
aarch64|arm64|evbarm)
|
||||
cpu="arm64"
|
||||
;;
|
||||
arm*)
|
||||
case "$cpu" in
|
||||
arm|armv4l)
|
||||
cpuver=4
|
||||
;;
|
||||
armv5tel|armv5tejl)
|
||||
cpuver=5
|
||||
;;
|
||||
armv6j|armv6l)
|
||||
cpuver=6
|
||||
;;
|
||||
armv7|armv7a|armv7l)
|
||||
cpuver=7
|
||||
;;
|
||||
esac
|
||||
cpu="arm"
|
||||
;;
|
||||
alpha)
|
||||
cpu="alpha"
|
||||
;;
|
||||
"Power Macintosh"|ppc|ppc64)
|
||||
cpu="ppc"
|
||||
;;
|
||||
mips)
|
||||
cpu="mips"
|
||||
;;
|
||||
s390)
|
||||
cpu="s390"
|
||||
;;
|
||||
riscv64)
|
||||
cpu="riscv64"
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported CPU"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
case $targetos in
|
||||
Darwin)
|
||||
confvars_set OSX dwarf=4
|
||||
default_conf "codesign"
|
||||
DLLSUF=".dylib"
|
||||
if test -z "$build_cross"; then
|
||||
cc=`command -v cc`
|
||||
cc=`readlink $cc || echo clang`
|
||||
tcc_usrinclude="`xcrun --show-sdk-path`/usr/include"
|
||||
if test "${confvars%new_macho*}" = "${confvars}"; then
|
||||
# if new_macho was not specified and (known) ver <= 10, use old (=no)
|
||||
osxver=$(sw_vers -productVersion 2>/dev/null) # X.Y.Z
|
||||
osxver=${osxver%%.*} # major version (or empty on sw_vers error)
|
||||
[ "${osxver:-11}" -ge 11 ] || confvars_set new_macho=no
|
||||
fi
|
||||
fi
|
||||
# on OSX M1 with --cpu=x86_64, build a tcc to run under rosetta entirely
|
||||
if test "$cpu" = x86_64 && test "$cpu_sys" = arm64; then
|
||||
CFLAGS="$CFLAGS -arch $cpu"
|
||||
LDFLAGS="$LDFLAGS -arch $cpu"
|
||||
fi
|
||||
;;
|
||||
DragonFly|OpenBSD|FreeBSD|NetBSD)
|
||||
confvars_set BSD ldl=no
|
||||
;;
|
||||
Android|Termux)
|
||||
if test "$targetos" = "Termux"; then
|
||||
targetos=Android
|
||||
default sysroot "/data/data/com.termux/files/usr"
|
||||
else
|
||||
default sysroot "/usr"
|
||||
fi
|
||||
default prefix "${sysroot}"
|
||||
confvars_set Android new_dtags rpath=no
|
||||
test "${cpu}" != "i386" && confvars_set pie
|
||||
default_conf "static=no"
|
||||
case "$cpu" in
|
||||
arm) default triplet "arm-linux-androideabi"; cpuver=7 ;;
|
||||
arm64) default triplet "aarch64-linux-android" ;;
|
||||
x86_64) default triplet "x86_64-linux-android" ;;
|
||||
i386) default triplet "i686-linux-android" ;;
|
||||
esac
|
||||
test "${cpu%64}" != "${cpu}" && S="64" || S=""
|
||||
default tcc_sysincludepaths "{B}/include:{R}/include:{R}/include/${triplet}"
|
||||
default tcc_libpaths "{B}:{R}/lib:/system/lib${S}"
|
||||
default tcc_crtprefix "{R}/lib"
|
||||
default tcc_elfinterp "/system/bin/linker${S}"
|
||||
default tcc_switches "-Wl,-rpath=$sysroot/lib"
|
||||
;;
|
||||
WIN32)
|
||||
mingw32="yes"
|
||||
confvars="WIN32 $confvars" # WIN32 intentionally first (commit 729918ef)
|
||||
default prefix "C:/Program Files/tcc"
|
||||
default tccdir "${prefix}"
|
||||
default bindir "${tccdir}"
|
||||
default docdir "${tccdir}/doc"
|
||||
default libdir "${tccdir}/libtcc"
|
||||
# set tccdir at runtime from executable path
|
||||
test "$tccdir" = "$bindir" && tccdir_auto="yes"
|
||||
# chech $cc to avoid mingw gcc dependencies such as 'libgcc_s_dw2-1.dll'
|
||||
# (no confirmed $cc_name yet, and also will never have if cross compiling)
|
||||
test "${cc%gcc*}" = "$cc" || default LDFLAGS "-static"
|
||||
LIBSUF=".lib"
|
||||
EXESUF=".exe"
|
||||
DLLSUF=".dll"
|
||||
if test "$source_path_used" = "no"; then
|
||||
source_path="."
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
if test "$mingw32" = "no"; then
|
||||
default prefix "/usr/local"
|
||||
default execprefix "${prefix}"
|
||||
default libdir "${execprefix}/lib"
|
||||
default bindir "${execprefix}/bin"
|
||||
default tccdir "${libdir}/tcc"
|
||||
default includedir "${prefix}/include"
|
||||
default sharedir "${prefix}/share"
|
||||
default docdir "${sharedir}/doc"
|
||||
default mandir "${sharedir}/man"
|
||||
default infodir "${sharedir}/info"
|
||||
fi
|
||||
|
||||
if test x"$show_help" = "xyes" ; then
|
||||
show_help
|
||||
fi
|
||||
|
||||
CONFTEST=./conftest$EXESUF
|
||||
if test -z "$cross_prefix" \
|
||||
&& $cc -o $CONFTEST "$source_path/conftest.c" \
|
||||
&& $CONFTEST 2>/dev/null; then
|
||||
cc_name="$($CONFTEST compiler)"
|
||||
gcc_major="$($CONFTEST version)"
|
||||
gcc_minor="$($CONFTEST minor)"
|
||||
else
|
||||
if test -z "$build_cross"; then
|
||||
echo "configure: error: '$cc' failed to compile conftest.c."
|
||||
fi
|
||||
if test "${cc%tcc*}" != "$cc"; then
|
||||
cc_name="tcc"
|
||||
elif test "${cc%clang*}" != "$cc"; then
|
||||
cc_name="clang"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -z "$build_cross"; then
|
||||
bigendian="$($CONFTEST bigendian)"
|
||||
_triplet="$($CONFTEST triplet)"
|
||||
if test "$mingw32" = "no" ; then
|
||||
if test -z "$triplet" && test -n "$_triplet"; then
|
||||
if test -f "/usr/lib/$_triplet/crti.o"; then
|
||||
triplet="$_triplet"
|
||||
fi
|
||||
fi
|
||||
if test -z "$triplet"; then
|
||||
case $cpu in x86_64|arm64|riscv64)
|
||||
if test -f "/usr/lib64/crti.o" ; then
|
||||
tcc_lddir="lib64"
|
||||
fi
|
||||
esac
|
||||
fi
|
||||
if test "$suggest" = "yes"; then
|
||||
if test -f "/lib/ld-uClibc.so.0" ; then
|
||||
echo "Perhaps you want ./configure --config-uClibc"
|
||||
fi
|
||||
if test -f "/lib/ld-musl-${cpu}.so.1"; then
|
||||
echo "Perhaps you want ./configure --config-musl"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
else
|
||||
# can only make guesses about compiler and target
|
||||
case $cpu in
|
||||
ppc|mips|s390) bigendian=yes;;
|
||||
esac
|
||||
case $targetos in
|
||||
Linux)
|
||||
default triplet "${cpu}-linux-gnu"
|
||||
esac
|
||||
fi
|
||||
|
||||
if test "$bigendian" = "yes" ; then
|
||||
confvars_set BIGENDIAN
|
||||
fi
|
||||
|
||||
if test "$cpu" = "arm"; then
|
||||
if test "${triplet%eabihf}" != "$triplet" ; then
|
||||
confvars_set arm_eabihf arm_vfp
|
||||
elif test "${triplet%eabi}" != "$triplet" ; then
|
||||
confvars_set arm_eabi arm_vfp
|
||||
elif test -z "$build_cross"; then
|
||||
if test "${_triplet%eabihf}" != "$_triplet" ; then
|
||||
confvars_set arm_eabihf arm_vfp
|
||||
elif test "${_triplet%eabi}" != "$_triplet" ; then
|
||||
confvars_set arm_eabi arm_vfp
|
||||
elif grep -s -q "^Features.* \(vfp\|iwmmxt\) " /proc/cpuinfo ; then
|
||||
confvars_set arm_vfp
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# a final configuration tuning
|
||||
if test "$cc_name" != "tcc"; then
|
||||
OPT1="-Wdeclaration-after-statement" #-fno-strict-aliasing
|
||||
# we want -Wno- but gcc does not always reject unknown -Wno- options
|
||||
if test "$cc_name" = "clang"; then
|
||||
OPT2= #"-Wstring-plus-int"
|
||||
else
|
||||
OPT2="-Wunused-result"
|
||||
fi
|
||||
$cc $OPT1 $OPT2 -o a.out -c -xc - < /dev/null > cc_msg.txt 2>&1
|
||||
for o in $OPT1; do # enable these options
|
||||
if ! grep -q -- $o cc_msg.txt; then CFLAGS="$CFLAGS $o"; fi
|
||||
done
|
||||
for o in $OPT2; do # disable these options
|
||||
if ! grep -q -- $o cc_msg.txt; then CFLAGS="$CFLAGS -Wno-${o#-W*}"; fi
|
||||
done
|
||||
# cat cc_msg.txt
|
||||
# echo $CFLAGS
|
||||
rm -f cc_msg.txt a.out
|
||||
else # cc is tcc
|
||||
test "$ar_set" || ar="$cc -ar"
|
||||
fi
|
||||
|
||||
fcho() { if test -n "$2"; then echo "$1$2"; fi }
|
||||
|
||||
fcho "Binary directory " "$bindir"
|
||||
fcho "TinyCC directory " "$tccdir"
|
||||
fcho "Library directory " "$libdir"
|
||||
fcho "Include directory " "$includedir"
|
||||
fcho "Manual directory " "$mandir"
|
||||
fcho "Info directory " "$infodir"
|
||||
fcho "Doc directory " "$docdir"
|
||||
fcho "Target root prefix " "$sysroot"
|
||||
fcho "/usr/include dir " "$tcc_usrinclude"
|
||||
echo "Source path $source_path"
|
||||
echo "Build OS $(uname -m -s)"
|
||||
echo "C compiler $cc ($gcc_major.$gcc_minor)"
|
||||
echo "Target OS $targetos"
|
||||
echo "CPU $cpu"
|
||||
fcho "Triplet " "$triplet"
|
||||
fcho "Libs " "$tcc_libpaths"
|
||||
fcho "Sysinclude " "$tcc_sysincludepaths"
|
||||
fcho "Crt " "$tcc_crtprefix"
|
||||
fcho "Elfinterp " "$tcc_elfinterp"
|
||||
fcho "Switches " "$tcc_switches"
|
||||
fcho "Config " "${confvars# }"
|
||||
echo "Creating config.mak and config.h"
|
||||
|
||||
version=$(head "$source_path/VERSION")
|
||||
|
||||
cat >config.mak <<EOF
|
||||
# Automatically generated by configure - do not modify
|
||||
prefix=$prefix
|
||||
bindir=\$(DESTDIR)$bindir
|
||||
tccdir=\$(DESTDIR)$tccdir
|
||||
libdir=\$(DESTDIR)$libdir
|
||||
includedir=\$(DESTDIR)$includedir
|
||||
mandir=\$(DESTDIR)$mandir
|
||||
infodir=\$(DESTDIR)$infodir
|
||||
docdir=\$(DESTDIR)$docdir
|
||||
CC=$cc
|
||||
CC_NAME=$cc_name
|
||||
GCC_MAJOR=$gcc_major
|
||||
GCC_MINOR=$gcc_minor
|
||||
AR=$ar
|
||||
LIBSUF=$LIBSUF
|
||||
EXESUF=$EXESUF
|
||||
DLLSUF=$DLLSUF
|
||||
CFLAGS=$CFLAGS
|
||||
LDFLAGS=$LDFLAGS
|
||||
ARCH=$cpu
|
||||
TARGETOS=$targetos
|
||||
BUILDOS=$buildos
|
||||
VERSION=$version
|
||||
EOF
|
||||
|
||||
if test "$source_path_used" = "yes" ; then
|
||||
case $source_path in
|
||||
/*) echo "TOPSRC=$source_path";;
|
||||
*) echo "TOPSRC=\$(TOP)/$source_path";;
|
||||
esac >>config.mak
|
||||
else
|
||||
echo 'TOPSRC=$(TOP)' >>config.mak
|
||||
fi
|
||||
|
||||
# $1: macro name, $2: val to set - quoted [, $3: non-empty for #ifndef]
|
||||
print_str() {
|
||||
if test -n "$2"; then
|
||||
test -n "$3" && echo "#ifndef $1" >> $TMPH
|
||||
echo "#define $1 \"$2\"" >> $TMPH
|
||||
test -n "$3" && echo "#endif" >> $TMPH
|
||||
fi
|
||||
}
|
||||
|
||||
# $1: macro name, $2: val to set [, $3: non-empty for #ifndef]
|
||||
print_num() {
|
||||
if test -n "$2"; then
|
||||
test -n "$3" && echo "#ifndef $1" >> $TMPH
|
||||
echo "#define $1 $2" >> $TMPH
|
||||
test -n "$3" && echo "#endif" >> $TMPH
|
||||
fi
|
||||
}
|
||||
|
||||
cat >$TMPH <<EOF
|
||||
/* Automatically generated by configure - do not modify */
|
||||
|
||||
#define TCC_VERSION "$version"
|
||||
|
||||
#define CC_NAME CC_$cc_name
|
||||
#define GCC_MAJOR $gcc_major
|
||||
#define GCC_MINOR $gcc_minor
|
||||
|
||||
#if !(TCC_TARGET_I386 || TCC_TARGET_X86_64 || TCC_TARGET_ARM\
|
||||
|| TCC_TARGET_ARM64 || TCC_TARGET_RISCV64 || TCC_TARGET_C67)
|
||||
EOF
|
||||
|
||||
predefs=1
|
||||
# options that are applied only to the native tcc
|
||||
for v in $cpu $confvars ; do
|
||||
if test "${v%=*}" = "$v"; then
|
||||
v="$v=yes"
|
||||
fi
|
||||
R="CONFIG_$v"
|
||||
echo "$R" >> config.mak
|
||||
case "$R" in
|
||||
# CPU
|
||||
CONFIG_i386=yes) print_num TCC_TARGET_I386 1 ;;
|
||||
CONFIG_x86_64=yes) print_num TCC_TARGET_X86_64 1 ;;
|
||||
CONFIG_arm64=yes) print_num TCC_TARGET_ARM64 1 ;;
|
||||
CONFIG_riscv64=yes) print_num TCC_TARGET_RISCV64 1 ;;
|
||||
CONFIG_arm=yes) print_num TCC_TARGET_ARM 1
|
||||
print_num CONFIG_TCC_CPUVER "$cpuver" ;;
|
||||
CONFIG_arm_eabihf=yes) print_num TCC_ARM_EABI 1
|
||||
print_num TCC_ARM_HARDFLOAT 1 ;;
|
||||
CONFIG_arm_eabi=yes) print_num TCC_ARM_EABI 1 ;;
|
||||
CONFIG_arm_vfp=yes) print_num TCC_ARM_VFP 1 ;;
|
||||
# OS
|
||||
CONFIG_WIN32=yes) print_num TCC_TARGET_PE 1 ;;
|
||||
CONFIG_OSX=yes) print_num TCC_TARGET_MACHO 1 ;;
|
||||
CONFIG_Android=yes) print_num TARGETOS_ANDROID 1 ;;
|
||||
CONFIG_BSD=yes) print_num TARGETOS_$targetos 1
|
||||
case "$targetos" in
|
||||
FreeBSD) default tcc_elfinterp "/libexec/ld-elf.so.1";;
|
||||
FreeBSD_kernel)
|
||||
case "$cpu" in
|
||||
x86_64) default tcc_elfinterp "/lib/ld-kfreebsd-x86-64.so.1";;
|
||||
*) default tcc_elfinterp "/lib/ld.so.1";;
|
||||
esac ;;
|
||||
DragonFly) default tcc_elfinterp "/usr/libexec/ld-elf.so.2";;
|
||||
NetBSD) default tcc_elfinterp "/usr/libexec/ld.elf_so";;
|
||||
OpenBSD) default tcc_elfinterp "/usr/libexec/ld.so";;
|
||||
esac
|
||||
;;
|
||||
CONFIG_uClibc=yes) print_num CONFIG_TCC_UCLIBC 1
|
||||
default tcc_elfinterp "/lib/ld-uClibc.so.0"
|
||||
;;
|
||||
CONFIG_musl=yes) print_num CONFIG_TCC_MUSL 1
|
||||
case "$cpu" in
|
||||
arm64) default tcc_elfinterp "/lib/ld-musl-aarch64.so.1";;
|
||||
*) default tcc_elfinterp "/lib/ld-musl-${cpu}.so.1";;
|
||||
esac
|
||||
;;
|
||||
# other
|
||||
CONFIG_libgcc=yes) print_num CONFIG_USE_LIBGCC 1 ;;
|
||||
CONFIG_selinux=yes) print_num CONFIG_SELINUX 1 ;;
|
||||
CONFIG_pie=yes) print_num CONFIG_TCC_PIE 1 ;;
|
||||
CONFIG_pic=yes) print_num CONFIG_TCC_PIC 1 ;;
|
||||
CONFIG_new_dtags=yes) print_num CONFIG_NEW_DTAGS 1 ;;
|
||||
CONFIG_codesign=yes) print_num CONFIG_CODESIGN 1 ;;
|
||||
CONFIG_new_macho=no) print_num CONFIG_NEW_MACHO 0 ;;
|
||||
CONFIG_bcheck=no) print_num CONFIG_TCC_BCHECK 0 ;;
|
||||
CONFIG_backtrace=no) print_num CONFIG_TCC_BACKTRACE 0 ;;
|
||||
CONFIG_dwarf=*) print_num CONFIG_DWARF_VERSION ${R#*=} ;;
|
||||
CONFIG_semlock=*) print_num CONFIG_TCC_SEMLOCK ${R#*=} ;;
|
||||
CONFIG_predefs=no) predefs=0 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
print_str CONFIG_USR_INCLUDE "$tcc_usrinclude"
|
||||
print_str CONFIG_TCC_SYSINCLUDEPATHS "$tcc_sysincludepaths"
|
||||
print_str CONFIG_TCC_LIBPATHS "$tcc_libpaths"
|
||||
print_str CONFIG_TCC_CRTPREFIX "$tcc_crtprefix"
|
||||
print_str CONFIG_TCC_ELFINTERP "$tcc_elfinterp"
|
||||
print_str CONFIG_TCC_SWITCHES "$tcc_switches"
|
||||
print_str CONFIG_LDDIR "$tcc_lddir"
|
||||
print_str CONFIG_TRIPLET "$triplet"
|
||||
echo "#endif" >> $TMPH && echo >> $TMPH
|
||||
|
||||
print_str CONFIG_SYSROOT "$sysroot" x
|
||||
test "$tccdir_auto" = "yes" || print_str CONFIG_TCCDIR "$tccdir" x
|
||||
print_num CONFIG_TCC_PREDEFS "$predefs"
|
||||
|
||||
diff $TMPH config.h >/dev/null 2>&1
|
||||
if test $? -ne 0 ; then
|
||||
mv -f $TMPH config.h
|
||||
else
|
||||
echo "config.h is unchanged"
|
||||
fi
|
||||
|
||||
echo "@set VERSION $version" > config.texi
|
||||
|
||||
rm -f $TMPN* $CONFTEST
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# build tree in object directory if source path is different from current one
|
||||
|
||||
use_cp=
|
||||
fn_makelink()
|
||||
{
|
||||
tgt=$1/$2
|
||||
case $2 in
|
||||
*/*) dn=${2%/*}
|
||||
test -d $dn || mkdir -p $dn
|
||||
case $1 in
|
||||
/*) ;;
|
||||
*) while test $dn ; do
|
||||
tgt=../$tgt; dn=${dn#${dn%%/*}}; dn=${dn#/}
|
||||
done
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
test -n "$use_cp" || ln -sfn "$tgt" $2 ||
|
||||
{ use_cp=yes; echo "ln failed. Using cp instead."; }
|
||||
test -z "$use_cp" || cp -f "$1/$2" $2
|
||||
}
|
||||
|
||||
if test "$source_path_used" = "yes" ; then
|
||||
FILES="Makefile lib/Makefile tests/Makefile tests/tests2/Makefile tests/pp/Makefile"
|
||||
for f in $FILES ; do
|
||||
fn_makelink "$source_path" $f
|
||||
done
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------------------------
|
24
configure.ac
Normal file
24
configure.ac
Normal file
|
@ -0,0 +1,24 @@
|
|||
m4_define([tcc_VERSION], m4_normalize(m4_include([VERSION])))
|
||||
m4_append([tcc_VERSION], [-stupidos])
|
||||
|
||||
AC_INIT([tcc], tcc_VERSION)
|
||||
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
AM_INIT_AUTOMAKE([foreign subdir-objects -Werror -Wall])
|
||||
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AC_CONFIG_FILES([Makefile])
|
||||
|
||||
AC_LANG([C])
|
||||
AC_PROG_CC
|
||||
AC_PROG_CPP
|
||||
AC_PROG_CC_C_O
|
||||
AC_PROG_RANLIB
|
||||
AM_PROG_AR
|
||||
|
||||
AC_CHECK_INCLUDES_DEFAULT
|
||||
AC_C_CONST
|
||||
AC_C_INLINE
|
||||
AC_C_BIGENDIAN
|
||||
|
||||
AC_OUTPUT
|
308
conftest.c
308
conftest.c
|
@ -1,308 +0,0 @@
|
|||
/* ----------------------------------------------------------------------- */
|
||||
/* with -D C2STR: convert tccdefs.h to C-strings */
|
||||
|
||||
#if C2STR
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
/* replace native host macros by compile-time versions */
|
||||
const char *platform_macros[] = {
|
||||
"__i386__", "TCC_TARGET_I386",
|
||||
"__x86_64__", "TCC_TARGET_X86_64",
|
||||
"_WIN32", "TCC_TARGET_PE",
|
||||
"__arm__", "TCC_TARGET_ARM",
|
||||
"__ARM_EABI__", "TCC_ARM_EABI",
|
||||
"__aarch64__", "TCC_TARGET_ARM64",
|
||||
"__riscv", "TCC_TARGET_RISCV64",
|
||||
"__APPLE__", "TCC_TARGET_MACHO",
|
||||
"__FreeBSD__", "TARGETOS_FreeBSD",
|
||||
"__FreeBSD_kernel__", "TARGETOS_FreeBSD_kernel",
|
||||
"__OpenBSD__", "TARGETOS_OpenBSD",
|
||||
"__NetBSD__", "TARGETOS_NetBSD",
|
||||
"__linux__", "TARGETOS_Linux",
|
||||
"__ANDROID__", "TARGETOS_ANDROID",
|
||||
|
||||
"__SIZEOF_POINTER__", "PTR_SIZE",
|
||||
"__SIZEOF_LONG__", "LONG_SIZE",
|
||||
0
|
||||
};
|
||||
|
||||
int isid(int c)
|
||||
{
|
||||
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
|
||||
|| (c >= '0' && c <= '9') || c == '_';
|
||||
}
|
||||
|
||||
int isspc(int c)
|
||||
{
|
||||
return (unsigned char)c <= ' ' && c != 0;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
char l[1000], l2[1000], *p, *q, *p0;
|
||||
FILE *fp, *op;
|
||||
int c, e, f, s, cmt, cmt_n;
|
||||
const char *r;
|
||||
|
||||
if (argc < 3)
|
||||
return 1;
|
||||
|
||||
fp = fopen(argv[1], "rb");
|
||||
op = fopen(argv[2], "wb");
|
||||
if (!fp || !op) {
|
||||
fprintf(stderr, "c2str: file error\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
cmt = cmt_n = 0;
|
||||
for (;;) {
|
||||
p = l;
|
||||
append:
|
||||
if (fgets(p, sizeof l - (p - l), fp)) {
|
||||
p = strchr(p, 0);
|
||||
while (p > l && isspc(p[-1]))
|
||||
--p;
|
||||
*p = 0;
|
||||
} else if (p == l)
|
||||
break;
|
||||
|
||||
/* check for continuation */
|
||||
if (p > l && p[-1] == '\\') {
|
||||
p[-1] = ' ';
|
||||
goto append;
|
||||
}
|
||||
|
||||
/* count & skip leading spaces */
|
||||
p = l, q = l2, f = 0;
|
||||
while (*p && isspc(*p))
|
||||
++p, ++f;
|
||||
|
||||
/* handle comments */
|
||||
if (p[0] == '/' && cmt == 0) {
|
||||
if (p[1] == '*')
|
||||
cmt = 2;
|
||||
if (p[1] == '/')
|
||||
cmt = 1;
|
||||
}
|
||||
if (cmt) {
|
||||
fprintf(op, "%s", l);
|
||||
if (++cmt_n == 1)
|
||||
fprintf(op, " (converted, do not edit this file)");
|
||||
fprintf(op, "\n");
|
||||
if (cmt == 1)
|
||||
cmt = 0;
|
||||
if (cmt == 2) {
|
||||
p = strchr(l, 0);
|
||||
if (p >= l + 2 && p[-1] == '/' && p[-2] == '*')
|
||||
cmt = 0;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
if (f < 4) {
|
||||
do {
|
||||
/* replace machine/os macros by compile-time counterparts */
|
||||
for (e = f = 0; (r = platform_macros[f]); f += 2) {
|
||||
c = strlen(r);
|
||||
/* remove 'defined' */
|
||||
//e = memcmp(p, "defined ", 8) ? 0 : 8;
|
||||
if (0 == memcmp(p + e, r, c)) {
|
||||
p += e + c;
|
||||
q = strchr(strcpy(q, platform_macros[f + 1]), 0);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
if (r)
|
||||
continue;
|
||||
} while (!!(*q++ = *p++));
|
||||
/* output as is */
|
||||
fprintf(op, "%s\n", l2);
|
||||
continue;
|
||||
|
||||
} else {
|
||||
s = e = f = 0, p0 = p;
|
||||
for (;;) {
|
||||
c = *p++;
|
||||
|
||||
if (isspc(c)) {
|
||||
s = 1;
|
||||
continue;
|
||||
}
|
||||
if (c == '/' && (p[0] == '/' || p[0] == '*'))
|
||||
c = 0; /* trailing comment detected */
|
||||
else if (s && q > l2
|
||||
&& ((isid(q[-1]) && isid(c))
|
||||
// keep space after macro name
|
||||
|| (q >= l2 + 2
|
||||
&& l2[0] == '#'
|
||||
&& l2[1] == 'd'
|
||||
&& f < 2 && !e
|
||||
)))
|
||||
*q++ = ' ', ++f;
|
||||
s = 0;
|
||||
|
||||
if (c == '(')
|
||||
++e;
|
||||
if (c == ')')
|
||||
--e;
|
||||
if (c == '\\' || c == '\"')
|
||||
*q++ = '\\';
|
||||
*q++ = c;
|
||||
if (c == 0)
|
||||
break;
|
||||
p0 = p;
|
||||
}
|
||||
/* output with quotes */
|
||||
fprintf(op, " \"%s\\n\"%s\n", l2, p0);
|
||||
}
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
fclose(op);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
/* get some information from the host compiler for configure */
|
||||
|
||||
#elif 1
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined(_WIN32)
|
||||
#include <fcntl.h>
|
||||
#include <io.h>
|
||||
int _CRT_glob = 0;
|
||||
#endif
|
||||
|
||||
/* Define architecture */
|
||||
#if defined(__i386__) || defined _M_IX86
|
||||
# define TRIPLET_ARCH "i386"
|
||||
#elif defined(__x86_64__) || defined _M_AMD64
|
||||
# define TRIPLET_ARCH "x86_64"
|
||||
#elif defined(__arm__)
|
||||
# define TRIPLET_ARCH "arm"
|
||||
#elif defined(__aarch64__)
|
||||
# define TRIPLET_ARCH "aarch64"
|
||||
#elif defined(__riscv) && defined(__LP64__)
|
||||
# define TRIPLET_ARCH "riscv64"
|
||||
#else
|
||||
# define TRIPLET_ARCH "unknown"
|
||||
#endif
|
||||
|
||||
/* Define OS */
|
||||
#if defined (__linux__)
|
||||
# define TRIPLET_OS "linux"
|
||||
#elif defined (__FreeBSD__) || defined (__FreeBSD_kernel__)
|
||||
# define TRIPLET_OS "kfreebsd"
|
||||
#elif defined(__NetBSD__)
|
||||
# define TRIPLET_OS "netbsd"
|
||||
#elif defined(__OpenBSD__)
|
||||
# define TRIPLET_OS "openbsd"
|
||||
#elif defined(_WIN32)
|
||||
# define TRIPLET_OS "win32"
|
||||
#elif defined(__APPLE__)
|
||||
# define TRIPLET_OS "darwin"
|
||||
#elif !defined (__GNU__)
|
||||
# define TRIPLET_OS "unknown"
|
||||
#endif
|
||||
|
||||
#if defined __ANDROID__
|
||||
# define ABI_PREFIX "android"
|
||||
#else
|
||||
# define ABI_PREFIX "gnu"
|
||||
#endif
|
||||
|
||||
/* Define calling convention and ABI */
|
||||
#if defined (__ARM_EABI__)
|
||||
# if defined (__ARM_PCS_VFP)
|
||||
# define TRIPLET_ABI ABI_PREFIX"eabihf"
|
||||
# else
|
||||
# define TRIPLET_ABI ABI_PREFIX"eabi"
|
||||
# endif
|
||||
#else
|
||||
# define TRIPLET_ABI ABI_PREFIX
|
||||
#endif
|
||||
|
||||
#if defined _WIN32
|
||||
# define TRIPLET TRIPLET_ARCH "-" TRIPLET_OS
|
||||
#elif defined __GNU__
|
||||
# define TRIPLET TRIPLET_ARCH "-" TRIPLET_ABI
|
||||
#else
|
||||
# define TRIPLET TRIPLET_ARCH "-" TRIPLET_OS "-" TRIPLET_ABI
|
||||
#endif
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
#if defined(_WIN32)
|
||||
_setmode(_fileno(stdout), _O_BINARY); /* don't translate \n to \r\n */
|
||||
#endif
|
||||
switch(argc == 2 ? argv[1][0] : 0) {
|
||||
case 'b'://igendian
|
||||
{
|
||||
volatile unsigned foo = 0x01234567;
|
||||
puts(*(unsigned char*)&foo == 0x67 ? "no" : "yes");
|
||||
break;
|
||||
}
|
||||
#if defined(__clang__)
|
||||
case 'm'://inor
|
||||
printf("%d\n", __clang_minor__);
|
||||
break;
|
||||
case 'v'://ersion
|
||||
printf("%d\n", __clang_major__);
|
||||
break;
|
||||
#elif defined(__TINYC__)
|
||||
case 'v'://ersion
|
||||
puts("0");
|
||||
break;
|
||||
case 'm'://inor
|
||||
printf("%d\n", __TINYC__);
|
||||
break;
|
||||
#elif defined(_MSC_VER)
|
||||
case 'v'://ersion
|
||||
puts("0");
|
||||
break;
|
||||
case 'm'://inor
|
||||
printf("%d\n", _MSC_VER);
|
||||
break;
|
||||
#elif defined(__GNUC__) && defined(__GNUC_MINOR__)
|
||||
/* GNU comes last as other compilers may add 'GNU' compatibility */
|
||||
case 'm'://inor
|
||||
printf("%d\n", __GNUC_MINOR__);
|
||||
break;
|
||||
case 'v'://ersion
|
||||
printf("%d\n", __GNUC__);
|
||||
break;
|
||||
#else
|
||||
case 'm'://inor
|
||||
case 'v'://ersion
|
||||
puts("0");
|
||||
break;
|
||||
#endif
|
||||
case 't'://riplet
|
||||
puts(TRIPLET);
|
||||
break;
|
||||
case 'c'://ompiler
|
||||
#if defined(__clang__)
|
||||
puts("clang");
|
||||
#elif defined(__TINYC__)
|
||||
puts("tcc");
|
||||
#elif defined(_MSC_VER)
|
||||
puts("msvc");
|
||||
#elif defined(__GNUC__)
|
||||
puts("gcc");
|
||||
#else
|
||||
puts("unknown");
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
#endif
|
308
i386-asm.c
308
i386-asm.c
|
@ -46,15 +46,8 @@
|
|||
|
||||
#define OPC_0F 0x100 /* Is secondary map (0x0f prefix) */
|
||||
#define OPC_48 0x200 /* Always has REX prefix */
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
# define OPC_WLQ 0x1000 /* accepts w, l, q or no suffix */
|
||||
# define OPC_BWLQ (OPC_B | OPC_WLQ) /* accepts b, w, l, q or no suffix */
|
||||
# define OPC_WLX OPC_WLQ
|
||||
# define OPC_BWLX OPC_BWLQ
|
||||
#else
|
||||
#define OPC_WLX OPC_WL
|
||||
#define OPC_BWLX OPC_BWL
|
||||
#endif
|
||||
|
||||
#define OPC_GROUP_SHIFT 13
|
||||
|
||||
|
@ -64,9 +57,6 @@ enum {
|
|||
OPT_REG8=0, /* warning: value is hardcoded from TOK_ASM_xxx */
|
||||
OPT_REG16, /* warning: value is hardcoded from TOK_ASM_xxx */
|
||||
OPT_REG32, /* warning: value is hardcoded from TOK_ASM_xxx */
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
OPT_REG64, /* warning: value is hardcoded from TOK_ASM_xxx */
|
||||
#endif
|
||||
OPT_MMX, /* warning: value is hardcoded from TOK_ASM_xxx */
|
||||
OPT_SSE, /* warning: value is hardcoded from TOK_ASM_xxx */
|
||||
OPT_CR, /* warning: value is hardcoded from TOK_ASM_xxx */
|
||||
|
@ -74,17 +64,10 @@ enum {
|
|||
OPT_DB, /* warning: value is hardcoded from TOK_ASM_xxx */
|
||||
OPT_SEG,
|
||||
OPT_ST,
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
OPT_REG8_LOW, /* %spl,%bpl,%sil,%dil, encoded like ah,ch,dh,bh, but
|
||||
with REX prefix, not used in insn templates */
|
||||
#endif
|
||||
OPT_IM8,
|
||||
OPT_IM8S,
|
||||
OPT_IM16,
|
||||
OPT_IM32,
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
OPT_IM64,
|
||||
#endif
|
||||
OPT_EAX, /* %al, %ax, %eax or %rax register */
|
||||
OPT_ST0, /* %st(0) register */
|
||||
OPT_CL, /* %cl register */
|
||||
|
@ -124,32 +107,18 @@ enum {
|
|||
#define OP_DX (1 << OPT_DX)
|
||||
#define OP_ADDR (1 << OPT_ADDR)
|
||||
#define OP_INDIR (1 << OPT_INDIR)
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
# define OP_REG64 (1 << OPT_REG64)
|
||||
# define OP_REG8_LOW (1 << OPT_REG8_LOW)
|
||||
# define OP_IM64 (1 << OPT_IM64)
|
||||
# define OP_EA32 (OP_EA << 1)
|
||||
#else
|
||||
#define OP_REG64 0
|
||||
#define OP_REG8_LOW 0
|
||||
#define OP_IM64 0
|
||||
#define OP_EA32 0
|
||||
#endif
|
||||
|
||||
#define OP_EA 0x40000000
|
||||
#define OP_REG (OP_REG8 | OP_REG16 | OP_REG32 | OP_REG64)
|
||||
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
# define TREG_XAX TREG_RAX
|
||||
# define TREG_XCX TREG_RCX
|
||||
# define TREG_XDX TREG_RDX
|
||||
# define TOK_ASM_xax TOK_ASM_rax
|
||||
#else
|
||||
#define TREG_XAX TREG_EAX
|
||||
#define TREG_XCX TREG_ECX
|
||||
#define TREG_XDX TREG_EDX
|
||||
#define TOK_ASM_xax TOK_ASM_eax
|
||||
#endif
|
||||
|
||||
typedef struct ASMInstr {
|
||||
uint16_t sym;
|
||||
|
@ -234,11 +203,8 @@ static const ASMInstr asm_instrs[] = {
|
|||
#define DEF_ASM_OP1(name, opcode, group, instr_type, op0) { TOK_ASM_ ## name, O(opcode), T(opcode, instr_type, group), 1, { op0 }},
|
||||
#define DEF_ASM_OP2(name, opcode, group, instr_type, op0, op1) { TOK_ASM_ ## name, O(opcode), T(opcode, instr_type, group), 2, { op0, op1 }},
|
||||
#define DEF_ASM_OP3(name, opcode, group, instr_type, op0, op1, op2) { TOK_ASM_ ## name, O(opcode), T(opcode, instr_type, group), 3, { op0, op1, op2 }},
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
# include "x86_64-asm.h"
|
||||
#else
|
||||
|
||||
#include "i386-asm.h"
|
||||
#endif
|
||||
/* last operation */
|
||||
{ 0, },
|
||||
};
|
||||
|
@ -250,11 +216,7 @@ static const uint16_t op0_codes[] = {
|
|||
#define DEF_ASM_OP1(name, opcode, group, instr_type, op0)
|
||||
#define DEF_ASM_OP2(name, opcode, group, instr_type, op0, op1)
|
||||
#define DEF_ASM_OP3(name, opcode, group, instr_type, op0, op1, op2)
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
# include "x86_64-asm.h"
|
||||
#else
|
||||
#include "i386-asm.h"
|
||||
#endif
|
||||
};
|
||||
|
||||
static inline int get_reg_shift(TCCState *s1)
|
||||
|
@ -282,45 +244,6 @@ static inline int get_reg_shift(TCCState *s1)
|
|||
return shift;
|
||||
}
|
||||
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
static int asm_parse_numeric_reg(int t, unsigned int *type)
|
||||
{
|
||||
int reg = -1;
|
||||
if (t >= TOK_IDENT && t < tok_ident) {
|
||||
const char *s = table_ident[t - TOK_IDENT]->str;
|
||||
char c;
|
||||
*type = OP_REG64;
|
||||
if (*s == 'c') {
|
||||
s++;
|
||||
*type = OP_CR;
|
||||
}
|
||||
if (*s++ != 'r')
|
||||
return -1;
|
||||
/* Don't allow leading '0'. */
|
||||
if ((c = *s++) >= '1' && c <= '9')
|
||||
reg = c - '0';
|
||||
else
|
||||
return -1;
|
||||
if ((c = *s) >= '0' && c <= '5')
|
||||
s++, reg = reg * 10 + c - '0';
|
||||
if (reg > 15)
|
||||
return -1;
|
||||
if ((c = *s) == 0)
|
||||
;
|
||||
else if (*type != OP_REG64)
|
||||
return -1;
|
||||
else if (c == 'b' && !s[1])
|
||||
*type = OP_REG8;
|
||||
else if (c == 'w' && !s[1])
|
||||
*type = OP_REG16;
|
||||
else if (c == 'd' && !s[1])
|
||||
*type = OP_REG32;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
return reg;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int asm_parse_reg(unsigned int *type)
|
||||
{
|
||||
|
@ -332,17 +255,6 @@ static int asm_parse_reg(unsigned int *type)
|
|||
if (tok >= TOK_ASM_eax && tok <= TOK_ASM_edi) {
|
||||
reg = tok - TOK_ASM_eax;
|
||||
*type = OP_REG32;
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
} else if (tok >= TOK_ASM_rax && tok <= TOK_ASM_rdi) {
|
||||
reg = tok - TOK_ASM_rax;
|
||||
*type = OP_REG64;
|
||||
} else if (tok == TOK_ASM_rip) {
|
||||
reg = -2; /* Probably should use different escape code. */
|
||||
*type = OP_REG64;
|
||||
} else if ((reg = asm_parse_numeric_reg(tok, type)) >= 0
|
||||
&& (*type == OP_REG32 || *type == OP_REG64)) {
|
||||
;
|
||||
#endif
|
||||
} else {
|
||||
error_32:
|
||||
expect("register");
|
||||
|
@ -400,13 +312,6 @@ static void parse_operand(TCCState *s1, Operand *op)
|
|||
if (op->reg == 0)
|
||||
op->type |= OP_ST0;
|
||||
goto no_skip;
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
} else if (tok >= TOK_ASM_spl && tok <= TOK_ASM_dil) {
|
||||
op->type = OP_REG8 | OP_REG8_LOW;
|
||||
op->reg = 4 + tok - TOK_ASM_spl;
|
||||
} else if ((op->reg = asm_parse_numeric_reg(tok, &op->type)) >= 0) {
|
||||
;
|
||||
#endif
|
||||
} else {
|
||||
reg_error:
|
||||
tcc_error("unknown register %%%s", get_tok_str(tok, &tokc));
|
||||
|
@ -426,10 +331,6 @@ static void parse_operand(TCCState *s1, Operand *op)
|
|||
op->type |= OP_IM8S;
|
||||
if (op->e.v == (uint16_t)op->e.v)
|
||||
op->type |= OP_IM16;
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
if (op->e.v != (int32_t)op->e.v && op->e.v != (uint32_t)op->e.v)
|
||||
op->type = OP_IM64;
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
/* address(reg,reg2,shift) with all variants */
|
||||
|
@ -494,13 +395,6 @@ ST_FUNC void gen_expr32(ExprValue *pe)
|
|||
gen_addr32(pe->sym ? VT_SYM : 0, pe->sym, pe->v);
|
||||
}
|
||||
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
ST_FUNC void gen_expr64(ExprValue *pe)
|
||||
{
|
||||
gen_addr64(pe->sym ? VT_SYM : 0, pe->sym, pe->v);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* XXX: unify with C code output ? */
|
||||
static void gen_disp32(ExprValue *pe)
|
||||
{
|
||||
|
@ -517,13 +411,7 @@ static void gen_disp32(ExprValue *pe)
|
|||
sym->type.t = VT_FUNC;
|
||||
sym->type.ref = NULL;
|
||||
}
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
greloca(cur_text_section, sym, ind, R_X86_64_PLT32, pe->v - 4);
|
||||
gen_le32(0);
|
||||
#else
|
||||
gen_addrpc32(VT_SYM, sym, pe->v);
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -536,20 +424,10 @@ static inline int asm_modrm(int reg, Operand *op)
|
|||
g(0xc0 + (reg << 3) + op->reg);
|
||||
} else if (op->reg == -1 && op->reg2 == -1) {
|
||||
/* displacement only */
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
g(0x04 + (reg << 3));
|
||||
g(0x25);
|
||||
#else
|
||||
g(0x05 + (reg << 3));
|
||||
#endif
|
||||
|
||||
gen_expr32(&op->e);
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
} else if (op->reg == -2) {
|
||||
ExprValue *pe = &op->e;
|
||||
g(0x05 + (reg << 3));
|
||||
gen_addrpc32(pe->sym ? VT_SYM : 0, pe->sym, pe->v);
|
||||
return ind;
|
||||
#endif
|
||||
|
||||
} else {
|
||||
sib_reg1 = op->reg;
|
||||
/* fist compute displacement encoding */
|
||||
|
@ -585,69 +463,6 @@ static inline int asm_modrm(int reg, Operand *op)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
#define REX_W 0x48
|
||||
#define REX_R 0x44
|
||||
#define REX_X 0x42
|
||||
#define REX_B 0x41
|
||||
|
||||
static void asm_rex(int width64, Operand *ops, int nb_ops, int *op_type,
|
||||
int regi, int rmi)
|
||||
{
|
||||
unsigned char rex = width64 ? 0x48 : 0;
|
||||
int saw_high_8bit = 0;
|
||||
int i;
|
||||
if (rmi == -1) {
|
||||
/* No mod/rm byte, but we might have a register op nevertheless
|
||||
(we will add it to the opcode later). */
|
||||
for(i = 0; i < nb_ops; i++) {
|
||||
if (op_type[i] & (OP_REG | OP_ST)) {
|
||||
if (ops[i].reg >= 8) {
|
||||
rex |= REX_B;
|
||||
ops[i].reg -= 8;
|
||||
} else if (ops[i].type & OP_REG8_LOW)
|
||||
rex |= 0x40;
|
||||
else if (ops[i].type & OP_REG8 && ops[i].reg >= 4)
|
||||
/* An 8 bit reg >= 4 without REG8 is ah/ch/dh/bh */
|
||||
saw_high_8bit = ops[i].reg;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (regi != -1) {
|
||||
if (ops[regi].reg >= 8) {
|
||||
rex |= REX_R;
|
||||
ops[regi].reg -= 8;
|
||||
} else if (ops[regi].type & OP_REG8_LOW)
|
||||
rex |= 0x40;
|
||||
else if (ops[regi].type & OP_REG8 && ops[regi].reg >= 4)
|
||||
/* An 8 bit reg >= 4 without REG8 is ah/ch/dh/bh */
|
||||
saw_high_8bit = ops[regi].reg;
|
||||
}
|
||||
if (ops[rmi].type & (OP_REG | OP_MMX | OP_SSE | OP_CR | OP_EA)) {
|
||||
if (ops[rmi].reg >= 8) {
|
||||
rex |= REX_B;
|
||||
ops[rmi].reg -= 8;
|
||||
} else if (ops[rmi].type & OP_REG8_LOW)
|
||||
rex |= 0x40;
|
||||
else if (ops[rmi].type & OP_REG8 && ops[rmi].reg >= 4)
|
||||
/* An 8 bit reg >= 4 without REG8 is ah/ch/dh/bh */
|
||||
saw_high_8bit = ops[rmi].reg;
|
||||
}
|
||||
if (ops[rmi].type & OP_EA && ops[rmi].reg2 >= 8) {
|
||||
rex |= REX_X;
|
||||
ops[rmi].reg2 -= 8;
|
||||
}
|
||||
}
|
||||
if (rex) {
|
||||
if (saw_high_8bit)
|
||||
tcc_error("can't encode register %%%ch when REX prefix is required",
|
||||
"acdb"[saw_high_8bit-4]);
|
||||
g(rex);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static void maybe_print_stats (void)
|
||||
{
|
||||
|
@ -699,9 +514,6 @@ ST_FUNC void asm_opcode(TCCState *s1, int opcode)
|
|||
int alltypes; /* OR of all operand types */
|
||||
int autosize;
|
||||
int p66;
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
int rex64;
|
||||
#endif
|
||||
|
||||
maybe_print_stats();
|
||||
/* force synthetic ';' after prefix instruction, so we can handle */
|
||||
|
@ -777,13 +589,6 @@ again:
|
|||
if (pa->instr_type & OPC_WLX)
|
||||
s = NBWLX - 1;
|
||||
} else if (pa->instr_type & OPC_B) {
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
/* Some instructions don't have the full size but only
|
||||
bwl form. insb e.g. */
|
||||
if ((pa->instr_type & OPC_WLQ) != OPC_WLQ
|
||||
&& !(opcode >= pa->sym && opcode < pa->sym + NBWLX-1))
|
||||
continue;
|
||||
#endif
|
||||
if (!(opcode >= pa->sym && opcode < pa->sym + NBWLX))
|
||||
continue;
|
||||
s = opcode - pa->sym;
|
||||
|
@ -797,15 +602,6 @@ again:
|
|||
}
|
||||
if (pa->nb_ops != nb_ops)
|
||||
continue;
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
/* Special case for moves. Selecting the IM64->REG64 form
|
||||
should only be done if we really have an >32bit imm64, and that
|
||||
is hardcoded. Ignore it here. */
|
||||
if (pa->opcode == 0xb0 && ops[0].type != OP_IM64
|
||||
&& (ops[1].type & OP_REG) == OP_REG64
|
||||
&& !(pa->instr_type & OPC_0F))
|
||||
continue;
|
||||
#endif
|
||||
/* now decode and check each operand */
|
||||
alltypes = 0;
|
||||
for(i = 0; i < nb_ops; i++) {
|
||||
|
@ -874,12 +670,6 @@ again:
|
|||
}
|
||||
/* if the size is unknown, then evaluate it (OPC_B or OPC_WL case) */
|
||||
autosize = NBWLX-1;
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
/* XXX the autosize should rather be zero, to not have to adjust this
|
||||
all the time. */
|
||||
if ((pa->instr_type & OPC_BWLQ) == OPC_B)
|
||||
autosize = NBWLX-2;
|
||||
#endif
|
||||
if (s == autosize) {
|
||||
/* Check for register operands providing hints about the size.
|
||||
Start from the end, i.e. destination operands. This matters
|
||||
|
@ -901,47 +691,13 @@ again:
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
rex64 = 0;
|
||||
if (pa->instr_type & OPC_48)
|
||||
rex64 = 1;
|
||||
else if (s == 3 || (alltypes & OP_REG64)) {
|
||||
/* generate REX prefix */
|
||||
int default64 = 0;
|
||||
for(i = 0; i < nb_ops; i++) {
|
||||
if (op_type[i] == OP_REG64 && pa->opcode != 0xb8) {
|
||||
/* If only 64bit regs are accepted in one operand
|
||||
this is a default64 instruction without need for
|
||||
REX prefixes, except for movabs(0xb8). */
|
||||
default64 = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/* XXX find better encoding for the default64 instructions. */
|
||||
if (((opcode != TOK_ASM_push && opcode != TOK_ASM_pop
|
||||
&& opcode != TOK_ASM_pushw && opcode != TOK_ASM_pushl
|
||||
&& opcode != TOK_ASM_pushq && opcode != TOK_ASM_popw
|
||||
&& opcode != TOK_ASM_popl && opcode != TOK_ASM_popq
|
||||
&& opcode != TOK_ASM_call && opcode != TOK_ASM_jmp))
|
||||
&& !default64)
|
||||
rex64 = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* now generates the operation */
|
||||
if (OPCT_IS(pa->instr_type, OPC_FWAIT))
|
||||
g(0x9b);
|
||||
if (seg_prefix)
|
||||
g(seg_prefix);
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
/* Generate addr32 prefix if needed */
|
||||
for(i = 0; i < nb_ops; i++) {
|
||||
if (ops[i].type & OP_EA32) {
|
||||
g(0x67);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* generate data16 prefix if needed */
|
||||
p66 = 0;
|
||||
if (s == 1)
|
||||
|
@ -1002,21 +758,7 @@ again:
|
|||
modrm_index = -1;
|
||||
modreg_index = -1;
|
||||
if (pa->instr_type & OPC_MODRM) {
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
if (!nb_ops) {
|
||||
/* A modrm opcode without operands is a special case (e.g. mfence).
|
||||
It has a group and acts as if there's an register operand 0 */
|
||||
i = 0;
|
||||
ops[i].type = OP_REG;
|
||||
if (pa->sym == TOK_ASM_endbr64)
|
||||
ops[i].reg = 2; // dx
|
||||
else if (pa->sym >= TOK_ASM_lfence && pa->sym <= TOK_ASM_sfence)
|
||||
ops[i].reg = 0; // ax
|
||||
else
|
||||
tcc_error("bad MODR/M opcode without operands");
|
||||
goto modrm_found;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* first look for an ea operand */
|
||||
for(i = 0;i < nb_ops; i++) {
|
||||
if (op_type[i] & OP_EA)
|
||||
|
@ -1043,9 +785,6 @@ again:
|
|||
}
|
||||
}
|
||||
}
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
asm_rex (rex64, ops, nb_ops, op_type, modreg_index, modrm_index);
|
||||
#endif
|
||||
|
||||
if (pa->instr_type & OPC_REG) {
|
||||
/* mov $im, %reg case */
|
||||
|
@ -1120,7 +859,6 @@ again:
|
|||
}
|
||||
|
||||
/* emit constants */
|
||||
#ifndef TCC_TARGET_X86_64
|
||||
if (!(pa->instr_type & OPC_0F)
|
||||
&& (pa->opcode == 0x9a || pa->opcode == 0xea)) {
|
||||
/* ljmp or lcall kludge */
|
||||
|
@ -1130,7 +868,6 @@ again:
|
|||
gen_le16(ops[0].e.v);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
for(i = 0;i < nb_ops; i++) {
|
||||
v = op_type[i];
|
||||
if (v & (OP_IM8 | OP_IM16 | OP_IM32 | OP_IM64 | OP_IM8S | OP_ADDR)) {
|
||||
|
@ -1154,10 +891,6 @@ again:
|
|||
g(ops[i].e.v);
|
||||
} else if (v & OP_IM16) {
|
||||
gen_le16(ops[i].e.v);
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
} else if (v & OP_IM64) {
|
||||
gen_expr64(&ops[i].e);
|
||||
#endif
|
||||
} else if (pa->op_type[i] == OPT_DISP || pa->op_type[i] == OPT_DISP8) {
|
||||
gen_disp32(&ops[i].e);
|
||||
} else {
|
||||
|
@ -1541,10 +1274,6 @@ ST_FUNC void subst_asm_operand(CString *add_str,
|
|||
val = -val;
|
||||
cstr_printf(add_str, "%d", (int)sv->c.i);
|
||||
no_offset:;
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
if (r & VT_LVAL)
|
||||
cstr_cat(add_str, "(%rip)", -1);
|
||||
#endif
|
||||
} else if ((r & VT_VALMASK) == VT_LOCAL) {
|
||||
cstr_printf(add_str, "%d(%%%s)", (int)sv->c.i, get_tok_str(TOK_ASM_xax + 5, NULL));
|
||||
} else if (r & VT_LVAL) {
|
||||
|
@ -1586,10 +1315,6 @@ ST_FUNC void subst_asm_operand(CString *add_str,
|
|||
size = 2;
|
||||
} else if (modifier == 'k') {
|
||||
size = 4;
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
} else if (modifier == 'q') {
|
||||
size = 8;
|
||||
#endif
|
||||
}
|
||||
|
||||
switch(size) {
|
||||
|
@ -1605,11 +1330,6 @@ ST_FUNC void subst_asm_operand(CString *add_str,
|
|||
default:
|
||||
reg = TOK_ASM_eax + reg;
|
||||
break;
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
case 8:
|
||||
reg = TOK_ASM_rax + reg;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
cstr_printf(add_str, "%%%s", get_tok_str(reg, NULL));
|
||||
}
|
||||
|
@ -1627,15 +1347,8 @@ ST_FUNC void asm_gen_code(ASMOperand *operands, int nb_operands,
|
|||
|
||||
/* Strictly speaking %Xbp and %Xsp should be included in the
|
||||
call-preserved registers, but currently it doesn't matter. */
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
#ifdef TCC_TARGET_PE
|
||||
static const uint8_t reg_saved[] = { 3, 6, 7, 12, 13, 14, 15 };
|
||||
#else
|
||||
static const uint8_t reg_saved[] = { 3, 12, 13, 14, 15 };
|
||||
#endif
|
||||
#else
|
||||
static const uint8_t reg_saved[] = { 3, 6, 7 };
|
||||
#endif
|
||||
|
||||
|
||||
/* mark all used registers */
|
||||
memcpy(regs_allocated, clobber_regs, sizeof(regs_allocated));
|
||||
|
@ -1723,9 +1436,6 @@ ST_FUNC void asm_gen_code(ASMOperand *operands, int nb_operands,
|
|||
ST_FUNC void asm_clobber(uint8_t *clobber_regs, const char *str)
|
||||
{
|
||||
int reg;
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
unsigned int type;
|
||||
#endif
|
||||
|
||||
if (!strcmp(str, "memory") ||
|
||||
!strcmp(str, "cc") ||
|
||||
|
@ -1736,12 +1446,6 @@ ST_FUNC void asm_clobber(uint8_t *clobber_regs, const char *str)
|
|||
reg -= TOK_ASM_eax;
|
||||
} else if (reg >= TOK_ASM_ax && reg <= TOK_ASM_di) {
|
||||
reg -= TOK_ASM_ax;
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
} else if (reg >= TOK_ASM_rax && reg <= TOK_ASM_rdi) {
|
||||
reg -= TOK_ASM_rax;
|
||||
} else if ((reg = asm_parse_numeric_reg(reg, &type)) >= 0) {
|
||||
;
|
||||
#endif
|
||||
} else {
|
||||
tcc_error("invalid clobber register '%s'", str);
|
||||
}
|
||||
|
|
57
i386-tok.h
57
i386-tok.h
|
@ -10,28 +10,11 @@
|
|||
DEF(TOK_ASM_ ## x ## w, #x "w") \
|
||||
DEF(TOK_ASM_ ## x ## l, #x "l") \
|
||||
DEF(TOK_ASM_ ## x, #x)
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
# define DEF_BWLQ(x) \
|
||||
DEF(TOK_ASM_ ## x ## b, #x "b") \
|
||||
DEF(TOK_ASM_ ## x ## w, #x "w") \
|
||||
DEF(TOK_ASM_ ## x ## l, #x "l") \
|
||||
DEF(TOK_ASM_ ## x ## q, #x "q") \
|
||||
DEF(TOK_ASM_ ## x, #x)
|
||||
# define DEF_WLQ(x) \
|
||||
DEF(TOK_ASM_ ## x ## w, #x "w") \
|
||||
DEF(TOK_ASM_ ## x ## l, #x "l") \
|
||||
DEF(TOK_ASM_ ## x ## q, #x "q") \
|
||||
DEF(TOK_ASM_ ## x, #x)
|
||||
# define DEF_BWLX DEF_BWLQ
|
||||
# define DEF_WLX DEF_WLQ
|
||||
/* number of sizes + 1 */
|
||||
# define NBWLX 5
|
||||
#else
|
||||
# define DEF_BWLX DEF_BWL
|
||||
# define DEF_WLX DEF_WL
|
||||
/* number of sizes + 1 */
|
||||
# define NBWLX 4
|
||||
#endif
|
||||
|
||||
|
||||
#define DEF_FP1(x) \
|
||||
DEF(TOK_ASM_ ## f ## x ## s, "f" #x "s") \
|
||||
|
@ -102,16 +85,6 @@
|
|||
DEF_ASM(ebp)
|
||||
DEF_ASM(esi)
|
||||
DEF_ASM(edi)
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
DEF_ASM(rax)
|
||||
DEF_ASM(rcx)
|
||||
DEF_ASM(rdx)
|
||||
DEF_ASM(rbx)
|
||||
DEF_ASM(rsp)
|
||||
DEF_ASM(rbp)
|
||||
DEF_ASM(rsi)
|
||||
DEF_ASM(rdi)
|
||||
#endif
|
||||
DEF_ASM(mm0)
|
||||
DEF_ASM(mm1)
|
||||
DEF_ASM(mm2)
|
||||
|
@ -169,14 +142,6 @@
|
|||
DEF_ASM(st)
|
||||
DEF_ASM(rip)
|
||||
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
/* The four low parts of sp/bp/si/di that exist only on
|
||||
x86-64 (encoding aliased to ah,ch,dh,dh when not using REX). */
|
||||
DEF_ASM(spl)
|
||||
DEF_ASM(bpl)
|
||||
DEF_ASM(sil)
|
||||
DEF_ASM(dil)
|
||||
#endif
|
||||
/* generic two operands */
|
||||
DEF_BWLX(mov)
|
||||
|
||||
|
@ -216,16 +181,10 @@
|
|||
|
||||
DEF_ASM(pushw)
|
||||
DEF_ASM(pushl)
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
DEF_ASM(pushq)
|
||||
#endif
|
||||
DEF_ASM(push)
|
||||
|
||||
DEF_ASM(popw)
|
||||
DEF_ASM(popl)
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
DEF_ASM(popq)
|
||||
#endif
|
||||
DEF_ASM(pop)
|
||||
|
||||
DEF_BWL(in)
|
||||
|
@ -236,12 +195,6 @@
|
|||
DEF_ASM(movsbw)
|
||||
DEF_ASM(movsbl)
|
||||
DEF_ASM(movswl)
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
DEF_ASM(movsbq)
|
||||
DEF_ASM(movswq)
|
||||
DEF_ASM(movzwq)
|
||||
DEF_ASM(movslq)
|
||||
#endif
|
||||
|
||||
DEF_WLX(lea)
|
||||
|
||||
|
@ -313,11 +266,7 @@
|
|||
#define DEF_ASM_OP1(name, opcode, group, instr_type, op0)
|
||||
#define DEF_ASM_OP2(name, opcode, group, instr_type, op0, op1)
|
||||
#define DEF_ASM_OP3(name, opcode, group, instr_type, op0, op1, op2)
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
# include "x86_64-asm.h"
|
||||
#else
|
||||
#include "i386-asm.h"
|
||||
#endif
|
||||
|
||||
#define ALT(x)
|
||||
#define DEF_ASM_OP0(name, opcode)
|
||||
|
@ -325,8 +274,4 @@
|
|||
#define DEF_ASM_OP1(name, opcode, group, instr_type, op0) DEF_ASM(name)
|
||||
#define DEF_ASM_OP2(name, opcode, group, instr_type, op0, op1) DEF_ASM(name)
|
||||
#define DEF_ASM_OP3(name, opcode, group, instr_type, op0, op1, op2) DEF_ASM(name)
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
# include "x86_64-asm.h"
|
||||
#else
|
||||
#include "i386-asm.h"
|
||||
#endif
|
||||
|
|
657
il-gen.c
657
il-gen.c
|
@ -1,657 +0,0 @@
|
|||
/*
|
||||
* CIL code generator for TCC
|
||||
*
|
||||
* Copyright (c) 2002 Fabrice Bellard
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#error this code has bit-rotted since 2003
|
||||
|
||||
/* number of available registers */
|
||||
#define NB_REGS 3
|
||||
|
||||
/* a register can belong to several classes. The classes must be
|
||||
sorted from more general to more precise (see gv2() code which does
|
||||
assumptions on it). */
|
||||
#define RC_ST 0x0001 /* any stack entry */
|
||||
#define RC_ST0 0x0002 /* top of stack */
|
||||
#define RC_ST1 0x0004 /* top - 1 */
|
||||
|
||||
#define RC_INT RC_ST
|
||||
#define RC_FLOAT RC_ST
|
||||
#define RC_IRET RC_ST0 /* function return: integer register */
|
||||
#define RC_LRET RC_ST0 /* function return: second integer register */
|
||||
#define RC_FRET RC_ST0 /* function return: float register */
|
||||
|
||||
/* pretty names for the registers */
|
||||
enum {
|
||||
REG_ST0 = 0,
|
||||
REG_ST1,
|
||||
REG_ST2,
|
||||
};
|
||||
|
||||
const int reg_classes[NB_REGS] = {
|
||||
/* ST0 */ RC_ST | RC_ST0,
|
||||
/* ST1 */ RC_ST | RC_ST1,
|
||||
/* ST2 */ RC_ST,
|
||||
};
|
||||
|
||||
/* return registers for function */
|
||||
#define REG_IRET REG_ST0 /* single word int return register */
|
||||
#define REG_LRET REG_ST0 /* second word return register (for long long) */
|
||||
#define REG_FRET REG_ST0 /* float return register */
|
||||
|
||||
/* defined if function parameters must be evaluated in reverse order */
|
||||
/* #define INVERT_FUNC_PARAMS */
|
||||
|
||||
/* defined if structures are passed as pointers. Otherwise structures
|
||||
are directly pushed on stack. */
|
||||
/* #define FUNC_STRUCT_PARAM_AS_PTR */
|
||||
|
||||
/* pointer size, in bytes */
|
||||
#define PTR_SIZE 4
|
||||
|
||||
/* long double size and alignment, in bytes */
|
||||
#define LDOUBLE_SIZE 8
|
||||
#define LDOUBLE_ALIGN 8
|
||||
|
||||
/* function call context */
|
||||
typedef struct GFuncContext {
|
||||
int func_call; /* func call type (FUNC_STDCALL or FUNC_CDECL) */
|
||||
} GFuncContext;
|
||||
|
||||
/******************************************************/
|
||||
/* opcode definitions */
|
||||
|
||||
#define IL_OP_PREFIX 0xFE
|
||||
|
||||
enum ILOPCodes {
|
||||
#define OP(name, str, n) IL_OP_ ## name = n,
|
||||
#include "il-opcodes.h"
|
||||
#undef OP
|
||||
};
|
||||
|
||||
char *il_opcodes_str[] = {
|
||||
#define OP(name, str, n) [n] = str,
|
||||
#include "il-opcodes.h"
|
||||
#undef OP
|
||||
};
|
||||
|
||||
/******************************************************/
|
||||
|
||||
/* arguments variable numbers start from there */
|
||||
#define ARG_BASE 0x70000000
|
||||
|
||||
static FILE *il_outfile;
|
||||
|
||||
static void out_byte(int c)
|
||||
{
|
||||
*(char *)ind++ = c;
|
||||
}
|
||||
|
||||
static void out_le32(int c)
|
||||
{
|
||||
out_byte(c);
|
||||
out_byte(c >> 8);
|
||||
out_byte(c >> 16);
|
||||
out_byte(c >> 24);
|
||||
}
|
||||
|
||||
static void init_outfile(void)
|
||||
{
|
||||
if (!il_outfile) {
|
||||
il_outfile = stdout;
|
||||
fprintf(il_outfile,
|
||||
".assembly extern mscorlib\n"
|
||||
"{\n"
|
||||
".ver 1:0:2411:0\n"
|
||||
"}\n\n");
|
||||
}
|
||||
}
|
||||
|
||||
static void out_op1(int op)
|
||||
{
|
||||
if (op & 0x100)
|
||||
out_byte(IL_OP_PREFIX);
|
||||
out_byte(op & 0xff);
|
||||
}
|
||||
|
||||
/* output an opcode with prefix */
|
||||
static void out_op(int op)
|
||||
{
|
||||
out_op1(op);
|
||||
fprintf(il_outfile, " %s\n", il_opcodes_str[op]);
|
||||
}
|
||||
|
||||
static void out_opb(int op, int c)
|
||||
{
|
||||
out_op1(op);
|
||||
out_byte(c);
|
||||
fprintf(il_outfile, " %s %d\n", il_opcodes_str[op], c);
|
||||
}
|
||||
|
||||
static void out_opi(int op, int c)
|
||||
{
|
||||
out_op1(op);
|
||||
out_le32(c);
|
||||
fprintf(il_outfile, " %s 0x%x\n", il_opcodes_str[op], c);
|
||||
}
|
||||
|
||||
/* XXX: not complete */
|
||||
static void il_type_to_str(char *buf, int buf_size,
|
||||
int t, const char *varstr)
|
||||
{
|
||||
int bt;
|
||||
Sym *s, *sa;
|
||||
char buf1[256];
|
||||
const char *tstr;
|
||||
|
||||
t = t & VT_TYPE;
|
||||
bt = t & VT_BTYPE;
|
||||
buf[0] = '\0';
|
||||
if (t & VT_UNSIGNED)
|
||||
pstrcat(buf, buf_size, "unsigned ");
|
||||
switch(bt) {
|
||||
case VT_VOID:
|
||||
tstr = "void";
|
||||
goto add_tstr;
|
||||
case VT_BOOL:
|
||||
tstr = "bool";
|
||||
goto add_tstr;
|
||||
case VT_BYTE:
|
||||
tstr = "int8";
|
||||
goto add_tstr;
|
||||
case VT_SHORT:
|
||||
tstr = "int16";
|
||||
goto add_tstr;
|
||||
case VT_ENUM:
|
||||
case VT_INT:
|
||||
case VT_LONG:
|
||||
tstr = "int32";
|
||||
goto add_tstr;
|
||||
case VT_LLONG:
|
||||
tstr = "int64";
|
||||
goto add_tstr;
|
||||
case VT_FLOAT:
|
||||
tstr = "float32";
|
||||
goto add_tstr;
|
||||
case VT_DOUBLE:
|
||||
case VT_LDOUBLE:
|
||||
tstr = "float64";
|
||||
add_tstr:
|
||||
pstrcat(buf, buf_size, tstr);
|
||||
break;
|
||||
case VT_STRUCT:
|
||||
tcc_error("structures not handled yet");
|
||||
break;
|
||||
case VT_FUNC:
|
||||
s = sym_find((unsigned)t >> VT_STRUCT_SHIFT);
|
||||
il_type_to_str(buf, buf_size, s->t, varstr);
|
||||
pstrcat(buf, buf_size, "(");
|
||||
sa = s->next;
|
||||
while (sa != NULL) {
|
||||
il_type_to_str(buf1, sizeof(buf1), sa->t, NULL);
|
||||
pstrcat(buf, buf_size, buf1);
|
||||
sa = sa->next;
|
||||
if (sa)
|
||||
pstrcat(buf, buf_size, ", ");
|
||||
}
|
||||
pstrcat(buf, buf_size, ")");
|
||||
goto no_var;
|
||||
case VT_PTR:
|
||||
s = sym_find((unsigned)t >> VT_STRUCT_SHIFT);
|
||||
pstrcpy(buf1, sizeof(buf1), "*");
|
||||
if (varstr)
|
||||
pstrcat(buf1, sizeof(buf1), varstr);
|
||||
il_type_to_str(buf, buf_size, s->t, buf1);
|
||||
goto no_var;
|
||||
}
|
||||
if (varstr) {
|
||||
pstrcat(buf, buf_size, " ");
|
||||
pstrcat(buf, buf_size, varstr);
|
||||
}
|
||||
no_var: ;
|
||||
}
|
||||
|
||||
|
||||
/* patch relocation entry with value 'val' */
|
||||
void greloc_patch1(Reloc *p, int val)
|
||||
{
|
||||
}
|
||||
|
||||
/* output a symbol and patch all calls to it */
|
||||
void gsym_addr(t, a)
|
||||
{
|
||||
}
|
||||
|
||||
/* output jump and return symbol */
|
||||
static int out_opj(int op, int c)
|
||||
{
|
||||
out_op1(op);
|
||||
out_le32(0);
|
||||
if (c == 0) {
|
||||
c = ind - (int)cur_text_section->data;
|
||||
}
|
||||
fprintf(il_outfile, " %s L%d\n", il_opcodes_str[op], c);
|
||||
return c;
|
||||
}
|
||||
|
||||
void gsym(int t)
|
||||
{
|
||||
fprintf(il_outfile, "L%d:\n", t);
|
||||
}
|
||||
|
||||
/* load 'r' from value 'sv' */
|
||||
void load(int r, SValue *sv)
|
||||
{
|
||||
int v, fc, ft;
|
||||
|
||||
v = sv->r & VT_VALMASK;
|
||||
fc = sv->c.i;
|
||||
ft = sv->t;
|
||||
|
||||
if (sv->r & VT_LVAL) {
|
||||
if (v == VT_LOCAL) {
|
||||
if (fc >= ARG_BASE) {
|
||||
fc -= ARG_BASE;
|
||||
if (fc >= 0 && fc <= 4) {
|
||||
out_op(IL_OP_LDARG_0 + fc);
|
||||
} else if (fc <= 0xff) {
|
||||
out_opb(IL_OP_LDARG_S, fc);
|
||||
} else {
|
||||
out_opi(IL_OP_LDARG, fc);
|
||||
}
|
||||
} else {
|
||||
if (fc >= 0 && fc <= 4) {
|
||||
out_op(IL_OP_LDLOC_0 + fc);
|
||||
} else if (fc <= 0xff) {
|
||||
out_opb(IL_OP_LDLOC_S, fc);
|
||||
} else {
|
||||
out_opi(IL_OP_LDLOC, fc);
|
||||
}
|
||||
}
|
||||
} else if (v == VT_CONST) {
|
||||
/* XXX: handle globals */
|
||||
out_opi(IL_OP_LDSFLD, 0);
|
||||
} else {
|
||||
if ((ft & VT_BTYPE) == VT_FLOAT) {
|
||||
out_op(IL_OP_LDIND_R4);
|
||||
} else if ((ft & VT_BTYPE) == VT_DOUBLE) {
|
||||
out_op(IL_OP_LDIND_R8);
|
||||
} else if ((ft & VT_BTYPE) == VT_LDOUBLE) {
|
||||
out_op(IL_OP_LDIND_R8);
|
||||
} else if ((ft & VT_TYPE) == VT_BYTE)
|
||||
out_op(IL_OP_LDIND_I1);
|
||||
else if ((ft & VT_TYPE) == (VT_BYTE | VT_UNSIGNED))
|
||||
out_op(IL_OP_LDIND_U1);
|
||||
else if ((ft & VT_TYPE) == VT_SHORT)
|
||||
out_op(IL_OP_LDIND_I2);
|
||||
else if ((ft & VT_TYPE) == (VT_SHORT | VT_UNSIGNED))
|
||||
out_op(IL_OP_LDIND_U2);
|
||||
else
|
||||
out_op(IL_OP_LDIND_I4);
|
||||
}
|
||||
} else {
|
||||
if (v == VT_CONST) {
|
||||
/* XXX: handle globals */
|
||||
if (fc >= -1 && fc <= 8) {
|
||||
out_op(IL_OP_LDC_I4_M1 + fc + 1);
|
||||
} else {
|
||||
out_opi(IL_OP_LDC_I4, fc);
|
||||
}
|
||||
} else if (v == VT_LOCAL) {
|
||||
if (fc >= ARG_BASE) {
|
||||
fc -= ARG_BASE;
|
||||
if (fc <= 0xff) {
|
||||
out_opb(IL_OP_LDARGA_S, fc);
|
||||
} else {
|
||||
out_opi(IL_OP_LDARGA, fc);
|
||||
}
|
||||
} else {
|
||||
if (fc <= 0xff) {
|
||||
out_opb(IL_OP_LDLOCA_S, fc);
|
||||
} else {
|
||||
out_opi(IL_OP_LDLOCA, fc);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* XXX: do it */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* store register 'r' in lvalue 'v' */
|
||||
void store(int r, SValue *sv)
|
||||
{
|
||||
int v, fc, ft;
|
||||
|
||||
v = sv->r & VT_VALMASK;
|
||||
fc = sv->c.i;
|
||||
ft = sv->t;
|
||||
if (v == VT_LOCAL) {
|
||||
if (fc >= ARG_BASE) {
|
||||
fc -= ARG_BASE;
|
||||
/* XXX: check IL arg store semantics */
|
||||
if (fc <= 0xff) {
|
||||
out_opb(IL_OP_STARG_S, fc);
|
||||
} else {
|
||||
out_opi(IL_OP_STARG, fc);
|
||||
}
|
||||
} else {
|
||||
if (fc >= 0 && fc <= 4) {
|
||||
out_op(IL_OP_STLOC_0 + fc);
|
||||
} else if (fc <= 0xff) {
|
||||
out_opb(IL_OP_STLOC_S, fc);
|
||||
} else {
|
||||
out_opi(IL_OP_STLOC, fc);
|
||||
}
|
||||
}
|
||||
} else if (v == VT_CONST) {
|
||||
/* XXX: handle globals */
|
||||
out_opi(IL_OP_STSFLD, 0);
|
||||
} else {
|
||||
if ((ft & VT_BTYPE) == VT_FLOAT)
|
||||
out_op(IL_OP_STIND_R4);
|
||||
else if ((ft & VT_BTYPE) == VT_DOUBLE)
|
||||
out_op(IL_OP_STIND_R8);
|
||||
else if ((ft & VT_BTYPE) == VT_LDOUBLE)
|
||||
out_op(IL_OP_STIND_R8);
|
||||
else if ((ft & VT_BTYPE) == VT_BYTE)
|
||||
out_op(IL_OP_STIND_I1);
|
||||
else if ((ft & VT_BTYPE) == VT_SHORT)
|
||||
out_op(IL_OP_STIND_I2);
|
||||
else
|
||||
out_op(IL_OP_STIND_I4);
|
||||
}
|
||||
}
|
||||
|
||||
/* start function call and return function call context */
|
||||
void gfunc_start(GFuncContext *c, int func_call)
|
||||
{
|
||||
c->func_call = func_call;
|
||||
}
|
||||
|
||||
/* push function parameter which is in (vtop->t, vtop->c). Stack entry
|
||||
is then popped. */
|
||||
void gfunc_param(GFuncContext *c)
|
||||
{
|
||||
if ((vtop->t & VT_BTYPE) == VT_STRUCT) {
|
||||
tcc_error("structures passed as value not handled yet");
|
||||
} else {
|
||||
/* simply push on stack */
|
||||
gv(RC_ST0);
|
||||
}
|
||||
vtop--;
|
||||
}
|
||||
|
||||
/* generate function call with address in (vtop->t, vtop->c) and free function
|
||||
context. Stack entry is popped */
|
||||
void gfunc_call(GFuncContext *c)
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
if ((vtop->r & (VT_VALMASK | VT_LVAL)) == VT_CONST) {
|
||||
/* XXX: more info needed from tcc */
|
||||
il_type_to_str(buf, sizeof(buf), vtop->t, "xxx");
|
||||
fprintf(il_outfile, " call %s\n", buf);
|
||||
} else {
|
||||
/* indirect call */
|
||||
gv(RC_INT);
|
||||
il_type_to_str(buf, sizeof(buf), vtop->t, NULL);
|
||||
fprintf(il_outfile, " calli %s\n", buf);
|
||||
}
|
||||
vtop--;
|
||||
}
|
||||
|
||||
/* generate function prolog of type 't' */
|
||||
void gfunc_prolog(int t)
|
||||
{
|
||||
int addr, u, func_call;
|
||||
Sym *sym;
|
||||
char buf[1024];
|
||||
|
||||
init_outfile();
|
||||
|
||||
/* XXX: pass function name to gfunc_prolog */
|
||||
il_type_to_str(buf, sizeof(buf), t, funcname);
|
||||
fprintf(il_outfile, ".method static %s il managed\n", buf);
|
||||
fprintf(il_outfile, "{\n");
|
||||
/* XXX: cannot do better now */
|
||||
fprintf(il_outfile, " .maxstack %d\n", NB_REGS);
|
||||
fprintf(il_outfile, " .locals (int32, int32, int32, int32, int32, int32, int32, int32)\n");
|
||||
|
||||
if (!strcmp(funcname, "main"))
|
||||
fprintf(il_outfile, " .entrypoint\n");
|
||||
|
||||
sym = sym_find((unsigned)t >> VT_STRUCT_SHIFT);
|
||||
func_call = sym->r;
|
||||
|
||||
addr = ARG_BASE;
|
||||
/* if the function returns a structure, then add an
|
||||
implicit pointer parameter */
|
||||
func_vt = sym->t;
|
||||
func_var = (sym->c == FUNC_ELLIPSIS);
|
||||
if ((func_vt & VT_BTYPE) == VT_STRUCT) {
|
||||
func_vc = addr;
|
||||
addr++;
|
||||
}
|
||||
/* define parameters */
|
||||
while ((sym = sym->next) != NULL) {
|
||||
u = sym->t;
|
||||
sym_push(sym->v & ~SYM_FIELD, u,
|
||||
VT_LOCAL | lvalue_type(sym->type.t), addr);
|
||||
addr++;
|
||||
}
|
||||
}
|
||||
|
||||
/* generate function epilog */
|
||||
void gfunc_epilog(void)
|
||||
{
|
||||
out_op(IL_OP_RET);
|
||||
fprintf(il_outfile, "}\n\n");
|
||||
}
|
||||
|
||||
/* generate a jump to a label */
|
||||
int gjmp(int t)
|
||||
{
|
||||
return out_opj(IL_OP_BR, t);
|
||||
}
|
||||
|
||||
/* generate a jump to a fixed address */
|
||||
void gjmp_addr(int a)
|
||||
{
|
||||
/* XXX: handle syms */
|
||||
out_opi(IL_OP_BR, a);
|
||||
}
|
||||
|
||||
/* generate a test. set 'inv' to invert test. Stack entry is popped */
|
||||
int gtst(int inv, int t)
|
||||
{
|
||||
int v, *p, c;
|
||||
|
||||
v = vtop->r & VT_VALMASK;
|
||||
if (v == VT_CMP) {
|
||||
c = vtop->c.i ^ inv;
|
||||
switch(c) {
|
||||
case TOK_EQ:
|
||||
c = IL_OP_BEQ;
|
||||
break;
|
||||
case TOK_NE:
|
||||
c = IL_OP_BNE_UN;
|
||||
break;
|
||||
case TOK_LT:
|
||||
c = IL_OP_BLT;
|
||||
break;
|
||||
case TOK_LE:
|
||||
c = IL_OP_BLE;
|
||||
break;
|
||||
case TOK_GT:
|
||||
c = IL_OP_BGT;
|
||||
break;
|
||||
case TOK_GE:
|
||||
c = IL_OP_BGE;
|
||||
break;
|
||||
case TOK_ULT:
|
||||
c = IL_OP_BLT_UN;
|
||||
break;
|
||||
case TOK_ULE:
|
||||
c = IL_OP_BLE_UN;
|
||||
break;
|
||||
case TOK_UGT:
|
||||
c = IL_OP_BGT_UN;
|
||||
break;
|
||||
case TOK_UGE:
|
||||
c = IL_OP_BGE_UN;
|
||||
break;
|
||||
}
|
||||
t = out_opj(c, t);
|
||||
} else if (v == VT_JMP || v == VT_JMPI) {
|
||||
/* && or || optimization */
|
||||
if ((v & 1) == inv) {
|
||||
/* insert vtop->c jump list in t */
|
||||
p = &vtop->c.i;
|
||||
while (*p != 0)
|
||||
p = (int *)*p;
|
||||
*p = t;
|
||||
t = vtop->c.i;
|
||||
} else {
|
||||
t = gjmp(t);
|
||||
gsym(vtop->c.i);
|
||||
}
|
||||
}
|
||||
vtop--;
|
||||
return t;
|
||||
}
|
||||
|
||||
/* generate an integer binary operation */
|
||||
void gen_opi(int op)
|
||||
{
|
||||
gv2(RC_ST1, RC_ST0);
|
||||
switch(op) {
|
||||
case '+':
|
||||
out_op(IL_OP_ADD);
|
||||
goto std_op;
|
||||
case '-':
|
||||
out_op(IL_OP_SUB);
|
||||
goto std_op;
|
||||
case '&':
|
||||
out_op(IL_OP_AND);
|
||||
goto std_op;
|
||||
case '^':
|
||||
out_op(IL_OP_XOR);
|
||||
goto std_op;
|
||||
case '|':
|
||||
out_op(IL_OP_OR);
|
||||
goto std_op;
|
||||
case '*':
|
||||
out_op(IL_OP_MUL);
|
||||
goto std_op;
|
||||
case TOK_SHL:
|
||||
out_op(IL_OP_SHL);
|
||||
goto std_op;
|
||||
case TOK_SHR:
|
||||
out_op(IL_OP_SHR_UN);
|
||||
goto std_op;
|
||||
case TOK_SAR:
|
||||
out_op(IL_OP_SHR);
|
||||
goto std_op;
|
||||
case '/':
|
||||
case TOK_PDIV:
|
||||
out_op(IL_OP_DIV);
|
||||
goto std_op;
|
||||
case TOK_UDIV:
|
||||
out_op(IL_OP_DIV_UN);
|
||||
goto std_op;
|
||||
case '%':
|
||||
out_op(IL_OP_REM);
|
||||
goto std_op;
|
||||
case TOK_UMOD:
|
||||
out_op(IL_OP_REM_UN);
|
||||
std_op:
|
||||
vtop--;
|
||||
vtop[0].r = REG_ST0;
|
||||
break;
|
||||
case TOK_EQ:
|
||||
case TOK_NE:
|
||||
case TOK_LT:
|
||||
case TOK_LE:
|
||||
case TOK_GT:
|
||||
case TOK_GE:
|
||||
case TOK_ULT:
|
||||
case TOK_ULE:
|
||||
case TOK_UGT:
|
||||
case TOK_UGE:
|
||||
vtop--;
|
||||
vtop[0].r = VT_CMP;
|
||||
vtop[0].c.i = op;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* generate a floating point operation 'v = t1 op t2' instruction. The
|
||||
two operands are guaranteed to have the same floating point type */
|
||||
void gen_opf(int op)
|
||||
{
|
||||
/* same as integer */
|
||||
gen_opi(op);
|
||||
}
|
||||
|
||||
/* convert integers to fp 't' type. Must handle 'int', 'unsigned int'
|
||||
and 'long long' cases. */
|
||||
void gen_cvt_itof(int t)
|
||||
{
|
||||
gv(RC_ST0);
|
||||
if (t == VT_FLOAT)
|
||||
out_op(IL_OP_CONV_R4);
|
||||
else
|
||||
out_op(IL_OP_CONV_R8);
|
||||
}
|
||||
|
||||
/* convert fp to int 't' type */
|
||||
/* XXX: handle long long case */
|
||||
void gen_cvt_ftoi(int t)
|
||||
{
|
||||
gv(RC_ST0);
|
||||
switch(t) {
|
||||
case VT_INT | VT_UNSIGNED:
|
||||
out_op(IL_OP_CONV_U4);
|
||||
break;
|
||||
case VT_LLONG:
|
||||
out_op(IL_OP_CONV_I8);
|
||||
break;
|
||||
case VT_LLONG | VT_UNSIGNED:
|
||||
out_op(IL_OP_CONV_U8);
|
||||
break;
|
||||
default:
|
||||
out_op(IL_OP_CONV_I4);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* convert from one floating point type to another */
|
||||
void gen_cvt_ftof(int t)
|
||||
{
|
||||
gv(RC_ST0);
|
||||
if (t == VT_FLOAT) {
|
||||
out_op(IL_OP_CONV_R4);
|
||||
} else {
|
||||
out_op(IL_OP_CONV_R8);
|
||||
}
|
||||
}
|
||||
|
||||
/* end of CIL code generator */
|
||||
/*************************************************************/
|
||||
|
251
il-opcodes.h
251
il-opcodes.h
|
@ -1,251 +0,0 @@
|
|||
/*
|
||||
* CIL opcode definition
|
||||
*
|
||||
* Copyright (c) 2002 Fabrice Bellard
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
OP(NOP, "nop", 0x00)
|
||||
OP(BREAK, "break", 0x01)
|
||||
OP(LDARG_0, "ldarg.0", 0x02)
|
||||
OP(LDARG_1, "ldarg.1", 0x03)
|
||||
OP(LDARG_2, "ldarg.2", 0x04)
|
||||
OP(LDARG_3, "ldarg.3", 0x05)
|
||||
OP(LDLOC_0, "ldloc.0", 0x06)
|
||||
OP(LDLOC_1, "ldloc.1", 0x07)
|
||||
OP(LDLOC_2, "ldloc.2", 0x08)
|
||||
OP(LDLOC_3, "ldloc.3", 0x09)
|
||||
OP(STLOC_0, "stloc.0", 0x0a)
|
||||
OP(STLOC_1, "stloc.1", 0x0b)
|
||||
OP(STLOC_2, "stloc.2", 0x0c)
|
||||
OP(STLOC_3, "stloc.3", 0x0d)
|
||||
OP(LDARG_S, "ldarg.s", 0x0e)
|
||||
OP(LDARGA_S, "ldarga.s", 0x0f)
|
||||
OP(STARG_S, "starg.s", 0x10)
|
||||
OP(LDLOC_S, "ldloc.s", 0x11)
|
||||
OP(LDLOCA_S, "ldloca.s", 0x12)
|
||||
OP(STLOC_S, "stloc.s", 0x13)
|
||||
OP(LDNULL, "ldnull", 0x14)
|
||||
OP(LDC_I4_M1, "ldc.i4.m1", 0x15)
|
||||
OP(LDC_I4_0, "ldc.i4.0", 0x16)
|
||||
OP(LDC_I4_1, "ldc.i4.1", 0x17)
|
||||
OP(LDC_I4_2, "ldc.i4.2", 0x18)
|
||||
OP(LDC_I4_3, "ldc.i4.3", 0x19)
|
||||
OP(LDC_I4_4, "ldc.i4.4", 0x1a)
|
||||
OP(LDC_I4_5, "ldc.i4.5", 0x1b)
|
||||
OP(LDC_I4_6, "ldc.i4.6", 0x1c)
|
||||
OP(LDC_I4_7, "ldc.i4.7", 0x1d)
|
||||
OP(LDC_I4_8, "ldc.i4.8", 0x1e)
|
||||
OP(LDC_I4_S, "ldc.i4.s", 0x1f)
|
||||
OP(LDC_I4, "ldc.i4", 0x20)
|
||||
OP(LDC_I8, "ldc.i8", 0x21)
|
||||
OP(LDC_R4, "ldc.r4", 0x22)
|
||||
OP(LDC_R8, "ldc.r8", 0x23)
|
||||
OP(LDPTR, "ldptr", 0x24)
|
||||
OP(DUP, "dup", 0x25)
|
||||
OP(POP, "pop", 0x26)
|
||||
OP(JMP, "jmp", 0x27)
|
||||
OP(CALL, "call", 0x28)
|
||||
OP(CALLI, "calli", 0x29)
|
||||
OP(RET, "ret", 0x2a)
|
||||
OP(BR_S, "br.s", 0x2b)
|
||||
OP(BRFALSE_S, "brfalse.s", 0x2c)
|
||||
OP(BRTRUE_S, "brtrue.s", 0x2d)
|
||||
OP(BEQ_S, "beq.s", 0x2e)
|
||||
OP(BGE_S, "bge.s", 0x2f)
|
||||
OP(BGT_S, "bgt.s", 0x30)
|
||||
OP(BLE_S, "ble.s", 0x31)
|
||||
OP(BLT_S, "blt.s", 0x32)
|
||||
OP(BNE_UN_S, "bne.un.s", 0x33)
|
||||
OP(BGE_UN_S, "bge.un.s", 0x34)
|
||||
OP(BGT_UN_S, "bgt.un.s", 0x35)
|
||||
OP(BLE_UN_S, "ble.un.s", 0x36)
|
||||
OP(BLT_UN_S, "blt.un.s", 0x37)
|
||||
OP(BR, "br", 0x38)
|
||||
OP(BRFALSE, "brfalse", 0x39)
|
||||
OP(BRTRUE, "brtrue", 0x3a)
|
||||
OP(BEQ, "beq", 0x3b)
|
||||
OP(BGE, "bge", 0x3c)
|
||||
OP(BGT, "bgt", 0x3d)
|
||||
OP(BLE, "ble", 0x3e)
|
||||
OP(BLT, "blt", 0x3f)
|
||||
OP(BNE_UN, "bne.un", 0x40)
|
||||
OP(BGE_UN, "bge.un", 0x41)
|
||||
OP(BGT_UN, "bgt.un", 0x42)
|
||||
OP(BLE_UN, "ble.un", 0x43)
|
||||
OP(BLT_UN, "blt.un", 0x44)
|
||||
OP(SWITCH, "switch", 0x45)
|
||||
OP(LDIND_I1, "ldind.i1", 0x46)
|
||||
OP(LDIND_U1, "ldind.u1", 0x47)
|
||||
OP(LDIND_I2, "ldind.i2", 0x48)
|
||||
OP(LDIND_U2, "ldind.u2", 0x49)
|
||||
OP(LDIND_I4, "ldind.i4", 0x4a)
|
||||
OP(LDIND_U4, "ldind.u4", 0x4b)
|
||||
OP(LDIND_I8, "ldind.i8", 0x4c)
|
||||
OP(LDIND_I, "ldind.i", 0x4d)
|
||||
OP(LDIND_R4, "ldind.r4", 0x4e)
|
||||
OP(LDIND_R8, "ldind.r8", 0x4f)
|
||||
OP(LDIND_REF, "ldind.ref", 0x50)
|
||||
OP(STIND_REF, "stind.ref", 0x51)
|
||||
OP(STIND_I1, "stind.i1", 0x52)
|
||||
OP(STIND_I2, "stind.i2", 0x53)
|
||||
OP(STIND_I4, "stind.i4", 0x54)
|
||||
OP(STIND_I8, "stind.i8", 0x55)
|
||||
OP(STIND_R4, "stind.r4", 0x56)
|
||||
OP(STIND_R8, "stind.r8", 0x57)
|
||||
OP(ADD, "add", 0x58)
|
||||
OP(SUB, "sub", 0x59)
|
||||
OP(MUL, "mul", 0x5a)
|
||||
OP(DIV, "div", 0x5b)
|
||||
OP(DIV_UN, "div.un", 0x5c)
|
||||
OP(REM, "rem", 0x5d)
|
||||
OP(REM_UN, "rem.un", 0x5e)
|
||||
OP(AND, "and", 0x5f)
|
||||
OP(OR, "or", 0x60)
|
||||
OP(XOR, "xor", 0x61)
|
||||
OP(SHL, "shl", 0x62)
|
||||
OP(SHR, "shr", 0x63)
|
||||
OP(SHR_UN, "shr.un", 0x64)
|
||||
OP(NEG, "neg", 0x65)
|
||||
OP(NOT, "not", 0x66)
|
||||
OP(CONV_I1, "conv.i1", 0x67)
|
||||
OP(CONV_I2, "conv.i2", 0x68)
|
||||
OP(CONV_I4, "conv.i4", 0x69)
|
||||
OP(CONV_I8, "conv.i8", 0x6a)
|
||||
OP(CONV_R4, "conv.r4", 0x6b)
|
||||
OP(CONV_R8, "conv.r8", 0x6c)
|
||||
OP(CONV_U4, "conv.u4", 0x6d)
|
||||
OP(CONV_U8, "conv.u8", 0x6e)
|
||||
OP(CALLVIRT, "callvirt", 0x6f)
|
||||
OP(CPOBJ, "cpobj", 0x70)
|
||||
OP(LDOBJ, "ldobj", 0x71)
|
||||
OP(LDSTR, "ldstr", 0x72)
|
||||
OP(NEWOBJ, "newobj", 0x73)
|
||||
OP(CASTCLASS, "castclass", 0x74)
|
||||
OP(ISINST, "isinst", 0x75)
|
||||
OP(CONV_R_UN, "conv.r.un", 0x76)
|
||||
OP(ANN_DATA_S, "ann.data.s", 0x77)
|
||||
OP(UNBOX, "unbox", 0x79)
|
||||
OP(THROW, "throw", 0x7a)
|
||||
OP(LDFLD, "ldfld", 0x7b)
|
||||
OP(LDFLDA, "ldflda", 0x7c)
|
||||
OP(STFLD, "stfld", 0x7d)
|
||||
OP(LDSFLD, "ldsfld", 0x7e)
|
||||
OP(LDSFLDA, "ldsflda", 0x7f)
|
||||
OP(STSFLD, "stsfld", 0x80)
|
||||
OP(STOBJ, "stobj", 0x81)
|
||||
OP(CONV_OVF_I1_UN, "conv.ovf.i1.un", 0x82)
|
||||
OP(CONV_OVF_I2_UN, "conv.ovf.i2.un", 0x83)
|
||||
OP(CONV_OVF_I4_UN, "conv.ovf.i4.un", 0x84)
|
||||
OP(CONV_OVF_I8_UN, "conv.ovf.i8.un", 0x85)
|
||||
OP(CONV_OVF_U1_UN, "conv.ovf.u1.un", 0x86)
|
||||
OP(CONV_OVF_U2_UN, "conv.ovf.u2.un", 0x87)
|
||||
OP(CONV_OVF_U4_UN, "conv.ovf.u4.un", 0x88)
|
||||
OP(CONV_OVF_U8_UN, "conv.ovf.u8.un", 0x89)
|
||||
OP(CONV_OVF_I_UN, "conv.ovf.i.un", 0x8a)
|
||||
OP(CONV_OVF_U_UN, "conv.ovf.u.un", 0x8b)
|
||||
OP(BOX, "box", 0x8c)
|
||||
OP(NEWARR, "newarr", 0x8d)
|
||||
OP(LDLEN, "ldlen", 0x8e)
|
||||
OP(LDELEMA, "ldelema", 0x8f)
|
||||
OP(LDELEM_I1, "ldelem.i1", 0x90)
|
||||
OP(LDELEM_U1, "ldelem.u1", 0x91)
|
||||
OP(LDELEM_I2, "ldelem.i2", 0x92)
|
||||
OP(LDELEM_U2, "ldelem.u2", 0x93)
|
||||
OP(LDELEM_I4, "ldelem.i4", 0x94)
|
||||
OP(LDELEM_U4, "ldelem.u4", 0x95)
|
||||
OP(LDELEM_I8, "ldelem.i8", 0x96)
|
||||
OP(LDELEM_I, "ldelem.i", 0x97)
|
||||
OP(LDELEM_R4, "ldelem.r4", 0x98)
|
||||
OP(LDELEM_R8, "ldelem.r8", 0x99)
|
||||
OP(LDELEM_REF, "ldelem.ref", 0x9a)
|
||||
OP(STELEM_I, "stelem.i", 0x9b)
|
||||
OP(STELEM_I1, "stelem.i1", 0x9c)
|
||||
OP(STELEM_I2, "stelem.i2", 0x9d)
|
||||
OP(STELEM_I4, "stelem.i4", 0x9e)
|
||||
OP(STELEM_I8, "stelem.i8", 0x9f)
|
||||
OP(STELEM_R4, "stelem.r4", 0xa0)
|
||||
OP(STELEM_R8, "stelem.r8", 0xa1)
|
||||
OP(STELEM_REF, "stelem.ref", 0xa2)
|
||||
OP(CONV_OVF_I1, "conv.ovf.i1", 0xb3)
|
||||
OP(CONV_OVF_U1, "conv.ovf.u1", 0xb4)
|
||||
OP(CONV_OVF_I2, "conv.ovf.i2", 0xb5)
|
||||
OP(CONV_OVF_U2, "conv.ovf.u2", 0xb6)
|
||||
OP(CONV_OVF_I4, "conv.ovf.i4", 0xb7)
|
||||
OP(CONV_OVF_U4, "conv.ovf.u4", 0xb8)
|
||||
OP(CONV_OVF_I8, "conv.ovf.i8", 0xb9)
|
||||
OP(CONV_OVF_U8, "conv.ovf.u8", 0xba)
|
||||
OP(REFANYVAL, "refanyval", 0xc2)
|
||||
OP(CKFINITE, "ckfinite", 0xc3)
|
||||
OP(MKREFANY, "mkrefany", 0xc6)
|
||||
OP(ANN_CALL, "ann.call", 0xc7)
|
||||
OP(ANN_CATCH, "ann.catch", 0xc8)
|
||||
OP(ANN_DEAD, "ann.dead", 0xc9)
|
||||
OP(ANN_HOISTED, "ann.hoisted", 0xca)
|
||||
OP(ANN_HOISTED_CALL, "ann.hoisted.call", 0xcb)
|
||||
OP(ANN_LAB, "ann.lab", 0xcc)
|
||||
OP(ANN_DEF, "ann.def", 0xcd)
|
||||
OP(ANN_REF_S, "ann.ref.s", 0xce)
|
||||
OP(ANN_PHI, "ann.phi", 0xcf)
|
||||
OP(LDTOKEN, "ldtoken", 0xd0)
|
||||
OP(CONV_U2, "conv.u2", 0xd1)
|
||||
OP(CONV_U1, "conv.u1", 0xd2)
|
||||
OP(CONV_I, "conv.i", 0xd3)
|
||||
OP(CONV_OVF_I, "conv.ovf.i", 0xd4)
|
||||
OP(CONV_OVF_U, "conv.ovf.u", 0xd5)
|
||||
OP(ADD_OVF, "add.ovf", 0xd6)
|
||||
OP(ADD_OVF_UN, "add.ovf.un", 0xd7)
|
||||
OP(MUL_OVF, "mul.ovf", 0xd8)
|
||||
OP(MUL_OVF_UN, "mul.ovf.un", 0xd9)
|
||||
OP(SUB_OVF, "sub.ovf", 0xda)
|
||||
OP(SUB_OVF_UN, "sub.ovf.un", 0xdb)
|
||||
OP(ENDFINALLY, "endfinally", 0xdc)
|
||||
OP(LEAVE, "leave", 0xdd)
|
||||
OP(LEAVE_S, "leave.s", 0xde)
|
||||
OP(STIND_I, "stind.i", 0xdf)
|
||||
OP(CONV_U, "conv.u", 0xe0)
|
||||
|
||||
/* prefix instructions. we use an opcode >= 256 to ease coding */
|
||||
|
||||
OP(ARGLIST, "arglist", 0x100)
|
||||
OP(CEQ, "ceq", 0x101)
|
||||
OP(CGT, "cgt", 0x102)
|
||||
OP(CGT_UN, "cgt.un", 0x103)
|
||||
OP(CLT, "clt", 0x104)
|
||||
OP(CLT_UN, "clt.un", 0x105)
|
||||
OP(LDFTN, "ldftn", 0x106)
|
||||
OP(LDVIRTFTN, "ldvirtftn", 0x107)
|
||||
OP(JMPI, "jmpi", 0x108)
|
||||
OP(LDARG, "ldarg", 0x109)
|
||||
OP(LDARGA, "ldarga", 0x10a)
|
||||
OP(STARG, "starg", 0x10b)
|
||||
OP(LDLOC, "ldloc", 0x10c)
|
||||
OP(LDLOCA, "ldloca", 0x10d)
|
||||
OP(STLOC, "stloc", 0x10e)
|
||||
OP(LOCALLOC, "localloc", 0x10f)
|
||||
OP(ENDFILTER, "endfilter", 0x111)
|
||||
OP(UNALIGNED, "unaligned", 0x112)
|
||||
OP(VOLATILE, "volatile", 0x113)
|
||||
OP(TAIL, "tail", 0x114)
|
||||
OP(INITOBJ, "initobj", 0x115)
|
||||
OP(ANN_LIVE, "ann.live", 0x116)
|
||||
OP(CPBLK, "cpblk", 0x117)
|
||||
OP(INITBLK, "initblk", 0x118)
|
||||
OP(ANN_REF, "ann.ref", 0x119)
|
||||
OP(RETHROW, "rethrow", 0x11a)
|
||||
OP(SIZEOF, "sizeof", 0x11c)
|
||||
OP(REFANYTYPE, "refanytype", 0x11d)
|
||||
OP(ANN_DATA, "ann.data", 0x122)
|
||||
OP(ANN_ARG, "ann.arg", 0x123)
|
321
libtcc.c
321
libtcc.c
|
@ -18,52 +18,6 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef ONE_SOURCE
|
||||
# define ONE_SOURCE 1
|
||||
#endif
|
||||
|
||||
#if ONE_SOURCE
|
||||
#include "tccpp.c"
|
||||
#include "tccgen.c"
|
||||
#include "tccdbg.c"
|
||||
#include "tccasm.c"
|
||||
#include "tccelf.c"
|
||||
#include "tccrun.c"
|
||||
#ifdef TCC_TARGET_I386
|
||||
#include "i386-gen.c"
|
||||
#include "i386-link.c"
|
||||
#include "i386-asm.c"
|
||||
#elif defined(TCC_TARGET_ARM)
|
||||
#include "arm-gen.c"
|
||||
#include "arm-link.c"
|
||||
#include "arm-asm.c"
|
||||
#elif defined(TCC_TARGET_ARM64)
|
||||
#include "arm64-gen.c"
|
||||
#include "arm64-link.c"
|
||||
#include "arm-asm.c"
|
||||
#elif defined(TCC_TARGET_C67)
|
||||
#include "c67-gen.c"
|
||||
#include "c67-link.c"
|
||||
#include "tcccoff.c"
|
||||
#elif defined(TCC_TARGET_X86_64)
|
||||
#include "x86_64-gen.c"
|
||||
#include "x86_64-link.c"
|
||||
#include "i386-asm.c"
|
||||
#elif defined(TCC_TARGET_RISCV64)
|
||||
#include "riscv64-gen.c"
|
||||
#include "riscv64-link.c"
|
||||
#include "riscv64-asm.c"
|
||||
#else
|
||||
#error unknown target
|
||||
#endif
|
||||
#ifdef TCC_TARGET_PE
|
||||
#include "tccpe.c"
|
||||
#endif
|
||||
#ifdef TCC_TARGET_MACHO
|
||||
#include "tccmacho.c"
|
||||
#endif
|
||||
#endif /* ONE_SOURCE */
|
||||
|
||||
#include "tcc.h"
|
||||
|
||||
/********************************************************/
|
||||
|
@ -87,17 +41,7 @@ ST_FUNC char *normalize_slashes(char *path)
|
|||
return path;
|
||||
}
|
||||
|
||||
#if defined LIBTCC_AS_DLL && !defined CONFIG_TCCDIR
|
||||
static HMODULE tcc_module;
|
||||
BOOL WINAPI DllMain (HINSTANCE hDll, DWORD dwReason, LPVOID lpReserved)
|
||||
{
|
||||
if (DLL_PROCESS_ATTACH == dwReason)
|
||||
tcc_module = hDll;
|
||||
return TRUE;
|
||||
}
|
||||
#else
|
||||
#define tcc_module NULL /* NULL means executable itself */
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_TCCDIR
|
||||
/* on win32, we suppose the lib and includes are at the location of 'tcc.exe' */
|
||||
|
@ -114,14 +58,6 @@ static inline char *config_tccdir_w32(char *path)
|
|||
#define CONFIG_TCCDIR config_tccdir_w32(alloca(MAX_PATH))
|
||||
#endif
|
||||
|
||||
#ifdef TCC_IS_NATIVE
|
||||
static void tcc_add_systemdir(TCCState *s)
|
||||
{
|
||||
char buf[1000];
|
||||
GetSystemDirectoryA(buf, sizeof buf);
|
||||
tcc_add_library_path(s, normalize_slashes(buf));
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/********************************************************/
|
||||
|
@ -830,16 +766,8 @@ LIBTCCAPI TCCState *tcc_new(void)
|
|||
#ifdef CHAR_IS_UNSIGNED
|
||||
s->char_is_unsigned = 1;
|
||||
#endif
|
||||
#ifdef TCC_TARGET_I386
|
||||
s->seg_size = 32;
|
||||
#endif
|
||||
/* enable this if you want symbols with leading underscore on windows: */
|
||||
#if defined TCC_TARGET_MACHO /* || defined TCC_TARGET_PE */
|
||||
s->leading_underscore = 1;
|
||||
#endif
|
||||
#ifdef TCC_TARGET_ARM
|
||||
s->float_abi = ARM_FLOAT_ABI;
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_NEW_DTAGS
|
||||
s->enable_new_dtags = 1;
|
||||
#endif
|
||||
|
@ -873,9 +801,6 @@ LIBTCCAPI void tcc_delete(TCCState *s1)
|
|||
tcc_free(s1->mapfile);
|
||||
tcc_free(s1->outfile);
|
||||
tcc_free(s1->deps_outfile);
|
||||
#if defined TCC_TARGET_MACHO
|
||||
tcc_free(s1->install_name);
|
||||
#endif
|
||||
dynarray_reset(&s1->files, &s1->nb_files);
|
||||
dynarray_reset(&s1->target_deps, &s1->nb_target_deps);
|
||||
dynarray_reset(&s1->pragma_libs, &s1->nb_pragma_libs);
|
||||
|
@ -884,10 +809,6 @@ LIBTCCAPI void tcc_delete(TCCState *s1)
|
|||
cstr_free(&s1->cmdline_incl);
|
||||
cstr_free(&s1->linker_arg);
|
||||
tcc_free(s1->dState);
|
||||
#ifdef TCC_IS_NATIVE
|
||||
/* free runtime memory */
|
||||
tcc_run_free(s1);
|
||||
#endif
|
||||
/* free loaded dlls array */
|
||||
dynarray_reset(&s1->loaded_dlls, &s1->nb_loaded_dlls);
|
||||
tcc_free(s1);
|
||||
|
@ -926,21 +847,10 @@ LIBTCCAPI int tcc_set_output_type(TCCState *s, int output_type)
|
|||
|
||||
tcc_add_library_path(s, CONFIG_TCC_LIBPATHS);
|
||||
|
||||
#ifdef TCC_TARGET_PE
|
||||
# ifdef TCC_IS_NATIVE
|
||||
/* allow linking with system dll's directly */
|
||||
tcc_add_systemdir(s);
|
||||
# endif
|
||||
#elif defined TCC_TARGET_MACHO
|
||||
# ifdef TCC_IS_NATIVE
|
||||
tcc_add_macos_sdkpath(s);
|
||||
# endif
|
||||
#else
|
||||
/* paths for crt objects */
|
||||
tcc_split_path(s, &s->crt_paths, &s->nb_crt_paths, CONFIG_TCC_CRTPREFIX);
|
||||
if (output_type != TCC_OUTPUT_MEMORY && !s->nostdlib)
|
||||
tccelf_add_crtbegin(s);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -982,43 +892,12 @@ ST_FUNC DLLReference *tcc_add_dllref(TCCState *s1, const char *dllname, int leve
|
|||
return ref;
|
||||
}
|
||||
|
||||
/* OpenBSD: choose latest from libxxx.so.x.y versions */
|
||||
#if defined TARGETOS_OpenBSD && !defined _WIN32
|
||||
#include <glob.h>
|
||||
static int tcc_glob_so(TCCState *s1, const char *pattern, char *buf, int size)
|
||||
{
|
||||
const char *star;
|
||||
glob_t g;
|
||||
char *p;
|
||||
int i, v, v1, v2, v3;
|
||||
|
||||
star = strchr(pattern, '*');
|
||||
if (!star || glob(pattern, 0, NULL, &g))
|
||||
return -1;
|
||||
for (v = -1, i = 0; i < g.gl_pathc; ++i) {
|
||||
p = g.gl_pathv[i];
|
||||
if (2 != sscanf(p + (star - pattern), "%d.%d.%d", &v1, &v2, &v3))
|
||||
continue;
|
||||
if ((v1 = v1 * 1000 + v2) > v)
|
||||
v = v1, pstrcpy(buf, size, p);
|
||||
}
|
||||
globfree(&g);
|
||||
return v;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int guess_filetype(const char *filename);
|
||||
|
||||
ST_FUNC int tcc_add_file_internal(TCCState *s1, const char *filename, int flags)
|
||||
{
|
||||
int fd, ret = -1;
|
||||
|
||||
#if defined TARGETOS_OpenBSD && !defined _WIN32
|
||||
char buf[1024];
|
||||
if (tcc_glob_so(s1, filename, buf, sizeof buf) >= 0)
|
||||
filename = buf;
|
||||
#endif
|
||||
|
||||
if (0 == (flags & AFF_TYPE_MASK))
|
||||
flags |= guess_filetype(filename);
|
||||
|
||||
|
@ -1094,11 +973,6 @@ ST_FUNC int tcc_add_file_internal(TCCState *s1, const char *filename, int flags)
|
|||
#else /* unix */
|
||||
case AFF_BINTYPE_DYN:
|
||||
if (s1->output_type == TCC_OUTPUT_MEMORY) {
|
||||
#ifdef TCC_IS_NATIVE
|
||||
void* dl = dlopen(filename, RTLD_GLOBAL | RTLD_LAZY);
|
||||
if (dl)
|
||||
tcc_add_dllref(s1, filename, 0)->handle = dl, ret = 0;
|
||||
#endif
|
||||
} else
|
||||
ret = tcc_load_dll(s1, fd, filename, (flags & AFF_REFERENCED_DLL) != 0);
|
||||
break;
|
||||
|
@ -1211,19 +1085,8 @@ ST_FUNC int tcc_add_crt(TCCState *s1, const char *filename)
|
|||
/* the library name is the same as the argument of the '-l' option */
|
||||
LIBTCCAPI int tcc_add_library(TCCState *s, const char *libraryname)
|
||||
{
|
||||
#if defined TCC_TARGET_PE
|
||||
static const char * const libs[] = { "%s/%s.def", "%s/lib%s.def", "%s/%s.dll", "%s/lib%s.dll", "%s/lib%s.a", NULL };
|
||||
const char * const *pp = s->static_link ? libs + 4 : libs;
|
||||
#elif defined TCC_TARGET_MACHO
|
||||
static const char * const libs[] = { "%s/lib%s.dylib", "%s/lib%s.tbd", "%s/lib%s.a", NULL };
|
||||
const char * const *pp = s->static_link ? libs + 2 : libs;
|
||||
#elif defined TARGETOS_OpenBSD
|
||||
static const char * const libs[] = { "%s/lib%s.so.*", "%s/lib%s.a", NULL };
|
||||
const char * const *pp = s->static_link ? libs + 1 : libs;
|
||||
#else
|
||||
static const char * const libs[] = { "%s/lib%s.so", "%s/lib%s.a", NULL };
|
||||
const char * const *pp = s->static_link ? libs + 1 : libs;
|
||||
#endif
|
||||
static const char * const libs[] = { "%s/lib%s.a", NULL };
|
||||
const char * const *pp = libs;
|
||||
int flags = s->filetype & AFF_WHOLE_ARCHIVE;
|
||||
while (*pp) {
|
||||
int ret = tcc_add_library_internal(s, *pp,
|
||||
|
@ -1245,11 +1108,6 @@ ST_FUNC void tcc_add_pragma_libs(TCCState *s1)
|
|||
|
||||
LIBTCCAPI int tcc_add_symbol(TCCState *s1, const char *name, const void *val)
|
||||
{
|
||||
#ifdef TCC_TARGET_PE
|
||||
/* On x86_64 'val' might not be reachable with a 32bit offset.
|
||||
So it is handled here as if it were in a DLL. */
|
||||
pe_putimport(s1, 0, name, (uintptr_t)val);
|
||||
#else
|
||||
char buf[256];
|
||||
if (s1->leading_underscore) {
|
||||
buf[0] = '_';
|
||||
|
@ -1257,7 +1115,6 @@ LIBTCCAPI int tcc_add_symbol(TCCState *s1, const char *name, const void *val)
|
|||
name = buf;
|
||||
}
|
||||
set_global_sym(s1, name, NULL, (addr_t)(uintptr_t)val); /* NULL: SHN_ABS */
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1401,13 +1258,7 @@ static int tcc_set_linker(TCCState *s, const char *option)
|
|||
copy_linker_arg(&s->mapfile, p, 0);
|
||||
ignoring = 1;
|
||||
} else if (link_option(option, "oformat=", &p)) {
|
||||
#if defined(TCC_TARGET_PE)
|
||||
if (strstart("pe-", &p)) {
|
||||
#elif PTR_SIZE == 8
|
||||
if (strstart("elf64-", &p)) {
|
||||
#else
|
||||
if (strstart("elf32-", &p)) {
|
||||
#endif
|
||||
s->output_format = TCC_OUTPUT_FORMAT_ELF;
|
||||
} else if (link_arg("binary", p)) {
|
||||
s->output_format = TCC_OUTPUT_FORMAT_BINARY;
|
||||
|
@ -1436,48 +1287,6 @@ static int tcc_set_linker(TCCState *s, const char *option)
|
|||
copy_linker_arg(&s->soname, p, 0);
|
||||
} else if (link_option(option, "install_name=", &p)) {
|
||||
copy_linker_arg(&s->soname, p, 0);
|
||||
#ifdef TCC_TARGET_PE
|
||||
} else if (link_option(option, "large-address-aware", &p)) {
|
||||
s->pe_characteristics |= 0x20;
|
||||
} else if (link_option(option, "file-alignment=", &p)) {
|
||||
s->pe_file_align = strtoul(p, &end, 16);
|
||||
} else if (link_option(option, "stack=", &p)) {
|
||||
s->pe_stack_size = strtoul(p, &end, 10);
|
||||
} else if (link_option(option, "subsystem=", &p)) {
|
||||
#if defined(TCC_TARGET_I386) || defined(TCC_TARGET_X86_64)
|
||||
if (link_arg("native", p)) {
|
||||
s->pe_subsystem = 1;
|
||||
} else if (link_arg("console", p)) {
|
||||
s->pe_subsystem = 3;
|
||||
} else if (link_arg("gui", p) || link_arg("windows", p)) {
|
||||
s->pe_subsystem = 2;
|
||||
} else if (link_arg("posix", p)) {
|
||||
s->pe_subsystem = 7;
|
||||
} else if (link_arg("efiapp", p)) {
|
||||
s->pe_subsystem = 10;
|
||||
} else if (link_arg("efiboot", p)) {
|
||||
s->pe_subsystem = 11;
|
||||
} else if (link_arg("efiruntime", p)) {
|
||||
s->pe_subsystem = 12;
|
||||
} else if (link_arg("efirom", p)) {
|
||||
s->pe_subsystem = 13;
|
||||
#elif defined(TCC_TARGET_ARM)
|
||||
if (link_arg("wince", p)) {
|
||||
s->pe_subsystem = 9;
|
||||
#endif
|
||||
} else
|
||||
goto err;
|
||||
#endif
|
||||
#ifdef TCC_TARGET_MACHO
|
||||
} else if (link_option(option, "all_load", &p)) {
|
||||
s->filetype |= AFF_WHOLE_ARCHIVE;
|
||||
} else if (link_option(option, "force_load", &p)) {
|
||||
s->filetype |= AFF_WHOLE_ARCHIVE;
|
||||
args_parser_add_file(s, p, AFF_TYPE_LIB | (s->filetype & ~AFF_TYPE_MASK));
|
||||
s->nb_libraries++;
|
||||
} else if (link_option(option, "single_module", &p)) {
|
||||
ignoring = 1;
|
||||
#endif
|
||||
} else if (ret = link_option(option, "?whole-archive", &p), ret) {
|
||||
if (ret > 0)
|
||||
s->filetype |= AFF_WHOLE_ARCHIVE;
|
||||
|
@ -1546,7 +1355,6 @@ enum {
|
|||
TCC_OPTION_print_search_dirs,
|
||||
TCC_OPTION_rdynamic,
|
||||
TCC_OPTION_pthread,
|
||||
TCC_OPTION_run,
|
||||
TCC_OPTION_w,
|
||||
TCC_OPTION_E,
|
||||
TCC_OPTION_M,
|
||||
|
@ -1592,14 +1400,7 @@ static const TCCOption tcc_options[] = {
|
|||
{ "b", TCC_OPTION_b, 0 },
|
||||
#endif
|
||||
{ "g", TCC_OPTION_g, TCC_OPTION_HAS_ARG | TCC_OPTION_NOSEP },
|
||||
#ifdef TCC_TARGET_MACHO
|
||||
{ "compatibility_version", TCC_OPTION_compatibility_version, TCC_OPTION_HAS_ARG },
|
||||
{ "current_version", TCC_OPTION_current_version, TCC_OPTION_HAS_ARG },
|
||||
#endif
|
||||
{ "c", TCC_OPTION_c, 0 },
|
||||
#ifdef TCC_TARGET_MACHO
|
||||
{ "dynamiclib", TCC_OPTION_dynamiclib, 0 },
|
||||
#endif
|
||||
{ "dumpmachine", TCC_OPTION_dumpmachine, 0},
|
||||
{ "dumpversion", TCC_OPTION_dumpversion, 0},
|
||||
{ "d", TCC_OPTION_d, TCC_OPTION_HAS_ARG | TCC_OPTION_NOSEP },
|
||||
|
@ -1609,20 +1410,13 @@ static const TCCOption tcc_options[] = {
|
|||
{ "soname", TCC_OPTION_soname, TCC_OPTION_HAS_ARG },
|
||||
{ "o", TCC_OPTION_o, TCC_OPTION_HAS_ARG },
|
||||
{ "pthread", TCC_OPTION_pthread, 0},
|
||||
{ "run", TCC_OPTION_run, TCC_OPTION_HAS_ARG | TCC_OPTION_NOSEP },
|
||||
{ "rdynamic", TCC_OPTION_rdynamic, 0 },
|
||||
{ "r", TCC_OPTION_r, 0 },
|
||||
{ "Wl,", TCC_OPTION_Wl, TCC_OPTION_HAS_ARG | TCC_OPTION_NOSEP },
|
||||
{ "Wp,", TCC_OPTION_Wp, TCC_OPTION_HAS_ARG | TCC_OPTION_NOSEP },
|
||||
{ "W", TCC_OPTION_W, TCC_OPTION_HAS_ARG | TCC_OPTION_NOSEP },
|
||||
{ "O", TCC_OPTION_O, TCC_OPTION_HAS_ARG | TCC_OPTION_NOSEP },
|
||||
#ifdef TCC_TARGET_ARM
|
||||
{ "mfloat-abi", TCC_OPTION_mfloat_abi, TCC_OPTION_HAS_ARG },
|
||||
#endif
|
||||
{ "m", TCC_OPTION_m, TCC_OPTION_HAS_ARG | TCC_OPTION_NOSEP },
|
||||
#ifdef TCC_TARGET_MACHO
|
||||
{ "flat_namespace", TCC_OPTION_flat_namespace, 0 },
|
||||
#endif
|
||||
{ "f", TCC_OPTION_f, TCC_OPTION_HAS_ARG | TCC_OPTION_NOSEP },
|
||||
{ "isystem", TCC_OPTION_isystem, TCC_OPTION_HAS_ARG },
|
||||
{ "include", TCC_OPTION_include, TCC_OPTION_HAS_ARG },
|
||||
|
@ -1639,14 +1433,6 @@ static const TCCOption tcc_options[] = {
|
|||
{ "MP", TCC_OPTION_MP, 0},
|
||||
{ "x", TCC_OPTION_x, TCC_OPTION_HAS_ARG },
|
||||
{ "ar", TCC_OPTION_ar, 0},
|
||||
#ifdef TCC_TARGET_PE
|
||||
{ "impdef", TCC_OPTION_impdef, 0},
|
||||
#endif
|
||||
#ifdef TCC_TARGET_MACHO
|
||||
{ "install_name", TCC_OPTION_install_name, TCC_OPTION_HAS_ARG },
|
||||
{ "two_levelnamespace", TCC_OPTION_two_levelnamespace, 0 },
|
||||
{ "undefined", TCC_OPTION_undefined, TCC_OPTION_HAS_ARG },
|
||||
#endif
|
||||
/* ignored (silently, except after -Wunsupported) */
|
||||
{ "arch", 0, TCC_OPTION_HAS_ARG},
|
||||
{ "C", 0, 0 },
|
||||
|
@ -1693,9 +1479,6 @@ static const FlagDef options_f[] = {
|
|||
|
||||
static const FlagDef options_m[] = {
|
||||
{ offsetof(TCCState, ms_bitfields), 0, "ms-bitfields" },
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
{ offsetof(TCCState, nosse), FD_INVERT, "sse" },
|
||||
#endif
|
||||
{ 0, 0, NULL }
|
||||
};
|
||||
|
||||
|
@ -1733,38 +1516,7 @@ static int set_flag(TCCState *s, const FlagDef *flags, const char *name)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static const char dumpmachine_str[] =
|
||||
/* this is a best guess, please refine as necessary */
|
||||
#ifdef TCC_TARGET_I386
|
||||
"i386-pc"
|
||||
#elif defined TCC_TARGET_X86_64
|
||||
"x86_64-pc"
|
||||
#elif defined TCC_TARGET_C67
|
||||
"c67"
|
||||
#elif defined TCC_TARGET_ARM
|
||||
"arm"
|
||||
#elif defined TCC_TARGET_ARM64
|
||||
"aarch64"
|
||||
#elif defined TCC_TARGET_RISCV64
|
||||
"riscv64"
|
||||
#endif
|
||||
"-"
|
||||
#ifdef TCC_TARGET_PE
|
||||
"mingw32"
|
||||
#elif defined(TCC_TARGET_MACHO)
|
||||
"apple-darwin"
|
||||
#elif TARGETOS_FreeBSD || TARGETOS_FreeBSD_kernel
|
||||
"freebsd"
|
||||
#elif TARGETOS_OpenBSD
|
||||
"openbsd"
|
||||
#elif TARGETOS_NetBSD
|
||||
"netbsd"
|
||||
#elif CONFIG_TCC_MUSL
|
||||
"linux-musl"
|
||||
#else
|
||||
"linux-gnu"
|
||||
#endif
|
||||
;
|
||||
static const char dumpmachine_str[] = "i386-pc-stupidos";
|
||||
|
||||
static int args_parser_make_argv(const char *r, int *argc, char ***argv)
|
||||
{
|
||||
|
@ -1825,26 +1577,6 @@ static int args_parser_listfile(TCCState *s,
|
|||
return 0;
|
||||
}
|
||||
|
||||
#if defined TCC_TARGET_MACHO
|
||||
static uint32_t parse_version(TCCState *s1, const char *version)
|
||||
{
|
||||
uint32_t a = 0;
|
||||
uint32_t b = 0;
|
||||
uint32_t c = 0;
|
||||
char* last;
|
||||
|
||||
a = strtoul(version, &last, 10);
|
||||
if (*last == '.') {
|
||||
b = strtoul(&last[1], &last, 10);
|
||||
if (*last == '.')
|
||||
c = strtoul(&last[1], &last, 10);
|
||||
}
|
||||
if (*last || a > 0xffff || b > 0xff || c > 0xff)
|
||||
tcc_error_noabort("version a.b.c not correct: %s", version);
|
||||
return (a << 16) | (b << 8) | c;
|
||||
}
|
||||
#endif
|
||||
|
||||
PUB_FUNC int tcc_parse_args(TCCState *s, int *pargc, char ***pargv, int optind)
|
||||
{
|
||||
TCCState *s1 = s;
|
||||
|
@ -1967,10 +1699,6 @@ dorun:
|
|||
x = *optarg - '0';
|
||||
/* -g0 = no info, -g1 = lines/functions only, -g2 = full info */
|
||||
s->do_debug = x > 2 ? 2 : x == 0 && s->do_backtrace ? 1 : x;
|
||||
#ifdef TCC_TARGET_PE
|
||||
} else if (0 == strcmp(".pdb", optarg)) {
|
||||
s->dwarf = 5, s->do_debug |= 16;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case TCC_OPTION_c:
|
||||
|
@ -2029,14 +1757,6 @@ dorun:
|
|||
case TCC_OPTION_nostdlib:
|
||||
s->nostdlib = 1;
|
||||
break;
|
||||
case TCC_OPTION_run:
|
||||
#ifndef TCC_IS_NATIVE
|
||||
return tcc_error_noabort("-run is not available in a cross compiler");
|
||||
#else
|
||||
run = optarg;
|
||||
x = TCC_OUTPUT_MEMORY;
|
||||
goto set_output_type;
|
||||
#endif
|
||||
case TCC_OPTION_v:
|
||||
do ++s->verbose; while (*optarg++ == 'v');
|
||||
++noaction;
|
||||
|
@ -2045,17 +1765,6 @@ dorun:
|
|||
if (set_flag(s, options_f, optarg) < 0)
|
||||
goto unsupported_option;
|
||||
break;
|
||||
#ifdef TCC_TARGET_ARM
|
||||
case TCC_OPTION_mfloat_abi:
|
||||
/* tcc doesn't support soft float yet */
|
||||
if (!strcmp(optarg, "softfp")) {
|
||||
s->float_abi = ARM_SOFTFP_FLOAT;
|
||||
} else if (!strcmp(optarg, "hard"))
|
||||
s->float_abi = ARM_HARD_FLOAT;
|
||||
else
|
||||
return tcc_error_noabort("unsupported float abi '%s'", optarg);
|
||||
break;
|
||||
#endif
|
||||
case TCC_OPTION_m:
|
||||
if (set_flag(s, options_m, optarg) < 0) {
|
||||
if (x = atoi(optarg), x != 32 && x != 64)
|
||||
|
@ -2120,7 +1829,7 @@ dorun:
|
|||
printf("%s\n", dumpmachine_str);
|
||||
exit(0);
|
||||
case TCC_OPTION_dumpversion:
|
||||
printf ("%s\n", TCC_VERSION);
|
||||
printf ("%s\n", PACKAGE_VERSION);
|
||||
exit(0);
|
||||
case TCC_OPTION_x:
|
||||
x = 0;
|
||||
|
@ -2145,26 +1854,6 @@ dorun:
|
|||
case TCC_OPTION_impdef:
|
||||
x = OPT_IMPDEF;
|
||||
goto extra_action;
|
||||
#if defined TCC_TARGET_MACHO
|
||||
case TCC_OPTION_dynamiclib:
|
||||
x = TCC_OUTPUT_DLL;
|
||||
goto set_output_type;
|
||||
case TCC_OPTION_flat_namespace:
|
||||
break;
|
||||
case TCC_OPTION_two_levelnamespace:
|
||||
break;
|
||||
case TCC_OPTION_undefined:
|
||||
break;
|
||||
case TCC_OPTION_install_name:
|
||||
s->install_name = tcc_strdup(optarg);
|
||||
break;
|
||||
case TCC_OPTION_compatibility_version:
|
||||
s->compatibility_version = parse_version(s, optarg);
|
||||
break;
|
||||
case TCC_OPTION_current_version:
|
||||
s->current_version = parse_version(s, optarg);;
|
||||
break;
|
||||
#endif
|
||||
case TCC_OPTION_ar:
|
||||
x = OPT_AR;
|
||||
extra_action:
|
||||
|
|
2437
riscv64-asm.c
2437
riscv64-asm.c
File diff suppressed because it is too large
Load diff
1447
riscv64-gen.c
1447
riscv64-gen.c
File diff suppressed because it is too large
Load diff
380
riscv64-link.c
380
riscv64-link.c
|
@ -1,380 +0,0 @@
|
|||
#ifdef TARGET_DEFS_ONLY
|
||||
|
||||
#define EM_TCC_TARGET EM_RISCV
|
||||
|
||||
#define R_DATA_32 R_RISCV_32
|
||||
#define R_DATA_PTR R_RISCV_64
|
||||
#define R_JMP_SLOT R_RISCV_JUMP_SLOT
|
||||
#define R_GLOB_DAT R_RISCV_64
|
||||
#define R_COPY R_RISCV_COPY
|
||||
#define R_RELATIVE R_RISCV_RELATIVE
|
||||
|
||||
#define R_NUM R_RISCV_NUM
|
||||
|
||||
#define ELF_START_ADDR 0x00010000
|
||||
#define ELF_PAGE_SIZE 0x1000
|
||||
|
||||
#define PCRELATIVE_DLLPLT 1
|
||||
#define RELOCATE_DLLPLT 1
|
||||
|
||||
#else /* !TARGET_DEFS_ONLY */
|
||||
|
||||
//#define DEBUG_RELOC
|
||||
#include "tcc.h"
|
||||
|
||||
/* Returns 1 for a code relocation, 0 for a data relocation. For unknown
|
||||
relocations, returns -1. */
|
||||
ST_FUNC int code_reloc (int reloc_type)
|
||||
{
|
||||
switch (reloc_type) {
|
||||
|
||||
case R_RISCV_BRANCH:
|
||||
case R_RISCV_CALL:
|
||||
case R_RISCV_JAL:
|
||||
return 1;
|
||||
|
||||
case R_RISCV_GOT_HI20:
|
||||
case R_RISCV_PCREL_HI20:
|
||||
case R_RISCV_PCREL_LO12_I:
|
||||
case R_RISCV_PCREL_LO12_S:
|
||||
case R_RISCV_32_PCREL:
|
||||
case R_RISCV_SET6:
|
||||
case R_RISCV_SET8:
|
||||
case R_RISCV_SET16:
|
||||
case R_RISCV_SUB6:
|
||||
case R_RISCV_ADD16:
|
||||
case R_RISCV_ADD32:
|
||||
case R_RISCV_ADD64:
|
||||
case R_RISCV_SUB8:
|
||||
case R_RISCV_SUB16:
|
||||
case R_RISCV_SUB32:
|
||||
case R_RISCV_SUB64:
|
||||
case R_RISCV_32:
|
||||
case R_RISCV_64:
|
||||
return 0;
|
||||
|
||||
case R_RISCV_CALL_PLT:
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Returns an enumerator to describe whether and when the relocation needs a
|
||||
GOT and/or PLT entry to be created. See tcc.h for a description of the
|
||||
different values. */
|
||||
ST_FUNC int gotplt_entry_type (int reloc_type)
|
||||
{
|
||||
switch (reloc_type) {
|
||||
case R_RISCV_ALIGN:
|
||||
case R_RISCV_RELAX:
|
||||
case R_RISCV_RVC_BRANCH:
|
||||
case R_RISCV_RVC_JUMP:
|
||||
case R_RISCV_JUMP_SLOT:
|
||||
case R_RISCV_SET6:
|
||||
case R_RISCV_SET8:
|
||||
case R_RISCV_SET16:
|
||||
case R_RISCV_SUB6:
|
||||
case R_RISCV_ADD16:
|
||||
case R_RISCV_SUB8:
|
||||
case R_RISCV_SUB16:
|
||||
return NO_GOTPLT_ENTRY;
|
||||
|
||||
case R_RISCV_BRANCH:
|
||||
case R_RISCV_CALL:
|
||||
case R_RISCV_PCREL_HI20:
|
||||
case R_RISCV_PCREL_LO12_I:
|
||||
case R_RISCV_PCREL_LO12_S:
|
||||
case R_RISCV_32_PCREL:
|
||||
case R_RISCV_ADD32:
|
||||
case R_RISCV_ADD64:
|
||||
case R_RISCV_SUB32:
|
||||
case R_RISCV_SUB64:
|
||||
case R_RISCV_32:
|
||||
case R_RISCV_64:
|
||||
case R_RISCV_JAL:
|
||||
case R_RISCV_CALL_PLT:
|
||||
return AUTO_GOTPLT_ENTRY;
|
||||
|
||||
case R_RISCV_GOT_HI20:
|
||||
return ALWAYS_GOTPLT_ENTRY;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
ST_FUNC unsigned create_plt_entry(TCCState *s1, unsigned got_offset, struct sym_attr *attr)
|
||||
{
|
||||
Section *plt = s1->plt;
|
||||
uint8_t *p;
|
||||
unsigned plt_offset;
|
||||
|
||||
if (plt->data_offset == 0)
|
||||
section_ptr_add(plt, 32);
|
||||
plt_offset = plt->data_offset;
|
||||
|
||||
p = section_ptr_add(plt, 16);
|
||||
write64le(p, got_offset);
|
||||
return plt_offset;
|
||||
}
|
||||
|
||||
/* relocate the PLT: compute addresses and offsets in the PLT now that final
|
||||
address for PLT and GOT are known (see fill_program_header) */
|
||||
ST_FUNC void relocate_plt(TCCState *s1)
|
||||
{
|
||||
uint8_t *p, *p_end;
|
||||
|
||||
if (!s1->plt)
|
||||
return;
|
||||
|
||||
p = s1->plt->data;
|
||||
p_end = p + s1->plt->data_offset;
|
||||
|
||||
if (p < p_end) {
|
||||
uint64_t plt = s1->plt->sh_addr;
|
||||
uint64_t got = s1->got->sh_addr;
|
||||
uint64_t off = (got - plt + 0x800) >> 12;
|
||||
if ((off + ((uint32_t)1 << 20)) >> 21)
|
||||
tcc_error_noabort("Failed relocating PLT (off=0x%lx, got=0x%lx, plt=0x%lx)", (long)off, (long)got, (long)plt);
|
||||
write32le(p, 0x397 | (off << 12)); // auipc t2, %pcrel_hi(got)
|
||||
write32le(p + 4, 0x41c30333); // sub t1, t1, t3
|
||||
write32le(p + 8, 0x0003be03 // ld t3, %pcrel_lo(got)(t2)
|
||||
| (((got - plt) & 0xfff) << 20));
|
||||
write32le(p + 12, 0xfd430313); // addi t1, t1, -(32+12)
|
||||
write32le(p + 16, 0x00038293 // addi t0, t2, %pcrel_lo(got)
|
||||
| (((got - plt) & 0xfff) << 20));
|
||||
write32le(p + 20, 0x00135313); // srli t1, t1, log2(16/PTRSIZE)
|
||||
write32le(p + 24, 0x0082b283); // ld t0, PTRSIZE(t0)
|
||||
write32le(p + 28, 0x000e0067); // jr t3
|
||||
p += 32;
|
||||
while (p < p_end) {
|
||||
uint64_t pc = plt + (p - s1->plt->data);
|
||||
uint64_t addr = got + read64le(p);
|
||||
uint64_t off = (addr - pc + 0x800) >> 12;
|
||||
if ((off + ((uint32_t)1 << 20)) >> 21)
|
||||
tcc_error_noabort("Failed relocating PLT (off=0x%lx, addr=0x%lx, pc=0x%lx)", (long)off, (long)addr, (long)pc);
|
||||
write32le(p, 0xe17 | (off << 12)); // auipc t3, %pcrel_hi(func@got)
|
||||
write32le(p + 4, 0x000e3e03 // ld t3, %pcrel_lo(func@got)(t3)
|
||||
| (((addr - pc) & 0xfff) << 20));
|
||||
write32le(p + 8, 0x000e0367); // jalr t1, t3
|
||||
write32le(p + 12, 0x00000013); // nop
|
||||
p += 16;
|
||||
}
|
||||
}
|
||||
|
||||
if (s1->plt->reloc) {
|
||||
ElfW_Rel *rel;
|
||||
p = s1->got->data;
|
||||
for_each_elem(s1->plt->reloc, 0, rel, ElfW_Rel) {
|
||||
write64le(p + rel->r_offset, s1->plt->sh_addr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ST_FUNC void relocate(TCCState *s1, ElfW_Rel *rel, int type, unsigned char *ptr,
|
||||
addr_t addr, addr_t val)
|
||||
{
|
||||
uint64_t off64;
|
||||
uint32_t off32;
|
||||
int sym_index = ELFW(R_SYM)(rel->r_info), esym_index;
|
||||
ElfW(Sym) *sym = &((ElfW(Sym) *)symtab_section->data)[sym_index];
|
||||
|
||||
switch(type) {
|
||||
case R_RISCV_ALIGN:
|
||||
case R_RISCV_RELAX:
|
||||
return;
|
||||
|
||||
case R_RISCV_BRANCH:
|
||||
off64 = val - addr;
|
||||
if ((off64 + (1 << 12)) & ~(uint64_t)0x1ffe)
|
||||
tcc_error_noabort("R_RISCV_BRANCH relocation failed"
|
||||
" (val=%lx, addr=%lx)", (long)val, (long)addr);
|
||||
off32 = off64 >> 1;
|
||||
write32le(ptr, (read32le(ptr) & ~0xfe000f80)
|
||||
| ((off32 & 0x800) << 20)
|
||||
| ((off32 & 0x3f0) << 21)
|
||||
| ((off32 & 0x00f) << 8)
|
||||
| ((off32 & 0x400) >> 3));
|
||||
return;
|
||||
case R_RISCV_JAL:
|
||||
off64 = val - addr;
|
||||
if ((off64 + (1 << 21)) & ~(((uint64_t)1 << 22) - 2))
|
||||
tcc_error_noabort("R_RISCV_JAL relocation failed"
|
||||
" (val=%lx, addr=%lx)", (long)val, (long)addr);
|
||||
off32 = off64;
|
||||
write32le(ptr, (read32le(ptr) & 0xfff)
|
||||
| (((off32 >> 12) & 0xff) << 12)
|
||||
| (((off32 >> 11) & 1) << 20)
|
||||
| (((off32 >> 1) & 0x3ff) << 21)
|
||||
| (((off32 >> 20) & 1) << 31));
|
||||
return;
|
||||
case R_RISCV_CALL:
|
||||
case R_RISCV_CALL_PLT:
|
||||
write32le(ptr, (read32le(ptr) & 0xfff)
|
||||
| ((val - addr + 0x800) & ~0xfff));
|
||||
write32le(ptr + 4, (read32le(ptr + 4) & 0xfffff)
|
||||
| (((val - addr) & 0xfff) << 20));
|
||||
return;
|
||||
case R_RISCV_PCREL_HI20:
|
||||
#ifdef DEBUG_RELOC
|
||||
printf("PCREL_HI20: val=%lx addr=%lx\n", (long)val, (long)addr);
|
||||
#endif
|
||||
off64 = (int64_t)(val - addr + 0x800) >> 12;
|
||||
if ((off64 + ((uint64_t)1 << 20)) >> 21)
|
||||
tcc_error_noabort("R_RISCV_PCREL_HI20 relocation failed: off=%lx cond=%lx sym=%s",
|
||||
(long)off64, (long)((int64_t)(off64 + ((uint64_t)1 << 20)) >> 21),
|
||||
symtab_section->link->data + sym->st_name);
|
||||
write32le(ptr, (read32le(ptr) & 0xfff)
|
||||
| ((off64 & 0xfffff) << 12));
|
||||
last_hi.addr = addr;
|
||||
last_hi.val = val;
|
||||
return;
|
||||
case R_RISCV_GOT_HI20:
|
||||
val = s1->got->sh_addr + get_sym_attr(s1, sym_index, 0)->got_offset;
|
||||
off64 = (int64_t)(val - addr + 0x800) >> 12;
|
||||
if ((off64 + ((uint64_t)1 << 20)) >> 21)
|
||||
tcc_error_noabort("R_RISCV_GOT_HI20 relocation failed");
|
||||
last_hi.addr = addr;
|
||||
last_hi.val = val;
|
||||
write32le(ptr, (read32le(ptr) & 0xfff)
|
||||
| ((off64 & 0xfffff) << 12));
|
||||
return;
|
||||
case R_RISCV_PCREL_LO12_I:
|
||||
#ifdef DEBUG_RELOC
|
||||
printf("PCREL_LO12_I: val=%lx addr=%lx\n", (long)val, (long)addr);
|
||||
#endif
|
||||
if (val != last_hi.addr)
|
||||
tcc_error_noabort("unsupported hi/lo pcrel reloc scheme");
|
||||
val = last_hi.val;
|
||||
addr = last_hi.addr;
|
||||
write32le(ptr, (read32le(ptr) & 0xfffff)
|
||||
| (((val - addr) & 0xfff) << 20));
|
||||
return;
|
||||
case R_RISCV_PCREL_LO12_S:
|
||||
if (val != last_hi.addr)
|
||||
tcc_error_noabort("unsupported hi/lo pcrel reloc scheme");
|
||||
val = last_hi.val;
|
||||
addr = last_hi.addr;
|
||||
off32 = val - addr;
|
||||
write32le(ptr, (read32le(ptr) & ~0xfe000f80)
|
||||
| ((off32 & 0xfe0) << 20)
|
||||
| ((off32 & 0x01f) << 7));
|
||||
return;
|
||||
|
||||
case R_RISCV_RVC_BRANCH:
|
||||
off64 = (val - addr);
|
||||
if ((off64 + (1 << 8)) & ~(uint64_t)0x1fe)
|
||||
tcc_error_noabort("R_RISCV_RVC_BRANCH relocation failed"
|
||||
" (val=%lx, addr=%lx)", (long)val, (long)addr);
|
||||
off32 = off64;
|
||||
write16le(ptr, (read16le(ptr) & 0xe383)
|
||||
| (((off32 >> 5) & 1) << 2)
|
||||
| (((off32 >> 1) & 3) << 3)
|
||||
| (((off32 >> 6) & 3) << 5)
|
||||
| (((off32 >> 3) & 3) << 10)
|
||||
| (((off32 >> 8) & 1) << 12));
|
||||
return;
|
||||
case R_RISCV_RVC_JUMP:
|
||||
off64 = (val - addr);
|
||||
if ((off64 + (1 << 11)) & ~(uint64_t)0xffe)
|
||||
tcc_error_noabort("R_RISCV_RVC_BRANCH relocation failed"
|
||||
" (val=%lx, addr=%lx)", (long)val, (long)addr);
|
||||
off32 = off64;
|
||||
write16le(ptr, (read16le(ptr) & 0xe003)
|
||||
| (((off32 >> 5) & 1) << 2)
|
||||
| (((off32 >> 1) & 7) << 3)
|
||||
| (((off32 >> 7) & 1) << 6)
|
||||
| (((off32 >> 6) & 1) << 7)
|
||||
| (((off32 >> 10) & 1) << 8)
|
||||
| (((off32 >> 8) & 3) << 9)
|
||||
| (((off32 >> 4) & 1) << 11)
|
||||
| (((off32 >> 11) & 1) << 12));
|
||||
return;
|
||||
|
||||
case R_RISCV_32:
|
||||
if (s1->output_type & TCC_OUTPUT_DYN) {
|
||||
/* XXX: this logic may depend on TCC's codegen
|
||||
now TCC uses R_RISCV_RELATIVE even for a 64bit pointer */
|
||||
qrel->r_offset = rel->r_offset;
|
||||
qrel->r_info = ELFW(R_INFO)(0, R_RISCV_RELATIVE);
|
||||
/* Use sign extension! */
|
||||
qrel->r_addend = (int)read32le(ptr) + val;
|
||||
qrel++;
|
||||
}
|
||||
add32le(ptr, val);
|
||||
return;
|
||||
case R_RISCV_64:
|
||||
if (s1->output_type & TCC_OUTPUT_DYN) {
|
||||
esym_index = get_sym_attr(s1, sym_index, 0)->dyn_index;
|
||||
qrel->r_offset = rel->r_offset;
|
||||
if (esym_index) {
|
||||
qrel->r_info = ELFW(R_INFO)(esym_index, R_RISCV_64);
|
||||
qrel->r_addend = rel->r_addend;
|
||||
qrel++;
|
||||
break;
|
||||
} else {
|
||||
qrel->r_info = ELFW(R_INFO)(0, R_RISCV_RELATIVE);
|
||||
qrel->r_addend = read64le(ptr) + val;
|
||||
qrel++;
|
||||
}
|
||||
}
|
||||
case R_RISCV_JUMP_SLOT:
|
||||
add64le(ptr, val);
|
||||
return;
|
||||
case R_RISCV_ADD64:
|
||||
write64le(ptr, read64le(ptr) + val);
|
||||
return;
|
||||
case R_RISCV_ADD32:
|
||||
write32le(ptr, read32le(ptr) + val);
|
||||
return;
|
||||
case R_RISCV_SUB64:
|
||||
write64le(ptr, read64le(ptr) - val);
|
||||
return;
|
||||
case R_RISCV_SUB32:
|
||||
write32le(ptr, read32le(ptr) - val);
|
||||
return;
|
||||
case R_RISCV_ADD16:
|
||||
write16le(ptr, read16le(ptr) + val);
|
||||
return;
|
||||
case R_RISCV_SUB8:
|
||||
*ptr -= val;
|
||||
return;
|
||||
case R_RISCV_SUB16:
|
||||
write16le(ptr, read16le(ptr) - val);
|
||||
return;
|
||||
case R_RISCV_SET6:
|
||||
*ptr = (*ptr & ~0x3f) | (val & 0x3f);
|
||||
return;
|
||||
case R_RISCV_SET8:
|
||||
*ptr = (*ptr & ~0xff) | (val & 0xff);
|
||||
return;
|
||||
case R_RISCV_SET16:
|
||||
*ptr = (*ptr & ~0xffff) | (val & 0xffff);
|
||||
return;
|
||||
case R_RISCV_SUB6:
|
||||
*ptr = (*ptr & ~0x3f) | ((*ptr - val) & 0x3f);
|
||||
return;
|
||||
case R_RISCV_32_PCREL:
|
||||
if (s1->output_type & TCC_OUTPUT_DYN) {
|
||||
/* DLL relocation */
|
||||
esym_index = get_sym_attr(s1, sym_index, 0)->dyn_index;
|
||||
if (esym_index) {
|
||||
qrel->r_offset = rel->r_offset;
|
||||
qrel->r_info = ELFW(R_INFO)(esym_index, R_RISCV_32_PCREL);
|
||||
/* Use sign extension! */
|
||||
qrel->r_addend = (int)read32le(ptr) + rel->r_addend;
|
||||
qrel++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
add32le(ptr, val - addr);
|
||||
return;
|
||||
case R_RISCV_COPY:
|
||||
/* XXX */
|
||||
return;
|
||||
|
||||
default:
|
||||
fprintf(stderr, "FIXME: handle reloc type %x at %x [%p] to %x\n",
|
||||
type, (unsigned)addr, ptr, (unsigned)val);
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
477
riscv64-tok.h
477
riscv64-tok.h
|
@ -1,477 +0,0 @@
|
|||
/* ------------------------------------------------------------------ */
|
||||
/* WARNING: relative order of tokens is important. */
|
||||
|
||||
/*
|
||||
* The specifications are available under https://riscv.org/technical/specifications/
|
||||
*/
|
||||
|
||||
#define DEF_ASM_WITH_SUFFIX(x, y) \
|
||||
DEF(TOK_ASM_ ## x ## _ ## y, #x "." #y)
|
||||
|
||||
#define DEF_ASM_WITH_SUFFIXES(x, y, z) \
|
||||
DEF(TOK_ASM_ ## x ## _ ## y ## _ ## z, #x "." #y "." #z)
|
||||
|
||||
#define DEF_ASM_FENCE(x) \
|
||||
DEF(TOK_ASM_ ## x ## _fence, #x)
|
||||
|
||||
/* register */
|
||||
/* integer */
|
||||
DEF_ASM(x0)
|
||||
DEF_ASM(x1)
|
||||
DEF_ASM(x2)
|
||||
DEF_ASM(x3)
|
||||
DEF_ASM(x4)
|
||||
DEF_ASM(x5)
|
||||
DEF_ASM(x6)
|
||||
DEF_ASM(x7)
|
||||
DEF_ASM(x8)
|
||||
DEF_ASM(x9)
|
||||
DEF_ASM(x10)
|
||||
DEF_ASM(x11)
|
||||
DEF_ASM(x12)
|
||||
DEF_ASM(x13)
|
||||
DEF_ASM(x14)
|
||||
DEF_ASM(x15)
|
||||
DEF_ASM(x16)
|
||||
DEF_ASM(x17)
|
||||
DEF_ASM(x18)
|
||||
DEF_ASM(x19)
|
||||
DEF_ASM(x20)
|
||||
DEF_ASM(x21)
|
||||
DEF_ASM(x22)
|
||||
DEF_ASM(x23)
|
||||
DEF_ASM(x24)
|
||||
DEF_ASM(x25)
|
||||
DEF_ASM(x26)
|
||||
DEF_ASM(x27)
|
||||
DEF_ASM(x28)
|
||||
DEF_ASM(x29)
|
||||
DEF_ASM(x30)
|
||||
DEF_ASM(x31)
|
||||
/* float */
|
||||
DEF_ASM(f0)
|
||||
DEF_ASM(f1)
|
||||
DEF_ASM(f2)
|
||||
DEF_ASM(f3)
|
||||
DEF_ASM(f4)
|
||||
DEF_ASM(f5)
|
||||
DEF_ASM(f6)
|
||||
DEF_ASM(f7)
|
||||
DEF_ASM(f8)
|
||||
DEF_ASM(f9)
|
||||
DEF_ASM(f10)
|
||||
DEF_ASM(f11)
|
||||
DEF_ASM(f12)
|
||||
DEF_ASM(f13)
|
||||
DEF_ASM(f14)
|
||||
DEF_ASM(f15)
|
||||
DEF_ASM(f16)
|
||||
DEF_ASM(f17)
|
||||
DEF_ASM(f18)
|
||||
DEF_ASM(f19)
|
||||
DEF_ASM(f20)
|
||||
DEF_ASM(f21)
|
||||
DEF_ASM(f22)
|
||||
DEF_ASM(f23)
|
||||
DEF_ASM(f24)
|
||||
DEF_ASM(f25)
|
||||
DEF_ASM(f26)
|
||||
DEF_ASM(f27)
|
||||
DEF_ASM(f28)
|
||||
DEF_ASM(f29)
|
||||
DEF_ASM(f30)
|
||||
DEF_ASM(f31)
|
||||
|
||||
/* register ABI mnemonics, refer to RISC-V ABI 1.0 */
|
||||
/* integer */
|
||||
DEF_ASM(zero)
|
||||
DEF_ASM(ra)
|
||||
DEF_ASM(sp)
|
||||
DEF_ASM(gp)
|
||||
DEF_ASM(tp)
|
||||
DEF_ASM(t0)
|
||||
DEF_ASM(t1)
|
||||
DEF_ASM(t2)
|
||||
DEF_ASM(s0)
|
||||
DEF_ASM(s1)
|
||||
DEF_ASM(a0)
|
||||
DEF_ASM(a1)
|
||||
DEF_ASM(a2)
|
||||
DEF_ASM(a3)
|
||||
DEF_ASM(a4)
|
||||
DEF_ASM(a5)
|
||||
DEF_ASM(a6)
|
||||
DEF_ASM(a7)
|
||||
DEF_ASM(s2)
|
||||
DEF_ASM(s3)
|
||||
DEF_ASM(s4)
|
||||
DEF_ASM(s5)
|
||||
DEF_ASM(s6)
|
||||
DEF_ASM(s7)
|
||||
DEF_ASM(s8)
|
||||
DEF_ASM(s9)
|
||||
DEF_ASM(s10)
|
||||
DEF_ASM(s11)
|
||||
DEF_ASM(t3)
|
||||
DEF_ASM(t4)
|
||||
DEF_ASM(t5)
|
||||
DEF_ASM(t6)
|
||||
/* float */
|
||||
DEF_ASM(ft0)
|
||||
DEF_ASM(ft1)
|
||||
DEF_ASM(ft2)
|
||||
DEF_ASM(ft3)
|
||||
DEF_ASM(ft4)
|
||||
DEF_ASM(ft5)
|
||||
DEF_ASM(ft6)
|
||||
DEF_ASM(ft7)
|
||||
DEF_ASM(fs0)
|
||||
DEF_ASM(fs1)
|
||||
DEF_ASM(fa0)
|
||||
DEF_ASM(fa1)
|
||||
DEF_ASM(fa2)
|
||||
DEF_ASM(fa3)
|
||||
DEF_ASM(fa4)
|
||||
DEF_ASM(fa5)
|
||||
DEF_ASM(fa6)
|
||||
DEF_ASM(fa7)
|
||||
DEF_ASM(fs2)
|
||||
DEF_ASM(fs3)
|
||||
DEF_ASM(fs4)
|
||||
DEF_ASM(fs5)
|
||||
DEF_ASM(fs6)
|
||||
DEF_ASM(fs7)
|
||||
DEF_ASM(fs8)
|
||||
DEF_ASM(fs9)
|
||||
DEF_ASM(fs10)
|
||||
DEF_ASM(fs11)
|
||||
DEF_ASM(ft8)
|
||||
DEF_ASM(ft9)
|
||||
DEF_ASM(ft10)
|
||||
DEF_ASM(ft11)
|
||||
/* not in the ABI */
|
||||
DEF_ASM(pc)
|
||||
|
||||
/* Loads */
|
||||
|
||||
DEF_ASM(lb)
|
||||
DEF_ASM(lh)
|
||||
DEF_ASM(lw)
|
||||
DEF_ASM(lbu)
|
||||
DEF_ASM(lhu)
|
||||
/* RV64 */
|
||||
DEF_ASM(ld)
|
||||
DEF_ASM(lwu)
|
||||
|
||||
/* Stores */
|
||||
|
||||
DEF_ASM(sb)
|
||||
DEF_ASM(sh)
|
||||
DEF_ASM(sw)
|
||||
/* RV64 */
|
||||
DEF_ASM(sd)
|
||||
|
||||
/* Shifts */
|
||||
|
||||
DEF_ASM(sll)
|
||||
DEF_ASM(srl)
|
||||
DEF_ASM(sra)
|
||||
/* RV64 */
|
||||
DEF_ASM(slli)
|
||||
DEF_ASM(srli)
|
||||
DEF_ASM(sllw)
|
||||
DEF_ASM(slliw)
|
||||
DEF_ASM(srlw)
|
||||
DEF_ASM(srliw)
|
||||
DEF_ASM(srai)
|
||||
DEF_ASM(sraw)
|
||||
DEF_ASM(sraiw)
|
||||
|
||||
/* Arithmetic */
|
||||
|
||||
DEF_ASM(add)
|
||||
DEF_ASM(addi)
|
||||
DEF_ASM(sub)
|
||||
DEF_ASM(lui)
|
||||
DEF_ASM(auipc)
|
||||
/* RV64 */
|
||||
DEF_ASM(addw)
|
||||
DEF_ASM(addiw)
|
||||
DEF_ASM(subw)
|
||||
|
||||
/* Logical */
|
||||
|
||||
DEF_ASM(xor)
|
||||
DEF_ASM(xori)
|
||||
DEF_ASM(or)
|
||||
DEF_ASM(ori)
|
||||
DEF_ASM(and)
|
||||
DEF_ASM(andi)
|
||||
|
||||
/* Compare */
|
||||
|
||||
DEF_ASM(slt)
|
||||
DEF_ASM(slti)
|
||||
DEF_ASM(sltu)
|
||||
DEF_ASM(sltiu)
|
||||
|
||||
/* Branch */
|
||||
|
||||
DEF_ASM(beq)
|
||||
DEF_ASM(bne)
|
||||
DEF_ASM(blt)
|
||||
DEF_ASM(bge)
|
||||
DEF_ASM(bltu)
|
||||
DEF_ASM(bgeu)
|
||||
|
||||
/* Jump */
|
||||
|
||||
DEF_ASM(jal)
|
||||
DEF_ASM(jalr)
|
||||
|
||||
/* Sync */
|
||||
|
||||
DEF_ASM(fence)
|
||||
/* Zifencei extension */
|
||||
DEF_ASM_WITH_SUFFIX(fence, i)
|
||||
|
||||
/* System call */
|
||||
|
||||
/* used to be called scall and sbreak */
|
||||
DEF_ASM(ecall)
|
||||
DEF_ASM(ebreak)
|
||||
|
||||
/* Counters */
|
||||
|
||||
DEF_ASM(rdcycle)
|
||||
DEF_ASM(rdcycleh)
|
||||
DEF_ASM(rdtime)
|
||||
DEF_ASM(rdtimeh)
|
||||
DEF_ASM(rdinstret)
|
||||
DEF_ASM(rdinstreth)
|
||||
|
||||
/* “M” Standard Extension for Integer Multiplication and Division, V2.0 */
|
||||
DEF_ASM(mul)
|
||||
DEF_ASM(mulh)
|
||||
DEF_ASM(mulhsu)
|
||||
DEF_ASM(mulhu)
|
||||
DEF_ASM(div)
|
||||
DEF_ASM(divu)
|
||||
DEF_ASM(rem)
|
||||
DEF_ASM(remu)
|
||||
/* RV64 */
|
||||
DEF_ASM(mulw)
|
||||
DEF_ASM(divw)
|
||||
DEF_ASM(divuw)
|
||||
DEF_ASM(remw)
|
||||
DEF_ASM(remuw)
|
||||
|
||||
/* "C" Extension for Compressed Instructions, V2.0 */
|
||||
DEF_ASM_WITH_SUFFIX(c, nop)
|
||||
/* Loads */
|
||||
DEF_ASM_WITH_SUFFIX(c, li)
|
||||
DEF_ASM_WITH_SUFFIX(c, lw)
|
||||
DEF_ASM_WITH_SUFFIX(c, lwsp)
|
||||
/* single float */
|
||||
DEF_ASM_WITH_SUFFIX(c, flw)
|
||||
DEF_ASM_WITH_SUFFIX(c, flwsp)
|
||||
/* double float */
|
||||
DEF_ASM_WITH_SUFFIX(c, fld)
|
||||
DEF_ASM_WITH_SUFFIX(c, fldsp)
|
||||
/* RV64 */
|
||||
DEF_ASM_WITH_SUFFIX(c, ld)
|
||||
DEF_ASM_WITH_SUFFIX(c, ldsp)
|
||||
|
||||
/* Stores */
|
||||
|
||||
DEF_ASM_WITH_SUFFIX(c, sw)
|
||||
DEF_ASM_WITH_SUFFIX(c, sd)
|
||||
DEF_ASM_WITH_SUFFIX(c, swsp)
|
||||
DEF_ASM_WITH_SUFFIX(c, sdsp)
|
||||
/* single float */
|
||||
DEF_ASM_WITH_SUFFIX(c, fsw)
|
||||
DEF_ASM_WITH_SUFFIX(c, fswsp)
|
||||
/* double float */
|
||||
DEF_ASM_WITH_SUFFIX(c, fsd)
|
||||
DEF_ASM_WITH_SUFFIX(c, fsdsp)
|
||||
|
||||
/* Shifts */
|
||||
DEF_ASM_WITH_SUFFIX(c, slli)
|
||||
DEF_ASM_WITH_SUFFIX(c, srli)
|
||||
DEF_ASM_WITH_SUFFIX(c, srai)
|
||||
|
||||
/* Arithmetic */
|
||||
DEF_ASM_WITH_SUFFIX(c, add)
|
||||
DEF_ASM_WITH_SUFFIX(c, addi)
|
||||
DEF_ASM_WITH_SUFFIX(c, addi16sp)
|
||||
DEF_ASM_WITH_SUFFIX(c, addi4spn)
|
||||
DEF_ASM_WITH_SUFFIX(c, lui)
|
||||
DEF_ASM_WITH_SUFFIX(c, sub)
|
||||
DEF_ASM_WITH_SUFFIX(c, mv)
|
||||
/* RV64 */
|
||||
DEF_ASM_WITH_SUFFIX(c, addw)
|
||||
DEF_ASM_WITH_SUFFIX(c, addiw)
|
||||
DEF_ASM_WITH_SUFFIX(c, subw)
|
||||
|
||||
/* Logical */
|
||||
DEF_ASM_WITH_SUFFIX(c, xor)
|
||||
DEF_ASM_WITH_SUFFIX(c, or)
|
||||
DEF_ASM_WITH_SUFFIX(c, and)
|
||||
DEF_ASM_WITH_SUFFIX(c, andi)
|
||||
|
||||
/* Branch */
|
||||
DEF_ASM_WITH_SUFFIX(c, beqz)
|
||||
DEF_ASM_WITH_SUFFIX(c, bnez)
|
||||
|
||||
/* Jump */
|
||||
DEF_ASM_WITH_SUFFIX(c, j)
|
||||
DEF_ASM_WITH_SUFFIX(c, jr)
|
||||
DEF_ASM_WITH_SUFFIX(c, jal)
|
||||
DEF_ASM_WITH_SUFFIX(c, jalr)
|
||||
|
||||
/* System call */
|
||||
DEF_ASM_WITH_SUFFIX(c, ebreak)
|
||||
|
||||
/* XXX F Extension: Single-Precision Floating Point */
|
||||
/* XXX D Extension: Double-Precision Floating Point */
|
||||
/* from the spec: Tables 16.5–16.7 list the RVC instructions. */
|
||||
|
||||
/* “Zicsr”, Control and Status Register (CSR) Instructions, V2.0 */
|
||||
DEF_ASM(csrrw)
|
||||
DEF_ASM(csrrs)
|
||||
DEF_ASM(csrrc)
|
||||
DEF_ASM(csrrwi)
|
||||
DEF_ASM(csrrsi)
|
||||
DEF_ASM(csrrci)
|
||||
/* registers */
|
||||
DEF_ASM(cycle)
|
||||
DEF_ASM(fcsr)
|
||||
DEF_ASM(fflags)
|
||||
DEF_ASM(frm)
|
||||
DEF_ASM(instret)
|
||||
DEF_ASM(time)
|
||||
/* RV32I-only */
|
||||
DEF_ASM(cycleh)
|
||||
DEF_ASM(instreth)
|
||||
DEF_ASM(timeh)
|
||||
/* pseudo */
|
||||
DEF_ASM(csrc)
|
||||
DEF_ASM(csrci)
|
||||
DEF_ASM(csrr)
|
||||
DEF_ASM(csrs)
|
||||
DEF_ASM(csrsi)
|
||||
DEF_ASM(csrw)
|
||||
DEF_ASM(csrwi)
|
||||
DEF_ASM(frcsr)
|
||||
DEF_ASM(frflags)
|
||||
DEF_ASM(frrm)
|
||||
DEF_ASM(fscsr)
|
||||
DEF_ASM(fsflags)
|
||||
DEF_ASM(fsrm)
|
||||
|
||||
/* Privileged Instructions */
|
||||
|
||||
DEF_ASM(mrts)
|
||||
DEF_ASM(mrth)
|
||||
DEF_ASM(hrts)
|
||||
DEF_ASM(wfi)
|
||||
|
||||
/* pseudoinstructions */
|
||||
DEF_ASM(beqz)
|
||||
DEF_ASM(bgez)
|
||||
DEF_ASM(bgt)
|
||||
DEF_ASM(bgtu)
|
||||
DEF_ASM(bgtz)
|
||||
DEF_ASM(ble)
|
||||
DEF_ASM(bleu)
|
||||
DEF_ASM(blez)
|
||||
DEF_ASM(bltz)
|
||||
DEF_ASM(bnez)
|
||||
DEF_ASM(call)
|
||||
DEF_ASM_WITH_SUFFIX(fabs, d)
|
||||
DEF_ASM_WITH_SUFFIX(fabs, s)
|
||||
DEF_ASM(fld)
|
||||
DEF_ASM(flw)
|
||||
DEF_ASM_WITH_SUFFIX(fmv, d)
|
||||
DEF_ASM_WITH_SUFFIX(fmv, s)
|
||||
DEF_ASM_WITH_SUFFIX(fneg, d)
|
||||
DEF_ASM_WITH_SUFFIX(fneg, s)
|
||||
DEF_ASM(fsd)
|
||||
DEF_ASM(fsw)
|
||||
DEF_ASM(j)
|
||||
DEF_ASM(jump)
|
||||
DEF_ASM(jr)
|
||||
DEF_ASM(la)
|
||||
DEF_ASM(li)
|
||||
DEF_ASM(lla)
|
||||
DEF_ASM(mv)
|
||||
DEF_ASM(neg)
|
||||
DEF_ASM(negw)
|
||||
DEF_ASM(nop)
|
||||
DEF_ASM(not)
|
||||
DEF_ASM(ret)
|
||||
DEF_ASM(seqz)
|
||||
DEF_ASM_WITH_SUFFIX(sext, w)
|
||||
DEF_ASM(sgtz)
|
||||
DEF_ASM(sltz)
|
||||
DEF_ASM(snez)
|
||||
DEF_ASM(tail)
|
||||
|
||||
/* Possible values for .option directive */
|
||||
DEF_ASM(arch)
|
||||
DEF_ASM(rvc)
|
||||
DEF_ASM(norvc)
|
||||
DEF_ASM(pic)
|
||||
DEF_ASM(nopic)
|
||||
DEF_ASM(relax)
|
||||
DEF_ASM(norelax)
|
||||
DEF_ASM(push)
|
||||
DEF_ASM(pop)
|
||||
|
||||
/* “A” Standard Extension for Atomic Instructions, Version 2.1 */
|
||||
/* XXX: Atomic memory operations */
|
||||
DEF_ASM_WITH_SUFFIX(lr, w)
|
||||
DEF_ASM_WITH_SUFFIXES(lr, w, aq)
|
||||
DEF_ASM_WITH_SUFFIXES(lr, w, rl)
|
||||
DEF_ASM_WITH_SUFFIXES(lr, w, aqrl)
|
||||
|
||||
DEF_ASM_WITH_SUFFIX(lr, d)
|
||||
DEF_ASM_WITH_SUFFIXES(lr, d, aq)
|
||||
DEF_ASM_WITH_SUFFIXES(lr, d, rl)
|
||||
DEF_ASM_WITH_SUFFIXES(lr, d, aqrl)
|
||||
|
||||
|
||||
DEF_ASM_WITH_SUFFIX(sc, w)
|
||||
DEF_ASM_WITH_SUFFIXES(sc, w, aq)
|
||||
DEF_ASM_WITH_SUFFIXES(sc, w, rl)
|
||||
DEF_ASM_WITH_SUFFIXES(sc, w, aqrl)
|
||||
|
||||
DEF_ASM_WITH_SUFFIX(sc, d)
|
||||
DEF_ASM_WITH_SUFFIXES(sc, d, aq)
|
||||
DEF_ASM_WITH_SUFFIXES(sc, d, rl)
|
||||
DEF_ASM_WITH_SUFFIXES(sc, d, aqrl)
|
||||
|
||||
/* `fence` arguments */
|
||||
/* NOTE: Order is important */
|
||||
DEF_ASM_FENCE(w)
|
||||
DEF_ASM_FENCE(r)
|
||||
DEF_ASM_FENCE(rw)
|
||||
|
||||
DEF_ASM_FENCE(o)
|
||||
DEF_ASM_FENCE(ow)
|
||||
DEF_ASM_FENCE(or)
|
||||
DEF_ASM_FENCE(orw)
|
||||
|
||||
DEF_ASM_FENCE(i)
|
||||
DEF_ASM_FENCE(iw)
|
||||
DEF_ASM_FENCE(ir)
|
||||
DEF_ASM_FENCE(irw)
|
||||
|
||||
DEF_ASM_FENCE(io)
|
||||
DEF_ASM_FENCE(iow)
|
||||
DEF_ASM_FENCE(ior)
|
||||
DEF_ASM_FENCE(iorw)
|
||||
|
||||
#undef DEF_ASM_FENCE
|
||||
#undef DEF_ASM_WITH_SUFFIX
|
||||
#undef DEF_ASM_WITH_SUFFIXES
|
99
tcc.c
99
tcc.c
|
@ -18,18 +18,12 @@
|
|||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef ONE_SOURCE
|
||||
# define ONE_SOURCE 1
|
||||
#endif
|
||||
|
||||
#include "config.h"
|
||||
#include "tcc.h"
|
||||
#if ONE_SOURCE
|
||||
# include "libtcc.c"
|
||||
#endif
|
||||
#include "tcctools.c"
|
||||
|
||||
static const char help[] =
|
||||
"Tiny C Compiler "TCC_VERSION" - Copyright (C) 2001-2006 Fabrice Bellard\n"
|
||||
"Tiny C Compiler "PACKAGE_VERSION" - Copyright (C) 2001-2006 Fabrice Bellard\n"
|
||||
"Usage: tcc [options...] [-o outfile] [-c] infile(s)...\n"
|
||||
" tcc [options...] -run infile (or --) [arguments...]\n"
|
||||
"General options:\n"
|
||||
|
@ -61,9 +55,6 @@ static const char help[] =
|
|||
"Debugger options:\n"
|
||||
" -g generate stab runtime debug info\n"
|
||||
" -gdwarf[-x] generate dwarf runtime debug info\n"
|
||||
#ifdef TCC_TARGET_PE
|
||||
" -g.pdb create .pdb debug database\n"
|
||||
#endif
|
||||
#ifdef CONFIG_TCC_BCHECK
|
||||
" -b compile with built-in memory and bounds checker (implies -g)\n"
|
||||
#endif
|
||||
|
@ -79,18 +70,12 @@ static const char help[] =
|
|||
" -M[M]D generate make dependency file [ignore system files]\n"
|
||||
" -M[M] as above but no other output\n"
|
||||
" -MF file specify dependency file name\n"
|
||||
#if defined(TCC_TARGET_I386) || defined(TCC_TARGET_X86_64)
|
||||
" -m32/64 defer to i386/x86_64 cross compiler\n"
|
||||
#endif
|
||||
"Tools:\n"
|
||||
" create library : tcc -ar [crstvx] lib [files]\n"
|
||||
#ifdef TCC_TARGET_PE
|
||||
" create def file : tcc -impdef lib.dll [-v] [-o lib.def]\n"
|
||||
#endif
|
||||
;
|
||||
|
||||
static const char help2[] =
|
||||
"Tiny C Compiler "TCC_VERSION" - More Options\n"
|
||||
"Tiny C Compiler "PACKAGE_VERSION" - More Options\n"
|
||||
"Special options:\n"
|
||||
" -P -P1 with -E: no/alternative #line output\n"
|
||||
" -dD -dM with -E: output #define directives\n"
|
||||
|
@ -125,12 +110,6 @@ static const char help2[] =
|
|||
" test-coverage create code coverage code\n"
|
||||
"-m... target specific options:\n"
|
||||
" ms-bitfields use MSVC bitfield layout\n"
|
||||
#ifdef TCC_TARGET_ARM
|
||||
" float-abi hard/softfp on arm\n"
|
||||
#endif
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
" no-sse disable floats on x86_64\n"
|
||||
#endif
|
||||
"-Wl,... linker options:\n"
|
||||
" -nostdlib do not link with standard crt/libs\n"
|
||||
" -[no-]whole-archive load lib(s) fully/only as needed\n"
|
||||
|
@ -138,69 +117,20 @@ static const char help2[] =
|
|||
" -export-dynamic 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/windows] set PE subsystem\n"
|
||||
" -oformat=[pe-* binary] set executable output format\n"
|
||||
"Predefined macros:\n"
|
||||
" tcc -E -dM - < nul\n"
|
||||
#else
|
||||
" -rpath= set dynamic library search path\n"
|
||||
" -enable-new-dtags set DT_RUNPATH instead of DT_RPATH\n"
|
||||
" -soname= set DT_SONAME elf tag\n"
|
||||
#if defined(TCC_TARGET_MACHO)
|
||||
" -install_name= set DT_SONAME elf tag (soname macOS alias)\n"
|
||||
#endif
|
||||
" -Bsymbolic set DT_SYMBOLIC elf tag\n"
|
||||
" -oformat=[elf32/64-* binary] set executable output format\n"
|
||||
" -init= -fini= -Map= -as-needed -O (ignored)\n"
|
||||
"Predefined macros:\n"
|
||||
" tcc -E -dM - < /dev/null\n"
|
||||
#endif
|
||||
"See also the manual for more details.\n"
|
||||
;
|
||||
|
||||
static const char version[] =
|
||||
"tcc version "TCC_VERSION
|
||||
#ifdef TCC_GITHASH
|
||||
" "TCC_GITHASH
|
||||
#endif
|
||||
" ("
|
||||
#ifdef TCC_TARGET_I386
|
||||
"i386"
|
||||
#elif defined TCC_TARGET_X86_64
|
||||
"x86_64"
|
||||
#elif defined TCC_TARGET_C67
|
||||
"C67"
|
||||
#elif defined TCC_TARGET_ARM
|
||||
"ARM"
|
||||
# ifdef TCC_ARM_EABI
|
||||
" eabi"
|
||||
# ifdef TCC_ARM_HARDFLOAT
|
||||
"hf"
|
||||
# endif
|
||||
# endif
|
||||
#elif defined TCC_TARGET_ARM64
|
||||
"AArch64"
|
||||
#elif defined TCC_TARGET_RISCV64
|
||||
"riscv64"
|
||||
#endif
|
||||
#ifdef TCC_TARGET_PE
|
||||
" Windows"
|
||||
#elif defined(TCC_TARGET_MACHO)
|
||||
" Darwin"
|
||||
#elif TARGETOS_FreeBSD || TARGETOS_FreeBSD_kernel
|
||||
" FreeBSD"
|
||||
#elif TARGETOS_OpenBSD
|
||||
" OpenBSD"
|
||||
#elif TARGETOS_NetBSD
|
||||
" NetBSD"
|
||||
#else
|
||||
" Linux"
|
||||
#endif
|
||||
")\n"
|
||||
"tcc version "PACKAGE_VERSION
|
||||
" (i386)\n"
|
||||
;
|
||||
|
||||
static void print_dirs(const char *msg, char **paths, int nb_paths)
|
||||
|
@ -218,10 +148,8 @@ static void print_search_dirs(TCCState *s)
|
|||
print_dirs("include", s->sysinclude_paths, s->nb_sysinclude_paths);
|
||||
print_dirs("libraries", s->library_paths, s->nb_library_paths);
|
||||
printf("libtcc1:\n %s/%s\n", s->library_paths[0], CONFIG_TCC_CROSSPREFIX TCC_LIBTCC1);
|
||||
#if !defined TCC_TARGET_PE && !defined TCC_TARGET_MACHO
|
||||
print_dirs("crt", s->crt_paths, s->nb_crt_paths);
|
||||
printf("elfinterp:\n %s\n", DEFAULT_ELFINTERP(s));
|
||||
#endif
|
||||
}
|
||||
|
||||
static void set_environment(TCCState *s)
|
||||
|
@ -252,16 +180,8 @@ static char *default_outputfile(TCCState *s, const char *first_file)
|
|||
name = tcc_basename(first_file);
|
||||
snprintf(buf, sizeof(buf), "%s", name);
|
||||
ext = tcc_fileextension(buf);
|
||||
#ifdef TCC_TARGET_PE
|
||||
if (s->output_type == TCC_OUTPUT_DLL)
|
||||
strcpy(ext, ".dll");
|
||||
else
|
||||
if (s->output_type == TCC_OUTPUT_EXE)
|
||||
strcpy(ext, ".exe");
|
||||
else
|
||||
#endif
|
||||
if ((s->just_deps || s->output_type == TCC_OUTPUT_OBJ) && !s->option_r && *ext)
|
||||
strcpy(ext, ".o");
|
||||
strcpy(ext, ".obj");
|
||||
else
|
||||
strcpy(buf, "a.out");
|
||||
return tcc_strdup(buf);
|
||||
|
@ -314,10 +234,6 @@ redo:
|
|||
printf("%s", version);
|
||||
if (opt == OPT_AR)
|
||||
return tcc_tool_ar(s, argc, argv);
|
||||
#ifdef TCC_TARGET_PE
|
||||
if (opt == OPT_IMPDEF)
|
||||
return tcc_tool_impdef(s, argc, argv);
|
||||
#endif
|
||||
if (opt == OPT_V)
|
||||
return 0;
|
||||
if (opt == OPT_PRINT_DIRS) {
|
||||
|
@ -391,9 +307,6 @@ redo:
|
|||
;
|
||||
} else if (0 == ret) {
|
||||
if (s->output_type == TCC_OUTPUT_MEMORY) {
|
||||
#ifdef TCC_IS_NATIVE
|
||||
ret = tcc_run(s, argc, argv);
|
||||
#endif
|
||||
} else {
|
||||
if (!s->outfile)
|
||||
s->outfile = default_outputfile(s, first_file);
|
||||
|
|
207
tcc.h
207
tcc.h
|
@ -147,46 +147,7 @@ extern long double strtold (const char *__nptr, char **__endptr);
|
|||
/* #define TCC_TARGET_RISCV64 *//* risc-v code generator */
|
||||
|
||||
/* default target is I386 */
|
||||
#if !defined(TCC_TARGET_I386) && !defined(TCC_TARGET_ARM) && \
|
||||
!defined(TCC_TARGET_ARM64) && !defined(TCC_TARGET_C67) && \
|
||||
!defined(TCC_TARGET_X86_64) && !defined(TCC_TARGET_RISCV64)
|
||||
# if defined __x86_64__
|
||||
# define TCC_TARGET_X86_64
|
||||
# elif defined __arm__
|
||||
# define TCC_TARGET_ARM
|
||||
# define TCC_ARM_EABI
|
||||
# define TCC_ARM_VFP
|
||||
# define TCC_ARM_HARDFLOAT
|
||||
# elif defined __aarch64__
|
||||
# define TCC_TARGET_ARM64
|
||||
# elif defined __riscv
|
||||
# define TCC_TARGET_RISCV64
|
||||
# else
|
||||
# define TCC_TARGET_I386
|
||||
# endif
|
||||
# ifdef _WIN32
|
||||
# define TCC_TARGET_PE 1
|
||||
# endif
|
||||
# ifdef __APPLE__
|
||||
# define TCC_TARGET_MACHO 1
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* only native compiler supports -run */
|
||||
#if defined _WIN32 == defined TCC_TARGET_PE \
|
||||
&& defined __APPLE__ == defined TCC_TARGET_MACHO
|
||||
# if defined __i386__ && defined TCC_TARGET_I386
|
||||
# define TCC_IS_NATIVE
|
||||
# elif defined __x86_64__ && defined TCC_TARGET_X86_64
|
||||
# define TCC_IS_NATIVE
|
||||
# elif defined __arm__ && defined TCC_TARGET_ARM
|
||||
# define TCC_IS_NATIVE
|
||||
# elif defined __aarch64__ && defined TCC_TARGET_ARM64
|
||||
# define TCC_IS_NATIVE
|
||||
# elif defined __riscv && defined __LP64__ && defined TCC_TARGET_RISCV64
|
||||
# define TCC_IS_NATIVE
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined CONFIG_TCC_BACKTRACE && CONFIG_TCC_BACKTRACE==0
|
||||
# undef CONFIG_TCC_BACKTRACE
|
||||
|
@ -200,33 +161,6 @@ extern long double strtold (const char *__nptr, char **__endptr);
|
|||
# define CONFIG_TCC_BCHECK 1 /* enable bound checking code */
|
||||
#endif
|
||||
|
||||
#if defined CONFIG_NEW_MACHO && CONFIG_NEW_MACHO==0
|
||||
# undef CONFIG_NEW_MACHO
|
||||
#else
|
||||
# define CONFIG_NEW_MACHO 1 /* enable new macho code */
|
||||
#endif
|
||||
|
||||
#if defined TARGETOS_OpenBSD \
|
||||
|| defined TARGETOS_FreeBSD \
|
||||
|| defined TARGETOS_NetBSD \
|
||||
|| defined TARGETOS_FreeBSD_kernel
|
||||
# define TARGETOS_BSD 1
|
||||
#elif !(defined TCC_TARGET_PE || defined TCC_TARGET_MACHO)
|
||||
# define TARGETOS_Linux 1 /* for tccdefs_.h */
|
||||
#endif
|
||||
|
||||
#if defined TCC_TARGET_PE || defined TCC_TARGET_MACHO
|
||||
# define ELF_OBJ_ONLY /* create elf .o but native executables */
|
||||
#endif
|
||||
|
||||
/* No ten-byte long doubles on window and macos except in
|
||||
cross-compilers made by a mingw-GCC */
|
||||
#if defined TCC_TARGET_PE \
|
||||
|| (defined TCC_TARGET_MACHO && defined TCC_TARGET_ARM64) \
|
||||
|| (defined _WIN32 && !defined __GNUC__)
|
||||
# define TCC_USING_DOUBLE_FOR_LDOUBLE 1
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_TCC_PIE
|
||||
# define CONFIG_TCC_PIC 1
|
||||
#endif
|
||||
|
@ -343,19 +277,9 @@ extern long double strtold (const char *__nptr, char **__endptr);
|
|||
# define PUB_FUNC
|
||||
#endif
|
||||
|
||||
#ifndef ONE_SOURCE
|
||||
# define ONE_SOURCE 0
|
||||
#endif
|
||||
|
||||
#if ONE_SOURCE
|
||||
#define ST_INLN static inline
|
||||
#define ST_FUNC static
|
||||
#define ST_DATA static
|
||||
#else
|
||||
#define ST_INLN
|
||||
#define ST_FUNC
|
||||
#define ST_DATA extern
|
||||
#endif
|
||||
|
||||
#ifdef TCC_PROFILE /* profile all functions */
|
||||
# define static
|
||||
|
@ -366,60 +290,22 @@ extern long double strtold (const char *__nptr, char **__endptr);
|
|||
/* include the target specific definitions */
|
||||
|
||||
#define TARGET_DEFS_ONLY
|
||||
#ifdef TCC_TARGET_I386
|
||||
# include "i386-gen.c"
|
||||
# include "i386-link.c"
|
||||
#elif defined TCC_TARGET_X86_64
|
||||
# include "x86_64-gen.c"
|
||||
# include "x86_64-link.c"
|
||||
#elif defined TCC_TARGET_ARM
|
||||
# include "arm-gen.c"
|
||||
# include "arm-link.c"
|
||||
# include "arm-asm.c"
|
||||
#elif defined TCC_TARGET_ARM64
|
||||
# include "arm64-gen.c"
|
||||
# include "arm64-link.c"
|
||||
# include "arm-asm.c"
|
||||
#elif defined TCC_TARGET_C67
|
||||
# define TCC_TARGET_COFF
|
||||
# include "coff.h"
|
||||
# include "c67-gen.c"
|
||||
# include "c67-link.c"
|
||||
#elif defined(TCC_TARGET_RISCV64)
|
||||
# include "riscv64-gen.c"
|
||||
# include "riscv64-link.c"
|
||||
# include "riscv64-asm.c"
|
||||
#else
|
||||
#error unknown target
|
||||
#endif
|
||||
#undef TARGET_DEFS_ONLY
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
#if PTR_SIZE == 8
|
||||
# define ELFCLASSW ELFCLASS64
|
||||
# define ElfW(type) Elf##64##_##type
|
||||
# define ELFW(type) ELF##64##_##type
|
||||
# define ElfW_Rel ElfW(Rela)
|
||||
# define SHT_RELX SHT_RELA
|
||||
# define REL_SECTION_FMT ".rela%s"
|
||||
#else
|
||||
# define ELFCLASSW ELFCLASS32
|
||||
# define ElfW(type) Elf##32##_##type
|
||||
# define ELFW(type) ELF##32##_##type
|
||||
# define ElfW_Rel ElfW(Rel)
|
||||
# define SHT_RELX SHT_REL
|
||||
# define REL_SECTION_FMT ".rel%s"
|
||||
#endif
|
||||
|
||||
/* target address type */
|
||||
#define addr_t ElfW(Addr)
|
||||
#define ElfSym ElfW(Sym)
|
||||
|
||||
#if PTR_SIZE == 8 && !defined TCC_TARGET_PE
|
||||
# define LONG_SIZE 8
|
||||
#else
|
||||
# define LONG_SIZE 4
|
||||
#endif
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
|
@ -1710,51 +1596,7 @@ ST_FUNC void gen_cvt_csti(int t);
|
|||
ST_FUNC void gen_increment_tcov (SValue *sv);
|
||||
#endif
|
||||
|
||||
/* ------------ x86_64-gen.c ------------ */
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
ST_FUNC void gen_addr64(int r, Sym *sym, int64_t c);
|
||||
ST_FUNC void gen_opl(int op);
|
||||
#ifdef TCC_TARGET_PE
|
||||
ST_FUNC void gen_vla_result(int addr);
|
||||
#endif
|
||||
ST_FUNC void gen_cvt_sxtw(void);
|
||||
ST_FUNC void gen_cvt_csti(int t);
|
||||
#endif
|
||||
|
||||
/* ------------ arm-gen.c ------------ */
|
||||
#ifdef TCC_TARGET_ARM
|
||||
#if defined(TCC_ARM_EABI) && !defined(CONFIG_TCC_ELFINTERP)
|
||||
PUB_FUNC const char *default_elfinterp(struct TCCState *s);
|
||||
#endif
|
||||
ST_FUNC void arm_init(struct TCCState *s);
|
||||
ST_FUNC void gen_increment_tcov (SValue *sv);
|
||||
#endif
|
||||
|
||||
/* ------------ arm64-gen.c ------------ */
|
||||
#ifdef TCC_TARGET_ARM64
|
||||
ST_FUNC void gen_opl(int op);
|
||||
ST_FUNC void gfunc_return(CType *func_type);
|
||||
ST_FUNC void gen_va_start(void);
|
||||
ST_FUNC void gen_va_arg(CType *t);
|
||||
ST_FUNC void gen_clear_cache(void);
|
||||
ST_FUNC void gen_cvt_sxtw(void);
|
||||
ST_FUNC void gen_cvt_csti(int t);
|
||||
ST_FUNC void gen_increment_tcov (SValue *sv);
|
||||
#endif
|
||||
|
||||
/* ------------ riscv64-gen.c ------------ */
|
||||
#ifdef TCC_TARGET_RISCV64
|
||||
ST_FUNC void gen_opl(int op);
|
||||
//ST_FUNC void gfunc_return(CType *func_type);
|
||||
ST_FUNC void gen_va_start(void);
|
||||
ST_FUNC void arch_transfer_ret_regs(int);
|
||||
ST_FUNC void gen_cvt_sxtw(void);
|
||||
ST_FUNC void gen_increment_tcov (SValue *sv);
|
||||
#endif
|
||||
|
||||
/* ------------ c67-gen.c ------------ */
|
||||
#ifdef TCC_TARGET_C67
|
||||
#endif
|
||||
|
||||
/* ------------ tcccoff.c ------------ */
|
||||
#ifdef TCC_TARGET_COFF
|
||||
|
@ -1773,9 +1615,6 @@ ST_FUNC void asm_expr(TCCState *s1, ExprValue *pe);
|
|||
ST_FUNC int asm_int_expr(TCCState *s1);
|
||||
/* ------------ i386-asm.c ------------ */
|
||||
ST_FUNC void gen_expr32(ExprValue *pe);
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
ST_FUNC void gen_expr64(ExprValue *pe);
|
||||
#endif
|
||||
ST_FUNC void asm_opcode(TCCState *s1, int opcode);
|
||||
ST_FUNC int asm_parse_regvar(int t);
|
||||
ST_FUNC void asm_compute_constraints(ASMOperand *operands, int nb_operands, int nb_outputs, const uint8_t *clobber_regs, int *pout_reg);
|
||||
|
@ -1784,56 +1623,12 @@ ST_FUNC void asm_gen_code(ASMOperand *operands, int nb_operands, int nb_outputs,
|
|||
ST_FUNC void asm_clobber(uint8_t *clobber_regs, const char *str);
|
||||
#endif
|
||||
|
||||
/* ------------ tccpe.c -------------- */
|
||||
#ifdef TCC_TARGET_PE
|
||||
ST_FUNC int pe_load_file(struct TCCState *s1, int fd, const char *filename);
|
||||
ST_FUNC int pe_output_file(TCCState * s1, const char *filename);
|
||||
ST_FUNC int pe_putimport(TCCState *s1, int dllindex, const char *name, addr_t value);
|
||||
#if defined TCC_TARGET_I386 || defined TCC_TARGET_X86_64
|
||||
#endif
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
ST_FUNC void pe_add_unwind_data(unsigned start, unsigned end, unsigned stack);
|
||||
#endif
|
||||
PUB_FUNC int tcc_get_dllexports(const char *filename, char **pp);
|
||||
/* symbol properties stored in Elf32_Sym->st_other */
|
||||
# define ST_PE_EXPORT 0x10
|
||||
# define ST_PE_IMPORT 0x20
|
||||
# define ST_PE_STDCALL 0x40
|
||||
#endif
|
||||
#define ST_ASM_SET 0x04
|
||||
|
||||
/* ------------ tccmacho.c ----------------- */
|
||||
#ifdef TCC_TARGET_MACHO
|
||||
ST_FUNC int macho_output_file(TCCState * s1, const char *filename);
|
||||
ST_FUNC int macho_load_dll(TCCState *s1, int fd, const char *filename, int lev);
|
||||
ST_FUNC int macho_load_tbd(TCCState *s1, int fd, const char *filename, int lev);
|
||||
#ifdef TCC_IS_NATIVE
|
||||
ST_FUNC void tcc_add_macos_sdkpath(TCCState* s);
|
||||
ST_FUNC const char* macho_tbd_soname(const char* filename);
|
||||
#endif
|
||||
#endif
|
||||
/* ------------ tccrun.c ----------------- */
|
||||
#ifdef TCC_IS_NATIVE
|
||||
#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 *dlsym(void *handle, const char *symbol);
|
||||
#endif
|
||||
ST_FUNC void tcc_run_free(TCCState *s1);
|
||||
#endif
|
||||
|
||||
/* ------------ tcctools.c ----------------- */
|
||||
#if 0 /* included in tcc.c */
|
||||
ST_FUNC int tcc_tool_ar(TCCState *s, int argc, char **argv);
|
||||
#ifdef TCC_TARGET_PE
|
||||
ST_FUNC int tcc_tool_impdef(TCCState *s, int argc, char **argv);
|
||||
#endif
|
||||
ST_FUNC int tcc_tool_cross(TCCState *s, char **argv, int option);
|
||||
ST_FUNC int gen_makedeps(TCCState *s, const char *target, const char *filename);
|
||||
#endif
|
||||
|
|
49
tccasm.c
49
tccasm.c
|
@ -541,10 +541,6 @@ static void asm_parse_directive(TCCState *s1, int global)
|
|||
ind += size;
|
||||
break;
|
||||
case TOK_ASMDIR_quad:
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
size = 8;
|
||||
goto asm_data;
|
||||
#else
|
||||
next();
|
||||
for(;;) {
|
||||
uint64_t vl;
|
||||
|
@ -571,7 +567,6 @@ static void asm_parse_directive(TCCState *s1, int global)
|
|||
next();
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
case TOK_ASMDIR_byte:
|
||||
size = 1;
|
||||
goto asm_data;
|
||||
|
@ -590,10 +585,6 @@ static void asm_parse_directive(TCCState *s1, int global)
|
|||
if (sec->sh_type != SHT_NOBITS) {
|
||||
if (size == 4) {
|
||||
gen_expr32(&e);
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
} else if (size == 8) {
|
||||
gen_expr64(&e);
|
||||
#endif
|
||||
} else {
|
||||
if (e.sym)
|
||||
expect("constant");
|
||||
|
@ -926,7 +917,6 @@ static void asm_parse_directive(TCCState *s1, int global)
|
|||
next();
|
||||
pop_section(s1);
|
||||
break;
|
||||
#ifdef TCC_TARGET_I386
|
||||
case TOK_ASMDIR_code16:
|
||||
{
|
||||
next();
|
||||
|
@ -939,38 +929,6 @@ static void asm_parse_directive(TCCState *s1, int global)
|
|||
s1->seg_size = 32;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
#ifdef TCC_TARGET_X86_64
|
||||
/* added for compatibility with GAS */
|
||||
case TOK_ASMDIR_code64:
|
||||
next();
|
||||
break;
|
||||
#endif
|
||||
#ifdef TCC_TARGET_RISCV64
|
||||
case TOK_ASMDIR_option:
|
||||
next();
|
||||
switch(tok){
|
||||
case TOK_ASM_rvc: /* Will be deprecated soon in favor of arch */
|
||||
case TOK_ASM_norvc: /* Will be deprecated soon in favor of arch */
|
||||
case TOK_ASM_pic:
|
||||
case TOK_ASM_nopic:
|
||||
case TOK_ASM_relax:
|
||||
case TOK_ASM_norelax:
|
||||
case TOK_ASM_push:
|
||||
case TOK_ASM_pop:
|
||||
/* TODO: unimplemented */
|
||||
next();
|
||||
break;
|
||||
case TOK_ASM_arch:
|
||||
/* TODO: unimplemented, requires extra parsing */
|
||||
tcc_error("unimp .option '.%s'", get_tok_str(tok, NULL));
|
||||
break;
|
||||
default:
|
||||
tcc_error("unknown .option '.%s'", get_tok_str(tok, NULL));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
/* TODO: Implement symvar support. FreeBSD >= 14 needs this */
|
||||
case TOK_ASMDIR_symver:
|
||||
next();
|
||||
|
@ -1071,9 +1029,7 @@ static void tcc_assemble_inline(TCCState *s1, const char *str, int len, int glob
|
|||
{
|
||||
const int *saved_macro_ptr = macro_ptr;
|
||||
int dotid = set_idnum('.', IS_ID);
|
||||
#ifndef TCC_TARGET_RISCV64
|
||||
int dolid = set_idnum('$', 0);
|
||||
#endif
|
||||
|
||||
tcc_open_bf(s1, ":asm:", len);
|
||||
memcpy(file->buffer, str, len);
|
||||
|
@ -1081,9 +1037,7 @@ static void tcc_assemble_inline(TCCState *s1, const char *str, int len, int glob
|
|||
tcc_assemble_internal(s1, 0, global);
|
||||
tcc_close();
|
||||
|
||||
#ifndef TCC_TARGET_RISCV64
|
||||
set_idnum('$', dolid);
|
||||
#endif
|
||||
set_idnum('.', dotid);
|
||||
macro_ptr = saved_macro_ptr;
|
||||
}
|
||||
|
@ -1147,9 +1101,6 @@ static void subst_asm_operands(ASMOperand *operands, int nb_operands,
|
|||
if (*str == 'c' || *str == 'n' ||
|
||||
*str == 'b' || *str == 'w' || *str == 'h' || *str == 'k' ||
|
||||
*str == 'q' || *str == 'l' ||
|
||||
#ifdef TCC_TARGET_RISCV64
|
||||
*str == 'z' ||
|
||||
#endif
|
||||
/* P in GCC would add "@PLT" to symbol refs in PIC mode,
|
||||
and make literal operands not be decorated with '$'. */
|
||||
*str == 'P')
|
||||
|
|
2
tccdbg.c
2
tccdbg.c
|
@ -1097,7 +1097,7 @@ ST_FUNC void tcc_debug_start(TCCState *s1)
|
|||
}
|
||||
|
||||
dwarf_data1(dwarf_info_section, DWARF_ABBREV_COMPILE_UNIT);
|
||||
dwarf_strp(dwarf_info_section, "tcc " TCC_VERSION);
|
||||
dwarf_strp(dwarf_info_section, "tcc " PACKAGE_VERSION);
|
||||
dwarf_data1(dwarf_info_section, s1->cversion == 201112 ? DW_LANG_C11 : DW_LANG_C99);
|
||||
dwarf_line_strp(dwarf_info_section, filename);
|
||||
dwarf_line_strp(dwarf_info_section, buf);
|
||||
|
|
11
tccelf.c
11
tccelf.c
|
@ -3169,11 +3169,6 @@ invalid:
|
|||
|| 0 == strncmp(sh_name, ".stab", 5)) {
|
||||
if (!s1->do_debug || seencompressed)
|
||||
continue;
|
||||
#if !(TARGETOS_OpenBSD || TARGETOS_FreeBSD || TARGETOS_NetBSD)
|
||||
} else if (0 == strncmp(sh_name, ".eh_frame", 9)) {
|
||||
if (NULL == eh_frame_section)
|
||||
continue;
|
||||
#endif
|
||||
} else
|
||||
if (sh->sh_type != SHT_PROGBITS &&
|
||||
sh->sh_type != SHT_NOTE &&
|
||||
|
@ -3181,12 +3176,6 @@ invalid:
|
|||
sh->sh_type != SHT_PREINIT_ARRAY &&
|
||||
sh->sh_type != SHT_INIT_ARRAY &&
|
||||
sh->sh_type != SHT_FINI_ARRAY
|
||||
#ifdef TCC_ARM_EABI
|
||||
&& sh->sh_type != SHT_ARM_EXIDX
|
||||
#endif
|
||||
#if TARGETOS_OpenBSD || TARGETOS_FreeBSD || TARGETOS_NetBSD
|
||||
&& sh->sh_type != SHT_X86_64_UNWIND
|
||||
#endif
|
||||
)
|
||||
continue;
|
||||
|
||||
|
|
28
tccpp.c
28
tccpp.c
|
@ -3553,32 +3553,10 @@ ST_INLN void unget_tok(int last_tok)
|
|||
/* init preprocessor */
|
||||
|
||||
static const char * const target_os_defs =
|
||||
#ifdef TCC_TARGET_PE
|
||||
"_WIN32\0"
|
||||
# if PTR_SIZE == 8
|
||||
"_WIN64\0"
|
||||
# endif
|
||||
#else
|
||||
# if defined TCC_TARGET_MACHO
|
||||
"__APPLE__\0"
|
||||
# elif TARGETOS_FreeBSD
|
||||
"__FreeBSD__ 12\0"
|
||||
# elif TARGETOS_FreeBSD_kernel
|
||||
"__FreeBSD_kernel__\0"
|
||||
# elif TARGETOS_NetBSD
|
||||
"__NetBSD__\0"
|
||||
# elif TARGETOS_OpenBSD
|
||||
"__OpenBSD__\0"
|
||||
# else
|
||||
"__linux__\0"
|
||||
"__linux\0"
|
||||
# if TARGETOS_ANDROID
|
||||
"__ANDROID__\0"
|
||||
# endif
|
||||
# endif
|
||||
"__stupidos__\0"
|
||||
"__stupidos\0"
|
||||
"__unix__\0"
|
||||
"__unix\0"
|
||||
#endif
|
||||
;
|
||||
|
||||
static void putdef(CString *cs, const char *p)
|
||||
|
@ -3594,7 +3572,7 @@ static void putdefs(CString *cs, const char *p)
|
|||
|
||||
static void tcc_predefs(TCCState *s1, CString *cs, int is_asm)
|
||||
{
|
||||
cstr_printf(cs, "#define __TINYC__ 9%.2s\n", *& TCC_VERSION + 4);
|
||||
cstr_printf(cs, "#define __TINYC__ 9%.2s\n", *& PACKAGE_VERSION + 4);
|
||||
putdefs(cs, target_machine_defs);
|
||||
putdefs(cs, target_os_defs);
|
||||
|
||||
|
|
126
tcctools.c
126
tcctools.c
|
@ -336,132 +336,6 @@ the_end:
|
|||
return ret;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------- */
|
||||
/*
|
||||
* tiny_impdef creates an export definition file (.def) from a dll
|
||||
* on MS-Windows. Usage: tiny_impdef library.dll [-o outputfile]"
|
||||
*
|
||||
* Copyright (c) 2005,2007 grischka
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifdef TCC_TARGET_PE
|
||||
|
||||
ST_FUNC int tcc_tool_impdef(TCCState *s1, int argc, char **argv)
|
||||
{
|
||||
int ret, v, i;
|
||||
char infile[260];
|
||||
char outfile[260];
|
||||
|
||||
const char *file;
|
||||
char *p, *q;
|
||||
FILE *fp, *op;
|
||||
|
||||
#ifdef _WIN32
|
||||
char path[260];
|
||||
#endif
|
||||
|
||||
infile[0] = outfile[0] = 0;
|
||||
fp = op = NULL;
|
||||
ret = 1;
|
||||
p = NULL;
|
||||
v = 0;
|
||||
|
||||
for (i = 1; i < argc; ++i) {
|
||||
const char *a = argv[i];
|
||||
if ('-' == a[0]) {
|
||||
if (0 == strcmp(a, "-v")) {
|
||||
v = 1;
|
||||
} else if (0 == strcmp(a, "-o")) {
|
||||
if (++i == argc)
|
||||
goto usage;
|
||||
strcpy(outfile, argv[i]);
|
||||
} else
|
||||
goto usage;
|
||||
} else if (0 == infile[0])
|
||||
strcpy(infile, a);
|
||||
else
|
||||
goto usage;
|
||||
}
|
||||
|
||||
if (0 == infile[0]) {
|
||||
usage:
|
||||
fprintf(stderr,
|
||||
"usage: tcc -impdef library.dll [-v] [-o outputfile]\n"
|
||||
"create export definition file (.def) from dll\n"
|
||||
);
|
||||
goto the_end;
|
||||
}
|
||||
|
||||
if (0 == outfile[0]) {
|
||||
strcpy(outfile, tcc_basename(infile));
|
||||
q = strrchr(outfile, '.');
|
||||
if (NULL == q)
|
||||
q = strchr(outfile, 0);
|
||||
strcpy(q, ".def");
|
||||
}
|
||||
|
||||
file = infile;
|
||||
#ifdef _WIN32
|
||||
if (SearchPath(NULL, file, ".dll", sizeof path, path, NULL))
|
||||
file = path;
|
||||
#endif
|
||||
ret = tcc_get_dllexports(file, &p);
|
||||
if (ret || !p) {
|
||||
fprintf(stderr, "tcc: impdef: %s '%s'\n",
|
||||
ret == -1 ? "can't find file" :
|
||||
ret == 1 ? "can't read symbols" :
|
||||
ret == 0 ? "no symbols found in" :
|
||||
"unknown file type", file);
|
||||
ret = 1;
|
||||
goto the_end;
|
||||
}
|
||||
|
||||
if (v)
|
||||
printf("-> %s\n", file);
|
||||
|
||||
op = fopen(outfile, "wb");
|
||||
if (NULL == op) {
|
||||
fprintf(stderr, "tcc: impdef: could not create output file: %s\n", outfile);
|
||||
goto the_end;
|
||||
}
|
||||
|
||||
fprintf(op, "LIBRARY %s\n\nEXPORTS\n", tcc_basename(file));
|
||||
for (q = p, i = 0; *q; ++i) {
|
||||
fprintf(op, "%s\n", q);
|
||||
q += strlen(q) + 1;
|
||||
}
|
||||
|
||||
if (v)
|
||||
printf("<- %s (%d symbol%s)\n", outfile, i, &"s"[i<2]);
|
||||
|
||||
ret = 0;
|
||||
|
||||
the_end:
|
||||
if (p)
|
||||
tcc_free(p);
|
||||
if (fp)
|
||||
fclose(fp);
|
||||
if (op)
|
||||
fclose(op);
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif /* TCC_TARGET_PE */
|
||||
|
||||
/* -------------------------------------------------------------- */
|
||||
/*
|
||||
* TCC - Tiny C Compiler
|
||||
|
|
|
@ -1,210 +0,0 @@
|
|||
@rem ------------------------------------------------------
|
||||
@rem batch file to build tcc using mingw, msvc or tcc itself
|
||||
@rem ------------------------------------------------------
|
||||
|
||||
@echo off
|
||||
setlocal
|
||||
if (%1)==(-clean) goto :cleanup
|
||||
set CC=gcc
|
||||
set /p VERSION= < ..\VERSION
|
||||
set TCCDIR=
|
||||
set BINDIR=
|
||||
set DOC=no
|
||||
set XCC=no
|
||||
goto :a0
|
||||
:a2
|
||||
shift
|
||||
:a3
|
||||
shift
|
||||
:a0
|
||||
if not (%1)==(-c) goto :a1
|
||||
set CC=%~2
|
||||
if (%2)==(cl) set CC=@call :cl
|
||||
goto :a2
|
||||
:a1
|
||||
if (%1)==(-t) set T=%2&& goto :a2
|
||||
if (%1)==(-v) set VERSION=%~2&& goto :a2
|
||||
if (%1)==(-i) set TCCDIR=%2&& goto :a2
|
||||
if (%1)==(-b) set BINDIR=%2&& goto :a2
|
||||
if (%1)==(-d) set DOC=yes&& goto :a3
|
||||
if (%1)==(-x) set XCC=yes&& goto :a3
|
||||
if (%1)==() goto :p1
|
||||
:usage
|
||||
echo usage: build-tcc.bat [ options ... ]
|
||||
echo options:
|
||||
echo -c prog use prog (gcc/tcc/cl) to compile tcc
|
||||
echo -c "prog options" use prog with options to compile tcc
|
||||
echo -t 32/64 force 32/64 bit default target
|
||||
echo -v "version" set tcc version
|
||||
echo -i tccdir install tcc into tccdir
|
||||
echo -b bindir but install tcc.exe and libtcc.dll into bindir
|
||||
echo -d create tcc-doc.html too (needs makeinfo)
|
||||
echo -x build the cross compiler too
|
||||
echo -clean delete all previously produced files and directories
|
||||
exit /B 1
|
||||
|
||||
@rem ------------------------------------------------------
|
||||
@rem sub-routines
|
||||
|
||||
:cleanup
|
||||
set LOG=echo
|
||||
%LOG% removing files:
|
||||
for %%f in (*tcc.exe libtcc.dll lib\*.a) do call :del_file %%f
|
||||
for %%f in (..\config.h ..\config.texi) do call :del_file %%f
|
||||
for %%f in (include\*.h) do @if exist ..\%%f call :del_file %%f
|
||||
for %%f in (include\tcclib.h examples\libtcc_test.c) do call :del_file %%f
|
||||
for %%f in (lib\*.o *.o *.obj *.def *.pdb *.lib *.exp *.ilk) do call :del_file %%f
|
||||
%LOG% removing directories:
|
||||
for %%f in (doc libtcc) do call :del_dir %%f
|
||||
%LOG% done.
|
||||
exit /B 0
|
||||
:del_file
|
||||
if exist %1 del %1 && %LOG% %1
|
||||
exit /B 0
|
||||
:del_dir
|
||||
if exist %1 rmdir /Q/S %1 && %LOG% %1
|
||||
exit /B 0
|
||||
|
||||
:cl
|
||||
@echo off
|
||||
set CMD=cl
|
||||
:c0
|
||||
set ARG=%1
|
||||
set ARG=%ARG:.dll=.lib%
|
||||
if (%1)==(-shared) set ARG=-LD
|
||||
if (%1)==(-o) shift && set ARG=-Fe%2
|
||||
set CMD=%CMD% %ARG%
|
||||
shift
|
||||
if not (%1)==() goto :c0
|
||||
echo on
|
||||
%CMD% -O2 -W2 -Zi -MT -GS- -nologo %DEF_GITHASH% -link -opt:ref,icf
|
||||
@exit /B %ERRORLEVEL%
|
||||
|
||||
@rem ------------------------------------------------------
|
||||
@rem main program
|
||||
|
||||
:p1
|
||||
if not %T%_==_ goto :p2
|
||||
set T=32
|
||||
if %PROCESSOR_ARCHITECTURE%_==AMD64_ set T=64
|
||||
if %PROCESSOR_ARCHITEW6432%_==AMD64_ set T=64
|
||||
:p2
|
||||
if "%CC:~-3%"=="gcc" set CC=%CC% -O2 -s -static
|
||||
if (%BINDIR%)==() set BINDIR=%TCCDIR%
|
||||
|
||||
set D32=-DTCC_TARGET_PE -DTCC_TARGET_I386
|
||||
set D64=-DTCC_TARGET_PE -DTCC_TARGET_X86_64
|
||||
set P32=i386-win32
|
||||
set P64=x86_64-win32
|
||||
|
||||
if %T%==64 goto :t64
|
||||
set D=%D32%
|
||||
set P=%P32%
|
||||
set DX=%D64%
|
||||
set PX=%P64%
|
||||
set TX=64
|
||||
goto :p3
|
||||
|
||||
:t64
|
||||
set D=%D64%
|
||||
set P=%P64%
|
||||
set DX=%D32%
|
||||
set PX=%P32%
|
||||
set TX=32
|
||||
goto :p3
|
||||
|
||||
:p3
|
||||
git.exe --version 2>nul
|
||||
if not %ERRORLEVEL%==0 goto :git_done
|
||||
for /f %%b in ('git.exe rev-parse --abbrev-ref HEAD') do set GITHASH=%%b
|
||||
for /f %%b in ('git.exe log -1 "--pretty=format:%%cs_%GITHASH%@%%h"') do set GITHASH=%%b
|
||||
git.exe diff --quiet
|
||||
if %ERRORLEVEL%==1 set GITHASH=%GITHASH%*
|
||||
:git_done
|
||||
@echo on
|
||||
|
||||
:config.h
|
||||
echo>..\config.h #define TCC_VERSION "%VERSION%"
|
||||
if not (%GITHASH%)==() echo>> ..\config.h #define TCC_GITHASH "%GITHASH%"
|
||||
@if not (%BINDIR%)==(%TCCDIR%) echo>> ..\config.h #define CONFIG_TCCDIR "%TCCDIR:\=/%"
|
||||
if %TX%==64 echo>> ..\config.h #ifdef TCC_TARGET_X86_64
|
||||
if %TX%==32 echo>> ..\config.h #ifdef TCC_TARGET_I386
|
||||
echo>> ..\config.h #define CONFIG_TCC_CROSSPREFIX "%PX%-"
|
||||
echo>> ..\config.h #endif
|
||||
|
||||
for %%f in (*tcc.exe *tcc.dll) do @del %%f
|
||||
|
||||
@if _%TCC_C%_==__ goto compiler_2parts
|
||||
@rem if TCC_C was defined then build only tcc.exe
|
||||
%CC% -o tcc.exe %TCC_C% %D%
|
||||
@if errorlevel 1 goto :the_end
|
||||
@goto :compiler_done
|
||||
|
||||
:compiler_2parts
|
||||
@if _%LIBTCC_C%_==__ set LIBTCC_C=..\libtcc.c
|
||||
%CC% -o libtcc.dll -shared %LIBTCC_C% %D% -DLIBTCC_AS_DLL
|
||||
@if errorlevel 1 goto :the_end
|
||||
%CC% -o tcc.exe ..\tcc.c libtcc.dll %D% -DONE_SOURCE"=0"
|
||||
@if errorlevel 1 goto :the_end
|
||||
if not _%XCC%_==_yes_ goto :compiler_done
|
||||
%CC% -o %PX%-tcc.exe ..\tcc.c %DX%
|
||||
@if errorlevel 1 goto :the_end
|
||||
:compiler_done
|
||||
@if (%EXES_ONLY%)==(yes) goto :files_done
|
||||
|
||||
if not exist libtcc mkdir libtcc
|
||||
if not exist doc mkdir doc
|
||||
copy>nul ..\include\*.h include
|
||||
copy>nul ..\tcclib.h include
|
||||
copy>nul ..\libtcc.h libtcc
|
||||
copy>nul ..\tests\libtcc_test.c examples
|
||||
copy>nul tcc-win32.txt doc
|
||||
|
||||
if exist libtcc.dll .\tcc -impdef libtcc.dll -o libtcc\libtcc.def
|
||||
@if errorlevel 1 goto :the_end
|
||||
|
||||
:lib
|
||||
call :make_lib %T% || goto :the_end
|
||||
@if exist %PX%-tcc.exe call :make_lib %TX% %PX%- || goto :the_end
|
||||
|
||||
:tcc-doc.html
|
||||
@if not (%DOC%)==(yes) goto :doc-done
|
||||
echo>..\config.texi @set VERSION %VERSION%
|
||||
cmd /c makeinfo --html --no-split ../tcc-doc.texi -o doc/tcc-doc.html
|
||||
:doc-done
|
||||
|
||||
:files_done
|
||||
for %%f in (*.o *.def) do @del %%f
|
||||
|
||||
:copy-install
|
||||
@if (%TCCDIR%)==() goto :the_end
|
||||
if not exist %BINDIR% mkdir %BINDIR%
|
||||
for %%f in (*tcc.exe *tcc.dll) do @copy>nul %%f %BINDIR%\%%f
|
||||
if not exist %TCCDIR% mkdir %TCCDIR%
|
||||
@if not exist %TCCDIR%\lib mkdir %TCCDIR%\lib
|
||||
for %%f in (lib\*.a lib\*.o lib\*.def) do @copy>nul %%f %TCCDIR%\%%f
|
||||
for %%f in (include examples libtcc doc) do @xcopy>nul /s/i/q/y %%f %TCCDIR%\%%f
|
||||
|
||||
:the_end
|
||||
exit /B %ERRORLEVEL%
|
||||
|
||||
:make_lib
|
||||
.\tcc -B. -m%1 -c ../lib/libtcc1.c
|
||||
.\tcc -B. -m%1 -c lib/crt1.c
|
||||
.\tcc -B. -m%1 -c lib/crt1w.c
|
||||
.\tcc -B. -m%1 -c lib/wincrt1.c
|
||||
.\tcc -B. -m%1 -c lib/wincrt1w.c
|
||||
.\tcc -B. -m%1 -c lib/dllcrt1.c
|
||||
.\tcc -B. -m%1 -c lib/dllmain.c
|
||||
.\tcc -B. -m%1 -c lib/chkstk.S
|
||||
.\tcc -B. -m%1 -c ../lib/alloca.S
|
||||
.\tcc -B. -m%1 -c ../lib/alloca-bt.S
|
||||
.\tcc -B. -m%1 -c ../lib/stdatomic.c
|
||||
.\tcc -B. -m%1 -c ../lib/builtin.c
|
||||
.\tcc -B. -m%1 -ar lib/%2libtcc1.a libtcc1.o crt1.o crt1w.o wincrt1.o wincrt1w.o dllcrt1.o dllmain.o chkstk.o alloca.o alloca-bt.o stdatomic.o builtin.o
|
||||
.\tcc -B. -m%1 -c ../lib/bcheck.c -o lib/%2bcheck.o -bt -I..
|
||||
.\tcc -B. -m%1 -c ../lib/bt-exe.c -o lib/%2bt-exe.o
|
||||
.\tcc -B. -m%1 -c ../lib/bt-log.c -o lib/%2bt-log.o
|
||||
.\tcc -B. -m%1 -c ../lib/bt-dll.c -o lib/%2bt-dll.o
|
||||
.\tcc -B. -m%1 -c ../lib/runmain.c -o lib/%2runmain.o
|
||||
exit /B %ERRORLEVEL%
|
|
@ -1,13 +0,0 @@
|
|||
//+---------------------------------------------------------------------------
|
||||
//
|
||||
// dll.c - Windows DLL example - dynamically linked part
|
||||
//
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
__declspec(dllexport) const char *hello_data = "(not set)";
|
||||
|
||||
__declspec(dllexport) void hello_func (void)
|
||||
{
|
||||
MessageBox (0, hello_data, "From DLL", MB_ICONINFORMATION);
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h> // atoi()
|
||||
|
||||
int fib(n)
|
||||
{
|
||||
if (n <= 2)
|
||||
return 1;
|
||||
else
|
||||
return fib(n-1) + fib(n-2);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int n;
|
||||
if (argc < 2) {
|
||||
printf("usage: fib n\n"
|
||||
"Compute nth Fibonacci number\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
n = atoi(argv[1]);
|
||||
printf("fib(%d) = %d\n", n, fib(n));
|
||||
return 0;
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
//+---------------------------------------------------------------------------
|
||||
//
|
||||
// HELLO_DLL.C - Windows DLL example - main application part
|
||||
//
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
void hello_func (void);
|
||||
__declspec(dllimport) extern const char *hello_data;
|
||||
|
||||
int WINAPI WinMain(
|
||||
HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPSTR lpCmdLine,
|
||||
int nCmdShow)
|
||||
{
|
||||
hello_data = "Hello World!";
|
||||
hello_func();
|
||||
return 0;
|
||||
}
|
|
@ -1,163 +0,0 @@
|
|||
//+---------------------------------------------------------------------------
|
||||
//
|
||||
// HELLO_WIN.C - Windows GUI 'Hello World!' Example
|
||||
//
|
||||
//+---------------------------------------------------------------------------
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#define APPNAME "HELLO_WIN"
|
||||
|
||||
char szAppName[] = APPNAME; // The name of this application
|
||||
char szTitle[] = APPNAME; // The title bar text
|
||||
const char *pWindowText;
|
||||
|
||||
void CenterWindow(HWND hWnd);
|
||||
|
||||
//+---------------------------------------------------------------------------
|
||||
//
|
||||
// Function: WndProc
|
||||
//
|
||||
// Synopsis: very unusual type of function - gets called by system to
|
||||
// process windows messages.
|
||||
//
|
||||
// Arguments: same as always.
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (message) {
|
||||
|
||||
// ----------------------- first and last
|
||||
case WM_CREATE:
|
||||
CenterWindow(hwnd);
|
||||
break;
|
||||
|
||||
case WM_DESTROY:
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
|
||||
// ----------------------- get out of it...
|
||||
case WM_RBUTTONUP:
|
||||
DestroyWindow(hwnd);
|
||||
break;
|
||||
|
||||
case WM_KEYDOWN:
|
||||
if (VK_ESCAPE == wParam)
|
||||
DestroyWindow(hwnd);
|
||||
break;
|
||||
|
||||
// ----------------------- display our minimal info
|
||||
case WM_PAINT:
|
||||
{
|
||||
PAINTSTRUCT ps;
|
||||
HDC hdc;
|
||||
RECT rc;
|
||||
hdc = BeginPaint(hwnd, &ps);
|
||||
|
||||
GetClientRect(hwnd, &rc);
|
||||
SetTextColor(hdc, RGB(240,240,96));
|
||||
SetBkMode(hdc, TRANSPARENT);
|
||||
DrawText(hdc, pWindowText, -1, &rc, DT_CENTER|DT_SINGLELINE|DT_VCENTER);
|
||||
|
||||
EndPaint(hwnd, &ps);
|
||||
break;
|
||||
}
|
||||
|
||||
// ----------------------- let windows do all other stuff
|
||||
default:
|
||||
return DefWindowProc(hwnd, message, wParam, lParam);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//+---------------------------------------------------------------------------
|
||||
//
|
||||
// Function: WinMain
|
||||
//
|
||||
// Synopsis: standard entrypoint for GUI Win32 apps
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
int APIENTRY WinMain(
|
||||
HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPSTR lpCmdLine,
|
||||
int nCmdShow
|
||||
)
|
||||
{
|
||||
MSG msg;
|
||||
WNDCLASS wc;
|
||||
HWND hwnd;
|
||||
|
||||
pWindowText = lpCmdLine[0] ? lpCmdLine : "Hello Windows!";
|
||||
|
||||
// Fill in window class structure with parameters that describe
|
||||
// the main window.
|
||||
|
||||
ZeroMemory(&wc, sizeof wc);
|
||||
wc.hInstance = hInstance;
|
||||
wc.lpszClassName = szAppName;
|
||||
wc.lpfnWndProc = (WNDPROC)WndProc;
|
||||
wc.style = CS_DBLCLKS|CS_VREDRAW|CS_HREDRAW;
|
||||
wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
|
||||
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
|
||||
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
|
||||
if (FALSE == RegisterClass(&wc))
|
||||
return 0;
|
||||
|
||||
// create the browser
|
||||
hwnd = CreateWindow(
|
||||
szAppName,
|
||||
szTitle,
|
||||
WS_OVERLAPPEDWINDOW|WS_VISIBLE,
|
||||
CW_USEDEFAULT,
|
||||
CW_USEDEFAULT,
|
||||
360,//CW_USEDEFAULT,
|
||||
240,//CW_USEDEFAULT,
|
||||
0,
|
||||
0,
|
||||
hInstance,
|
||||
0);
|
||||
|
||||
if (NULL == hwnd)
|
||||
return 0;
|
||||
|
||||
// Main message loop:
|
||||
while (GetMessage(&msg, NULL, 0, 0) > 0) {
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
return msg.wParam;
|
||||
}
|
||||
|
||||
//+---------------------------------------------------------------------------
|
||||
|
||||
//+---------------------------------------------------------------------------
|
||||
|
||||
void CenterWindow(HWND hwnd_self)
|
||||
{
|
||||
HWND hwnd_parent;
|
||||
RECT rw_self, rc_parent, rw_parent;
|
||||
int xpos, ypos;
|
||||
|
||||
hwnd_parent = GetParent(hwnd_self);
|
||||
if (NULL == hwnd_parent)
|
||||
hwnd_parent = GetDesktopWindow();
|
||||
|
||||
GetWindowRect(hwnd_parent, &rw_parent);
|
||||
GetClientRect(hwnd_parent, &rc_parent);
|
||||
GetWindowRect(hwnd_self, &rw_self);
|
||||
|
||||
xpos = rw_parent.left + (rc_parent.right + rw_self.left - rw_self.right) / 2;
|
||||
ypos = rw_parent.top + (rc_parent.bottom + rw_self.top - rw_self.bottom) / 2;
|
||||
|
||||
SetWindowPos(
|
||||
hwnd_self, NULL,
|
||||
xpos, ypos, 0, 0,
|
||||
SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE
|
||||
);
|
||||
}
|
||||
|
||||
//+---------------------------------------------------------------------------
|
|
@ -1,168 +0,0 @@
|
|||
/*
|
||||
* _mingw.h
|
||||
*
|
||||
* This file is for TinyCC and not part of the Mingw32 package.
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAIMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __MINGW_H
|
||||
#define __MINGW_H
|
||||
|
||||
/* some winapi files define these before including _mingw.h --> */
|
||||
#undef __cdecl
|
||||
#undef _X86_
|
||||
#undef WIN32
|
||||
/* <-- */
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#define __int8 char
|
||||
#define __int16 short
|
||||
#define __int32 int
|
||||
#define __int64 long long
|
||||
#define _HAVE_INT64
|
||||
|
||||
#define __cdecl
|
||||
#define __declspec(x) __attribute__((x))
|
||||
#define __unaligned __attribute__((packed))
|
||||
#define __fastcall __attribute__((fastcall))
|
||||
|
||||
#define __MSVCRT__ 1
|
||||
#undef _MSVCRT_
|
||||
#define __MINGW_IMPORT extern __declspec(dllimport)
|
||||
#define __MINGW_ATTRIB_NORETURN __declspec(noreturn)
|
||||
#define __MINGW_ATTRIB_CONST
|
||||
#define __MINGW_ATTRIB_DEPRECATED
|
||||
#define __MINGW_ATTRIB_MALLOC
|
||||
#define __MINGW_ATTRIB_PURE
|
||||
#define __MINGW_ATTRIB_NONNULL(arg)
|
||||
#define __MINGW_NOTHROW
|
||||
#define __GNUC_VA_LIST
|
||||
|
||||
#define _CRTIMP extern
|
||||
#define __CRT_INLINE static __inline__
|
||||
|
||||
#define _CRT_ALIGN(x) __attribute__((aligned(x)))
|
||||
#define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
|
||||
#define _CRT_PACKING 8
|
||||
#define __CRT_UNALIGNED
|
||||
#define _CONST_RETURN
|
||||
|
||||
#ifndef _TRUNCATE
|
||||
#define _TRUNCATE ((size_t)-1)
|
||||
#endif
|
||||
|
||||
#define __CRT_STRINGIZE(_Value) #_Value
|
||||
#define _CRT_STRINGIZE(_Value) __CRT_STRINGIZE(_Value)
|
||||
#define __CRT_WIDE(_String) L ## _String
|
||||
#define _CRT_WIDE(_String) __CRT_WIDE(_String)
|
||||
|
||||
#ifdef _WIN64
|
||||
#define __stdcall
|
||||
#define _AMD64_ 1
|
||||
#define __x86_64 1
|
||||
#define _M_X64 100 /* Visual Studio */
|
||||
#define _M_AMD64 100 /* Visual Studio */
|
||||
#define USE_MINGW_SETJMP_TWO_ARGS
|
||||
#define mingw_getsp tinyc_getbp
|
||||
#else
|
||||
#define __stdcall __attribute__((__stdcall__))
|
||||
#define _X86_ 1
|
||||
#define _M_IX86 300 /* Visual Studio */
|
||||
#ifndef __MINGW_USE_VC2005_COMPAT /* time became 64, but not timeval.tv_sec */
|
||||
# ifndef _USE_32BIT_TIME_T
|
||||
# define _USE_32BIT_TIME_T
|
||||
# endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* in stddef.h */
|
||||
#define _SIZE_T_DEFINED
|
||||
#define _SSIZE_T_DEFINED
|
||||
#define _PTRDIFF_T_DEFINED
|
||||
#define _WCHAR_T_DEFINED
|
||||
#define _UINTPTR_T_DEFINED
|
||||
#define _INTPTR_T_DEFINED
|
||||
#define _INTEGRAL_MAX_BITS 64
|
||||
|
||||
#ifndef _TIME32_T_DEFINED
|
||||
#define _TIME32_T_DEFINED
|
||||
typedef long __time32_t;
|
||||
#endif
|
||||
|
||||
#ifndef _TIME64_T_DEFINED
|
||||
#define _TIME64_T_DEFINED
|
||||
typedef long long __time64_t;
|
||||
#endif
|
||||
|
||||
#ifndef _TIME_T_DEFINED
|
||||
#define _TIME_T_DEFINED
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
typedef __time32_t time_t;
|
||||
#else
|
||||
typedef __time64_t time_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _WCTYPE_T_DEFINED
|
||||
#define _WCTYPE_T_DEFINED
|
||||
typedef wchar_t wctype_t;
|
||||
#endif
|
||||
|
||||
#ifndef _WINT_T
|
||||
#define _WINT_T
|
||||
typedef __WINT_TYPE__ wint_t;
|
||||
#endif
|
||||
|
||||
typedef int errno_t;
|
||||
#define _ERRCODE_DEFINED
|
||||
|
||||
typedef struct threadlocaleinfostruct *pthreadlocinfo;
|
||||
typedef struct threadmbcinfostruct *pthreadmbcinfo;
|
||||
typedef struct localeinfo_struct _locale_tstruct,*_locale_t;
|
||||
|
||||
/* for winapi */
|
||||
#define _ANONYMOUS_UNION
|
||||
#define _ANONYMOUS_STRUCT
|
||||
#define DECLSPEC_NORETURN __declspec(noreturn)
|
||||
#define DECLARE_STDCALL_P(type) __stdcall type
|
||||
#define NOSERVICE 1
|
||||
#define NOMCX 1
|
||||
#define NOIME 1
|
||||
#define __INTRIN_H_
|
||||
#ifndef DUMMYUNIONNAME
|
||||
# define DUMMYUNIONNAME
|
||||
# define DUMMYUNIONNAME1
|
||||
# define DUMMYUNIONNAME2
|
||||
# define DUMMYUNIONNAME3
|
||||
# define DUMMYUNIONNAME4
|
||||
# define DUMMYUNIONNAME5
|
||||
#endif
|
||||
#ifndef DUMMYSTRUCTNAME
|
||||
# define DUMMYSTRUCTNAME
|
||||
#endif
|
||||
#ifndef WINVER
|
||||
# define WINVER 0x0502
|
||||
#endif
|
||||
#ifndef _WIN32_WINNT
|
||||
# define _WIN32_WINNT 0x502
|
||||
#endif
|
||||
|
||||
#define __C89_NAMELESS
|
||||
#define __MINGW_EXTENSION
|
||||
#define WINAPI_FAMILY_PARTITION(X) 1
|
||||
#define MINGW_HAS_SECURE_API
|
||||
#define WIN32 1
|
||||
|
||||
#endif /* __MINGW_H */
|
|
@ -1,62 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef __ASSERT_H_
|
||||
#define __ASSERT_H_
|
||||
|
||||
#include <_mingw.h>
|
||||
#ifdef __cplusplus
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifdef NDEBUG
|
||||
#ifndef assert
|
||||
#define assert(_Expression) ((void)0)
|
||||
#endif
|
||||
#else
|
||||
|
||||
#ifndef _CRT_TERMINATE_DEFINED
|
||||
#define _CRT_TERMINATE_DEFINED
|
||||
void __cdecl __MINGW_NOTHROW exit(int _Code) __MINGW_ATTRIB_NORETURN;
|
||||
_CRTIMP void __cdecl __MINGW_NOTHROW _exit(int _Code) __MINGW_ATTRIB_NORETURN;
|
||||
#if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */
|
||||
/* C99 function name */
|
||||
void __cdecl _Exit(int) __MINGW_ATTRIB_NORETURN;
|
||||
__CRT_INLINE __MINGW_ATTRIB_NORETURN void __cdecl _Exit(int status)
|
||||
{ _exit(status); }
|
||||
#endif
|
||||
|
||||
#pragma push_macro("abort")
|
||||
#undef abort
|
||||
void __cdecl __declspec(noreturn) abort(void);
|
||||
#pragma pop_macro("abort")
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
extern void __cdecl _wassert(const wchar_t *_Message,const wchar_t *_File,unsigned _Line);
|
||||
extern void __cdecl _assert(const char *, const char *, unsigned);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef assert
|
||||
//#define assert(_Expression) (void)((!!(_Expression)) || (_wassert(_CRT_WIDE(#_Expression),_CRT_WIDE(__FILE__),__LINE__),0))
|
||||
#define assert(e) ((e) ? (void)0 : _assert(#e, __FILE__, __LINE__))
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#if (__STDC_VERSION__ >= 201112L) && !defined(static_assert)
|
||||
/* C11, section 7.2: The macro static_assert expands to _Static_assert. */
|
||||
#define static_assert(exp, str) _Static_assert(exp, str)
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -1,409 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_CONIO
|
||||
#define _INC_CONIO
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
_CRTIMP char *_cgets(char *_Buffer);
|
||||
_CRTIMP int __cdecl _cprintf(const char *_Format,...);
|
||||
_CRTIMP int __cdecl _cputs(const char *_Str);
|
||||
_CRTIMP int __cdecl _cscanf(const char *_Format,...);
|
||||
_CRTIMP int __cdecl _cscanf_l(const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _getch(void);
|
||||
_CRTIMP int __cdecl _getche(void);
|
||||
_CRTIMP int __cdecl _vcprintf(const char *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _cprintf_p(const char *_Format,...);
|
||||
_CRTIMP int __cdecl _vcprintf_p(const char *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _cprintf_l(const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vcprintf_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _cprintf_p_l(const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vcprintf_p_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _kbhit(void);
|
||||
|
||||
#if defined(_X86_) && !defined(__x86_64)
|
||||
int __cdecl _inp(unsigned short);
|
||||
unsigned short __cdecl _inpw(unsigned short);
|
||||
unsigned long __cdecl _inpd(unsigned short);
|
||||
int __cdecl _outp(unsigned short,int);
|
||||
unsigned short __cdecl _outpw(unsigned short,unsigned short);
|
||||
unsigned long __cdecl _outpd(unsigned short,unsigned long);
|
||||
#endif
|
||||
|
||||
_CRTIMP int __cdecl _putch(int _Ch);
|
||||
_CRTIMP int __cdecl _ungetch(int _Ch);
|
||||
_CRTIMP int __cdecl _getch_nolock(void);
|
||||
_CRTIMP int __cdecl _getche_nolock(void);
|
||||
_CRTIMP int __cdecl _putch_nolock(int _Ch);
|
||||
_CRTIMP int __cdecl _ungetch_nolock(int _Ch);
|
||||
|
||||
#ifndef _WCONIO_DEFINED
|
||||
#define _WCONIO_DEFINED
|
||||
|
||||
#ifndef WEOF
|
||||
#define WEOF (wint_t)(0xFFFF)
|
||||
#endif
|
||||
|
||||
_CRTIMP wchar_t *_cgetws(wchar_t *_Buffer);
|
||||
_CRTIMP wint_t __cdecl _getwch(void);
|
||||
_CRTIMP wint_t __cdecl _getwche(void);
|
||||
_CRTIMP wint_t __cdecl _putwch(wchar_t _WCh);
|
||||
_CRTIMP wint_t __cdecl _ungetwch(wint_t _WCh);
|
||||
_CRTIMP int __cdecl _cputws(const wchar_t *_String);
|
||||
_CRTIMP int __cdecl _cwprintf(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _cwscanf(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _cwscanf_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vcwprintf(const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _cwprintf_p(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _vcwprintf_p(const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _cwprintf_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vcwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _cwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vcwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP wint_t __cdecl _putwch_nolock(wchar_t _WCh);
|
||||
_CRTIMP wint_t __cdecl _getwch_nolock(void);
|
||||
_CRTIMP wint_t __cdecl _getwche_nolock(void);
|
||||
_CRTIMP wint_t __cdecl _ungetwch_nolock(wint_t _WCh);
|
||||
#endif
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
char *__cdecl cgets(char *_Buffer);
|
||||
int __cdecl cprintf(const char *_Format,...);
|
||||
int __cdecl cputs(const char *_Str);
|
||||
int __cdecl cscanf(const char *_Format,...);
|
||||
int __cdecl getch(void);
|
||||
int __cdecl getche(void);
|
||||
int __cdecl kbhit(void);
|
||||
int __cdecl putch(int _Ch);
|
||||
int __cdecl ungetch(int _Ch);
|
||||
|
||||
#if (defined(_X86_) && !defined(__x86_64))
|
||||
int __cdecl inp(unsigned short);
|
||||
unsigned short __cdecl inpw(unsigned short);
|
||||
int __cdecl outp(unsigned short,int);
|
||||
unsigned short __cdecl outpw(unsigned short,unsigned short);
|
||||
#endif
|
||||
|
||||
/* I/O intrin functions. */
|
||||
__CRT_INLINE unsigned char __inbyte(unsigned short Port)
|
||||
{
|
||||
unsigned char value;
|
||||
__asm__ __volatile__ ("inb %w1,%b0"
|
||||
: "=a" (value)
|
||||
: "Nd" (Port));
|
||||
return value;
|
||||
}
|
||||
__CRT_INLINE unsigned short __inword(unsigned short Port)
|
||||
{
|
||||
unsigned short value;
|
||||
__asm__ __volatile__ ("inw %w1,%w0"
|
||||
: "=a" (value)
|
||||
: "Nd" (Port));
|
||||
return value;
|
||||
}
|
||||
__CRT_INLINE unsigned long __indword(unsigned short Port)
|
||||
{
|
||||
unsigned long value;
|
||||
__asm__ __volatile__ ("inl %w1,%0"
|
||||
: "=a" (value)
|
||||
: "Nd" (Port));
|
||||
return value;
|
||||
}
|
||||
__CRT_INLINE void __outbyte(unsigned short Port,unsigned char Data)
|
||||
{
|
||||
__asm__ __volatile__ ("outb %b0,%w1"
|
||||
:
|
||||
: "a" (Data), "Nd" (Port));
|
||||
}
|
||||
__CRT_INLINE void __outword(unsigned short Port,unsigned short Data)
|
||||
{
|
||||
__asm__ __volatile__ ("outw %w0,%w1"
|
||||
:
|
||||
: "a" (Data), "Nd" (Port));
|
||||
}
|
||||
__CRT_INLINE void __outdword(unsigned short Port,unsigned long Data)
|
||||
{
|
||||
__asm__ __volatile__ ("outl %0,%w1"
|
||||
:
|
||||
: "a" (Data), "Nd" (Port));
|
||||
}
|
||||
__CRT_INLINE void __inbytestring(unsigned short Port,unsigned char *Buffer,unsigned long Count)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"cld ; rep ; insb "
|
||||
: "=D" (Buffer), "=c" (Count)
|
||||
: "d"(Port), "0"(Buffer), "1" (Count)
|
||||
);
|
||||
}
|
||||
__CRT_INLINE void __inwordstring(unsigned short Port,unsigned short *Buffer,unsigned long Count)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"cld ; rep ; insw "
|
||||
: "=D" (Buffer), "=c" (Count)
|
||||
: "d"(Port), "0"(Buffer), "1" (Count)
|
||||
);
|
||||
}
|
||||
__CRT_INLINE void __indwordstring(unsigned short Port,unsigned long *Buffer,unsigned long Count)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"cld ; rep ; insl "
|
||||
: "=D" (Buffer), "=c" (Count)
|
||||
: "d"(Port), "0"(Buffer), "1" (Count)
|
||||
);
|
||||
}
|
||||
|
||||
__CRT_INLINE void __outbytestring(unsigned short Port,unsigned char *Buffer,unsigned long Count)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"cld ; rep ; outsb "
|
||||
: "=S" (Buffer), "=c" (Count)
|
||||
: "d"(Port), "0"(Buffer), "1" (Count)
|
||||
);
|
||||
}
|
||||
__CRT_INLINE void __outwordstring(unsigned short Port,unsigned short *Buffer,unsigned long Count)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"cld ; rep ; outsw "
|
||||
: "=S" (Buffer), "=c" (Count)
|
||||
: "d"(Port), "0"(Buffer), "1" (Count)
|
||||
);
|
||||
}
|
||||
__CRT_INLINE void __outdwordstring(unsigned short Port,unsigned long *Buffer,unsigned long Count)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"cld ; rep ; outsl "
|
||||
: "=S" (Buffer), "=c" (Count)
|
||||
: "d"(Port), "0"(Buffer), "1" (Count)
|
||||
);
|
||||
}
|
||||
|
||||
__CRT_INLINE unsigned __int64 __readcr0(void)
|
||||
{
|
||||
unsigned __int64 value;
|
||||
__asm__ __volatile__ (
|
||||
"mov %%cr0, %[value]"
|
||||
: [value] "=q" (value));
|
||||
return value;
|
||||
}
|
||||
|
||||
/* Register sizes are different between 32/64 bit mode. So we have to do this for _WIN64 and _WIN32
|
||||
separately. */
|
||||
|
||||
#ifdef _WIN64
|
||||
__CRT_INLINE void __writecr0(unsigned __int64 Data)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"mov %[Data], %%cr0"
|
||||
:
|
||||
: [Data] "q" (Data)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
__CRT_INLINE unsigned __int64 __readcr2(void)
|
||||
{
|
||||
unsigned __int64 value;
|
||||
__asm__ __volatile__ (
|
||||
"mov %%cr2, %[value]"
|
||||
: [value] "=q" (value));
|
||||
return value;
|
||||
}
|
||||
|
||||
__CRT_INLINE void __writecr2(unsigned __int64 Data)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"mov %[Data], %%cr2"
|
||||
:
|
||||
: [Data] "q" (Data)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
__CRT_INLINE unsigned __int64 __readcr3(void)
|
||||
{
|
||||
unsigned __int64 value;
|
||||
__asm__ __volatile__ (
|
||||
"mov %%cr3, %[value]"
|
||||
: [value] "=q" (value));
|
||||
return value;
|
||||
}
|
||||
|
||||
__CRT_INLINE void __writecr3(unsigned __int64 Data)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"mov %[Data], %%cr3"
|
||||
:
|
||||
: [Data] "q" (Data)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
__CRT_INLINE unsigned __int64 __readcr4(void)
|
||||
{
|
||||
unsigned __int64 value;
|
||||
__asm__ __volatile__ (
|
||||
"mov %%cr4, %[value]"
|
||||
: [value] "=q" (value));
|
||||
return value;
|
||||
}
|
||||
|
||||
__CRT_INLINE void __writecr4(unsigned __int64 Data)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"mov %[Data], %%cr4"
|
||||
:
|
||||
: [Data] "q" (Data)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
__CRT_INLINE unsigned __int64 __readcr8(void)
|
||||
{
|
||||
unsigned __int64 value;
|
||||
__asm__ __volatile__ (
|
||||
"mov %%cr8, %[value]"
|
||||
: [value] "=q" (value));
|
||||
return value;
|
||||
}
|
||||
|
||||
__CRT_INLINE void __writecr8(unsigned __int64 Data)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"mov %[Data], %%cr8"
|
||||
:
|
||||
: [Data] "q" (Data)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
#elif defined(_WIN32)
|
||||
|
||||
__CRT_INLINE void __writecr0(unsigned Data)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"mov %[Data], %%cr0"
|
||||
:
|
||||
: [Data] "q" (Data)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
__CRT_INLINE unsigned long __readcr2(void)
|
||||
{
|
||||
unsigned long value;
|
||||
__asm__ __volatile__ (
|
||||
"mov %%cr2, %[value]"
|
||||
: [value] "=q" (value));
|
||||
return value;
|
||||
}
|
||||
|
||||
__CRT_INLINE void __writecr2(unsigned Data)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"mov %[Data], %%cr2"
|
||||
:
|
||||
: [Data] "q" (Data)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
__CRT_INLINE unsigned long __readcr3(void)
|
||||
{
|
||||
unsigned long value;
|
||||
__asm__ __volatile__ (
|
||||
"mov %%cr3, %[value]"
|
||||
: [value] "=q" (value));
|
||||
return value;
|
||||
}
|
||||
|
||||
__CRT_INLINE void __writecr3(unsigned Data)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"mov %[Data], %%cr3"
|
||||
:
|
||||
: [Data] "q" (Data)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
__CRT_INLINE unsigned long __readcr4(void)
|
||||
{
|
||||
unsigned long value;
|
||||
__asm__ __volatile__ (
|
||||
"mov %%cr4, %[value]"
|
||||
: [value] "=q" (value));
|
||||
return value;
|
||||
}
|
||||
|
||||
__CRT_INLINE void __writecr4(unsigned Data)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"mov %[Data], %%cr4"
|
||||
:
|
||||
: [Data] "q" (Data)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
__CRT_INLINE unsigned long __readcr8(void)
|
||||
{
|
||||
unsigned long value; __asm__ __volatile__ (
|
||||
"mov %%cr8, %[value]"
|
||||
: [value] "=q" (value));
|
||||
return value;
|
||||
}
|
||||
|
||||
__CRT_INLINE void __writecr8(unsigned Data)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"mov %[Data], %%cr8"
|
||||
:
|
||||
: [Data] "q" (Data)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
__CRT_INLINE unsigned __int64 __readmsr(unsigned long msr)
|
||||
{
|
||||
unsigned __int64 val1, val2;
|
||||
__asm__ __volatile__(
|
||||
"rdmsr"
|
||||
: "=a" (val1), "=d" (val2)
|
||||
: "c" (msr));
|
||||
return val1 | (val2 << 32);
|
||||
}
|
||||
|
||||
__CRT_INLINE void __writemsr (unsigned long msr, unsigned __int64 Value)
|
||||
{
|
||||
unsigned long val1 = Value, val2 = Value >> 32;
|
||||
__asm__ __volatile__ (
|
||||
"wrmsr"
|
||||
:
|
||||
: "c" (msr), "a" (val1), "d" (val2));
|
||||
}
|
||||
|
||||
__CRT_INLINE unsigned __int64 __rdtsc(void)
|
||||
{
|
||||
unsigned __int64 val1, val2;
|
||||
__asm__ __volatile__ (
|
||||
"rdtsc"
|
||||
: "=a" (val1), "=d" (val2));
|
||||
return val1 | (val2 << 32);
|
||||
}
|
||||
|
||||
__CRT_INLINE void __cpuid(int CPUInfo[4], int InfoType)
|
||||
{
|
||||
__asm__ __volatile__ (
|
||||
"cpuid"
|
||||
: "=a" (CPUInfo [0]), "=b" (CPUInfo [1]), "=c" (CPUInfo [2]), "=d" (CPUInfo [3])
|
||||
: "a" (InfoType));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include <sec_api/conio_s.h>
|
||||
|
||||
#endif
|
|
@ -1,281 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_CTYPE
|
||||
#define _INC_CTYPE
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef WEOF
|
||||
#define WEOF (wint_t)(0xFFFF)
|
||||
#endif
|
||||
|
||||
#ifndef _CRT_CTYPEDATA_DEFINED
|
||||
#define _CRT_CTYPEDATA_DEFINED
|
||||
#ifndef _CTYPE_DISABLE_MACROS
|
||||
|
||||
#ifndef __PCTYPE_FUNC
|
||||
#define __PCTYPE_FUNC __pctype_func()
|
||||
#ifdef _MSVCRT_
|
||||
#define __pctype_func() (_pctype)
|
||||
#else
|
||||
#define __pctype_func() (*_imp___pctype)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _pctype
|
||||
#ifdef _MSVCRT_
|
||||
extern unsigned short *_pctype;
|
||||
#else
|
||||
extern unsigned short **_imp___pctype;
|
||||
#define _pctype (*_imp___pctype)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _CRT_WCTYPEDATA_DEFINED
|
||||
#define _CRT_WCTYPEDATA_DEFINED
|
||||
#ifndef _CTYPE_DISABLE_MACROS
|
||||
#ifndef _wctype
|
||||
#ifdef _MSVCRT_
|
||||
extern unsigned short *_wctype;
|
||||
#else
|
||||
extern unsigned short **_imp___wctype;
|
||||
#define _wctype (*_imp___wctype)
|
||||
#endif
|
||||
#endif
|
||||
#ifdef _MSVCRT_
|
||||
#define __pwctype_func() (_pwctype)
|
||||
#ifndef _pwctype
|
||||
extern unsigned short *_pwctype;
|
||||
#endif
|
||||
#else
|
||||
#define __pwctype_func() (*_imp___pwctype)
|
||||
#ifndef _pwctype
|
||||
extern unsigned short **_imp___pwctype;
|
||||
#define _pwctype (*_imp___pwctype)
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* CRT stuff */
|
||||
#if 1
|
||||
extern const unsigned char __newclmap[];
|
||||
extern const unsigned char __newcumap[];
|
||||
extern pthreadlocinfo __ptlocinfo;
|
||||
extern pthreadmbcinfo __ptmbcinfo;
|
||||
extern int __globallocalestatus;
|
||||
extern int __locale_changed;
|
||||
extern struct threadlocaleinfostruct __initiallocinfo;
|
||||
extern _locale_tstruct __initiallocalestructinfo;
|
||||
pthreadlocinfo __cdecl __updatetlocinfo(void);
|
||||
pthreadmbcinfo __cdecl __updatetmbcinfo(void);
|
||||
#endif
|
||||
|
||||
#define _UPPER 0x1
|
||||
#define _LOWER 0x2
|
||||
#define _DIGIT 0x4
|
||||
#define _SPACE 0x8
|
||||
|
||||
#define _PUNCT 0x10
|
||||
#define _CONTROL 0x20
|
||||
#define _BLANK 0x40
|
||||
#define _HEX 0x80
|
||||
|
||||
#define _LEADBYTE 0x8000
|
||||
#define _ALPHA (0x0100|_UPPER|_LOWER)
|
||||
|
||||
#ifndef _CTYPE_DEFINED
|
||||
#define _CTYPE_DEFINED
|
||||
|
||||
_CRTIMP int __cdecl _isctype(int _C,int _Type);
|
||||
_CRTIMP int __cdecl _isctype_l(int _C,int _Type,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl isalpha(int _C);
|
||||
_CRTIMP int __cdecl _isalpha_l(int _C,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl isupper(int _C);
|
||||
_CRTIMP int __cdecl _isupper_l(int _C,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl islower(int _C);
|
||||
_CRTIMP int __cdecl _islower_l(int _C,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl isdigit(int _C);
|
||||
_CRTIMP int __cdecl _isdigit_l(int _C,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl isxdigit(int _C);
|
||||
_CRTIMP int __cdecl _isxdigit_l(int _C,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl isspace(int _C);
|
||||
_CRTIMP int __cdecl _isspace_l(int _C,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl ispunct(int _C);
|
||||
_CRTIMP int __cdecl _ispunct_l(int _C,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl isalnum(int _C);
|
||||
_CRTIMP int __cdecl _isalnum_l(int _C,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl isprint(int _C);
|
||||
_CRTIMP int __cdecl _isprint_l(int _C,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl isgraph(int _C);
|
||||
_CRTIMP int __cdecl _isgraph_l(int _C,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl iscntrl(int _C);
|
||||
_CRTIMP int __cdecl _iscntrl_l(int _C,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl toupper(int _C);
|
||||
_CRTIMP int __cdecl tolower(int _C);
|
||||
_CRTIMP int __cdecl _tolower(int _C);
|
||||
_CRTIMP int __cdecl _tolower_l(int _C,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _toupper(int _C);
|
||||
_CRTIMP int __cdecl _toupper_l(int _C,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl __isascii(int _C);
|
||||
_CRTIMP int __cdecl __toascii(int _C);
|
||||
_CRTIMP int __cdecl __iscsymf(int _C);
|
||||
_CRTIMP int __cdecl __iscsym(int _C);
|
||||
|
||||
#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || !defined (NO_OLDNAMES)
|
||||
int __cdecl isblank(int _C);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _WCTYPE_DEFINED
|
||||
#define _WCTYPE_DEFINED
|
||||
|
||||
int __cdecl iswalpha(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswalpha_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswupper(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswupper_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswlower(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswlower_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswdigit(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswdigit_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswxdigit(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswxdigit_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswspace(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswspace_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswpunct(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswpunct_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswalnum(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswalnum_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswprint(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswprint_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswgraph(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswgraph_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswcntrl(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswcntrl_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswascii(wint_t _C);
|
||||
int __cdecl isleadbyte(int _C);
|
||||
_CRTIMP int __cdecl _isleadbyte_l(int _C,_locale_t _Locale);
|
||||
wint_t __cdecl towupper(wint_t _C);
|
||||
_CRTIMP wint_t __cdecl _towupper_l(wint_t _C,_locale_t _Locale);
|
||||
wint_t __cdecl towlower(wint_t _C);
|
||||
_CRTIMP wint_t __cdecl _towlower_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswctype(wint_t _C,wctype_t _Type);
|
||||
_CRTIMP int __cdecl _iswctype_l(wint_t _C,wctype_t _Type,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl __iswcsymf(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswcsymf_l(wint_t _C,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl __iswcsym(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswcsym_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl is_wctype(wint_t _C,wctype_t _Type);
|
||||
|
||||
#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || !defined (NO_OLDNAMES)
|
||||
int __cdecl iswblank(wint_t _C);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _CTYPE_DISABLE_MACROS
|
||||
|
||||
#ifndef MB_CUR_MAX
|
||||
#define MB_CUR_MAX ___mb_cur_max_func()
|
||||
#ifndef __mb_cur_max
|
||||
#ifdef _MSVCRT_
|
||||
extern int __mb_cur_max;
|
||||
#else
|
||||
#define __mb_cur_max (*_imp____mb_cur_max)
|
||||
extern int *_imp____mb_cur_max;
|
||||
#endif
|
||||
#endif
|
||||
#ifdef _MSVCRT_
|
||||
#define ___mb_cur_max_func() (__mb_cur_max)
|
||||
#else
|
||||
#define ___mb_cur_max_func() (*_imp____mb_cur_max)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define __chvalidchk(a,b) (__PCTYPE_FUNC[(a)] & (b))
|
||||
#define _chvalidchk_l(_Char,_Flag,_Locale) (!_Locale ? __chvalidchk(_Char,_Flag) : ((_locale_t)_Locale)->locinfo->pctype[_Char] & (_Flag))
|
||||
#define _ischartype_l(_Char,_Flag,_Locale) (((_Locale)!=NULL && (((_locale_t)(_Locale))->locinfo->mb_cur_max) > 1) ? _isctype_l(_Char,(_Flag),_Locale) : _chvalidchk_l(_Char,_Flag,_Locale))
|
||||
#define _isalpha_l(_Char,_Locale) _ischartype_l(_Char,_ALPHA,_Locale)
|
||||
#define _isupper_l(_Char,_Locale) _ischartype_l(_Char,_UPPER,_Locale)
|
||||
#define _islower_l(_Char,_Locale) _ischartype_l(_Char,_LOWER,_Locale)
|
||||
#define _isdigit_l(_Char,_Locale) _ischartype_l(_Char,_DIGIT,_Locale)
|
||||
#define _isxdigit_l(_Char,_Locale) _ischartype_l(_Char,_HEX,_Locale)
|
||||
#define _isspace_l(_Char,_Locale) _ischartype_l(_Char,_SPACE,_Locale)
|
||||
#define _ispunct_l(_Char,_Locale) _ischartype_l(_Char,_PUNCT,_Locale)
|
||||
#define _isalnum_l(_Char,_Locale) _ischartype_l(_Char,_ALPHA|_DIGIT,_Locale)
|
||||
#define _isprint_l(_Char,_Locale) _ischartype_l(_Char,_BLANK|_PUNCT|_ALPHA|_DIGIT,_Locale)
|
||||
#define _isgraph_l(_Char,_Locale) _ischartype_l(_Char,_PUNCT|_ALPHA|_DIGIT,_Locale)
|
||||
#define _iscntrl_l(_Char,_Locale) _ischartype_l(_Char,_CONTROL,_Locale)
|
||||
#define _tolower(_Char) ((_Char)-'A'+'a')
|
||||
#define _toupper(_Char) ((_Char)-'a'+'A')
|
||||
#define __isascii(_Char) ((unsigned)(_Char) < 0x80)
|
||||
#define __toascii(_Char) ((_Char) & 0x7f)
|
||||
|
||||
#ifndef _WCTYPE_INLINE_DEFINED
|
||||
#define _WCTYPE_INLINE_DEFINED
|
||||
|
||||
#undef _CRT_WCTYPE_NOINLINE
|
||||
#ifndef __cplusplus
|
||||
#define iswalpha(_c) (iswctype(_c,_ALPHA))
|
||||
#define iswupper(_c) (iswctype(_c,_UPPER))
|
||||
#define iswlower(_c) (iswctype(_c,_LOWER))
|
||||
#define iswdigit(_c) (iswctype(_c,_DIGIT))
|
||||
#define iswxdigit(_c) (iswctype(_c,_HEX))
|
||||
#define iswspace(_c) (iswctype(_c,_SPACE))
|
||||
#define iswpunct(_c) (iswctype(_c,_PUNCT))
|
||||
#define iswalnum(_c) (iswctype(_c,_ALPHA|_DIGIT))
|
||||
#define iswprint(_c) (iswctype(_c,_BLANK|_PUNCT|_ALPHA|_DIGIT))
|
||||
#define iswgraph(_c) (iswctype(_c,_PUNCT|_ALPHA|_DIGIT))
|
||||
#define iswcntrl(_c) (iswctype(_c,_CONTROL))
|
||||
#define iswascii(_c) ((unsigned)(_c) < 0x80)
|
||||
#define _iswalpha_l(_c,_p) (_iswctype_l(_c,_ALPHA,_p))
|
||||
#define _iswupper_l(_c,_p) (_iswctype_l(_c,_UPPER,_p))
|
||||
#define _iswlower_l(_c,_p) (_iswctype_l(_c,_LOWER,_p))
|
||||
#define _iswdigit_l(_c,_p) (_iswctype_l(_c,_DIGIT,_p))
|
||||
#define _iswxdigit_l(_c,_p) (_iswctype_l(_c,_HEX,_p))
|
||||
#define _iswspace_l(_c,_p) (_iswctype_l(_c,_SPACE,_p))
|
||||
#define _iswpunct_l(_c,_p) (_iswctype_l(_c,_PUNCT,_p))
|
||||
#define _iswalnum_l(_c,_p) (_iswctype_l(_c,_ALPHA|_DIGIT,_p))
|
||||
#define _iswprint_l(_c,_p) (_iswctype_l(_c,_BLANK|_PUNCT|_ALPHA|_DIGIT,_p))
|
||||
#define _iswgraph_l(_c,_p) (_iswctype_l(_c,_PUNCT|_ALPHA|_DIGIT,_p))
|
||||
#define _iswcntrl_l(_c,_p) (_iswctype_l(_c,_CONTROL,_p))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define __iscsymf(_c) (isalpha(_c) || ((_c)=='_'))
|
||||
#define __iscsym(_c) (isalnum(_c) || ((_c)=='_'))
|
||||
#define __iswcsymf(_c) (iswalpha(_c) || ((_c)=='_'))
|
||||
#define __iswcsym(_c) (iswalnum(_c) || ((_c)=='_'))
|
||||
#define _iscsymf_l(_c,_p) (_isalpha_l(_c,_p) || ((_c)=='_'))
|
||||
#define _iscsym_l(_c,_p) (_isalnum_l(_c,_p) || ((_c)=='_'))
|
||||
#define _iswcsymf_l(_c,_p) (_iswalpha_l(_c,_p) || ((_c)=='_'))
|
||||
#define _iswcsym_l(_c,_p) (_iswalnum_l(_c,_p) || ((_c)=='_'))
|
||||
#endif
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
#ifndef _CTYPE_DEFINED
|
||||
int __cdecl isascii(int _C);
|
||||
int __cdecl toascii(int _C);
|
||||
int __cdecl iscsymf(int _C);
|
||||
int __cdecl iscsym(int _C);
|
||||
#else
|
||||
#define isascii __isascii
|
||||
#define toascii __toascii
|
||||
#define iscsymf __iscsymf
|
||||
#define iscsym __iscsym
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
|
@ -1,31 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
/*
|
||||
* dir.h
|
||||
*
|
||||
* This file OBSOLESCENT and only provided for backward compatibility.
|
||||
* Please use io.h instead.
|
||||
*
|
||||
* This file is part of the Mingw32 package.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
|
||||
* Mumit Khan <khan@xraylith.wisc.edu>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAIMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <io.h>
|
||||
|
|
@ -1,68 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_DIRECT
|
||||
#define _INC_DIRECT
|
||||
|
||||
#include <_mingw.h>
|
||||
#include <io.h>
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _DISKFREE_T_DEFINED
|
||||
#define _DISKFREE_T_DEFINED
|
||||
struct _diskfree_t {
|
||||
unsigned total_clusters;
|
||||
unsigned avail_clusters;
|
||||
unsigned sectors_per_cluster;
|
||||
unsigned bytes_per_sector;
|
||||
};
|
||||
#endif
|
||||
|
||||
_CRTIMP char *__cdecl _getcwd(char *_DstBuf,int _SizeInBytes);
|
||||
_CRTIMP char *__cdecl _getdcwd(int _Drive,char *_DstBuf,int _SizeInBytes);
|
||||
char *__cdecl _getdcwd_nolock(int _Drive,char *_DstBuf,int _SizeInBytes);
|
||||
_CRTIMP int __cdecl _chdir(const char *_Path);
|
||||
_CRTIMP int __cdecl _mkdir(const char *_Path);
|
||||
_CRTIMP int __cdecl _rmdir(const char *_Path);
|
||||
_CRTIMP int __cdecl _chdrive(int _Drive);
|
||||
_CRTIMP int __cdecl _getdrive(void);
|
||||
_CRTIMP unsigned long __cdecl _getdrives(void);
|
||||
|
||||
#ifndef _GETDISKFREE_DEFINED
|
||||
#define _GETDISKFREE_DEFINED
|
||||
_CRTIMP unsigned __cdecl _getdiskfree(unsigned _Drive,struct _diskfree_t *_DiskFree);
|
||||
#endif
|
||||
|
||||
#ifndef _WDIRECT_DEFINED
|
||||
#define _WDIRECT_DEFINED
|
||||
_CRTIMP wchar_t *__cdecl _wgetcwd(wchar_t *_DstBuf,int _SizeInWords);
|
||||
_CRTIMP wchar_t *__cdecl _wgetdcwd(int _Drive,wchar_t *_DstBuf,int _SizeInWords);
|
||||
wchar_t *__cdecl _wgetdcwd_nolock(int _Drive,wchar_t *_DstBuf,int _SizeInWords);
|
||||
_CRTIMP int __cdecl _wchdir(const wchar_t *_Path);
|
||||
_CRTIMP int __cdecl _wmkdir(const wchar_t *_Path);
|
||||
_CRTIMP int __cdecl _wrmdir(const wchar_t *_Path);
|
||||
#endif
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
|
||||
#define diskfree_t _diskfree_t
|
||||
|
||||
char *__cdecl getcwd(char *_DstBuf,int _SizeInBytes);
|
||||
int __cdecl chdir(const char *_Path);
|
||||
int __cdecl mkdir(const char *_Path);
|
||||
int __cdecl rmdir(const char *_Path);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#pragma pack(pop)
|
||||
#endif
|
|
@ -1,135 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
/* All the headers include this file. */
|
||||
#include <_mingw.h>
|
||||
|
||||
#ifndef __STRICT_ANSI__
|
||||
|
||||
#ifndef _DIRENT_H_
|
||||
#define _DIRENT_H_
|
||||
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#include <io.h>
|
||||
|
||||
#ifndef RC_INVOKED
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct dirent
|
||||
{
|
||||
long d_ino; /* Always zero. */
|
||||
unsigned short d_reclen; /* Always zero. */
|
||||
unsigned short d_namlen; /* Length of name in d_name. */
|
||||
char* d_name; /* File name. */
|
||||
/* NOTE: The name in the dirent structure points to the name in the
|
||||
* finddata_t structure in the DIR. */
|
||||
};
|
||||
|
||||
/*
|
||||
* This is an internal data structure. Good programmers will not use it
|
||||
* except as an argument to one of the functions below.
|
||||
* dd_stat field is now int (was short in older versions).
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
/* disk transfer area for this dir */
|
||||
struct _finddata_t dd_dta;
|
||||
|
||||
/* dirent struct to return from dir (NOTE: this makes this thread
|
||||
* safe as long as only one thread uses a particular DIR struct at
|
||||
* a time) */
|
||||
struct dirent dd_dir;
|
||||
|
||||
/* _findnext handle */
|
||||
long dd_handle;
|
||||
|
||||
/*
|
||||
* Status of search:
|
||||
* 0 = not started yet (next entry to read is first entry)
|
||||
* -1 = off the end
|
||||
* positive = 0 based index of next entry
|
||||
*/
|
||||
int dd_stat;
|
||||
|
||||
/* given path for dir with search pattern (struct is extended) */
|
||||
char dd_name[1];
|
||||
} DIR;
|
||||
|
||||
DIR* __cdecl opendir (const char*);
|
||||
struct dirent* __cdecl readdir (DIR*);
|
||||
int __cdecl closedir (DIR*);
|
||||
void __cdecl rewinddir (DIR*);
|
||||
long __cdecl telldir (DIR*);
|
||||
void __cdecl seekdir (DIR*, long);
|
||||
|
||||
|
||||
/* wide char versions */
|
||||
|
||||
struct _wdirent
|
||||
{
|
||||
long d_ino; /* Always zero. */
|
||||
unsigned short d_reclen; /* Always zero. */
|
||||
unsigned short d_namlen; /* Length of name in d_name. */
|
||||
wchar_t* d_name; /* File name. */
|
||||
/* NOTE: The name in the dirent structure points to the name in the * wfinddata_t structure in the _WDIR. */
|
||||
};
|
||||
|
||||
/*
|
||||
* This is an internal data structure. Good programmers will not use it
|
||||
* except as an argument to one of the functions below.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
/* disk transfer area for this dir */
|
||||
struct _wfinddata_t dd_dta;
|
||||
|
||||
/* dirent struct to return from dir (NOTE: this makes this thread
|
||||
* safe as long as only one thread uses a particular DIR struct at
|
||||
* a time) */
|
||||
struct _wdirent dd_dir;
|
||||
|
||||
/* _findnext handle */
|
||||
long dd_handle;
|
||||
|
||||
/*
|
||||
* Status of search:
|
||||
* 0 = not started yet (next entry to read is first entry)
|
||||
* -1 = off the end
|
||||
* positive = 0 based index of next entry
|
||||
*/
|
||||
int dd_stat;
|
||||
|
||||
/* given path for dir with search pattern (struct is extended) */
|
||||
wchar_t dd_name[1];
|
||||
} _WDIR;
|
||||
|
||||
|
||||
|
||||
_WDIR* __cdecl _wopendir (const wchar_t*);
|
||||
struct _wdirent* __cdecl _wreaddir (_WDIR*);
|
||||
int __cdecl _wclosedir (_WDIR*);
|
||||
void __cdecl _wrewinddir (_WDIR*);
|
||||
long __cdecl _wtelldir (_WDIR*);
|
||||
void __cdecl _wseekdir (_WDIR*, long);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* Not RC_INVOKED */
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#endif /* Not _DIRENT_H_ */
|
||||
|
||||
|
||||
#endif /* Not __STRICT_ANSI__ */
|
||||
|
|
@ -1,55 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_DOS
|
||||
#define _INC_DOS
|
||||
|
||||
#include <_mingw.h>
|
||||
#include <io.h>
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _DISKFREE_T_DEFINED
|
||||
#define _DISKFREE_T_DEFINED
|
||||
|
||||
struct _diskfree_t {
|
||||
unsigned total_clusters;
|
||||
unsigned avail_clusters;
|
||||
unsigned sectors_per_cluster;
|
||||
unsigned bytes_per_sector;
|
||||
};
|
||||
#endif
|
||||
|
||||
#define _A_NORMAL 0x00
|
||||
#define _A_RDONLY 0x01
|
||||
#define _A_HIDDEN 0x02
|
||||
#define _A_SYSTEM 0x04
|
||||
#define _A_SUBDIR 0x10
|
||||
#define _A_ARCH 0x20
|
||||
|
||||
#ifndef _GETDISKFREE_DEFINED
|
||||
#define _GETDISKFREE_DEFINED
|
||||
_CRTIMP unsigned __cdecl _getdiskfree(unsigned _Drive,struct _diskfree_t *_DiskFree);
|
||||
#endif
|
||||
|
||||
#if (defined(_X86_) && !defined(__x86_64))
|
||||
void __cdecl _disable(void);
|
||||
void __cdecl _enable(void);
|
||||
#endif
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
#define diskfree_t _diskfree_t
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#pragma pack(pop)
|
||||
#endif
|
|
@ -1,75 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_ERRNO
|
||||
#define _INC_ERRNO
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _CRT_ERRNO_DEFINED
|
||||
#define _CRT_ERRNO_DEFINED
|
||||
_CRTIMP int *__cdecl _errno(void);
|
||||
#define errno (*_errno())
|
||||
|
||||
errno_t __cdecl _set_errno(int _Value);
|
||||
errno_t __cdecl _get_errno(int *_Value);
|
||||
#endif
|
||||
|
||||
#define EPERM 1
|
||||
#define ENOENT 2
|
||||
#define ESRCH 3
|
||||
#define EINTR 4
|
||||
#define EIO 5
|
||||
#define ENXIO 6
|
||||
#define E2BIG 7
|
||||
#define ENOEXEC 8
|
||||
#define EBADF 9
|
||||
#define ECHILD 10
|
||||
#define EAGAIN 11
|
||||
#define ENOMEM 12
|
||||
#define EACCES 13
|
||||
#define EFAULT 14
|
||||
#define EBUSY 16
|
||||
#define EEXIST 17
|
||||
#define EXDEV 18
|
||||
#define ENODEV 19
|
||||
#define ENOTDIR 20
|
||||
#define EISDIR 21
|
||||
#define ENFILE 23
|
||||
#define EMFILE 24
|
||||
#define ENOTTY 25
|
||||
#define EFBIG 27
|
||||
#define ENOSPC 28
|
||||
#define ESPIPE 29
|
||||
#define EROFS 30
|
||||
#define EMLINK 31
|
||||
#define EPIPE 32
|
||||
#define EDOM 33
|
||||
#define EDEADLK 36
|
||||
#define ENAMETOOLONG 38
|
||||
#define ENOLCK 39
|
||||
#define ENOSYS 40
|
||||
#define ENOTEMPTY 41
|
||||
|
||||
#ifndef RC_INVOKED
|
||||
#if !defined(_SECURECRT_ERRCODE_VALUES_DEFINED)
|
||||
#define _SECURECRT_ERRCODE_VALUES_DEFINED
|
||||
#define EINVAL 22
|
||||
#define ERANGE 34
|
||||
#define EILSEQ 42
|
||||
#define STRUNCATE 80
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define EDEADLOCK EDEADLK
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
|
@ -1,123 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_EXCPT
|
||||
#define _INC_EXCPT
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct _EXCEPTION_POINTERS;
|
||||
|
||||
#ifndef EXCEPTION_DISPOSITION
|
||||
#define EXCEPTION_DISPOSITION int
|
||||
#endif
|
||||
#define ExceptionContinueExecution 0
|
||||
#define ExceptionContinueSearch 1
|
||||
#define ExceptionNestedException 2
|
||||
#define ExceptionCollidedUnwind 3
|
||||
|
||||
#if (defined(_X86_) && !defined(__x86_64))
|
||||
struct _EXCEPTION_RECORD;
|
||||
struct _CONTEXT;
|
||||
|
||||
EXCEPTION_DISPOSITION __cdecl _except_handler(struct _EXCEPTION_RECORD *_ExceptionRecord,void *_EstablisherFrame,struct _CONTEXT *_ContextRecord,void *_DispatcherContext);
|
||||
#elif defined(__ia64__)
|
||||
|
||||
typedef struct _EXCEPTION_POINTERS *Exception_info_ptr;
|
||||
struct _EXCEPTION_RECORD;
|
||||
struct _CONTEXT;
|
||||
struct _DISPATCHER_CONTEXT;
|
||||
|
||||
_CRTIMP EXCEPTION_DISPOSITION __cdecl __C_specific_handler (struct _EXCEPTION_RECORD *_ExceptionRecord,unsigned __int64 _MemoryStackFp,unsigned __int64 _BackingStoreFp,struct _CONTEXT *_ContextRecord,struct _DISPATCHER_CONTEXT *_DispatcherContext,unsigned __int64 _GlobalPointer);
|
||||
#elif defined(__x86_64)
|
||||
|
||||
struct _EXCEPTION_RECORD;
|
||||
struct _CONTEXT;
|
||||
#endif
|
||||
|
||||
#define GetExceptionCode _exception_code
|
||||
#define exception_code _exception_code
|
||||
#define GetExceptionInformation (struct _EXCEPTION_POINTERS *)_exception_info
|
||||
#define exception_info (struct _EXCEPTION_POINTERS *)_exception_info
|
||||
#define AbnormalTermination _abnormal_termination
|
||||
#define abnormal_termination _abnormal_termination
|
||||
|
||||
unsigned long __cdecl _exception_code(void);
|
||||
void *__cdecl _exception_info(void);
|
||||
int __cdecl _abnormal_termination(void);
|
||||
|
||||
#define EXCEPTION_EXECUTE_HANDLER 1
|
||||
#define EXCEPTION_CONTINUE_SEARCH 0
|
||||
#define EXCEPTION_CONTINUE_EXECUTION -1
|
||||
|
||||
/* CRT stuff */
|
||||
typedef void (__cdecl * _PHNDLR)(int);
|
||||
|
||||
struct _XCPT_ACTION {
|
||||
unsigned long XcptNum;
|
||||
int SigNum;
|
||||
_PHNDLR XcptAction;
|
||||
};
|
||||
|
||||
extern struct _XCPT_ACTION _XcptActTab[];
|
||||
extern int _XcptActTabCount;
|
||||
extern int _XcptActTabSize;
|
||||
extern int _First_FPE_Indx;
|
||||
extern int _Num_FPE;
|
||||
|
||||
int __cdecl __CppXcptFilter(unsigned long _ExceptionNum,struct _EXCEPTION_POINTERS * _ExceptionPtr);
|
||||
int __cdecl _XcptFilter(unsigned long _ExceptionNum,struct _EXCEPTION_POINTERS * _ExceptionPtr);
|
||||
|
||||
/*
|
||||
* The type of function that is expected as an exception handler to be
|
||||
* installed with _try1.
|
||||
*/
|
||||
typedef EXCEPTION_DISPOSITION (*PEXCEPTION_HANDLER)(struct _EXCEPTION_RECORD*, void*, struct _CONTEXT*, void*);
|
||||
|
||||
#ifndef HAVE_NO_SEH
|
||||
/*
|
||||
* This is not entirely necessary, but it is the structure installed by
|
||||
* the _try1 primitive below.
|
||||
*/
|
||||
typedef struct _EXCEPTION_REGISTRATION {
|
||||
struct _EXCEPTION_REGISTRATION *prev;
|
||||
EXCEPTION_DISPOSITION (*handler)(struct _EXCEPTION_RECORD*, void*, struct _CONTEXT*, void*);
|
||||
} EXCEPTION_REGISTRATION, *PEXCEPTION_REGISTRATION;
|
||||
|
||||
typedef EXCEPTION_REGISTRATION EXCEPTION_REGISTRATION_RECORD;
|
||||
typedef PEXCEPTION_REGISTRATION PEXCEPTION_REGISTRATION_RECORD;
|
||||
#endif
|
||||
|
||||
#if (defined(_X86_) && !defined(__x86_64))
|
||||
#define __try1(pHandler) \
|
||||
__asm__ ("pushl %0;pushl %%fs:0;movl %%esp,%%fs:0;" : : "g" (pHandler));
|
||||
|
||||
#define __except1 \
|
||||
__asm__ ("movl (%%esp),%%eax;movl %%eax,%%fs:0;addl $8,%%esp;" \
|
||||
: : : "%eax");
|
||||
#elif defined(__x86_64)
|
||||
#define __try1(pHandler) \
|
||||
__asm__ ("pushq %0;pushq %%gs:0;movq %%rsp,%%gs:0;" : : "g" (pHandler));
|
||||
|
||||
#define __except1 \
|
||||
__asm__ ("movq (%%rsp),%%rax;movq %%rax,%%gs:0;addq $16,%%rsp;" \
|
||||
: : : "%rax");
|
||||
#else
|
||||
#define __try1(pHandler)
|
||||
#define __except1
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#pragma pack(pop)
|
||||
#endif
|
|
@ -1,52 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#include <_mingw.h>
|
||||
|
||||
#include <io.h>
|
||||
|
||||
#ifndef _INC_FCNTL
|
||||
#define _INC_FCNTL
|
||||
|
||||
#define _O_RDONLY 0x0000
|
||||
#define _O_WRONLY 0x0001
|
||||
#define _O_RDWR 0x0002
|
||||
#define _O_APPEND 0x0008
|
||||
#define _O_CREAT 0x0100
|
||||
#define _O_TRUNC 0x0200
|
||||
#define _O_EXCL 0x0400
|
||||
#define _O_TEXT 0x4000
|
||||
#define _O_BINARY 0x8000
|
||||
#define _O_WTEXT 0x10000
|
||||
#define _O_U16TEXT 0x20000
|
||||
#define _O_U8TEXT 0x40000
|
||||
#define _O_ACCMODE (_O_RDONLY|_O_WRONLY|_O_RDWR)
|
||||
|
||||
#define _O_RAW _O_BINARY
|
||||
#define _O_NOINHERIT 0x0080
|
||||
#define _O_TEMPORARY 0x0040
|
||||
#define _O_SHORT_LIVED 0x1000
|
||||
|
||||
#define _O_SEQUENTIAL 0x0020
|
||||
#define _O_RANDOM 0x0010
|
||||
|
||||
#if !defined(NO_OLDNAMES) || defined(_POSIX)
|
||||
#define O_RDONLY _O_RDONLY
|
||||
#define O_WRONLY _O_WRONLY
|
||||
#define O_RDWR _O_RDWR
|
||||
#define O_APPEND _O_APPEND
|
||||
#define O_CREAT _O_CREAT
|
||||
#define O_TRUNC _O_TRUNC
|
||||
#define O_EXCL _O_EXCL
|
||||
#define O_TEXT _O_TEXT
|
||||
#define O_BINARY _O_BINARY
|
||||
#define O_RAW _O_BINARY
|
||||
#define O_TEMPORARY _O_TEMPORARY
|
||||
#define O_NOINHERIT _O_NOINHERIT
|
||||
#define O_SEQUENTIAL _O_SEQUENTIAL
|
||||
#define O_RANDOM _O_RANDOM
|
||||
#define O_ACCMODE _O_ACCMODE
|
||||
#endif
|
||||
#endif
|
|
@ -1,108 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _FENV_H_
|
||||
#define _FENV_H_
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
/* FPU status word exception flags */
|
||||
#define FE_INVALID 0x01
|
||||
#define FE_DENORMAL 0x02
|
||||
#define FE_DIVBYZERO 0x04
|
||||
#define FE_OVERFLOW 0x08
|
||||
#define FE_UNDERFLOW 0x10
|
||||
#define FE_INEXACT 0x20
|
||||
#define FE_ALL_EXCEPT (FE_INVALID | FE_DENORMAL | FE_DIVBYZERO \
|
||||
| FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)
|
||||
|
||||
/* FPU control word rounding flags */
|
||||
#define FE_TONEAREST 0x0000
|
||||
#define FE_DOWNWARD 0x0400
|
||||
#define FE_UPWARD 0x0800
|
||||
#define FE_TOWARDZERO 0x0c00
|
||||
|
||||
/* The MXCSR exception flags are the same as the
|
||||
FE flags. */
|
||||
#define __MXCSR_EXCEPT_FLAG_SHIFT 0
|
||||
|
||||
/* How much to shift FE status word exception flags
|
||||
to get MXCSR rounding flags, */
|
||||
#define __MXCSR_ROUND_FLAG_SHIFT 3
|
||||
|
||||
#ifndef RC_INVOKED
|
||||
/*
|
||||
For now, support only for the basic abstraction of flags that are
|
||||
either set or clear. fexcept_t could be structure that holds more
|
||||
info about the fp environment.
|
||||
*/
|
||||
typedef unsigned short fexcept_t;
|
||||
|
||||
/* This 32-byte struct represents the entire floating point
|
||||
environment as stored by fnstenv or fstenv, augmented by
|
||||
the contents of the MXCSR register, as stored by stmxcsr
|
||||
(if CPU supports it). */
|
||||
typedef struct
|
||||
{
|
||||
unsigned short __control_word;
|
||||
unsigned short __unused0;
|
||||
unsigned short __status_word;
|
||||
unsigned short __unused1;
|
||||
unsigned short __tag_word;
|
||||
unsigned short __unused2;
|
||||
unsigned int __ip_offset; /* instruction pointer offset */
|
||||
unsigned short __ip_selector;
|
||||
unsigned short __opcode;
|
||||
unsigned int __data_offset;
|
||||
unsigned short __data_selector;
|
||||
unsigned short __unused3;
|
||||
unsigned int __mxcsr; /* contents of the MXCSR register */
|
||||
} fenv_t;
|
||||
|
||||
|
||||
/*The C99 standard (7.6.9) allows us to define implementation-specific macros for
|
||||
different fp environments */
|
||||
|
||||
/* The default Intel x87 floating point environment (64-bit mantissa) */
|
||||
#define FE_PC64_ENV ((const fenv_t *)-1)
|
||||
|
||||
/* The floating point environment set by MSVCRT _fpreset (53-bit mantissa) */
|
||||
#define FE_PC53_ENV ((const fenv_t *)-2)
|
||||
|
||||
/* The FE_DFL_ENV macro is required by standard.
|
||||
fesetenv will use the environment set at app startup.*/
|
||||
#define FE_DFL_ENV ((const fenv_t *) 0)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*TODO: Some of these could be inlined */
|
||||
/* 7.6.2 Exception */
|
||||
|
||||
extern int __cdecl feclearexcept (int);
|
||||
extern int __cdecl fegetexceptflag (fexcept_t * flagp, int excepts);
|
||||
extern int __cdecl feraiseexcept (int excepts );
|
||||
extern int __cdecl fesetexceptflag (const fexcept_t *, int);
|
||||
extern int __cdecl fetestexcept (int excepts);
|
||||
|
||||
/* 7.6.3 Rounding */
|
||||
|
||||
extern int __cdecl fegetround (void);
|
||||
extern int __cdecl fesetround (int mode);
|
||||
|
||||
/* 7.6.4 Environment */
|
||||
|
||||
extern int __cdecl fegetenv(fenv_t * envp);
|
||||
extern int __cdecl fesetenv(const fenv_t * );
|
||||
extern int __cdecl feupdateenv(const fenv_t *);
|
||||
extern int __cdecl feholdexcept(fenv_t *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* Not RC_INVOKED */
|
||||
|
||||
#endif /* ndef _FENV_H */
|
|
@ -1,297 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
/* 7.8 Format conversion of integer types <inttypes.h> */
|
||||
|
||||
#ifndef _INTTYPES_H_
|
||||
#define _INTTYPES_H_
|
||||
|
||||
#include <_mingw.h>
|
||||
#include <stdint.h>
|
||||
#define __need_wchar_t
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
intmax_t quot;
|
||||
intmax_t rem;
|
||||
} imaxdiv_t;
|
||||
|
||||
#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)
|
||||
|
||||
/* 7.8.1 Macros for format specifiers
|
||||
*
|
||||
* MS runtime does not yet understand C9x standard "ll"
|
||||
* length specifier. It appears to treat "ll" as "l".
|
||||
* The non-standard I64 length specifier causes warning in GCC,
|
||||
* but understood by MS runtime functions.
|
||||
*/
|
||||
|
||||
/* fprintf macros for signed types */
|
||||
#define PRId8 "d"
|
||||
#define PRId16 "d"
|
||||
#define PRId32 "d"
|
||||
#define PRId64 "I64d"
|
||||
|
||||
#define PRIdLEAST8 "d"
|
||||
#define PRIdLEAST16 "d"
|
||||
#define PRIdLEAST32 "d"
|
||||
#define PRIdLEAST64 "I64d"
|
||||
|
||||
#define PRIdFAST8 "d"
|
||||
#define PRIdFAST16 "d"
|
||||
#define PRIdFAST32 "d"
|
||||
#define PRIdFAST64 "I64d"
|
||||
|
||||
#define PRIdMAX "I64d"
|
||||
|
||||
#define PRIi8 "i"
|
||||
#define PRIi16 "i"
|
||||
#define PRIi32 "i"
|
||||
#define PRIi64 "I64i"
|
||||
|
||||
#define PRIiLEAST8 "i"
|
||||
#define PRIiLEAST16 "i"
|
||||
#define PRIiLEAST32 "i"
|
||||
#define PRIiLEAST64 "I64i"
|
||||
|
||||
#define PRIiFAST8 "i"
|
||||
#define PRIiFAST16 "i"
|
||||
#define PRIiFAST32 "i"
|
||||
#define PRIiFAST64 "I64i"
|
||||
|
||||
#define PRIiMAX "I64i"
|
||||
|
||||
#define PRIo8 "o"
|
||||
#define PRIo16 "o"
|
||||
#define PRIo32 "o"
|
||||
#define PRIo64 "I64o"
|
||||
|
||||
#define PRIoLEAST8 "o"
|
||||
#define PRIoLEAST16 "o"
|
||||
#define PRIoLEAST32 "o"
|
||||
#define PRIoLEAST64 "I64o"
|
||||
|
||||
#define PRIoFAST8 "o"
|
||||
#define PRIoFAST16 "o"
|
||||
#define PRIoFAST32 "o"
|
||||
#define PRIoFAST64 "I64o"
|
||||
|
||||
#define PRIoMAX "I64o"
|
||||
|
||||
/* fprintf macros for unsigned types */
|
||||
#define PRIu8 "u"
|
||||
#define PRIu16 "u"
|
||||
#define PRIu32 "u"
|
||||
#define PRIu64 "I64u"
|
||||
|
||||
|
||||
#define PRIuLEAST8 "u"
|
||||
#define PRIuLEAST16 "u"
|
||||
#define PRIuLEAST32 "u"
|
||||
#define PRIuLEAST64 "I64u"
|
||||
|
||||
#define PRIuFAST8 "u"
|
||||
#define PRIuFAST16 "u"
|
||||
#define PRIuFAST32 "u"
|
||||
#define PRIuFAST64 "I64u"
|
||||
|
||||
#define PRIuMAX "I64u"
|
||||
|
||||
#define PRIx8 "x"
|
||||
#define PRIx16 "x"
|
||||
#define PRIx32 "x"
|
||||
#define PRIx64 "I64x"
|
||||
|
||||
#define PRIxLEAST8 "x"
|
||||
#define PRIxLEAST16 "x"
|
||||
#define PRIxLEAST32 "x"
|
||||
#define PRIxLEAST64 "I64x"
|
||||
|
||||
#define PRIxFAST8 "x"
|
||||
#define PRIxFAST16 "x"
|
||||
#define PRIxFAST32 "x"
|
||||
#define PRIxFAST64 "I64x"
|
||||
|
||||
#define PRIxMAX "I64x"
|
||||
|
||||
#define PRIX8 "X"
|
||||
#define PRIX16 "X"
|
||||
#define PRIX32 "X"
|
||||
#define PRIX64 "I64X"
|
||||
|
||||
#define PRIXLEAST8 "X"
|
||||
#define PRIXLEAST16 "X"
|
||||
#define PRIXLEAST32 "X"
|
||||
#define PRIXLEAST64 "I64X"
|
||||
|
||||
#define PRIXFAST8 "X"
|
||||
#define PRIXFAST16 "X"
|
||||
#define PRIXFAST32 "X"
|
||||
#define PRIXFAST64 "I64X"
|
||||
|
||||
#define PRIXMAX "I64X"
|
||||
|
||||
/*
|
||||
* fscanf macros for signed int types
|
||||
* NOTE: if 32-bit int is used for int_fast8_t and int_fast16_t
|
||||
* (see stdint.h, 7.18.1.3), FAST8 and FAST16 should have
|
||||
* no length identifiers
|
||||
*/
|
||||
|
||||
#define SCNd16 "hd"
|
||||
#define SCNd32 "d"
|
||||
#define SCNd64 "I64d"
|
||||
|
||||
#define SCNdLEAST16 "hd"
|
||||
#define SCNdLEAST32 "d"
|
||||
#define SCNdLEAST64 "I64d"
|
||||
|
||||
#define SCNdFAST16 "hd"
|
||||
#define SCNdFAST32 "d"
|
||||
#define SCNdFAST64 "I64d"
|
||||
|
||||
#define SCNdMAX "I64d"
|
||||
|
||||
#define SCNi16 "hi"
|
||||
#define SCNi32 "i"
|
||||
#define SCNi64 "I64i"
|
||||
|
||||
#define SCNiLEAST16 "hi"
|
||||
#define SCNiLEAST32 "i"
|
||||
#define SCNiLEAST64 "I64i"
|
||||
|
||||
#define SCNiFAST16 "hi"
|
||||
#define SCNiFAST32 "i"
|
||||
#define SCNiFAST64 "I64i"
|
||||
|
||||
#define SCNiMAX "I64i"
|
||||
|
||||
#define SCNo16 "ho"
|
||||
#define SCNo32 "o"
|
||||
#define SCNo64 "I64o"
|
||||
|
||||
#define SCNoLEAST16 "ho"
|
||||
#define SCNoLEAST32 "o"
|
||||
#define SCNoLEAST64 "I64o"
|
||||
|
||||
#define SCNoFAST16 "ho"
|
||||
#define SCNoFAST32 "o"
|
||||
#define SCNoFAST64 "I64o"
|
||||
|
||||
#define SCNoMAX "I64o"
|
||||
|
||||
#define SCNx16 "hx"
|
||||
#define SCNx32 "x"
|
||||
#define SCNx64 "I64x"
|
||||
|
||||
#define SCNxLEAST16 "hx"
|
||||
#define SCNxLEAST32 "x"
|
||||
#define SCNxLEAST64 "I64x"
|
||||
|
||||
#define SCNxFAST16 "hx"
|
||||
#define SCNxFAST32 "x"
|
||||
#define SCNxFAST64 "I64x"
|
||||
|
||||
#define SCNxMAX "I64x"
|
||||
|
||||
/* fscanf macros for unsigned int types */
|
||||
|
||||
#define SCNu16 "hu"
|
||||
#define SCNu32 "u"
|
||||
#define SCNu64 "I64u"
|
||||
|
||||
#define SCNuLEAST16 "hu"
|
||||
#define SCNuLEAST32 "u"
|
||||
#define SCNuLEAST64 "I64u"
|
||||
|
||||
#define SCNuFAST16 "hu"
|
||||
#define SCNuFAST32 "u"
|
||||
#define SCNuFAST64 "I64u"
|
||||
|
||||
#define SCNuMAX "I64u"
|
||||
|
||||
#ifdef _WIN64
|
||||
#define PRIdPTR "I64d"
|
||||
#define PRIiPTR "I64i"
|
||||
#define PRIoPTR "I64o"
|
||||
#define PRIuPTR "I64u"
|
||||
#define PRIxPTR "I64x"
|
||||
#define PRIXPTR "I64X"
|
||||
#define SCNdPTR "I64d"
|
||||
#define SCNiPTR "I64i"
|
||||
#define SCNoPTR "I64o"
|
||||
#define SCNxPTR "I64x"
|
||||
#define SCNuPTR "I64u"
|
||||
#else
|
||||
#define PRIdPTR "d"
|
||||
#define PRIiPTR "i"
|
||||
#define PRIoPTR "o"
|
||||
#define PRIuPTR "u"
|
||||
#define PRIxPTR "x"
|
||||
#define PRIXPTR "X"
|
||||
#define SCNdPTR "d"
|
||||
#define SCNiPTR "i"
|
||||
#define SCNoPTR "o"
|
||||
#define SCNxPTR "x"
|
||||
#define SCNuPTR "u"
|
||||
#endif
|
||||
|
||||
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
|
||||
/*
|
||||
* no length modifier for char types prior to C9x
|
||||
* MS runtime scanf appears to treat "hh" as "h"
|
||||
*/
|
||||
|
||||
/* signed char */
|
||||
#define SCNd8 "hhd"
|
||||
#define SCNdLEAST8 "hhd"
|
||||
#define SCNdFAST8 "hhd"
|
||||
|
||||
#define SCNi8 "hhi"
|
||||
#define SCNiLEAST8 "hhi"
|
||||
#define SCNiFAST8 "hhi"
|
||||
|
||||
#define SCNo8 "hho"
|
||||
#define SCNoLEAST8 "hho"
|
||||
#define SCNoFAST8 "hho"
|
||||
|
||||
#define SCNx8 "hhx"
|
||||
#define SCNxLEAST8 "hhx"
|
||||
#define SCNxFAST8 "hhx"
|
||||
|
||||
/* unsigned char */
|
||||
#define SCNu8 "hhu"
|
||||
#define SCNuLEAST8 "hhu"
|
||||
#define SCNuFAST8 "hhu"
|
||||
#endif /* __STDC_VERSION__ >= 199901 */
|
||||
|
||||
#endif /* !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) */
|
||||
|
||||
intmax_t __cdecl imaxabs (intmax_t j);
|
||||
__CRT_INLINE intmax_t __cdecl imaxabs (intmax_t j)
|
||||
{return (j >= 0 ? j : -j);}
|
||||
imaxdiv_t __cdecl imaxdiv (intmax_t numer, intmax_t denom);
|
||||
|
||||
/* 7.8.2 Conversion functions for greatest-width integer types */
|
||||
|
||||
intmax_t __cdecl strtoimax (const char* __restrict__ nptr,
|
||||
char** __restrict__ endptr, int base);
|
||||
uintmax_t __cdecl strtoumax (const char* __restrict__ nptr,
|
||||
char** __restrict__ endptr, int base);
|
||||
|
||||
intmax_t __cdecl wcstoimax (const wchar_t* __restrict__ nptr,
|
||||
wchar_t** __restrict__ endptr, int base);
|
||||
uintmax_t __cdecl wcstoumax (const wchar_t* __restrict__ nptr,
|
||||
wchar_t** __restrict__ endptr, int base);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* ndef _INTTYPES_H */
|
|
@ -1,418 +0,0 @@
|
|||
|
||||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _IO_H_
|
||||
#define _IO_H_
|
||||
|
||||
#include <_mingw.h>
|
||||
#include <string.h>
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#ifndef _POSIX_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
_CRTIMP char* __cdecl _getcwd (char*, int);
|
||||
#ifndef _FSIZE_T_DEFINED
|
||||
typedef unsigned long _fsize_t;
|
||||
#define _FSIZE_T_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef _FINDDATA_T_DEFINED
|
||||
|
||||
struct _finddata32_t {
|
||||
unsigned attrib;
|
||||
__time32_t time_create;
|
||||
__time32_t time_access;
|
||||
__time32_t time_write;
|
||||
_fsize_t size;
|
||||
char name[260];
|
||||
};
|
||||
|
||||
/*#if _INTEGRAL_MAX_BITS >= 64*/
|
||||
|
||||
struct _finddata32i64_t {
|
||||
unsigned attrib;
|
||||
__time32_t time_create;
|
||||
__time32_t time_access;
|
||||
__time32_t time_write;
|
||||
__int64 size;
|
||||
char name[260];
|
||||
};
|
||||
|
||||
struct _finddata64i32_t {
|
||||
unsigned attrib;
|
||||
__time64_t time_create;
|
||||
__time64_t time_access;
|
||||
__time64_t time_write;
|
||||
_fsize_t size;
|
||||
char name[260];
|
||||
};
|
||||
|
||||
struct __finddata64_t {
|
||||
unsigned attrib;
|
||||
__time64_t time_create;
|
||||
__time64_t time_access;
|
||||
__time64_t time_write;
|
||||
__int64 size;
|
||||
char name[260];
|
||||
};
|
||||
/* #endif */
|
||||
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
#define _finddata_t _finddata32_t
|
||||
#define _finddatai64_t _finddata32i64_t
|
||||
|
||||
#ifdef _WIN64
|
||||
#define _findfirst _findfirst32
|
||||
#define _findnext _findnext32
|
||||
#else
|
||||
#define _findfirst32 _findfirst
|
||||
#define _findnext32 _findnext
|
||||
#endif
|
||||
#define _findfirsti64 _findfirst32i64
|
||||
#define _findnexti64 _findnext32i64
|
||||
#else
|
||||
#define _finddata_t _finddata64i32_t
|
||||
#define _finddatai64_t __finddata64_t
|
||||
|
||||
#define _findfirst _findfirst64i32
|
||||
#define _findnext _findnext64i32
|
||||
#define _findfirsti64 _findfirst64
|
||||
#define _findnexti64 _findnext64
|
||||
#endif
|
||||
|
||||
#define _FINDDATA_T_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef _WFINDDATA_T_DEFINED
|
||||
|
||||
struct _wfinddata32_t {
|
||||
unsigned attrib;
|
||||
__time32_t time_create;
|
||||
__time32_t time_access;
|
||||
__time32_t time_write;
|
||||
_fsize_t size;
|
||||
wchar_t name[260];
|
||||
};
|
||||
|
||||
/* #if _INTEGRAL_MAX_BITS >= 64 */
|
||||
|
||||
struct _wfinddata32i64_t {
|
||||
unsigned attrib;
|
||||
__time32_t time_create;
|
||||
__time32_t time_access;
|
||||
__time32_t time_write;
|
||||
__int64 size;
|
||||
wchar_t name[260];
|
||||
};
|
||||
|
||||
struct _wfinddata64i32_t {
|
||||
unsigned attrib;
|
||||
__time64_t time_create;
|
||||
__time64_t time_access;
|
||||
__time64_t time_write;
|
||||
_fsize_t size;
|
||||
wchar_t name[260];
|
||||
};
|
||||
|
||||
struct _wfinddata64_t {
|
||||
unsigned attrib;
|
||||
__time64_t time_create;
|
||||
__time64_t time_access;
|
||||
__time64_t time_write;
|
||||
__int64 size;
|
||||
wchar_t name[260];
|
||||
};
|
||||
/* #endif */
|
||||
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
#define _wfinddata_t _wfinddata32_t
|
||||
#define _wfinddatai64_t _wfinddata32i64_t
|
||||
|
||||
#define _wfindfirst _wfindfirst32
|
||||
#define _wfindnext _wfindnext32
|
||||
#define _wfindfirsti64 _wfindfirst32i64
|
||||
#define _wfindnexti64 _wfindnext32i64
|
||||
#else
|
||||
#define _wfinddata_t _wfinddata64i32_t
|
||||
#define _wfinddatai64_t _wfinddata64_t
|
||||
|
||||
#define _wfindfirst _wfindfirst64i32
|
||||
#define _wfindnext _wfindnext64i32
|
||||
#define _wfindfirsti64 _wfindfirst64
|
||||
#define _wfindnexti64 _wfindnext64
|
||||
#endif
|
||||
|
||||
#define _WFINDDATA_T_DEFINED
|
||||
#endif
|
||||
|
||||
#define _A_NORMAL 0x00
|
||||
#define _A_RDONLY 0x01
|
||||
#define _A_HIDDEN 0x02
|
||||
#define _A_SYSTEM 0x04
|
||||
#define _A_SUBDIR 0x10
|
||||
#define _A_ARCH 0x20
|
||||
|
||||
#ifndef _SIZE_T_DEFINED
|
||||
#define _SIZE_T_DEFINED
|
||||
#undef size_t
|
||||
#ifdef _WIN64
|
||||
#if defined(__GNUC__) && defined(__STRICT_ANSI__)
|
||||
typedef unsigned int size_t __attribute__ ((mode (DI)));
|
||||
#else
|
||||
typedef unsigned __int64 size_t;
|
||||
#endif
|
||||
#else
|
||||
typedef unsigned int size_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _SSIZE_T_DEFINED
|
||||
#define _SSIZE_T_DEFINED
|
||||
#undef ssize_t
|
||||
#ifdef _WIN64
|
||||
#if defined(__GNUC__) && defined(__STRICT_ANSI__)
|
||||
typedef int ssize_t __attribute__ ((mode (DI)));
|
||||
#else
|
||||
typedef __int64 ssize_t;
|
||||
#endif
|
||||
#else
|
||||
typedef int ssize_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _OFF_T_DEFINED
|
||||
#define _OFF_T_DEFINED
|
||||
#ifndef _OFF_T_
|
||||
#define _OFF_T_
|
||||
typedef long _off_t;
|
||||
#if !defined(NO_OLDNAMES) || defined(_POSIX)
|
||||
typedef long off_t;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _OFF64_T_DEFINED
|
||||
#define _OFF64_T_DEFINED
|
||||
#if defined(__GNUC__) && defined(__STRICT_ANSI__)
|
||||
typedef int _off64_t __attribute__ ((mode (DI)));
|
||||
#if !defined(NO_OLDNAMES) || defined(_POSIX)
|
||||
typedef int off64_t __attribute__ ((mode (DI)));
|
||||
#endif
|
||||
#else
|
||||
typedef long long _off64_t;
|
||||
#if !defined(NO_OLDNAMES) || defined(_POSIX)
|
||||
typedef long long off64_t;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Some defines for _access nAccessMode (MS doesn't define them, but
|
||||
* it doesn't seem to hurt to add them). */
|
||||
#define F_OK 0 /* Check for file existence */
|
||||
#define X_OK 1 /* Check for execute permission. */
|
||||
#define W_OK 2 /* Check for write permission */
|
||||
#define R_OK 4 /* Check for read permission */
|
||||
|
||||
_CRTIMP int __cdecl _access(const char *_Filename,int _AccessMode);
|
||||
_CRTIMP int __cdecl _chmod(const char *_Filename,int _Mode);
|
||||
_CRTIMP int __cdecl _chsize(int _FileHandle,long _Size);
|
||||
_CRTIMP int __cdecl _close(int _FileHandle);
|
||||
_CRTIMP int __cdecl _commit(int _FileHandle);
|
||||
_CRTIMP int __cdecl _creat(const char *_Filename,int _PermissionMode);
|
||||
_CRTIMP int __cdecl _dup(int _FileHandle);
|
||||
_CRTIMP int __cdecl _dup2(int _FileHandleSrc,int _FileHandleDst);
|
||||
_CRTIMP int __cdecl _eof(int _FileHandle);
|
||||
_CRTIMP long __cdecl _filelength(int _FileHandle);
|
||||
_CRTIMP intptr_t __cdecl _findfirst32(const char *_Filename,struct _finddata32_t *_FindData);
|
||||
_CRTIMP int __cdecl _findnext32(intptr_t _FindHandle,struct _finddata32_t *_FindData);
|
||||
_CRTIMP int __cdecl _findclose(intptr_t _FindHandle);
|
||||
_CRTIMP int __cdecl _isatty(int _FileHandle);
|
||||
_CRTIMP int __cdecl _locking(int _FileHandle,int _LockMode,long _NumOfBytes);
|
||||
_CRTIMP long __cdecl _lseek(int _FileHandle,long _Offset,int _Origin);
|
||||
_off64_t lseek64(int fd,_off64_t offset, int whence);
|
||||
_CRTIMP char *__cdecl _mktemp(char *_TemplateName);
|
||||
_CRTIMP int __cdecl _pipe(int *_PtHandles,unsigned int _PipeSize,int _TextMode);
|
||||
_CRTIMP int __cdecl _read(int _FileHandle,void *_DstBuf,unsigned int _MaxCharCount);
|
||||
|
||||
#ifndef _CRT_DIRECTORY_DEFINED
|
||||
#define _CRT_DIRECTORY_DEFINED
|
||||
int __cdecl remove(const char *_Filename);
|
||||
int __cdecl rename(const char *_OldFilename,const char *_NewFilename);
|
||||
_CRTIMP int __cdecl _unlink(const char *_Filename);
|
||||
#ifndef NO_OLDNAMES
|
||||
int __cdecl unlink(const char *_Filename);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
_CRTIMP int __cdecl _setmode(int _FileHandle,int _Mode);
|
||||
_CRTIMP long __cdecl _tell(int _FileHandle);
|
||||
_CRTIMP int __cdecl _umask(int _Mode);
|
||||
_CRTIMP int __cdecl _write(int _FileHandle,const void *_Buf,unsigned int _MaxCharCount);
|
||||
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP __int64 __cdecl _filelengthi64(int _FileHandle);
|
||||
_CRTIMP intptr_t __cdecl _findfirst32i64(const char *_Filename,struct _finddata32i64_t *_FindData);
|
||||
_CRTIMP intptr_t __cdecl _findfirst64(const char *_Filename,struct __finddata64_t *_FindData);
|
||||
#ifdef __cplusplus
|
||||
#include <string.h>
|
||||
#endif
|
||||
intptr_t __cdecl _findfirst64i32(const char *_Filename,struct _finddata64i32_t *_FindData);
|
||||
__CRT_INLINE intptr_t __cdecl _findfirst64i32(const char *_Filename,struct _finddata64i32_t *_FindData)
|
||||
{
|
||||
struct __finddata64_t fd;
|
||||
intptr_t ret = _findfirst64(_Filename,&fd);
|
||||
_FindData->attrib=fd.attrib;
|
||||
_FindData->time_create=fd.time_create;
|
||||
_FindData->time_access=fd.time_access;
|
||||
_FindData->time_write=fd.time_write;
|
||||
_FindData->size=(_fsize_t) fd.size;
|
||||
strncpy(_FindData->name,fd.name,260);
|
||||
return ret;
|
||||
}
|
||||
_CRTIMP int __cdecl _findnext32i64(intptr_t _FindHandle,struct _finddata32i64_t *_FindData);
|
||||
_CRTIMP int __cdecl _findnext64(intptr_t _FindHandle,struct __finddata64_t *_FindData);
|
||||
int __cdecl _findnext64i32(intptr_t _FindHandle,struct _finddata64i32_t *_FindData);
|
||||
__CRT_INLINE int __cdecl _findnext64i32(intptr_t _FindHandle,struct _finddata64i32_t *_FindData)
|
||||
{
|
||||
struct __finddata64_t fd;
|
||||
int ret = _findnext64(_FindHandle,&fd);
|
||||
_FindData->attrib=fd.attrib;
|
||||
_FindData->time_create=fd.time_create;
|
||||
_FindData->time_access=fd.time_access;
|
||||
_FindData->time_write=fd.time_write;
|
||||
_FindData->size=(_fsize_t) fd.size;
|
||||
strncpy(_FindData->name,fd.name,260);
|
||||
return ret;
|
||||
}
|
||||
__int64 __cdecl _lseeki64(int _FileHandle,__int64 _Offset,int _Origin);
|
||||
__int64 __cdecl _telli64(int _FileHandle);
|
||||
#endif
|
||||
#ifndef NO_OLDNAMES
|
||||
|
||||
#ifndef _UWIN
|
||||
int __cdecl chdir (const char *);
|
||||
char *__cdecl getcwd (char *, int);
|
||||
int __cdecl mkdir (const char *);
|
||||
char *__cdecl mktemp(char *);
|
||||
int __cdecl rmdir (const char*);
|
||||
int __cdecl chmod (const char *, int);
|
||||
#endif /* _UWIN */
|
||||
|
||||
#endif /* Not NO_OLDNAMES */
|
||||
|
||||
_CRTIMP errno_t __cdecl _sopen_s(int *_FileHandle,const char *_Filename,int _OpenFlag,int _ShareFlag,int _PermissionMode);
|
||||
|
||||
#ifndef __cplusplus
|
||||
_CRTIMP int __cdecl _open(const char *_Filename,int _OpenFlag,...);
|
||||
_CRTIMP int __cdecl _sopen(const char *_Filename,int _OpenFlag,int _ShareFlag,...);
|
||||
#else
|
||||
extern "C++" _CRTIMP int __cdecl _open(const char *_Filename,int _Openflag,int _PermissionMode = 0);
|
||||
extern "C++" _CRTIMP int __cdecl _sopen(const char *_Filename,int _Openflag,int _ShareFlag,int _PermissionMode = 0);
|
||||
#endif
|
||||
|
||||
#ifndef _WIO_DEFINED
|
||||
#define _WIO_DEFINED
|
||||
_CRTIMP int __cdecl _waccess(const wchar_t *_Filename,int _AccessMode);
|
||||
_CRTIMP int __cdecl _wchmod(const wchar_t *_Filename,int _Mode);
|
||||
_CRTIMP int __cdecl _wcreat(const wchar_t *_Filename,int _PermissionMode);
|
||||
_CRTIMP intptr_t __cdecl _wfindfirst32(const wchar_t *_Filename,struct _wfinddata32_t *_FindData);
|
||||
_CRTIMP int __cdecl _wfindnext32(intptr_t _FindHandle,struct _wfinddata32_t *_FindData);
|
||||
_CRTIMP int __cdecl _wunlink(const wchar_t *_Filename);
|
||||
_CRTIMP int __cdecl _wrename(const wchar_t *_NewFilename,const wchar_t *_OldFilename);
|
||||
_CRTIMP wchar_t *__cdecl _wmktemp(wchar_t *_TemplateName);
|
||||
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP intptr_t __cdecl _wfindfirst32i64(const wchar_t *_Filename,struct _wfinddata32i64_t *_FindData);
|
||||
intptr_t __cdecl _wfindfirst64i32(const wchar_t *_Filename,struct _wfinddata64i32_t *_FindData);
|
||||
_CRTIMP intptr_t __cdecl _wfindfirst64(const wchar_t *_Filename,struct _wfinddata64_t *_FindData);
|
||||
_CRTIMP int __cdecl _wfindnext32i64(intptr_t _FindHandle,struct _wfinddata32i64_t *_FindData);
|
||||
int __cdecl _wfindnext64i32(intptr_t _FindHandle,struct _wfinddata64i32_t *_FindData);
|
||||
_CRTIMP int __cdecl _wfindnext64(intptr_t _FindHandle,struct _wfinddata64_t *_FindData);
|
||||
#endif
|
||||
|
||||
_CRTIMP errno_t __cdecl _wsopen_s(int *_FileHandle,const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,int _PermissionFlag);
|
||||
|
||||
#if !defined(__cplusplus) || !(defined(_X86_) && !defined(__x86_64))
|
||||
_CRTIMP int __cdecl _wopen(const wchar_t *_Filename,int _OpenFlag,...);
|
||||
_CRTIMP int __cdecl _wsopen(const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,...);
|
||||
#else
|
||||
extern "C++" _CRTIMP int __cdecl _wopen(const wchar_t *_Filename,int _OpenFlag,int _PermissionMode = 0);
|
||||
extern "C++" _CRTIMP int __cdecl _wsopen(const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,int _PermissionMode = 0);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
int __cdecl __lock_fhandle(int _Filehandle);
|
||||
void __cdecl _unlock_fhandle(int _Filehandle);
|
||||
_CRTIMP intptr_t __cdecl _get_osfhandle(int _FileHandle);
|
||||
_CRTIMP int __cdecl _open_osfhandle(intptr_t _OSFileHandle,int _Flags);
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
int __cdecl access(const char *_Filename,int _AccessMode);
|
||||
int __cdecl chmod(const char *_Filename,int _AccessMode);
|
||||
int __cdecl chsize(int _FileHandle,long _Size);
|
||||
int __cdecl close(int _FileHandle);
|
||||
int __cdecl creat(const char *_Filename,int _PermissionMode);
|
||||
int __cdecl dup(int _FileHandle);
|
||||
int __cdecl dup2(int _FileHandleSrc,int _FileHandleDst);
|
||||
int __cdecl eof(int _FileHandle);
|
||||
long __cdecl filelength(int _FileHandle);
|
||||
int __cdecl isatty(int _FileHandle);
|
||||
int __cdecl locking(int _FileHandle,int _LockMode,long _NumOfBytes);
|
||||
long __cdecl lseek(int _FileHandle,long _Offset,int _Origin);
|
||||
char *__cdecl mktemp(char *_TemplateName);
|
||||
int __cdecl open(const char *_Filename,int _OpenFlag,...);
|
||||
int __cdecl read(int _FileHandle,void *_DstBuf,unsigned int _MaxCharCount);
|
||||
int __cdecl setmode(int _FileHandle,int _Mode);
|
||||
int __cdecl sopen(const char *_Filename,int _OpenFlag,int _ShareFlag,...);
|
||||
long __cdecl tell(int _FileHandle);
|
||||
int __cdecl umask(int _Mode);
|
||||
int __cdecl write(int _Filehandle,const void *_Buf,unsigned int _MaxCharCount);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Misc stuff */
|
||||
char *getlogin(void);
|
||||
#ifdef __USE_MINGW_ALARM
|
||||
unsigned int alarm(unsigned int seconds);
|
||||
#endif
|
||||
|
||||
#ifdef __USE_MINGW_ACCESS
|
||||
/* Old versions of MSVCRT access() just ignored X_OK, while the version
|
||||
shipped with Vista, returns an error code. This will restore the
|
||||
old behaviour */
|
||||
static inline int __mingw_access (const char *__fname, int __mode) {
|
||||
return _access (__fname, __mode & ~X_OK);
|
||||
}
|
||||
|
||||
#define access(__f,__m) __mingw_access (__f, __m)
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#include <sec_api/io_s.h>
|
||||
|
||||
#endif /* End _IO_H_ */
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the TinyCC package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
|
||||
/*
|
||||
* ISO C Standard: 7.9 Alternative spellings <iso646.h>
|
||||
*/
|
||||
|
||||
#ifndef _ISO646_H_
|
||||
#define _ISO646_H_
|
||||
|
||||
#define and &&
|
||||
#define and_eq &=
|
||||
#define bitand &
|
||||
#define bitor |
|
||||
#define compl ~
|
||||
#define not !
|
||||
#define not_eq !=
|
||||
#define or ||
|
||||
#define or_eq |=
|
||||
#define xor ^
|
||||
#define xor_eq ^=
|
||||
|
||||
#endif /* _ISO646_H_ */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,116 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#include <_mingw.h>
|
||||
|
||||
#ifndef _INC_LIMITS
|
||||
#define _INC_LIMITS
|
||||
|
||||
/*
|
||||
* File system limits
|
||||
*
|
||||
* TODO: NAME_MAX and OPEN_MAX are file system limits or not? Are they the
|
||||
* same as FILENAME_MAX and FOPEN_MAX from stdio.h?
|
||||
* NOTE: Apparently the actual size of PATH_MAX is 260, but a space is
|
||||
* required for the NUL. TODO: Test?
|
||||
*/
|
||||
#define PATH_MAX (259)
|
||||
|
||||
#define CHAR_BIT 8
|
||||
#define SCHAR_MIN (-128)
|
||||
#define SCHAR_MAX 127
|
||||
#define UCHAR_MAX 0xff
|
||||
|
||||
#ifndef __CHAR_UNSIGNED__
|
||||
#define CHAR_MIN SCHAR_MIN
|
||||
#define CHAR_MAX SCHAR_MAX
|
||||
#else
|
||||
#define CHAR_MIN 0
|
||||
#define CHAR_MAX UCHAR_MAX
|
||||
#endif
|
||||
|
||||
#define MB_LEN_MAX 5
|
||||
#define SHRT_MIN (-32768)
|
||||
#define SHRT_MAX 32767
|
||||
#define USHRT_MAX 0xffff
|
||||
#define INT_MIN (-2147483647 - 1)
|
||||
#define INT_MAX 2147483647
|
||||
#define UINT_MAX 0xffffffff
|
||||
#define LONG_MIN (-2147483647L - 1)
|
||||
#define LONG_MAX 2147483647L
|
||||
#define ULONG_MAX 0xffffffffUL
|
||||
#define LLONG_MAX 9223372036854775807ll
|
||||
#define LLONG_MIN (-9223372036854775807ll - 1)
|
||||
#define ULLONG_MAX 0xffffffffffffffffull
|
||||
|
||||
#if _INTEGRAL_MAX_BITS >= 8
|
||||
#define _I8_MIN (-127 - 1)
|
||||
#define _I8_MAX 127i8
|
||||
#define _UI8_MAX 0xffu
|
||||
#endif
|
||||
|
||||
#if _INTEGRAL_MAX_BITS >= 16
|
||||
#define _I16_MIN (-32767 - 1)
|
||||
#define _I16_MAX 32767i16
|
||||
#define _UI16_MAX 0xffffu
|
||||
#endif
|
||||
|
||||
#if _INTEGRAL_MAX_BITS >= 32
|
||||
#define _I32_MIN (-2147483647 - 1)
|
||||
#define _I32_MAX 2147483647
|
||||
#define _UI32_MAX 0xffffffffu
|
||||
#endif
|
||||
|
||||
#if defined(__GNUC__)
|
||||
#undef LONG_LONG_MAX
|
||||
#define LONG_LONG_MAX 9223372036854775807ll
|
||||
#undef LONG_LONG_MIN
|
||||
#define LONG_LONG_MIN (-LONG_LONG_MAX-1)
|
||||
#undef ULONG_LONG_MAX
|
||||
#define ULONG_LONG_MAX (2ull * LONG_LONG_MAX + 1ull)
|
||||
#endif
|
||||
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
#define _I64_MIN (-9223372036854775807ll - 1)
|
||||
#define _I64_MAX 9223372036854775807ll
|
||||
#define _UI64_MAX 0xffffffffffffffffull
|
||||
#endif
|
||||
|
||||
#ifndef SIZE_MAX
|
||||
#ifdef _WIN64
|
||||
#define SIZE_MAX _UI64_MAX
|
||||
#else
|
||||
#define SIZE_MAX UINT_MAX
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _POSIX_
|
||||
#define _POSIX_ARG_MAX 4096
|
||||
#define _POSIX_CHILD_MAX 6
|
||||
#define _POSIX_LINK_MAX 8
|
||||
#define _POSIX_MAX_CANON 255
|
||||
#define _POSIX_MAX_INPUT 255
|
||||
#define _POSIX_NAME_MAX 14
|
||||
#define _POSIX_NGROUPS_MAX 0
|
||||
#define _POSIX_OPEN_MAX 16
|
||||
#define _POSIX_PATH_MAX 255
|
||||
#define _POSIX_PIPE_BUF 512
|
||||
#define _POSIX_SSIZE_MAX 32767
|
||||
#define _POSIX_STREAM_MAX 8
|
||||
#define _POSIX_TZNAME_MAX 3
|
||||
#define ARG_MAX 14500
|
||||
#define LINK_MAX 1024
|
||||
#define MAX_CANON _POSIX_MAX_CANON
|
||||
#define MAX_INPUT _POSIX_MAX_INPUT
|
||||
#define NAME_MAX 255
|
||||
#define NGROUPS_MAX 16
|
||||
#define OPEN_MAX 32
|
||||
#define PATH_MAX 512
|
||||
#define PIPE_BUF _POSIX_PIPE_BUF
|
||||
#define SSIZE_MAX _POSIX_SSIZE_MAX
|
||||
#define STREAM_MAX 20
|
||||
#define TZNAME_MAX 10
|
||||
#endif
|
||||
#endif
|
|
@ -1,91 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_LOCALE
|
||||
#define _INC_LOCALE
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
#ifdef __cplusplus
|
||||
#define NULL 0
|
||||
#else
|
||||
#define NULL ((void *)0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define LC_ALL 0
|
||||
#define LC_COLLATE 1
|
||||
#define LC_CTYPE 2
|
||||
#define LC_MONETARY 3
|
||||
#define LC_NUMERIC 4
|
||||
#define LC_TIME 5
|
||||
|
||||
#define LC_MIN LC_ALL
|
||||
#define LC_MAX LC_TIME
|
||||
|
||||
#ifndef _LCONV_DEFINED
|
||||
#define _LCONV_DEFINED
|
||||
struct lconv {
|
||||
char *decimal_point;
|
||||
char *thousands_sep;
|
||||
char *grouping;
|
||||
char *int_curr_symbol;
|
||||
char *currency_symbol;
|
||||
char *mon_decimal_point;
|
||||
char *mon_thousands_sep;
|
||||
char *mon_grouping;
|
||||
char *positive_sign;
|
||||
char *negative_sign;
|
||||
char int_frac_digits;
|
||||
char frac_digits;
|
||||
char p_cs_precedes;
|
||||
char p_sep_by_space;
|
||||
char n_cs_precedes;
|
||||
char n_sep_by_space;
|
||||
char p_sign_posn;
|
||||
char n_sign_posn;
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifndef _CONFIG_LOCALE_SWT
|
||||
#define _CONFIG_LOCALE_SWT
|
||||
|
||||
#define _ENABLE_PER_THREAD_LOCALE 0x1
|
||||
#define _DISABLE_PER_THREAD_LOCALE 0x2
|
||||
#define _ENABLE_PER_THREAD_LOCALE_GLOBAL 0x10
|
||||
#define _DISABLE_PER_THREAD_LOCALE_GLOBAL 0x20
|
||||
#define _ENABLE_PER_THREAD_LOCALE_NEW 0x100
|
||||
#define _DISABLE_PER_THREAD_LOCALE_NEW 0x200
|
||||
|
||||
#endif
|
||||
|
||||
int __cdecl _configthreadlocale(int _Flag);
|
||||
char *__cdecl setlocale(int _Category,const char *_Locale);
|
||||
_CRTIMP struct lconv *__cdecl localeconv(void);
|
||||
_locale_t __cdecl _get_current_locale(void);
|
||||
_locale_t __cdecl _create_locale(int _Category,const char *_Locale);
|
||||
void __cdecl _free_locale(_locale_t _Locale);
|
||||
_locale_t __cdecl __get_current_locale(void);
|
||||
_locale_t __cdecl __create_locale(int _Category,const char *_Locale);
|
||||
void __cdecl __free_locale(_locale_t _Locale);
|
||||
|
||||
#ifndef _WLOCALE_DEFINED
|
||||
#define _WLOCALE_DEFINED
|
||||
_CRTIMP wchar_t *__cdecl _wsetlocale(int _Category,const wchar_t *_Locale);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#pragma pack(pop)
|
||||
#endif
|
|
@ -1,181 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _MALLOC_H_
|
||||
#define _MALLOC_H_
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#ifndef _MM_MALLOC_H_INCLUDED
|
||||
#define _MM_MALLOC_H_INCLUDED
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef _WIN64
|
||||
#define _HEAP_MAXREQ 0xFFFFFFFFFFFFFFE0
|
||||
#else
|
||||
#define _HEAP_MAXREQ 0xFFFFFFE0
|
||||
#endif
|
||||
|
||||
#ifndef _STATIC_ASSERT
|
||||
#define _STATIC_ASSERT(expr) extern void __static_assert_t(int [(expr)?1:-1])
|
||||
#endif
|
||||
|
||||
/* Return codes for _heapwalk() */
|
||||
#define _HEAPEMPTY (-1)
|
||||
#define _HEAPOK (-2)
|
||||
#define _HEAPBADBEGIN (-3)
|
||||
#define _HEAPBADNODE (-4)
|
||||
#define _HEAPEND (-5)
|
||||
#define _HEAPBADPTR (-6)
|
||||
|
||||
/* Values for _heapinfo.useflag */
|
||||
#define _FREEENTRY 0
|
||||
#define _USEDENTRY 1
|
||||
|
||||
#ifndef _HEAPINFO_DEFINED
|
||||
#define _HEAPINFO_DEFINED
|
||||
/* The structure used to walk through the heap with _heapwalk. */
|
||||
typedef struct _heapinfo {
|
||||
int *_pentry;
|
||||
size_t _size;
|
||||
int _useflag;
|
||||
} _HEAPINFO;
|
||||
#endif
|
||||
|
||||
extern unsigned int _amblksiz;
|
||||
|
||||
#define _mm_free(a) _aligned_free(a)
|
||||
#define _mm_malloc(a,b) _aligned_malloc(a,b)
|
||||
|
||||
#ifndef _CRT_ALLOCATION_DEFINED
|
||||
#define _CRT_ALLOCATION_DEFINED
|
||||
void *__cdecl calloc(size_t _NumOfElements,size_t _SizeOfElements);
|
||||
void __cdecl free(void *_Memory);
|
||||
void *__cdecl malloc(size_t _Size);
|
||||
void *__cdecl realloc(void *_Memory,size_t _NewSize);
|
||||
_CRTIMP void *__cdecl _recalloc(void *_Memory,size_t _Count,size_t _Size);
|
||||
_CRTIMP void __cdecl _aligned_free(void *_Memory);
|
||||
_CRTIMP void *__cdecl _aligned_malloc(size_t _Size,size_t _Alignment);
|
||||
_CRTIMP void *__cdecl _aligned_offset_malloc(size_t _Size,size_t _Alignment,size_t _Offset);
|
||||
_CRTIMP void *__cdecl _aligned_realloc(void *_Memory,size_t _Size,size_t _Alignment);
|
||||
_CRTIMP void *__cdecl _aligned_recalloc(void *_Memory,size_t _Count,size_t _Size,size_t _Alignment);
|
||||
_CRTIMP void *__cdecl _aligned_offset_realloc(void *_Memory,size_t _Size,size_t _Alignment,size_t _Offset);
|
||||
_CRTIMP void *__cdecl _aligned_offset_recalloc(void *_Memory,size_t _Count,size_t _Size,size_t _Alignment,size_t _Offset);
|
||||
#endif
|
||||
|
||||
#define _MAX_WAIT_MALLOC_CRT 60000
|
||||
|
||||
_CRTIMP int __cdecl _resetstkoflw (void);
|
||||
_CRTIMP unsigned long __cdecl _set_malloc_crt_max_wait(unsigned long _NewValue);
|
||||
|
||||
_CRTIMP void *__cdecl _expand(void *_Memory,size_t _NewSize);
|
||||
_CRTIMP size_t __cdecl _msize(void *_Memory);
|
||||
#ifdef __GNUC__
|
||||
#undef _alloca
|
||||
#define _alloca(x) __builtin_alloca((x))
|
||||
#else
|
||||
/* tcc implements alloca internally and exposes it (since commit d778bde7).
|
||||
/* alloca is declared at include/stddef.h (which is distributed with tcc).
|
||||
*/
|
||||
#ifdef _alloca
|
||||
#undef _alloca
|
||||
#endif
|
||||
#define _alloca(x) alloca((x))
|
||||
#endif
|
||||
_CRTIMP size_t __cdecl _get_sbh_threshold(void);
|
||||
_CRTIMP int __cdecl _set_sbh_threshold(size_t _NewValue);
|
||||
_CRTIMP errno_t __cdecl _set_amblksiz(size_t _Value);
|
||||
_CRTIMP errno_t __cdecl _get_amblksiz(size_t *_Value);
|
||||
_CRTIMP int __cdecl _heapadd(void *_Memory,size_t _Size);
|
||||
_CRTIMP int __cdecl _heapchk(void);
|
||||
_CRTIMP int __cdecl _heapmin(void);
|
||||
_CRTIMP int __cdecl _heapset(unsigned int _Fill);
|
||||
_CRTIMP int __cdecl _heapwalk(_HEAPINFO *_EntryInfo);
|
||||
_CRTIMP size_t __cdecl _heapused(size_t *_Used,size_t *_Commit);
|
||||
_CRTIMP intptr_t __cdecl _get_heap_handle(void);
|
||||
|
||||
#define _ALLOCA_S_THRESHOLD 1024
|
||||
#define _ALLOCA_S_STACK_MARKER 0xCCCC
|
||||
#define _ALLOCA_S_HEAP_MARKER 0xDDDD
|
||||
|
||||
#if(defined(_X86_) && !defined(__x86_64))
|
||||
#define _ALLOCA_S_MARKER_SIZE 8
|
||||
#elif defined(__ia64__) || defined(__x86_64)
|
||||
#define _ALLOCA_S_MARKER_SIZE 16
|
||||
#endif
|
||||
|
||||
#if !defined(RC_INVOKED)
|
||||
static __inline void *_MarkAllocaS(void *_Ptr,unsigned int _Marker) {
|
||||
if(_Ptr) {
|
||||
*((unsigned int*)_Ptr) = _Marker;
|
||||
_Ptr = (char*)_Ptr + _ALLOCA_S_MARKER_SIZE;
|
||||
}
|
||||
return _Ptr;
|
||||
}
|
||||
#endif
|
||||
|
||||
#undef _malloca
|
||||
#define _malloca(size) \
|
||||
((((size) + _ALLOCA_S_MARKER_SIZE) <= _ALLOCA_S_THRESHOLD) ? \
|
||||
_MarkAllocaS(_alloca((size) + _ALLOCA_S_MARKER_SIZE),_ALLOCA_S_STACK_MARKER) : \
|
||||
_MarkAllocaS(malloc((size) + _ALLOCA_S_MARKER_SIZE),_ALLOCA_S_HEAP_MARKER))
|
||||
#undef _FREEA_INLINE
|
||||
#define _FREEA_INLINE
|
||||
|
||||
#ifndef RC_INVOKED
|
||||
#undef _freea
|
||||
static __inline void __cdecl _freea(void *_Memory) {
|
||||
unsigned int _Marker;
|
||||
if(_Memory) {
|
||||
_Memory = (char*)_Memory - _ALLOCA_S_MARKER_SIZE;
|
||||
_Marker = *(unsigned int *)_Memory;
|
||||
if(_Marker==_ALLOCA_S_HEAP_MARKER) {
|
||||
free(_Memory);
|
||||
}
|
||||
#ifdef _ASSERTE
|
||||
else if(_Marker!=_ALLOCA_S_STACK_MARKER) {
|
||||
_ASSERTE(("Corrupted pointer passed to _freea",0));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif /* RC_INVOKED */
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
#ifdef __GNUC__
|
||||
#undef alloca
|
||||
#define alloca(x) __builtin_alloca((x))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef HEAPHOOK
|
||||
#ifndef _HEAPHOOK_DEFINED
|
||||
#define _HEAPHOOK_DEFINED
|
||||
typedef int (__cdecl *_HEAPHOOK)(int,size_t,void *,void **);
|
||||
#endif
|
||||
|
||||
_CRTIMP _HEAPHOOK __cdecl _setheaphook(_HEAPHOOK _NewHook);
|
||||
|
||||
#define _HEAP_MALLOC 1
|
||||
#define _HEAP_CALLOC 2
|
||||
#define _HEAP_FREE 3
|
||||
#define _HEAP_REALLOC 4
|
||||
#define _HEAP_MSIZE 5
|
||||
#define _HEAP_EXPAND 6
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#endif /* _MALLOC_H_ */
|
|
@ -1,497 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _MATH_H_
|
||||
#define _MATH_H_
|
||||
|
||||
#if __GNUC__ >= 3
|
||||
#pragma GCC system_header
|
||||
#endif
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
struct exception;
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#define _DOMAIN 1
|
||||
#define _SING 2
|
||||
#define _OVERFLOW 3
|
||||
#define _UNDERFLOW 4
|
||||
#define _TLOSS 5
|
||||
#define _PLOSS 6
|
||||
|
||||
#ifndef __STRICT_ANSI__
|
||||
#ifndef NO_OLDNAMES
|
||||
#define DOMAIN _DOMAIN
|
||||
#define SING _SING
|
||||
#define OVERFLOW _OVERFLOW
|
||||
#define UNDERFLOW _UNDERFLOW
|
||||
#define TLOSS _TLOSS
|
||||
#define PLOSS _PLOSS
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef __STRICT_ANSI__
|
||||
#define M_E 2.71828182845904523536
|
||||
#define M_LOG2E 1.44269504088896340736
|
||||
#define M_LOG10E 0.434294481903251827651
|
||||
#define M_LN2 0.693147180559945309417
|
||||
#define M_LN10 2.30258509299404568402
|
||||
#define M_PI 3.14159265358979323846
|
||||
#define M_PI_2 1.57079632679489661923
|
||||
#define M_PI_4 0.785398163397448309616
|
||||
#define M_1_PI 0.318309886183790671538
|
||||
#define M_2_PI 0.636619772367581343076
|
||||
#define M_2_SQRTPI 1.12837916709551257390
|
||||
#define M_SQRT2 1.41421356237309504880
|
||||
#define M_SQRT1_2 0.707106781186547524401
|
||||
#endif
|
||||
|
||||
#ifndef __STRICT_ANSI__
|
||||
/* See also float.h */
|
||||
#ifndef __MINGW_FPCLASS_DEFINED
|
||||
#define __MINGW_FPCLASS_DEFINED 1
|
||||
#define _FPCLASS_SNAN 0x0001 /* Signaling "Not a Number" */
|
||||
#define _FPCLASS_QNAN 0x0002 /* Quiet "Not a Number" */
|
||||
#define _FPCLASS_NINF 0x0004 /* Negative Infinity */
|
||||
#define _FPCLASS_NN 0x0008 /* Negative Normal */
|
||||
#define _FPCLASS_ND 0x0010 /* Negative Denormal */
|
||||
#define _FPCLASS_NZ 0x0020 /* Negative Zero */
|
||||
#define _FPCLASS_PZ 0x0040 /* Positive Zero */
|
||||
#define _FPCLASS_PD 0x0080 /* Positive Denormal */
|
||||
#define _FPCLASS_PN 0x0100 /* Positive Normal */
|
||||
#define _FPCLASS_PINF 0x0200 /* Positive Infinity */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _EXCEPTION_DEFINED
|
||||
#define _EXCEPTION_DEFINED
|
||||
struct _exception {
|
||||
int type;
|
||||
char *name;
|
||||
double arg1;
|
||||
double arg2;
|
||||
double retval;
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifndef _COMPLEX_DEFINED
|
||||
#define _COMPLEX_DEFINED
|
||||
struct _complex {
|
||||
double x,y;
|
||||
};
|
||||
#endif
|
||||
|
||||
#define EDOM 33
|
||||
#define ERANGE 34
|
||||
|
||||
#ifndef _HUGE
|
||||
#ifdef _MSVCRT_
|
||||
extern double *_HUGE;
|
||||
#else
|
||||
extern double *_imp___HUGE;
|
||||
#define _HUGE (*_imp___HUGE)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define HUGE_VAL _HUGE
|
||||
|
||||
#ifndef _CRT_ABS_DEFINED
|
||||
#define _CRT_ABS_DEFINED
|
||||
int __cdecl abs(int _X);
|
||||
long __cdecl labs(long _X);
|
||||
#endif
|
||||
double __cdecl acos(double _X);
|
||||
double __cdecl asin(double _X);
|
||||
double __cdecl atan(double _X);
|
||||
double __cdecl atan2(double _Y,double _X);
|
||||
#ifndef _SIGN_DEFINED
|
||||
#define _SIGN_DEFINED
|
||||
_CRTIMP double __cdecl _copysign (double _Number,double _Sign);
|
||||
_CRTIMP double __cdecl _chgsign (double _X);
|
||||
#endif
|
||||
double __cdecl cos(double _X);
|
||||
double __cdecl cosh(double _X);
|
||||
double __cdecl exp(double _X);
|
||||
double __cdecl expm1(double _X);
|
||||
double __cdecl fabs(double _X);
|
||||
double __cdecl fmod(double _X,double _Y);
|
||||
double __cdecl log(double _X);
|
||||
double __cdecl log10(double _X);
|
||||
double __cdecl pow(double _X,double _Y);
|
||||
double __cdecl sin(double _X);
|
||||
double __cdecl sinh(double _X);
|
||||
double __cdecl tan(double _X);
|
||||
double __cdecl tanh(double _X);
|
||||
double __cdecl sqrt(double _X);
|
||||
#ifndef _CRT_ATOF_DEFINED
|
||||
#define _CRT_ATOF_DEFINED
|
||||
double __cdecl atof(const char *_String);
|
||||
double __cdecl _atof_l(const char *_String,_locale_t _Locale);
|
||||
#endif
|
||||
|
||||
_CRTIMP double __cdecl _cabs(struct _complex _ComplexA);
|
||||
double __cdecl ceil(double _X);
|
||||
double __cdecl floor(double _X);
|
||||
double __cdecl frexp(double _X,int *_Y);
|
||||
double __cdecl _hypot(double _X,double _Y);
|
||||
_CRTIMP double __cdecl _j0(double _X);
|
||||
_CRTIMP double __cdecl _j1(double _X);
|
||||
_CRTIMP double __cdecl _jn(int _X,double _Y);
|
||||
double __cdecl ldexp(double _X,int _Y);
|
||||
#ifndef _CRT_MATHERR_DEFINED
|
||||
#define _CRT_MATHERR_DEFINED
|
||||
int __cdecl _matherr(struct _exception *_Except);
|
||||
#endif
|
||||
double __cdecl modf(double _X,double *_Y);
|
||||
_CRTIMP double __cdecl _y0(double _X);
|
||||
_CRTIMP double __cdecl _y1(double _X);
|
||||
_CRTIMP double __cdecl _yn(int _X,double _Y);
|
||||
|
||||
#if(defined(_X86_) && !defined(__x86_64))
|
||||
_CRTIMP int __cdecl _set_SSE2_enable(int _Flag);
|
||||
/* from libmingwex */
|
||||
float __cdecl _hypotf(float _X,float _Y);
|
||||
#endif
|
||||
|
||||
float frexpf(float _X,int *_Y);
|
||||
float __cdecl ldexpf(float _X,int _Y);
|
||||
long double __cdecl ldexpl(long double _X,int _Y);
|
||||
float __cdecl acosf(float _X);
|
||||
float __cdecl asinf(float _X);
|
||||
float __cdecl atanf(float _X);
|
||||
float __cdecl atan2f(float _X,float _Y);
|
||||
float __cdecl cosf(float _X);
|
||||
float __cdecl sinf(float _X);
|
||||
float __cdecl tanf(float _X);
|
||||
float __cdecl coshf(float _X);
|
||||
float __cdecl sinhf(float _X);
|
||||
float __cdecl tanhf(float _X);
|
||||
float __cdecl expf(float _X);
|
||||
float __cdecl expm1f(float _X);
|
||||
float __cdecl logf(float _X);
|
||||
float __cdecl log10f(float _X);
|
||||
float __cdecl modff(float _X,float *_Y);
|
||||
float __cdecl powf(float _X,float _Y);
|
||||
float __cdecl sqrtf(float _X);
|
||||
float __cdecl ceilf(float _X);
|
||||
float __cdecl floorf(float _X);
|
||||
float __cdecl fmodf(float _X,float _Y);
|
||||
float __cdecl _hypotf(float _X,float _Y);
|
||||
float __cdecl fabsf(float _X);
|
||||
#if !defined(__ia64__)
|
||||
/* from libmingwex */
|
||||
float __cdecl _copysignf (float _Number,float _Sign);
|
||||
float __cdecl _chgsignf (float _X);
|
||||
float __cdecl _logbf(float _X);
|
||||
float __cdecl _nextafterf(float _X,float _Y);
|
||||
int __cdecl _finitef(float _X);
|
||||
int __cdecl _isnanf(float _X);
|
||||
int __cdecl _fpclassf(float _X);
|
||||
#endif
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
#define matherr _matherr
|
||||
|
||||
#define HUGE _HUGE
|
||||
/* double __cdecl cabs(struct _complex _X); */
|
||||
double __cdecl hypot(double _X,double _Y);
|
||||
_CRTIMP double __cdecl j0(double _X);
|
||||
_CRTIMP double __cdecl j1(double _X);
|
||||
_CRTIMP double __cdecl jn(int _X,double _Y);
|
||||
_CRTIMP double __cdecl y0(double _X);
|
||||
_CRTIMP double __cdecl y1(double _X);
|
||||
_CRTIMP double __cdecl yn(int _X,double _Y);
|
||||
#endif
|
||||
|
||||
#ifndef __NO_ISOCEXT
|
||||
#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
|
||||
|| !defined __STRICT_ANSI__ || defined __GLIBCPP__
|
||||
|
||||
#define NAN (0.0F/0.0F)
|
||||
#define HUGE_VALF (1.0F/0.0F)
|
||||
#define HUGE_VALL (1.0L/0.0L)
|
||||
#define INFINITY (1.0F/0.0F)
|
||||
|
||||
|
||||
#define FP_NAN 0x0100
|
||||
#define FP_NORMAL 0x0400
|
||||
#define FP_INFINITE (FP_NAN | FP_NORMAL)
|
||||
#define FP_ZERO 0x4000
|
||||
#define FP_SUBNORMAL (FP_NORMAL | FP_ZERO)
|
||||
/* 0x0200 is signbit mask */
|
||||
|
||||
|
||||
/*
|
||||
We can't __CRT_INLINE float or double, because we want to ensure truncation
|
||||
to semantic type before classification.
|
||||
(A normal long double value might become subnormal when
|
||||
converted to double, and zero when converted to float.)
|
||||
*/
|
||||
|
||||
extern int __cdecl __fpclassifyf (float);
|
||||
extern int __cdecl __fpclassify (double);
|
||||
extern int __cdecl __fpclassifyl (long double);
|
||||
|
||||
/* Implemented at tcc/tcc_libm.h
|
||||
#define fpclassify(x) (sizeof (x) == sizeof (float) ? __fpclassifyf (x) \
|
||||
: sizeof (x) == sizeof (double) ? __fpclassify (x) \
|
||||
: __fpclassifyl (x))
|
||||
*/
|
||||
#define fpclassify(x) \
|
||||
_Generic(x, float: __fpclassifyf, double: __fpclassify, long double: __fpclassifyl)(x)
|
||||
|
||||
/* 7.12.3.2 */
|
||||
#define isfinite(x) ((fpclassify(x) & FP_NAN) == 0)
|
||||
|
||||
/* 7.12.3.3 */
|
||||
#define isinf(x) (fpclassify(x) == FP_INFINITE)
|
||||
|
||||
/* 7.12.3.4 */
|
||||
/* We don't need to worry about truncation here:
|
||||
A NaN stays a NaN. */
|
||||
#define isnan(x) (fpclassify(x) == FP_NAN)
|
||||
|
||||
/* 7.12.3.5 */
|
||||
#define isnormal(x) (fpclassify(x) == FP_NORMAL)
|
||||
|
||||
/* 7.12.3.6 The signbit macro */
|
||||
|
||||
extern int __cdecl __signbitf (float);
|
||||
extern int __cdecl __signbit (double);
|
||||
extern int __cdecl __signbitl (long double);
|
||||
|
||||
/* Implemented at tcc/tcc_libm.h
|
||||
#define signbit(x) (sizeof (x) == sizeof (float) ? __signbitf (x) \
|
||||
: sizeof (x) == sizeof (double) ? __signbit (x) \
|
||||
: __signbitl (x))
|
||||
*/
|
||||
#define signbit(x) \
|
||||
_Generic(x, float: __signbitf, double: __signbit, long double: __signbitl)(x)
|
||||
|
||||
extern double __cdecl exp2(double);
|
||||
extern float __cdecl exp2f(float);
|
||||
extern long double __cdecl exp2l(long double);
|
||||
|
||||
#define FP_ILOGB0 ((int)0x80000000)
|
||||
#define FP_ILOGBNAN ((int)0x80000000)
|
||||
extern int __cdecl ilogb (double);
|
||||
extern int __cdecl ilogbf (float);
|
||||
extern int __cdecl ilogbl (long double);
|
||||
|
||||
extern double __cdecl log1p(double);
|
||||
extern float __cdecl log1pf(float);
|
||||
extern long double __cdecl log1pl(long double);
|
||||
|
||||
extern double __cdecl log2 (double);
|
||||
extern float __cdecl log2f (float);
|
||||
extern long double __cdecl log2l (long double);
|
||||
|
||||
extern double __cdecl logb (double);
|
||||
extern float __cdecl logbf (float);
|
||||
extern long double __cdecl logbl (long double);
|
||||
|
||||
extern long double __cdecl modfl (long double, long double*);
|
||||
|
||||
/* 7.12.6.13 */
|
||||
extern double __cdecl scalbn (double, int);
|
||||
extern float __cdecl scalbnf (float, int);
|
||||
extern long double __cdecl scalbnl (long double, int);
|
||||
|
||||
extern double __cdecl scalbln (double, long);
|
||||
extern float __cdecl scalblnf (float, long);
|
||||
extern long double __cdecl scalblnl (long double, long);
|
||||
|
||||
/* 7.12.7.1 */
|
||||
/* Implementations adapted from Cephes versions */
|
||||
extern double __cdecl cbrt (double);
|
||||
extern float __cdecl cbrtf (float);
|
||||
extern long double __cdecl cbrtl (long double);
|
||||
|
||||
extern double __cdecl hypot (double, double);
|
||||
extern float __cdecl hypotf (float, float);
|
||||
extern long double __cdecl hypotl (long double, long double);
|
||||
|
||||
extern long double __cdecl powl (long double, long double);
|
||||
extern long double __cdecl expl(long double);
|
||||
extern long double __cdecl expm1l(long double);
|
||||
extern long double __cdecl coshl(long double);
|
||||
extern long double __cdecl fabsl (long double);
|
||||
extern long double __cdecl acosl(long double);
|
||||
extern long double __cdecl asinl(long double);
|
||||
extern long double __cdecl atanl(long double);
|
||||
extern long double __cdecl atan2l(long double,long double);
|
||||
extern long double __cdecl sinhl(long double);
|
||||
extern long double __cdecl tanhl(long double);
|
||||
|
||||
/* 7.12.8.1 The erf functions */
|
||||
extern double __cdecl erf (double);
|
||||
extern float __cdecl erff (float);
|
||||
/* TODO
|
||||
extern long double __cdecl erfl (long double);
|
||||
*/
|
||||
|
||||
/* 7.12.8.2 The erfc functions */
|
||||
extern double __cdecl erfc (double);
|
||||
extern float __cdecl erfcf (float);
|
||||
/* TODO
|
||||
extern long double __cdecl erfcl (long double);
|
||||
*/
|
||||
|
||||
/* 7.12.8.3 The lgamma functions */
|
||||
extern double __cdecl lgamma (double);
|
||||
extern float __cdecl lgammaf (float);
|
||||
extern long double __cdecl lgammal (long double);
|
||||
|
||||
/* 7.12.8.4 The tgamma functions */
|
||||
extern double __cdecl tgamma (double);
|
||||
extern float __cdecl tgammaf (float);
|
||||
extern long double __cdecl tgammal (long double);
|
||||
|
||||
extern long double __cdecl ceill (long double);
|
||||
extern long double __cdecl floorl (long double);
|
||||
extern long double __cdecl frexpl(long double,int *);
|
||||
extern long double __cdecl log10l(long double);
|
||||
extern long double __cdecl logl(long double);
|
||||
extern long double __cdecl cosl(long double);
|
||||
extern long double __cdecl sinl(long double);
|
||||
extern long double __cdecl tanl(long double);
|
||||
extern long double sqrtl(long double);
|
||||
|
||||
/* 7.12.9.3 */
|
||||
extern double __cdecl nearbyint ( double);
|
||||
extern float __cdecl nearbyintf (float);
|
||||
extern long double __cdecl nearbyintl (long double);
|
||||
|
||||
/* 7.12.9.4 */
|
||||
/* round, using fpu control word settings */
|
||||
extern double __cdecl rint (double);
|
||||
extern float __cdecl rintf (float);
|
||||
extern long double __cdecl rintl (long double);
|
||||
|
||||
extern long __cdecl lrint (double);
|
||||
extern long __cdecl lrintf (float);
|
||||
extern long __cdecl lrintl (long double);
|
||||
|
||||
extern long long __cdecl llrint (double);
|
||||
extern long long __cdecl llrintf (float);
|
||||
extern long long __cdecl llrintl (long double);
|
||||
|
||||
#define FE_TONEAREST 0x0000
|
||||
#define FE_DOWNWARD 0x0400
|
||||
#define FE_UPWARD 0x0800
|
||||
#define FE_TOWARDZERO 0x0c00
|
||||
|
||||
/* 7.12.9.6 */
|
||||
/* round away from zero, regardless of fpu control word settings */
|
||||
extern double __cdecl round (double);
|
||||
extern float __cdecl roundf (float);
|
||||
extern long double __cdecl roundl (long double);
|
||||
|
||||
/* 7.12.9.7 */
|
||||
extern long __cdecl lround (double);
|
||||
extern long __cdecl lroundf (float);
|
||||
extern long __cdecl lroundl (long double);
|
||||
|
||||
extern long long __cdecl llround (double);
|
||||
extern long long __cdecl llroundf (float);
|
||||
extern long long __cdecl llroundl (long double);
|
||||
|
||||
/* 7.12.9.8 */
|
||||
/* round towards zero, regardless of fpu control word settings */
|
||||
extern double __cdecl trunc (double);
|
||||
extern float __cdecl truncf (float);
|
||||
extern long double __cdecl truncl (long double);
|
||||
|
||||
extern long double __cdecl fmodl (long double, long double);
|
||||
|
||||
/* 7.12.10.2 */
|
||||
extern double __cdecl remainder (double, double);
|
||||
extern float __cdecl remainderf (float, float);
|
||||
extern long double __cdecl remainderl (long double, long double);
|
||||
|
||||
/* 7.12.10.3 */
|
||||
extern double __cdecl remquo(double, double, int *);
|
||||
extern float __cdecl remquof(float, float, int *);
|
||||
extern long double __cdecl remquol(long double, long double, int *);
|
||||
|
||||
/* 7.12.11.1 */
|
||||
extern double __cdecl copysign (double, double); /* in libmoldname.a */
|
||||
extern float __cdecl copysignf (float, float);
|
||||
extern long double __cdecl copysignl (long double, long double);
|
||||
|
||||
/* 7.12.11.2 Return a NaN */
|
||||
extern double __cdecl nan(const char *tagp);
|
||||
extern float __cdecl nanf(const char *tagp);
|
||||
extern long double __cdecl nanl(const char *tagp);
|
||||
|
||||
#ifndef __STRICT_ANSI__
|
||||
#define _nan() nan("")
|
||||
#define _nanf() nanf("")
|
||||
#define _nanl() nanl("")
|
||||
#endif
|
||||
|
||||
/* 7.12.11.3 */
|
||||
extern double __cdecl nextafter (double, double); /* in libmoldname.a */
|
||||
extern float __cdecl nextafterf (float, float);
|
||||
extern long double __cdecl nextafterl (long double, long double);
|
||||
|
||||
/* 7.12.11.4 The nexttoward functions: TODO */
|
||||
|
||||
/* 7.12.12.1 */
|
||||
/* x > y ? (x - y) : 0.0 */
|
||||
extern double __cdecl fdim (double x, double y);
|
||||
extern float __cdecl fdimf (float x, float y);
|
||||
extern long double __cdecl fdiml (long double x, long double y);
|
||||
|
||||
/* fmax and fmin.
|
||||
NaN arguments are treated as missing data: if one argument is a NaN
|
||||
and the other numeric, then these functions choose the numeric
|
||||
value. */
|
||||
|
||||
/* 7.12.12.2 */
|
||||
extern double __cdecl fmax (double, double);
|
||||
extern float __cdecl fmaxf (float, float);
|
||||
extern long double __cdecl fmaxl (long double, long double);
|
||||
|
||||
/* 7.12.12.3 */
|
||||
extern double __cdecl fmin (double, double);
|
||||
extern float __cdecl fminf (float, float);
|
||||
extern long double __cdecl fminl (long double, long double);
|
||||
|
||||
/* 7.12.13.1 */
|
||||
/* return x * y + z as a ternary op */
|
||||
extern double __cdecl fma (double, double, double);
|
||||
extern float __cdecl fmaf (float, float, float);
|
||||
extern long double __cdecl fmal (long double, long double, long double);
|
||||
|
||||
|
||||
#endif /* __STDC_VERSION__ >= 199901L */
|
||||
#endif /* __NO_ISOCEXT */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#pragma pack(pop)
|
||||
|
||||
/* 7.12.14 */
|
||||
/*
|
||||
* With these functions, comparisons involving quiet NaNs set the FP
|
||||
* condition code to "unordered". The IEEE floating-point spec
|
||||
* dictates that the result of floating-point comparisons should be
|
||||
* false whenever a NaN is involved, with the exception of the != op,
|
||||
* which always returns true: yes, (NaN != NaN) is true).
|
||||
*/
|
||||
|
||||
/* Mini libm (inline __fpclassify*, __signbit* and variants) */
|
||||
#include "tcc/tcc_libm.h"
|
||||
|
||||
#endif /* End _MATH_H_ */
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
/*
|
||||
* This file is part of the Mingw32 package.
|
||||
*
|
||||
* mem.h maps to string.h
|
||||
*/
|
||||
#ifndef __STRICT_ANSI__
|
||||
#include <string.h>
|
||||
#endif
|
|
@ -1,40 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_MEMORY
|
||||
#define _INC_MEMORY
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _CONST_RETURN
|
||||
#define _CONST_RETURN
|
||||
#endif
|
||||
|
||||
#define _WConst_return _CONST_RETURN
|
||||
|
||||
#ifndef _CRT_MEMORY_DEFINED
|
||||
#define _CRT_MEMORY_DEFINED
|
||||
_CRTIMP void *__cdecl _memccpy(void *_Dst,const void *_Src,int _Val,size_t _MaxCount);
|
||||
_CONST_RETURN void *__cdecl memchr(const void *_Buf ,int _Val,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _memicmp(const void *_Buf1,const void *_Buf2,size_t _Size);
|
||||
_CRTIMP int __cdecl _memicmp_l(const void *_Buf1,const void *_Buf2,size_t _Size,_locale_t _Locale);
|
||||
int __cdecl memcmp(const void *_Buf1,const void *_Buf2,size_t _Size);
|
||||
void *__cdecl memcpy(void *_Dst,const void *_Src,size_t _Size);
|
||||
void *__cdecl memset(void *_Dst,int _Val,size_t _Size);
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
void *__cdecl memccpy(void *_Dst,const void *_Src,int _Val,size_t _Size);
|
||||
int __cdecl memicmp(const void *_Buf1,const void *_Buf2,size_t _Size);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
|
@ -1,176 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_PROCESS
|
||||
#define _INC_PROCESS
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
/* Includes a definition of _pid_t and pid_t */
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifndef _POSIX_
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define _P_WAIT 0
|
||||
#define _P_NOWAIT 1
|
||||
#define _OLD_P_OVERLAY 2
|
||||
#define _P_NOWAITO 3
|
||||
#define _P_DETACH 4
|
||||
#define _P_OVERLAY 2
|
||||
|
||||
#define _WAIT_CHILD 0
|
||||
#define _WAIT_GRANDCHILD 1
|
||||
|
||||
_CRTIMP uintptr_t __cdecl _beginthread(void (__cdecl *_StartAddress) (void *),unsigned _StackSize,void *_ArgList);
|
||||
_CRTIMP void __cdecl _endthread(void);
|
||||
_CRTIMP uintptr_t __cdecl _beginthreadex(void *_Security,unsigned _StackSize,unsigned (__stdcall *_StartAddress) (void *),void *_ArgList,unsigned _InitFlag,unsigned *_ThrdAddr);
|
||||
_CRTIMP void __cdecl _endthreadex(unsigned _Retval);
|
||||
|
||||
#ifndef _CRT_TERMINATE_DEFINED
|
||||
#define _CRT_TERMINATE_DEFINED
|
||||
void __cdecl __MINGW_NOTHROW exit(int _Code) __MINGW_ATTRIB_NORETURN;
|
||||
_CRTIMP void __cdecl __MINGW_NOTHROW _exit(int _Code) __MINGW_ATTRIB_NORETURN;
|
||||
|
||||
#pragma push_macro("abort")
|
||||
#undef abort
|
||||
void __cdecl __declspec(noreturn) abort(void);
|
||||
#pragma pop_macro("abort")
|
||||
|
||||
#endif
|
||||
|
||||
_CRTIMP void __cdecl __MINGW_NOTHROW _cexit(void);
|
||||
_CRTIMP void __cdecl __MINGW_NOTHROW _c_exit(void);
|
||||
_CRTIMP int __cdecl _getpid(void);
|
||||
_CRTIMP intptr_t __cdecl _cwait(int *_TermStat,intptr_t _ProcHandle,int _Action);
|
||||
_CRTIMP intptr_t __cdecl _execl(const char *_Filename,const char *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _execle(const char *_Filename,const char *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _execlp(const char *_Filename,const char *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _execlpe(const char *_Filename,const char *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _execv(const char *_Filename,const char *const *_ArgList);
|
||||
_CRTIMP intptr_t __cdecl _execve(const char *_Filename,const char *const *_ArgList,const char *const *_Env);
|
||||
_CRTIMP intptr_t __cdecl _execvp(const char *_Filename,const char *const *_ArgList);
|
||||
_CRTIMP intptr_t __cdecl _execvpe(const char *_Filename,const char *const *_ArgList,const char *const *_Env);
|
||||
_CRTIMP intptr_t __cdecl _spawnl(int _Mode,const char *_Filename,const char *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _spawnle(int _Mode,const char *_Filename,const char *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _spawnlp(int _Mode,const char *_Filename,const char *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _spawnlpe(int _Mode,const char *_Filename,const char *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _spawnv(int _Mode,const char *_Filename,const char *const *_ArgList);
|
||||
_CRTIMP intptr_t __cdecl _spawnve(int _Mode,const char *_Filename,const char *const *_ArgList,const char *const *_Env);
|
||||
_CRTIMP intptr_t __cdecl _spawnvp(int _Mode,const char *_Filename,const char *const *_ArgList);
|
||||
_CRTIMP intptr_t __cdecl _spawnvpe(int _Mode,const char *_Filename,const char *const *_ArgList,const char *const *_Env);
|
||||
|
||||
#ifndef _CRT_SYSTEM_DEFINED
|
||||
#define _CRT_SYSTEM_DEFINED
|
||||
int __cdecl system(const char *_Command);
|
||||
#endif
|
||||
|
||||
#ifndef _WPROCESS_DEFINED
|
||||
#define _WPROCESS_DEFINED
|
||||
_CRTIMP intptr_t __cdecl _wexecl(const wchar_t *_Filename,const wchar_t *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _wexecle(const wchar_t *_Filename,const wchar_t *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _wexeclp(const wchar_t *_Filename,const wchar_t *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _wexeclpe(const wchar_t *_Filename,const wchar_t *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _wexecv(const wchar_t *_Filename,const wchar_t *const *_ArgList);
|
||||
_CRTIMP intptr_t __cdecl _wexecve(const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
|
||||
_CRTIMP intptr_t __cdecl _wexecvp(const wchar_t *_Filename,const wchar_t *const *_ArgList);
|
||||
_CRTIMP intptr_t __cdecl _wexecvpe(const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
|
||||
_CRTIMP intptr_t __cdecl _wspawnl(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _wspawnle(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _wspawnlp(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _wspawnlpe(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _wspawnv(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList);
|
||||
_CRTIMP intptr_t __cdecl _wspawnve(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
|
||||
_CRTIMP intptr_t __cdecl _wspawnvp(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList);
|
||||
_CRTIMP intptr_t __cdecl _wspawnvpe(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
|
||||
#ifndef _CRT_WSYSTEM_DEFINED
|
||||
#define _CRT_WSYSTEM_DEFINED
|
||||
_CRTIMP int __cdecl _wsystem(const wchar_t *_Command);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
void __cdecl __security_init_cookie(void);
|
||||
#if (defined(_X86_) && !defined(__x86_64))
|
||||
void __fastcall __security_check_cookie(uintptr_t _StackCookie);
|
||||
__declspec(noreturn) void __cdecl __report_gsfailure(void);
|
||||
#else
|
||||
void __cdecl __security_check_cookie(uintptr_t _StackCookie);
|
||||
__declspec(noreturn) void __cdecl __report_gsfailure(uintptr_t _StackCookie);
|
||||
#endif
|
||||
extern uintptr_t __security_cookie;
|
||||
|
||||
intptr_t __cdecl _loaddll(char *_Filename);
|
||||
int __cdecl _unloaddll(intptr_t _Handle);
|
||||
int (__cdecl *__cdecl _getdllprocaddr(intptr_t _Handle,char *_ProcedureName,intptr_t _Ordinal))(void);
|
||||
|
||||
#ifdef _DECL_DLLMAIN
|
||||
#ifdef _WINDOWS_
|
||||
WINBOOL WINAPI DllMain(HANDLE _HDllHandle,DWORD _Reason,LPVOID _Reserved);
|
||||
WINBOOL WINAPI _CRT_INIT(HANDLE _HDllHandle,DWORD _Reason,LPVOID _Reserved);
|
||||
WINBOOL WINAPI _wCRT_INIT(HANDLE _HDllHandle,DWORD _Reason,LPVOID _Reserved);
|
||||
extern WINBOOL (WINAPI *const _pRawDllMain)(HANDLE,DWORD,LPVOID);
|
||||
#else
|
||||
int __stdcall DllMain(void *_HDllHandle,unsigned _Reason,void *_Reserved);
|
||||
int __stdcall _CRT_INIT(void *_HDllHandle,unsigned _Reason,void *_Reserved);
|
||||
int __stdcall _wCRT_INIT(void *_HDllHandle,unsigned _Reason,void *_Reserved);
|
||||
extern int (__stdcall *const _pRawDllMain)(void *,unsigned,void *);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
#define P_WAIT _P_WAIT
|
||||
#define P_NOWAIT _P_NOWAIT
|
||||
#define P_OVERLAY _P_OVERLAY
|
||||
#define OLD_P_OVERLAY _OLD_P_OVERLAY
|
||||
#define P_NOWAITO _P_NOWAITO
|
||||
#define P_DETACH _P_DETACH
|
||||
#define WAIT_CHILD _WAIT_CHILD
|
||||
#define WAIT_GRANDCHILD _WAIT_GRANDCHILD
|
||||
|
||||
intptr_t __cdecl cwait(int *_TermStat,intptr_t _ProcHandle,int _Action);
|
||||
#ifdef __GNUC__
|
||||
int __cdecl execl(const char *_Filename,const char *_ArgList,...);
|
||||
int __cdecl execle(const char *_Filename,const char *_ArgList,...);
|
||||
int __cdecl execlp(const char *_Filename,const char *_ArgList,...);
|
||||
int __cdecl execlpe(const char *_Filename,const char *_ArgList,...);
|
||||
#else
|
||||
intptr_t __cdecl execl(const char *_Filename,const char *_ArgList,...);
|
||||
intptr_t __cdecl execle(const char *_Filename,const char *_ArgList,...);
|
||||
intptr_t __cdecl execlp(const char *_Filename,const char *_ArgList,...);
|
||||
intptr_t __cdecl execlpe(const char *_Filename,const char *_ArgList,...);
|
||||
#endif
|
||||
intptr_t __cdecl spawnl(int,const char *_Filename,const char *_ArgList,...);
|
||||
intptr_t __cdecl spawnle(int,const char *_Filename,const char *_ArgList,...);
|
||||
intptr_t __cdecl spawnlp(int,const char *_Filename,const char *_ArgList,...);
|
||||
intptr_t __cdecl spawnlpe(int,const char *_Filename,const char *_ArgList,...);
|
||||
int __cdecl getpid(void);
|
||||
#ifdef __GNUC__
|
||||
/* Those methods are predefined by gcc builtins to return int. So to prevent
|
||||
stupid warnings, define them in POSIX way. This is save, because those
|
||||
methods do not return in success case, so that the return value is not
|
||||
really dependent to its scalar width. */
|
||||
int __cdecl execv(const char *_Filename,const char *const _ArgList[]);
|
||||
int __cdecl execve(const char *_Filename,const char *const _ArgList[],const char *const _Env[]);
|
||||
int __cdecl execvp(const char *_Filename,const char *const _ArgList[]);
|
||||
int __cdecl execvpe(const char *_Filename,const char *const _ArgList[],const char *const _Env[]);
|
||||
#else
|
||||
intptr_t __cdecl execv(const char *_Filename,const char *const _ArgList[]);
|
||||
intptr_t __cdecl execve(const char *_Filename,const char *const _ArgList[],const char *const _Env[]);
|
||||
intptr_t __cdecl execvp(const char *_Filename,const char *const _ArgList[]);
|
||||
intptr_t __cdecl execvpe(const char *_Filename,const char *const _ArgList[],const char *const _Env[]);
|
||||
#endif
|
||||
intptr_t __cdecl spawnv(int,const char *_Filename,const char *const _ArgList[]);
|
||||
intptr_t __cdecl spawnve(int,const char *_Filename,const char *const _ArgList[],const char *const _Env[]);
|
||||
intptr_t __cdecl spawnvp(int,const char *_Filename,const char *const _ArgList[]);
|
||||
intptr_t __cdecl spawnvpe(int,const char *_Filename,const char *const _ArgList[],char *const _Env[]);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
|
@ -1,42 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
|
||||
#ifndef _INC_CONIO_S
|
||||
#define _INC_CONIO_S
|
||||
|
||||
#include <conio.h>
|
||||
|
||||
#if defined(MINGW_HAS_SECURE_API)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
_CRTIMP errno_t __cdecl _cgets_s(char *_Buffer,size_t _Size,size_t *_SizeRead);
|
||||
_CRTIMP int __cdecl _cprintf_s(const char *_Format,...);
|
||||
_CRTIMP int __cdecl _cscanf_s(const char *_Format,...);
|
||||
_CRTIMP int __cdecl _cscanf_s_l(const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vcprintf_s(const char *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _cprintf_s_l(const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vcprintf_s_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
|
||||
#ifndef _WCONIO_DEFINED_S
|
||||
#define _WCONIO_DEFINED_S
|
||||
_CRTIMP errno_t __cdecl _cgetws_s(wchar_t *_Buffer,size_t _SizeInWords,size_t *_SizeRead);
|
||||
_CRTIMP int __cdecl _cwprintf_s(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _cwscanf_s(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _cwscanf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vcwprintf_s(const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _cwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vcwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
|
@ -1,19 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
|
||||
#ifndef _INC_CRTDBG_S
|
||||
#define _INC_CRTDBG_S
|
||||
|
||||
#include <crtdbg.h>
|
||||
|
||||
#if defined(MINGW_HAS_SECURE_API)
|
||||
|
||||
#define _dupenv_s_dbg(ps1,size,s2,t,f,l) _dupenv_s(ps1,size,s2)
|
||||
#define _wdupenv_s_dbg(ps1,size,s2,t,f,l) _wdupenv_s(ps1,size,s2)
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -1,33 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_IO_S
|
||||
#define _INC_IO_S
|
||||
|
||||
#include <io.h>
|
||||
|
||||
#if defined(MINGW_HAS_SECURE_API)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
_CRTIMP errno_t __cdecl _access_s(const char *_Filename,int _AccessMode);
|
||||
_CRTIMP errno_t __cdecl _chsize_s(int _FileHandle,__int64 _Size);
|
||||
_CRTIMP errno_t __cdecl _mktemp_s(char *_TemplateName,size_t _Size);
|
||||
_CRTIMP errno_t __cdecl _umask_s(int _NewMode,int *_OldMode);
|
||||
|
||||
#ifndef _WIO_S_DEFINED
|
||||
#define _WIO_S_DEFINED
|
||||
_CRTIMP errno_t __cdecl _waccess_s(const wchar_t *_Filename,int _AccessMode);
|
||||
_CRTIMP errno_t __cdecl _wmktemp_s(wchar_t *_TemplateName,size_t _SizeInWords);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
|
@ -1,52 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_MBSTRING_S
|
||||
#define _INC_MBSTRING_S
|
||||
|
||||
#include <mbstring.h>
|
||||
|
||||
#if defined(MINGW_HAS_SECURE_API)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _MBSTRING_S_DEFINED
|
||||
#define _MBSTRING_S_DEFINED
|
||||
_CRTIMP errno_t __cdecl _mbscat_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src);
|
||||
_CRTIMP errno_t __cdecl _mbscat_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl _mbscpy_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src);
|
||||
_CRTIMP errno_t __cdecl _mbscpy_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl _mbslwr_s(unsigned char *_Str,size_t _SizeInBytes);
|
||||
_CRTIMP errno_t __cdecl _mbslwr_s_l(unsigned char *_Str,size_t _SizeInBytes,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl _mbsnbcat_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount);
|
||||
_CRTIMP errno_t __cdecl _mbsnbcat_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl _mbsnbcpy_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount);
|
||||
_CRTIMP errno_t __cdecl _mbsnbcpy_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl _mbsnbset_s(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Ch,size_t _MaxCount);
|
||||
_CRTIMP errno_t __cdecl _mbsnbset_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Ch,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl _mbsncat_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount);
|
||||
_CRTIMP errno_t __cdecl _mbsncat_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl _mbsncpy_s(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount);
|
||||
_CRTIMP errno_t __cdecl _mbsncpy_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,const unsigned char *_Src,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl _mbsnset_s(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Val,size_t _MaxCount);
|
||||
_CRTIMP errno_t __cdecl _mbsnset_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Val,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl _mbsset_s(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Val);
|
||||
_CRTIMP errno_t __cdecl _mbsset_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,unsigned int _Val,_locale_t _Locale);
|
||||
_CRTIMP unsigned char *__cdecl _mbstok_s(unsigned char *_Str,const unsigned char *_Delim,unsigned char **_Context);
|
||||
_CRTIMP unsigned char *__cdecl _mbstok_s_l(unsigned char *_Str,const unsigned char *_Delim,unsigned char **_Context,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl _mbsupr_s(unsigned char *_Str,size_t _SizeInBytes);
|
||||
_CRTIMP errno_t __cdecl _mbsupr_s_l(unsigned char *_Str,size_t _SizeInBytes,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl _mbccpy_s(unsigned char *_Dst,size_t _DstSizeInBytes,int *_PCopied,const unsigned char *_Src);
|
||||
_CRTIMP errno_t __cdecl _mbccpy_s_l(unsigned char *_Dst,size_t _DstSizeInBytes,int *_PCopied,const unsigned char *_Src,_locale_t _Locale);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
|
@ -1,25 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_SEARCH_S
|
||||
#define _INC_SEARCH_S
|
||||
|
||||
#include <search.h>
|
||||
|
||||
#if defined(MINGW_HAS_SECURE_API)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
_CRTIMP void *__cdecl _lfind_s(const void *_Key,const void *_Base,unsigned int *_NumOfElements,size_t _SizeOfElements,int (__cdecl *_PtFuncCompare)(void *,const void *,const void *),void *_Context);
|
||||
_CRTIMP void *__cdecl _lsearch_s(const void *_Key,void *_Base,unsigned int *_NumOfElements,size_t _SizeOfElements,int (__cdecl *_PtFuncCompare)(void *,const void *,const void *),void *_Context);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
|
@ -1,145 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_STDIO_S
|
||||
#define _INC_STDIO_S
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined(MINGW_HAS_SECURE_API)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _STDIO_S_DEFINED
|
||||
#define _STDIO_S_DEFINED
|
||||
_CRTIMP errno_t __cdecl clearerr_s(FILE *_File);
|
||||
int __cdecl fprintf_s(FILE *_File,const char *_Format,...);
|
||||
size_t __cdecl fread_s(void *_DstBuf,size_t _DstSize,size_t _ElementSize,size_t _Count,FILE *_File);
|
||||
_CRTIMP int __cdecl _fscanf_s_l(FILE *_File,const char *_Format,_locale_t _Locale,...);
|
||||
int __cdecl printf_s(const char *_Format,...);
|
||||
_CRTIMP int __cdecl _scanf_l(const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _scanf_s_l(const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _snprintf_s(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,...);
|
||||
_CRTIMP int __cdecl _snprintf_c(char *_DstBuf,size_t _MaxCount,const char *_Format,...);
|
||||
_CRTIMP int __cdecl _vsnprintf_c(char *_DstBuf,size_t _MaxCount,const char *_Format,va_list _ArgList);
|
||||
int __cdecl sprintf_s(char *_DstBuf,size_t _DstSize,const char *_Format,...);
|
||||
_CRTIMP int __cdecl _fscanf_l(FILE *_File,const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _sscanf_l(const char *_Src,const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _sscanf_s_l(const char *_Src,const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _snscanf_s(const char *_Src,size_t _MaxCount,const char *_Format,...);
|
||||
_CRTIMP int __cdecl _snscanf_l(const char *_Src,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _snscanf_s_l(const char *_Src,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
|
||||
int __cdecl vfprintf_s(FILE *_File,const char *_Format,va_list _ArgList);
|
||||
int __cdecl vprintf_s(const char *_Format,va_list _ArgList);
|
||||
int __cdecl vsnprintf_s(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vsnprintf_s(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,va_list _ArgList);
|
||||
int __cdecl vsprintf_s(char *_DstBuf,size_t _Size,const char *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _fprintf_p(FILE *_File,const char *_Format,...);
|
||||
_CRTIMP int __cdecl _printf_p(const char *_Format,...);
|
||||
_CRTIMP int __cdecl _sprintf_p(char *_Dst,size_t _MaxCount,const char *_Format,...);
|
||||
_CRTIMP int __cdecl _vfprintf_p(FILE *_File,const char *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vprintf_p(const char *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vsprintf_p(char *_Dst,size_t _MaxCount,const char *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _scprintf_p(const char *_Format,...);
|
||||
_CRTIMP int __cdecl _vscprintf_p(const char *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _printf_l(const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _printf_p_l(const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vprintf_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vprintf_p_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _fprintf_l(FILE *_File,const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _fprintf_p_l(FILE *_File,const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vfprintf_l(FILE *_File,const char *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vfprintf_p_l(FILE *_File,const char *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _sprintf_l(char *_DstBuf,const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _sprintf_p_l(char *_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vsprintf_l(char *_DstBuf,const char *_Format,_locale_t,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vsprintf_p_l(char *_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _scprintf_l(const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _scprintf_p_l(const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vscprintf_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vscprintf_p_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _printf_s_l(const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vprintf_s_l(const char *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _fprintf_s_l(FILE *_File,const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vfprintf_s_l(FILE *_File,const char *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _sprintf_s_l(char *_DstBuf,size_t _DstSize,const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vsprintf_s_l(char *_DstBuf,size_t _DstSize,const char *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _snprintf_s_l(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vsnprintf_s_l(char *_DstBuf,size_t _DstSize,size_t _MaxCount,const char *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _snprintf_l(char *_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _snprintf_c_l(char *_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vsnprintf_l(char *_DstBuf,size_t _MaxCount,const char *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vsnprintf_c_l(char *_DstBuf,size_t _MaxCount,const char *,_locale_t _Locale,va_list _ArgList);
|
||||
|
||||
#ifndef _WSTDIO_S_DEFINED
|
||||
#define _WSTDIO_S_DEFINED
|
||||
_CRTIMP wchar_t *__cdecl _getws_s(wchar_t *_Str,size_t _SizeInWords);
|
||||
int __cdecl fwprintf_s(FILE *_File,const wchar_t *_Format,...);
|
||||
int __cdecl wprintf_s(const wchar_t *_Format,...);
|
||||
int __cdecl vwprintf_s(const wchar_t *_Format,va_list _ArgList);
|
||||
int __cdecl swprintf_s(wchar_t *_Dst,size_t _SizeInWords,const wchar_t *_Format,...);
|
||||
int __cdecl vswprintf_s(wchar_t *_Dst,size_t _SizeInWords,const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _snwprintf_s(wchar_t *_DstBuf,size_t _DstSizeInWords,size_t _MaxCount,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _vsnwprintf_s(wchar_t *_DstBuf,size_t _DstSizeInWords,size_t _MaxCount,const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _wprintf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _fwprintf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vfwprintf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _swprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vswprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _snwprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vsnwprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _fwscanf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _swscanf_s_l(const wchar_t *_Src,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _snwscanf_s(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _snwscanf_s_l(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _wscanf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP errno_t __cdecl _wfopen_s(FILE **_File,const wchar_t *_Filename,const wchar_t *_Mode);
|
||||
_CRTIMP errno_t __cdecl _wfreopen_s(FILE **_File,const wchar_t *_Filename,const wchar_t *_Mode,FILE *_OldFile);
|
||||
_CRTIMP errno_t __cdecl _wtmpnam_s(wchar_t *_DstBuf,size_t _SizeInWords);
|
||||
_CRTIMP int __cdecl _fwprintf_p(FILE *_File,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _wprintf_p(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _vfwprintf_p(FILE *_File,const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vwprintf_p(const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _swprintf_p(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _vswprintf_p(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _scwprintf_p(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _vscwprintf_p(const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _wprintf_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _wprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _fwprintf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _fwprintf_p_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vfwprintf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vfwprintf_p_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _swprintf_c_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _swprintf_p_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vswprintf_c_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vswprintf_p_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _scwprintf_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _scwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vscwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _snwprintf_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vsnwprintf_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl __swprintf_l(wchar_t *_Dest,const wchar_t *_Format,_locale_t _Plocinfo,...);
|
||||
_CRTIMP int __cdecl __vswprintf_l(wchar_t *_Dest,const wchar_t *_Format,_locale_t _Plocinfo,va_list _Args);
|
||||
_CRTIMP int __cdecl _vscwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _fwscanf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _swscanf_l(const wchar_t *_Src,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _snwscanf_l(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _wscanf_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
_CRTIMP size_t __cdecl _fread_nolock_s(void *_DstBuf,size_t _DstSize,size_t _ElementSize,size_t _Count,FILE *_File);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
|
@ -1,67 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_STDLIB_S
|
||||
#define _INC_STDLIB_S
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#if defined(MINGW_HAS_SECURE_API)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
_CRTIMP errno_t __cdecl _dupenv_s(char **_PBuffer,size_t *_PBufferSizeInBytes,const char *_VarName);
|
||||
_CRTIMP errno_t __cdecl _itoa_s(int _Value,char *_DstBuf,size_t _Size,int _Radix);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP errno_t __cdecl _i64toa_s(__int64 _Val,char *_DstBuf,size_t _Size,int _Radix);
|
||||
_CRTIMP errno_t __cdecl _ui64toa_s(unsigned __int64 _Val,char *_DstBuf,size_t _Size,int _Radix);
|
||||
#endif
|
||||
_CRTIMP errno_t __cdecl _ltoa_s(long _Val,char *_DstBuf,size_t _Size,int _Radix);
|
||||
_CRTIMP errno_t __cdecl mbstowcs_s(size_t *_PtNumOfCharConverted,wchar_t *_DstBuf,size_t _SizeInWords,const char *_SrcBuf,size_t _MaxCount);
|
||||
_CRTIMP errno_t __cdecl _mbstowcs_s_l(size_t *_PtNumOfCharConverted,wchar_t *_DstBuf,size_t _SizeInWords,const char *_SrcBuf,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl _ultoa_s(unsigned long _Val,char *_DstBuf,size_t _Size,int _Radix);
|
||||
_CRTIMP errno_t __cdecl _wctomb_s_l(int *_SizeConverted,char *_MbCh,size_t _SizeInBytes,wchar_t _WCh,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl wcstombs_s(size_t *_PtNumOfCharConverted,char *_Dst,size_t _DstSizeInBytes,const wchar_t *_Src,size_t _MaxCountInBytes);
|
||||
_CRTIMP errno_t __cdecl _wcstombs_s_l(size_t *_PtNumOfCharConverted,char *_Dst,size_t _DstSizeInBytes,const wchar_t *_Src,size_t _MaxCountInBytes,_locale_t _Locale);
|
||||
|
||||
#ifndef _WSTDLIB_S_DEFINED
|
||||
#define _WSTDLIB_S_DEFINED
|
||||
_CRTIMP errno_t __cdecl _itow_s (int _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
|
||||
_CRTIMP errno_t __cdecl _ltow_s (long _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
|
||||
_CRTIMP errno_t __cdecl _ultow_s (unsigned long _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
|
||||
_CRTIMP errno_t __cdecl _wgetenv_s(size_t *_ReturnSize,wchar_t *_DstBuf,size_t _DstSizeInWords,const wchar_t *_VarName);
|
||||
_CRTIMP errno_t __cdecl _wdupenv_s(wchar_t **_Buffer,size_t *_BufferSizeInWords,const wchar_t *_VarName);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP errno_t __cdecl _i64tow_s(__int64 _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
|
||||
_CRTIMP errno_t __cdecl _ui64tow_s(unsigned __int64 _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _POSIX_
|
||||
_CRTIMP errno_t __cdecl _ecvt_s(char *_DstBuf,size_t _Size,double _Val,int _NumOfDights,int *_PtDec,int *_PtSign);
|
||||
_CRTIMP errno_t __cdecl _fcvt_s(char *_DstBuf,size_t _Size,double _Val,int _NumOfDec,int *_PtDec,int *_PtSign);
|
||||
_CRTIMP errno_t __cdecl _gcvt_s(char *_DstBuf,size_t _Size,double _Val,int _NumOfDigits);
|
||||
_CRTIMP errno_t __cdecl _makepath_s(char *_PathResult,size_t _Size,const char *_Drive,const char *_Dir,const char *_Filename,const char *_Ext);
|
||||
_CRTIMP errno_t __cdecl _putenv_s(const char *_Name,const char *_Value);
|
||||
_CRTIMP errno_t __cdecl _searchenv_s(const char *_Filename,const char *_EnvVar,char *_ResultPath,size_t _SizeInBytes);
|
||||
_CRTIMP errno_t __cdecl _splitpath_s(const char *_FullPath,char *_Drive,size_t _DriveSize,char *_Dir,size_t _DirSize,char *_Filename,size_t _FilenameSize,char *_Ext,size_t _ExtSize);
|
||||
|
||||
#ifndef _WSTDLIBP_S_DEFINED
|
||||
#define _WSTDLIBP_S_DEFINED
|
||||
_CRTIMP errno_t __cdecl _wmakepath_s(wchar_t *_PathResult,size_t _SizeInWords,const wchar_t *_Drive,const wchar_t *_Dir,const wchar_t *_Filename,const wchar_t *_Ext);
|
||||
_CRTIMP errno_t __cdecl _wputenv_s(const wchar_t *_Name,const wchar_t *_Value);
|
||||
_CRTIMP errno_t __cdecl _wsearchenv_s(const wchar_t *_Filename,const wchar_t *_EnvVar,wchar_t *_ResultPath,size_t _SizeInWords);
|
||||
_CRTIMP errno_t __cdecl _wsplitpath_s(const wchar_t *_FullPath,wchar_t *_Drive,size_t _DriveSizeInWords,wchar_t *_Dir,size_t _DirSizeInWords,wchar_t *_Filename,size_t _FilenameSizeInWords,wchar_t *_Ext,size_t _ExtSizeInWords);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
|
@ -1,30 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef __STRALIGN_H_S_
|
||||
#define __STRALIGN_H_S_
|
||||
|
||||
#include <stralign.h>
|
||||
|
||||
#if defined(MINGW_HAS_SECURE_API)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if !defined(I_X86_) && defined(_WSTRING_S_DEFINED)
|
||||
#if defined(__cplusplus) && defined(_WConst_Return)
|
||||
static __inline PUWSTR ua_wcscpy_s(PUWSTR Destination,size_t DestinationSize,PCUWSTR Source) {
|
||||
if(WSTR_ALIGNED(Source) && WSTR_ALIGNED(Destination)) return (wcscpy_s((PWSTR)Destination,DestinationSize,(PCWSTR)Source)==0 ? Destination : NULL);
|
||||
return uaw_wcscpy((PCUWSTR)String,Character);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
|
@ -1,41 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_STRING_S
|
||||
#define _INC_STRING_S
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#if defined(MINGW_HAS_SECURE_API)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
_CRTIMP errno_t __cdecl _strset_s(char *_Dst,size_t _DstSize,int _Value);
|
||||
_CRTIMP errno_t __cdecl _strerror_s(char *_Buf,size_t _SizeInBytes,const char *_ErrMsg);
|
||||
_CRTIMP errno_t __cdecl _strlwr_s(char *_Str,size_t _Size);
|
||||
_CRTIMP errno_t __cdecl _strlwr_s_l(char *_Str,size_t _Size,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl _strnset_s(char *_Str,size_t _Size,int _Val,size_t _MaxCount);
|
||||
_CRTIMP errno_t __cdecl _strupr_s(char *_Str,size_t _Size);
|
||||
_CRTIMP errno_t __cdecl _strupr_s_l(char *_Str,size_t _Size,_locale_t _Locale);
|
||||
#ifndef _WSTRING_S_DEFINED
|
||||
#define _WSTRING_S_DEFINED
|
||||
_CRTIMP wchar_t *__cdecl wcstok_s(wchar_t *_Str,const wchar_t *_Delim,wchar_t **_Context);
|
||||
_CRTIMP errno_t __cdecl _wcserror_s(wchar_t *_Buf,size_t _SizeInWords,int _ErrNum);
|
||||
_CRTIMP errno_t __cdecl __wcserror_s(wchar_t *_Buffer,size_t _SizeInWords,const wchar_t *_ErrMsg);
|
||||
_CRTIMP errno_t __cdecl _wcsnset_s(wchar_t *_Dst,size_t _DstSizeInWords,wchar_t _Val,size_t _MaxCount);
|
||||
_CRTIMP errno_t __cdecl _wcsset_s(wchar_t *_Str,size_t _SizeInWords,wchar_t _Val);
|
||||
_CRTIMP errno_t __cdecl _wcslwr_s(wchar_t *_Str,size_t _SizeInWords);
|
||||
_CRTIMP errno_t __cdecl _wcslwr_s_l(wchar_t *_Str,size_t _SizeInWords,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl _wcsupr_s(wchar_t *_Str,size_t _Size);
|
||||
_CRTIMP errno_t __cdecl _wcsupr_s_l(wchar_t *_Str,size_t _Size,_locale_t _Locale);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
|
@ -1,34 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
|
||||
#ifndef _TIMEB_H_S
|
||||
#define _TIMEB_H_S
|
||||
|
||||
#include <sys/timeb.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if defined(MINGW_HAS_SECURE_API)
|
||||
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
#define _ftime_s _ftime32_s
|
||||
#else
|
||||
#define _ftime_s _ftime64_s
|
||||
#endif
|
||||
|
||||
_CRTIMP errno_t __cdecl _ftime32_s(struct __timeb32 *_Time);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP errno_t __cdecl _ftime64_s(struct __timeb64 *_Time);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -1,266 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_TCHAR_S
|
||||
#define _INC_TCHAR_S
|
||||
|
||||
#include <tchar.h>
|
||||
|
||||
#if defined(MINGW_HAS_SECURE_API)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef _UNICODE
|
||||
|
||||
#define _tprintf_s wprintf_s
|
||||
#define _tprintf_s_l _wprintf_s_l
|
||||
#define _tcprintf_s _cwprintf_s
|
||||
#define _tcprintf_s_l _cwprintf_s_l
|
||||
#define _vtcprintf_s _vcwprintf_s
|
||||
#define _vtcprintf_s_l _vcwprintf_s_l
|
||||
#define _ftprintf_s fwprintf_s
|
||||
#define _ftprintf_s_l _fwprintf_s_l
|
||||
#define _stprintf_s swprintf_s
|
||||
#define _stprintf_s_l _swprintf_s_l
|
||||
#define _sntprintf_s _snwprintf_s
|
||||
#define _sntprintf_s_l _snwprintf_s_l
|
||||
#define _vtprintf_s vwprintf_s
|
||||
#define _vtprintf_s_l _vwprintf_s_l
|
||||
#define _vftprintf_s vfwprintf_s
|
||||
#define _vftprintf_s_l _vfwprintf_s_l
|
||||
#define _vstprintf_s vswprintf_s
|
||||
#define _vstprintf_s_l _vswprintf_s_l
|
||||
#define _vsntprintf_s _vsnwprintf_s
|
||||
#define _vsntprintf_s_l _vsnwprintf_s_l
|
||||
|
||||
#define _tscanf_s wscanf_s
|
||||
#define _tscanf_s_l _wscanf_s_l
|
||||
#define _tcscanf_s _cwscanf_s
|
||||
#define _tcscanf_s_l _cwscanf_s_l
|
||||
#define _ftscanf_s fwscanf_s
|
||||
#define _ftscanf_s_l _fwscanf_s_l
|
||||
#define _stscanf_s swscanf_s
|
||||
#define _stscanf_s_l _swscanf_s_l
|
||||
#define _sntscanf_s _snwscanf_s
|
||||
#define _sntscanf_s_l _snwscanf_s_l
|
||||
|
||||
#define _cgetts_s _cgetws_s
|
||||
#define _getts_s _getws_s
|
||||
|
||||
#define _itot_s _itow_s
|
||||
#define _ltot_s _ltow_s
|
||||
#define _ultot_s _ultow_s
|
||||
#define _i64tot_s _i64tow_s
|
||||
#define _ui64tot_s _ui64tow_s
|
||||
|
||||
#define _tcscat_s wcscat_s
|
||||
#define _tcscpy_s wcscpy_s
|
||||
#define _tcsncat_s wcsncat_s
|
||||
#define _tcsncat_s_l _wcsncat_s_l
|
||||
#define _tcsncpy_s wcsncpy_s
|
||||
#define _tcsncpy_s_l _wcsncpy_s_l
|
||||
#define _tcstok_s wcstok_s
|
||||
#define _tcstok_s_l _wcstok_s_l
|
||||
#define _tcserror_s _wcserror_s
|
||||
#define __tcserror_s __wcserror_s
|
||||
|
||||
#define _tcsnset_s _wcsnset_s
|
||||
#define _tcsnset_s_l _wcsnset_s_l
|
||||
#define _tcsset_s _wcsset_s
|
||||
#define _tcsset_s_l _wcsset_s_l
|
||||
|
||||
#define _tasctime_s _wasctime_s
|
||||
#define _tctime_s _wctime_s
|
||||
#define _tctime32_s _wctime32_s
|
||||
#define _tctime64_s _wctime64_s
|
||||
#define _tstrdate_s _wstrdate_s
|
||||
#define _tstrtime_s _wstrtime_s
|
||||
|
||||
#define _tgetenv_s _wgetenv_s
|
||||
#define _tdupenv_s _wdupenv_s
|
||||
#define _tmakepath_s _wmakepath_s
|
||||
#define _tputenv_s _wputenv_s
|
||||
#define _tsearchenv_s _wsearchenv_s
|
||||
#define _tsplitpath_s _wsplitpath_s
|
||||
|
||||
#define _tfopen_s _wfopen_s
|
||||
#define _tfreopen_s _wfreopen_s
|
||||
#define _ttmpnam_s _wtmpnam_s
|
||||
#define _taccess_s _waccess_s
|
||||
#define _tmktemp_s _wmktemp_s
|
||||
|
||||
#define _tcsnccat_s wcsncat_s
|
||||
#define _tcsnccat_s_l _wcsncat_s_l
|
||||
#define _tcsnccpy_s wcsncpy_s
|
||||
#define _tcsnccpy_s_l _wcsncpy_s_l
|
||||
|
||||
#define _tcslwr_s _wcslwr_s
|
||||
#define _tcslwr_s_l _wcslwr_s_l
|
||||
#define _tcsupr_s _wcsupr_s
|
||||
#define _tcsupr_s_l _wcsupr_s_l
|
||||
|
||||
#define _wcstok_s_l(_String,_Delimiters,_Current_position,_Locale) (wcstok_s(_String,_Delimiters,_Current_position))
|
||||
#define _wcsnset_s_l(_Destination,_Destination_size_chars,_Value,_Count,_Locale) (_wcsnset_s(_Destination,_Destination_size_chars,_Value,_Count))
|
||||
#define _wcsset_s_l(_Destination,_Destination_size_chars,_Value,_Locale) (_wcsset_s(_Destination,_Destination_size_chars,_Value))
|
||||
|
||||
#else
|
||||
|
||||
#define _tprintf_s printf_s
|
||||
#define _tprintf_s_l _printf_s_l
|
||||
#define _tcprintf_s _cprintf_s
|
||||
#define _tcprintf_s_l _cprintf_s_l
|
||||
#define _vtcprintf_s _vcprintf_s
|
||||
#define _vtcprintf_s_l _vcprintf_s_l
|
||||
#define _ftprintf_s fprintf_s
|
||||
#define _ftprintf_s_l _fprintf_s_l
|
||||
#define _stprintf_s sprintf_s
|
||||
#define _stprintf_s_l _sprintf_s_l
|
||||
#define _sntprintf_s _snprintf_s
|
||||
#define _sntprintf_s_l _snprintf_s_l
|
||||
#define _vtprintf_s vprintf_s
|
||||
#define _vtprintf_s_l _vprintf_s_l
|
||||
#define _vftprintf_s vfprintf_s
|
||||
#define _vftprintf_s_l _vfprintf_s_l
|
||||
#define _vstprintf_s vsprintf_s
|
||||
#define _vstprintf_s_l _vsprintf_s_l
|
||||
#define _vsntprintf_s _vsnprintf_s
|
||||
#define _vsntprintf_s_l _vsnprintf_s_l
|
||||
#define _tscanf_s scanf_s
|
||||
#define _tscanf_s_l _scanf_s_l
|
||||
#define _tcscanf_s _cscanf_s
|
||||
#define _tcscanf_s_l _cscanf_s_l
|
||||
#define _ftscanf_s fscanf_s
|
||||
#define _ftscanf_s_l _fscanf_s_l
|
||||
#define _stscanf_s sscanf_s
|
||||
#define _stscanf_s_l _sscanf_s_l
|
||||
#define _sntscanf_s _snscanf_s
|
||||
#define _sntscanf_s_l _snscanf_s_l
|
||||
|
||||
#define _getts_s gets_s
|
||||
#define _cgetts_s _cgets_s
|
||||
#define _itot_s _itoa_s
|
||||
#define _ltot_s _ltoa_s
|
||||
#define _ultot_s _ultoa_s
|
||||
#define _i64tot_s _i64toa_s
|
||||
#define _ui64tot_s _ui64toa_s
|
||||
|
||||
#define _tcscat_s strcat_s
|
||||
#define _tcscpy_s strcpy_s
|
||||
#define _tcserror_s strerror_s
|
||||
#define __tcserror_s _strerror_s
|
||||
|
||||
#define _tasctime_s asctime_s
|
||||
#define _tctime_s ctime_s
|
||||
#define _tctime32_s _ctime32_s
|
||||
#define _tctime64_s _ctime64_s
|
||||
#define _tstrdate_s _strdate_s
|
||||
#define _tstrtime_s _strtime_s
|
||||
|
||||
#define _tgetenv_s getenv_s
|
||||
#define _tdupenv_s _dupenv_s
|
||||
#define _tmakepath_s _makepath_s
|
||||
#define _tputenv_s _putenv_s
|
||||
#define _tsearchenv_s _searchenv_s
|
||||
#define _tsplitpath_s _splitpath_s
|
||||
|
||||
#define _tfopen_s fopen_s
|
||||
#define _tfreopen_s freopen_s
|
||||
#define _ttmpnam_s tmpnam_s
|
||||
#define _tmktemp_s _mktemp_s
|
||||
|
||||
#ifndef _POSIX_
|
||||
#define _taccess_s _access_s
|
||||
#endif
|
||||
|
||||
#define _tsopen_s _sopen_s
|
||||
|
||||
#ifdef _MBCS
|
||||
|
||||
#ifdef _MB_MAP_DIRECT
|
||||
|
||||
#define _tcsncat_s _mbsnbcat_s
|
||||
#define _tcsncat_s_l _mbsnbcat_s_l
|
||||
#define _tcsncpy_s _mbsnbcpy_s
|
||||
#define _tcsncpy_s_l _mbsnbcpy_s_l
|
||||
#define _tcstok_s _mbstok_s
|
||||
#define _tcstok_s_l _mbstok_s_l
|
||||
|
||||
#define _tcsnset_s _mbsnbset_s
|
||||
#define _tcsnset_s_l _mbsnbset_s_l
|
||||
#define _tcsset_s _mbsset_s
|
||||
#define _tcsset_s_l _mbsset_s_l
|
||||
|
||||
#define _tcsnccat_s _mbsncat_s
|
||||
#define _tcsnccat_s_l _mbsncat_s_l
|
||||
#define _tcsnccpy_s _mbsncpy_s
|
||||
#define _tcsnccpy_s_l _mbsncpy_s_l
|
||||
#define _tcsncset_s _mbsnset_s
|
||||
#define _tcsncset_s_l _mbsnset_s_l
|
||||
|
||||
#define _tcslwr_s _mbslwr_s
|
||||
#define _tcslwr_s_l _mbslwr_s_l
|
||||
#define _tcsupr_s _mbsupr_s
|
||||
#define _tcsupr_s_l _mbsupr_s_l
|
||||
|
||||
#define _tccpy_s _mbccpy_s
|
||||
#define _tccpy_s_l _mbccpy_s_l
|
||||
#else
|
||||
|
||||
_CRTIMP char *__cdecl _tcsncat_s(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount);
|
||||
_CRTIMP char *__cdecl _tcsncat_s_l(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP char *__cdecl _tcsncpy_s(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount);
|
||||
_CRTIMP char *__cdecl _tcsncpy_s_l(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP char *__cdecl _tcstok_s(char *_Str,const char *_Delim,char **_Context);
|
||||
_CRTIMP char *__cdecl _tcstok_s_l(char *_Str,const char *_Delim,char **_Context,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl _tcsset_s(char *_Str,size_t _SizeInChars,unsigned int _Val);
|
||||
_CRTIMP errno_t __cdecl _tcsset_s_l(char *_Str,size_t _SizeInChars,unsigned int,_locale_t _Locale);
|
||||
_CRTIMP char *__cdecl _tcsnccat_s(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount);
|
||||
_CRTIMP char *__cdecl _tcsnccat_s_l(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP char *__cdecl _tcsnccpy_s(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount);
|
||||
_CRTIMP char *__cdecl _tcsnccpy_s_l(char *_Dst,size_t _DstSizeInChars,const char *_Src,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP char *__cdecl _tcslwr_s(char *_Str,size_t _SizeInChars);
|
||||
_CRTIMP char *__cdecl _tcslwr_s_l(char *_Str,size_t _SizeInChars,_locale_t _Locale);
|
||||
_CRTIMP char *__cdecl _tcsupr_s(char *_Str,size_t _SizeInChars);
|
||||
_CRTIMP char *__cdecl _tcsupr_s_l(char *_Str,size_t _SizeInChars,_locale_t _Locale);
|
||||
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
#define _tcsncat_s strncat_s
|
||||
#define _tcsncat_s_l _strncat_s_l
|
||||
#define _tcsncpy_s strncpy_s
|
||||
#define _tcsncpy_s_l _strncpy_s_l
|
||||
#define _tcstok_s strtok_s
|
||||
#define _tcstok_s_l _strtok_s_l
|
||||
|
||||
#define _tcsnset_s _strnset_s
|
||||
#define _tcsnset_s_l _strnset_s_l
|
||||
#define _tcsset_s _strset_s
|
||||
#define _tcsset_s _strset_s
|
||||
#define _tcsset_s_l _strset_s_l
|
||||
|
||||
#define _tcsnccat_s strncat_s
|
||||
#define _tcsnccat_s_l _strncat_s_l
|
||||
#define _tcsnccpy_s strncpy_s
|
||||
#define _tcsnccpy_s_l _strncpy_s_l
|
||||
|
||||
#define _tcslwr_s _strlwr_s
|
||||
#define _tcslwr_s_l _strlwr_s_l
|
||||
#define _tcsupr_s _strupr_s
|
||||
#define _tcsupr_s_l _strupr_s_l
|
||||
|
||||
#define _strnset_s_l(_Destination,_Destination_size_chars,_Value,_Count,_Locale) (_strnset_s(_Destination,_Destination_size_chars,_Value,_Count))
|
||||
#define _strset_s_l(_Destination,_Destination_size_chars,_Value,_Locale) (_strset_s(_Destination,_Destination_size_chars,_Value))
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
|
@ -1,61 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _TIME_H__S
|
||||
#define _TIME_H__S
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#if defined(MINGW_HAS_SECURE_API)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
_CRTIMP errno_t __cdecl _ctime32_s(char *_Buf,size_t _SizeInBytes,const __time32_t *_Time);
|
||||
_CRTIMP errno_t __cdecl _gmtime32_s(struct tm *_Tm,const __time32_t *_Time);
|
||||
_CRTIMP errno_t __cdecl _localtime32_s(struct tm *_Tm,const __time32_t *_Time);
|
||||
_CRTIMP errno_t __cdecl _strdate_s(char *_Buf,size_t _SizeInBytes);
|
||||
_CRTIMP errno_t __cdecl _strtime_s(char *_Buf ,size_t _SizeInBytes);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP errno_t __cdecl _ctime64_s(char *_Buf,size_t _SizeInBytes,const __time64_t *_Time);
|
||||
_CRTIMP errno_t __cdecl _gmtime64_s(struct tm *_Tm,const __time64_t *_Time);
|
||||
_CRTIMP errno_t __cdecl _localtime64_s(struct tm *_Tm,const __time64_t *_Time);
|
||||
#endif
|
||||
|
||||
#ifndef _WTIME_S_DEFINED
|
||||
#define _WTIME_S_DEFINED
|
||||
_CRTIMP errno_t __cdecl _wasctime_s(wchar_t *_Buf,size_t _SizeInWords,const struct tm *_Tm);
|
||||
_CRTIMP errno_t __cdecl _wctime32_s(wchar_t *_Buf,size_t _SizeInWords,const __time32_t *_Time);
|
||||
_CRTIMP errno_t __cdecl _wstrdate_s(wchar_t *_Buf,size_t _SizeInWords);
|
||||
_CRTIMP errno_t __cdecl _wstrtime_s(wchar_t *_Buf,size_t _SizeInWords);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP errno_t __cdecl _wctime64_s(wchar_t *_Buf,size_t _SizeInWords,const __time64_t *_Time);
|
||||
#endif
|
||||
|
||||
#if !defined (RC_INVOKED) && !defined (_INC_WTIME_S_INL)
|
||||
#define _INC_WTIME_S_INL
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
__CRT_INLINE errno_t __cdecl _wctime_s(wchar_t *_Buffer,size_t _SizeInWords,const time_t *_Time) { return _wctime32_s(_Buffer,_SizeInWords,_Time); }
|
||||
#else
|
||||
__CRT_INLINE errno_t __cdecl _wctime_s(wchar_t *_Buffer,size_t _SizeInWords,const time_t *_Time) { return _wctime64_s(_Buffer,_SizeInWords,_Time); }
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef RC_INVOKED
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
__CRT_INLINE errno_t __cdecl localtime_s(struct tm *_Tm,const time_t *_Time) { return _localtime32_s(_Tm,_Time); }
|
||||
#else
|
||||
__CRT_INLINE errno_t __cdecl localtime_s(struct tm *_Tm,const time_t *_Time) { return _localtime64_s(_Tm,_Time); }
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
|
@ -1,128 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_WCHAR_S
|
||||
#define _INC_WCHAR_S
|
||||
|
||||
#include <wchar.h>
|
||||
|
||||
#if defined(MINGW_HAS_SECURE_API)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _WIO_S_DEFINED
|
||||
#define _WIO_S_DEFINED
|
||||
_CRTIMP errno_t __cdecl _waccess_s(const wchar_t *_Filename,int _AccessMode);
|
||||
_CRTIMP errno_t __cdecl _wmktemp_s(wchar_t *_TemplateName,size_t _SizeInWords);
|
||||
#endif
|
||||
|
||||
#ifndef _WCONIO_S_DEFINED
|
||||
#define _WCONIO_S_DEFINED
|
||||
_CRTIMP errno_t __cdecl _cgetws_s(wchar_t *_Buffer,size_t _SizeInWords,size_t *_SizeRead);
|
||||
_CRTIMP int __cdecl _cwprintf_s(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _cwscanf_s(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _cwscanf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vcwprintf_s(const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _cwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vcwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
#endif
|
||||
|
||||
#ifndef _WSTDIO_S_DEFINED
|
||||
#define _WSTDIO_S_DEFINED
|
||||
_CRTIMP wchar_t *__cdecl _getws_s(wchar_t *_Str,size_t _SizeInWords);
|
||||
int __cdecl fwprintf_s(FILE *_File,const wchar_t *_Format,...);
|
||||
int __cdecl wprintf_s(const wchar_t *_Format,...);
|
||||
int __cdecl vfwprintf_s(FILE *_File,const wchar_t *_Format,va_list _ArgList);
|
||||
int __cdecl vwprintf_s(const wchar_t *_Format,va_list _ArgList);
|
||||
int __cdecl swprintf_s(wchar_t *_Dst,size_t _SizeInWords,const wchar_t *_Format,...);
|
||||
int __cdecl vswprintf_s(wchar_t *_Dst,size_t _SizeInWords,const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _snwprintf_s(wchar_t *_DstBuf,size_t _DstSizeInWords,size_t _MaxCount,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _vsnwprintf_s(wchar_t *_DstBuf,size_t _DstSizeInWords,size_t _MaxCount,const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _wprintf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vwprintf_s_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _fwprintf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vfwprintf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _swprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vswprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _snwprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vsnwprintf_s_l(wchar_t *_DstBuf,size_t _DstSize,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _fwscanf_s_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _swscanf_s_l(const wchar_t *_Src,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _snwscanf_s(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _snwscanf_s_l(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _wscanf_s_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP errno_t __cdecl _wfopen_s(FILE **_File,const wchar_t *_Filename,const wchar_t *_Mode);
|
||||
_CRTIMP errno_t __cdecl _wfreopen_s(FILE **_File,const wchar_t *_Filename,const wchar_t *_Mode,FILE *_OldFile);
|
||||
_CRTIMP errno_t __cdecl _wtmpnam_s(wchar_t *_DstBuf,size_t _SizeInWords);
|
||||
#endif
|
||||
|
||||
#ifndef _WSTDLIB_S_DEFINED
|
||||
#define _WSTDLIB_S_DEFINED
|
||||
_CRTIMP errno_t __cdecl _itow_s (int _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
|
||||
_CRTIMP errno_t __cdecl _ltow_s (long _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
|
||||
_CRTIMP errno_t __cdecl _ultow_s (unsigned long _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
|
||||
_CRTIMP errno_t __cdecl _wgetenv_s(size_t *_ReturnSize,wchar_t *_DstBuf,size_t _DstSizeInWords,const wchar_t *_VarName);
|
||||
_CRTIMP errno_t __cdecl _wdupenv_s(wchar_t **_Buffer,size_t *_BufferSizeInWords,const wchar_t *_VarName);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP errno_t __cdecl _i64tow_s(__int64 _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
|
||||
_CRTIMP errno_t __cdecl _ui64tow_s(unsigned __int64 _Val,wchar_t *_DstBuf,size_t _SizeInWords,int _Radix);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _POSIX_
|
||||
#ifndef _WSTDLIBP_S_DEFINED
|
||||
#define _WSTDLIBP_S_DEFINED
|
||||
_CRTIMP errno_t __cdecl _wmakepath_s(wchar_t *_PathResult,size_t _SizeInWords,const wchar_t *_Drive,const wchar_t *_Dir,const wchar_t *_Filename,const wchar_t *_Ext);
|
||||
_CRTIMP errno_t __cdecl _wputenv_s(const wchar_t *_Name,const wchar_t *_Value);
|
||||
_CRTIMP errno_t __cdecl _wsearchenv_s(const wchar_t *_Filename,const wchar_t *_EnvVar,wchar_t *_ResultPath,size_t _SizeInWords);
|
||||
_CRTIMP errno_t __cdecl _wsplitpath_s(const wchar_t *_FullPath,wchar_t *_Drive,size_t _DriveSizeInWords,wchar_t *_Dir,size_t _DirSizeInWords,wchar_t *_Filename,size_t _FilenameSizeInWords,wchar_t *_Ext,size_t _ExtSizeInWords);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _WSTRING_S_DEFINED
|
||||
#define _WSTRING_S_DEFINED
|
||||
_CRTIMP wchar_t *__cdecl wcstok_s(wchar_t *_Str,const wchar_t *_Delim,wchar_t **_Context);
|
||||
_CRTIMP errno_t __cdecl _wcserror_s(wchar_t *_Buf,size_t _SizeInWords,int _ErrNum);
|
||||
_CRTIMP errno_t __cdecl __wcserror_s(wchar_t *_Buffer,size_t _SizeInWords,const wchar_t *_ErrMsg);
|
||||
_CRTIMP errno_t __cdecl _wcsnset_s(wchar_t *_Dst,size_t _DstSizeInWords,wchar_t _Val,size_t _MaxCount);
|
||||
_CRTIMP errno_t __cdecl _wcsset_s(wchar_t *_Str,size_t _SizeInWords,wchar_t _Val);
|
||||
_CRTIMP errno_t __cdecl _wcslwr_s(wchar_t *_Str,size_t _SizeInWords);
|
||||
_CRTIMP errno_t __cdecl _wcslwr_s_l(wchar_t *_Str,size_t _SizeInWords,_locale_t _Locale);
|
||||
_CRTIMP errno_t __cdecl _wcsupr_s(wchar_t *_Str,size_t _Size);
|
||||
_CRTIMP errno_t __cdecl _wcsupr_s_l(wchar_t *_Str,size_t _Size,_locale_t _Locale);
|
||||
#endif
|
||||
|
||||
#ifndef _WTIME_S_DEFINED
|
||||
#define _WTIME_S_DEFINED
|
||||
_CRTIMP errno_t __cdecl _wasctime_s(wchar_t *_Buf,size_t _SizeInWords,const struct tm *_Tm);
|
||||
_CRTIMP errno_t __cdecl _wctime32_s(wchar_t *_Buf,size_t _SizeInWords,const __time32_t *_Time);
|
||||
_CRTIMP errno_t __cdecl _wstrdate_s(wchar_t *_Buf,size_t _SizeInWords);
|
||||
_CRTIMP errno_t __cdecl _wstrtime_s(wchar_t *_Buf,size_t _SizeInWords);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP errno_t __cdecl _wctime64_s(wchar_t *_Buf,size_t _SizeInWords,const __time64_t *_Time);
|
||||
#endif
|
||||
|
||||
#if !defined (RC_INVOKED) && !defined (_INC_WTIME_S_INL)
|
||||
#define _INC_WTIME_S_INL
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
__CRT_INLINE errno_t __cdecl _wctime_s(wchar_t *_Buffer,size_t _SizeInWords,const time_t *_Time) { return _wctime32_s(_Buffer,_SizeInWords,_Time); }
|
||||
#else
|
||||
__CRT_INLINE errno_t __cdecl _wctime_s(wchar_t *_Buffer,size_t _SizeInWords,const time_t *_Time) { return _wctime64_s(_Buffer,_SizeInWords,_Time); }
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
_CRTIMP errno_t __cdecl mbsrtowcs_s(size_t *_Retval,wchar_t *_Dst,size_t _SizeInWords,const char **_PSrc,size_t _N,mbstate_t *_State);
|
||||
_CRTIMP errno_t __cdecl wcrtomb_s(size_t *_Retval,char *_Dst,size_t _SizeInBytes,wchar_t _Ch,mbstate_t *_State);
|
||||
_CRTIMP errno_t __cdecl wcsrtombs_s(size_t *_Retval,char *_Dst,size_t _SizeInBytes,const wchar_t **_Src,size_t _Size,mbstate_t *_State);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
|
@ -1,160 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_SETJMP
|
||||
#define _INC_SETJMP
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#if (defined(_X86_) && !defined(__x86_64))
|
||||
|
||||
#define _JBLEN 16
|
||||
#define _JBTYPE int
|
||||
|
||||
typedef struct __JUMP_BUFFER {
|
||||
unsigned long Ebp;
|
||||
unsigned long Ebx;
|
||||
unsigned long Edi;
|
||||
unsigned long Esi;
|
||||
unsigned long Esp;
|
||||
unsigned long Eip;
|
||||
unsigned long Registration;
|
||||
unsigned long TryLevel;
|
||||
unsigned long Cookie;
|
||||
unsigned long UnwindFunc;
|
||||
unsigned long UnwindData[6];
|
||||
} _JUMP_BUFFER;
|
||||
#elif defined(__ia64__)
|
||||
typedef _CRT_ALIGN(16) struct _SETJMP_FLOAT128 {
|
||||
__int64 LowPart;
|
||||
__int64 HighPart;
|
||||
} SETJMP_FLOAT128;
|
||||
|
||||
#define _JBLEN 33
|
||||
typedef SETJMP_FLOAT128 _JBTYPE;
|
||||
|
||||
typedef struct __JUMP_BUFFER {
|
||||
|
||||
unsigned long iAReserved[6];
|
||||
|
||||
unsigned long Registration;
|
||||
unsigned long TryLevel;
|
||||
unsigned long Cookie;
|
||||
unsigned long UnwindFunc;
|
||||
|
||||
unsigned long UnwindData[6];
|
||||
|
||||
SETJMP_FLOAT128 FltS0;
|
||||
SETJMP_FLOAT128 FltS1;
|
||||
SETJMP_FLOAT128 FltS2;
|
||||
SETJMP_FLOAT128 FltS3;
|
||||
SETJMP_FLOAT128 FltS4;
|
||||
SETJMP_FLOAT128 FltS5;
|
||||
SETJMP_FLOAT128 FltS6;
|
||||
SETJMP_FLOAT128 FltS7;
|
||||
SETJMP_FLOAT128 FltS8;
|
||||
SETJMP_FLOAT128 FltS9;
|
||||
SETJMP_FLOAT128 FltS10;
|
||||
SETJMP_FLOAT128 FltS11;
|
||||
SETJMP_FLOAT128 FltS12;
|
||||
SETJMP_FLOAT128 FltS13;
|
||||
SETJMP_FLOAT128 FltS14;
|
||||
SETJMP_FLOAT128 FltS15;
|
||||
SETJMP_FLOAT128 FltS16;
|
||||
SETJMP_FLOAT128 FltS17;
|
||||
SETJMP_FLOAT128 FltS18;
|
||||
SETJMP_FLOAT128 FltS19;
|
||||
__int64 FPSR;
|
||||
__int64 StIIP;
|
||||
__int64 BrS0;
|
||||
__int64 BrS1;
|
||||
__int64 BrS2;
|
||||
__int64 BrS3;
|
||||
__int64 BrS4;
|
||||
__int64 IntS0;
|
||||
__int64 IntS1;
|
||||
__int64 IntS2;
|
||||
__int64 IntS3;
|
||||
__int64 RsBSP;
|
||||
__int64 RsPFS;
|
||||
__int64 ApUNAT;
|
||||
__int64 ApLC;
|
||||
__int64 IntSp;
|
||||
__int64 IntNats;
|
||||
__int64 Preds;
|
||||
|
||||
} _JUMP_BUFFER;
|
||||
#elif defined(__x86_64)
|
||||
typedef _CRT_ALIGN(16) struct _SETJMP_FLOAT128 {
|
||||
unsigned __int64 Part[2];
|
||||
} SETJMP_FLOAT128;
|
||||
|
||||
#define _JBLEN 16
|
||||
typedef SETJMP_FLOAT128 _JBTYPE;
|
||||
|
||||
typedef struct _JUMP_BUFFER {
|
||||
unsigned __int64 Frame;
|
||||
unsigned __int64 Rbx;
|
||||
unsigned __int64 Rsp;
|
||||
unsigned __int64 Rbp;
|
||||
unsigned __int64 Rsi;
|
||||
unsigned __int64 Rdi;
|
||||
unsigned __int64 R12;
|
||||
unsigned __int64 R13;
|
||||
unsigned __int64 R14;
|
||||
unsigned __int64 R15;
|
||||
unsigned __int64 Rip;
|
||||
unsigned __int64 Spare;
|
||||
SETJMP_FLOAT128 Xmm6;
|
||||
SETJMP_FLOAT128 Xmm7;
|
||||
SETJMP_FLOAT128 Xmm8;
|
||||
SETJMP_FLOAT128 Xmm9;
|
||||
SETJMP_FLOAT128 Xmm10;
|
||||
SETJMP_FLOAT128 Xmm11;
|
||||
SETJMP_FLOAT128 Xmm12;
|
||||
SETJMP_FLOAT128 Xmm13;
|
||||
SETJMP_FLOAT128 Xmm14;
|
||||
SETJMP_FLOAT128 Xmm15;
|
||||
} _JUMP_BUFFER;
|
||||
#endif
|
||||
#ifndef _JMP_BUF_DEFINED
|
||||
typedef _JBTYPE jmp_buf[_JBLEN];
|
||||
#define _JMP_BUF_DEFINED
|
||||
#endif
|
||||
|
||||
void * __cdecl __attribute__ ((__nothrow__)) mingw_getsp(void);
|
||||
|
||||
#ifdef USE_MINGW_SETJMP_TWO_ARGS
|
||||
#ifndef _INC_SETJMPEX
|
||||
#define setjmp(BUF) _setjmp((BUF),mingw_getsp())
|
||||
int __cdecl __attribute__ ((__nothrow__)) _setjmp(jmp_buf _Buf,void *_Ctx);
|
||||
#else
|
||||
#undef setjmp
|
||||
#define setjmp(BUF) _setjmpex((BUF),mingw_getsp())
|
||||
#define setjmpex(BUF) _setjmpex((BUF),mingw_getsp())
|
||||
int __cdecl __attribute__ ((__nothrow__)) _setjmpex(jmp_buf _Buf,void *_Ctx);
|
||||
#endif
|
||||
#else
|
||||
#ifndef _INC_SETJMPEX
|
||||
#define setjmp _setjmp
|
||||
#endif
|
||||
int __cdecl __attribute__ ((__nothrow__)) setjmp(jmp_buf _Buf);
|
||||
#endif
|
||||
|
||||
__declspec(noreturn) __attribute__ ((__nothrow__)) void __cdecl ms_longjmp(jmp_buf _Buf,int _Value)/* throw(...)*/;
|
||||
__declspec(noreturn) __attribute__ ((__nothrow__)) void __cdecl longjmp(jmp_buf _Buf,int _Value);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#pragma pack(pop)
|
||||
#endif
|
|
@ -1,28 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_SHARE
|
||||
#define _INC_SHARE
|
||||
|
||||
#ifndef _WIN32
|
||||
#error Only Win32 target is supported!
|
||||
#endif
|
||||
|
||||
#define _SH_COMPAT 0x00
|
||||
#define _SH_DENYRW 0x10
|
||||
#define _SH_DENYWR 0x20
|
||||
#define _SH_DENYRD 0x30
|
||||
#define _SH_DENYNO 0x40
|
||||
#define _SH_SECURE 0x80
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
#define SH_COMPAT _SH_COMPAT
|
||||
#define SH_DENYRW _SH_DENYRW
|
||||
#define SH_DENYWR _SH_DENYWR
|
||||
#define SH_DENYRD _SH_DENYRD
|
||||
#define SH_DENYNO _SH_DENYNO
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -1,63 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_SIGNAL
|
||||
#define _INC_SIGNAL
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _SIG_ATOMIC_T_DEFINED
|
||||
#define _SIG_ATOMIC_T_DEFINED
|
||||
typedef int sig_atomic_t;
|
||||
#endif
|
||||
|
||||
#define NSIG 23
|
||||
|
||||
#define SIGHUP 1 /* hangup */
|
||||
#define SIGINT 2
|
||||
#define SIGQUIT 3 /* quit */
|
||||
#define SIGILL 4
|
||||
#define SIGTRAP 5 /* trace trap (not reset when caught) */
|
||||
#define SIGIOT 6 /* IOT instruction */
|
||||
#define SIGABRT 6 /* used by abort, replace SIGIOT in the future */
|
||||
#define SIGEMT 7 /* EMT instruction */
|
||||
#define SIGFPE 8
|
||||
#define SIGKILL 9 /* kill (cannot be caught or ignored) */
|
||||
#define SIGBUS 10 /* bus error */
|
||||
#define SIGSEGV 11
|
||||
#define SIGSYS 12 /* bad argument to system call */
|
||||
#define SIGPIPE 13 /* write on a pipe with no one to read it */
|
||||
#ifdef __USE_MINGW_ALARM
|
||||
#define SIGALRM 14 /* alarm clock */
|
||||
#endif
|
||||
#define SIGTERM 15
|
||||
#define SIGBREAK 21
|
||||
#define SIGABRT2 22
|
||||
|
||||
#define SIGABRT_COMPAT 6
|
||||
|
||||
typedef void (*__p_sig_fn_t)(int);
|
||||
|
||||
#define SIG_DFL (__p_sig_fn_t)0
|
||||
#define SIG_IGN (__p_sig_fn_t)1
|
||||
#define SIG_GET (__p_sig_fn_t)2
|
||||
#define SIG_SGE (__p_sig_fn_t)3
|
||||
#define SIG_ACK (__p_sig_fn_t)4
|
||||
#define SIG_ERR (__p_sig_fn_t)-1
|
||||
|
||||
extern void **__cdecl __pxcptinfoptrs(void);
|
||||
#define _pxcptinfoptrs (*__pxcptinfoptrs())
|
||||
|
||||
__p_sig_fn_t __cdecl signal(int _SigNum,__p_sig_fn_t _Func);
|
||||
int __cdecl raise(int _SigNum);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
|
@ -1,212 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
/* ISO C9x 7.18 Integer types <stdint.h>
|
||||
* Based on ISO/IEC SC22/WG14 9899 Committee draft (SC22 N2794)
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* Contributor: Danny Smith <danny_r_smith_2001@yahoo.co.nz>
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAIMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* Date: 2000-12-02
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _STDINT_H
|
||||
#define _STDINT_H
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#define __need_wint_t
|
||||
#define __need_wchar_t
|
||||
#include "stddef.h"
|
||||
|
||||
#ifndef __int8_t_defined
|
||||
#define __int8_t_defined
|
||||
/* 7.18.1.1 Exact-width integer types */
|
||||
typedef signed char int8_t;
|
||||
typedef unsigned char uint8_t;
|
||||
typedef short int16_t;
|
||||
typedef unsigned short uint16_t;
|
||||
typedef int int32_t;
|
||||
typedef unsigned uint32_t;
|
||||
typedef long long int64_t;
|
||||
typedef unsigned long long uint64_t;
|
||||
#endif
|
||||
|
||||
/* 7.18.1.2 Minimum-width integer types */
|
||||
typedef signed char int_least8_t;
|
||||
typedef unsigned char uint_least8_t;
|
||||
typedef short int_least16_t;
|
||||
typedef unsigned short uint_least16_t;
|
||||
typedef int int_least32_t;
|
||||
typedef unsigned uint_least32_t;
|
||||
typedef long long int_least64_t;
|
||||
typedef unsigned long long uint_least64_t;
|
||||
|
||||
/* 7.18.1.3 Fastest minimum-width integer types
|
||||
* Not actually guaranteed to be fastest for all purposes
|
||||
* Here we use the exact-width types for 8 and 16-bit ints.
|
||||
*/
|
||||
typedef char int_fast8_t;
|
||||
typedef unsigned char uint_fast8_t;
|
||||
typedef short int_fast16_t;
|
||||
typedef unsigned short uint_fast16_t;
|
||||
typedef int int_fast32_t;
|
||||
typedef unsigned int uint_fast32_t;
|
||||
typedef long long int_fast64_t;
|
||||
typedef unsigned long long uint_fast64_t;
|
||||
|
||||
/* 7.18.1.5 Greatest-width integer types */
|
||||
typedef long long intmax_t;
|
||||
typedef unsigned long long uintmax_t;
|
||||
|
||||
/* 7.18.2 Limits of specified-width integer types */
|
||||
#if !defined ( __cplusplus) || defined (__STDC_LIMIT_MACROS)
|
||||
|
||||
/* 7.18.2.1 Limits of exact-width integer types */
|
||||
#define INT8_MIN (-128)
|
||||
#define INT16_MIN (-32768)
|
||||
#define INT32_MIN (-2147483647 - 1)
|
||||
#define INT64_MIN (-9223372036854775807LL - 1)
|
||||
|
||||
#define INT8_MAX 127
|
||||
#define INT16_MAX 32767
|
||||
#define INT32_MAX 2147483647
|
||||
#define INT64_MAX 9223372036854775807LL
|
||||
|
||||
#define UINT8_MAX 0xff /* 255U */
|
||||
#define UINT16_MAX 0xffff /* 65535U */
|
||||
#define UINT32_MAX 0xffffffff /* 4294967295U */
|
||||
#define UINT64_MAX 0xffffffffffffffffULL /* 18446744073709551615ULL */
|
||||
|
||||
/* 7.18.2.2 Limits of minimum-width integer types */
|
||||
#define INT_LEAST8_MIN INT8_MIN
|
||||
#define INT_LEAST16_MIN INT16_MIN
|
||||
#define INT_LEAST32_MIN INT32_MIN
|
||||
#define INT_LEAST64_MIN INT64_MIN
|
||||
|
||||
#define INT_LEAST8_MAX INT8_MAX
|
||||
#define INT_LEAST16_MAX INT16_MAX
|
||||
#define INT_LEAST32_MAX INT32_MAX
|
||||
#define INT_LEAST64_MAX INT64_MAX
|
||||
|
||||
#define UINT_LEAST8_MAX UINT8_MAX
|
||||
#define UINT_LEAST16_MAX UINT16_MAX
|
||||
#define UINT_LEAST32_MAX UINT32_MAX
|
||||
#define UINT_LEAST64_MAX UINT64_MAX
|
||||
|
||||
/* 7.18.2.3 Limits of fastest minimum-width integer types */
|
||||
#define INT_FAST8_MIN INT8_MIN
|
||||
#define INT_FAST16_MIN INT16_MIN
|
||||
#define INT_FAST32_MIN INT32_MIN
|
||||
#define INT_FAST64_MIN INT64_MIN
|
||||
|
||||
#define INT_FAST8_MAX INT8_MAX
|
||||
#define INT_FAST16_MAX INT16_MAX
|
||||
#define INT_FAST32_MAX INT32_MAX
|
||||
#define INT_FAST64_MAX INT64_MAX
|
||||
|
||||
#define UINT_FAST8_MAX UINT8_MAX
|
||||
#define UINT_FAST16_MAX UINT16_MAX
|
||||
#define UINT_FAST32_MAX UINT32_MAX
|
||||
#define UINT_FAST64_MAX UINT64_MAX
|
||||
|
||||
/* 7.18.2.4 Limits of integer types capable of holding
|
||||
object pointers */
|
||||
#ifdef _WIN64
|
||||
#define INTPTR_MIN INT64_MIN
|
||||
#define INTPTR_MAX INT64_MAX
|
||||
#define UINTPTR_MAX UINT64_MAX
|
||||
#else
|
||||
#define INTPTR_MIN INT32_MIN
|
||||
#define INTPTR_MAX INT32_MAX
|
||||
#define UINTPTR_MAX UINT32_MAX
|
||||
#endif
|
||||
|
||||
/* 7.18.2.5 Limits of greatest-width integer types */
|
||||
#define INTMAX_MIN INT64_MIN
|
||||
#define INTMAX_MAX INT64_MAX
|
||||
#define UINTMAX_MAX UINT64_MAX
|
||||
|
||||
/* 7.18.3 Limits of other integer types */
|
||||
#ifdef _WIN64
|
||||
#define PTRDIFF_MIN INT64_MIN
|
||||
#define PTRDIFF_MAX INT64_MAX
|
||||
#else
|
||||
#define PTRDIFF_MIN INT32_MIN
|
||||
#define PTRDIFF_MAX INT32_MAX
|
||||
#endif
|
||||
|
||||
#define SIG_ATOMIC_MIN INT32_MIN
|
||||
#define SIG_ATOMIC_MAX INT32_MAX
|
||||
|
||||
#ifndef SIZE_MAX
|
||||
#ifdef _WIN64
|
||||
#define SIZE_MAX UINT64_MAX
|
||||
#else
|
||||
#define SIZE_MAX UINT32_MAX
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef WCHAR_MIN /* also in wchar.h */
|
||||
#define WCHAR_MIN 0
|
||||
#define WCHAR_MAX ((wchar_t)-1) /* UINT16_MAX */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* wint_t is unsigned short for compatibility with MS runtime
|
||||
*/
|
||||
#define WINT_MIN 0
|
||||
#define WINT_MAX ((wint_t)-1) /* UINT16_MAX */
|
||||
|
||||
#endif /* !defined ( __cplusplus) || defined __STDC_LIMIT_MACROS */
|
||||
|
||||
|
||||
/* 7.18.4 Macros for integer constants */
|
||||
#if !defined ( __cplusplus) || defined (__STDC_CONSTANT_MACROS)
|
||||
|
||||
/* 7.18.4.1 Macros for minimum-width integer constants
|
||||
|
||||
According to Douglas Gwyn <gwyn@arl.mil>:
|
||||
"This spec was changed in ISO/IEC 9899:1999 TC1; in ISO/IEC
|
||||
9899:1999 as initially published, the expansion was required
|
||||
to be an integer constant of precisely matching type, which
|
||||
is impossible to accomplish for the shorter types on most
|
||||
platforms, because C99 provides no standard way to designate
|
||||
an integer constant with width less than that of type int.
|
||||
TC1 changed this to require just an integer constant
|
||||
*expression* with *promoted* type."
|
||||
|
||||
The trick used here is from Clive D W Feather.
|
||||
*/
|
||||
|
||||
#define INT8_C(val) (INT_LEAST8_MAX-INT_LEAST8_MAX+(val))
|
||||
#define INT16_C(val) (INT_LEAST16_MAX-INT_LEAST16_MAX+(val))
|
||||
#define INT32_C(val) (INT_LEAST32_MAX-INT_LEAST32_MAX+(val))
|
||||
/* The 'trick' doesn't work in C89 for long long because, without
|
||||
suffix, (val) will be evaluated as int, not intmax_t */
|
||||
#define INT64_C(val) val##LL
|
||||
|
||||
#define UINT8_C(val) (UINT_LEAST8_MAX-UINT_LEAST8_MAX+(val))
|
||||
#define UINT16_C(val) (UINT_LEAST16_MAX-UINT_LEAST16_MAX+(val))
|
||||
#define UINT32_C(val) (UINT_LEAST32_MAX-UINT_LEAST32_MAX+(val))
|
||||
#define UINT64_C(val) val##ULL
|
||||
|
||||
/* 7.18.4.2 Macros for greatest-width integer constants */
|
||||
#define INTMAX_C(val) val##LL
|
||||
#define UINTMAX_C(val) val##ULL
|
||||
|
||||
#endif /* !defined ( __cplusplus) || defined __STDC_CONSTANT_MACROS */
|
||||
|
||||
#endif
|
|
@ -1,429 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_STDIO
|
||||
#define _INC_STDIO
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define BUFSIZ 512
|
||||
#define _NFILE _NSTREAM_
|
||||
#define _NSTREAM_ 512
|
||||
#define _IOB_ENTRIES 20
|
||||
#define EOF (-1)
|
||||
|
||||
#ifndef _FILE_DEFINED
|
||||
struct _iobuf {
|
||||
char *_ptr;
|
||||
int _cnt;
|
||||
char *_base;
|
||||
int _flag;
|
||||
int _file;
|
||||
int _charbuf;
|
||||
int _bufsiz;
|
||||
char *_tmpfname;
|
||||
};
|
||||
typedef struct _iobuf FILE;
|
||||
#define _FILE_DEFINED
|
||||
#endif
|
||||
|
||||
#ifdef _POSIX_
|
||||
#define _P_tmpdir "/"
|
||||
#define _wP_tmpdir L"/"
|
||||
#else
|
||||
#define _P_tmpdir "\\"
|
||||
#define _wP_tmpdir L"\\"
|
||||
#endif
|
||||
|
||||
#define L_tmpnam (sizeof(_P_tmpdir) + 12)
|
||||
|
||||
#ifdef _POSIX_
|
||||
#define L_ctermid 9
|
||||
#define L_cuserid 32
|
||||
#endif
|
||||
|
||||
#define SEEK_CUR 1
|
||||
#define SEEK_END 2
|
||||
#define SEEK_SET 0
|
||||
|
||||
#define STDIN_FILENO 0
|
||||
#define STDOUT_FILENO 1
|
||||
#define STDERR_FILENO 2
|
||||
|
||||
#define FILENAME_MAX 260
|
||||
#define FOPEN_MAX 20
|
||||
#define _SYS_OPEN 20
|
||||
#define TMP_MAX 32767
|
||||
|
||||
#ifndef NULL
|
||||
#ifdef __cplusplus
|
||||
#define NULL 0
|
||||
#else
|
||||
#define NULL ((void *)0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _OFF_T_DEFINED
|
||||
#define _OFF_T_DEFINED
|
||||
#ifndef _OFF_T_
|
||||
#define _OFF_T_
|
||||
typedef long _off_t;
|
||||
#if !defined(NO_OLDNAMES) || defined(_POSIX)
|
||||
typedef long off_t;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _OFF64_T_DEFINED
|
||||
#define _OFF64_T_DEFINED
|
||||
typedef long long _off64_t;
|
||||
#if !defined(NO_OLDNAMES) || defined(_POSIX)
|
||||
typedef long long off64_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _STDIO_DEFINED
|
||||
#ifdef _WIN64
|
||||
_CRTIMP FILE *__cdecl __iob_func(void);
|
||||
#else
|
||||
#ifdef _MSVCRT_
|
||||
extern FILE _iob[]; /* A pointer to an array of FILE */
|
||||
#define __iob_func() (_iob)
|
||||
#else
|
||||
extern FILE (*_imp___iob)[]; /* A pointer to an array of FILE */
|
||||
#define __iob_func() (*_imp___iob)
|
||||
#define _iob __iob_func()
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _FPOS_T_DEFINED
|
||||
#define _FPOS_T_DEFINED
|
||||
#undef _FPOSOFF
|
||||
|
||||
#if (!defined(NO_OLDNAMES) || defined(__GNUC__)) && _INTEGRAL_MAX_BITS >= 64
|
||||
typedef __int64 fpos_t;
|
||||
#define _FPOSOFF(fp) ((long)(fp))
|
||||
#else
|
||||
typedef long long fpos_t;
|
||||
#define _FPOSOFF(fp) ((long)(fp))
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef _STDSTREAM_DEFINED
|
||||
#define _STDSTREAM_DEFINED
|
||||
|
||||
#define stdin (&__iob_func()[0])
|
||||
#define stdout (&__iob_func()[1])
|
||||
#define stderr (&__iob_func()[2])
|
||||
#endif
|
||||
|
||||
#define _IOREAD 0x0001
|
||||
#define _IOWRT 0x0002
|
||||
|
||||
#define _IOFBF 0x0000
|
||||
#define _IOLBF 0x0040
|
||||
#define _IONBF 0x0004
|
||||
|
||||
#define _IOMYBUF 0x0008
|
||||
#define _IOEOF 0x0010
|
||||
#define _IOERR 0x0020
|
||||
#define _IOSTRG 0x0040
|
||||
#define _IORW 0x0080
|
||||
#ifdef _POSIX_
|
||||
#define _IOAPPEND 0x0200
|
||||
#endif
|
||||
|
||||
#define _TWO_DIGIT_EXPONENT 0x1
|
||||
|
||||
#ifndef _STDIO_DEFINED
|
||||
|
||||
_CRTIMP int __cdecl _filbuf(FILE *_File);
|
||||
_CRTIMP int __cdecl _flsbuf(int _Ch,FILE *_File);
|
||||
#ifdef _POSIX_
|
||||
_CRTIMP FILE *__cdecl _fsopen(const char *_Filename,const char *_Mode);
|
||||
#else
|
||||
_CRTIMP FILE *__cdecl _fsopen(const char *_Filename,const char *_Mode,int _ShFlag);
|
||||
#endif
|
||||
void __cdecl clearerr(FILE *_File);
|
||||
int __cdecl fclose(FILE *_File);
|
||||
_CRTIMP int __cdecl _fcloseall(void);
|
||||
#ifdef _POSIX_
|
||||
FILE *__cdecl fdopen(int _FileHandle,const char *_Mode);
|
||||
#else
|
||||
_CRTIMP FILE *__cdecl _fdopen(int _FileHandle,const char *_Mode);
|
||||
#endif
|
||||
int __cdecl feof(FILE *_File);
|
||||
int __cdecl ferror(FILE *_File);
|
||||
int __cdecl fflush(FILE *_File);
|
||||
int __cdecl fgetc(FILE *_File);
|
||||
_CRTIMP int __cdecl _fgetchar(void);
|
||||
int __cdecl fgetpos(FILE *_File ,fpos_t *_Pos);
|
||||
char *__cdecl fgets(char *_Buf,int _MaxCount,FILE *_File);
|
||||
#ifdef _POSIX_
|
||||
int __cdecl fileno(FILE *_File);
|
||||
#else
|
||||
_CRTIMP int __cdecl _fileno(FILE *_File);
|
||||
#endif
|
||||
_CRTIMP char *__cdecl _tempnam(const char *_DirName,const char *_FilePrefix);
|
||||
_CRTIMP int __cdecl _flushall(void);
|
||||
FILE *__cdecl fopen(const char *_Filename,const char *_Mode);
|
||||
FILE *fopen64(const char *filename,const char *mode);
|
||||
int __cdecl fprintf(FILE *_File,const char *_Format,...);
|
||||
int __cdecl fputc(int _Ch,FILE *_File);
|
||||
_CRTIMP int __cdecl _fputchar(int _Ch);
|
||||
int __cdecl fputs(const char *_Str,FILE *_File);
|
||||
size_t __cdecl fread(void *_DstBuf,size_t _ElementSize,size_t _Count,FILE *_File);
|
||||
FILE *__cdecl freopen(const char *_Filename,const char *_Mode,FILE *_File);
|
||||
int __cdecl fscanf(FILE *_File,const char *_Format,...);
|
||||
int __cdecl fsetpos(FILE *_File,const fpos_t *_Pos);
|
||||
int __cdecl fseek(FILE *_File,long _Offset,int _Origin);
|
||||
int fseeko64(FILE* stream, _off64_t offset, int whence);
|
||||
long __cdecl ftell(FILE *_File);
|
||||
_off64_t ftello64(FILE * stream);
|
||||
int __cdecl _fseeki64(FILE *_File,__int64 _Offset,int _Origin);
|
||||
__int64 __cdecl _ftelli64(FILE *_File);
|
||||
size_t __cdecl fwrite(const void *_Str,size_t _Size,size_t _Count,FILE *_File);
|
||||
int __cdecl getc(FILE *_File);
|
||||
int __cdecl getchar(void);
|
||||
_CRTIMP int __cdecl _getmaxstdio(void);
|
||||
char *__cdecl gets(char *_Buffer);
|
||||
int __cdecl _getw(FILE *_File);
|
||||
#ifndef _CRT_PERROR_DEFINED
|
||||
#define _CRT_PERROR_DEFINED
|
||||
void __cdecl perror(const char *_ErrMsg);
|
||||
#endif
|
||||
_CRTIMP int __cdecl _pclose(FILE *_File);
|
||||
_CRTIMP FILE *__cdecl _popen(const char *_Command,const char *_Mode);
|
||||
#if !defined(NO_OLDNAMES) && !defined(popen)
|
||||
#define popen _popen
|
||||
#define pclose _pclose
|
||||
#endif
|
||||
int __cdecl printf(const char *_Format,...);
|
||||
int __cdecl putc(int _Ch,FILE *_File);
|
||||
int __cdecl putchar(int _Ch);
|
||||
int __cdecl puts(const char *_Str);
|
||||
_CRTIMP int __cdecl _putw(int _Word,FILE *_File);
|
||||
#ifndef _CRT_DIRECTORY_DEFINED
|
||||
#define _CRT_DIRECTORY_DEFINED
|
||||
int __cdecl remove(const char *_Filename);
|
||||
int __cdecl rename(const char *_OldFilename,const char *_NewFilename);
|
||||
_CRTIMP int __cdecl _unlink(const char *_Filename);
|
||||
#ifndef NO_OLDNAMES
|
||||
int __cdecl unlink(const char *_Filename);
|
||||
#endif
|
||||
#endif
|
||||
void __cdecl rewind(FILE *_File);
|
||||
_CRTIMP int __cdecl _rmtmp(void);
|
||||
int __cdecl scanf(const char *_Format,...);
|
||||
void __cdecl setbuf(FILE *_File,char *_Buffer);
|
||||
_CRTIMP int __cdecl _setmaxstdio(int _Max);
|
||||
_CRTIMP unsigned int __cdecl _set_output_format(unsigned int _Format);
|
||||
_CRTIMP unsigned int __cdecl _get_output_format(void);
|
||||
int __cdecl setvbuf(FILE *_File,char *_Buf,int _Mode,size_t _Size);
|
||||
_CRTIMP int __cdecl _scprintf(const char *_Format,...);
|
||||
int __cdecl sscanf(const char *_Src,const char *_Format,...);
|
||||
_CRTIMP int __cdecl _snscanf(const char *_Src,size_t _MaxCount,const char *_Format,...);
|
||||
FILE *__cdecl tmpfile(void);
|
||||
char *__cdecl tmpnam(char *_Buffer);
|
||||
int __cdecl ungetc(int _Ch,FILE *_File);
|
||||
int __cdecl vfprintf(FILE *_File,const char *_Format,va_list _ArgList);
|
||||
int __cdecl vprintf(const char *_Format,va_list _ArgList);
|
||||
/* Make sure macros are not defined. */
|
||||
#pragma push_macro("vsnprintf")
|
||||
#pragma push_macro("snprintf")
|
||||
# undef vsnprintf
|
||||
# undef snprintf
|
||||
extern
|
||||
__attribute__((format(gnu_printf, 3, 0))) __attribute__((nonnull (3)))
|
||||
int __mingw_vsnprintf(char *_DstBuf,size_t _MaxCount,const char *_Format,va_list _ArgList);
|
||||
extern
|
||||
__attribute__((format(gnu_printf, 3, 4))) __attribute__((nonnull (3)))
|
||||
int __mingw_snprintf(char* s, size_t n, const char* format, ...);
|
||||
int __cdecl vsnprintf(char *_DstBuf,size_t _MaxCount,const char *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _snprintf(char *_Dest,size_t _Count,const char *_Format,...);
|
||||
_CRTIMP int __cdecl _vsnprintf(char *_Dest,size_t _Count,const char *_Format,va_list _Args);
|
||||
int __cdecl sprintf(char *_Dest,const char *_Format,...);
|
||||
int __cdecl vsprintf(char *_Dest,const char *_Format,va_list _Args);
|
||||
#ifndef __NO_ISOCEXT /* externs in libmingwex.a */
|
||||
int __cdecl snprintf(char* s, size_t n, const char* format, ...);
|
||||
__CRT_INLINE int __cdecl vsnprintf (char* s, size_t n, const char* format,va_list arg) {
|
||||
return _vsnprintf ( s, n, format, arg);
|
||||
}
|
||||
int __cdecl vscanf(const char * Format, va_list argp);
|
||||
int __cdecl vfscanf (FILE * fp, const char * Format,va_list argp);
|
||||
int __cdecl vsscanf (const char * _Str,const char * Format,va_list argp);
|
||||
#endif
|
||||
/* Restore may prior defined macros snprintf/vsnprintf. */
|
||||
#pragma pop_macro("snprintf")
|
||||
#pragma pop_macro("vsnprintf")
|
||||
/* Check if vsnprintf and snprintf are defaulting to gnu-style. */
|
||||
# if defined(USE_MINGW_GNU_SNPRINTF) && USE_MINGW_GNU_SNPRINTF
|
||||
# ifndef vsnprint
|
||||
# define vsnprintf __mingw_vsnprintf
|
||||
# endif
|
||||
# ifndef snprintf
|
||||
# define snprintf __mingw_snprintf
|
||||
# endif
|
||||
# endif
|
||||
_CRTIMP int __cdecl _vscprintf(const char *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _set_printf_count_output(int _Value);
|
||||
_CRTIMP int __cdecl _get_printf_count_output(void);
|
||||
|
||||
#ifndef _WSTDIO_DEFINED
|
||||
|
||||
#ifndef WEOF
|
||||
#define WEOF (wint_t)(0xFFFF)
|
||||
#endif
|
||||
|
||||
#ifdef _POSIX_
|
||||
_CRTIMP FILE *__cdecl _wfsopen(const wchar_t *_Filename,const wchar_t *_Mode);
|
||||
#else
|
||||
_CRTIMP FILE *__cdecl _wfsopen(const wchar_t *_Filename,const wchar_t *_Mode,int _ShFlag);
|
||||
#endif
|
||||
wint_t __cdecl fgetwc(FILE *_File);
|
||||
_CRTIMP wint_t __cdecl _fgetwchar(void);
|
||||
wint_t __cdecl fputwc(wchar_t _Ch,FILE *_File);
|
||||
_CRTIMP wint_t __cdecl _fputwchar(wchar_t _Ch);
|
||||
wint_t __cdecl getwc(FILE *_File);
|
||||
wint_t __cdecl getwchar(void);
|
||||
wint_t __cdecl putwc(wchar_t _Ch,FILE *_File);
|
||||
wint_t __cdecl putwchar(wchar_t _Ch);
|
||||
wint_t __cdecl ungetwc(wint_t _Ch,FILE *_File);
|
||||
wchar_t *__cdecl fgetws(wchar_t *_Dst,int _SizeInWords,FILE *_File);
|
||||
int __cdecl fputws(const wchar_t *_Str,FILE *_File);
|
||||
_CRTIMP wchar_t *__cdecl _getws(wchar_t *_String);
|
||||
_CRTIMP int __cdecl _putws(const wchar_t *_Str);
|
||||
int __cdecl fwprintf(FILE *_File,const wchar_t *_Format,...);
|
||||
int __cdecl wprintf(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _scwprintf(const wchar_t *_Format,...);
|
||||
int __cdecl vfwprintf(FILE *_File,const wchar_t *_Format,va_list _ArgList);
|
||||
int __cdecl vwprintf(const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl swprintf(wchar_t*, const wchar_t*, ...);
|
||||
_CRTIMP int __cdecl vswprintf(wchar_t*, const wchar_t*,va_list);
|
||||
_CRTIMP int __cdecl _swprintf_c(wchar_t *_DstBuf,size_t _SizeInWords,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _vswprintf_c(wchar_t *_DstBuf,size_t _SizeInWords,const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _snwprintf(wchar_t *_Dest,size_t _Count,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _vsnwprintf(wchar_t *_Dest,size_t _Count,const wchar_t *_Format,va_list _Args);
|
||||
#ifndef __NO_ISOCEXT /* externs in libmingwex.a */
|
||||
int __cdecl snwprintf (wchar_t* s, size_t n, const wchar_t* format, ...);
|
||||
__CRT_INLINE int __cdecl vsnwprintf (wchar_t* s, size_t n, const wchar_t* format, va_list arg) { return _vsnwprintf(s,n,format,arg); }
|
||||
int __cdecl vwscanf (const wchar_t *, va_list);
|
||||
int __cdecl vfwscanf (FILE *,const wchar_t *,va_list);
|
||||
int __cdecl vswscanf (const wchar_t *,const wchar_t *,va_list);
|
||||
#endif
|
||||
_CRTIMP int __cdecl _swprintf(wchar_t *_Dest,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _vswprintf(wchar_t *_Dest,const wchar_t *_Format,va_list _Args);
|
||||
|
||||
#ifndef RC_INVOKED
|
||||
#include <vadefs.h>
|
||||
#endif
|
||||
|
||||
#ifdef _CRT_NON_CONFORMING_SWPRINTFS
|
||||
#ifndef __cplusplus
|
||||
#define swprintf _swprintf
|
||||
#define vswprintf _vswprintf
|
||||
#define _swprintf_l __swprintf_l
|
||||
#define _vswprintf_l __vswprintf_l
|
||||
#endif
|
||||
#endif
|
||||
|
||||
_CRTIMP wchar_t *__cdecl _wtempnam(const wchar_t *_Directory,const wchar_t *_FilePrefix);
|
||||
_CRTIMP int __cdecl _vscwprintf(const wchar_t *_Format,va_list _ArgList);
|
||||
int __cdecl fwscanf(FILE *_File,const wchar_t *_Format,...);
|
||||
int __cdecl swscanf(const wchar_t *_Src,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _snwscanf(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,...);
|
||||
int __cdecl wscanf(const wchar_t *_Format,...);
|
||||
_CRTIMP FILE *__cdecl _wfdopen(int _FileHandle ,const wchar_t *_Mode);
|
||||
_CRTIMP FILE *__cdecl _wfopen(const wchar_t *_Filename,const wchar_t *_Mode);
|
||||
_CRTIMP FILE *__cdecl _wfreopen(const wchar_t *_Filename,const wchar_t *_Mode,FILE *_OldFile);
|
||||
#ifndef _CRT_WPERROR_DEFINED
|
||||
#define _CRT_WPERROR_DEFINED
|
||||
_CRTIMP void __cdecl _wperror(const wchar_t *_ErrMsg);
|
||||
#endif
|
||||
_CRTIMP FILE *__cdecl _wpopen(const wchar_t *_Command,const wchar_t *_Mode);
|
||||
#if !defined(NO_OLDNAMES) && !defined(wpopen)
|
||||
#define wpopen _wpopen
|
||||
#endif
|
||||
_CRTIMP int __cdecl _wremove(const wchar_t *_Filename);
|
||||
_CRTIMP wchar_t *__cdecl _wtmpnam(wchar_t *_Buffer);
|
||||
_CRTIMP wint_t __cdecl _fgetwc_nolock(FILE *_File);
|
||||
_CRTIMP wint_t __cdecl _fputwc_nolock(wchar_t _Ch,FILE *_File);
|
||||
_CRTIMP wint_t __cdecl _ungetwc_nolock(wint_t _Ch,FILE *_File);
|
||||
|
||||
#undef _CRT_GETPUTWCHAR_NOINLINE
|
||||
|
||||
#if !defined(__cplusplus) || defined(_CRT_GETPUTWCHAR_NOINLINE)
|
||||
#define getwchar() fgetwc(stdin)
|
||||
#define putwchar(_c) fputwc((_c),stdout)
|
||||
#else
|
||||
__CRT_INLINE wint_t __cdecl getwchar() { return (fgetwc(stdin)); }
|
||||
__CRT_INLINE wint_t __cdecl putwchar(wchar_t _C) { return (fputwc(_C,stdout)); }
|
||||
#endif
|
||||
|
||||
#define getwc(_stm) fgetwc(_stm)
|
||||
#define putwc(_c,_stm) fputwc(_c,_stm)
|
||||
#define _putwc_nolock(_c,_stm) _fputwc_nolock(_c,_stm)
|
||||
#define _getwc_nolock(_stm) _fgetwc_nolock(_stm)
|
||||
|
||||
#define _WSTDIO_DEFINED
|
||||
#endif
|
||||
|
||||
#define _STDIO_DEFINED
|
||||
#endif
|
||||
|
||||
#define _fgetc_nolock(_stream) (--(_stream)->_cnt >= 0 ? 0xff & *(_stream)->_ptr++ : _filbuf(_stream))
|
||||
#define _fputc_nolock(_c,_stream) (--(_stream)->_cnt >= 0 ? 0xff & (*(_stream)->_ptr++ = (char)(_c)) : _flsbuf((_c),(_stream)))
|
||||
#define _getc_nolock(_stream) _fgetc_nolock(_stream)
|
||||
#define _putc_nolock(_c,_stream) _fputc_nolock(_c,_stream)
|
||||
#define _getchar_nolock() _getc_nolock(stdin)
|
||||
#define _putchar_nolock(_c) _putc_nolock((_c),stdout)
|
||||
#define _getwchar_nolock() _getwc_nolock(stdin)
|
||||
#define _putwchar_nolock(_c) _putwc_nolock((_c),stdout)
|
||||
|
||||
_CRTIMP void __cdecl _lock_file(FILE *_File);
|
||||
_CRTIMP void __cdecl _unlock_file(FILE *_File);
|
||||
_CRTIMP int __cdecl _fclose_nolock(FILE *_File);
|
||||
_CRTIMP int __cdecl _fflush_nolock(FILE *_File);
|
||||
_CRTIMP size_t __cdecl _fread_nolock(void *_DstBuf,size_t _ElementSize,size_t _Count,FILE *_File);
|
||||
_CRTIMP int __cdecl _fseek_nolock(FILE *_File,long _Offset,int _Origin);
|
||||
_CRTIMP long __cdecl _ftell_nolock(FILE *_File);
|
||||
_CRTIMP int __cdecl _fseeki64_nolock(FILE *_File,__int64 _Offset,int _Origin);
|
||||
_CRTIMP __int64 __cdecl _ftelli64_nolock(FILE *_File);
|
||||
_CRTIMP size_t __cdecl _fwrite_nolock(const void *_DstBuf,size_t _Size,size_t _Count,FILE *_File);
|
||||
_CRTIMP int __cdecl _ungetc_nolock(int _Ch,FILE *_File);
|
||||
|
||||
#if !defined(NO_OLDNAMES) || !defined(_POSIX)
|
||||
#define P_tmpdir _P_tmpdir
|
||||
#define SYS_OPEN _SYS_OPEN
|
||||
|
||||
char *__cdecl tempnam(const char *_Directory,const char *_FilePrefix);
|
||||
int __cdecl fcloseall(void);
|
||||
FILE *__cdecl fdopen(int _FileHandle,const char *_Format);
|
||||
int __cdecl fgetchar(void);
|
||||
int __cdecl fileno(FILE *_File);
|
||||
int __cdecl flushall(void);
|
||||
int __cdecl fputchar(int _Ch);
|
||||
int __cdecl getw(FILE *_File);
|
||||
int __cdecl putw(int _Ch,FILE *_File);
|
||||
int __cdecl rmtmp(void);
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#include <sec_api/stdio_s.h>
|
||||
|
||||
#endif
|
|
@ -1,585 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_STDLIB
|
||||
#define _INC_STDLIB
|
||||
|
||||
#include <_mingw.h>
|
||||
#include <limits.h>
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
#ifdef __cplusplus
|
||||
#define NULL 0
|
||||
#else
|
||||
#define NULL ((void *)0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define EXIT_SUCCESS 0
|
||||
#define EXIT_FAILURE 1
|
||||
|
||||
#ifndef _ONEXIT_T_DEFINED
|
||||
#define _ONEXIT_T_DEFINED
|
||||
|
||||
typedef int (__cdecl *_onexit_t)(void);
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
#define onexit_t _onexit_t
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _DIV_T_DEFINED
|
||||
#define _DIV_T_DEFINED
|
||||
|
||||
typedef struct _div_t {
|
||||
int quot;
|
||||
int rem;
|
||||
} div_t;
|
||||
|
||||
typedef struct _ldiv_t {
|
||||
long quot;
|
||||
long rem;
|
||||
} ldiv_t;
|
||||
#endif
|
||||
|
||||
#ifndef _CRT_DOUBLE_DEC
|
||||
#define _CRT_DOUBLE_DEC
|
||||
|
||||
#pragma pack(4)
|
||||
typedef struct {
|
||||
unsigned char ld[10];
|
||||
} _LDOUBLE;
|
||||
#pragma pack()
|
||||
|
||||
#define _PTR_LD(x) ((unsigned char *)(&(x)->ld))
|
||||
|
||||
typedef struct {
|
||||
double x;
|
||||
} _CRT_DOUBLE;
|
||||
|
||||
typedef struct {
|
||||
float f;
|
||||
} _CRT_FLOAT;
|
||||
|
||||
#pragma push_macro("long")
|
||||
#undef long
|
||||
|
||||
typedef struct {
|
||||
long double x;
|
||||
} _LONGDOUBLE;
|
||||
|
||||
#pragma pop_macro("long")
|
||||
|
||||
#pragma pack(4)
|
||||
typedef struct {
|
||||
unsigned char ld12[12];
|
||||
} _LDBL12;
|
||||
#pragma pack()
|
||||
#endif
|
||||
|
||||
#define RAND_MAX 0x7fff
|
||||
|
||||
#ifndef MB_CUR_MAX
|
||||
#define MB_CUR_MAX ___mb_cur_max_func()
|
||||
#ifndef __mb_cur_max
|
||||
#ifdef _MSVCRT_
|
||||
extern int __mb_cur_max;
|
||||
#else
|
||||
#define __mb_cur_max (*_imp____mb_cur_max)
|
||||
extern int *_imp____mb_cur_max;
|
||||
#endif
|
||||
#endif
|
||||
#ifdef _MSVCRT_
|
||||
extern int __mbcur_max;
|
||||
#define ___mb_cur_max_func() (__mb_cur_max)
|
||||
#else
|
||||
extern int* _imp____mbcur_max;
|
||||
#define ___mb_cur_max_func() (*_imp____mb_cur_max)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define __max(a,b) (((a) > (b)) ? (a) : (b))
|
||||
#define __min(a,b) (((a) < (b)) ? (a) : (b))
|
||||
|
||||
#define _MAX_PATH 260
|
||||
#define _MAX_DRIVE 3
|
||||
#define _MAX_DIR 256
|
||||
#define _MAX_FNAME 256
|
||||
#define _MAX_EXT 256
|
||||
|
||||
#define _OUT_TO_DEFAULT 0
|
||||
#define _OUT_TO_STDERR 1
|
||||
#define _OUT_TO_MSGBOX 2
|
||||
#define _REPORT_ERRMODE 3
|
||||
|
||||
#define _WRITE_ABORT_MSG 0x1
|
||||
#define _CALL_REPORTFAULT 0x2
|
||||
|
||||
#define _MAX_ENV 32767
|
||||
|
||||
typedef void (__cdecl *_purecall_handler)(void);
|
||||
|
||||
_CRTIMP _purecall_handler __cdecl _set_purecall_handler(_purecall_handler _Handler);
|
||||
_CRTIMP _purecall_handler __cdecl _get_purecall_handler(void);
|
||||
|
||||
typedef void (__cdecl *_invalid_parameter_handler)(const wchar_t *,const wchar_t *,const wchar_t *,unsigned int,uintptr_t);
|
||||
_invalid_parameter_handler __cdecl _set_invalid_parameter_handler(_invalid_parameter_handler _Handler);
|
||||
_invalid_parameter_handler __cdecl _get_invalid_parameter_handler(void);
|
||||
|
||||
#ifndef _CRT_ERRNO_DEFINED
|
||||
#define _CRT_ERRNO_DEFINED
|
||||
_CRTIMP int *__cdecl _errno(void);
|
||||
#define errno (*_errno())
|
||||
errno_t __cdecl _set_errno(int _Value);
|
||||
errno_t __cdecl _get_errno(int *_Value);
|
||||
#endif
|
||||
_CRTIMP unsigned long *__cdecl __doserrno(void);
|
||||
#define _doserrno (*__doserrno())
|
||||
errno_t __cdecl _set_doserrno(unsigned long _Value);
|
||||
errno_t __cdecl _get_doserrno(unsigned long *_Value);
|
||||
#ifdef _MSVCRT_
|
||||
extern char *_sys_errlist[];
|
||||
extern int _sys_nerr;
|
||||
#else
|
||||
_CRTIMP char *_sys_errlist[1];
|
||||
_CRTIMP int _sys_nerr;
|
||||
#endif
|
||||
#if (defined(_X86_) && !defined(__x86_64))
|
||||
_CRTIMP int *__cdecl __p___argc(void);
|
||||
_CRTIMP char ***__cdecl __p___argv(void);
|
||||
_CRTIMP wchar_t ***__cdecl __p___wargv(void);
|
||||
_CRTIMP char ***__cdecl __p__environ(void);
|
||||
_CRTIMP wchar_t ***__cdecl __p__wenviron(void);
|
||||
_CRTIMP char **__cdecl __p__pgmptr(void);
|
||||
_CRTIMP wchar_t **__cdecl __p__wpgmptr(void);
|
||||
#endif
|
||||
#ifndef __argc
|
||||
#ifdef _MSVCRT_
|
||||
extern int __argc;
|
||||
#else
|
||||
#define __argc (*_imp____argc)
|
||||
extern int *_imp____argc;
|
||||
#endif
|
||||
#endif
|
||||
#ifndef __argv
|
||||
#ifdef _MSVCRT_
|
||||
extern char **__argv;
|
||||
#else
|
||||
#define __argv (*_imp____argv)
|
||||
extern char ***_imp____argv;
|
||||
#endif
|
||||
#endif
|
||||
#ifndef __wargv
|
||||
#ifdef _MSVCRT_
|
||||
extern wchar_t **__wargv;
|
||||
#else
|
||||
#define __wargv (*_imp____wargv)
|
||||
extern wchar_t ***_imp____wargv;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _POSIX_
|
||||
extern char **environ;
|
||||
#else
|
||||
#ifndef _environ
|
||||
#ifdef _MSVCRT_
|
||||
extern char **_environ;
|
||||
#else
|
||||
#define _environ (*_imp___environ)
|
||||
extern char ***_imp___environ;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _wenviron
|
||||
#ifdef _MSVCRT_
|
||||
extern wchar_t **_wenviron;
|
||||
#else
|
||||
#define _wenviron (*_imp___wenviron)
|
||||
extern wchar_t ***_imp___wenviron;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#ifndef _pgmptr
|
||||
#ifdef _MSVCRT_
|
||||
extern char *_pgmptr;
|
||||
#else
|
||||
#define _pgmptr (*_imp___pgmptr)
|
||||
extern char **_imp___pgmptr;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _wpgmptr
|
||||
#ifdef _MSVCRT_
|
||||
extern wchar_t *_wpgmptr;
|
||||
#else
|
||||
#define _wpgmptr (*_imp___wpgmptr)
|
||||
extern wchar_t **_imp___wpgmptr;
|
||||
#endif
|
||||
#endif
|
||||
errno_t __cdecl _get_pgmptr(char **_Value);
|
||||
errno_t __cdecl _get_wpgmptr(wchar_t **_Value);
|
||||
#ifndef _fmode
|
||||
#ifdef _MSVCRT_
|
||||
extern int _fmode;
|
||||
#else
|
||||
#define _fmode (*_imp___fmode)
|
||||
extern int *_imp___fmode;
|
||||
#endif
|
||||
#endif
|
||||
_CRTIMP errno_t __cdecl _set_fmode(int _Mode);
|
||||
_CRTIMP errno_t __cdecl _get_fmode(int *_PMode);
|
||||
|
||||
#ifndef _osplatform
|
||||
#ifdef _MSVCRT_
|
||||
extern unsigned int _osplatform;
|
||||
#else
|
||||
#define _osplatform (*_imp___osplatform)
|
||||
extern unsigned int *_imp___osplatform;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _osver
|
||||
#ifdef _MSVCRT_
|
||||
extern unsigned int _osver;
|
||||
#else
|
||||
#define _osver (*_imp___osver)
|
||||
extern unsigned int *_imp___osver;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _winver
|
||||
#ifdef _MSVCRT_
|
||||
extern unsigned int _winver;
|
||||
#else
|
||||
#define _winver (*_imp___winver)
|
||||
extern unsigned int *_imp___winver;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _winmajor
|
||||
#ifdef _MSVCRT_
|
||||
extern unsigned int _winmajor;
|
||||
#else
|
||||
#define _winmajor (*_imp___winmajor)
|
||||
extern unsigned int *_imp___winmajor;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _winminor
|
||||
#ifdef _MSVCRT_
|
||||
extern unsigned int _winminor;
|
||||
#else
|
||||
#define _winminor (*_imp___winminor)
|
||||
extern unsigned int *_imp___winminor;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
errno_t __cdecl _get_osplatform(unsigned int *_Value);
|
||||
errno_t __cdecl _get_osver(unsigned int *_Value);
|
||||
errno_t __cdecl _get_winver(unsigned int *_Value);
|
||||
errno_t __cdecl _get_winmajor(unsigned int *_Value);
|
||||
errno_t __cdecl _get_winminor(unsigned int *_Value);
|
||||
#ifndef _countof
|
||||
#ifndef __cplusplus
|
||||
#define _countof(_Array) (sizeof(_Array) / sizeof(_Array[0]))
|
||||
#else
|
||||
extern "C++" {
|
||||
template <typename _CountofType,size_t _SizeOfArray> char (*__countof_helper(UNALIGNED _CountofType (&_Array)[_SizeOfArray]))[_SizeOfArray];
|
||||
#define _countof(_Array) sizeof(*__countof_helper(_Array))
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _CRT_TERMINATE_DEFINED
|
||||
#define _CRT_TERMINATE_DEFINED
|
||||
void __cdecl __MINGW_NOTHROW exit(int _Code) __MINGW_ATTRIB_NORETURN;
|
||||
_CRTIMP void __cdecl __MINGW_NOTHROW _exit(int _Code) __MINGW_ATTRIB_NORETURN;
|
||||
#if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */
|
||||
/* C99 function name */
|
||||
void __cdecl _Exit(int) __MINGW_ATTRIB_NORETURN;
|
||||
__CRT_INLINE __MINGW_ATTRIB_NORETURN void __cdecl _Exit(int status)
|
||||
{ _exit(status); }
|
||||
#endif
|
||||
|
||||
#pragma push_macro("abort")
|
||||
#undef abort
|
||||
void __cdecl __declspec(noreturn) abort(void);
|
||||
#pragma pop_macro("abort")
|
||||
|
||||
#endif
|
||||
|
||||
_CRTIMP unsigned int __cdecl _set_abort_behavior(unsigned int _Flags,unsigned int _Mask);
|
||||
|
||||
#ifndef _CRT_ABS_DEFINED
|
||||
#define _CRT_ABS_DEFINED
|
||||
int __cdecl abs(int _X);
|
||||
long __cdecl labs(long _X);
|
||||
#endif
|
||||
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
__int64 __cdecl _abs64(__int64);
|
||||
#endif
|
||||
int __cdecl atexit(void (__cdecl *)(void));
|
||||
#ifndef _CRT_ATOF_DEFINED
|
||||
#define _CRT_ATOF_DEFINED
|
||||
double __cdecl atof(const char *_String);
|
||||
double __cdecl _atof_l(const char *_String,_locale_t _Locale);
|
||||
#endif
|
||||
int __cdecl atoi(const char *_Str);
|
||||
_CRTIMP int __cdecl _atoi_l(const char *_Str,_locale_t _Locale);
|
||||
long __cdecl atol(const char *_Str);
|
||||
_CRTIMP long __cdecl _atol_l(const char *_Str,_locale_t _Locale);
|
||||
#ifndef _CRT_ALGO_DEFINED
|
||||
#define _CRT_ALGO_DEFINED
|
||||
void *__cdecl bsearch(const void *_Key,const void *_Base,size_t _NumOfElements,size_t _SizeOfElements,int (__cdecl *_PtFuncCompare)(const void *,const void *));
|
||||
void __cdecl qsort(void *_Base,size_t _NumOfElements,size_t _SizeOfElements,int (__cdecl *_PtFuncCompare)(const void *,const void *));
|
||||
#endif
|
||||
unsigned short __cdecl _byteswap_ushort(unsigned short _Short);
|
||||
/*unsigned long __cdecl _byteswap_ulong (unsigned long _Long); */
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64 _Int64);
|
||||
#endif
|
||||
div_t __cdecl div(int _Numerator,int _Denominator);
|
||||
char *__cdecl getenv(const char *_VarName);
|
||||
_CRTIMP char *__cdecl _itoa(int _Value,char *_Dest,int _Radix);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP char *__cdecl _i64toa(__int64 _Val,char *_DstBuf,int _Radix);
|
||||
_CRTIMP char *__cdecl _ui64toa(unsigned __int64 _Val,char *_DstBuf,int _Radix);
|
||||
_CRTIMP __int64 __cdecl _atoi64(const char *_String);
|
||||
_CRTIMP __int64 __cdecl _atoi64_l(const char *_String,_locale_t _Locale);
|
||||
_CRTIMP __int64 __cdecl _strtoi64(const char *_String,char **_EndPtr,int _Radix);
|
||||
_CRTIMP __int64 __cdecl _strtoi64_l(const char *_String,char **_EndPtr,int _Radix,_locale_t _Locale);
|
||||
_CRTIMP unsigned __int64 __cdecl _strtoui64(const char *_String,char **_EndPtr,int _Radix);
|
||||
_CRTIMP unsigned __int64 __cdecl _strtoui64_l(const char *_String,char **_EndPtr,int _Radix,_locale_t _Locale);
|
||||
#endif
|
||||
ldiv_t __cdecl ldiv(long _Numerator,long _Denominator);
|
||||
_CRTIMP char *__cdecl _ltoa(long _Value,char *_Dest,int _Radix);
|
||||
int __cdecl mblen(const char *_Ch,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _mblen_l(const char *_Ch,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP size_t __cdecl _mbstrlen(const char *_Str);
|
||||
_CRTIMP size_t __cdecl _mbstrlen_l(const char *_Str,_locale_t _Locale);
|
||||
_CRTIMP size_t __cdecl _mbstrnlen(const char *_Str,size_t _MaxCount);
|
||||
_CRTIMP size_t __cdecl _mbstrnlen_l(const char *_Str,size_t _MaxCount,_locale_t _Locale);
|
||||
int __cdecl mbtowc(wchar_t *_DstCh,const char *_SrcCh,size_t _SrcSizeInBytes);
|
||||
_CRTIMP int __cdecl _mbtowc_l(wchar_t *_DstCh,const char *_SrcCh,size_t _SrcSizeInBytes,_locale_t _Locale);
|
||||
size_t __cdecl mbstowcs(wchar_t *_Dest,const char *_Source,size_t _MaxCount);
|
||||
_CRTIMP size_t __cdecl _mbstowcs_l(wchar_t *_Dest,const char *_Source,size_t _MaxCount,_locale_t _Locale);
|
||||
int __cdecl rand(void);
|
||||
_CRTIMP int __cdecl _set_error_mode(int _Mode);
|
||||
void __cdecl srand(unsigned int _Seed);
|
||||
double __cdecl strtod(const char *_Str,char **_EndPtr);
|
||||
float __cdecl strtof(const char *nptr, char **endptr);
|
||||
#if !defined __NO_ISOCEXT /* in libmingwex.a */
|
||||
float __cdecl strtof (const char * __restrict__, char ** __restrict__);
|
||||
long double __cdecl strtold(const char * __restrict__, char ** __restrict__);
|
||||
#endif /* __NO_ISOCEXT */
|
||||
_CRTIMP double __cdecl _strtod_l(const char *_Str,char **_EndPtr,_locale_t _Locale);
|
||||
long __cdecl strtol(const char *_Str,char **_EndPtr,int _Radix);
|
||||
_CRTIMP long __cdecl _strtol_l(const char *_Str,char **_EndPtr,int _Radix,_locale_t _Locale);
|
||||
unsigned long __cdecl strtoul(const char *_Str,char **_EndPtr,int _Radix);
|
||||
_CRTIMP unsigned long __cdecl _strtoul_l(const char *_Str,char **_EndPtr,int _Radix,_locale_t _Locale);
|
||||
#ifndef _CRT_SYSTEM_DEFINED
|
||||
#define _CRT_SYSTEM_DEFINED
|
||||
int __cdecl system(const char *_Command);
|
||||
#endif
|
||||
_CRTIMP char *__cdecl _ultoa(unsigned long _Value,char *_Dest,int _Radix);
|
||||
int __cdecl wctomb(char *_MbCh,wchar_t _WCh);
|
||||
_CRTIMP int __cdecl _wctomb_l(char *_MbCh,wchar_t _WCh,_locale_t _Locale);
|
||||
size_t __cdecl wcstombs(char *_Dest,const wchar_t *_Source,size_t _MaxCount);
|
||||
_CRTIMP size_t __cdecl _wcstombs_l(char *_Dest,const wchar_t *_Source,size_t _MaxCount,_locale_t _Locale);
|
||||
|
||||
#ifndef _CRT_ALLOCATION_DEFINED
|
||||
#define _CRT_ALLOCATION_DEFINED
|
||||
void *__cdecl calloc(size_t _NumOfElements,size_t _SizeOfElements);
|
||||
void __cdecl free(void *_Memory);
|
||||
void *__cdecl malloc(size_t _Size);
|
||||
void *__cdecl realloc(void *_Memory,size_t _NewSize);
|
||||
_CRTIMP void *__cdecl _recalloc(void *_Memory,size_t _Count,size_t _Size);
|
||||
_CRTIMP void __cdecl _aligned_free(void *_Memory);
|
||||
_CRTIMP void *__cdecl _aligned_malloc(size_t _Size,size_t _Alignment);
|
||||
_CRTIMP void *__cdecl _aligned_offset_malloc(size_t _Size,size_t _Alignment,size_t _Offset);
|
||||
_CRTIMP void *__cdecl _aligned_realloc(void *_Memory,size_t _Size,size_t _Alignment);
|
||||
_CRTIMP void *__cdecl _aligned_recalloc(void *_Memory,size_t _Count,size_t _Size,size_t _Alignment);
|
||||
_CRTIMP void *__cdecl _aligned_offset_realloc(void *_Memory,size_t _Size,size_t _Alignment,size_t _Offset);
|
||||
_CRTIMP void *__cdecl _aligned_offset_recalloc(void *_Memory,size_t _Count,size_t _Size,size_t _Alignment,size_t _Offset);
|
||||
#endif
|
||||
|
||||
#ifndef _WSTDLIB_DEFINED
|
||||
#define _WSTDLIB_DEFINED
|
||||
|
||||
_CRTIMP wchar_t *__cdecl _itow(int _Value,wchar_t *_Dest,int _Radix);
|
||||
_CRTIMP wchar_t *__cdecl _ltow(long _Value,wchar_t *_Dest,int _Radix);
|
||||
_CRTIMP wchar_t *__cdecl _ultow(unsigned long _Value,wchar_t *_Dest,int _Radix);
|
||||
double __cdecl wcstod(const wchar_t *_Str,wchar_t **_EndPtr);
|
||||
float __cdecl wcstof(const wchar_t *nptr, wchar_t **endptr);
|
||||
#if !defined __NO_ISOCEXT /* in libmingwex.a */
|
||||
float __cdecl wcstof( const wchar_t * __restrict__, wchar_t ** __restrict__);
|
||||
long double __cdecl wcstold(const wchar_t * __restrict__, wchar_t ** __restrict__);
|
||||
#endif /* __NO_ISOCEXT */
|
||||
_CRTIMP double __cdecl _wcstod_l(const wchar_t *_Str,wchar_t **_EndPtr,_locale_t _Locale);
|
||||
long __cdecl wcstol(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix);
|
||||
_CRTIMP long __cdecl _wcstol_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale);
|
||||
unsigned long __cdecl wcstoul(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix);
|
||||
_CRTIMP unsigned long __cdecl _wcstoul_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale);
|
||||
_CRTIMP wchar_t *__cdecl _wgetenv(const wchar_t *_VarName);
|
||||
#ifndef _CRT_WSYSTEM_DEFINED
|
||||
#define _CRT_WSYSTEM_DEFINED
|
||||
_CRTIMP int __cdecl _wsystem(const wchar_t *_Command);
|
||||
#endif
|
||||
_CRTIMP double __cdecl _wtof(const wchar_t *_Str);
|
||||
_CRTIMP double __cdecl _wtof_l(const wchar_t *_Str,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _wtoi(const wchar_t *_Str);
|
||||
_CRTIMP int __cdecl _wtoi_l(const wchar_t *_Str,_locale_t _Locale);
|
||||
_CRTIMP long __cdecl _wtol(const wchar_t *_Str);
|
||||
_CRTIMP long __cdecl _wtol_l(const wchar_t *_Str,_locale_t _Locale);
|
||||
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP wchar_t *__cdecl _i64tow(__int64 _Val,wchar_t *_DstBuf,int _Radix);
|
||||
_CRTIMP wchar_t *__cdecl _ui64tow(unsigned __int64 _Val,wchar_t *_DstBuf,int _Radix);
|
||||
_CRTIMP __int64 __cdecl _wtoi64(const wchar_t *_Str);
|
||||
_CRTIMP __int64 __cdecl _wtoi64_l(const wchar_t *_Str,_locale_t _Locale);
|
||||
_CRTIMP __int64 __cdecl _wcstoi64(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix);
|
||||
_CRTIMP __int64 __cdecl _wcstoi64_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale);
|
||||
_CRTIMP unsigned __int64 __cdecl _wcstoui64(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix);
|
||||
_CRTIMP unsigned __int64 __cdecl _wcstoui64_l(const wchar_t *_Str ,wchar_t **_EndPtr,int _Radix,_locale_t _Locale);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _POSIX_
|
||||
#define _CVTBUFSIZE (309+40)
|
||||
_CRTIMP char *__cdecl _fullpath(char *_FullPath,const char *_Path,size_t _SizeInBytes);
|
||||
_CRTIMP char *__cdecl _ecvt(double _Val,int _NumOfDigits,int *_PtDec,int *_PtSign);
|
||||
_CRTIMP char *__cdecl _fcvt(double _Val,int _NumOfDec,int *_PtDec,int *_PtSign);
|
||||
_CRTIMP char *__cdecl _gcvt(double _Val,int _NumOfDigits,char *_DstBuf);
|
||||
_CRTIMP int __cdecl _atodbl(_CRT_DOUBLE *_Result,char *_Str);
|
||||
_CRTIMP int __cdecl _atoldbl(_LDOUBLE *_Result,char *_Str);
|
||||
_CRTIMP int __cdecl _atoflt(_CRT_FLOAT *_Result,char *_Str);
|
||||
_CRTIMP int __cdecl _atodbl_l(_CRT_DOUBLE *_Result,char *_Str,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _atoldbl_l(_LDOUBLE *_Result,char *_Str,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _atoflt_l(_CRT_FLOAT *_Result,char *_Str,_locale_t _Locale);
|
||||
unsigned long __cdecl _lrotl(unsigned long _Val,int _Shift);
|
||||
unsigned long __cdecl _lrotr(unsigned long _Val,int _Shift);
|
||||
_CRTIMP void __cdecl _makepath(char *_Path,const char *_Drive,const char *_Dir,const char *_Filename,const char *_Ext);
|
||||
_onexit_t __cdecl _onexit(_onexit_t _Func);
|
||||
|
||||
#ifndef _CRT_PERROR_DEFINED
|
||||
#define _CRT_PERROR_DEFINED
|
||||
void __cdecl perror(const char *_ErrMsg);
|
||||
#endif
|
||||
_CRTIMP int __cdecl _putenv(const char *_EnvString);
|
||||
unsigned int __cdecl _rotl(unsigned int _Val,int _Shift);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
unsigned __int64 __cdecl _rotl64(unsigned __int64 _Val,int _Shift);
|
||||
#endif
|
||||
unsigned int __cdecl _rotr(unsigned int _Val,int _Shift);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
unsigned __int64 __cdecl _rotr64(unsigned __int64 _Val,int _Shift);
|
||||
#endif
|
||||
_CRTIMP void __cdecl _searchenv(const char *_Filename,const char *_EnvVar,char *_ResultPath);
|
||||
_CRTIMP void __cdecl _splitpath(const char *_FullPath,char *_Drive,char *_Dir,char *_Filename,char *_Ext);
|
||||
_CRTIMP void __cdecl _swab(char *_Buf1,char *_Buf2,int _SizeInBytes);
|
||||
|
||||
#ifndef _WSTDLIBP_DEFINED
|
||||
#define _WSTDLIBP_DEFINED
|
||||
_CRTIMP wchar_t *__cdecl _wfullpath(wchar_t *_FullPath,const wchar_t *_Path,size_t _SizeInWords);
|
||||
_CRTIMP void __cdecl _wmakepath(wchar_t *_ResultPath,const wchar_t *_Drive,const wchar_t *_Dir,const wchar_t *_Filename,const wchar_t *_Ext);
|
||||
#ifndef _CRT_WPERROR_DEFINED
|
||||
#define _CRT_WPERROR_DEFINED
|
||||
_CRTIMP void __cdecl _wperror(const wchar_t *_ErrMsg);
|
||||
#endif
|
||||
_CRTIMP int __cdecl _wputenv(const wchar_t *_EnvString);
|
||||
_CRTIMP void __cdecl _wsearchenv(const wchar_t *_Filename,const wchar_t *_EnvVar,wchar_t *_ResultPath);
|
||||
_CRTIMP void __cdecl _wsplitpath(const wchar_t *_FullPath,wchar_t *_Drive,wchar_t *_Dir,wchar_t *_Filename,wchar_t *_Ext);
|
||||
#endif
|
||||
|
||||
_CRTIMP void __cdecl _beep(unsigned _Frequency,unsigned _Duration) __MINGW_ATTRIB_DEPRECATED;
|
||||
/* Not to be confused with _set_error_mode (int). */
|
||||
_CRTIMP void __cdecl _seterrormode(int _Mode) __MINGW_ATTRIB_DEPRECATED;
|
||||
_CRTIMP void __cdecl _sleep(unsigned long _Duration) __MINGW_ATTRIB_DEPRECATED;
|
||||
#endif
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
#ifndef _POSIX_
|
||||
#if 0
|
||||
#ifndef __cplusplus
|
||||
#ifndef NOMINMAX
|
||||
#ifndef max
|
||||
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
||||
#endif
|
||||
#ifndef min
|
||||
#define min(a,b) (((a) < (b)) ? (a) : (b))
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define sys_errlist _sys_errlist
|
||||
#define sys_nerr _sys_nerr
|
||||
#define environ _environ
|
||||
char *__cdecl ecvt(double _Val,int _NumOfDigits,int *_PtDec,int *_PtSign);
|
||||
char *__cdecl fcvt(double _Val,int _NumOfDec,int *_PtDec,int *_PtSign);
|
||||
char *__cdecl gcvt(double _Val,int _NumOfDigits,char *_DstBuf);
|
||||
char *__cdecl itoa(int _Val,char *_DstBuf,int _Radix);
|
||||
char *__cdecl ltoa(long _Val,char *_DstBuf,int _Radix);
|
||||
int __cdecl putenv(const char *_EnvString);
|
||||
void __cdecl swab(char *_Buf1,char *_Buf2,int _SizeInBytes);
|
||||
char *__cdecl ultoa(unsigned long _Val,char *_Dstbuf,int _Radix);
|
||||
onexit_t __cdecl onexit(onexit_t _Func);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined __NO_ISOCEXT /* externs in static libmingwex.a */
|
||||
|
||||
typedef struct { long long quot, rem; } lldiv_t;
|
||||
|
||||
lldiv_t __cdecl lldiv(long long, long long);
|
||||
|
||||
__CRT_INLINE long long __cdecl llabs(long long _j) { return (_j >= 0 ? _j : -_j); }
|
||||
|
||||
#ifdef __TINYC__ /* gr */
|
||||
#define strtoll _strtoi64
|
||||
#define strtoull _strtoui64
|
||||
#else
|
||||
long long __cdecl strtoll(const char* __restrict__, char** __restrict, int);
|
||||
unsigned long long __cdecl strtoull(const char* __restrict__, char** __restrict__, int);
|
||||
#endif
|
||||
|
||||
/* these are stubs for MS _i64 versions */
|
||||
long long __cdecl atoll (const char *);
|
||||
|
||||
#ifndef __STRICT_ANSI__
|
||||
long long __cdecl wtoll (const wchar_t *);
|
||||
char *__cdecl lltoa (long long, char *, int);
|
||||
char *__cdecl ulltoa (unsigned long long , char *, int);
|
||||
wchar_t *__cdecl lltow (long long, wchar_t *, int);
|
||||
wchar_t *__cdecl ulltow (unsigned long long, wchar_t *, int);
|
||||
|
||||
/* __CRT_INLINE using non-ansi functions */
|
||||
__CRT_INLINE long long __cdecl atoll (const char * _c) { return _atoi64 (_c); }
|
||||
__CRT_INLINE char *__cdecl lltoa (long long _n, char * _c, int _i) { return _i64toa (_n, _c, _i); }
|
||||
__CRT_INLINE char *__cdecl ulltoa (unsigned long long _n, char * _c, int _i) { return _ui64toa (_n, _c, _i); }
|
||||
__CRT_INLINE long long __cdecl wtoll (const wchar_t * _w) { return _wtoi64 (_w); }
|
||||
__CRT_INLINE wchar_t *__cdecl lltow (long long _n, wchar_t * _w, int _i) { return _i64tow (_n, _w, _i); }
|
||||
__CRT_INLINE wchar_t *__cdecl ulltow (unsigned long long _n, wchar_t * _w, int _i) { return _ui64tow (_n, _w, _i); }
|
||||
#endif /* (__STRICT_ANSI__) */
|
||||
|
||||
#endif /* !__NO_ISOCEXT */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#include <sec_api/stdlib_s.h>
|
||||
#include <malloc.h>
|
||||
|
||||
#endif
|
|
@ -1,164 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_STRING
|
||||
#define _INC_STRING
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _NLSCMP_DEFINED
|
||||
#define _NLSCMP_DEFINED
|
||||
#define _NLSCMPERROR 2147483647
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
#ifdef __cplusplus
|
||||
#define NULL 0
|
||||
#else
|
||||
#define NULL ((void *)0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define _WConst_return _CONST_RETURN
|
||||
|
||||
#ifndef _CRT_MEMORY_DEFINED
|
||||
#define _CRT_MEMORY_DEFINED
|
||||
_CRTIMP void *__cdecl _memccpy(void *_Dst,const void *_Src,int _Val,size_t _MaxCount);
|
||||
_CONST_RETURN void *__cdecl memchr(const void *_Buf ,int _Val,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _memicmp(const void *_Buf1,const void *_Buf2,size_t _Size);
|
||||
_CRTIMP int __cdecl _memicmp_l(const void *_Buf1,const void *_Buf2,size_t _Size,_locale_t _Locale);
|
||||
int __cdecl memcmp(const void *_Buf1,const void *_Buf2,size_t _Size);
|
||||
void *__cdecl memcpy(void *_Dst,const void *_Src,size_t _Size);
|
||||
void *__cdecl memset(void *_Dst,int _Val,size_t _Size);
|
||||
#ifndef NO_OLDNAMES
|
||||
void *__cdecl memccpy(void *_Dst,const void *_Src,int _Val,size_t _Size);
|
||||
int __cdecl memicmp(const void *_Buf1,const void *_Buf2,size_t _Size);
|
||||
#endif
|
||||
#endif
|
||||
char *__cdecl _strset(char *_Str,int _Val);
|
||||
char *__cdecl strcpy(char *_Dest,const char *_Source);
|
||||
char *__cdecl strcat(char *_Dest,const char *_Source);
|
||||
int __cdecl strcmp(const char *_Str1,const char *_Str2);
|
||||
size_t __cdecl strlen(const char *_Str);
|
||||
#if 0
|
||||
size_t __cdecl strnlen(const char *_Str,size_t _MaxCount);
|
||||
#endif
|
||||
void *__cdecl memmove(void *_Dst,const void *_Src,size_t _Size);
|
||||
_CRTIMP char *__cdecl _strdup(const char *_Src);
|
||||
_CONST_RETURN char *__cdecl strchr(const char *_Str,int _Val);
|
||||
_CRTIMP int __cdecl _stricmp(const char *_Str1,const char *_Str2);
|
||||
_CRTIMP int __cdecl _strcmpi(const char *_Str1,const char *_Str2);
|
||||
_CRTIMP int __cdecl _stricmp_l(const char *_Str1,const char *_Str2,_locale_t _Locale);
|
||||
int __cdecl strcoll(const char *_Str1,const char *_Str2);
|
||||
_CRTIMP int __cdecl _strcoll_l(const char *_Str1,const char *_Str2,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _stricoll(const char *_Str1,const char *_Str2);
|
||||
_CRTIMP int __cdecl _stricoll_l(const char *_Str1,const char *_Str2,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _strncoll (const char *_Str1,const char *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _strncoll_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _strnicoll (const char *_Str1,const char *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _strnicoll_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
|
||||
size_t __cdecl strcspn(const char *_Str,const char *_Control);
|
||||
_CRTIMP char *__cdecl _strerror(const char *_ErrMsg);
|
||||
char *__cdecl strerror(int);
|
||||
_CRTIMP char *__cdecl _strlwr(char *_String);
|
||||
char *strlwr_l(char *_String,_locale_t _Locale);
|
||||
char *__cdecl strncat(char *_Dest,const char *_Source,size_t _Count);
|
||||
int __cdecl strncmp(const char *_Str1,const char *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _strnicmp(const char *_Str1,const char *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _strnicmp_l(const char *_Str1,const char *_Str2,size_t _MaxCount,_locale_t _Locale);
|
||||
char *strncpy(char *_Dest,const char *_Source,size_t _Count);
|
||||
_CRTIMP char *__cdecl _strnset(char *_Str,int _Val,size_t _MaxCount);
|
||||
_CONST_RETURN char *__cdecl strpbrk(const char *_Str,const char *_Control);
|
||||
_CONST_RETURN char *__cdecl strrchr(const char *_Str,int _Ch);
|
||||
_CRTIMP char *__cdecl _strrev(char *_Str);
|
||||
size_t __cdecl strspn(const char *_Str,const char *_Control);
|
||||
_CONST_RETURN char *__cdecl strstr(const char *_Str,const char *_SubStr);
|
||||
char *__cdecl strtok(char *_Str,const char *_Delim);
|
||||
_CRTIMP char *__cdecl _strupr(char *_String);
|
||||
_CRTIMP char *_strupr_l(char *_String,_locale_t _Locale);
|
||||
size_t __cdecl strxfrm(char *_Dst,const char *_Src,size_t _MaxCount);
|
||||
_CRTIMP size_t __cdecl _strxfrm_l(char *_Dst,const char *_Src,size_t _MaxCount,_locale_t _Locale);
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
char *__cdecl strdup(const char *_Src);
|
||||
int __cdecl strcmpi(const char *_Str1,const char *_Str2);
|
||||
int __cdecl stricmp(const char *_Str1,const char *_Str2);
|
||||
char *__cdecl strlwr(char *_Str);
|
||||
int __cdecl strnicmp(const char *_Str1,const char *_Str,size_t _MaxCount);
|
||||
__CRT_INLINE int __cdecl strncasecmp (const char *__sz1, const char *__sz2, size_t __sizeMaxCompare) { return _strnicmp (__sz1, __sz2, __sizeMaxCompare); }
|
||||
__CRT_INLINE int __cdecl strcasecmp (const char *__sz1, const char *__sz2) { return _stricmp (__sz1, __sz2); }
|
||||
char *__cdecl strnset(char *_Str,int _Val,size_t _MaxCount);
|
||||
char *__cdecl strrev(char *_Str);
|
||||
char *__cdecl strset(char *_Str,int _Val);
|
||||
char *__cdecl strupr(char *_Str);
|
||||
#endif
|
||||
|
||||
#ifndef _WSTRING_DEFINED
|
||||
#define _WSTRING_DEFINED
|
||||
|
||||
_CRTIMP wchar_t *__cdecl _wcsdup(const wchar_t *_Str);
|
||||
wchar_t *__cdecl wcscat(wchar_t *_Dest,const wchar_t *_Source);
|
||||
_CONST_RETURN wchar_t *__cdecl wcschr(const wchar_t *_Str,wchar_t _Ch);
|
||||
int __cdecl wcscmp(const wchar_t *_Str1,const wchar_t *_Str2);
|
||||
wchar_t *__cdecl wcscpy(wchar_t *_Dest,const wchar_t *_Source);
|
||||
size_t __cdecl wcscspn(const wchar_t *_Str,const wchar_t *_Control);
|
||||
size_t __cdecl wcslen(const wchar_t *_Str);
|
||||
size_t __cdecl wcsnlen(const wchar_t *_Src,size_t _MaxCount);
|
||||
wchar_t *wcsncat(wchar_t *_Dest,const wchar_t *_Source,size_t _Count);
|
||||
int __cdecl wcsncmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
|
||||
wchar_t *wcsncpy(wchar_t *_Dest,const wchar_t *_Source,size_t _Count);
|
||||
_CONST_RETURN wchar_t *__cdecl wcspbrk(const wchar_t *_Str,const wchar_t *_Control);
|
||||
_CONST_RETURN wchar_t *__cdecl wcsrchr(const wchar_t *_Str,wchar_t _Ch);
|
||||
size_t __cdecl wcsspn(const wchar_t *_Str,const wchar_t *_Control);
|
||||
_CONST_RETURN wchar_t *__cdecl wcsstr(const wchar_t *_Str,const wchar_t *_SubStr);
|
||||
wchar_t *__cdecl wcstok(wchar_t *_Str,const wchar_t *_Delim);
|
||||
_CRTIMP wchar_t *__cdecl _wcserror(int _ErrNum);
|
||||
_CRTIMP wchar_t *__cdecl __wcserror(const wchar_t *_Str);
|
||||
_CRTIMP int __cdecl _wcsicmp(const wchar_t *_Str1,const wchar_t *_Str2);
|
||||
_CRTIMP int __cdecl _wcsicmp_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _wcsnicmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _wcsnicmp_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP wchar_t *__cdecl _wcsnset(wchar_t *_Str,wchar_t _Val,size_t _MaxCount);
|
||||
_CRTIMP wchar_t *__cdecl _wcsrev(wchar_t *_Str);
|
||||
_CRTIMP wchar_t *__cdecl _wcsset(wchar_t *_Str,wchar_t _Val);
|
||||
_CRTIMP wchar_t *__cdecl _wcslwr(wchar_t *_String);
|
||||
_CRTIMP wchar_t *_wcslwr_l(wchar_t *_String,_locale_t _Locale);
|
||||
_CRTIMP wchar_t *__cdecl _wcsupr(wchar_t *_String);
|
||||
_CRTIMP wchar_t *_wcsupr_l(wchar_t *_String,_locale_t _Locale);
|
||||
size_t __cdecl wcsxfrm(wchar_t *_Dst,const wchar_t *_Src,size_t _MaxCount);
|
||||
_CRTIMP size_t __cdecl _wcsxfrm_l(wchar_t *_Dst,const wchar_t *_Src,size_t _MaxCount,_locale_t _Locale);
|
||||
int __cdecl wcscoll(const wchar_t *_Str1,const wchar_t *_Str2);
|
||||
_CRTIMP int __cdecl _wcscoll_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _wcsicoll(const wchar_t *_Str1,const wchar_t *_Str2);
|
||||
_CRTIMP int __cdecl _wcsicoll_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _wcsncoll(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _wcsncoll_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _wcsnicoll(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _wcsnicoll_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale);
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
wchar_t *__cdecl wcsdup(const wchar_t *_Str);
|
||||
#define wcswcs wcsstr
|
||||
int __cdecl wcsicmp(const wchar_t *_Str1,const wchar_t *_Str2);
|
||||
int __cdecl wcsnicmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
|
||||
wchar_t *__cdecl wcsnset(wchar_t *_Str,wchar_t _Val,size_t _MaxCount);
|
||||
wchar_t *__cdecl wcsrev(wchar_t *_Str);
|
||||
wchar_t *__cdecl wcsset(wchar_t *_Str,wchar_t _Val);
|
||||
wchar_t *__cdecl wcslwr(wchar_t *_Str);
|
||||
wchar_t *__cdecl wcsupr(wchar_t *_Str);
|
||||
int __cdecl wcsicoll(const wchar_t *_Str1,const wchar_t *_Str2);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include <sec_api/string_s.h>
|
||||
#endif
|
|
@ -1,13 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
/*
|
||||
* This file is part of the Mingw32 package.
|
||||
*
|
||||
* This fcntl.h maps to the root fcntl.h
|
||||
*/
|
||||
#ifndef __STRICT_ANSI__
|
||||
#include <fcntl.h>
|
||||
#endif
|
|
@ -1,14 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
/*
|
||||
* This file is part of the Mingw32 package.
|
||||
*
|
||||
* This file.h maps to the root fcntl.h
|
||||
* TODO?
|
||||
*/
|
||||
#ifndef __STRICT_ANSI__
|
||||
#include <fcntl.h>
|
||||
#endif
|
|
@ -1,30 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_LOCKING
|
||||
#define _INC_LOCKING
|
||||
|
||||
#ifndef _WIN32
|
||||
#error Only Win32 target is supported!
|
||||
#endif
|
||||
|
||||
/* All the headers include this file. */
|
||||
#include <_mingw.h>
|
||||
|
||||
#define _LK_UNLCK 0
|
||||
#define _LK_LOCK 1
|
||||
#define _LK_NBLCK 2
|
||||
#define _LK_RLCK 3
|
||||
#define _LK_NBRLCK 4
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
#define LK_UNLCK _LK_UNLCK
|
||||
#define LK_LOCK _LK_LOCK
|
||||
#define LK_NBLCK _LK_NBLCK
|
||||
#define LK_RLCK _LK_RLCK
|
||||
#define LK_NBRLCK _LK_NBRLCK
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -1,290 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_STAT
|
||||
#define _INC_STAT
|
||||
|
||||
#ifndef _WIN32
|
||||
#error Only Win32 target is supported!
|
||||
#endif
|
||||
|
||||
#include <_mingw.h>
|
||||
#include <io.h>
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _CRTIMP
|
||||
#define _CRTIMP __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifndef __TINYC__ /* gr */
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
#ifdef _WIN64
|
||||
#undef _USE_32BIT_TIME_T
|
||||
#endif
|
||||
#else
|
||||
#if _INTEGRAL_MAX_BITS < 64
|
||||
#define _USE_32BIT_TIME_T
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _TIME32_T_DEFINED
|
||||
typedef long __time32_t;
|
||||
#define _TIME32_T_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef _TIME64_T_DEFINED
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
typedef __int64 __time64_t;
|
||||
#endif
|
||||
#define _TIME64_T_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef _TIME_T_DEFINED
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
typedef __time32_t time_t;
|
||||
#else
|
||||
typedef __time64_t time_t;
|
||||
#endif
|
||||
#define _TIME_T_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef _WCHAR_T_DEFINED
|
||||
typedef unsigned short wchar_t;
|
||||
#define _WCHAR_T_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef _STAT_DEFINED
|
||||
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
#ifndef _WIN64
|
||||
#define _fstat32 _fstat
|
||||
#define _stat32 _stat
|
||||
#define _wstat32 _wstat
|
||||
#else
|
||||
#define _fstat _fstat32
|
||||
#define _stat _stat32
|
||||
#define _wstat _wstat32
|
||||
#endif
|
||||
#define _fstati64 _fstat32i64
|
||||
#define _stati64 _stat32i64
|
||||
#define _wstati64 _wstat32i64
|
||||
#else
|
||||
#define _fstat _fstat64i32
|
||||
#define _fstati64 _fstat64
|
||||
#define _stat _stat64
|
||||
#define _stati64 _stat64
|
||||
#define _wstat _wstat64
|
||||
#define _wstati64 _wstat64
|
||||
#endif
|
||||
|
||||
struct _stat32 {
|
||||
_dev_t st_dev;
|
||||
_ino_t st_ino;
|
||||
unsigned short st_mode;
|
||||
short st_nlink;
|
||||
short st_uid;
|
||||
short st_gid;
|
||||
_dev_t st_rdev;
|
||||
_off_t st_size;
|
||||
__time32_t st_atime;
|
||||
__time32_t st_mtime;
|
||||
__time32_t st_ctime;
|
||||
};
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
struct stat {
|
||||
_dev_t st_dev;
|
||||
_ino_t st_ino;
|
||||
unsigned short st_mode;
|
||||
short st_nlink;
|
||||
short st_uid;
|
||||
short st_gid;
|
||||
_dev_t st_rdev;
|
||||
_off_t st_size;
|
||||
time_t st_atime;
|
||||
time_t st_mtime;
|
||||
time_t st_ctime;
|
||||
};
|
||||
#endif
|
||||
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
struct _stat32i64 {
|
||||
_dev_t st_dev;
|
||||
_ino_t st_ino;
|
||||
unsigned short st_mode;
|
||||
short st_nlink;
|
||||
short st_uid;
|
||||
short st_gid;
|
||||
_dev_t st_rdev;
|
||||
__int64 st_size;
|
||||
__time32_t st_atime;
|
||||
__time32_t st_mtime;
|
||||
__time32_t st_ctime;
|
||||
};
|
||||
|
||||
struct _stat64i32 {
|
||||
_dev_t st_dev;
|
||||
_ino_t st_ino;
|
||||
unsigned short st_mode;
|
||||
short st_nlink;
|
||||
short st_uid;
|
||||
short st_gid;
|
||||
_dev_t st_rdev;
|
||||
_off_t st_size;
|
||||
__time64_t st_atime;
|
||||
__time64_t st_mtime;
|
||||
__time64_t st_ctime;
|
||||
};
|
||||
|
||||
struct _stat64 {
|
||||
_dev_t st_dev;
|
||||
_ino_t st_ino;
|
||||
unsigned short st_mode;
|
||||
short st_nlink;
|
||||
short st_uid;
|
||||
short st_gid;
|
||||
_dev_t st_rdev;
|
||||
__int64 st_size;
|
||||
__time64_t st_atime;
|
||||
__time64_t st_mtime;
|
||||
__time64_t st_ctime;
|
||||
};
|
||||
#endif
|
||||
|
||||
#define __stat64 _stat64
|
||||
|
||||
#define _STAT_DEFINED
|
||||
#endif
|
||||
|
||||
#define _S_IFMT 0xF000
|
||||
#define _S_IFDIR 0x4000
|
||||
#define _S_IFCHR 0x2000
|
||||
#define _S_IFIFO 0x1000
|
||||
#define _S_IFREG 0x8000
|
||||
#define _S_IREAD 0x0100
|
||||
#define _S_IWRITE 0x0080
|
||||
#define _S_IEXEC 0x0040
|
||||
|
||||
_CRTIMP int __cdecl _fstat32(int _FileDes,struct _stat32 *_Stat);
|
||||
_CRTIMP int __cdecl _stat32(const char *_Name,struct _stat32 *_Stat);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP int __cdecl _fstat64(int _FileDes,struct _stat64 *_Stat);
|
||||
_CRTIMP int __cdecl _fstat32i64(int _FileDes,struct _stat32i64 *_Stat);
|
||||
int __cdecl _fstat64i32(int _FileDes,struct _stat64i32 *_Stat);
|
||||
__CRT_INLINE int __cdecl _fstat64i32(int _FileDes,struct _stat64i32 *_Stat)
|
||||
{
|
||||
struct _stat64 st;
|
||||
int ret=_fstat64(_FileDes,&st);
|
||||
_Stat->st_dev=st.st_dev;
|
||||
_Stat->st_ino=st.st_ino;
|
||||
_Stat->st_mode=st.st_mode;
|
||||
_Stat->st_nlink=st.st_nlink;
|
||||
_Stat->st_uid=st.st_uid;
|
||||
_Stat->st_gid=st.st_gid;
|
||||
_Stat->st_rdev=st.st_rdev;
|
||||
_Stat->st_size=(_off_t) st.st_size;
|
||||
_Stat->st_atime=st.st_atime;
|
||||
_Stat->st_mtime=st.st_mtime;
|
||||
_Stat->st_ctime=st.st_ctime;
|
||||
return ret;
|
||||
}
|
||||
_CRTIMP int __cdecl _stat64(const char *_Name,struct _stat64 *_Stat);
|
||||
_CRTIMP int __cdecl _stat32i64(const char *_Name,struct _stat32i64 *_Stat);
|
||||
int __cdecl _stat64i32(const char *_Name,struct _stat64i32 *_Stat);
|
||||
__CRT_INLINE int __cdecl _stat64i32(const char *_Name,struct _stat64i32 *_Stat)
|
||||
{
|
||||
struct _stat64 st;
|
||||
int ret=_stat64(_Name,&st);
|
||||
_Stat->st_dev=st.st_dev;
|
||||
_Stat->st_ino=st.st_ino;
|
||||
_Stat->st_mode=st.st_mode;
|
||||
_Stat->st_nlink=st.st_nlink;
|
||||
_Stat->st_uid=st.st_uid;
|
||||
_Stat->st_gid=st.st_gid;
|
||||
_Stat->st_rdev=st.st_rdev;
|
||||
_Stat->st_size=(_off_t) st.st_size;
|
||||
_Stat->st_atime=st.st_atime;
|
||||
_Stat->st_mtime=st.st_mtime;
|
||||
_Stat->st_ctime=st.st_ctime;
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef _WSTAT_DEFINED
|
||||
#define _WSTAT_DEFINED
|
||||
_CRTIMP int __cdecl _wstat32(const wchar_t *_Name,struct _stat32 *_Stat);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP int __cdecl _wstat32i64(const wchar_t *_Name,struct _stat32i64 *_Stat);
|
||||
int __cdecl _wstat64i32(const wchar_t *_Name,struct _stat64i32 *_Stat);
|
||||
_CRTIMP int __cdecl _wstat64(const wchar_t *_Name,struct _stat64 *_Stat);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
#define _S_IFBLK 0x3000 /* Block: Is this ever set under w32? */
|
||||
|
||||
#define S_IFMT _S_IFMT
|
||||
#define S_IFDIR _S_IFDIR
|
||||
#define S_IFCHR _S_IFCHR
|
||||
#define S_IFREG _S_IFREG
|
||||
#define S_IREAD _S_IREAD
|
||||
#define S_IWRITE _S_IWRITE
|
||||
#define S_IEXEC _S_IEXEC
|
||||
#define S_IFIFO _S_IFIFO
|
||||
#define S_IFBLK _S_IFBLK
|
||||
|
||||
#define _S_IRWXU (_S_IREAD | _S_IWRITE | _S_IEXEC)
|
||||
#define _S_IXUSR _S_IEXEC
|
||||
#define _S_IWUSR _S_IWRITE
|
||||
|
||||
#define S_IRWXU _S_IRWXU
|
||||
#define S_IXUSR _S_IXUSR
|
||||
#define S_IWUSR _S_IWUSR
|
||||
#define S_IRUSR _S_IRUSR
|
||||
#define _S_IRUSR _S_IREAD
|
||||
|
||||
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
|
||||
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
|
||||
#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
|
||||
#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
|
||||
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
|
||||
|
||||
#endif
|
||||
|
||||
#if !defined (RC_INVOKED) && !defined (NO_OLDNAMES)
|
||||
int __cdecl stat(const char *_Filename,struct stat *_Stat);
|
||||
int __cdecl fstat(int _Desc,struct stat *_Stat);
|
||||
int __cdecl wstat(const wchar_t *_Filename,struct stat *_Stat);
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
__CRT_INLINE int __cdecl fstat(int _Desc,struct stat *_Stat) {
|
||||
return _fstat32(_Desc,(struct _stat32 *)_Stat);
|
||||
}
|
||||
__CRT_INLINE int __cdecl stat(const char *_Filename,struct stat *_Stat) {
|
||||
return _stat32(_Filename,(struct _stat32 *)_Stat);
|
||||
}
|
||||
#else
|
||||
__CRT_INLINE int __cdecl fstat(int _Desc,struct stat *_Stat) {
|
||||
return _fstat64i32(_Desc,(struct _stat64i32 *)_Stat);
|
||||
}
|
||||
__CRT_INLINE int __cdecl stat(const char *_Filename,struct stat *_Stat) {
|
||||
return _stat64i32(_Filename,(struct _stat64i32 *)_Stat);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#pragma pack(pop)
|
||||
#endif
|
|
@ -1,69 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_TIME_H_
|
||||
#define _SYS_TIME_H_
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef __STRICT_ANSI__
|
||||
#ifndef _TIMEVAL_DEFINED /* also in winsock[2].h */
|
||||
#define _TIMEVAL_DEFINED
|
||||
struct timeval {
|
||||
long tv_sec;
|
||||
long tv_usec;
|
||||
};
|
||||
#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
|
||||
#define timercmp(tvp, uvp, cmp) \
|
||||
(((tvp)->tv_sec != (uvp)->tv_sec) ? \
|
||||
((tvp)->tv_sec cmp (uvp)->tv_sec) : \
|
||||
((tvp)->tv_usec cmp (uvp)->tv_usec))
|
||||
#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0
|
||||
#endif /* _TIMEVAL_DEFINED */
|
||||
|
||||
#ifndef _TIMEZONE_DEFINED /* also in sys/time.h */
|
||||
#define _TIMEZONE_DEFINED
|
||||
/* Provided for compatibility with code that assumes that
|
||||
the presence of gettimeofday function implies a definition
|
||||
of struct timezone. */
|
||||
struct timezone
|
||||
{
|
||||
int tz_minuteswest; /* of Greenwich */
|
||||
int tz_dsttime; /* type of dst correction to apply */
|
||||
};
|
||||
|
||||
extern int __cdecl mingw_gettimeofday (struct timeval *p, struct timezone *z);
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
Implementation as per:
|
||||
The Open Group Base Specifications, Issue 6
|
||||
IEEE Std 1003.1, 2004 Edition
|
||||
|
||||
The timezone pointer arg is ignored. Errors are ignored.
|
||||
*/
|
||||
#ifndef _GETTIMEOFDAY_DEFINED
|
||||
#define _GETTIMEOFDAY_DEFINED
|
||||
int __cdecl gettimeofday(struct timeval *__restrict__,
|
||||
void *__restrict__ /* tzp (unused) */);
|
||||
#endif
|
||||
|
||||
#endif /* __STRICT_ANSI__ */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Adding timespec definition. */
|
||||
#include <sys/timeb.h>
|
||||
|
||||
|
||||
#endif /* _SYS_TIME_H_ */
|
|
@ -1,133 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _TIMEB_H_
|
||||
#define _TIMEB_H_
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#ifndef _WIN32
|
||||
#error Only Win32 target is supported!
|
||||
#endif
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _CRTIMP
|
||||
#define _CRTIMP __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
#ifndef __TINYC__ /* gr */
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
#ifdef _WIN64
|
||||
#undef _USE_32BIT_TIME_T
|
||||
#endif
|
||||
#else
|
||||
#if _INTEGRAL_MAX_BITS < 64
|
||||
#define _USE_32BIT_TIME_T
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _TIME32_T_DEFINED
|
||||
typedef long __time32_t;
|
||||
#define _TIME32_T_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef _TIME64_T_DEFINED
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
typedef __int64 __time64_t;
|
||||
#endif
|
||||
#define _TIME64_T_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef _TIME_T_DEFINED
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
typedef __time32_t time_t;
|
||||
#else
|
||||
typedef __time64_t time_t;
|
||||
#endif
|
||||
#define _TIME_T_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef _TIMEB_DEFINED
|
||||
#define _TIMEB_DEFINED
|
||||
|
||||
struct __timeb32 {
|
||||
__time32_t time;
|
||||
unsigned short millitm;
|
||||
short timezone;
|
||||
short dstflag;
|
||||
};
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
struct timeb {
|
||||
time_t time;
|
||||
unsigned short millitm;
|
||||
short timezone;
|
||||
short dstflag;
|
||||
};
|
||||
#endif
|
||||
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
struct __timeb64 {
|
||||
__time64_t time;
|
||||
unsigned short millitm;
|
||||
short timezone;
|
||||
short dstflag;
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
#define _timeb __timeb32
|
||||
//gr #define _ftime _ftime32
|
||||
#define _ftime32 _ftime
|
||||
#else
|
||||
#define _timeb __timeb64
|
||||
#define _ftime _ftime64
|
||||
#endif
|
||||
#endif
|
||||
|
||||
_CRTIMP void __cdecl _ftime32(struct __timeb32 *_Time);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP void __cdecl _ftime64(struct __timeb64 *_Time);
|
||||
#endif
|
||||
|
||||
#ifndef _TIMESPEC_DEFINED
|
||||
#define _TIMESPEC_DEFINED
|
||||
struct timespec {
|
||||
time_t tv_sec; /* Seconds */
|
||||
long tv_nsec; /* Nanoseconds */
|
||||
};
|
||||
|
||||
struct itimerspec {
|
||||
struct timespec it_interval; /* Timer period */
|
||||
struct timespec it_value; /* Timer expiration */
|
||||
};
|
||||
#endif
|
||||
|
||||
#if !defined (RC_INVOKED) && !defined (NO_OLDNAMES)
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
__CRT_INLINE void __cdecl ftime(struct timeb *_Tmb) {
|
||||
_ftime32((struct __timeb32 *)_Tmb);
|
||||
}
|
||||
#else
|
||||
__CRT_INLINE void __cdecl ftime(struct timeb *_Tmb) {
|
||||
_ftime64((struct __timeb64 *)_Tmb);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#include <sec_api/sys/timeb_s.h>
|
||||
#endif
|
|
@ -1,123 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_TYPES
|
||||
#define _INC_TYPES
|
||||
|
||||
#ifndef _WIN32
|
||||
#error Only Win32 target is supported!
|
||||
#endif
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#ifndef __TINYC__ /* gr */
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
#ifdef _WIN64
|
||||
#undef _USE_32BIT_TIME_T
|
||||
#endif
|
||||
#else
|
||||
#if _INTEGRAL_MAX_BITS < 64
|
||||
#define _USE_32BIT_TIME_T
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _TIME32_T_DEFINED
|
||||
#define _TIME32_T_DEFINED
|
||||
typedef long __time32_t;
|
||||
#endif
|
||||
|
||||
#ifndef _TIME64_T_DEFINED
|
||||
#define _TIME64_T_DEFINED
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
typedef __int64 __time64_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _TIME_T_DEFINED
|
||||
#define _TIME_T_DEFINED
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
typedef __time32_t time_t;
|
||||
#else
|
||||
typedef __time64_t time_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _INO_T_DEFINED
|
||||
#define _INO_T_DEFINED
|
||||
typedef unsigned short _ino_t;
|
||||
#ifndef NO_OLDNAMES
|
||||
typedef unsigned short ino_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _DEV_T_DEFINED
|
||||
#define _DEV_T_DEFINED
|
||||
typedef unsigned int _dev_t;
|
||||
#ifndef NO_OLDNAMES
|
||||
typedef unsigned int dev_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _PID_T_
|
||||
#define _PID_T_
|
||||
#ifndef _WIN64
|
||||
typedef int _pid_t;
|
||||
#else
|
||||
typedef __int64 _pid_t;
|
||||
#endif
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
typedef _pid_t pid_t;
|
||||
#endif
|
||||
#endif /* Not _PID_T_ */
|
||||
|
||||
#ifndef _MODE_T_
|
||||
#define _MODE_T_
|
||||
typedef unsigned short _mode_t;
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
typedef _mode_t mode_t;
|
||||
#endif
|
||||
#endif /* Not _MODE_T_ */
|
||||
|
||||
#ifndef _OFF_T_DEFINED
|
||||
#define _OFF_T_DEFINED
|
||||
#ifndef _OFF_T_
|
||||
#define _OFF_T_
|
||||
typedef long _off_t;
|
||||
#if !defined(NO_OLDNAMES) || defined(_POSIX)
|
||||
typedef long off_t;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _OFF64_T_DEFINED
|
||||
#define _OFF64_T_DEFINED
|
||||
typedef long long _off64_t;
|
||||
#if !defined(NO_OLDNAMES) || defined(_POSIX)
|
||||
typedef long long off64_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* required by (unbundled) unistd.h for usleep arg type */
|
||||
#ifndef __NO_ISOCEXT
|
||||
typedef unsigned int useconds_t;
|
||||
#endif
|
||||
|
||||
#ifndef _TIMESPEC_DEFINED
|
||||
#define _TIMESPEC_DEFINED
|
||||
struct timespec {
|
||||
time_t tv_sec; /* Seconds */
|
||||
long tv_nsec; /* Nanoseconds */
|
||||
};
|
||||
|
||||
struct itimerspec {
|
||||
struct timespec it_interval; /* Timer period */
|
||||
struct timespec it_value; /* Timer expiration */
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
|
@ -1,14 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
/*
|
||||
* This file is part of the Mingw32 package.
|
||||
*
|
||||
* unistd.h maps (roughly) to io.h
|
||||
*/
|
||||
#ifndef __STRICT_ANSI__
|
||||
#include <io.h>
|
||||
#endif
|
||||
|
|
@ -1,146 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_UTIME
|
||||
#define _INC_UTIME
|
||||
|
||||
#ifndef _WIN32
|
||||
#error Only Win32 target is supported!
|
||||
#endif
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _CRTIMP
|
||||
#define _CRTIMP __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
#ifndef _WCHAR_T_DEFINED
|
||||
typedef unsigned short wchar_t;
|
||||
#define _WCHAR_T_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef __TINYC__ /* gr */
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
#ifdef _WIN64
|
||||
#undef _USE_32BIT_TIME_T
|
||||
#endif
|
||||
#else
|
||||
#if _INTEGRAL_MAX_BITS < 64
|
||||
#define _USE_32BIT_TIME_T
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _TIME32_T_DEFINED
|
||||
#define _TIME32_T_DEFINED
|
||||
typedef long __time32_t;
|
||||
#endif
|
||||
|
||||
#ifndef _TIME64_T_DEFINED
|
||||
#define _TIME64_T_DEFINED
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
typedef __int64 __time64_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _TIME_T_DEFINED
|
||||
#define _TIME_T_DEFINED
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
typedef __time32_t time_t;
|
||||
#else
|
||||
typedef __time64_t time_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _UTIMBUF_DEFINED
|
||||
#define _UTIMBUF_DEFINED
|
||||
|
||||
struct _utimbuf {
|
||||
time_t actime;
|
||||
time_t modtime;
|
||||
};
|
||||
|
||||
struct __utimbuf32 {
|
||||
__time32_t actime;
|
||||
__time32_t modtime;
|
||||
};
|
||||
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
struct __utimbuf64 {
|
||||
__time64_t actime;
|
||||
__time64_t modtime;
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
struct utimbuf {
|
||||
time_t actime;
|
||||
time_t modtime;
|
||||
};
|
||||
|
||||
struct utimbuf32 {
|
||||
__time32_t actime;
|
||||
__time32_t modtime;
|
||||
};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
_CRTIMP int __cdecl _utime32(const char *_Filename,struct __utimbuf32 *_Time);
|
||||
_CRTIMP int __cdecl _futime32(int _FileDes,struct __utimbuf32 *_Time);
|
||||
_CRTIMP int __cdecl _wutime32(const wchar_t *_Filename,struct __utimbuf32 *_Time);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP int __cdecl _utime64(const char *_Filename,struct __utimbuf64 *_Time);
|
||||
_CRTIMP int __cdecl _futime64(int _FileDes,struct __utimbuf64 *_Time);
|
||||
_CRTIMP int __cdecl _wutime64(const wchar_t *_Filename,struct __utimbuf64 *_Time);
|
||||
#endif
|
||||
|
||||
#ifndef RC_INVOKED
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
__CRT_INLINE int __cdecl _utime(const char *_Filename,struct _utimbuf *_Utimbuf) {
|
||||
return _utime32(_Filename,(struct __utimbuf32 *)_Utimbuf);
|
||||
}
|
||||
__CRT_INLINE int __cdecl _futime(int _Desc,struct _utimbuf *_Utimbuf) {
|
||||
return _futime32(_Desc,(struct __utimbuf32 *)_Utimbuf);
|
||||
}
|
||||
__CRT_INLINE int __cdecl _wutime(const wchar_t *_Filename,struct _utimbuf *_Utimbuf) {
|
||||
return _wutime32(_Filename,(struct __utimbuf32 *)_Utimbuf);
|
||||
}
|
||||
#else
|
||||
__CRT_INLINE int __cdecl _utime(const char *_Filename,struct _utimbuf *_Utimbuf) {
|
||||
return _utime64(_Filename,(struct __utimbuf64 *)_Utimbuf);
|
||||
}
|
||||
__CRT_INLINE int __cdecl _futime(int _Desc,struct _utimbuf *_Utimbuf) {
|
||||
return _futime64(_Desc,(struct __utimbuf64 *)_Utimbuf);
|
||||
}
|
||||
__CRT_INLINE int __cdecl _wutime(const wchar_t *_Filename,struct _utimbuf *_Utimbuf) {
|
||||
return _wutime64(_Filename,(struct __utimbuf64 *)_Utimbuf);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
__CRT_INLINE int __cdecl utime(const char *_Filename,struct utimbuf *_Utimbuf) {
|
||||
return _utime32(_Filename,(struct __utimbuf32 *)_Utimbuf);
|
||||
}
|
||||
#else
|
||||
__CRT_INLINE int __cdecl utime(const char *_Filename,struct utimbuf *_Utimbuf) {
|
||||
return _utime64(_Filename,(struct __utimbuf64 *)_Utimbuf);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#pragma pack(pop)
|
||||
#endif
|
|
@ -1,618 +0,0 @@
|
|||
#ifndef _TCC_LIBM_H_
|
||||
#define _TCC_LIBM_H_
|
||||
|
||||
#include "../math.h"
|
||||
#include "../stdint.h"
|
||||
|
||||
/* TCC uses 8 bytes for double and long double, so effectively the l variants
|
||||
* are never used. For now, they just run the normal (double) variant.
|
||||
*/
|
||||
|
||||
/*
|
||||
* most of the code in this file is taken from MUSL rs-1.0 (MIT license)
|
||||
* - musl-libc: http://git.musl-libc.org/cgit/musl/tree/src/math?h=rs-1.0
|
||||
* - License: http://git.musl-libc.org/cgit/musl/tree/COPYRIGHT?h=rs-1.0
|
||||
*/
|
||||
|
||||
/*******************************************************************************
|
||||
Start of code based on MUSL
|
||||
*******************************************************************************/
|
||||
/*
|
||||
musl as a whole is licensed under the following standard MIT license:
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Copyright © 2005-2014 Rich Felker, et al.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* fpclassify */
|
||||
|
||||
__CRT_INLINE int __cdecl __fpclassify (double x) {
|
||||
union {double f; uint64_t i;} u = {.f = x};
|
||||
int e = u.i>>52 & 0x7ff;
|
||||
if (!e) return u.i<<1 ? FP_SUBNORMAL : FP_ZERO;
|
||||
if (e==0x7ff) return u.i<<12 ? FP_NAN : FP_INFINITE;
|
||||
return FP_NORMAL;
|
||||
}
|
||||
|
||||
__CRT_INLINE int __cdecl __fpclassifyf (float x) {
|
||||
union {float f; uint32_t i;} u = {.f = x};
|
||||
int e = u.i>>23 & 0xff;
|
||||
if (!e) return u.i<<1 ? FP_SUBNORMAL : FP_ZERO;
|
||||
if (e==0xff) return u.i<<9 ? FP_NAN : FP_INFINITE;
|
||||
return FP_NORMAL;
|
||||
}
|
||||
|
||||
__CRT_INLINE int __cdecl __fpclassifyl (long double x) {
|
||||
return __fpclassify(x);
|
||||
}
|
||||
|
||||
|
||||
/* signbit */
|
||||
|
||||
__CRT_INLINE int __cdecl __signbit (double x) {
|
||||
union {double f; uint64_t i;} u = {.f = x};
|
||||
return u.i>>63;
|
||||
}
|
||||
|
||||
__CRT_INLINE int __cdecl __signbitf (float x) {
|
||||
union {float f; uint32_t i; } u = {.f = x};
|
||||
return u.i>>31;
|
||||
}
|
||||
|
||||
__CRT_INLINE int __cdecl __signbitl (long double x) {
|
||||
return __signbit(x);
|
||||
}
|
||||
|
||||
|
||||
/* fmin*, fmax* */
|
||||
|
||||
#define TCCFP_FMIN_EVAL (isnan(x) ? y : \
|
||||
isnan(y) ? x : \
|
||||
(signbit(x) != signbit(y)) ? (signbit(x) ? x : y) : \
|
||||
x < y ? x : y)
|
||||
|
||||
__CRT_INLINE double __cdecl fmin (double x, double y) {
|
||||
return TCCFP_FMIN_EVAL;
|
||||
}
|
||||
|
||||
__CRT_INLINE float __cdecl fminf (float x, float y) {
|
||||
return TCCFP_FMIN_EVAL;
|
||||
}
|
||||
|
||||
__CRT_INLINE long double __cdecl fminl (long double x, long double y) {
|
||||
return TCCFP_FMIN_EVAL;
|
||||
}
|
||||
|
||||
#define TCCFP_FMAX_EVAL (isnan(x) ? y : \
|
||||
isnan(y) ? x : \
|
||||
(signbit(x) != signbit(y)) ? (signbit(x) ? y : x) : \
|
||||
x < y ? y : x)
|
||||
|
||||
__CRT_INLINE double __cdecl fmax (double x, double y) {
|
||||
return TCCFP_FMAX_EVAL;
|
||||
}
|
||||
|
||||
__CRT_INLINE float __cdecl fmaxf (float x, float y) {
|
||||
return TCCFP_FMAX_EVAL;
|
||||
}
|
||||
|
||||
__CRT_INLINE long double __cdecl fmaxl (long double x, long double y) {
|
||||
return TCCFP_FMAX_EVAL;
|
||||
}
|
||||
|
||||
|
||||
/* *round* */
|
||||
|
||||
#define TCCFP_FORCE_EVAL(x) do { \
|
||||
volatile typeof(x) __x; \
|
||||
__x = (x); \
|
||||
} while(0)
|
||||
|
||||
__CRT_INLINE double __cdecl round (double x) {
|
||||
union {double f; uint64_t i;} u = {.f = x};
|
||||
int e = u.i >> 52 & 0x7ff;
|
||||
double y;
|
||||
|
||||
if (e >= 0x3ff+52)
|
||||
return x;
|
||||
if (u.i >> 63)
|
||||
x = -x;
|
||||
if (e < 0x3ff-1) {
|
||||
/* raise inexact if x!=0 */
|
||||
TCCFP_FORCE_EVAL(x + 0x1p52);
|
||||
return 0*u.f;
|
||||
}
|
||||
y = (double)(x + 0x1p52) - 0x1p52 - x;
|
||||
y = y + x - (y > 0.5) + (y <= -0.5); /* branchless */
|
||||
return (u.i >> 63) ? -y : y;
|
||||
}
|
||||
|
||||
__CRT_INLINE long __cdecl lround (double x) {
|
||||
return round(x);
|
||||
}
|
||||
|
||||
__CRT_INLINE long long __cdecl llround (double x) {
|
||||
return round(x);
|
||||
}
|
||||
|
||||
__CRT_INLINE float __cdecl roundf (float x) {
|
||||
return round(x);
|
||||
}
|
||||
|
||||
__CRT_INLINE long __cdecl lroundf (float x) {
|
||||
return round(x);
|
||||
}
|
||||
|
||||
__CRT_INLINE long long __cdecl llroundf (float x) {
|
||||
return round(x);
|
||||
}
|
||||
|
||||
__CRT_INLINE long double __cdecl roundl (long double x) {
|
||||
return round(x);
|
||||
}
|
||||
|
||||
__CRT_INLINE long __cdecl lroundl (long double x) {
|
||||
return round(x);
|
||||
}
|
||||
|
||||
__CRT_INLINE long long __cdecl llroundl (long double x) {
|
||||
return round(x);
|
||||
}
|
||||
|
||||
|
||||
/* MUSL asinh, acosh, atanh */
|
||||
|
||||
__CRT_INLINE double __cdecl asinh(double x) {
|
||||
union {double f; uint64_t i;} u = {.f = x};
|
||||
unsigned e = u.i >> 52 & 0x7ff, s = u.i >> 63;
|
||||
u.i &= -1ull / 2, x = u.f;
|
||||
if (e >= 0x3ff + 26) x = log(x) + 0.693147180559945309;
|
||||
else if (e >= 0x3ff + 1) x = log(2*x + 1 / (sqrt(x*x + 1) + x)); /* |x|>=2 */
|
||||
else if (e >= 0x3ff - 26) x = log1p(x + x*x / (sqrt(x*x + 1) + 1));
|
||||
else TCCFP_FORCE_EVAL(x + 0x1p120f);
|
||||
return s ? -x : x;
|
||||
}
|
||||
|
||||
__CRT_INLINE double __cdecl acosh(double x) {
|
||||
union {double f; uint64_t i;} u = {.f = x};
|
||||
unsigned e = u.i >> 52 & 0x7ff;
|
||||
if (e < 0x3ff + 1) return --x, log1p(x + sqrt(x*x + 2*x)); /* |x|<2 */
|
||||
if (e < 0x3ff + 26) return log(2*x - 1 / (x + sqrt(x*x - 1)));
|
||||
return log(x) + 0.693147180559945309;
|
||||
}
|
||||
|
||||
__CRT_INLINE double __cdecl atanh(double x) {
|
||||
union {double f; uint64_t i;} u = {.f = x};
|
||||
unsigned e = u.i >> 52 & 0x7ff, s = u.i >> 63;
|
||||
u.i &= -1ull / 2, x = u.f;
|
||||
if (e < 0x3ff - 1) {
|
||||
if (e < 0x3ff - 32) { if (e == 0) TCCFP_FORCE_EVAL((float)x); }
|
||||
else x = 0.5 * log1p(2*x + 2*x*x / (1 - x)); /* |x| < 0.5 */
|
||||
} else x = 0.5 * log1p(2*(x / (1 - x))); /* avoid overflow */
|
||||
return s ? -x : x;
|
||||
}
|
||||
|
||||
/* MUSL scalbn */
|
||||
|
||||
__CRT_INLINE double __cdecl scalbn(double x, int n) {
|
||||
union {double f; uint64_t i;} u;
|
||||
if (n > 1023) {
|
||||
x *= 0x1p1023, n -= 1023;
|
||||
if (n > 1023) {
|
||||
x *= 0x1p1023, n -= 1023;
|
||||
if (n > 1023) n = 1023;
|
||||
}
|
||||
} else if (n < -1022) {
|
||||
x *= 0x1p-1022 * 0x1p53, n += 1022 - 53;
|
||||
if (n < -1022) {
|
||||
x *= 0x1p-1022 * 0x1p53, n += 1022 - 53;
|
||||
if (n < -1022) n = -1022;
|
||||
}
|
||||
}
|
||||
u.i = (0x3ffull + n) << 52;
|
||||
return x * u.f;
|
||||
}
|
||||
|
||||
/* MUSL: Override msvcrt frexp(): 4.5x speedup! */
|
||||
|
||||
__CRT_INLINE double __cdecl frexp(double x, int *e) {
|
||||
union {double f; uint64_t i;} u = {.f = x};
|
||||
int ee = u.i>>52 & 0x7ff;
|
||||
if (!ee) {
|
||||
if (x) x = frexp(x*0x1p64, e), *e -= 64;
|
||||
else *e = 0;
|
||||
return x;
|
||||
} else if (ee == 0x7ff)
|
||||
return x;
|
||||
*e = ee - 0x3fe;
|
||||
u.i &= 0x800fffffffffffffull;
|
||||
u.i |= 0x3fe0000000000000ull;
|
||||
return u.f;
|
||||
}
|
||||
|
||||
/* MUSL nan */
|
||||
|
||||
__CRT_INLINE double __cdecl nan(const char* s) {
|
||||
return NAN;
|
||||
}
|
||||
__CRT_INLINE float __cdecl nanf(const char* s) {
|
||||
return NAN;
|
||||
}
|
||||
__CRT_INLINE long double __cdecl nanl(const char* s) {
|
||||
return NAN;
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
End of code based on MUSL
|
||||
*******************************************************************************/
|
||||
|
||||
|
||||
/* Following are math functions missing from msvcrt.dll, and not defined
|
||||
* in math.h or above. Functions still remaining:
|
||||
* remquo(), remainder(), fma(), erf(), erfc(), nearbyint().
|
||||
* In <stdlib.h>: lldiv().
|
||||
*/
|
||||
|
||||
__CRT_INLINE float __cdecl scalbnf(float x, int n) {
|
||||
return scalbn(x, n);
|
||||
}
|
||||
__CRT_INLINE long double __cdecl scalbnl(long double x, int n) {
|
||||
return scalbn(x, n);
|
||||
}
|
||||
|
||||
__CRT_INLINE double __cdecl scalbln(double x, long n) {
|
||||
return scalbn(x, n);
|
||||
}
|
||||
__CRT_INLINE float __cdecl scalblnf(float x, long n) {
|
||||
return scalbn(x, n);
|
||||
}
|
||||
__CRT_INLINE long double __cdecl scalblnl(long double x, long n) {
|
||||
return scalbn(x, n);
|
||||
}
|
||||
|
||||
/* Override msvcrt ldexp(): 7.3x speedup! */
|
||||
|
||||
__CRT_INLINE double __cdecl ldexp(double x, int expn) {
|
||||
return scalbn(x, expn);
|
||||
}
|
||||
__CRT_INLINE float __cdecl ldexpf(float x, int expn) {
|
||||
return scalbn(x, expn);
|
||||
}
|
||||
__CRT_INLINE long double __cdecl ldexpl(long double x, int expn) {
|
||||
return scalbn(x, expn);
|
||||
}
|
||||
|
||||
__CRT_INLINE float __cdecl frexpf(float x, int *y) {
|
||||
return frexp(x, y);
|
||||
}
|
||||
__CRT_INLINE long double __cdecl frexpl (long double x, int* y) {
|
||||
return frexp(x, y);
|
||||
}
|
||||
|
||||
|
||||
__CRT_INLINE double __cdecl rint(double x) {
|
||||
double retval;
|
||||
__asm__ (
|
||||
"fldl %1\n"
|
||||
"frndint \n"
|
||||
"fstpl %0\n" : "=m" (retval) : "m" (x));
|
||||
return retval;
|
||||
}
|
||||
|
||||
__CRT_INLINE float __cdecl rintf(float x) {
|
||||
float retval;
|
||||
__asm__ (
|
||||
"flds %1\n"
|
||||
"frndint \n"
|
||||
"fstps %0\n" : "=m" (retval) : "m" (x));
|
||||
return retval;
|
||||
}
|
||||
__CRT_INLINE long double __cdecl rintl (long double x) {
|
||||
return rint(x);
|
||||
}
|
||||
|
||||
|
||||
/* 7.12.9.5 */
|
||||
__CRT_INLINE long __cdecl lrint(double x) {
|
||||
long retval;
|
||||
__asm__ __volatile__
|
||||
("fldl %1\n"
|
||||
"fistpl %0" : "=m" (retval) : "m" (x));
|
||||
return retval;
|
||||
}
|
||||
|
||||
__CRT_INLINE long __cdecl lrintf(float x) {
|
||||
long retval;
|
||||
__asm__ __volatile__
|
||||
("flds %1\n"
|
||||
"fistpl %0" : "=m" (retval) : "m" (x));
|
||||
return retval;
|
||||
}
|
||||
|
||||
__CRT_INLINE long __cdecl lrintl (long double x) {
|
||||
return lrint(x);
|
||||
}
|
||||
|
||||
|
||||
__CRT_INLINE long long __cdecl llrint(double x) {
|
||||
long long retval;
|
||||
__asm__ __volatile__
|
||||
("fldl %1\n"
|
||||
"fistpll %0" : "=m" (retval) : "m" (x));
|
||||
return retval;
|
||||
}
|
||||
|
||||
__CRT_INLINE long long __cdecl llrintf(float x) {
|
||||
long long retval;
|
||||
__asm__ __volatile__
|
||||
("flds %1\n"
|
||||
"fistpll %0" : "=m" (retval) : "m" (x));
|
||||
return retval;
|
||||
}
|
||||
|
||||
__CRT_INLINE long long __cdecl llrintl (long double x) {
|
||||
return llrint(x);
|
||||
}
|
||||
|
||||
|
||||
__CRT_INLINE double __cdecl trunc(double _x) {
|
||||
double retval;
|
||||
unsigned short saved_cw;
|
||||
unsigned short tmp_cw;
|
||||
__asm__ ("fnstcw %0;" : "=m" (saved_cw)); /* save FPU control word */
|
||||
tmp_cw = (saved_cw & ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO))
|
||||
| FE_TOWARDZERO;
|
||||
__asm__ ("fldcw %0;" : : "m" (tmp_cw));
|
||||
__asm__ ("fldl %1;"
|
||||
"frndint;"
|
||||
"fstpl %0;" : "=m" (retval) : "m" (_x)); /* round towards zero */
|
||||
__asm__ ("fldcw %0;" : : "m" (saved_cw) ); /* restore saved control word */
|
||||
return retval;
|
||||
}
|
||||
|
||||
__CRT_INLINE float __cdecl truncf(float x) {
|
||||
return (float) ((intptr_t) x);
|
||||
}
|
||||
__CRT_INLINE long double __cdecl truncl(long double x) {
|
||||
return trunc(x);
|
||||
}
|
||||
|
||||
|
||||
__CRT_INLINE long double __cdecl nextafterl(long double x, long double to) {
|
||||
return nextafter(x, to);
|
||||
}
|
||||
|
||||
__CRT_INLINE double __cdecl nexttoward(double x, long double to) {
|
||||
return nextafter(x, to);
|
||||
}
|
||||
__CRT_INLINE float __cdecl nexttowardf(float x, long double to) {
|
||||
return nextafterf(x, to);
|
||||
}
|
||||
__CRT_INLINE long double __cdecl nexttowardl(long double x, long double to) {
|
||||
return nextafter(x, to);
|
||||
}
|
||||
|
||||
/* Override msvcrt fabs(): 6.3x speedup! */
|
||||
|
||||
__CRT_INLINE double __cdecl fabs(double x) {
|
||||
return x < 0 ? -x : x;
|
||||
}
|
||||
__CRT_INLINE float __cdecl fabsf(float x) {
|
||||
return x < 0 ? -x : x;
|
||||
}
|
||||
__CRT_INLINE long double __cdecl fabsl(long double x) {
|
||||
return x < 0 ? -x : x;
|
||||
}
|
||||
|
||||
|
||||
#if defined(_WIN32) && !defined(_WIN64) && !defined(__ia64__)
|
||||
__CRT_INLINE float acosf(float x) { return acos(x); }
|
||||
__CRT_INLINE float asinf(float x) { return asin(x); }
|
||||
__CRT_INLINE float atanf(float x) { return atan(x); }
|
||||
__CRT_INLINE float atan2f(float x, float y) { return atan2(x, y); }
|
||||
__CRT_INLINE float ceilf(float x) { return ceil(x); }
|
||||
__CRT_INLINE float cosf(float x) { return cos(x); }
|
||||
__CRT_INLINE float coshf(float x) { return cosh(x); }
|
||||
__CRT_INLINE float expf(float x) { return exp(x); }
|
||||
__CRT_INLINE float floorf(float x) { return floor(x); }
|
||||
__CRT_INLINE float fmodf(float x, float y) { return fmod(x, y); }
|
||||
__CRT_INLINE float logf(float x) { return log(x); }
|
||||
__CRT_INLINE float logbf(float x) { return logb(x); }
|
||||
__CRT_INLINE float log10f(float x) { return log10(x); }
|
||||
__CRT_INLINE float modff(float x, float *y) { double di, df = modf(x, &di); *y = di; return df; }
|
||||
__CRT_INLINE float powf(float x, float y) { return pow(x, y); }
|
||||
__CRT_INLINE float sinf(float x) { return sin(x); }
|
||||
__CRT_INLINE float sinhf(float x) { return sinh(x); }
|
||||
__CRT_INLINE float sqrtf(float x) { return sqrt(x); }
|
||||
__CRT_INLINE float tanf(float x) { return tan(x); }
|
||||
__CRT_INLINE float tanhf(float x) { return tanh(x); }
|
||||
#endif
|
||||
__CRT_INLINE float __cdecl asinhf(float x) { return asinh(x); }
|
||||
__CRT_INLINE float __cdecl acoshf(float x) { return acosh(x); }
|
||||
__CRT_INLINE float __cdecl atanhf(float x) { return atanh(x); }
|
||||
|
||||
__CRT_INLINE long double __cdecl asinhl(long double x) { return asinh(x); }
|
||||
__CRT_INLINE long double __cdecl acoshl(long double x) { return acosh(x); }
|
||||
__CRT_INLINE long double __cdecl atanhl(long double x) { return atanh(x); }
|
||||
__CRT_INLINE long double __cdecl asinl(long double x) { return asin(x); }
|
||||
__CRT_INLINE long double __cdecl acosl(long double x) { return acos(x); }
|
||||
__CRT_INLINE long double __cdecl atanl(long double x) { return atan(x); }
|
||||
__CRT_INLINE long double __cdecl ceill(long double x) { return ceil(x); }
|
||||
__CRT_INLINE long double __cdecl coshl(long double x) { return cosh(x); }
|
||||
__CRT_INLINE long double __cdecl cosl(long double x) { return cos(x); }
|
||||
__CRT_INLINE long double __cdecl expl(long double x) { return exp(x); }
|
||||
__CRT_INLINE long double __cdecl floorl(long double x) { return floor(x); }
|
||||
__CRT_INLINE long double __cdecl fmodl(long double x, long double y) { return fmod(x, y); }
|
||||
__CRT_INLINE long double __cdecl hypotl(long double x, long double y) { return hypot(x, y); }
|
||||
__CRT_INLINE long double __cdecl logl(long double x) { return log(x); }
|
||||
__CRT_INLINE long double __cdecl logbl(long double x) { return logb(x); }
|
||||
__CRT_INLINE long double __cdecl log10l(long double x) { return log10(x); }
|
||||
__CRT_INLINE long double __cdecl modfl(long double x, long double* y) { double y1 = *y; x = modf(x, &y1); *y = y1; return x; }
|
||||
__CRT_INLINE long double __cdecl powl(long double x, long double y) { return pow(x, y); }
|
||||
__CRT_INLINE long double __cdecl sinhl(long double x) { return sinh(x); }
|
||||
__CRT_INLINE long double __cdecl sinl(long double x) { return sin(x); }
|
||||
__CRT_INLINE long double __cdecl sqrtl(long double x) { return sqrt(x); }
|
||||
__CRT_INLINE long double __cdecl tanhl(long double x) { return tanh(x); }
|
||||
__CRT_INLINE long double __cdecl tanl(long double x) { return tan(x); }
|
||||
|
||||
/* Following are accurate, but much shorter implementations than MUSL lib. */
|
||||
|
||||
__CRT_INLINE double __cdecl log1p(double x) {
|
||||
double u = 1.0 + x;
|
||||
return u == 1.0 ? x : log(u)*(x / (u - 1.0));
|
||||
}
|
||||
__CRT_INLINE float __cdecl log1pf(float x) {
|
||||
float u = 1.0f + x;
|
||||
return u == 1.0f ? x : logf(u)*(x / (u - 1.0f));
|
||||
}
|
||||
__CRT_INLINE long double __cdecl log1pl(long double x) {
|
||||
return log1p(x);
|
||||
}
|
||||
|
||||
|
||||
__CRT_INLINE double __cdecl expm1(double x) {
|
||||
if (x > 0.0024 || x < -0.0024) return exp(x) - 1.0;
|
||||
return x*(1.0 + 0.5*x*(1.0 + (1/3.0)*x*(1.0 + 0.25*x*(1.0 + 0.2*x))));
|
||||
}
|
||||
__CRT_INLINE float __cdecl expm1f(float x) {
|
||||
if (x > 0.085f || x < -0.085f) return expf(x) - 1.0f;
|
||||
return x*(1.0f + 0.5f*x*(1.0f + (1/3.0f)*x*(1.0f + 0.25f*x)));
|
||||
}
|
||||
__CRT_INLINE long double __cdecl expm1l(long double x) {
|
||||
return expm1(x);
|
||||
}
|
||||
|
||||
|
||||
__CRT_INLINE double __cdecl cbrt(double x) {
|
||||
return x < 0.0 ? -pow(-x, 1/3.0) : pow(x, 1/3.0);
|
||||
}
|
||||
__CRT_INLINE float __cdecl cbrtf(float x) {
|
||||
return x < 0.0f ? -pow(-x, 1/3.0) : pow(x, 1/3.0);
|
||||
}
|
||||
__CRT_INLINE long double __cdecl cbrtl(long double x) {
|
||||
return cbrt(x);
|
||||
}
|
||||
|
||||
|
||||
__CRT_INLINE double __cdecl log2(double x) {
|
||||
return log(x) * 1.442695040888963407;
|
||||
}
|
||||
__CRT_INLINE float __cdecl log2f(float x) {
|
||||
return log(x) * 1.442695040888963407;
|
||||
}
|
||||
__CRT_INLINE long double __cdecl log2l(long double x) {
|
||||
return log(x) * 1.442695040888963407;
|
||||
}
|
||||
|
||||
|
||||
__CRT_INLINE double __cdecl exp2(double x) {
|
||||
return exp(x * 0.693147180559945309);
|
||||
}
|
||||
__CRT_INLINE float __cdecl exp2f(float x) {
|
||||
return exp(x * 0.693147180559945309);
|
||||
}
|
||||
__CRT_INLINE long double __cdecl exp2l(long double x) {
|
||||
return exp(x * 0.693147180559945309);
|
||||
}
|
||||
|
||||
|
||||
__CRT_INLINE int __cdecl ilogb(double x) {
|
||||
return (int) logb(x);
|
||||
}
|
||||
__CRT_INLINE int __cdecl ilogbf(float x) {
|
||||
return (int) logbf(x);
|
||||
}
|
||||
__CRT_INLINE int __cdecl ilogbl(long double x) {
|
||||
return (int) logb(x);
|
||||
}
|
||||
|
||||
|
||||
__CRT_INLINE double __cdecl fdim(double x, double y) {
|
||||
if (isnan(x) || isnan(y)) return NAN;
|
||||
return x > y ? x - y : 0;
|
||||
}
|
||||
__CRT_INLINE float __cdecl fdimf(float x, float y) {
|
||||
if (isnan(x) || isnan(y)) return NAN;
|
||||
return x > y ? x - y : 0;
|
||||
}
|
||||
__CRT_INLINE long double __cdecl fdiml(long double x, long double y) {
|
||||
if (isnan(x) || isnan(y)) return NAN;
|
||||
return x > y ? x - y : 0;
|
||||
}
|
||||
|
||||
|
||||
/* tgamma and lgamma: Lanczos approximation
|
||||
* https://rosettacode.org/wiki/Gamma_function
|
||||
* https://www.johndcook.com/blog/cpp_gamma
|
||||
*/
|
||||
|
||||
__CRT_INLINE double __cdecl tgamma(double x) {
|
||||
double m = 1.0, t = 3.14159265358979323;
|
||||
if (x == floor(x)) {
|
||||
if (x == 0) return INFINITY;
|
||||
if (x < 0) return NAN;
|
||||
if (x < 26) { for (double k = 2; k < x; ++k) m *= k; return m; }
|
||||
}
|
||||
if (x < 0.5)
|
||||
return t / (sin(t*x)*tgamma(1.0 - x));
|
||||
if (x > 12.0)
|
||||
return exp(lgamma(x));
|
||||
|
||||
static const double c[8] = {676.5203681218851, -1259.1392167224028,
|
||||
771.32342877765313, -176.61502916214059,
|
||||
12.507343278686905, -0.13857109526572012,
|
||||
9.9843695780195716e-6, 1.5056327351493116e-7};
|
||||
m = 0.99999999999980993, t = x + 6.5; /* x-1+8-.5 */
|
||||
for (int k = 0; k < 8; ++k) m += c[k] / (x + k);
|
||||
return 2.50662827463100050 * pow(t, x - 0.5)*exp(-t)*m; /* C=sqrt(2pi) */
|
||||
}
|
||||
|
||||
|
||||
__CRT_INLINE double __cdecl lgamma(double x) {
|
||||
if (x < 12.0) {
|
||||
if (x <= 0.0 && x == floor(x)) return INFINITY;
|
||||
x = tgamma(x);
|
||||
return log(x < 0.0 ? -x : x);
|
||||
}
|
||||
static const double c[7] = {1.0/12.0, -1.0/360.0, 1.0/1260.0, -1.0/1680.0,
|
||||
1.0/1188.0, -691.0/360360.0, 1.0/156.0};
|
||||
double m = -3617.0/122400.0, t = 1.0 / (x*x);
|
||||
for (int k = 6; k >= 0; --k) m = m*t + c[k];
|
||||
return (x - 0.5)*log(x) - x + 0.918938533204672742 + m / x; /* C=log(2pi)/2 */
|
||||
}
|
||||
|
||||
__CRT_INLINE float __cdecl tgammaf(float x) {
|
||||
return tgamma(x);
|
||||
}
|
||||
__CRT_INLINE float __cdecl lgammaf(float x) {
|
||||
return lgamma(x);
|
||||
}
|
||||
__CRT_INLINE long double __cdecl tgammal(long double x) {
|
||||
return tgamma(x);
|
||||
}
|
||||
__CRT_INLINE long double __cdecl lgammal(long double x) {
|
||||
return lgamma(x);
|
||||
}
|
||||
|
||||
#endif /* _TCC_LIBM_H_ */
|
File diff suppressed because it is too large
Load diff
|
@ -1,287 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _TIME_H_
|
||||
#define _TIME_H_
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#ifndef _WIN32
|
||||
#error Only Win32 target is supported!
|
||||
#endif
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _CRTIMP
|
||||
#define _CRTIMP __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
#ifndef _WCHAR_T_DEFINED
|
||||
#define _WCHAR_T_DEFINED
|
||||
typedef unsigned short wchar_t;
|
||||
#endif
|
||||
|
||||
#ifndef _TIME32_T_DEFINED
|
||||
#define _TIME32_T_DEFINED
|
||||
typedef long __time32_t;
|
||||
#endif
|
||||
|
||||
#ifndef _TIME64_T_DEFINED
|
||||
#define _TIME64_T_DEFINED
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
#if defined(__GNUC__) && defined(__STRICT_ANSI__)
|
||||
typedef int _time64_t __attribute__ ((mode (DI)));
|
||||
#else
|
||||
typedef __int64 __time64_t;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _TIME_T_DEFINED
|
||||
#define _TIME_T_DEFINED
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
typedef __time32_t time_t;
|
||||
#else
|
||||
typedef __time64_t time_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _CLOCK_T_DEFINED
|
||||
#define _CLOCK_T_DEFINED
|
||||
typedef long clock_t;
|
||||
#endif
|
||||
|
||||
#ifndef _SIZE_T_DEFINED
|
||||
#define _SIZE_T_DEFINED
|
||||
#undef size_t
|
||||
#ifdef _WIN64
|
||||
#if defined(__GNUC__) && defined(__STRICT_ANSI__)
|
||||
typedef unsigned int size_t __attribute__ ((mode (DI)));
|
||||
#else
|
||||
typedef unsigned __int64 size_t;
|
||||
#endif
|
||||
#else
|
||||
typedef unsigned int size_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _SSIZE_T_DEFINED
|
||||
#define _SSIZE_T_DEFINED
|
||||
#undef ssize_t
|
||||
#ifdef _WIN64
|
||||
#if defined(__GNUC__) && defined(__STRICT_ANSI__)
|
||||
typedef int ssize_t __attribute__ ((mode (DI)));
|
||||
#else
|
||||
typedef __int64 ssize_t;
|
||||
#endif
|
||||
#else
|
||||
typedef int ssize_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
#ifdef __cplusplus
|
||||
#define NULL 0
|
||||
#else
|
||||
#define NULL ((void *)0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
#define _localtime32 localtime
|
||||
#define _difftime32 difftime
|
||||
#define _ctime32 ctime
|
||||
#define _gmtime32 gmtime
|
||||
#define _mktime32 mktime
|
||||
#define _time32 time
|
||||
#endif
|
||||
|
||||
#ifndef _TM_DEFINED
|
||||
#define _TM_DEFINED
|
||||
struct tm {
|
||||
int tm_sec;
|
||||
int tm_min;
|
||||
int tm_hour;
|
||||
int tm_mday;
|
||||
int tm_mon;
|
||||
int tm_year;
|
||||
int tm_wday;
|
||||
int tm_yday;
|
||||
int tm_isdst;
|
||||
};
|
||||
#endif
|
||||
|
||||
#define CLOCKS_PER_SEC 1000
|
||||
|
||||
__MINGW_IMPORT int _daylight;
|
||||
__MINGW_IMPORT long _dstbias;
|
||||
__MINGW_IMPORT long _timezone;
|
||||
__MINGW_IMPORT char * _tzname[2];
|
||||
_CRTIMP errno_t __cdecl _get_daylight(int *_Daylight);
|
||||
_CRTIMP errno_t __cdecl _get_dstbias(long *_Daylight_savings_bias);
|
||||
_CRTIMP errno_t __cdecl _get_timezone(long *_Timezone);
|
||||
_CRTIMP errno_t __cdecl _get_tzname(size_t *_ReturnValue,char *_Buffer,size_t _SizeInBytes,int _Index);
|
||||
char *__cdecl asctime(const struct tm *_Tm);
|
||||
_CRTIMP char *__cdecl _ctime32(const __time32_t *_Time);
|
||||
clock_t __cdecl clock(void);
|
||||
_CRTIMP double __cdecl _difftime32(__time32_t _Time1,__time32_t _Time2);
|
||||
_CRTIMP struct tm *__cdecl _gmtime32(const __time32_t *_Time);
|
||||
_CRTIMP struct tm *__cdecl _localtime32(const __time32_t *_Time);
|
||||
size_t __cdecl strftime(char *_Buf,size_t _SizeInBytes,const char *_Format,const struct tm *_Tm);
|
||||
_CRTIMP size_t __cdecl _strftime_l(char *_Buf,size_t _Max_size,const char *_Format,const struct tm *_Tm,_locale_t _Locale);
|
||||
_CRTIMP char *__cdecl _strdate(char *_Buffer);
|
||||
_CRTIMP char *__cdecl _strtime(char *_Buffer);
|
||||
_CRTIMP __time32_t __cdecl _time32(__time32_t *_Time);
|
||||
_CRTIMP __time32_t __cdecl _mktime32(struct tm *_Tm);
|
||||
_CRTIMP __time32_t __cdecl _mkgmtime32(struct tm *_Tm);
|
||||
#if defined (_POSIX_) || defined(__GNUC__)
|
||||
void __cdecl tzset(void);
|
||||
#else
|
||||
_CRTIMP void __cdecl _tzset(void);
|
||||
#endif
|
||||
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
double __cdecl _difftime64(__time64_t _Time1,__time64_t _Time2);
|
||||
_CRTIMP char *__cdecl _ctime64(const __time64_t *_Time);
|
||||
_CRTIMP struct tm *__cdecl _gmtime64(const __time64_t *_Time);
|
||||
_CRTIMP struct tm *__cdecl _localtime64(const __time64_t *_Time);
|
||||
_CRTIMP __time64_t __cdecl _mktime64(struct tm *_Tm);
|
||||
_CRTIMP __time64_t __cdecl _mkgmtime64(struct tm *_Tm);
|
||||
_CRTIMP __time64_t __cdecl _time64(__time64_t *_Time);
|
||||
#endif
|
||||
unsigned __cdecl _getsystime(struct tm *_Tm);
|
||||
unsigned __cdecl _setsystime(struct tm *_Tm,unsigned _MilliSec);
|
||||
|
||||
#ifndef _SIZE_T_DEFINED
|
||||
#define _SIZE_T_DEFINED
|
||||
#ifdef _WIN64
|
||||
#if defined(__GNUC__) && defined(__STRICT_ANSI__)
|
||||
typedef unsigned int size_t __attribute__ ((mode (DI)));
|
||||
#else
|
||||
typedef unsigned __int64 size_t;
|
||||
#endif
|
||||
#else
|
||||
typedef unsigned long size_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _SSIZE_T_DEFINED
|
||||
#define _SSIZE_T_DEFINED
|
||||
#ifdef _WIN64
|
||||
#if defined(__GNUC__) && defined(__STRICT_ANSI__)
|
||||
typedef int ssize_t __attribute__ ((mode (DI)));
|
||||
#else
|
||||
typedef __int64 ssize_t;
|
||||
#endif
|
||||
#else
|
||||
typedef long ssize_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _WTIME_DEFINED
|
||||
_CRTIMP wchar_t *__cdecl _wasctime(const struct tm *_Tm);
|
||||
_CRTIMP wchar_t *__cdecl _wctime32(const __time32_t *_Time);
|
||||
size_t __cdecl wcsftime(wchar_t *_Buf,size_t _SizeInWords,const wchar_t *_Format,const struct tm *_Tm);
|
||||
_CRTIMP size_t __cdecl _wcsftime_l(wchar_t *_Buf,size_t _SizeInWords,const wchar_t *_Format,const struct tm *_Tm,_locale_t _Locale);
|
||||
_CRTIMP wchar_t *__cdecl _wstrdate(wchar_t *_Buffer);
|
||||
_CRTIMP wchar_t *__cdecl _wstrtime(wchar_t *_Buffer);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP wchar_t *__cdecl _wctime64(const __time64_t *_Time);
|
||||
#endif
|
||||
|
||||
#if !defined (RC_INVOKED) && !defined (_INC_WTIME_INL)
|
||||
#define _INC_WTIME_INL
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
__CRT_INLINE wchar_t *__cdecl _wctime(const time_t *_Time) { return _wctime32(_Time); }
|
||||
#else
|
||||
__CRT_INLINE wchar_t *__cdecl _wctime(const time_t *_Time) { return _wctime64(_Time); }
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define _WTIME_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef RC_INVOKED
|
||||
double __cdecl difftime(time_t _Time1,time_t _Time2);
|
||||
char *__cdecl ctime(const time_t *_Time);
|
||||
struct tm *__cdecl gmtime(const time_t *_Time);
|
||||
struct tm *__cdecl localtime(const time_t *_Time);
|
||||
struct tm *__cdecl localtime_r(const time_t *_Time,struct tm *);
|
||||
|
||||
time_t __cdecl mktime(struct tm *_Tm);
|
||||
time_t __cdecl _mkgmtime(struct tm *_Tm);
|
||||
time_t __cdecl time(time_t *_Time);
|
||||
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
#if 0
|
||||
__CRT_INLINE double __cdecl difftime(time_t _Time1,time_t _Time2) { return _difftime32(_Time1,_Time2); }
|
||||
__CRT_INLINE char *__cdecl ctime(const time_t *_Time) { return _ctime32(_Time); }
|
||||
__CRT_INLINE struct tm *__cdecl gmtime(const time_t *_Time) { return _gmtime32(_Time); }
|
||||
__CRT_INLINE struct tm *__cdecl localtime(const time_t *_Time) { return _localtime32(_Time); }
|
||||
__CRT_INLINE time_t __cdecl mktime(struct tm *_Tm) { return _mktime32(_Tm); }
|
||||
__CRT_INLINE time_t __cdecl _mkgmtime(struct tm *_Tm) { return _mkgmtime32(_Tm); }
|
||||
__CRT_INLINE time_t __cdecl time(time_t *_Time) { return _time32(_Time); }
|
||||
#endif
|
||||
#else
|
||||
__CRT_INLINE double __cdecl difftime(time_t _Time1,time_t _Time2) { return _difftime64(_Time1,_Time2); }
|
||||
__CRT_INLINE char *__cdecl ctime(const time_t *_Time) { return _ctime64(_Time); }
|
||||
__CRT_INLINE struct tm *__cdecl gmtime(const time_t *_Time) { return _gmtime64(_Time); }
|
||||
__CRT_INLINE struct tm *__cdecl localtime(const time_t *_Time) { return _localtime64(_Time); }
|
||||
__CRT_INLINE time_t __cdecl mktime(struct tm *_Tm) { return _mktime64(_Tm); }
|
||||
__CRT_INLINE time_t __cdecl _mkgmtime(struct tm *_Tm) { return _mkgmtime64(_Tm); }
|
||||
__CRT_INLINE time_t __cdecl time(time_t *_Time) { return _time64(_Time); }
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(NO_OLDNAMES) || defined(_POSIX)
|
||||
#define CLK_TCK CLOCKS_PER_SEC
|
||||
|
||||
__MINGW_IMPORT int daylight;
|
||||
__MINGW_IMPORT long dstbias;
|
||||
__MINGW_IMPORT long timezone;
|
||||
__MINGW_IMPORT char *tzname[2];
|
||||
void __cdecl tzset(void);
|
||||
#endif
|
||||
|
||||
#ifndef _TIMEVAL_DEFINED /* also in winsock[2].h */
|
||||
#define _TIMEVAL_DEFINED
|
||||
struct timeval {
|
||||
long tv_sec;
|
||||
long tv_usec;
|
||||
};
|
||||
#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
|
||||
#define timercmp(tvp,uvp,cmp) ((tvp)->tv_sec cmp (uvp)->tv_sec || (tvp)->tv_sec==(uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec)
|
||||
#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0
|
||||
#endif /* _TIMEVAL_DEFINED */
|
||||
|
||||
#ifndef __STRICT_ANSI__
|
||||
#ifndef _TIMEZONE_DEFINED /* also in sys/time.h */
|
||||
#define _TIMEZONE_DEFINED
|
||||
struct timezone {
|
||||
int tz_minuteswest;
|
||||
int tz_dsttime;
|
||||
};
|
||||
|
||||
extern int __cdecl mingw_gettimeofday (struct timeval *p, struct timezone *z);
|
||||
#endif
|
||||
#endif /* __STRICT_ANSI__ */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#include <sec_api/time_s.h>
|
||||
|
||||
/* Adding timespec definition. */
|
||||
#include <sys/timeb.h>
|
||||
|
||||
#endif /* End _TIME_H_ */
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the TinyCC package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
|
||||
#ifndef _INC_UCHAR
|
||||
#define _INC_UCHAR
|
||||
|
||||
/*
|
||||
* The following defines are only valid when C11 (-std=c11) is used.
|
||||
*
|
||||
* ... a wide character constant prefixed by the letter u or U has type char16_t
|
||||
* or char32_t, respectively, unsigned integer types defined in the <uchar.h>
|
||||
* header.
|
||||
*/
|
||||
|
||||
#if __STDC_VERSION__ >= 201112L
|
||||
/**
|
||||
* __STDC_UTF_16__ The integer constant 1, intended to indicate that
|
||||
* values of type char16_t are UTF-16 encoded.
|
||||
*/
|
||||
#define __STDC_UTF_16__ 1
|
||||
/**
|
||||
* __STDC_UTF_32__ The integer constant 1, intended to indicate that
|
||||
* values of type char32_t are UTF-32 encoded.
|
||||
*/
|
||||
#define __STDC_UTF_32__ 1
|
||||
|
||||
typedef unsigned short char16_t;
|
||||
typedef unsigned int char32_t;
|
||||
#endif /* __STDC_VERSION__ >= 201112L */
|
||||
#endif /* _INC_UCHAR */
|
|
@ -1 +0,0 @@
|
|||
#include <sys/unistd.h>
|
|
@ -1,11 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_VADEFS
|
||||
#define _INC_VADEFS
|
||||
|
||||
//!__TINYC__: GNUC specific stuff removed
|
||||
|
||||
#endif
|
|
@ -1,4 +0,0 @@
|
|||
/*
|
||||
* TODO: Nothing here yet. Should provide UNIX compatibility constants
|
||||
* comparable to those in limits.h and float.h.
|
||||
*/
|
|
@ -1,873 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_WCHAR
|
||||
#define _INC_WCHAR
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef WCHAR_MIN /* also at stdint.h */
|
||||
#define WCHAR_MIN 0
|
||||
#define WCHAR_MAX ((wchar_t) -1) /* UINT16_MAX */
|
||||
#endif
|
||||
|
||||
#ifndef __GNUC_VA_LIST
|
||||
#define __GNUC_VA_LIST
|
||||
typedef __builtin_va_list __gnuc_va_list;
|
||||
#endif
|
||||
|
||||
#ifndef _VA_LIST_DEFINED
|
||||
#define _VA_LIST_DEFINED
|
||||
typedef __gnuc_va_list va_list;
|
||||
#endif
|
||||
|
||||
#ifndef WEOF
|
||||
#define WEOF (wint_t)(0xFFFF)
|
||||
#endif
|
||||
|
||||
#ifndef _FILE_DEFINED
|
||||
struct _iobuf {
|
||||
char *_ptr;
|
||||
int _cnt;
|
||||
char *_base;
|
||||
int _flag;
|
||||
int _file;
|
||||
int _charbuf;
|
||||
int _bufsiz;
|
||||
char *_tmpfname;
|
||||
};
|
||||
typedef struct _iobuf FILE;
|
||||
#define _FILE_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef _STDIO_DEFINED
|
||||
#ifdef _WIN64
|
||||
_CRTIMP FILE *__cdecl __iob_func(void);
|
||||
#else
|
||||
#ifdef _MSVCRT_
|
||||
extern FILE _iob[]; /* A pointer to an array of FILE */
|
||||
#define __iob_func() (_iob)
|
||||
#else
|
||||
extern FILE (*_imp___iob)[]; /* A pointer to an array of FILE */
|
||||
#define __iob_func() (*_imp___iob)
|
||||
#define _iob __iob_func()
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define _iob __iob_func()
|
||||
#endif
|
||||
|
||||
#ifndef _STDSTREAM_DEFINED
|
||||
#define stdin (&__iob_func()[0])
|
||||
#define stdout (&__iob_func()[1])
|
||||
#define stderr (&__iob_func()[2])
|
||||
#define _STDSTREAM_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef _FSIZE_T_DEFINED
|
||||
typedef unsigned long _fsize_t;
|
||||
#define _FSIZE_T_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef _WFINDDATA_T_DEFINED
|
||||
struct _wfinddata32_t {
|
||||
unsigned attrib;
|
||||
__time32_t time_create;
|
||||
__time32_t time_access;
|
||||
__time32_t time_write;
|
||||
_fsize_t size;
|
||||
wchar_t name[260];
|
||||
};
|
||||
|
||||
/* #if _INTEGRAL_MAX_BITS >= 64 */
|
||||
|
||||
struct _wfinddata32i64_t {
|
||||
unsigned attrib;
|
||||
__time32_t time_create;
|
||||
__time32_t time_access;
|
||||
__time32_t time_write;
|
||||
__int64 size;
|
||||
wchar_t name[260];
|
||||
};
|
||||
|
||||
struct _wfinddata64i32_t {
|
||||
unsigned attrib;
|
||||
__time64_t time_create;
|
||||
__time64_t time_access;
|
||||
__time64_t time_write;
|
||||
_fsize_t size;
|
||||
wchar_t name[260];
|
||||
};
|
||||
|
||||
struct _wfinddata64_t {
|
||||
unsigned attrib;
|
||||
__time64_t time_create;
|
||||
__time64_t time_access;
|
||||
__time64_t time_write;
|
||||
__int64 size;
|
||||
wchar_t name[260];
|
||||
};
|
||||
/* #endif */
|
||||
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
#define _wfinddata_t _wfinddata32_t
|
||||
#define _wfinddatai64_t _wfinddata32i64_t
|
||||
|
||||
#define _wfindfirst _wfindfirst32
|
||||
#define _wfindnext _wfindnext32
|
||||
#define _wfindfirsti64 _wfindfirst32i64
|
||||
#define _wfindnexti64 _wfindnext32i64
|
||||
#else
|
||||
#define _wfinddata_t _wfinddata64i32_t
|
||||
#define _wfinddatai64_t _wfinddata64_t
|
||||
|
||||
#define _wfindfirst _wfindfirst64i32
|
||||
#define _wfindnext _wfindnext64i32
|
||||
#define _wfindfirsti64 _wfindfirst64
|
||||
#define _wfindnexti64 _wfindnext64
|
||||
#endif
|
||||
|
||||
#define _WFINDDATA_T_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
#ifdef __cplusplus
|
||||
#define NULL 0
|
||||
#else
|
||||
#define NULL ((void *)0)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _CONST_RETURN
|
||||
#define _CONST_RETURN
|
||||
#endif
|
||||
|
||||
#define _WConst_return _CONST_RETURN
|
||||
|
||||
#ifndef _CRT_CTYPEDATA_DEFINED
|
||||
#define _CRT_CTYPEDATA_DEFINED
|
||||
#ifndef _CTYPE_DISABLE_MACROS
|
||||
|
||||
#ifndef __PCTYPE_FUNC
|
||||
#define __PCTYPE_FUNC __pctype_func()
|
||||
#ifdef _MSVCRT_
|
||||
#define __pctype_func() (_pctype)
|
||||
#else
|
||||
#define __pctype_func() (*_imp___pctype)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _pctype
|
||||
#ifdef _MSVCRT_
|
||||
extern unsigned short *_pctype;
|
||||
#else
|
||||
extern unsigned short **_imp___pctype;
|
||||
#define _pctype (*_imp___pctype)
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _CRT_WCTYPEDATA_DEFINED
|
||||
#define _CRT_WCTYPEDATA_DEFINED
|
||||
#ifndef _CTYPE_DISABLE_MACROS
|
||||
#ifndef _wctype
|
||||
#ifdef _MSVCRT_
|
||||
extern unsigned short *_wctype;
|
||||
#else
|
||||
extern unsigned short **_imp___wctype;
|
||||
#define _wctype (*_imp___wctype)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _MSVCRT_
|
||||
#define __pwctype_func() (_pwctype)
|
||||
#else
|
||||
#define __pwctype_func() (*_imp___pwctype)
|
||||
#endif
|
||||
|
||||
#ifndef _pwctype
|
||||
#ifdef _MSVCRT_
|
||||
extern unsigned short *_pwctype;
|
||||
#else
|
||||
extern unsigned short **_imp___pwctype;
|
||||
#define _pwctype (*_imp___pwctype)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define _UPPER 0x1
|
||||
#define _LOWER 0x2
|
||||
#define _DIGIT 0x4
|
||||
#define _SPACE 0x8
|
||||
|
||||
#define _PUNCT 0x10
|
||||
#define _CONTROL 0x20
|
||||
#define _BLANK 0x40
|
||||
#define _HEX 0x80
|
||||
|
||||
#define _LEADBYTE 0x8000
|
||||
#define _ALPHA (0x0100|_UPPER|_LOWER)
|
||||
|
||||
#ifndef _WCTYPE_DEFINED
|
||||
#define _WCTYPE_DEFINED
|
||||
|
||||
int __cdecl iswalpha(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswalpha_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswupper(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswupper_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswlower(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswlower_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswdigit(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswdigit_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswxdigit(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswxdigit_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswspace(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswspace_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswpunct(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswpunct_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswalnum(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswalnum_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswprint(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswprint_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswgraph(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswgraph_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswcntrl(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswcntrl_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswascii(wint_t _C);
|
||||
int __cdecl isleadbyte(int _C);
|
||||
_CRTIMP int __cdecl _isleadbyte_l(int _C,_locale_t _Locale);
|
||||
wint_t __cdecl towupper(wint_t _C);
|
||||
_CRTIMP wint_t __cdecl _towupper_l(wint_t _C,_locale_t _Locale);
|
||||
wint_t __cdecl towlower(wint_t _C);
|
||||
_CRTIMP wint_t __cdecl _towlower_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl iswctype(wint_t _C,wctype_t _Type);
|
||||
_CRTIMP int __cdecl _iswctype_l(wint_t _C,wctype_t _Type,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl __iswcsymf(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswcsymf_l(wint_t _C,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl __iswcsym(wint_t _C);
|
||||
_CRTIMP int __cdecl _iswcsym_l(wint_t _C,_locale_t _Locale);
|
||||
int __cdecl is_wctype(wint_t _C,wctype_t _Type);
|
||||
#endif
|
||||
|
||||
#ifndef _WDIRECT_DEFINED
|
||||
#define _WDIRECT_DEFINED
|
||||
|
||||
_CRTIMP wchar_t *__cdecl _wgetcwd(wchar_t *_DstBuf,int _SizeInWords);
|
||||
_CRTIMP wchar_t *__cdecl _wgetdcwd(int _Drive,wchar_t *_DstBuf,int _SizeInWords);
|
||||
wchar_t *__cdecl _wgetdcwd_nolock(int _Drive,wchar_t *_DstBuf,int _SizeInWords);
|
||||
_CRTIMP int __cdecl _wchdir(const wchar_t *_Path);
|
||||
_CRTIMP int __cdecl _wmkdir(const wchar_t *_Path);
|
||||
_CRTIMP int __cdecl _wrmdir(const wchar_t *_Path);
|
||||
#endif
|
||||
|
||||
#ifndef _WIO_DEFINED
|
||||
#define _WIO_DEFINED
|
||||
|
||||
_CRTIMP int __cdecl _waccess(const wchar_t *_Filename,int _AccessMode);
|
||||
_CRTIMP int __cdecl _wchmod(const wchar_t *_Filename,int _Mode);
|
||||
_CRTIMP int __cdecl _wcreat(const wchar_t *_Filename,int _PermissionMode);
|
||||
_CRTIMP intptr_t __cdecl _wfindfirst32(const wchar_t *_Filename,struct _wfinddata32_t *_FindData);
|
||||
_CRTIMP int __cdecl _wfindnext32(intptr_t _FindHandle,struct _wfinddata32_t *_FindData);
|
||||
_CRTIMP int __cdecl _wunlink(const wchar_t *_Filename);
|
||||
_CRTIMP int __cdecl _wrename(const wchar_t *_NewFilename,const wchar_t *_OldFilename);
|
||||
_CRTIMP wchar_t *__cdecl _wmktemp(wchar_t *_TemplateName);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP intptr_t __cdecl _wfindfirst32i64(const wchar_t *_Filename,struct _wfinddata32i64_t *_FindData);
|
||||
intptr_t __cdecl _wfindfirst64i32(const wchar_t *_Filename,struct _wfinddata64i32_t *_FindData);
|
||||
_CRTIMP intptr_t __cdecl _wfindfirst64(const wchar_t *_Filename,struct _wfinddata64_t *_FindData);
|
||||
_CRTIMP int __cdecl _wfindnext32i64(intptr_t _FindHandle,struct _wfinddata32i64_t *_FindData);
|
||||
int __cdecl _wfindnext64i32(intptr_t _FindHandle,struct _wfinddata64i32_t *_FindData);
|
||||
_CRTIMP int __cdecl _wfindnext64(intptr_t _FindHandle,struct _wfinddata64_t *_FindData);
|
||||
#endif
|
||||
_CRTIMP errno_t __cdecl _wsopen_s(int *_FileHandle,const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,int _PermissionFlag);
|
||||
#if !defined(__cplusplus) || !(defined(_X86_) && !defined(__x86_64))
|
||||
_CRTIMP int __cdecl _wopen(const wchar_t *_Filename,int _OpenFlag,...);
|
||||
_CRTIMP int __cdecl _wsopen(const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,...);
|
||||
#else
|
||||
extern "C++" _CRTIMP int __cdecl _wopen(const wchar_t *_Filename,int _OpenFlag,int _PermissionMode = 0);
|
||||
extern "C++" _CRTIMP int __cdecl _wsopen(const wchar_t *_Filename,int _OpenFlag,int _ShareFlag,int _PermissionMode = 0);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _WLOCALE_DEFINED
|
||||
#define _WLOCALE_DEFINED
|
||||
_CRTIMP wchar_t *__cdecl _wsetlocale(int _Category,const wchar_t *_Locale);
|
||||
#endif
|
||||
|
||||
#ifndef _WPROCESS_DEFINED
|
||||
#define _WPROCESS_DEFINED
|
||||
|
||||
_CRTIMP intptr_t __cdecl _wexecl(const wchar_t *_Filename,const wchar_t *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _wexecle(const wchar_t *_Filename,const wchar_t *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _wexeclp(const wchar_t *_Filename,const wchar_t *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _wexeclpe(const wchar_t *_Filename,const wchar_t *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _wexecv(const wchar_t *_Filename,const wchar_t *const *_ArgList);
|
||||
_CRTIMP intptr_t __cdecl _wexecve(const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
|
||||
_CRTIMP intptr_t __cdecl _wexecvp(const wchar_t *_Filename,const wchar_t *const *_ArgList);
|
||||
_CRTIMP intptr_t __cdecl _wexecvpe(const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
|
||||
_CRTIMP intptr_t __cdecl _wspawnl(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _wspawnle(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _wspawnlp(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _wspawnlpe(int _Mode,const wchar_t *_Filename,const wchar_t *_ArgList,...);
|
||||
_CRTIMP intptr_t __cdecl _wspawnv(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList);
|
||||
_CRTIMP intptr_t __cdecl _wspawnve(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
|
||||
_CRTIMP intptr_t __cdecl _wspawnvp(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList);
|
||||
_CRTIMP intptr_t __cdecl _wspawnvpe(int _Mode,const wchar_t *_Filename,const wchar_t *const *_ArgList,const wchar_t *const *_Env);
|
||||
#ifndef _CRT_WSYSTEM_DEFINED
|
||||
#define _CRT_WSYSTEM_DEFINED
|
||||
_CRTIMP int __cdecl _wsystem(const wchar_t *_Command);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _WCTYPE_INLINE_DEFINED
|
||||
#undef _CRT_WCTYPE_NOINLINE
|
||||
#if !defined(__cplusplus) || defined(_CRT_WCTYPE_NOINLINE)
|
||||
#define iswalpha(_c) (iswctype(_c,_ALPHA))
|
||||
#define iswupper(_c) (iswctype(_c,_UPPER))
|
||||
#define iswlower(_c) (iswctype(_c,_LOWER))
|
||||
#define iswdigit(_c) (iswctype(_c,_DIGIT))
|
||||
#define iswxdigit(_c) (iswctype(_c,_HEX))
|
||||
#define iswspace(_c) (iswctype(_c,_SPACE))
|
||||
#define iswpunct(_c) (iswctype(_c,_PUNCT))
|
||||
#define iswalnum(_c) (iswctype(_c,_ALPHA|_DIGIT))
|
||||
#define iswprint(_c) (iswctype(_c,_BLANK|_PUNCT|_ALPHA|_DIGIT))
|
||||
#define iswgraph(_c) (iswctype(_c,_PUNCT|_ALPHA|_DIGIT))
|
||||
#define iswcntrl(_c) (iswctype(_c,_CONTROL))
|
||||
#define iswascii(_c) ((unsigned)(_c) < 0x80)
|
||||
|
||||
#define _iswalpha_l(_c,_p) (_iswctype_l(_c,_ALPHA,_p))
|
||||
#define _iswupper_l(_c,_p) (_iswctype_l(_c,_UPPER,_p))
|
||||
#define _iswlower_l(_c,_p) (_iswctype_l(_c,_LOWER,_p))
|
||||
#define _iswdigit_l(_c,_p) (_iswctype_l(_c,_DIGIT,_p))
|
||||
#define _iswxdigit_l(_c,_p) (_iswctype_l(_c,_HEX,_p))
|
||||
#define _iswspace_l(_c,_p) (_iswctype_l(_c,_SPACE,_p))
|
||||
#define _iswpunct_l(_c,_p) (_iswctype_l(_c,_PUNCT,_p))
|
||||
#define _iswalnum_l(_c,_p) (_iswctype_l(_c,_ALPHA|_DIGIT,_p))
|
||||
#define _iswprint_l(_c,_p) (_iswctype_l(_c,_BLANK|_PUNCT|_ALPHA|_DIGIT,_p))
|
||||
#define _iswgraph_l(_c,_p) (_iswctype_l(_c,_PUNCT|_ALPHA|_DIGIT,_p))
|
||||
#define _iswcntrl_l(_c,_p) (_iswctype_l(_c,_CONTROL,_p))
|
||||
#ifndef _CTYPE_DISABLE_MACROS
|
||||
#define isleadbyte(_c) (__PCTYPE_FUNC[(unsigned char)(_c)] & _LEADBYTE)
|
||||
#endif
|
||||
#endif
|
||||
#define _WCTYPE_INLINE_DEFINED
|
||||
#endif
|
||||
|
||||
#if !defined(_POSIX_) || defined(__GNUC__)
|
||||
#ifndef _INO_T_DEFINED
|
||||
#define _INO_T_DEFINED
|
||||
typedef unsigned short _ino_t;
|
||||
#ifndef NO_OLDNAMES
|
||||
typedef unsigned short ino_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _DEV_T_DEFINED
|
||||
#define _DEV_T_DEFINED
|
||||
typedef unsigned int _dev_t;
|
||||
#ifndef NO_OLDNAMES
|
||||
typedef unsigned int dev_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _OFF_T_DEFINED
|
||||
#define _OFF_T_DEFINED
|
||||
#ifndef _OFF_T_
|
||||
#define _OFF_T_
|
||||
typedef long _off_t;
|
||||
#if !defined(NO_OLDNAMES) || defined(_POSIX)
|
||||
typedef long off_t;
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _OFF64_T_DEFINED
|
||||
#define _OFF64_T_DEFINED
|
||||
typedef long long _off64_t;
|
||||
#if !defined(NO_OLDNAMES) || defined(_POSIX)
|
||||
typedef long long off64_t;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _STAT_DEFINED
|
||||
#define _STAT_DEFINED
|
||||
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
#ifdef WIN64
|
||||
#define _fstat _fstat32
|
||||
#define _stat _stat32
|
||||
#define _wstat _wstat32
|
||||
#else
|
||||
#define _fstat32 _fstat
|
||||
#define _stat32 _stat
|
||||
#define _wstat32 _wstat
|
||||
#endif
|
||||
#define _fstati64 _fstat32i64
|
||||
#define _stati64 _stat32i64
|
||||
#define _wstati64 _wstat32i64
|
||||
#else
|
||||
#define _fstat _fstat64i32
|
||||
#define _fstati64 _fstat64
|
||||
#define _stat _stat64i32
|
||||
#define _stati64 _stat64
|
||||
#define _wstat _wstat64i32
|
||||
#define _wstati64 _wstat64
|
||||
#endif
|
||||
|
||||
struct _stat32 {
|
||||
_dev_t st_dev;
|
||||
_ino_t st_ino;
|
||||
unsigned short st_mode;
|
||||
short st_nlink;
|
||||
short st_uid;
|
||||
short st_gid;
|
||||
_dev_t st_rdev;
|
||||
_off_t st_size;
|
||||
__time32_t st_atime;
|
||||
__time32_t st_mtime;
|
||||
__time32_t st_ctime;
|
||||
};
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
struct stat {
|
||||
_dev_t st_dev;
|
||||
_ino_t st_ino;
|
||||
unsigned short st_mode;
|
||||
short st_nlink;
|
||||
short st_uid;
|
||||
short st_gid;
|
||||
_dev_t st_rdev;
|
||||
_off_t st_size;
|
||||
time_t st_atime;
|
||||
time_t st_mtime;
|
||||
time_t st_ctime;
|
||||
};
|
||||
#endif
|
||||
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
|
||||
struct _stat32i64 {
|
||||
_dev_t st_dev;
|
||||
_ino_t st_ino;
|
||||
unsigned short st_mode;
|
||||
short st_nlink;
|
||||
short st_uid;
|
||||
short st_gid;
|
||||
_dev_t st_rdev;
|
||||
__int64 st_size;
|
||||
__time32_t st_atime;
|
||||
__time32_t st_mtime;
|
||||
__time32_t st_ctime;
|
||||
};
|
||||
|
||||
struct _stat64i32 {
|
||||
_dev_t st_dev;
|
||||
_ino_t st_ino;
|
||||
unsigned short st_mode;
|
||||
short st_nlink;
|
||||
short st_uid;
|
||||
short st_gid;
|
||||
_dev_t st_rdev;
|
||||
_off_t st_size;
|
||||
__time64_t st_atime;
|
||||
__time64_t st_mtime;
|
||||
__time64_t st_ctime;
|
||||
};
|
||||
|
||||
struct _stat64 {
|
||||
_dev_t st_dev;
|
||||
_ino_t st_ino;
|
||||
unsigned short st_mode;
|
||||
short st_nlink;
|
||||
short st_uid;
|
||||
short st_gid;
|
||||
_dev_t st_rdev;
|
||||
__int64 st_size;
|
||||
__time64_t st_atime;
|
||||
__time64_t st_mtime;
|
||||
__time64_t st_ctime;
|
||||
};
|
||||
#endif
|
||||
|
||||
#define __stat64 _stat64
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef _WSTAT_DEFINED
|
||||
#define _WSTAT_DEFINED
|
||||
|
||||
_CRTIMP int __cdecl _wstat32(const wchar_t *_Name,struct _stat32 *_Stat);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP int __cdecl _wstat32i64(const wchar_t *_Name,struct _stat32i64 *_Stat);
|
||||
int __cdecl _wstat64i32(const wchar_t *_Name,struct _stat64i32 *_Stat);
|
||||
_CRTIMP int __cdecl _wstat64(const wchar_t *_Name,struct _stat64 *_Stat);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _WCONIO_DEFINED
|
||||
#define _WCONIO_DEFINED
|
||||
|
||||
#ifndef WEOF
|
||||
#define WEOF (wint_t)(0xFFFF)
|
||||
#endif
|
||||
|
||||
_CRTIMP wchar_t *_cgetws(wchar_t *_Buffer);
|
||||
_CRTIMP wint_t __cdecl _getwch(void);
|
||||
_CRTIMP wint_t __cdecl _getwche(void);
|
||||
_CRTIMP wint_t __cdecl _putwch(wchar_t _WCh);
|
||||
_CRTIMP wint_t __cdecl _ungetwch(wint_t _WCh);
|
||||
_CRTIMP int __cdecl _cputws(const wchar_t *_String);
|
||||
_CRTIMP int __cdecl _cwprintf(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _cwscanf(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _cwscanf_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vcwprintf(const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _cwprintf_p(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _vcwprintf_p(const wchar_t *_Format,va_list _ArgList);
|
||||
|
||||
_CRTIMP int __cdecl _cwprintf_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vcwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _cwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vcwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
wint_t __cdecl _putwch_nolock(wchar_t _WCh);
|
||||
wint_t __cdecl _getwch_nolock(void);
|
||||
wint_t __cdecl _getwche_nolock(void);
|
||||
wint_t __cdecl _ungetwch_nolock(wint_t _WCh);
|
||||
#endif
|
||||
|
||||
#ifndef _WSTDIO_DEFINED
|
||||
#define _WSTDIO_DEFINED
|
||||
|
||||
#ifndef WEOF
|
||||
#define WEOF (wint_t)(0xFFFF)
|
||||
#endif
|
||||
|
||||
#ifdef _POSIX_
|
||||
_CRTIMP FILE *__cdecl _wfsopen(const wchar_t *_Filename,const wchar_t *_Mode);
|
||||
#else
|
||||
_CRTIMP FILE *__cdecl _wfsopen(const wchar_t *_Filename,const wchar_t *_Mode,int _ShFlag);
|
||||
#endif
|
||||
|
||||
wint_t __cdecl fgetwc(FILE *_File);
|
||||
_CRTIMP wint_t __cdecl _fgetwchar(void);
|
||||
wint_t __cdecl fputwc(wchar_t _Ch,FILE *_File);
|
||||
_CRTIMP wint_t __cdecl _fputwchar(wchar_t _Ch);
|
||||
wint_t __cdecl getwc(FILE *_File);
|
||||
wint_t __cdecl getwchar(void);
|
||||
wint_t __cdecl putwc(wchar_t _Ch,FILE *_File);
|
||||
wint_t __cdecl putwchar(wchar_t _Ch);
|
||||
wint_t __cdecl ungetwc(wint_t _Ch,FILE *_File);
|
||||
wchar_t *__cdecl fgetws(wchar_t *_Dst,int _SizeInWords,FILE *_File);
|
||||
int __cdecl fputws(const wchar_t *_Str,FILE *_File);
|
||||
_CRTIMP wchar_t *__cdecl _getws(wchar_t *_String);
|
||||
_CRTIMP int __cdecl _putws(const wchar_t *_Str);
|
||||
int __cdecl fwprintf(FILE *_File,const wchar_t *_Format,...);
|
||||
int __cdecl wprintf(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _scwprintf(const wchar_t *_Format,...);
|
||||
int __cdecl vfwprintf(FILE *_File,const wchar_t *_Format,va_list _ArgList);
|
||||
int __cdecl vwprintf(const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl swprintf(wchar_t*, const wchar_t*, ...);
|
||||
_CRTIMP int __cdecl vswprintf(wchar_t*, const wchar_t*,va_list);
|
||||
_CRTIMP int __cdecl _swprintf_c(wchar_t *_DstBuf,size_t _SizeInWords,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _vswprintf_c(wchar_t *_DstBuf,size_t _SizeInWords,const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _snwprintf(wchar_t *_Dest,size_t _Count,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _vsnwprintf(wchar_t *_Dest,size_t _Count,const wchar_t *_Format,va_list _Args);
|
||||
#ifndef __NO_ISOCEXT /* externs in libmingwex.a */
|
||||
int __cdecl snwprintf (wchar_t *s, size_t n, const wchar_t * format, ...);
|
||||
__CRT_INLINE int __cdecl vsnwprintf (wchar_t *s, size_t n, const wchar_t *format, va_list arg) { return _vsnwprintf(s,n,format,arg); }
|
||||
int __cdecl vwscanf (const wchar_t *, va_list);
|
||||
int __cdecl vfwscanf (FILE *,const wchar_t *,va_list);
|
||||
int __cdecl vswscanf (const wchar_t *,const wchar_t *,va_list);
|
||||
#endif
|
||||
_CRTIMP int __cdecl _fwprintf_p(FILE *_File,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _wprintf_p(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _vfwprintf_p(FILE *_File,const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vwprintf_p(const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _swprintf_p(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _vswprintf_p(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _scwprintf_p(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _vscwprintf_p(const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _wprintf_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _wprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _fwprintf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _fwprintf_p_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vfwprintf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vfwprintf_p_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _swprintf_c_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _swprintf_p_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vswprintf_c_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vswprintf_p_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _scwprintf_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _scwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vscwprintf_p_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _snwprintf_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _vsnwprintf_l(wchar_t *_DstBuf,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _swprintf(wchar_t *_Dest,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _vswprintf(wchar_t *_Dest,const wchar_t *_Format,va_list _Args);
|
||||
_CRTIMP int __cdecl __swprintf_l(wchar_t *_Dest,const wchar_t *_Format,_locale_t _Plocinfo,...);
|
||||
_CRTIMP int __cdecl __vswprintf_l(wchar_t *_Dest,const wchar_t *_Format,_locale_t _Plocinfo,va_list _Args);
|
||||
#ifndef RC_INVOKED
|
||||
#include <vadefs.h>
|
||||
#endif
|
||||
|
||||
#ifdef _CRT_NON_CONFORMING_SWPRINTFS
|
||||
#ifndef __cplusplus
|
||||
#define swprintf _swprintf
|
||||
#define vswprintf _vswprintf
|
||||
#define _swprintf_l __swprintf_l
|
||||
#define _vswprintf_l __vswprintf_l
|
||||
#endif
|
||||
#endif
|
||||
|
||||
_CRTIMP wchar_t *__cdecl _wtempnam(const wchar_t *_Directory,const wchar_t *_FilePrefix);
|
||||
_CRTIMP int __cdecl _vscwprintf(const wchar_t *_Format,va_list _ArgList);
|
||||
_CRTIMP int __cdecl _vscwprintf_l(const wchar_t *_Format,_locale_t _Locale,va_list _ArgList);
|
||||
int __cdecl fwscanf(FILE *_File,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _fwscanf_l(FILE *_File,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
int __cdecl swscanf(const wchar_t *_Src,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _swscanf_l(const wchar_t *_Src,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP int __cdecl _snwscanf(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _snwscanf_l(const wchar_t *_Src,size_t _MaxCount,const wchar_t *_Format,_locale_t _Locale,...);
|
||||
int __cdecl wscanf(const wchar_t *_Format,...);
|
||||
_CRTIMP int __cdecl _wscanf_l(const wchar_t *_Format,_locale_t _Locale,...);
|
||||
_CRTIMP FILE *__cdecl _wfdopen(int _FileHandle ,const wchar_t *_Mode);
|
||||
_CRTIMP FILE *__cdecl _wfopen(const wchar_t *_Filename,const wchar_t *_Mode);
|
||||
_CRTIMP FILE *__cdecl _wfreopen(const wchar_t *_Filename,const wchar_t *_Mode,FILE *_OldFile);
|
||||
|
||||
#ifndef _CRT_WPERROR_DEFINED
|
||||
#define _CRT_WPERROR_DEFINED
|
||||
_CRTIMP void __cdecl _wperror(const wchar_t *_ErrMsg);
|
||||
#endif
|
||||
_CRTIMP FILE *__cdecl _wpopen(const wchar_t *_Command,const wchar_t *_Mode);
|
||||
#if !defined(NO_OLDNAMES) && !defined(wpopen)
|
||||
#define wpopen _wpopen
|
||||
#endif
|
||||
_CRTIMP int __cdecl _wremove(const wchar_t *_Filename);
|
||||
_CRTIMP wchar_t *__cdecl _wtmpnam(wchar_t *_Buffer);
|
||||
_CRTIMP wint_t __cdecl _fgetwc_nolock(FILE *_File);
|
||||
_CRTIMP wint_t __cdecl _fputwc_nolock(wchar_t _Ch,FILE *_File);
|
||||
_CRTIMP wint_t __cdecl _ungetwc_nolock(wint_t _Ch,FILE *_File);
|
||||
|
||||
#undef _CRT_GETPUTWCHAR_NOINLINE
|
||||
|
||||
#if !defined(__cplusplus) || defined(_CRT_GETPUTWCHAR_NOINLINE)
|
||||
#define getwchar() fgetwc(stdin)
|
||||
#define putwchar(_c) fputwc((_c),stdout)
|
||||
#else
|
||||
__CRT_INLINE wint_t __cdecl getwchar() {return (fgetwc(stdin)); }
|
||||
__CRT_INLINE wint_t __cdecl putwchar(wchar_t _C) {return (fputwc(_C,stdout)); }
|
||||
#endif
|
||||
|
||||
#define getwc(_stm) fgetwc(_stm)
|
||||
#define putwc(_c,_stm) fputwc(_c,_stm)
|
||||
#define _putwc_nolock(_c,_stm) _fputwc_nolock(_c,_stm)
|
||||
#define _getwc_nolock(_c) _fgetwc_nolock(_c)
|
||||
#endif
|
||||
|
||||
#ifndef _WSTDLIB_DEFINED
|
||||
#define _WSTDLIB_DEFINED
|
||||
|
||||
_CRTIMP wchar_t *__cdecl _itow(int _Value,wchar_t *_Dest,int _Radix);
|
||||
_CRTIMP wchar_t *__cdecl _ltow(long _Value,wchar_t *_Dest,int _Radix);
|
||||
_CRTIMP wchar_t *__cdecl _ultow(unsigned long _Value,wchar_t *_Dest,int _Radix);
|
||||
double __cdecl wcstod(const wchar_t *_Str,wchar_t **_EndPtr);
|
||||
_CRTIMP double __cdecl _wcstod_l(const wchar_t *_Str,wchar_t **_EndPtr,_locale_t _Locale);
|
||||
float __cdecl wcstof( const wchar_t *nptr, wchar_t **endptr);
|
||||
#if !defined __NO_ISOCEXT /* in libmingwex.a */
|
||||
float __cdecl wcstof (const wchar_t * __restrict__, wchar_t ** __restrict__);
|
||||
long double __cdecl wcstold (const wchar_t * __restrict__, wchar_t ** __restrict__);
|
||||
#endif /* __NO_ISOCEXT */
|
||||
long __cdecl wcstol(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix);
|
||||
_CRTIMP long __cdecl _wcstol_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale);
|
||||
unsigned long __cdecl wcstoul(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix);
|
||||
_CRTIMP unsigned long __cdecl _wcstoul_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale);
|
||||
_CRTIMP wchar_t *__cdecl _wgetenv(const wchar_t *_VarName);
|
||||
#ifndef _CRT_WSYSTEM_DEFINED
|
||||
#define _CRT_WSYSTEM_DEFINED
|
||||
_CRTIMP int __cdecl _wsystem(const wchar_t *_Command);
|
||||
#endif
|
||||
_CRTIMP double __cdecl _wtof(const wchar_t *_Str);
|
||||
_CRTIMP double __cdecl _wtof_l(const wchar_t *_Str,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _wtoi(const wchar_t *_Str);
|
||||
_CRTIMP int __cdecl _wtoi_l(const wchar_t *_Str,_locale_t _Locale);
|
||||
_CRTIMP long __cdecl _wtol(const wchar_t *_Str);
|
||||
_CRTIMP long __cdecl _wtol_l(const wchar_t *_Str,_locale_t _Locale);
|
||||
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP wchar_t *__cdecl _i64tow(__int64 _Val,wchar_t *_DstBuf,int _Radix);
|
||||
_CRTIMP wchar_t *__cdecl _ui64tow(unsigned __int64 _Val,wchar_t *_DstBuf,int _Radix);
|
||||
_CRTIMP __int64 __cdecl _wtoi64(const wchar_t *_Str);
|
||||
_CRTIMP __int64 __cdecl _wtoi64_l(const wchar_t *_Str,_locale_t _Locale);
|
||||
_CRTIMP __int64 __cdecl _wcstoi64(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix);
|
||||
_CRTIMP __int64 __cdecl _wcstoi64_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale);
|
||||
_CRTIMP unsigned __int64 __cdecl _wcstoui64(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix);
|
||||
_CRTIMP unsigned __int64 __cdecl _wcstoui64_l(const wchar_t *_Str,wchar_t **_EndPtr,int _Radix,_locale_t _Locale);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _POSIX_
|
||||
#ifndef _WSTDLIBP_DEFINED
|
||||
#define _WSTDLIBP_DEFINED
|
||||
_CRTIMP wchar_t *__cdecl _wfullpath(wchar_t *_FullPath,const wchar_t *_Path,size_t _SizeInWords);
|
||||
_CRTIMP void __cdecl _wmakepath(wchar_t *_ResultPath,const wchar_t *_Drive,const wchar_t *_Dir,const wchar_t *_Filename,const wchar_t *_Ext);
|
||||
#ifndef _CRT_WPERROR_DEFINED
|
||||
#define _CRT_WPERROR_DEFINED
|
||||
_CRTIMP void __cdecl _wperror(const wchar_t *_ErrMsg);
|
||||
#endif
|
||||
_CRTIMP int __cdecl _wputenv(const wchar_t *_EnvString);
|
||||
_CRTIMP void __cdecl _wsearchenv(const wchar_t *_Filename,const wchar_t *_EnvVar,wchar_t *_ResultPath);
|
||||
_CRTIMP void __cdecl _wsplitpath(const wchar_t *_FullPath,wchar_t *_Drive,wchar_t *_Dir,wchar_t *_Filename,wchar_t *_Ext);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _WSTRING_DEFINED
|
||||
#define _WSTRING_DEFINED
|
||||
_CRTIMP wchar_t *__cdecl _wcsdup(const wchar_t *_Str);
|
||||
wchar_t *__cdecl wcscat(wchar_t *_Dest,const wchar_t *_Source);
|
||||
_CONST_RETURN wchar_t *__cdecl wcschr(const wchar_t *_Str,wchar_t _Ch);
|
||||
int __cdecl wcscmp(const wchar_t *_Str1,const wchar_t *_Str2);
|
||||
wchar_t *__cdecl wcscpy(wchar_t *_Dest,const wchar_t *_Source);
|
||||
size_t __cdecl wcscspn(const wchar_t *_Str,const wchar_t *_Control);
|
||||
size_t __cdecl wcslen(const wchar_t *_Str);
|
||||
size_t __cdecl wcsnlen(const wchar_t *_Src,size_t _MaxCount);
|
||||
wchar_t *__cdecl wcsncat(wchar_t *_Dest,const wchar_t *_Source,size_t _Count);
|
||||
int __cdecl wcsncmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
|
||||
wchar_t *__cdecl wcsncpy(wchar_t *_Dest,const wchar_t *_Source,size_t _Count);
|
||||
_CONST_RETURN wchar_t *__cdecl wcspbrk(const wchar_t *_Str,const wchar_t *_Control);
|
||||
_CONST_RETURN wchar_t *__cdecl wcsrchr(const wchar_t *_Str,wchar_t _Ch);
|
||||
size_t __cdecl wcsspn(const wchar_t *_Str,const wchar_t *_Control);
|
||||
_CONST_RETURN wchar_t *__cdecl wcsstr(const wchar_t *_Str,const wchar_t *_SubStr);
|
||||
wchar_t *__cdecl wcstok(wchar_t *_Str,const wchar_t *_Delim);
|
||||
_CRTIMP wchar_t *__cdecl _wcserror(int _ErrNum);
|
||||
_CRTIMP wchar_t *__cdecl __wcserror(const wchar_t *_Str);
|
||||
_CRTIMP int __cdecl _wcsicmp(const wchar_t *_Str1,const wchar_t *_Str2);
|
||||
_CRTIMP int __cdecl _wcsicmp_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _wcsnicmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _wcsnicmp_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP wchar_t *__cdecl _wcsnset(wchar_t *_Str,wchar_t _Val,size_t _MaxCount);
|
||||
_CRTIMP wchar_t *__cdecl _wcsrev(wchar_t *_Str);
|
||||
_CRTIMP wchar_t *__cdecl _wcsset(wchar_t *_Str,wchar_t _Val);
|
||||
_CRTIMP wchar_t *__cdecl _wcslwr(wchar_t *_String);
|
||||
_CRTIMP wchar_t *_wcslwr_l(wchar_t *_String,_locale_t _Locale);
|
||||
_CRTIMP wchar_t *__cdecl _wcsupr(wchar_t *_String);
|
||||
_CRTIMP wchar_t *_wcsupr_l(wchar_t *_String,_locale_t _Locale);
|
||||
size_t __cdecl wcsxfrm(wchar_t *_Dst,const wchar_t *_Src,size_t _MaxCount);
|
||||
_CRTIMP size_t __cdecl _wcsxfrm_l(wchar_t *_Dst,const wchar_t *_Src,size_t _MaxCount,_locale_t _Locale);
|
||||
int __cdecl wcscoll(const wchar_t *_Str1,const wchar_t *_Str2);
|
||||
_CRTIMP int __cdecl _wcscoll_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _wcsicoll(const wchar_t *_Str1,const wchar_t *_Str2);
|
||||
_CRTIMP int __cdecl _wcsicoll_l(const wchar_t *_Str1,const wchar_t *_Str2,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _wcsncoll(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _wcsncoll_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale);
|
||||
_CRTIMP int __cdecl _wcsnicoll(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
|
||||
_CRTIMP int __cdecl _wcsnicoll_l(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount,_locale_t _Locale);
|
||||
|
||||
#ifndef NO_OLDNAMES
|
||||
wchar_t *__cdecl wcsdup(const wchar_t *_Str);
|
||||
#define wcswcs wcsstr
|
||||
int __cdecl wcsicmp(const wchar_t *_Str1,const wchar_t *_Str2);
|
||||
int __cdecl wcsnicmp(const wchar_t *_Str1,const wchar_t *_Str2,size_t _MaxCount);
|
||||
wchar_t *__cdecl wcsnset(wchar_t *_Str,wchar_t _Val,size_t _MaxCount);
|
||||
wchar_t *__cdecl wcsrev(wchar_t *_Str);
|
||||
wchar_t *__cdecl wcsset(wchar_t *_Str,wchar_t _Val);
|
||||
wchar_t *__cdecl wcslwr(wchar_t *_Str);
|
||||
wchar_t *__cdecl wcsupr(wchar_t *_Str);
|
||||
int __cdecl wcsicoll(const wchar_t *_Str1,const wchar_t *_Str2);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _TM_DEFINED
|
||||
#define _TM_DEFINED
|
||||
struct tm {
|
||||
int tm_sec;
|
||||
int tm_min;
|
||||
int tm_hour;
|
||||
int tm_mday;
|
||||
int tm_mon;
|
||||
int tm_year;
|
||||
int tm_wday;
|
||||
int tm_yday;
|
||||
int tm_isdst;
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifndef _WTIME_DEFINED
|
||||
#define _WTIME_DEFINED
|
||||
|
||||
_CRTIMP wchar_t *__cdecl _wasctime(const struct tm *_Tm);
|
||||
_CRTIMP wchar_t *__cdecl _wctime32(const __time32_t *_Time);
|
||||
size_t __cdecl wcsftime(wchar_t *_Buf,size_t _SizeInWords,const wchar_t *_Format,const struct tm *_Tm);
|
||||
_CRTIMP size_t __cdecl _wcsftime_l(wchar_t *_Buf,size_t _SizeInWords,const wchar_t *_Format,const struct tm *_Tm,_locale_t _Locale);
|
||||
_CRTIMP wchar_t *__cdecl _wstrdate(wchar_t *_Buffer);
|
||||
_CRTIMP wchar_t *__cdecl _wstrtime(wchar_t *_Buffer);
|
||||
#if _INTEGRAL_MAX_BITS >= 64
|
||||
_CRTIMP wchar_t *__cdecl _wctime64(const __time64_t *_Time);
|
||||
#endif
|
||||
|
||||
#if !defined (RC_INVOKED) && !defined (_INC_WTIME_INL)
|
||||
#define _INC_WTIME_INL
|
||||
#ifdef _USE_32BIT_TIME_T
|
||||
__CRT_INLINE wchar_t *__cdecl _wctime(const time_t *_Time) { return _wctime32(_Time); }
|
||||
#else
|
||||
__CRT_INLINE wchar_t *__cdecl _wctime(const time_t *_Time) { return _wctime64(_Time); }
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef int mbstate_t;
|
||||
typedef wchar_t _Wint_t;
|
||||
|
||||
wint_t __cdecl btowc(int);
|
||||
size_t __cdecl mbrlen(const char *_Ch,size_t _SizeInBytes,mbstate_t *_State);
|
||||
size_t __cdecl mbrtowc(wchar_t *_DstCh,const char *_SrcCh,size_t _SizeInBytes,mbstate_t *_State);
|
||||
size_t __cdecl mbsrtowcs(wchar_t *_Dest,const char **_PSrc,size_t _Count,mbstate_t *_State);
|
||||
size_t __cdecl wcrtomb(char *_Dest,wchar_t _Source,mbstate_t *_State);
|
||||
size_t __cdecl wcsrtombs(char *_Dest,const wchar_t **_PSource,size_t _Count,mbstate_t *_State);
|
||||
int __cdecl wctob(wint_t _WCh);
|
||||
|
||||
#ifndef __NO_ISOCEXT /* these need static lib libmingwex.a */
|
||||
wchar_t *__cdecl wmemset(wchar_t *s, wchar_t c, size_t n);
|
||||
_CONST_RETURN wchar_t *__cdecl wmemchr(const wchar_t *s, wchar_t c, size_t n);
|
||||
int wmemcmp(const wchar_t *s1, const wchar_t *s2,size_t n);
|
||||
wchar_t *__cdecl wmemcpy(wchar_t *s1,const wchar_t *s2,size_t n);
|
||||
wchar_t *__cdecl wmemmove(wchar_t *s1, const wchar_t *s2, size_t n);
|
||||
long long __cdecl wcstoll(const wchar_t *nptr,wchar_t **endptr, int base);
|
||||
unsigned long long __cdecl wcstoull(const wchar_t *nptr,wchar_t **endptr, int base);
|
||||
#endif /* __NO_ISOCEXT */
|
||||
|
||||
void *__cdecl memmove(void *_Dst,const void *_Src,size_t _MaxCount);
|
||||
void *__cdecl memcpy(void *_Dst,const void *_Src,size_t _MaxCount);
|
||||
__CRT_INLINE int __cdecl fwide(FILE *_F,int _M) { (void)_F; return (_M); }
|
||||
__CRT_INLINE int __cdecl mbsinit(const mbstate_t *_P) { return (!_P || *_P==0); }
|
||||
__CRT_INLINE _CONST_RETURN wchar_t *__cdecl wmemchr(const wchar_t *_S,wchar_t _C,size_t _N) { for (;0<_N;++_S,--_N) if (*_S==_C) return (_CONST_RETURN wchar_t *)(_S); return (0); }
|
||||
__CRT_INLINE int __cdecl wmemcmp(const wchar_t *_S1,const wchar_t *_S2,size_t _N) { for (; 0 < _N; ++_S1,++_S2,--_N) if (*_S1!=*_S2) return (*_S1 < *_S2 ? -1 : +1); return (0); }
|
||||
__CRT_INLINE wchar_t *__cdecl wmemcpy(wchar_t *_S1,const wchar_t *_S2,size_t _N) { return (wchar_t *)memcpy(_S1,_S2,_N*sizeof(wchar_t)); }
|
||||
__CRT_INLINE wchar_t *__cdecl wmemmove(wchar_t *_S1,const wchar_t *_S2,size_t _N) { return (wchar_t *)memmove(_S1,_S2,_N*sizeof(wchar_t)); }
|
||||
__CRT_INLINE wchar_t *__cdecl wmemset(wchar_t *_S,wchar_t _C,size_t _N) {
|
||||
wchar_t *_Su = _S;
|
||||
for (;0<_N;++_Su,--_N) {
|
||||
*_Su = _C;
|
||||
}
|
||||
return (_S);
|
||||
}
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
#include <sec_api/wchar_s.h>
|
||||
#endif
|
|
@ -1,172 +0,0 @@
|
|||
/**
|
||||
* This file has no copyright assigned and is placed in the Public Domain.
|
||||
* This file is part of the w64 mingw-runtime package.
|
||||
* No warranty is given; refer to the file DISCLAIMER within this package.
|
||||
*/
|
||||
#ifndef _INC_WCTYPE
|
||||
#define _INC_WCTYPE
|
||||
|
||||
#ifndef _WIN32
|
||||
#error Only Win32 target is supported!
|
||||
#endif
|
||||
|
||||
#include <_mingw.h>
|
||||
|
||||
#pragma pack(push,_CRT_PACKING)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef _CRTIMP
|
||||
#define _CRTIMP __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
#ifndef _WCHAR_T_DEFINED
|
||||
typedef unsigned short wchar_t;
|
||||
#define _WCHAR_T_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef _WCTYPE_T_DEFINED
|
||||
typedef unsigned short wint_t;
|
||||
typedef unsigned short wctype_t;
|
||||
#define _WCTYPE_T_DEFINED
|
||||
#endif
|
||||
|
||||
#ifndef WEOF
|
||||
#define WEOF (wint_t)(0xFFFF)
|
||||
#endif
|
||||
|
||||
#ifndef _CRT_CTYPEDATA_DEFINED
|
||||
#define _CRT_CTYPEDATA_DEFINED
|
||||
#ifndef _CTYPE_DISABLE_MACROS
|
||||
|
||||
#ifndef __PCTYPE_FUNC
|
||||
#define __PCTYPE_FUNC __pctype_func()
|
||||
#ifdef _MSVCRT_
|
||||
#define __pctype_func() (_pctype)
|
||||
#else
|
||||
#define __pctype_func() (*_imp___pctype)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _pctype
|
||||
#ifdef _MSVCRT_
|
||||
extern unsigned short *_pctype;
|
||||
#else
|
||||
extern unsigned short **_imp___pctype;
|
||||
#define _pctype (*_imp___pctype)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _CRT_WCTYPEDATA_DEFINED
|
||||
#define _CRT_WCTYPEDATA_DEFINED
|
||||
#ifndef _CTYPE_DISABLE_MACROS
|
||||
#ifndef _wctype
|
||||
#ifdef _MSVCRT_
|
||||
extern unsigned short *_wctype;
|
||||
#else
|
||||
extern unsigned short **_imp___wctype;
|
||||
#define _wctype (*_imp___wctype)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _pwctype
|
||||
#ifdef _MSVCRT_
|
||||
extern unsigned short *_pwctype;
|
||||
#else
|
||||
extern unsigned short **_imp___pwctype;
|
||||
#define _pwctype (*_imp___pwctype)
|
||||
#define __pwctype_func() (*_imp___pwctype)
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define _UPPER 0x1
|
||||
#define _LOWER 0x2
|
||||
#define _DIGIT 0x4
|
||||
#define _SPACE 0x8
|
||||
|
||||
#define _PUNCT 0x10
|
||||
#define _CONTROL 0x20
|
||||
#define _BLANK 0x40
|
||||
#define _HEX 0x80
|
||||
|
||||
#define _LEADBYTE 0x8000
|
||||
#define _ALPHA (0x0100|_UPPER|_LOWER)
|
||||
|
||||
#ifndef _WCTYPE_DEFINED
|
||||
#define _WCTYPE_DEFINED
|
||||
|
||||
int __cdecl iswalpha(wint_t);
|
||||
int __cdecl iswupper(wint_t);
|
||||
int __cdecl iswlower(wint_t);
|
||||
int __cdecl iswdigit(wint_t);
|
||||
int __cdecl iswxdigit(wint_t);
|
||||
int __cdecl iswspace(wint_t);
|
||||
int __cdecl iswpunct(wint_t);
|
||||
int __cdecl iswalnum(wint_t);
|
||||
int __cdecl iswprint(wint_t);
|
||||
int __cdecl iswgraph(wint_t);
|
||||
int __cdecl iswcntrl(wint_t);
|
||||
int __cdecl iswascii(wint_t);
|
||||
int __cdecl isleadbyte(int);
|
||||
wint_t __cdecl towupper(wint_t);
|
||||
wint_t __cdecl towlower(wint_t);
|
||||
int __cdecl iswctype(wint_t,wctype_t);
|
||||
_CRTIMP int __cdecl __iswcsymf(wint_t);
|
||||
_CRTIMP int __cdecl __iswcsym(wint_t);
|
||||
int __cdecl is_wctype(wint_t,wctype_t);
|
||||
#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || !defined (NO_OLDNAMES)
|
||||
int __cdecl isblank(int _C);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef _WCTYPE_INLINE_DEFINED
|
||||
#define _WCTYPE_INLINE_DEFINED
|
||||
#ifndef __cplusplus
|
||||
#define iswalpha(_c) (iswctype(_c,_ALPHA))
|
||||
#define iswupper(_c) (iswctype(_c,_UPPER))
|
||||
#define iswlower(_c) (iswctype(_c,_LOWER))
|
||||
#define iswdigit(_c) (iswctype(_c,_DIGIT))
|
||||
#define iswxdigit(_c) (iswctype(_c,_HEX))
|
||||
#define iswspace(_c) (iswctype(_c,_SPACE))
|
||||
#define iswpunct(_c) (iswctype(_c,_PUNCT))
|
||||
#define iswalnum(_c) (iswctype(_c,_ALPHA|_DIGIT))
|
||||
#define iswprint(_c) (iswctype(_c,_BLANK|_PUNCT|_ALPHA|_DIGIT))
|
||||
#define iswgraph(_c) (iswctype(_c,_PUNCT|_ALPHA|_DIGIT))
|
||||
#define iswcntrl(_c) (iswctype(_c,_CONTROL))
|
||||
#define iswascii(_c) ((unsigned)(_c) < 0x80)
|
||||
#define isleadbyte(c) (__pctype_func()[(unsigned char)(c)] & _LEADBYTE)
|
||||
#else
|
||||
__CRT_INLINE int __cdecl iswalpha(wint_t _C) {return (iswctype(_C,_ALPHA)); }
|
||||
__CRT_INLINE int __cdecl iswupper(wint_t _C) {return (iswctype(_C,_UPPER)); }
|
||||
__CRT_INLINE int __cdecl iswlower(wint_t _C) {return (iswctype(_C,_LOWER)); }
|
||||
__CRT_INLINE int __cdecl iswdigit(wint_t _C) {return (iswctype(_C,_DIGIT)); }
|
||||
__CRT_INLINE int __cdecl iswxdigit(wint_t _C) {return (iswctype(_C,_HEX)); }
|
||||
__CRT_INLINE int __cdecl iswspace(wint_t _C) {return (iswctype(_C,_SPACE)); }
|
||||
__CRT_INLINE int __cdecl iswpunct(wint_t _C) {return (iswctype(_C,_PUNCT)); }
|
||||
__CRT_INLINE int __cdecl iswalnum(wint_t _C) {return (iswctype(_C,_ALPHA|_DIGIT)); }
|
||||
__CRT_INLINE int __cdecl iswprint(wint_t _C) {return (iswctype(_C,_BLANK|_PUNCT|_ALPHA|_DIGIT)); }
|
||||
__CRT_INLINE int __cdecl iswgraph(wint_t _C) {return (iswctype(_C,_PUNCT|_ALPHA|_DIGIT)); }
|
||||
__CRT_INLINE int __cdecl iswcntrl(wint_t _C) {return (iswctype(_C,_CONTROL)); }
|
||||
__CRT_INLINE int __cdecl iswascii(wint_t _C) {return ((unsigned)(_C) < 0x80); }
|
||||
__CRT_INLINE int __cdecl isleadbyte(int _C) {return (__pctype_func()[(unsigned char)(_C)] & _LEADBYTE); }
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef wchar_t wctrans_t;
|
||||
wint_t __cdecl towctrans(wint_t,wctrans_t);
|
||||
wctrans_t __cdecl wctrans(const char *);
|
||||
wctype_t __cdecl wctype(const char *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#pragma pack(pop)
|
||||
#endif
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue