Refactor to support more varied testing.
Refactor the test harness to support three types of tests: - unit: White box unit tests. These tests have full access to all internal jemalloc library symbols. Though in actuality all symbols are prefixed by jet_, macro-based name mangling abstracts this away from test code. - integration: Black box integration tests. These tests link with the installable shared jemalloc library, and with the exception of some utility code and configure-generated macro definitions, they have no access to jemalloc internals. - stress: Black box stress tests. These tests link with the installable shared jemalloc library, as well as with an internal allocator with symbols prefixed by jet_ (same as for unit tests) that can be used to allocate data structures that are internal to the test code. Move existing tests into test/{unit,integration}/ as appropriate. Split out internal parts of jemalloc_defs.h.in and put them in jemalloc_internal_defs.h.in. This reduces internals exposure to applications that #include <jemalloc/jemalloc.h>. Refactor jemalloc.h header generation so that a single header file results, and the prototypes can be used to generate jet_ prototypes for tests. Split jemalloc.h.in into multiple parts (jemalloc_defs.h.in, jemalloc_macros.h.in, jemalloc_protos.h.in, jemalloc_mangle.h.in) and use a shell script to generate a unified jemalloc.h at configure time. Change the default private namespace prefix from "" to "je_". Add missing private namespace mangling. Remove hard-coded private_namespace.h. Instead generate it and private_unnamespace.h from private_symbols.txt. Use similar logic for public symbols, which aids in name mangling for jet_ symbols. Add test_warn() and test_fail(). Replace existing exit(1) calls with test_fail() calls.
This commit is contained in:
parent
6668853596
commit
86abd0dcd8
53
.gitignore
vendored
53
.gitignore
vendored
@ -1,25 +1,56 @@
|
|||||||
/autom4te.cache/
|
/autom4te.cache/
|
||||||
|
|
||||||
|
/bin/jemalloc.sh
|
||||||
|
|
||||||
/config.stamp
|
/config.stamp
|
||||||
/config.log
|
/config.log
|
||||||
/config.status
|
/config.status
|
||||||
/configure
|
/configure
|
||||||
|
|
||||||
/doc/html.xsl
|
/doc/html.xsl
|
||||||
/doc/manpages.xsl
|
/doc/manpages.xsl
|
||||||
/doc/jemalloc.xml
|
/doc/jemalloc.xml
|
||||||
/doc/jemalloc.html
|
/doc/jemalloc.html
|
||||||
/doc/jemalloc.3
|
/doc/jemalloc.3
|
||||||
|
|
||||||
/lib/
|
/lib/
|
||||||
|
|
||||||
/Makefile
|
/Makefile
|
||||||
/include/jemalloc/internal/jemalloc_internal\.h
|
|
||||||
/include/jemalloc/internal/size_classes\.h
|
/include/jemalloc/internal/jemalloc_internal.h
|
||||||
/include/jemalloc/jemalloc\.h
|
/include/jemalloc/internal/jemalloc_internal_defs.h
|
||||||
/include/jemalloc/jemalloc_defs\.h
|
/include/jemalloc/internal/private_namespace.h
|
||||||
/test/jemalloc_test\.h
|
/include/jemalloc/internal/private_unnamespace.h
|
||||||
|
/include/jemalloc/internal/public_namespace.h
|
||||||
|
/include/jemalloc/internal/public_unnamespace.h
|
||||||
|
/include/jemalloc/internal/size_classes.h
|
||||||
|
/include/jemalloc/jemalloc.h
|
||||||
|
/include/jemalloc/jemalloc_defs.h
|
||||||
|
/include/jemalloc/jemalloc_macros.h
|
||||||
|
/include/jemalloc/jemalloc_protos.h
|
||||||
|
/include/jemalloc/jemalloc_protos_jet.h
|
||||||
|
/include/jemalloc/jemalloc_mangle.h
|
||||||
|
|
||||||
/src/*.[od]
|
/src/*.[od]
|
||||||
/test/*.[od]
|
|
||||||
/test/*.out
|
/test/test.sh
|
||||||
/test/[a-zA-Z_]*
|
test/include/test/jemalloc_test.h
|
||||||
!test/*.c
|
|
||||||
!test/*.exp
|
/test/integration/[A-Za-z]*
|
||||||
|
!/test/integration/*.*
|
||||||
|
/test/integration/*.[od]
|
||||||
|
/test/integration/*.out
|
||||||
|
|
||||||
|
/test/src/*.[od]
|
||||||
|
|
||||||
|
/test/stress/[A-Za-z]*
|
||||||
|
!/test/stress/*.*
|
||||||
|
/test/stress/*.[od]
|
||||||
|
/test/stress/*.out
|
||||||
|
|
||||||
|
/test/unit/[A-Za-z]*
|
||||||
|
!/test/unit/*.*
|
||||||
|
/test/unit/*.[od]
|
||||||
|
/test/unit/*.out
|
||||||
|
|
||||||
/VERSION
|
/VERSION
|
||||||
/bin/jemalloc.sh
|
|
||||||
|
@ -6,6 +6,14 @@ found in the git revision history:
|
|||||||
http://www.canonware.com/cgi-bin/gitweb.cgi?p=jemalloc.git
|
http://www.canonware.com/cgi-bin/gitweb.cgi?p=jemalloc.git
|
||||||
git://canonware.com/jemalloc.git
|
git://canonware.com/jemalloc.git
|
||||||
|
|
||||||
|
* 3.5.0 (XXX)
|
||||||
|
|
||||||
|
Bug fixes:
|
||||||
|
- Change the default private namespace prefix from empty to je_, and change
|
||||||
|
--with-private-namespace-prefix so that it prepends an additional prefix
|
||||||
|
rather than replacing je_. This reduces the likelihood of applications
|
||||||
|
which statically link jemalloc experiencing symbol name collisions.
|
||||||
|
|
||||||
* 3.4.1 (October 20, 2013)
|
* 3.4.1 (October 20, 2013)
|
||||||
|
|
||||||
Bug fixes:
|
Bug fixes:
|
||||||
|
4
INSTALL
4
INSTALL
@ -61,10 +61,10 @@ any of the following arguments (not a definitive list) to 'configure':
|
|||||||
allocator on OSX.
|
allocator on OSX.
|
||||||
|
|
||||||
--with-private-namespace=<prefix>
|
--with-private-namespace=<prefix>
|
||||||
Prefix all library-private APIs with <prefix>. For shared libraries,
|
Prefix all library-private APIs with <prefix>je_. For shared libraries,
|
||||||
symbol visibility mechanisms prevent these symbols from being exported, but
|
symbol visibility mechanisms prevent these symbols from being exported, but
|
||||||
for static libraries, naming collisions are a real possibility. By
|
for static libraries, naming collisions are a real possibility. By
|
||||||
default, the prefix is "" (empty string).
|
default, <prefix> is empty, which results in a symbol prefix of je_ .
|
||||||
|
|
||||||
--with-install-suffix=<suffix>
|
--with-install-suffix=<suffix>
|
||||||
Append <suffix> to the base name of all installed files, such that multiple
|
Append <suffix> to the base name of all installed files, such that multiple
|
||||||
|
187
Makefile.in
187
Makefile.in
@ -73,18 +73,17 @@ LIBJEMALLOC := $(LIBPREFIX)jemalloc$(install_suffix)
|
|||||||
|
|
||||||
# Lists of files.
|
# Lists of files.
|
||||||
BINS := $(srcroot)bin/pprof $(objroot)bin/jemalloc.sh
|
BINS := $(srcroot)bin/pprof $(objroot)bin/jemalloc.sh
|
||||||
CHDRS := $(objroot)include/jemalloc/jemalloc$(install_suffix).h \
|
C_HDRS := $(objroot)include/jemalloc/jemalloc$(install_suffix).h
|
||||||
$(objroot)include/jemalloc/jemalloc_defs$(install_suffix).h
|
C_SRCS := $(srcroot)src/jemalloc.c $(srcroot)src/arena.c \
|
||||||
CSRCS := $(srcroot)src/jemalloc.c $(srcroot)src/arena.c $(srcroot)src/atomic.c \
|
$(srcroot)src/atomic.c $(srcroot)src/base.c $(srcroot)src/bitmap.c \
|
||||||
$(srcroot)src/base.c $(srcroot)src/bitmap.c $(srcroot)src/chunk.c \
|
$(srcroot)src/chunk.c $(srcroot)src/chunk_dss.c \
|
||||||
$(srcroot)src/chunk_dss.c $(srcroot)src/chunk_mmap.c \
|
$(srcroot)src/chunk_mmap.c $(srcroot)src/ckh.c $(srcroot)src/ctl.c \
|
||||||
$(srcroot)src/ckh.c $(srcroot)src/ctl.c $(srcroot)src/extent.c \
|
$(srcroot)src/extent.c $(srcroot)src/hash.c $(srcroot)src/huge.c \
|
||||||
$(srcroot)src/hash.c $(srcroot)src/huge.c $(srcroot)src/mb.c \
|
$(srcroot)src/mb.c $(srcroot)src/mutex.c $(srcroot)src/prof.c \
|
||||||
$(srcroot)src/mutex.c $(srcroot)src/prof.c $(srcroot)src/quarantine.c \
|
$(srcroot)src/quarantine.c $(srcroot)src/rtree.c $(srcroot)src/stats.c \
|
||||||
$(srcroot)src/rtree.c $(srcroot)src/stats.c $(srcroot)src/tcache.c \
|
$(srcroot)src/tcache.c $(srcroot)src/util.c $(srcroot)src/tsd.c
|
||||||
$(srcroot)src/util.c $(srcroot)src/tsd.c
|
|
||||||
ifeq ($(enable_zone_allocator), 1)
|
ifeq ($(enable_zone_allocator), 1)
|
||||||
CSRCS += $(srcroot)src/zone.c
|
C_SRCS += $(srcroot)src/zone.c
|
||||||
endif
|
endif
|
||||||
ifeq ($(IMPORTLIB),$(SO))
|
ifeq ($(IMPORTLIB),$(SO))
|
||||||
STATIC_LIBS := $(objroot)lib/$(LIBJEMALLOC).$(A)
|
STATIC_LIBS := $(objroot)lib/$(LIBJEMALLOC).$(A)
|
||||||
@ -103,24 +102,43 @@ DOCS_XML := $(objroot)doc/jemalloc$(install_suffix).xml
|
|||||||
DOCS_HTML := $(DOCS_XML:$(objroot)%.xml=$(srcroot)%.html)
|
DOCS_HTML := $(DOCS_XML:$(objroot)%.xml=$(srcroot)%.html)
|
||||||
DOCS_MAN3 := $(DOCS_XML:$(objroot)%.xml=$(srcroot)%.3)
|
DOCS_MAN3 := $(DOCS_XML:$(objroot)%.xml=$(srcroot)%.3)
|
||||||
DOCS := $(DOCS_HTML) $(DOCS_MAN3)
|
DOCS := $(DOCS_HTML) $(DOCS_MAN3)
|
||||||
CTESTS := $(srcroot)test/aligned_alloc.c $(srcroot)test/allocated.c \
|
C_TESTLIB_SRCS := $(srcroot)test/src/test.c $(srcroot)test/src/thread.c
|
||||||
$(srcroot)test/ALLOCM_ARENA.c $(srcroot)test/bitmap.c \
|
C_UTIL_INTEGRATION_SRCS := $(srcroot)src/util.c
|
||||||
$(srcroot)test/mremap.c $(srcroot)test/posix_memalign.c \
|
TESTS_UNIT := $(srcroot)test/unit/bitmap.c
|
||||||
$(srcroot)test/thread_arena.c $(srcroot)test/thread_tcache_enabled.c
|
TESTS_INTEGRATION := $(srcroot)test/integration/aligned_alloc.c \
|
||||||
|
$(srcroot)test/integration/allocated.c \
|
||||||
|
$(srcroot)test/integration/ALLOCM_ARENA.c \
|
||||||
|
$(srcroot)test/integration/mremap.c \
|
||||||
|
$(srcroot)test/integration/posix_memalign.c \
|
||||||
|
$(srcroot)test/integration/thread_arena.c \
|
||||||
|
$(srcroot)test/integration/thread_tcache_enabled.c
|
||||||
ifeq ($(enable_experimental), 1)
|
ifeq ($(enable_experimental), 1)
|
||||||
CTESTS += $(srcroot)test/allocm.c $(srcroot)test/rallocm.c
|
TESTS_INTEGRATION += $(srcroot)test/integration/allocm.c \
|
||||||
|
$(srcroot)test/integration/rallocm.c
|
||||||
endif
|
endif
|
||||||
|
TESTS_STRESS :=
|
||||||
|
TESTS := $(TESTS_UNIT) $(TESTS_INTEGRATION) $(TESTS_STRESS)
|
||||||
|
|
||||||
COBJS := $(CSRCS:$(srcroot)%.c=$(objroot)%.$(O))
|
C_OBJS := $(C_SRCS:$(srcroot)%.c=$(objroot)%.$(O))
|
||||||
CPICOBJS := $(CSRCS:$(srcroot)%.c=$(objroot)%.pic.$(O))
|
C_PIC_OBJS := $(C_SRCS:$(srcroot)%.c=$(objroot)%.pic.$(O))
|
||||||
CTESTOBJS := $(CTESTS:$(srcroot)%.c=$(objroot)%.$(O))
|
C_JET_OBJS := $(C_SRCS:$(srcroot)%.c=$(objroot)%.jet.$(O))
|
||||||
|
C_TESTLIB_UNIT_OBJS := $(C_TESTLIB_SRCS:$(srcroot)%.c=$(objroot)%.unit.$(O))
|
||||||
|
C_TESTLIB_INTEGRATION_OBJS := $(C_TESTLIB_SRCS:$(srcroot)%.c=$(objroot)%.integration.$(O))
|
||||||
|
C_UTIL_INTEGRATION_OBJS := $(C_UTIL_INTEGRATION_SRCS:$(srcroot)%.c=$(objroot)%.integration.$(O))
|
||||||
|
C_TESTLIB_STRESS_OBJS := $(C_TESTLIB_SRCS:$(srcroot)%.c=$(objroot)%.stress.$(O))
|
||||||
|
C_TESTLIB_OBJS := $(C_TESTLIB_UNIT_OBJS) $(C_TESTLIB_INTEGRATION_OBJS) $(C_UTIL_INTEGRATION_OBJS) $(C_TESTLIB_STRESS_OBJS)
|
||||||
|
|
||||||
|
TESTS_UNIT_OBJS := $(TESTS_UNIT:$(srcroot)%.c=$(objroot)%.$(O))
|
||||||
|
TESTS_INTEGRATION_OBJS := $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%.$(O))
|
||||||
|
TESTS_STRESS_OBJS := $(TESTS_STRESS:$(srcroot)%.c=$(objroot)%.$(O))
|
||||||
|
TESTS_OBJS := $(TESTS_UNIT_OBJS) $(TESTS_INTEGRATION_OBJS) $(TESTS_STRESS_OBJS)
|
||||||
|
|
||||||
.PHONY: all dist build_doc_html build_doc_man build_doc
|
.PHONY: all dist build_doc_html build_doc_man build_doc
|
||||||
.PHONY: install_bin install_include install_lib
|
.PHONY: install_bin install_include install_lib
|
||||||
.PHONY: install_doc_html install_doc_man install_doc install
|
.PHONY: install_doc_html install_doc_man install_doc install
|
||||||
.PHONY: tests check clean distclean relclean
|
.PHONY: tests check clean distclean relclean
|
||||||
|
|
||||||
.SECONDARY : $(CTESTOBJS)
|
.SECONDARY : $(TESTS_OBJS)
|
||||||
|
|
||||||
# Default target.
|
# Default target.
|
||||||
all: build
|
all: build
|
||||||
@ -141,30 +159,44 @@ build_doc: $(DOCS)
|
|||||||
# Include generated dependency files.
|
# Include generated dependency files.
|
||||||
#
|
#
|
||||||
ifdef CC_MM
|
ifdef CC_MM
|
||||||
-include $(COBJS:%.$(O)=%.d)
|
-include $(C_OBJS:%.$(O)=%.d)
|
||||||
-include $(CPICOBJS:%.$(O)=%.d)
|
-include $(C_PIC_OBJS:%.$(O)=%.d)
|
||||||
-include $(CTESTOBJS:%.$(O)=%.d)
|
-include $(C_JET_OBJS:%.$(O)=%.d)
|
||||||
|
-include $(TESTS_OBJS:%.$(O)=%.d)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(COBJS): $(objroot)src/%.$(O): $(srcroot)src/%.c
|
$(C_OBJS): $(objroot)src/%.$(O): $(srcroot)src/%.c
|
||||||
$(CPICOBJS): $(objroot)src/%.pic.$(O): $(srcroot)src/%.c
|
$(C_PIC_OBJS): $(objroot)src/%.pic.$(O): $(srcroot)src/%.c
|
||||||
$(CPICOBJS): CFLAGS += $(PIC_CFLAGS)
|
$(C_PIC_OBJS): CFLAGS += $(PIC_CFLAGS)
|
||||||
$(CTESTOBJS): $(objroot)test/%.$(O): $(srcroot)test/%.c
|
$(C_JET_OBJS): $(objroot)src/%.jet.$(O): $(srcroot)src/%.c
|
||||||
$(CTESTOBJS): CPPFLAGS += -I$(objroot)test
|
$(C_JET_OBJS): CFLAGS += -DJEMALLOC_JET
|
||||||
|
$(C_TESTLIB_UNIT_OBJS): $(objroot)test/src/%.unit.$(O): $(srcroot)test/src/%.c
|
||||||
|
$(C_TESTLIB_UNIT_OBJS): CPPFLAGS += -DJEMALLOC_UNIT_TEST
|
||||||
|
$(C_TESTLIB_INTEGRATION_OBJS): $(objroot)test/src/%.integration.$(O): $(srcroot)test/src/%.c
|
||||||
|
$(C_TESTLIB_INTEGRATION_OBJS): CPPFLAGS += -DJEMALLOC_INTEGRATION_TEST
|
||||||
|
$(C_UTIL_INTEGRATION_OBJS): $(objroot)src/%.integration.$(O): $(srcroot)src/%.c
|
||||||
|
$(C_TESTLIB_STRESS_OBJS): $(objroot)test/src/%.stress.$(O): $(srcroot)test/src/%.c
|
||||||
|
$(C_TESTLIB_STRESS_OBJS): CPPFLAGS += -DJEMALLOC_STRESS_TEST
|
||||||
|
$(C_TESTLIB_OBJS): CPPFLAGS += -I$(objroot)test/include
|
||||||
|
$(TESTS_UNIT_OBJS): CPPFLAGS += -DJEMALLOC_UNIT_TEST
|
||||||
|
$(TESTS_INTEGRATION_OBJS): CPPFLAGS += -DJEMALLOC_INTEGRATION_TEST
|
||||||
|
$(TESTS_STRESS_OBJS): CPPFLAGS += -DJEMALLOC_STRESS_TEST
|
||||||
|
$(TESTS_OBJS): $(objroot)test/%.$(O): $(srcroot)test/%.c
|
||||||
|
$(TESTS_OBJS): CPPFLAGS += -I$(objroot)test/include
|
||||||
ifneq ($(IMPORTLIB),$(SO))
|
ifneq ($(IMPORTLIB),$(SO))
|
||||||
$(COBJS): CPPFLAGS += -DDLLEXPORT
|
$(C_OBJS): CPPFLAGS += -DDLLEXPORT
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef CC_MM
|
ifndef CC_MM
|
||||||
# Dependencies
|
# Dependencies.
|
||||||
HEADER_DIRS = $(srcroot)include/jemalloc/internal \
|
HEADER_DIRS = $(srcroot)include/jemalloc/internal \
|
||||||
$(objroot)include/jemalloc $(objroot)include/jemalloc/internal
|
$(objroot)include/jemalloc $(objroot)include/jemalloc/internal
|
||||||
HEADERS = $(wildcard $(foreach dir,$(HEADER_DIRS),$(dir)/*.h))
|
HEADERS = $(wildcard $(foreach dir,$(HEADER_DIRS),$(dir)/*.h))
|
||||||
$(COBJS) $(CPICOBJS) $(CTESTOBJS): $(HEADERS)
|
$(C_OBJS) $(C_PIC_OBJS) $(C_JET_OBJS) $(C_TESTLIB_OBJS) $(TESTS_OBJS): $(HEADERS)
|
||||||
$(CTESTOBJS): $(objroot)test/jemalloc_test.h
|
$(TESTS_OBJS): $(objroot)test/unit/jemalloc_test.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(COBJS) $(CPICOBJS) $(CTESTOBJS): %.$(O):
|
$(C_OBJS) $(C_PIC_OBJS) $(C_JET_OBJS) $(C_TESTLIB_OBJS) $(TESTS_OBJS): %.$(O):
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
$(CC) $(CFLAGS) -c $(CPPFLAGS) $(CTARGET) $<
|
$(CC) $(CFLAGS) -c $(CPPFLAGS) $(CTARGET) $<
|
||||||
ifdef CC_MM
|
ifdef CC_MM
|
||||||
@ -177,21 +209,27 @@ ifneq ($(SOREV),$(SO))
|
|||||||
ln -sf $(<F) $@
|
ln -sf $(<F) $@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(objroot)lib/$(LIBJEMALLOC).$(SOREV) : $(if $(PIC_CFLAGS),$(CPICOBJS),$(COBJS))
|
$(objroot)lib/$(LIBJEMALLOC).$(SOREV) : $(if $(PIC_CFLAGS),$(C_PIC_OBJS),$(C_OBJS))
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
$(CC) $(DSO_LDFLAGS) $(call RPATH,$(RPATH_EXTRA)) $(LDTARGET) $+ $(LDFLAGS) $(LIBS) $(EXTRA_LDFLAGS)
|
$(CC) $(DSO_LDFLAGS) $(call RPATH,$(RPATH_EXTRA)) $(LDTARGET) $+ $(LDFLAGS) $(LIBS) $(EXTRA_LDFLAGS)
|
||||||
|
|
||||||
$(objroot)lib/$(LIBJEMALLOC)_pic.$(A) : $(CPICOBJS)
|
$(objroot)lib/$(LIBJEMALLOC)_pic.$(A) : $(C_PIC_OBJS)
|
||||||
$(objroot)lib/$(LIBJEMALLOC).$(A) : $(COBJS)
|
$(objroot)lib/$(LIBJEMALLOC).$(A) : $(C_OBJS)
|
||||||
$(objroot)lib/$(LIBJEMALLOC)_s.$(A) : $(COBJS)
|
$(objroot)lib/$(LIBJEMALLOC)_s.$(A) : $(C_OBJS)
|
||||||
|
|
||||||
$(STATIC_LIBS):
|
$(STATIC_LIBS):
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
$(AR) $(ARFLAGS)@AROUT@ $+
|
$(AR) $(ARFLAGS)@AROUT@ $+
|
||||||
|
|
||||||
$(objroot)test/bitmap$(EXE): $(objroot)src/bitmap.$(O)
|
$(objroot)test/unit/%$(EXE): $(objroot)test/unit/%.$(O) $(C_JET_OBJS) $(C_TESTLIB_UNIT_OBJS)
|
||||||
|
@mkdir -p $(@D)
|
||||||
|
$(CC) $(LDTARGET) $(filter %.$(O),$^) $(call RPATH,$(objroot)lib) $(filter -lpthread,$(LIBS)) $(EXTRA_LDFLAGS)
|
||||||
|
|
||||||
$(objroot)test/%$(EXE): $(objroot)test/%.$(O) $(objroot)src/util.$(O) $(DSOS)
|
$(objroot)test/integration/%$(EXE): $(objroot)test/integration/%.$(O) $(C_TESTLIB_INTEGRATION_OBJS) $(C_UTIL_INTEGRATION_OBJS) $(objroot)lib/$(LIBJEMALLOC).$(IMPORTLIB)
|
||||||
|
@mkdir -p $(@D)
|
||||||
|
$(CC) $(LDTARGET) $(filter %.$(O),$^) $(call RPATH,$(objroot)lib) $(objroot)lib/$(LIBJEMALLOC).$(IMPORTLIB) $(filter -lpthread,$(LIBS)) $(EXTRA_LDFLAGS)
|
||||||
|
|
||||||
|
$(objroot)test/stress/%$(EXE): $(objroot)test/stress/%.$(O) $(C_JET_OBJS) $(C_TESTLIB_STRESS_OBJS) $(objroot)lib/$(LIBJEMALLOC).$(IMPORTLIB)
|
||||||
@mkdir -p $(@D)
|
@mkdir -p $(@D)
|
||||||
$(CC) $(LDTARGET) $(filter %.$(O),$^) $(call RPATH,$(objroot)lib) $(objroot)lib/$(LIBJEMALLOC).$(IMPORTLIB) $(filter -lpthread,$(LIBS)) $(EXTRA_LDFLAGS)
|
$(CC) $(LDTARGET) $(filter %.$(O),$^) $(call RPATH,$(objroot)lib) $(objroot)lib/$(LIBJEMALLOC).$(IMPORTLIB) $(filter -lpthread,$(LIBS)) $(EXTRA_LDFLAGS)
|
||||||
|
|
||||||
@ -208,7 +246,7 @@ done
|
|||||||
|
|
||||||
install_include:
|
install_include:
|
||||||
install -d $(INCLUDEDIR)/jemalloc
|
install -d $(INCLUDEDIR)/jemalloc
|
||||||
@for h in $(CHDRS); do \
|
@for h in $(C_HDRS); do \
|
||||||
echo "install -m 644 $$h $(INCLUDEDIR)/jemalloc"; \
|
echo "install -m 644 $$h $(INCLUDEDIR)/jemalloc"; \
|
||||||
install -m 644 $$h $(INCLUDEDIR)/jemalloc; \
|
install -m 644 $$h $(INCLUDEDIR)/jemalloc; \
|
||||||
done
|
done
|
||||||
@ -247,49 +285,46 @@ install_doc: install_doc_html install_doc_man
|
|||||||
|
|
||||||
install: install_bin install_include install_lib install_doc
|
install: install_bin install_include install_lib install_doc
|
||||||
|
|
||||||
tests: $(CTESTS:$(srcroot)%.c=$(objroot)%$(EXE))
|
tests_unit: $(TESTS_UNIT:$(srcroot)%.c=$(objroot)%$(EXE))
|
||||||
|
tests_integration: $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%$(EXE))
|
||||||
|
tests_stress: $(TESTS_STRESS:$(srcroot)%.c=$(objroot)%$(EXE))
|
||||||
|
tests: tests_unit tests_integration tests_stress
|
||||||
|
|
||||||
check: tests
|
check_unit_dir:
|
||||||
@mkdir -p $(objroot)test
|
@mkdir -p $(objroot)test/unit
|
||||||
@$(SHELL) -c 'total=0; \
|
check_integration_dir:
|
||||||
failures=0; \
|
@mkdir -p $(objroot)test/integration
|
||||||
echo "========================================="; \
|
check_stress_dir:
|
||||||
for t in $(CTESTS:$(srcroot)%.c=$(objroot)%); do \
|
@mkdir -p $(objroot)test/stress
|
||||||
total=`expr $$total + 1`; \
|
check_dir: check_unit_dir check_integration_dir check_stress_dir
|
||||||
/bin/echo -n "$${t} ... "; \
|
|
||||||
$(TEST_LIBRARY_PATH) $${t}$(EXE) $(abs_srcroot) \
|
check_unit: tests_unit check_unit_dir
|
||||||
$(abs_objroot) > $(objroot)$${t}.out 2>&1; \
|
@$(SHELL) $(objroot)test/test.sh $(TESTS_UNIT:$(srcroot)%.c=$(objroot)%)
|
||||||
if test -e "$(srcroot)$${t}.exp"; then \
|
check_integration: tests_integration check_integration_dir
|
||||||
diff -w -u $(srcroot)$${t}.exp \
|
@$(SHELL) $(objroot)test/test.sh $(TESTS_INTEGRATION:$(srcroot)%.c=$(objroot)%)
|
||||||
$(objroot)$${t}.out >/dev/null 2>&1; \
|
check_stress: tests_stress check_stress_dir
|
||||||
fail=$$?; \
|
@$(SHELL) $(objroot)test/test.sh $(TESTS_STRESS:$(srcroot)%.c=$(objroot)%)
|
||||||
if test "$${fail}" -eq "1" ; then \
|
check: tests check_dir
|
||||||
failures=`expr $${failures} + 1`; \
|
@$(SHELL) $(objroot)test/test.sh $(TESTS:$(srcroot)%.c=$(objroot)%)
|
||||||
echo "*** FAIL ***"; \
|
|
||||||
else \
|
|
||||||
echo "pass"; \
|
|
||||||
fi; \
|
|
||||||
else \
|
|
||||||
echo "*** FAIL *** (.exp file is missing)"; \
|
|
||||||
failures=`expr $${failures} + 1`; \
|
|
||||||
fi; \
|
|
||||||
done; \
|
|
||||||
echo "========================================="; \
|
|
||||||
echo "Failures: $${failures}/$${total}"'
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(COBJS)
|
rm -f $(C_OBJS)
|
||||||
rm -f $(CPICOBJS)
|
rm -f $(C_PIC_OBJS)
|
||||||
rm -f $(COBJS:%.$(O)=%.d)
|
rm -f $(C_JET_OBJS)
|
||||||
rm -f $(CPICOBJS:%.$(O)=%.d)
|
rm -f $(C_TESTLIB_OBJS)
|
||||||
rm -f $(CTESTOBJS:%.$(O)=%$(EXE))
|
rm -f $(C_OBJS:%.$(O)=%.d)
|
||||||
rm -f $(CTESTOBJS)
|
rm -f $(C_PIC_OBJS:%.$(O)=%.d)
|
||||||
rm -f $(CTESTOBJS:%.$(O)=%.d)
|
rm -f $(C_JET_OBJS:%.$(O)=%.d)
|
||||||
rm -f $(CTESTOBJS:%.$(O)=%.out)
|
rm -f $(C_TESTLIB_OBJS:%.$(O)=%.d)
|
||||||
|
rm -f $(TESTS_OBJS:%.$(O)=%$(EXE))
|
||||||
|
rm -f $(TESTS_OBJS)
|
||||||
|
rm -f $(TESTS_OBJS:%.$(O)=%.d)
|
||||||
|
rm -f $(TESTS_OBJS:%.$(O)=%.out)
|
||||||
rm -f $(DSOS) $(STATIC_LIBS)
|
rm -f $(DSOS) $(STATIC_LIBS)
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
rm -rf $(objroot)autom4te.cache
|
rm -rf $(objroot)autom4te.cache
|
||||||
|
rm -f $(objroot)bin/jemalloc.sh
|
||||||
rm -f $(objroot)config.log
|
rm -f $(objroot)config.log
|
||||||
rm -f $(objroot)config.status
|
rm -f $(objroot)config.status
|
||||||
rm -f $(objroot)config.stamp
|
rm -f $(objroot)config.stamp
|
||||||
|
88
configure.ac
88
configure.ac
@ -489,18 +489,15 @@ AC_ARG_WITH([export],
|
|||||||
fi]
|
fi]
|
||||||
)
|
)
|
||||||
|
|
||||||
dnl Do not mangle library-private APIs by default.
|
dnl Mangle library-private APIs.
|
||||||
AC_ARG_WITH([private_namespace],
|
AC_ARG_WITH([private_namespace],
|
||||||
[AS_HELP_STRING([--with-private-namespace=<prefix>], [Prefix to prepend to all library-private APIs])],
|
[AS_HELP_STRING([--with-private-namespace=<prefix>], [Prefix to prepend to all library-private APIs])],
|
||||||
[JEMALLOC_PRIVATE_NAMESPACE="$with_private_namespace"],
|
[JEMALLOC_PRIVATE_NAMESPACE="${with_private_namespace}je_"],
|
||||||
[JEMALLOC_PRIVATE_NAMESPACE=""]
|
[JEMALLOC_PRIVATE_NAMESPACE="je_"]
|
||||||
)
|
)
|
||||||
AC_DEFINE_UNQUOTED([JEMALLOC_PRIVATE_NAMESPACE], ["$JEMALLOC_PRIVATE_NAMESPACE"])
|
AC_DEFINE_UNQUOTED([JEMALLOC_PRIVATE_NAMESPACE], [$JEMALLOC_PRIVATE_NAMESPACE])
|
||||||
if test "x$JEMALLOC_PRIVATE_NAMESPACE" != "x" ; then
|
private_namespace="$JEMALLOC_PRIVATE_NAMESPACE"
|
||||||
AC_DEFINE_UNQUOTED([JEMALLOC_N(string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix)], [${JEMALLOC_PRIVATE_NAMESPACE}##string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix])
|
AC_SUBST([private_namespace])
|
||||||
else
|
|
||||||
AC_DEFINE_UNQUOTED([JEMALLOC_N(string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix)], [string_that_no_one_should_want_to_use_as_a_jemalloc_private_namespace_prefix])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Do not add suffix to installed files by default.
|
dnl Do not add suffix to installed files by default.
|
||||||
AC_ARG_WITH([install_suffix],
|
AC_ARG_WITH([install_suffix],
|
||||||
@ -511,37 +508,64 @@ AC_ARG_WITH([install_suffix],
|
|||||||
install_suffix="$INSTALL_SUFFIX"
|
install_suffix="$INSTALL_SUFFIX"
|
||||||
AC_SUBST([install_suffix])
|
AC_SUBST([install_suffix])
|
||||||
|
|
||||||
|
dnl Substitute @je_@ in jemalloc_protos.h.in, primarily to make generation of
|
||||||
|
dnl jemalloc_protos_jet.h easy.
|
||||||
|
je_="je_"
|
||||||
|
AC_SUBST([je_])
|
||||||
|
|
||||||
cfgoutputs_in="${srcroot}Makefile.in"
|
cfgoutputs_in="${srcroot}Makefile.in"
|
||||||
cfgoutputs_in="${cfgoutputs_in} ${srcroot}doc/html.xsl.in"
|
cfgoutputs_in="${cfgoutputs_in} ${srcroot}doc/html.xsl.in"
|
||||||
cfgoutputs_in="${cfgoutputs_in} ${srcroot}doc/manpages.xsl.in"
|
cfgoutputs_in="${cfgoutputs_in} ${srcroot}doc/manpages.xsl.in"
|
||||||
cfgoutputs_in="${cfgoutputs_in} ${srcroot}doc/jemalloc.xml.in"
|
cfgoutputs_in="${cfgoutputs_in} ${srcroot}doc/jemalloc.xml.in"
|
||||||
cfgoutputs_in="${cfgoutputs_in} ${srcroot}include/jemalloc/jemalloc.h.in"
|
cfgoutputs_in="${cfgoutputs_in} ${srcroot}include/jemalloc/jemalloc_macros.h.in"
|
||||||
|
cfgoutputs_in="${cfgoutputs_in} ${srcroot}include/jemalloc/jemalloc_protos.h.in"
|
||||||
|
cfgoutputs_in="${cfgoutputs_in} ${srcroot}include/jemalloc/jemalloc_mangle.h.in"
|
||||||
cfgoutputs_in="${cfgoutputs_in} ${srcroot}include/jemalloc/internal/jemalloc_internal.h.in"
|
cfgoutputs_in="${cfgoutputs_in} ${srcroot}include/jemalloc/internal/jemalloc_internal.h.in"
|
||||||
cfgoutputs_in="${cfgoutputs_in} ${srcroot}test/jemalloc_test.h.in"
|
cfgoutputs_in="${cfgoutputs_in} ${srcroot}test/test.sh.in"
|
||||||
|
cfgoutputs_in="${cfgoutputs_in} ${srcroot}test/include/test/jemalloc_test.h.in"
|
||||||
|
|
||||||
cfgoutputs_out="Makefile"
|
cfgoutputs_out="Makefile"
|
||||||
cfgoutputs_out="${cfgoutputs_out} doc/html.xsl"
|
cfgoutputs_out="${cfgoutputs_out} doc/html.xsl"
|
||||||
cfgoutputs_out="${cfgoutputs_out} doc/manpages.xsl"
|
cfgoutputs_out="${cfgoutputs_out} doc/manpages.xsl"
|
||||||
cfgoutputs_out="${cfgoutputs_out} doc/jemalloc${install_suffix}.xml"
|
cfgoutputs_out="${cfgoutputs_out} doc/jemalloc.xml"
|
||||||
cfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc${install_suffix}.h"
|
cfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc_macros.h"
|
||||||
|
cfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc_protos.h"
|
||||||
|
cfgoutputs_out="${cfgoutputs_out} include/jemalloc/jemalloc_mangle.h"
|
||||||
cfgoutputs_out="${cfgoutputs_out} include/jemalloc/internal/jemalloc_internal.h"
|
cfgoutputs_out="${cfgoutputs_out} include/jemalloc/internal/jemalloc_internal.h"
|
||||||
cfgoutputs_out="${cfgoutputs_out} test/jemalloc_test.h"
|
cfgoutputs_out="${cfgoutputs_out} test/test.sh"
|
||||||
|
cfgoutputs_out="${cfgoutputs_out} test/include/test/jemalloc_test.h"
|
||||||
|
|
||||||
cfgoutputs_tup="Makefile"
|
cfgoutputs_tup="Makefile"
|
||||||
cfgoutputs_tup="${cfgoutputs_tup} doc/html.xsl:doc/html.xsl.in"
|
cfgoutputs_tup="${cfgoutputs_tup} doc/html.xsl:doc/html.xsl.in"
|
||||||
cfgoutputs_tup="${cfgoutputs_tup} doc/manpages.xsl:doc/manpages.xsl.in"
|
cfgoutputs_tup="${cfgoutputs_tup} doc/manpages.xsl:doc/manpages.xsl.in"
|
||||||
cfgoutputs_tup="${cfgoutputs_tup} doc/jemalloc${install_suffix}.xml:doc/jemalloc.xml.in"
|
cfgoutputs_tup="${cfgoutputs_tup} doc/jemalloc.xml:doc/jemalloc.xml.in"
|
||||||
cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc${install_suffix}.h:include/jemalloc/jemalloc.h.in"
|
cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc_macros.h:include/jemalloc/jemalloc_macros.h.in"
|
||||||
|
cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc_protos.h:include/jemalloc/jemalloc_protos.h.in"
|
||||||
|
cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/jemalloc_mangle.h:include/jemalloc/jemalloc_mangle.h.in"
|
||||||
cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/internal/jemalloc_internal.h"
|
cfgoutputs_tup="${cfgoutputs_tup} include/jemalloc/internal/jemalloc_internal.h"
|
||||||
cfgoutputs_tup="${cfgoutputs_tup} test/jemalloc_test.h:test/jemalloc_test.h.in"
|
cfgoutputs_tup="${cfgoutputs_tup} test/test.sh:test/test.sh.in"
|
||||||
|
cfgoutputs_tup="${cfgoutputs_tup} test/include/test/jemalloc_test.h:test/include/test/jemalloc_test.h.in"
|
||||||
|
|
||||||
cfghdrs_in="${srcroot}include/jemalloc/jemalloc_defs.h.in"
|
cfghdrs_in="${srcroot}include/jemalloc/jemalloc_defs.h.in"
|
||||||
|
cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/internal/jemalloc_internal_defs.h.in"
|
||||||
|
cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/internal/private_namespace.sh"
|
||||||
|
cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/internal/private_unnamespace.sh"
|
||||||
|
cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/internal/public_namespace.sh"
|
||||||
|
cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/internal/public_unnamespace.sh"
|
||||||
cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/internal/size_classes.sh"
|
cfghdrs_in="${cfghdrs_in} ${srcroot}include/jemalloc/internal/size_classes.sh"
|
||||||
|
|
||||||
cfghdrs_out="include/jemalloc/jemalloc_defs${install_suffix}.h"
|
cfghdrs_out="include/jemalloc/jemalloc_defs.h"
|
||||||
|
cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc${install_suffix}.h"
|
||||||
|
cfghdrs_out="${cfghdrs_out} include/jemalloc/jemalloc_protos_jet.h"
|
||||||
|
cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/jemalloc_internal_defs.h"
|
||||||
|
cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/private_namespace.h"
|
||||||
|
cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/private_unnamespace.h"
|
||||||
|
cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/public_namespace.h"
|
||||||
|
cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/public_unnamespace.h"
|
||||||
cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/size_classes.h"
|
cfghdrs_out="${cfghdrs_out} include/jemalloc/internal/size_classes.h"
|
||||||
|
|
||||||
cfghdrs_tup="include/jemalloc/jemalloc_defs${install_suffix}.h:include/jemalloc/jemalloc_defs.h.in"
|
cfghdrs_tup="include/jemalloc/jemalloc_defs.h:include/jemalloc/jemalloc_defs.h.in"
|
||||||
|
cfghdrs_tup="${cfghdrs_tup} include/jemalloc/internal/jemalloc_internal_defs.h:${srcroot}include/jemalloc/internal/jemalloc_internal_defs.h.in"
|
||||||
|
|
||||||
dnl Do not silence irrelevant compiler warnings by default, since enabling this
|
dnl Do not silence irrelevant compiler warnings by default, since enabling this
|
||||||
dnl option incurs a performance penalty.
|
dnl option incurs a performance penalty.
|
||||||
@ -1277,10 +1301,34 @@ dnl ============================================================================
|
|||||||
dnl Check for typedefs, structures, and compiler characteristics.
|
dnl Check for typedefs, structures, and compiler characteristics.
|
||||||
AC_HEADER_STDBOOL
|
AC_HEADER_STDBOOL
|
||||||
|
|
||||||
|
AC_CONFIG_COMMANDS([include/jemalloc/internal/private_namespace.h], [
|
||||||
|
mkdir -p "${objroot}include/jemalloc/internal"
|
||||||
|
"${srcdir}/include/jemalloc/internal/private_namespace.sh" "${srcdir}/include/jemalloc/internal/private_symbols.txt" > "${objroot}include/jemalloc/internal/private_namespace.h"
|
||||||
|
])
|
||||||
|
AC_CONFIG_COMMANDS([include/jemalloc/internal/private_unnamespace.h], [
|
||||||
|
mkdir -p "${objroot}include/jemalloc/internal"
|
||||||
|
"${srcdir}/include/jemalloc/internal/private_unnamespace.sh" "${srcdir}/include/jemalloc/internal/private_symbols.txt" > "${objroot}include/jemalloc/internal/private_unnamespace.h"
|
||||||
|
])
|
||||||
|
AC_CONFIG_COMMANDS([include/jemalloc/internal/public_namespace.h], [
|
||||||
|
mkdir -p "${objroot}include/jemalloc/internal"
|
||||||
|
"${srcdir}/include/jemalloc/internal/public_namespace.sh" "${srcdir}/include/jemalloc/internal/public_symbols.txt" > "${objroot}include/jemalloc/internal/public_namespace.h"
|
||||||
|
])
|
||||||
|
AC_CONFIG_COMMANDS([include/jemalloc/internal/public_unnamespace.h], [
|
||||||
|
mkdir -p "${objroot}include/jemalloc/internal"
|
||||||
|
"${srcdir}/include/jemalloc/internal/public_unnamespace.sh" "${srcdir}/include/jemalloc/internal/public_symbols.txt" > "${objroot}include/jemalloc/internal/public_unnamespace.h"
|
||||||
|
])
|
||||||
AC_CONFIG_COMMANDS([include/jemalloc/internal/size_classes.h], [
|
AC_CONFIG_COMMANDS([include/jemalloc/internal/size_classes.h], [
|
||||||
mkdir -p "include/jemalloc/internal"
|
mkdir -p "${objroot}include/jemalloc/internal"
|
||||||
"${srcdir}/include/jemalloc/internal/size_classes.sh" > "${objroot}include/jemalloc/internal/size_classes.h"
|
"${srcdir}/include/jemalloc/internal/size_classes.sh" > "${objroot}include/jemalloc/internal/size_classes.h"
|
||||||
])
|
])
|
||||||
|
AC_CONFIG_COMMANDS([include/jemalloc/jemalloc_protos_jet.h], [
|
||||||
|
mkdir -p "${objroot}include/jemalloc"
|
||||||
|
cat "${srcdir}/include/jemalloc/jemalloc_protos.h.in" | sed -e 's/@je_@/jet_/g' > "${objroot}include/jemalloc/jemalloc_protos_jet.h"
|
||||||
|
])
|
||||||
|
AC_CONFIG_COMMANDS([include/jemalloc/jemalloc.h], [
|
||||||
|
mkdir -p "${objroot}include/jemalloc"
|
||||||
|
"${srcdir}/include/jemalloc/jemalloc.sh" "${objroot}" > "${objroot}include/jemalloc/jemalloc${install_suffix}.h"
|
||||||
|
])
|
||||||
|
|
||||||
dnl Process .in files.
|
dnl Process .in files.
|
||||||
AC_SUBST([cfghdrs_in])
|
AC_SUBST([cfghdrs_in])
|
||||||
|
@ -54,8 +54,7 @@ typedef intptr_t ssize_t;
|
|||||||
#endif
|
#endif
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
#define JEMALLOC_NO_DEMANGLE
|
#include "jemalloc_internal_defs.h"
|
||||||
#include "../jemalloc@install_suffix@.h"
|
|
||||||
|
|
||||||
#ifdef JEMALLOC_UTRACE
|
#ifdef JEMALLOC_UTRACE
|
||||||
#include <sys/ktrace.h>
|
#include <sys/ktrace.h>
|
||||||
@ -66,6 +65,16 @@ typedef intptr_t ssize_t;
|
|||||||
#include <valgrind/memcheck.h>
|
#include <valgrind/memcheck.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define JEMALLOC_NO_DEMANGLE
|
||||||
|
#ifdef JEMALLOC_JET
|
||||||
|
# define JEMALLOC_N(n) jet_##n
|
||||||
|
# include "jemalloc/internal/public_namespace.h"
|
||||||
|
# define JEMALLOC_NO_RENAME
|
||||||
|
# include "../jemalloc@install_suffix@.h"
|
||||||
|
#else
|
||||||
|
# define JEMALLOC_N(n) @private_namespace@##n
|
||||||
|
# include "../jemalloc@install_suffix@.h"
|
||||||
|
#endif
|
||||||
#include "jemalloc/internal/private_namespace.h"
|
#include "jemalloc/internal/private_namespace.h"
|
||||||
|
|
||||||
#ifdef JEMALLOC_CC_SILENCE
|
#ifdef JEMALLOC_CC_SILENCE
|
||||||
@ -522,10 +531,10 @@ typedef struct {
|
|||||||
uint64_t deallocated;
|
uint64_t deallocated;
|
||||||
} thread_allocated_t;
|
} thread_allocated_t;
|
||||||
/*
|
/*
|
||||||
* The JEMALLOC_CONCAT() wrapper is necessary to pass {0, 0} via a cpp macro
|
* The JEMALLOC_ARG_CONCAT() wrapper is necessary to pass {0, 0} via a cpp macro
|
||||||
* argument.
|
* argument.
|
||||||
*/
|
*/
|
||||||
#define THREAD_ALLOCATED_INITIALIZER JEMALLOC_CONCAT({0, 0})
|
#define THREAD_ALLOCATED_INITIALIZER JEMALLOC_ARG_CONCAT({0, 0})
|
||||||
|
|
||||||
#undef JEMALLOC_H_STRUCTS
|
#undef JEMALLOC_H_STRUCTS
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
202
include/jemalloc/internal/jemalloc_internal_defs.h.in
Normal file
202
include/jemalloc/internal/jemalloc_internal_defs.h.in
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
/*
|
||||||
|
* If JEMALLOC_PREFIX is defined via --with-jemalloc-prefix, it will cause all
|
||||||
|
* public APIs to be prefixed. This makes it possible, with some care, to use
|
||||||
|
* multiple allocators simultaneously.
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_PREFIX
|
||||||
|
#undef JEMALLOC_CPREFIX
|
||||||
|
|
||||||
|
/*
|
||||||
|
* JEMALLOC_PRIVATE_NAMESPACE is used as a prefix for all library-private APIs.
|
||||||
|
* For shared libraries, symbol visibility mechanisms prevent these symbols
|
||||||
|
* from being exported, but for static libraries, naming collisions are a real
|
||||||
|
* possibility.
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_PRIVATE_NAMESPACE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Hyper-threaded CPUs may need a special instruction inside spin loops in
|
||||||
|
* order to yield to another virtual CPU.
|
||||||
|
*/
|
||||||
|
#undef CPU_SPINWAIT
|
||||||
|
|
||||||
|
/* Defined if the equivalent of FreeBSD's atomic(9) functions are available. */
|
||||||
|
#undef JEMALLOC_ATOMIC9
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Defined if OSAtomic*() functions are available, as provided by Darwin, and
|
||||||
|
* documented in the atomic(3) manual page.
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_OSATOMIC
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Defined if __sync_add_and_fetch(uint32_t *, uint32_t) and
|
||||||
|
* __sync_sub_and_fetch(uint32_t *, uint32_t) are available, despite
|
||||||
|
* __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 not being defined (which means the
|
||||||
|
* functions are defined in libgcc instead of being inlines)
|
||||||
|
*/
|
||||||
|
#undef JE_FORCE_SYNC_COMPARE_AND_SWAP_4
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Defined if __sync_add_and_fetch(uint64_t *, uint64_t) and
|
||||||
|
* __sync_sub_and_fetch(uint64_t *, uint64_t) are available, despite
|
||||||
|
* __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 not being defined (which means the
|
||||||
|
* functions are defined in libgcc instead of being inlines)
|
||||||
|
*/
|
||||||
|
#undef JE_FORCE_SYNC_COMPARE_AND_SWAP_8
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Defined if OSSpin*() functions are available, as provided by Darwin, and
|
||||||
|
* documented in the spinlock(3) manual page.
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_OSSPIN
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Defined if _malloc_thread_cleanup() exists. At least in the case of
|
||||||
|
* FreeBSD, pthread_key_create() allocates, which if used during malloc
|
||||||
|
* bootstrapping will cause recursion into the pthreads library. Therefore, if
|
||||||
|
* _malloc_thread_cleanup() exists, use it as the basis for thread cleanup in
|
||||||
|
* malloc_tsd.
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_MALLOC_THREAD_CLEANUP
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Defined if threaded initialization is known to be safe on this platform.
|
||||||
|
* Among other things, it must be possible to initialize a mutex without
|
||||||
|
* triggering allocation in order for threaded allocation to be safe.
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_THREADED_INIT
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Defined if the pthreads implementation defines
|
||||||
|
* _pthread_mutex_init_calloc_cb(), in which case the function is used in order
|
||||||
|
* to avoid recursive allocation during mutex initialization.
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_MUTEX_INIT_CB
|
||||||
|
|
||||||
|
/* Defined if sbrk() is supported. */
|
||||||
|
#undef JEMALLOC_HAVE_SBRK
|
||||||
|
|
||||||
|
/* Non-empty if the tls_model attribute is supported. */
|
||||||
|
#undef JEMALLOC_TLS_MODEL
|
||||||
|
|
||||||
|
/* JEMALLOC_CC_SILENCE enables code that silences unuseful compiler warnings. */
|
||||||
|
#undef JEMALLOC_CC_SILENCE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* JEMALLOC_DEBUG enables assertions and other sanity checks, and disables
|
||||||
|
* inline functions.
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_DEBUG
|
||||||
|
|
||||||
|
/* JEMALLOC_STATS enables statistics calculation. */
|
||||||
|
#undef JEMALLOC_STATS
|
||||||
|
|
||||||
|
/* JEMALLOC_PROF enables allocation profiling. */
|
||||||
|
#undef JEMALLOC_PROF
|
||||||
|
|
||||||
|
/* Use libunwind for profile backtracing if defined. */
|
||||||
|
#undef JEMALLOC_PROF_LIBUNWIND
|
||||||
|
|
||||||
|
/* Use libgcc for profile backtracing if defined. */
|
||||||
|
#undef JEMALLOC_PROF_LIBGCC
|
||||||
|
|
||||||
|
/* Use gcc intrinsics for profile backtracing if defined. */
|
||||||
|
#undef JEMALLOC_PROF_GCC
|
||||||
|
|
||||||
|
/*
|
||||||
|
* JEMALLOC_TCACHE enables a thread-specific caching layer for small objects.
|
||||||
|
* This makes it possible to allocate/deallocate objects without any locking
|
||||||
|
* when the cache is in the steady state.
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_TCACHE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* JEMALLOC_DSS enables use of sbrk(2) to allocate chunks from the data storage
|
||||||
|
* segment (DSS).
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_DSS
|
||||||
|
|
||||||
|
/* Support memory filling (junk/zero/quarantine/redzone). */
|
||||||
|
#undef JEMALLOC_FILL
|
||||||
|
|
||||||
|
/* Support utrace(2)-based tracing. */
|
||||||
|
#undef JEMALLOC_UTRACE
|
||||||
|
|
||||||
|
/* Support Valgrind. */
|
||||||
|
#undef JEMALLOC_VALGRIND
|
||||||
|
|
||||||
|
/* Support optional abort() on OOM. */
|
||||||
|
#undef JEMALLOC_XMALLOC
|
||||||
|
|
||||||
|
/* Support lazy locking (avoid locking unless a second thread is launched). */
|
||||||
|
#undef JEMALLOC_LAZY_LOCK
|
||||||
|
|
||||||
|
/* One page is 2^STATIC_PAGE_SHIFT bytes. */
|
||||||
|
#undef STATIC_PAGE_SHIFT
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If defined, use munmap() to unmap freed chunks, rather than storing them for
|
||||||
|
* later reuse. This is disabled by default on Linux because common sequences
|
||||||
|
* of mmap()/munmap() calls will cause virtual memory map holes.
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_MUNMAP
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If defined, use mremap(...MREMAP_FIXED...) for huge realloc(). This is
|
||||||
|
* disabled by default because it is Linux-specific and it will cause virtual
|
||||||
|
* memory map holes, much like munmap(2) does.
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_MREMAP
|
||||||
|
|
||||||
|
/* TLS is used to map arenas and magazine caches to threads. */
|
||||||
|
#undef JEMALLOC_TLS
|
||||||
|
|
||||||
|
/*
|
||||||
|
* JEMALLOC_IVSALLOC enables ivsalloc(), which verifies that pointers reside
|
||||||
|
* within jemalloc-owned chunks before dereferencing them.
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_IVSALLOC
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Define overrides for non-standard allocator-related functions if they
|
||||||
|
* are present on the system.
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_OVERRIDE_MEMALIGN
|
||||||
|
#undef JEMALLOC_OVERRIDE_VALLOC
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Darwin (OS X) uses zones to work around Mach-O symbol override shortcomings.
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_ZONE
|
||||||
|
#undef JEMALLOC_ZONE_VERSION
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Methods for purging unused pages differ between operating systems.
|
||||||
|
*
|
||||||
|
* madvise(..., MADV_DONTNEED) : On Linux, this immediately discards pages,
|
||||||
|
* such that new pages will be demand-zeroed if
|
||||||
|
* the address region is later touched.
|
||||||
|
* madvise(..., MADV_FREE) : On FreeBSD and Darwin, this marks pages as being
|
||||||
|
* unused, such that they will be discarded rather
|
||||||
|
* than swapped out.
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_PURGE_MADVISE_DONTNEED
|
||||||
|
#undef JEMALLOC_PURGE_MADVISE_FREE
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Define if operating system has alloca.h header.
|
||||||
|
*/
|
||||||
|
#undef JEMALLOC_HAS_ALLOCA_H
|
||||||
|
|
||||||
|
/* sizeof(void *) == 2^LG_SIZEOF_PTR. */
|
||||||
|
#undef LG_SIZEOF_PTR
|
||||||
|
|
||||||
|
/* sizeof(int) == 2^LG_SIZEOF_INT. */
|
||||||
|
#undef LG_SIZEOF_INT
|
||||||
|
|
||||||
|
/* sizeof(long) == 2^LG_SIZEOF_LONG. */
|
||||||
|
#undef LG_SIZEOF_LONG
|
||||||
|
|
||||||
|
/* sizeof(intmax_t) == 2^LG_SIZEOF_INTMAX_T. */
|
||||||
|
#undef LG_SIZEOF_INTMAX_T
|
@ -1,392 +0,0 @@
|
|||||||
#define a0calloc JEMALLOC_N(a0calloc)
|
|
||||||
#define a0free JEMALLOC_N(a0free)
|
|
||||||
#define a0malloc JEMALLOC_N(a0malloc)
|
|
||||||
#define arena_alloc_junk_small JEMALLOC_N(arena_alloc_junk_small)
|
|
||||||
#define arena_bin_index JEMALLOC_N(arena_bin_index)
|
|
||||||
#define arena_bin_info JEMALLOC_N(arena_bin_info)
|
|
||||||
#define arena_boot JEMALLOC_N(arena_boot)
|
|
||||||
#define arena_dalloc JEMALLOC_N(arena_dalloc)
|
|
||||||
#define arena_dalloc_bin JEMALLOC_N(arena_dalloc_bin)
|
|
||||||
#define arena_dalloc_bin_locked JEMALLOC_N(arena_dalloc_bin_locked)
|
|
||||||
#define arena_dalloc_junk_small JEMALLOC_N(arena_dalloc_junk_small)
|
|
||||||
#define arena_dalloc_large JEMALLOC_N(arena_dalloc_large)
|
|
||||||
#define arena_dalloc_large_locked JEMALLOC_N(arena_dalloc_large_locked)
|
|
||||||
#define arena_dalloc_small JEMALLOC_N(arena_dalloc_small)
|
|
||||||
#define arena_dss_prec_get JEMALLOC_N(arena_dss_prec_get)
|
|
||||||
#define arena_dss_prec_set JEMALLOC_N(arena_dss_prec_set)
|
|
||||||
#define arena_malloc JEMALLOC_N(arena_malloc)
|
|
||||||
#define arena_malloc_large JEMALLOC_N(arena_malloc_large)
|
|
||||||
#define arena_malloc_small JEMALLOC_N(arena_malloc_small)
|
|
||||||
#define arena_mapbits_allocated_get JEMALLOC_N(arena_mapbits_allocated_get)
|
|
||||||
#define arena_mapbits_binind_get JEMALLOC_N(arena_mapbits_binind_get)
|
|
||||||
#define arena_mapbits_dirty_get JEMALLOC_N(arena_mapbits_dirty_get)
|
|
||||||
#define arena_mapbits_get JEMALLOC_N(arena_mapbits_get)
|
|
||||||
#define arena_mapbits_large_binind_set JEMALLOC_N(arena_mapbits_large_binind_set)
|
|
||||||
#define arena_mapbits_large_get JEMALLOC_N(arena_mapbits_large_get)
|
|
||||||
#define arena_mapbits_large_set JEMALLOC_N(arena_mapbits_large_set)
|
|
||||||
#define arena_mapbits_large_size_get JEMALLOC_N(arena_mapbits_large_size_get)
|
|
||||||
#define arena_mapbits_small_runind_get JEMALLOC_N(arena_mapbits_small_runind_get)
|
|
||||||
#define arena_mapbits_small_set JEMALLOC_N(arena_mapbits_small_set)
|
|
||||||
#define arena_mapbits_unallocated_set JEMALLOC_N(arena_mapbits_unallocated_set)
|
|
||||||
#define arena_mapbits_unallocated_size_get JEMALLOC_N(arena_mapbits_unallocated_size_get)
|
|
||||||
#define arena_mapbits_unallocated_size_set JEMALLOC_N(arena_mapbits_unallocated_size_set)
|
|
||||||
#define arena_mapbits_unzeroed_get JEMALLOC_N(arena_mapbits_unzeroed_get)
|
|
||||||
#define arena_mapbits_unzeroed_set JEMALLOC_N(arena_mapbits_unzeroed_set)
|
|
||||||
#define arena_mapbitsp_get JEMALLOC_N(arena_mapbitsp_get)
|
|
||||||
#define arena_mapbitsp_read JEMALLOC_N(arena_mapbitsp_read)
|
|
||||||
#define arena_mapbitsp_write JEMALLOC_N(arena_mapbitsp_write)
|
|
||||||
#define arena_mapp_get JEMALLOC_N(arena_mapp_get)
|
|
||||||
#define arena_maxclass JEMALLOC_N(arena_maxclass)
|
|
||||||
#define arena_new JEMALLOC_N(arena_new)
|
|
||||||
#define arena_palloc JEMALLOC_N(arena_palloc)
|
|
||||||
#define arena_postfork_child JEMALLOC_N(arena_postfork_child)
|
|
||||||
#define arena_postfork_parent JEMALLOC_N(arena_postfork_parent)
|
|
||||||
#define arena_prefork JEMALLOC_N(arena_prefork)
|
|
||||||
#define arena_prof_accum JEMALLOC_N(arena_prof_accum)
|
|
||||||
#define arena_prof_accum_impl JEMALLOC_N(arena_prof_accum_impl)
|
|
||||||
#define arena_prof_accum_locked JEMALLOC_N(arena_prof_accum_locked)
|
|
||||||
#define arena_prof_ctx_get JEMALLOC_N(arena_prof_ctx_get)
|
|
||||||
#define arena_prof_ctx_set JEMALLOC_N(arena_prof_ctx_set)
|
|
||||||
#define arena_prof_promoted JEMALLOC_N(arena_prof_promoted)
|
|
||||||
#define arena_ptr_small_binind_get JEMALLOC_N(arena_ptr_small_binind_get)
|
|
||||||
#define arena_purge_all JEMALLOC_N(arena_purge_all)
|
|
||||||
#define arena_ralloc JEMALLOC_N(arena_ralloc)
|
|
||||||
#define arena_ralloc_no_move JEMALLOC_N(arena_ralloc_no_move)
|
|
||||||
#define arena_run_regind JEMALLOC_N(arena_run_regind)
|
|
||||||
#define arena_salloc JEMALLOC_N(arena_salloc)
|
|
||||||
#define arena_stats_merge JEMALLOC_N(arena_stats_merge)
|
|
||||||
#define arena_tcache_fill_small JEMALLOC_N(arena_tcache_fill_small)
|
|
||||||
#define arenas JEMALLOC_N(arenas)
|
|
||||||
#define arenas_booted JEMALLOC_N(arenas_booted)
|
|
||||||
#define arenas_cleanup JEMALLOC_N(arenas_cleanup)
|
|
||||||
#define arenas_extend JEMALLOC_N(arenas_extend)
|
|
||||||
#define arenas_initialized JEMALLOC_N(arenas_initialized)
|
|
||||||
#define arenas_lock JEMALLOC_N(arenas_lock)
|
|
||||||
#define arenas_tls JEMALLOC_N(arenas_tls)
|
|
||||||
#define arenas_tsd JEMALLOC_N(arenas_tsd)
|
|
||||||
#define arenas_tsd_boot JEMALLOC_N(arenas_tsd_boot)
|
|
||||||
#define arenas_tsd_cleanup_wrapper JEMALLOC_N(arenas_tsd_cleanup_wrapper)
|
|
||||||
#define arenas_tsd_get JEMALLOC_N(arenas_tsd_get)
|
|
||||||
#define arenas_tsd_get_wrapper JEMALLOC_N(arenas_tsd_get_wrapper)
|
|
||||||
#define arenas_tsd_set JEMALLOC_N(arenas_tsd_set)
|
|
||||||
#define atomic_add_u JEMALLOC_N(atomic_add_u)
|
|
||||||
#define atomic_add_uint32 JEMALLOC_N(atomic_add_uint32)
|
|
||||||
#define atomic_add_uint64 JEMALLOC_N(atomic_add_uint64)
|
|
||||||
#define atomic_add_z JEMALLOC_N(atomic_add_z)
|
|
||||||
#define atomic_sub_u JEMALLOC_N(atomic_sub_u)
|
|
||||||
#define atomic_sub_uint32 JEMALLOC_N(atomic_sub_uint32)
|
|
||||||
#define atomic_sub_uint64 JEMALLOC_N(atomic_sub_uint64)
|
|
||||||
#define atomic_sub_z JEMALLOC_N(atomic_sub_z)
|
|
||||||
#define base_alloc JEMALLOC_N(base_alloc)
|
|
||||||
#define base_boot JEMALLOC_N(base_boot)
|
|
||||||
#define base_calloc JEMALLOC_N(base_calloc)
|
|
||||||
#define base_node_alloc JEMALLOC_N(base_node_alloc)
|
|
||||||
#define base_node_dealloc JEMALLOC_N(base_node_dealloc)
|
|
||||||
#define base_postfork_child JEMALLOC_N(base_postfork_child)
|
|
||||||
#define base_postfork_parent JEMALLOC_N(base_postfork_parent)
|
|
||||||
#define base_prefork JEMALLOC_N(base_prefork)
|
|
||||||
#define bitmap_full JEMALLOC_N(bitmap_full)
|
|
||||||
#define bitmap_get JEMALLOC_N(bitmap_get)
|
|
||||||
#define bitmap_info_init JEMALLOC_N(bitmap_info_init)
|
|
||||||
#define bitmap_info_ngroups JEMALLOC_N(bitmap_info_ngroups)
|
|
||||||
#define bitmap_init JEMALLOC_N(bitmap_init)
|
|
||||||
#define bitmap_set JEMALLOC_N(bitmap_set)
|
|
||||||
#define bitmap_sfu JEMALLOC_N(bitmap_sfu)
|
|
||||||
#define bitmap_size JEMALLOC_N(bitmap_size)
|
|
||||||
#define bitmap_unset JEMALLOC_N(bitmap_unset)
|
|
||||||
#define bt_init JEMALLOC_N(bt_init)
|
|
||||||
#define buferror JEMALLOC_N(buferror)
|
|
||||||
#define choose_arena JEMALLOC_N(choose_arena)
|
|
||||||
#define choose_arena_hard JEMALLOC_N(choose_arena_hard)
|
|
||||||
#define chunk_alloc JEMALLOC_N(chunk_alloc)
|
|
||||||
#define chunk_alloc_dss JEMALLOC_N(chunk_alloc_dss)
|
|
||||||
#define chunk_alloc_mmap JEMALLOC_N(chunk_alloc_mmap)
|
|
||||||
#define chunk_boot JEMALLOC_N(chunk_boot)
|
|
||||||
#define chunk_dealloc JEMALLOC_N(chunk_dealloc)
|
|
||||||
#define chunk_dealloc_mmap JEMALLOC_N(chunk_dealloc_mmap)
|
|
||||||
#define chunk_dss_boot JEMALLOC_N(chunk_dss_boot)
|
|
||||||
#define chunk_dss_postfork_child JEMALLOC_N(chunk_dss_postfork_child)
|
|
||||||
#define chunk_dss_postfork_parent JEMALLOC_N(chunk_dss_postfork_parent)
|
|
||||||
#define chunk_dss_prec_get JEMALLOC_N(chunk_dss_prec_get)
|
|
||||||
#define chunk_dss_prec_set JEMALLOC_N(chunk_dss_prec_set)
|
|
||||||
#define chunk_dss_prefork JEMALLOC_N(chunk_dss_prefork)
|
|
||||||
#define chunk_in_dss JEMALLOC_N(chunk_in_dss)
|
|
||||||
#define chunk_npages JEMALLOC_N(chunk_npages)
|
|
||||||
#define chunk_postfork_child JEMALLOC_N(chunk_postfork_child)
|
|
||||||
#define chunk_postfork_parent JEMALLOC_N(chunk_postfork_parent)
|
|
||||||
#define chunk_prefork JEMALLOC_N(chunk_prefork)
|
|
||||||
#define chunk_unmap JEMALLOC_N(chunk_unmap)
|
|
||||||
#define chunks_mtx JEMALLOC_N(chunks_mtx)
|
|
||||||
#define chunks_rtree JEMALLOC_N(chunks_rtree)
|
|
||||||
#define chunksize JEMALLOC_N(chunksize)
|
|
||||||
#define chunksize_mask JEMALLOC_N(chunksize_mask)
|
|
||||||
#define ckh_bucket_search JEMALLOC_N(ckh_bucket_search)
|
|
||||||
#define ckh_count JEMALLOC_N(ckh_count)
|
|
||||||
#define ckh_delete JEMALLOC_N(ckh_delete)
|
|
||||||
#define ckh_evict_reloc_insert JEMALLOC_N(ckh_evict_reloc_insert)
|
|
||||||
#define ckh_insert JEMALLOC_N(ckh_insert)
|
|
||||||
#define ckh_isearch JEMALLOC_N(ckh_isearch)
|
|
||||||
#define ckh_iter JEMALLOC_N(ckh_iter)
|
|
||||||
#define ckh_new JEMALLOC_N(ckh_new)
|
|
||||||
#define ckh_pointer_hash JEMALLOC_N(ckh_pointer_hash)
|
|
||||||
#define ckh_pointer_keycomp JEMALLOC_N(ckh_pointer_keycomp)
|
|
||||||
#define ckh_rebuild JEMALLOC_N(ckh_rebuild)
|
|
||||||
#define ckh_remove JEMALLOC_N(ckh_remove)
|
|
||||||
#define ckh_search JEMALLOC_N(ckh_search)
|
|
||||||
#define ckh_string_hash JEMALLOC_N(ckh_string_hash)
|
|
||||||
#define ckh_string_keycomp JEMALLOC_N(ckh_string_keycomp)
|
|
||||||
#define ckh_try_bucket_insert JEMALLOC_N(ckh_try_bucket_insert)
|
|
||||||
#define ckh_try_insert JEMALLOC_N(ckh_try_insert)
|
|
||||||
#define ctl_boot JEMALLOC_N(ctl_boot)
|
|
||||||
#define ctl_bymib JEMALLOC_N(ctl_bymib)
|
|
||||||
#define ctl_byname JEMALLOC_N(ctl_byname)
|
|
||||||
#define ctl_nametomib JEMALLOC_N(ctl_nametomib)
|
|
||||||
#define ctl_postfork_child JEMALLOC_N(ctl_postfork_child)
|
|
||||||
#define ctl_postfork_parent JEMALLOC_N(ctl_postfork_parent)
|
|
||||||
#define ctl_prefork JEMALLOC_N(ctl_prefork)
|
|
||||||
#define dss_prec_names JEMALLOC_N(dss_prec_names)
|
|
||||||
#define extent_tree_ad_first JEMALLOC_N(extent_tree_ad_first)
|
|
||||||
#define extent_tree_ad_insert JEMALLOC_N(extent_tree_ad_insert)
|
|
||||||
#define extent_tree_ad_iter JEMALLOC_N(extent_tree_ad_iter)
|
|
||||||
#define extent_tree_ad_iter_recurse JEMALLOC_N(extent_tree_ad_iter_recurse)
|
|
||||||
#define extent_tree_ad_iter_start JEMALLOC_N(extent_tree_ad_iter_start)
|
|
||||||
#define extent_tree_ad_last JEMALLOC_N(extent_tree_ad_last)
|
|
||||||
#define extent_tree_ad_new JEMALLOC_N(extent_tree_ad_new)
|
|
||||||
#define extent_tree_ad_next JEMALLOC_N(extent_tree_ad_next)
|
|
||||||
#define extent_tree_ad_nsearch JEMALLOC_N(extent_tree_ad_nsearch)
|
|
||||||
#define extent_tree_ad_prev JEMALLOC_N(extent_tree_ad_prev)
|
|
||||||
#define extent_tree_ad_psearch JEMALLOC_N(extent_tree_ad_psearch)
|
|
||||||
#define extent_tree_ad_remove JEMALLOC_N(extent_tree_ad_remove)
|
|
||||||
#define extent_tree_ad_reverse_iter JEMALLOC_N(extent_tree_ad_reverse_iter)
|
|
||||||
#define extent_tree_ad_reverse_iter_recurse JEMALLOC_N(extent_tree_ad_reverse_iter_recurse)
|
|
||||||
#define extent_tree_ad_reverse_iter_start JEMALLOC_N(extent_tree_ad_reverse_iter_start)
|
|
||||||
#define extent_tree_ad_search JEMALLOC_N(extent_tree_ad_search)
|
|
||||||
#define extent_tree_szad_first JEMALLOC_N(extent_tree_szad_first)
|
|
||||||
#define extent_tree_szad_insert JEMALLOC_N(extent_tree_szad_insert)
|
|
||||||
#define extent_tree_szad_iter JEMALLOC_N(extent_tree_szad_iter)
|
|
||||||
#define extent_tree_szad_iter_recurse JEMALLOC_N(extent_tree_szad_iter_recurse)
|
|
||||||
#define extent_tree_szad_iter_start JEMALLOC_N(extent_tree_szad_iter_start)
|
|
||||||
#define extent_tree_szad_last JEMALLOC_N(extent_tree_szad_last)
|
|
||||||
#define extent_tree_szad_new JEMALLOC_N(extent_tree_szad_new)
|
|
||||||
#define extent_tree_szad_next JEMALLOC_N(extent_tree_szad_next)
|
|
||||||
#define extent_tree_szad_nsearch JEMALLOC_N(extent_tree_szad_nsearch)
|
|
||||||
#define extent_tree_szad_prev JEMALLOC_N(extent_tree_szad_prev)
|
|
||||||
#define extent_tree_szad_psearch JEMALLOC_N(extent_tree_szad_psearch)
|
|
||||||
#define extent_tree_szad_remove JEMALLOC_N(extent_tree_szad_remove)
|
|
||||||
#define extent_tree_szad_reverse_iter JEMALLOC_N(extent_tree_szad_reverse_iter)
|
|
||||||
#define extent_tree_szad_reverse_iter_recurse JEMALLOC_N(extent_tree_szad_reverse_iter_recurse)
|
|
||||||
#define extent_tree_szad_reverse_iter_start JEMALLOC_N(extent_tree_szad_reverse_iter_start)
|
|
||||||
#define extent_tree_szad_search JEMALLOC_N(extent_tree_szad_search)
|
|
||||||
#define get_errno JEMALLOC_N(get_errno)
|
|
||||||
#define hash JEMALLOC_N(hash)
|
|
||||||
#define hash_fmix_32 JEMALLOC_N(hash_fmix_32)
|
|
||||||
#define hash_fmix_64 JEMALLOC_N(hash_fmix_64)
|
|
||||||
#define hash_get_block_32 JEMALLOC_N(hash_get_block_32)
|
|
||||||
#define hash_get_block_64 JEMALLOC_N(hash_get_block_64)
|
|
||||||
#define hash_rotl_32 JEMALLOC_N(hash_rotl_32)
|
|
||||||
#define hash_rotl_64 JEMALLOC_N(hash_rotl_64)
|
|
||||||
#define hash_x64_128 JEMALLOC_N(hash_x64_128)
|
|
||||||
#define hash_x86_128 JEMALLOC_N(hash_x86_128)
|
|
||||||
#define hash_x86_32 JEMALLOC_N(hash_x86_32)
|
|
||||||
#define huge_allocated JEMALLOC_N(huge_allocated)
|
|
||||||
#define huge_boot JEMALLOC_N(huge_boot)
|
|
||||||
#define huge_dalloc JEMALLOC_N(huge_dalloc)
|
|
||||||
#define huge_malloc JEMALLOC_N(huge_malloc)
|
|
||||||
#define huge_mtx JEMALLOC_N(huge_mtx)
|
|
||||||
#define huge_ndalloc JEMALLOC_N(huge_ndalloc)
|
|
||||||
#define huge_nmalloc JEMALLOC_N(huge_nmalloc)
|
|
||||||
#define huge_palloc JEMALLOC_N(huge_palloc)
|
|
||||||
#define huge_postfork_child JEMALLOC_N(huge_postfork_child)
|
|
||||||
#define huge_postfork_parent JEMALLOC_N(huge_postfork_parent)
|
|
||||||
#define huge_prefork JEMALLOC_N(huge_prefork)
|
|
||||||
#define huge_prof_ctx_get JEMALLOC_N(huge_prof_ctx_get)
|
|
||||||
#define huge_prof_ctx_set JEMALLOC_N(huge_prof_ctx_set)
|
|
||||||
#define huge_ralloc JEMALLOC_N(huge_ralloc)
|
|
||||||
#define huge_ralloc_no_move JEMALLOC_N(huge_ralloc_no_move)
|
|
||||||
#define huge_salloc JEMALLOC_N(huge_salloc)
|
|
||||||
#define iallocm JEMALLOC_N(iallocm)
|
|
||||||
#define icalloc JEMALLOC_N(icalloc)
|
|
||||||
#define icallocx JEMALLOC_N(icallocx)
|
|
||||||
#define idalloc JEMALLOC_N(idalloc)
|
|
||||||
#define idallocx JEMALLOC_N(idallocx)
|
|
||||||
#define imalloc JEMALLOC_N(imalloc)
|
|
||||||
#define imallocx JEMALLOC_N(imallocx)
|
|
||||||
#define ipalloc JEMALLOC_N(ipalloc)
|
|
||||||
#define ipallocx JEMALLOC_N(ipallocx)
|
|
||||||
#define iqalloc JEMALLOC_N(iqalloc)
|
|
||||||
#define iqallocx JEMALLOC_N(iqallocx)
|
|
||||||
#define iralloc JEMALLOC_N(iralloc)
|
|
||||||
#define irallocx JEMALLOC_N(irallocx)
|
|
||||||
#define isalloc JEMALLOC_N(isalloc)
|
|
||||||
#define isthreaded JEMALLOC_N(isthreaded)
|
|
||||||
#define ivsalloc JEMALLOC_N(ivsalloc)
|
|
||||||
#define jemalloc_postfork_child JEMALLOC_N(jemalloc_postfork_child)
|
|
||||||
#define jemalloc_postfork_parent JEMALLOC_N(jemalloc_postfork_parent)
|
|
||||||
#define jemalloc_prefork JEMALLOC_N(jemalloc_prefork)
|
|
||||||
#define malloc_cprintf JEMALLOC_N(malloc_cprintf)
|
|
||||||
#define malloc_mutex_init JEMALLOC_N(malloc_mutex_init)
|
|
||||||
#define malloc_mutex_lock JEMALLOC_N(malloc_mutex_lock)
|
|
||||||
#define malloc_mutex_postfork_child JEMALLOC_N(malloc_mutex_postfork_child)
|
|
||||||
#define malloc_mutex_postfork_parent JEMALLOC_N(malloc_mutex_postfork_parent)
|
|
||||||
#define malloc_mutex_prefork JEMALLOC_N(malloc_mutex_prefork)
|
|
||||||
#define malloc_mutex_unlock JEMALLOC_N(malloc_mutex_unlock)
|
|
||||||
#define malloc_printf JEMALLOC_N(malloc_printf)
|
|
||||||
#define malloc_snprintf JEMALLOC_N(malloc_snprintf)
|
|
||||||
#define malloc_strtoumax JEMALLOC_N(malloc_strtoumax)
|
|
||||||
#define malloc_tsd_boot JEMALLOC_N(malloc_tsd_boot)
|
|
||||||
#define malloc_tsd_cleanup_register JEMALLOC_N(malloc_tsd_cleanup_register)
|
|
||||||
#define malloc_tsd_dalloc JEMALLOC_N(malloc_tsd_dalloc)
|
|
||||||
#define malloc_tsd_malloc JEMALLOC_N(malloc_tsd_malloc)
|
|
||||||
#define malloc_tsd_no_cleanup JEMALLOC_N(malloc_tsd_no_cleanup)
|
|
||||||
#define malloc_vcprintf JEMALLOC_N(malloc_vcprintf)
|
|
||||||
#define malloc_vsnprintf JEMALLOC_N(malloc_vsnprintf)
|
|
||||||
#define malloc_write JEMALLOC_N(malloc_write)
|
|
||||||
#define map_bias JEMALLOC_N(map_bias)
|
|
||||||
#define mb_write JEMALLOC_N(mb_write)
|
|
||||||
#define mutex_boot JEMALLOC_N(mutex_boot)
|
|
||||||
#define narenas_auto JEMALLOC_N(narenas_auto)
|
|
||||||
#define narenas_total JEMALLOC_N(narenas_total)
|
|
||||||
#define narenas_total_get JEMALLOC_N(narenas_total_get)
|
|
||||||
#define ncpus JEMALLOC_N(ncpus)
|
|
||||||
#define nhbins JEMALLOC_N(nhbins)
|
|
||||||
#define opt_abort JEMALLOC_N(opt_abort)
|
|
||||||
#define opt_junk JEMALLOC_N(opt_junk)
|
|
||||||
#define opt_lg_chunk JEMALLOC_N(opt_lg_chunk)
|
|
||||||
#define opt_lg_dirty_mult JEMALLOC_N(opt_lg_dirty_mult)
|
|
||||||
#define opt_lg_prof_interval JEMALLOC_N(opt_lg_prof_interval)
|
|
||||||
#define opt_lg_prof_sample JEMALLOC_N(opt_lg_prof_sample)
|
|
||||||
#define opt_lg_tcache_max JEMALLOC_N(opt_lg_tcache_max)
|
|
||||||
#define opt_narenas JEMALLOC_N(opt_narenas)
|
|
||||||
#define opt_prof JEMALLOC_N(opt_prof)
|
|
||||||
#define opt_prof_accum JEMALLOC_N(opt_prof_accum)
|
|
||||||
#define opt_prof_active JEMALLOC_N(opt_prof_active)
|
|
||||||
#define opt_prof_final JEMALLOC_N(opt_prof_final)
|
|
||||||
#define opt_prof_gdump JEMALLOC_N(opt_prof_gdump)
|
|
||||||
#define opt_prof_leak JEMALLOC_N(opt_prof_leak)
|
|
||||||
#define opt_prof_prefix JEMALLOC_N(opt_prof_prefix)
|
|
||||||
#define opt_quarantine JEMALLOC_N(opt_quarantine)
|
|
||||||
#define opt_redzone JEMALLOC_N(opt_redzone)
|
|
||||||
#define opt_stats_print JEMALLOC_N(opt_stats_print)
|
|
||||||
#define opt_tcache JEMALLOC_N(opt_tcache)
|
|
||||||
#define opt_utrace JEMALLOC_N(opt_utrace)
|
|
||||||
#define opt_valgrind JEMALLOC_N(opt_valgrind)
|
|
||||||
#define opt_xmalloc JEMALLOC_N(opt_xmalloc)
|
|
||||||
#define opt_zero JEMALLOC_N(opt_zero)
|
|
||||||
#define p2rz JEMALLOC_N(p2rz)
|
|
||||||
#define pages_purge JEMALLOC_N(pages_purge)
|
|
||||||
#define pow2_ceil JEMALLOC_N(pow2_ceil)
|
|
||||||
#define prof_backtrace JEMALLOC_N(prof_backtrace)
|
|
||||||
#define prof_boot0 JEMALLOC_N(prof_boot0)
|
|
||||||
#define prof_boot1 JEMALLOC_N(prof_boot1)
|
|
||||||
#define prof_boot2 JEMALLOC_N(prof_boot2)
|
|
||||||
#define prof_ctx_get JEMALLOC_N(prof_ctx_get)
|
|
||||||
#define prof_ctx_set JEMALLOC_N(prof_ctx_set)
|
|
||||||
#define prof_free JEMALLOC_N(prof_free)
|
|
||||||
#define prof_gdump JEMALLOC_N(prof_gdump)
|
|
||||||
#define prof_idump JEMALLOC_N(prof_idump)
|
|
||||||
#define prof_interval JEMALLOC_N(prof_interval)
|
|
||||||
#define prof_lookup JEMALLOC_N(prof_lookup)
|
|
||||||
#define prof_malloc JEMALLOC_N(prof_malloc)
|
|
||||||
#define prof_mdump JEMALLOC_N(prof_mdump)
|
|
||||||
#define prof_postfork_child JEMALLOC_N(prof_postfork_child)
|
|
||||||
#define prof_postfork_parent JEMALLOC_N(prof_postfork_parent)
|
|
||||||
#define prof_prefork JEMALLOC_N(prof_prefork)
|
|
||||||
#define prof_promote JEMALLOC_N(prof_promote)
|
|
||||||
#define prof_realloc JEMALLOC_N(prof_realloc)
|
|
||||||
#define prof_sample_accum_update JEMALLOC_N(prof_sample_accum_update)
|
|
||||||
#define prof_sample_threshold_update JEMALLOC_N(prof_sample_threshold_update)
|
|
||||||
#define prof_tdata_booted JEMALLOC_N(prof_tdata_booted)
|
|
||||||
#define prof_tdata_cleanup JEMALLOC_N(prof_tdata_cleanup)
|
|
||||||
#define prof_tdata_get JEMALLOC_N(prof_tdata_get)
|
|
||||||
#define prof_tdata_init JEMALLOC_N(prof_tdata_init)
|
|
||||||
#define prof_tdata_initialized JEMALLOC_N(prof_tdata_initialized)
|
|
||||||
#define prof_tdata_tls JEMALLOC_N(prof_tdata_tls)
|
|
||||||
#define prof_tdata_tsd JEMALLOC_N(prof_tdata_tsd)
|
|
||||||
#define prof_tdata_tsd_boot JEMALLOC_N(prof_tdata_tsd_boot)
|
|
||||||
#define prof_tdata_tsd_cleanup_wrapper JEMALLOC_N(prof_tdata_tsd_cleanup_wrapper)
|
|
||||||
#define prof_tdata_tsd_get JEMALLOC_N(prof_tdata_tsd_get)
|
|
||||||
#define prof_tdata_tsd_get_wrapper JEMALLOC_N(prof_tdata_tsd_get_wrapper)
|
|
||||||
#define prof_tdata_tsd_set JEMALLOC_N(prof_tdata_tsd_set)
|
|
||||||
#define quarantine JEMALLOC_N(quarantine)
|
|
||||||
#define quarantine_alloc_hook JEMALLOC_N(quarantine_alloc_hook)
|
|
||||||
#define quarantine_boot JEMALLOC_N(quarantine_boot)
|
|
||||||
#define quarantine_booted JEMALLOC_N(quarantine_booted)
|
|
||||||
#define quarantine_cleanup JEMALLOC_N(quarantine_cleanup)
|
|
||||||
#define quarantine_init JEMALLOC_N(quarantine_init)
|
|
||||||
#define quarantine_tls JEMALLOC_N(quarantine_tls)
|
|
||||||
#define quarantine_tsd JEMALLOC_N(quarantine_tsd)
|
|
||||||
#define quarantine_tsd_boot JEMALLOC_N(quarantine_tsd_boot)
|
|
||||||
#define quarantine_tsd_cleanup_wrapper JEMALLOC_N(quarantine_tsd_cleanup_wrapper)
|
|
||||||
#define quarantine_tsd_get JEMALLOC_N(quarantine_tsd_get)
|
|
||||||
#define quarantine_tsd_get_wrapper JEMALLOC_N(quarantine_tsd_get_wrapper)
|
|
||||||
#define quarantine_tsd_set JEMALLOC_N(quarantine_tsd_set)
|
|
||||||
#define register_zone JEMALLOC_N(register_zone)
|
|
||||||
#define rtree_get JEMALLOC_N(rtree_get)
|
|
||||||
#define rtree_get_locked JEMALLOC_N(rtree_get_locked)
|
|
||||||
#define rtree_new JEMALLOC_N(rtree_new)
|
|
||||||
#define rtree_postfork_child JEMALLOC_N(rtree_postfork_child)
|
|
||||||
#define rtree_postfork_parent JEMALLOC_N(rtree_postfork_parent)
|
|
||||||
#define rtree_prefork JEMALLOC_N(rtree_prefork)
|
|
||||||
#define rtree_set JEMALLOC_N(rtree_set)
|
|
||||||
#define s2u JEMALLOC_N(s2u)
|
|
||||||
#define sa2u JEMALLOC_N(sa2u)
|
|
||||||
#define set_errno JEMALLOC_N(set_errno)
|
|
||||||
#define stats_cactive JEMALLOC_N(stats_cactive)
|
|
||||||
#define stats_cactive_add JEMALLOC_N(stats_cactive_add)
|
|
||||||
#define stats_cactive_get JEMALLOC_N(stats_cactive_get)
|
|
||||||
#define stats_cactive_sub JEMALLOC_N(stats_cactive_sub)
|
|
||||||
#define stats_chunks JEMALLOC_N(stats_chunks)
|
|
||||||
#define stats_print JEMALLOC_N(stats_print)
|
|
||||||
#define tcache_alloc_easy JEMALLOC_N(tcache_alloc_easy)
|
|
||||||
#define tcache_alloc_large JEMALLOC_N(tcache_alloc_large)
|
|
||||||
#define tcache_alloc_small JEMALLOC_N(tcache_alloc_small)
|
|
||||||
#define tcache_alloc_small_hard JEMALLOC_N(tcache_alloc_small_hard)
|
|
||||||
#define tcache_arena_associate JEMALLOC_N(tcache_arena_associate)
|
|
||||||
#define tcache_arena_dissociate JEMALLOC_N(tcache_arena_dissociate)
|
|
||||||
#define tcache_bin_flush_large JEMALLOC_N(tcache_bin_flush_large)
|
|
||||||
#define tcache_bin_flush_small JEMALLOC_N(tcache_bin_flush_small)
|
|
||||||
#define tcache_bin_info JEMALLOC_N(tcache_bin_info)
|
|
||||||
#define tcache_boot0 JEMALLOC_N(tcache_boot0)
|
|
||||||
#define tcache_boot1 JEMALLOC_N(tcache_boot1)
|
|
||||||
#define tcache_booted JEMALLOC_N(tcache_booted)
|
|
||||||
#define tcache_create JEMALLOC_N(tcache_create)
|
|
||||||
#define tcache_dalloc_large JEMALLOC_N(tcache_dalloc_large)
|
|
||||||
#define tcache_dalloc_small JEMALLOC_N(tcache_dalloc_small)
|
|
||||||
#define tcache_destroy JEMALLOC_N(tcache_destroy)
|
|
||||||
#define tcache_enabled_booted JEMALLOC_N(tcache_enabled_booted)
|
|
||||||
#define tcache_enabled_get JEMALLOC_N(tcache_enabled_get)
|
|
||||||
#define tcache_enabled_initialized JEMALLOC_N(tcache_enabled_initialized)
|
|
||||||
#define tcache_enabled_set JEMALLOC_N(tcache_enabled_set)
|
|
||||||
#define tcache_enabled_tls JEMALLOC_N(tcache_enabled_tls)
|
|
||||||
#define tcache_enabled_tsd JEMALLOC_N(tcache_enabled_tsd)
|
|
||||||
#define tcache_enabled_tsd_boot JEMALLOC_N(tcache_enabled_tsd_boot)
|
|
||||||
#define tcache_enabled_tsd_cleanup_wrapper JEMALLOC_N(tcache_enabled_tsd_cleanup_wrapper)
|
|
||||||
#define tcache_enabled_tsd_get JEMALLOC_N(tcache_enabled_tsd_get)
|
|
||||||
#define tcache_enabled_tsd_get_wrapper JEMALLOC_N(tcache_enabled_tsd_get_wrapper)
|
|
||||||
#define tcache_enabled_tsd_set JEMALLOC_N(tcache_enabled_tsd_set)
|
|
||||||
#define tcache_event JEMALLOC_N(tcache_event)
|
|
||||||
#define tcache_event_hard JEMALLOC_N(tcache_event_hard)
|
|
||||||
#define tcache_flush JEMALLOC_N(tcache_flush)
|
|
||||||
#define tcache_get JEMALLOC_N(tcache_get)
|
|
||||||
#define tcache_initialized JEMALLOC_N(tcache_initialized)
|
|
||||||
#define tcache_maxclass JEMALLOC_N(tcache_maxclass)
|
|
||||||
#define tcache_salloc JEMALLOC_N(tcache_salloc)
|
|
||||||
#define tcache_stats_merge JEMALLOC_N(tcache_stats_merge)
|
|
||||||
#define tcache_thread_cleanup JEMALLOC_N(tcache_thread_cleanup)
|
|
||||||
#define tcache_tls JEMALLOC_N(tcache_tls)
|
|
||||||
#define tcache_tsd JEMALLOC_N(tcache_tsd)
|
|
||||||
#define tcache_tsd_boot JEMALLOC_N(tcache_tsd_boot)
|
|
||||||
#define tcache_tsd_cleanup_wrapper JEMALLOC_N(tcache_tsd_cleanup_wrapper)
|
|
||||||
#define tcache_tsd_get JEMALLOC_N(tcache_tsd_get)
|
|
||||||
#define tcache_tsd_get_wrapper JEMALLOC_N(tcache_tsd_get_wrapper)
|
|
||||||
#define tcache_tsd_set JEMALLOC_N(tcache_tsd_set)
|
|
||||||
#define thread_allocated_booted JEMALLOC_N(thread_allocated_booted)
|
|
||||||
#define thread_allocated_initialized JEMALLOC_N(thread_allocated_initialized)
|
|
||||||
#define thread_allocated_tls JEMALLOC_N(thread_allocated_tls)
|
|
||||||
#define thread_allocated_tsd JEMALLOC_N(thread_allocated_tsd)
|
|
||||||
#define thread_allocated_tsd_boot JEMALLOC_N(thread_allocated_tsd_boot)
|
|
||||||
#define thread_allocated_tsd_cleanup_wrapper JEMALLOC_N(thread_allocated_tsd_cleanup_wrapper)
|
|
||||||
#define thread_allocated_tsd_get JEMALLOC_N(thread_allocated_tsd_get)
|
|
||||||
#define thread_allocated_tsd_get_wrapper JEMALLOC_N(thread_allocated_tsd_get_wrapper)
|
|
||||||
#define thread_allocated_tsd_set JEMALLOC_N(thread_allocated_tsd_set)
|
|
||||||
#define u2rz JEMALLOC_N(u2rz)
|
|
5
include/jemalloc/internal/private_namespace.sh
Executable file
5
include/jemalloc/internal/private_namespace.sh
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
for symbol in `cat $1` ; do
|
||||||
|
echo "#define ${symbol} JEMALLOC_N(${symbol})"
|
||||||
|
done
|
402
include/jemalloc/internal/private_symbols.txt
Normal file
402
include/jemalloc/internal/private_symbols.txt
Normal file
@ -0,0 +1,402 @@
|
|||||||
|
a0calloc
|
||||||
|
a0free
|
||||||
|
a0malloc
|
||||||
|
arena_alloc_junk_small
|
||||||
|
arena_bin_index
|
||||||
|
arena_bin_info
|
||||||
|
arena_boot
|
||||||
|
arena_dalloc
|
||||||
|
arena_dalloc_bin
|
||||||
|
arena_dalloc_bin_locked
|
||||||
|
arena_dalloc_junk_small
|
||||||
|
arena_dalloc_large
|
||||||
|
arena_dalloc_large_locked
|
||||||
|
arena_dalloc_small
|
||||||
|
arena_dss_prec_get
|
||||||
|
arena_dss_prec_set
|
||||||
|
arena_malloc
|
||||||
|
arena_malloc_large
|
||||||
|
arena_malloc_small
|
||||||
|
arena_mapbits_allocated_get
|
||||||
|
arena_mapbits_binind_get
|
||||||
|
arena_mapbits_dirty_get
|
||||||
|
arena_mapbits_get
|
||||||
|
arena_mapbits_large_binind_set
|
||||||
|
arena_mapbits_large_get
|
||||||
|
arena_mapbits_large_set
|
||||||
|
arena_mapbits_large_size_get
|
||||||
|
arena_mapbits_small_runind_get
|
||||||
|
arena_mapbits_small_set
|
||||||
|
arena_mapbits_unallocated_set
|
||||||
|
arena_mapbits_unallocated_size_get
|
||||||
|
arena_mapbits_unallocated_size_set
|
||||||
|
arena_mapbits_unzeroed_get
|
||||||
|
arena_mapbits_unzeroed_set
|
||||||
|
arena_mapbitsp_get
|
||||||
|
arena_mapbitsp_read
|
||||||
|
arena_mapbitsp_write
|
||||||
|
arena_mapp_get
|
||||||
|
arena_maxclass
|
||||||
|
arena_new
|
||||||
|
arena_palloc
|
||||||
|
arena_postfork_child
|
||||||
|
arena_postfork_parent
|
||||||
|
arena_prefork
|
||||||
|
arena_prof_accum
|
||||||
|
arena_prof_accum_impl
|
||||||
|
arena_prof_accum_locked
|
||||||
|
arena_prof_ctx_get
|
||||||
|
arena_prof_ctx_set
|
||||||
|
arena_prof_promoted
|
||||||
|
arena_ptr_small_binind_get
|
||||||
|
arena_purge_all
|
||||||
|
arena_ralloc
|
||||||
|
arena_ralloc_no_move
|
||||||
|
arena_run_regind
|
||||||
|
arena_salloc
|
||||||
|
arena_stats_merge
|
||||||
|
arena_tcache_fill_small
|
||||||
|
arenas
|
||||||
|
arenas_booted
|
||||||
|
arenas_cleanup
|
||||||
|
arenas_extend
|
||||||
|
arenas_initialized
|
||||||
|
arenas_lock
|
||||||
|
arenas_tls
|
||||||
|
arenas_tsd
|
||||||
|
arenas_tsd_boot
|
||||||
|
arenas_tsd_cleanup_wrapper
|
||||||
|
arenas_tsd_get
|
||||||
|
arenas_tsd_get_wrapper
|
||||||
|
arenas_tsd_init_head
|
||||||
|
arenas_tsd_set
|
||||||
|
atomic_add_u
|
||||||
|
atomic_add_uint32
|
||||||
|
atomic_add_uint64
|
||||||
|
atomic_add_z
|
||||||
|
atomic_sub_u
|
||||||
|
atomic_sub_uint32
|
||||||
|
atomic_sub_uint64
|
||||||
|
atomic_sub_z
|
||||||
|
base_alloc
|
||||||
|
base_boot
|
||||||
|
base_calloc
|
||||||
|
base_node_alloc
|
||||||
|
base_node_dealloc
|
||||||
|
base_postfork_child
|
||||||
|
base_postfork_parent
|
||||||
|
base_prefork
|
||||||
|
bitmap_full
|
||||||
|
bitmap_get
|
||||||
|
bitmap_info_init
|
||||||
|
bitmap_info_ngroups
|
||||||
|
bitmap_init
|
||||||
|
bitmap_set
|
||||||
|
bitmap_sfu
|
||||||
|
bitmap_size
|
||||||
|
bitmap_unset
|
||||||
|
bt_init
|
||||||
|
buferror
|
||||||
|
choose_arena
|
||||||
|
choose_arena_hard
|
||||||
|
chunk_alloc
|
||||||
|
chunk_alloc_dss
|
||||||
|
chunk_alloc_mmap
|
||||||
|
chunk_boot
|
||||||
|
chunk_dealloc
|
||||||
|
chunk_dealloc_mmap
|
||||||
|
chunk_dss_boot
|
||||||
|
chunk_dss_postfork_child
|
||||||
|
chunk_dss_postfork_parent
|
||||||
|
chunk_dss_prec_get
|
||||||
|
chunk_dss_prec_set
|
||||||
|
chunk_dss_prefork
|
||||||
|
chunk_in_dss
|
||||||
|
chunk_npages
|
||||||
|
chunk_postfork_child
|
||||||
|
chunk_postfork_parent
|
||||||
|
chunk_prefork
|
||||||
|
chunk_unmap
|
||||||
|
chunks_mtx
|
||||||
|
chunks_rtree
|
||||||
|
chunksize
|
||||||
|
chunksize_mask
|
||||||
|
ckh_bucket_search
|
||||||
|
ckh_count
|
||||||
|
ckh_delete
|
||||||
|
ckh_evict_reloc_insert
|
||||||
|
ckh_insert
|
||||||
|
ckh_isearch
|
||||||
|
ckh_iter
|
||||||
|
ckh_new
|
||||||
|
ckh_pointer_hash
|
||||||
|
ckh_pointer_keycomp
|
||||||
|
ckh_rebuild
|
||||||
|
ckh_remove
|
||||||
|
ckh_search
|
||||||
|
ckh_string_hash
|
||||||
|
ckh_string_keycomp
|
||||||
|
ckh_try_bucket_insert
|
||||||
|
ckh_try_insert
|
||||||
|
ctl_boot
|
||||||
|
ctl_bymib
|
||||||
|
ctl_byname
|
||||||
|
ctl_nametomib
|
||||||
|
ctl_postfork_child
|
||||||
|
ctl_postfork_parent
|
||||||
|
ctl_prefork
|
||||||
|
dss_prec_names
|
||||||
|
extent_tree_ad_first
|
||||||
|
extent_tree_ad_insert
|
||||||
|
extent_tree_ad_iter
|
||||||
|
extent_tree_ad_iter_recurse
|
||||||
|
extent_tree_ad_iter_start
|
||||||
|
extent_tree_ad_last
|
||||||
|
extent_tree_ad_new
|
||||||
|
extent_tree_ad_next
|
||||||
|
extent_tree_ad_nsearch
|
||||||
|
extent_tree_ad_prev
|
||||||
|
extent_tree_ad_psearch
|
||||||
|
extent_tree_ad_remove
|
||||||
|
extent_tree_ad_reverse_iter
|
||||||
|
extent_tree_ad_reverse_iter_recurse
|
||||||
|
extent_tree_ad_reverse_iter_start
|
||||||
|
extent_tree_ad_search
|
||||||
|
extent_tree_szad_first
|
||||||
|
extent_tree_szad_insert
|
||||||
|
extent_tree_szad_iter
|
||||||
|
extent_tree_szad_iter_recurse
|
||||||
|
extent_tree_szad_iter_start
|
||||||
|
extent_tree_szad_last
|
||||||
|
extent_tree_szad_new
|
||||||
|
extent_tree_szad_next
|
||||||
|
extent_tree_szad_nsearch
|
||||||
|
extent_tree_szad_prev
|
||||||
|
extent_tree_szad_psearch
|
||||||
|
extent_tree_szad_remove
|
||||||
|
extent_tree_szad_reverse_iter
|
||||||
|
extent_tree_szad_reverse_iter_recurse
|
||||||
|
extent_tree_szad_reverse_iter_start
|
||||||
|
extent_tree_szad_search
|
||||||
|
get_errno
|
||||||
|
hash
|
||||||
|
hash_fmix_32
|
||||||
|
hash_fmix_64
|
||||||
|
hash_get_block_32
|
||||||
|
hash_get_block_64
|
||||||
|
hash_rotl_32
|
||||||
|
hash_rotl_64
|
||||||
|
hash_x64_128
|
||||||
|
hash_x86_128
|
||||||
|
hash_x86_32
|
||||||
|
huge_allocated
|
||||||
|
huge_boot
|
||||||
|
huge_dalloc
|
||||||
|
huge_malloc
|
||||||
|
huge_mtx
|
||||||
|
huge_ndalloc
|
||||||
|
huge_nmalloc
|
||||||
|
huge_palloc
|
||||||
|
huge_postfork_child
|
||||||
|
huge_postfork_parent
|
||||||
|
huge_prefork
|
||||||
|
huge_prof_ctx_get
|
||||||
|
huge_prof_ctx_set
|
||||||
|
huge_ralloc
|
||||||
|
huge_ralloc_no_move
|
||||||
|
huge_salloc
|
||||||
|
iallocm
|
||||||
|
icalloc
|
||||||
|
icallocx
|
||||||
|
idalloc
|
||||||
|
idallocx
|
||||||
|
imalloc
|
||||||
|
imallocx
|
||||||
|
ipalloc
|
||||||
|
ipallocx
|
||||||
|
iqalloc
|
||||||
|
iqallocx
|
||||||
|
iralloc
|
||||||
|
irallocx
|
||||||
|
isalloc
|
||||||
|
isthreaded
|
||||||
|
ivsalloc
|
||||||
|
jemalloc_postfork_child
|
||||||
|
jemalloc_postfork_parent
|
||||||
|
jemalloc_prefork
|
||||||
|
malloc_cprintf
|
||||||
|
malloc_mutex_init
|
||||||
|
malloc_mutex_lock
|
||||||
|
malloc_mutex_postfork_child
|
||||||
|
malloc_mutex_postfork_parent
|
||||||
|
malloc_mutex_prefork
|
||||||
|
malloc_mutex_unlock
|
||||||
|
malloc_printf
|
||||||
|
malloc_snprintf
|
||||||
|
malloc_strtoumax
|
||||||
|
malloc_tsd_boot
|
||||||
|
malloc_tsd_cleanup_register
|
||||||
|
malloc_tsd_dalloc
|
||||||
|
malloc_tsd_malloc
|
||||||
|
malloc_tsd_no_cleanup
|
||||||
|
malloc_vcprintf
|
||||||
|
malloc_vsnprintf
|
||||||
|
malloc_write
|
||||||
|
map_bias
|
||||||
|
mb_write
|
||||||
|
mutex_boot
|
||||||
|
narenas_auto
|
||||||
|
narenas_total
|
||||||
|
narenas_total_get
|
||||||
|
ncpus
|
||||||
|
nhbins
|
||||||
|
opt_abort
|
||||||
|
opt_dss
|
||||||
|
opt_junk
|
||||||
|
opt_lg_chunk
|
||||||
|
opt_lg_dirty_mult
|
||||||
|
opt_lg_prof_interval
|
||||||
|
opt_lg_prof_sample
|
||||||
|
opt_lg_tcache_max
|
||||||
|
opt_narenas
|
||||||
|
opt_prof
|
||||||
|
opt_prof_accum
|
||||||
|
opt_prof_active
|
||||||
|
opt_prof_final
|
||||||
|
opt_prof_gdump
|
||||||
|
opt_prof_leak
|
||||||
|
opt_prof_prefix
|
||||||
|
opt_quarantine
|
||||||
|
opt_redzone
|
||||||
|
opt_stats_print
|
||||||
|
opt_tcache
|
||||||
|
opt_utrace
|
||||||
|
opt_valgrind
|
||||||
|
opt_xmalloc
|
||||||
|
opt_zero
|
||||||
|
p2rz
|
||||||
|
pages_purge
|
||||||
|
pow2_ceil
|
||||||
|
prof_backtrace
|
||||||
|
prof_boot0
|
||||||
|
prof_boot1
|
||||||
|
prof_boot2
|
||||||
|
prof_ctx_get
|
||||||
|
prof_ctx_set
|
||||||
|
prof_free
|
||||||
|
prof_gdump
|
||||||
|
prof_idump
|
||||||
|
prof_interval
|
||||||
|
prof_lookup
|
||||||
|
prof_malloc
|
||||||
|
prof_mdump
|
||||||
|
prof_postfork_child
|
||||||
|
prof_postfork_parent
|
||||||
|
prof_prefork
|
||||||
|
prof_promote
|
||||||
|
prof_realloc
|
||||||
|
prof_sample_accum_update
|
||||||
|
prof_sample_threshold_update
|
||||||
|
prof_tdata_booted
|
||||||
|
prof_tdata_cleanup
|
||||||
|
prof_tdata_get
|
||||||
|
prof_tdata_init
|
||||||
|
prof_tdata_initialized
|
||||||
|
prof_tdata_tls
|
||||||
|
prof_tdata_tsd
|
||||||
|
prof_tdata_tsd_boot
|
||||||
|
prof_tdata_tsd_cleanup_wrapper
|
||||||
|
prof_tdata_tsd_get
|
||||||
|
prof_tdata_tsd_get_wrapper
|
||||||
|
prof_tdata_tsd_init_head
|
||||||
|
prof_tdata_tsd_set
|
||||||
|
quarantine
|
||||||
|
quarantine_alloc_hook
|
||||||
|
quarantine_boot
|
||||||
|
quarantine_booted
|
||||||
|
quarantine_cleanup
|
||||||
|
quarantine_init
|
||||||
|
quarantine_tls
|
||||||
|
quarantine_tsd
|
||||||
|
quarantine_tsd_boot
|
||||||
|
quarantine_tsd_cleanup_wrapper
|
||||||
|
quarantine_tsd_get
|
||||||
|
quarantine_tsd_get_wrapper
|
||||||
|
quarantine_tsd_init_head
|
||||||
|
quarantine_tsd_set
|
||||||
|
register_zone
|
||||||
|
rtree_get
|
||||||
|
rtree_get_locked
|
||||||
|
rtree_new
|
||||||
|
rtree_postfork_child
|
||||||
|
rtree_postfork_parent
|
||||||
|
rtree_prefork
|
||||||
|
rtree_set
|
||||||
|
s2u
|
||||||
|
sa2u
|
||||||
|
set_errno
|
||||||
|
small_size2bin
|
||||||
|
stats_cactive
|
||||||
|
stats_cactive_add
|
||||||
|
stats_cactive_get
|
||||||
|
stats_cactive_sub
|
||||||
|
stats_chunks
|
||||||
|
stats_print
|
||||||
|
tcache_alloc_easy
|
||||||
|
tcache_alloc_large
|
||||||
|
tcache_alloc_small
|
||||||
|
tcache_alloc_small_hard
|
||||||
|
tcache_arena_associate
|
||||||
|
tcache_arena_dissociate
|
||||||
|
tcache_bin_flush_large
|
||||||
|
tcache_bin_flush_small
|
||||||
|
tcache_bin_info
|
||||||
|
tcache_boot0
|
||||||
|
tcache_boot1
|
||||||
|
tcache_booted
|
||||||
|
tcache_create
|
||||||
|
tcache_dalloc_large
|
||||||
|
tcache_dalloc_small
|
||||||
|
tcache_destroy
|
||||||
|
tcache_enabled_booted
|
||||||
|
tcache_enabled_get
|
||||||
|
tcache_enabled_initialized
|
||||||
|
tcache_enabled_set
|
||||||
|
tcache_enabled_tls
|
||||||
|
tcache_enabled_tsd
|
||||||
|
tcache_enabled_tsd_boot
|
||||||
|
tcache_enabled_tsd_cleanup_wrapper
|
||||||
|
tcache_enabled_tsd_get
|
||||||
|
tcache_enabled_tsd_get_wrapper
|
||||||
|
tcache_enabled_tsd_init_head
|
||||||
|
tcache_enabled_tsd_set
|
||||||
|
tcache_event
|
||||||
|
tcache_event_hard
|
||||||
|
tcache_flush
|
||||||
|
tcache_get
|
||||||
|
tcache_initialized
|
||||||
|
tcache_maxclass
|
||||||
|
tcache_salloc
|
||||||
|
tcache_stats_merge
|
||||||
|
tcache_thread_cleanup
|
||||||
|
tcache_tls
|
||||||
|
tcache_tsd
|
||||||
|
tcache_tsd_boot
|
||||||
|
tcache_tsd_cleanup_wrapper
|
||||||
|
tcache_tsd_get
|
||||||
|
tcache_tsd_get_wrapper
|
||||||
|
tcache_tsd_init_head
|
||||||
|
tcache_tsd_set
|
||||||
|
thread_allocated_booted
|
||||||
|
thread_allocated_initialized
|
||||||
|
thread_allocated_tls
|
||||||
|
thread_allocated_tsd
|
||||||
|
thread_allocated_tsd_boot
|
||||||
|
thread_allocated_tsd_cleanup_wrapper
|
||||||
|
thread_allocated_tsd_get
|
||||||
|
thread_allocated_tsd_get_wrapper
|
||||||
|
thread_allocated_tsd_init_head
|
||||||
|
thread_allocated_tsd_set
|
||||||
|
tsd_init_check_recursion
|
||||||
|
tsd_init_finish
|
||||||
|
u2rz
|
5
include/jemalloc/internal/private_unnamespace.sh
Executable file
5
include/jemalloc/internal/private_unnamespace.sh
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
for symbol in `cat $1` ; do
|
||||||
|
echo "#undef ${symbol}"
|
||||||
|
done
|
5
include/jemalloc/internal/public_namespace.sh
Executable file
5
include/jemalloc/internal/public_namespace.sh
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
for symbol in `cat $1` ; do
|
||||||
|
echo "#define je_${symbol} JEMALLOC_N(${symbol})"
|
||||||
|
done
|
21
include/jemalloc/internal/public_symbols.txt
Normal file
21
include/jemalloc/internal/public_symbols.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
malloc_conf
|
||||||
|
malloc_message
|
||||||
|
malloc
|
||||||
|
calloc
|
||||||
|
posix_memalign
|
||||||
|
aligned_alloc
|
||||||
|
realloc
|
||||||
|
free
|
||||||
|
malloc_usable_size
|
||||||
|
malloc_stats_print
|
||||||
|
mallctl
|
||||||
|
mallctlnametomib
|
||||||
|
mallctlbymib
|
||||||
|
memalign
|
||||||
|
valloc
|
||||||
|
allocm
|
||||||
|
rallocm
|
||||||
|
sallocm
|
||||||
|
dallocm
|
||||||
|
nallocm
|
||||||
|
|
5
include/jemalloc/internal/public_unnamespace.sh
Executable file
5
include/jemalloc/internal/public_unnamespace.sh
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
for symbol in `cat $1` ; do
|
||||||
|
echo "#undef je_${symbol}"
|
||||||
|
done
|
@ -14,7 +14,7 @@
|
|||||||
* Wrap a cpp argument that contains commas such that it isn't broken up into
|
* Wrap a cpp argument that contains commas such that it isn't broken up into
|
||||||
* multiple arguments.
|
* multiple arguments.
|
||||||
*/
|
*/
|
||||||
#define JEMALLOC_CONCAT(...) __VA_ARGS__
|
#define JEMALLOC_ARG_CONCAT(...) __VA_ARGS__
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Silence compiler warnings due to uninitialized values. This is used
|
* Silence compiler warnings due to uninitialized values. This is used
|
||||||
@ -63,10 +63,12 @@
|
|||||||
} while (0)
|
} while (0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef assert_not_implemented
|
||||||
#define assert_not_implemented(e) do { \
|
#define assert_not_implemented(e) do { \
|
||||||
if (config_debug && !(e)) \
|
if (config_debug && !(e)) \
|
||||||
not_implemented(); \
|
not_implemented(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Use to assert a particular configuration, e.g., cassert(config_debug). */
|
/* Use to assert a particular configuration, e.g., cassert(config_debug). */
|
||||||
#define cassert(c) do { \
|
#define cassert(c) do { \
|
||||||
@ -107,7 +109,6 @@ void malloc_printf(const char *format, ...)
|
|||||||
|
|
||||||
#ifndef JEMALLOC_ENABLE_INLINE
|
#ifndef JEMALLOC_ENABLE_INLINE
|
||||||
size_t pow2_ceil(size_t x);
|
size_t pow2_ceil(size_t x);
|
||||||
void malloc_write(const char *s);
|
|
||||||
void set_errno(int errnum);
|
void set_errno(int errnum);
|
||||||
int get_errno(void);
|
int get_errno(void);
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,157 +0,0 @@
|
|||||||
#ifndef JEMALLOC_H_
|
|
||||||
#define JEMALLOC_H_
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <limits.h>
|
|
||||||
#include <strings.h>
|
|
||||||
|
|
||||||
#define JEMALLOC_VERSION "@jemalloc_version@"
|
|
||||||
#define JEMALLOC_VERSION_MAJOR @jemalloc_version_major@
|
|
||||||
#define JEMALLOC_VERSION_MINOR @jemalloc_version_minor@
|
|
||||||
#define JEMALLOC_VERSION_BUGFIX @jemalloc_version_bugfix@
|
|
||||||
#define JEMALLOC_VERSION_NREV @jemalloc_version_nrev@
|
|
||||||
#define JEMALLOC_VERSION_GID "@jemalloc_version_gid@"
|
|
||||||
|
|
||||||
#include "jemalloc_defs@install_suffix@.h"
|
|
||||||
|
|
||||||
#ifdef JEMALLOC_EXPERIMENTAL
|
|
||||||
#define ALLOCM_LG_ALIGN(la) (la)
|
|
||||||
#if LG_SIZEOF_PTR == 2
|
|
||||||
#define ALLOCM_ALIGN(a) (ffs(a)-1)
|
|
||||||
#else
|
|
||||||
#define ALLOCM_ALIGN(a) ((a < (size_t)INT_MAX) ? ffs(a)-1 : ffs(a>>32)+31)
|
|
||||||
#endif
|
|
||||||
#define ALLOCM_ZERO ((int)0x40)
|
|
||||||
#define ALLOCM_NO_MOVE ((int)0x80)
|
|
||||||
/* Bias arena index bits so that 0 encodes "ALLOCM_ARENA() unspecified". */
|
|
||||||
#define ALLOCM_ARENA(a) ((int)(((a)+1) << 8))
|
|
||||||
|
|
||||||
#define ALLOCM_SUCCESS 0
|
|
||||||
#define ALLOCM_ERR_OOM 1
|
|
||||||
#define ALLOCM_ERR_NOT_MOVED 2
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The je_ prefix on the following public symbol declarations is an artifact of
|
|
||||||
* namespace management, and should be omitted in application code unless
|
|
||||||
* JEMALLOC_NO_DEMANGLE is defined (see below).
|
|
||||||
*/
|
|
||||||
extern JEMALLOC_EXPORT const char *je_malloc_conf;
|
|
||||||
extern JEMALLOC_EXPORT void (*je_malloc_message)(void *cbopaque,
|
|
||||||
const char *s);
|
|
||||||
|
|
||||||
JEMALLOC_EXPORT void *je_malloc(size_t size) JEMALLOC_ATTR(malloc);
|
|
||||||
JEMALLOC_EXPORT void *je_calloc(size_t num, size_t size)
|
|
||||||
JEMALLOC_ATTR(malloc);
|
|
||||||
JEMALLOC_EXPORT int je_posix_memalign(void **memptr, size_t alignment,
|
|
||||||
size_t size) JEMALLOC_ATTR(nonnull(1));
|
|
||||||
JEMALLOC_EXPORT void *je_aligned_alloc(size_t alignment, size_t size)
|
|
||||||
JEMALLOC_ATTR(malloc);
|
|
||||||
JEMALLOC_EXPORT void *je_realloc(void *ptr, size_t size);
|
|
||||||
JEMALLOC_EXPORT void je_free(void *ptr);
|
|
||||||
|
|
||||||
#ifdef JEMALLOC_OVERRIDE_MEMALIGN
|
|
||||||
JEMALLOC_EXPORT void * je_memalign(size_t alignment, size_t size)
|
|
||||||
JEMALLOC_ATTR(malloc);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef JEMALLOC_OVERRIDE_VALLOC
|
|
||||||
JEMALLOC_EXPORT void * je_valloc(size_t size) JEMALLOC_ATTR(malloc);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
JEMALLOC_EXPORT size_t je_malloc_usable_size(
|
|
||||||
JEMALLOC_USABLE_SIZE_CONST void *ptr);
|
|
||||||
JEMALLOC_EXPORT void je_malloc_stats_print(void (*write_cb)(void *,
|
|
||||||
const char *), void *je_cbopaque, const char *opts);
|
|
||||||
JEMALLOC_EXPORT int je_mallctl(const char *name, void *oldp,
|
|
||||||
size_t *oldlenp, void *newp, size_t newlen);
|
|
||||||
JEMALLOC_EXPORT int je_mallctlnametomib(const char *name, size_t *mibp,
|
|
||||||
size_t *miblenp);
|
|
||||||
JEMALLOC_EXPORT int je_mallctlbymib(const size_t *mib, size_t miblen,
|
|
||||||
void *oldp, size_t *oldlenp, void *newp, size_t newlen);
|
|
||||||
|
|
||||||
#ifdef JEMALLOC_EXPERIMENTAL
|
|
||||||
JEMALLOC_EXPORT int je_allocm(void **ptr, size_t *rsize, size_t size,
|
|
||||||
int flags) JEMALLOC_ATTR(nonnull(1));
|
|
||||||
JEMALLOC_EXPORT int je_rallocm(void **ptr, size_t *rsize, size_t size,
|
|
||||||
size_t extra, int flags) JEMALLOC_ATTR(nonnull(1));
|
|
||||||
JEMALLOC_EXPORT int je_sallocm(const void *ptr, size_t *rsize, int flags)
|
|
||||||
JEMALLOC_ATTR(nonnull(1));
|
|
||||||
JEMALLOC_EXPORT int je_dallocm(void *ptr, int flags)
|
|
||||||
JEMALLOC_ATTR(nonnull(1));
|
|
||||||
JEMALLOC_EXPORT int je_nallocm(size_t *rsize, size_t size, int flags);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* By default application code must explicitly refer to mangled symbol names,
|
|
||||||
* so that it is possible to use jemalloc in conjunction with another allocator
|
|
||||||
* in the same application. Define JEMALLOC_MANGLE in order to cause automatic
|
|
||||||
* name mangling that matches the API prefixing that happened as a result of
|
|
||||||
* --with-mangling and/or --with-jemalloc-prefix configuration settings.
|
|
||||||
*/
|
|
||||||
#ifdef JEMALLOC_MANGLE
|
|
||||||
#ifndef JEMALLOC_NO_DEMANGLE
|
|
||||||
#define JEMALLOC_NO_DEMANGLE
|
|
||||||
#endif
|
|
||||||
#define malloc_conf je_malloc_conf
|
|
||||||
#define malloc_message je_malloc_message
|
|
||||||
#define malloc je_malloc
|
|
||||||
#define calloc je_calloc
|
|
||||||
#define posix_memalign je_posix_memalign
|
|
||||||
#define aligned_alloc je_aligned_alloc
|
|
||||||
#define realloc je_realloc
|
|
||||||
#define free je_free
|
|
||||||
#define malloc_usable_size je_malloc_usable_size
|
|
||||||
#define malloc_stats_print je_malloc_stats_print
|
|
||||||
#define mallctl je_mallctl
|
|
||||||
#define mallctlnametomib je_mallctlnametomib
|
|
||||||
#define mallctlbymib je_mallctlbymib
|
|
||||||
#define memalign je_memalign
|
|
||||||
#define valloc je_valloc
|
|
||||||
#ifdef JEMALLOC_EXPERIMENTAL
|
|
||||||
#define allocm je_allocm
|
|
||||||
#define rallocm je_rallocm
|
|
||||||
#define sallocm je_sallocm
|
|
||||||
#define dallocm je_dallocm
|
|
||||||
#define nallocm je_nallocm
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The je_* macros can be used as stable alternative names for the public
|
|
||||||
* jemalloc API if JEMALLOC_NO_DEMANGLE is defined. This is primarily meant
|
|
||||||
* for use in jemalloc itself, but it can be used by application code to
|
|
||||||
* provide isolation from the name mangling specified via --with-mangling
|
|
||||||
* and/or --with-jemalloc-prefix.
|
|
||||||
*/
|
|
||||||
#ifndef JEMALLOC_NO_DEMANGLE
|
|
||||||
#undef je_malloc_conf
|
|
||||||
#undef je_malloc_message
|
|
||||||
#undef je_malloc
|
|
||||||
#undef je_calloc
|
|
||||||
#undef je_posix_memalign
|
|
||||||
#undef je_aligned_alloc
|
|
||||||
#undef je_realloc
|
|
||||||
#undef je_free
|
|
||||||
#undef je_malloc_usable_size
|
|
||||||
#undef je_malloc_stats_print
|
|
||||||
#undef je_mallctl
|
|
||||||
#undef je_mallctlnametomib
|
|
||||||
#undef je_mallctlbymib
|
|
||||||
#undef je_memalign
|
|
||||||
#undef je_valloc
|
|
||||||
#ifdef JEMALLOC_EXPERIMENTAL
|
|
||||||
#undef je_allocm
|
|
||||||
#undef je_rallocm
|
|
||||||
#undef je_sallocm
|
|
||||||
#undef je_dallocm
|
|
||||||
#undef je_nallocm
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
#endif /* JEMALLOC_H_ */
|
|
24
include/jemalloc/jemalloc.sh
Executable file
24
include/jemalloc/jemalloc.sh
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
objroot=$1
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
#ifndef JEMALLOC_H_
|
||||||
|
#define JEMALLOC_H_
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
for hdr in jemalloc_macros.h jemalloc_protos.h jemalloc_mangle.h ; do
|
||||||
|
cat "${objroot}include/jemalloc/${hdr}"
|
||||||
|
echo
|
||||||
|
done
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
#ifdef __cplusplus
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
#endif /* JEMALLOC_H_ */
|
||||||
|
EOF
|
@ -1,16 +1,9 @@
|
|||||||
/*
|
|
||||||
* If JEMALLOC_PREFIX is defined via --with-jemalloc-prefix, it will cause all
|
|
||||||
* public APIs to be prefixed. This makes it possible, with some care, to use
|
|
||||||
* multiple allocators simultaneously.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_PREFIX
|
|
||||||
#undef JEMALLOC_CPREFIX
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Name mangling for public symbols is controlled by --with-mangling and
|
* Name mangling for public symbols is controlled by --with-mangling and
|
||||||
* --with-jemalloc-prefix. With default settings the je_ prefix is stripped by
|
* --with-jemalloc-prefix. With default settings the je_ prefix is stripped by
|
||||||
* these macro definitions.
|
* these macro definitions.
|
||||||
*/
|
*/
|
||||||
|
#ifndef JEMALLOC_NO_RENAME
|
||||||
# undef je_malloc_conf
|
# undef je_malloc_conf
|
||||||
# undef je_malloc_message
|
# undef je_malloc_message
|
||||||
# undef je_malloc
|
# undef je_malloc
|
||||||
@ -31,75 +24,7 @@
|
|||||||
# undef je_sallocm
|
# undef je_sallocm
|
||||||
# undef je_dallocm
|
# undef je_dallocm
|
||||||
# undef je_nallocm
|
# undef je_nallocm
|
||||||
|
#endif
|
||||||
/*
|
|
||||||
* JEMALLOC_PRIVATE_NAMESPACE is used as a prefix for all library-private APIs.
|
|
||||||
* For shared libraries, symbol visibility mechanisms prevent these symbols
|
|
||||||
* from being exported, but for static libraries, naming collisions are a real
|
|
||||||
* possibility.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_PRIVATE_NAMESPACE
|
|
||||||
#undef JEMALLOC_N
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Hyper-threaded CPUs may need a special instruction inside spin loops in
|
|
||||||
* order to yield to another virtual CPU.
|
|
||||||
*/
|
|
||||||
#undef CPU_SPINWAIT
|
|
||||||
|
|
||||||
/* Defined if the equivalent of FreeBSD's atomic(9) functions are available. */
|
|
||||||
#undef JEMALLOC_ATOMIC9
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Defined if OSAtomic*() functions are available, as provided by Darwin, and
|
|
||||||
* documented in the atomic(3) manual page.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_OSATOMIC
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Defined if __sync_add_and_fetch(uint32_t *, uint32_t) and
|
|
||||||
* __sync_sub_and_fetch(uint32_t *, uint32_t) are available, despite
|
|
||||||
* __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 not being defined (which means the
|
|
||||||
* functions are defined in libgcc instead of being inlines)
|
|
||||||
*/
|
|
||||||
#undef JE_FORCE_SYNC_COMPARE_AND_SWAP_4
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Defined if __sync_add_and_fetch(uint64_t *, uint64_t) and
|
|
||||||
* __sync_sub_and_fetch(uint64_t *, uint64_t) are available, despite
|
|
||||||
* __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 not being defined (which means the
|
|
||||||
* functions are defined in libgcc instead of being inlines)
|
|
||||||
*/
|
|
||||||
#undef JE_FORCE_SYNC_COMPARE_AND_SWAP_8
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Defined if OSSpin*() functions are available, as provided by Darwin, and
|
|
||||||
* documented in the spinlock(3) manual page.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_OSSPIN
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Defined if _malloc_thread_cleanup() exists. At least in the case of
|
|
||||||
* FreeBSD, pthread_key_create() allocates, which if used during malloc
|
|
||||||
* bootstrapping will cause recursion into the pthreads library. Therefore, if
|
|
||||||
* _malloc_thread_cleanup() exists, use it as the basis for thread cleanup in
|
|
||||||
* malloc_tsd.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_MALLOC_THREAD_CLEANUP
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Defined if threaded initialization is known to be safe on this platform.
|
|
||||||
* Among other things, it must be possible to initialize a mutex without
|
|
||||||
* triggering allocation in order for threaded allocation to be safe.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_THREADED_INIT
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Defined if the pthreads implementation defines
|
|
||||||
* _pthread_mutex_init_calloc_cb(), in which case the function is used in order
|
|
||||||
* to avoid recursive allocation during mutex initialization.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_MUTEX_INIT_CB
|
|
||||||
|
|
||||||
/* Defined if __attribute__((...)) syntax is supported. */
|
/* Defined if __attribute__((...)) syntax is supported. */
|
||||||
#undef JEMALLOC_HAVE_ATTR
|
#undef JEMALLOC_HAVE_ATTR
|
||||||
@ -127,100 +52,9 @@
|
|||||||
# define JEMALLOC_NOINLINE
|
# define JEMALLOC_NOINLINE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Defined if sbrk() is supported. */
|
|
||||||
#undef JEMALLOC_HAVE_SBRK
|
|
||||||
|
|
||||||
/* Non-empty if the tls_model attribute is supported. */
|
|
||||||
#undef JEMALLOC_TLS_MODEL
|
|
||||||
|
|
||||||
/* JEMALLOC_CC_SILENCE enables code that silences unuseful compiler warnings. */
|
|
||||||
#undef JEMALLOC_CC_SILENCE
|
|
||||||
|
|
||||||
/*
|
|
||||||
* JEMALLOC_DEBUG enables assertions and other sanity checks, and disables
|
|
||||||
* inline functions.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_DEBUG
|
|
||||||
|
|
||||||
/* JEMALLOC_STATS enables statistics calculation. */
|
|
||||||
#undef JEMALLOC_STATS
|
|
||||||
|
|
||||||
/* JEMALLOC_PROF enables allocation profiling. */
|
|
||||||
#undef JEMALLOC_PROF
|
|
||||||
|
|
||||||
/* Use libunwind for profile backtracing if defined. */
|
|
||||||
#undef JEMALLOC_PROF_LIBUNWIND
|
|
||||||
|
|
||||||
/* Use libgcc for profile backtracing if defined. */
|
|
||||||
#undef JEMALLOC_PROF_LIBGCC
|
|
||||||
|
|
||||||
/* Use gcc intrinsics for profile backtracing if defined. */
|
|
||||||
#undef JEMALLOC_PROF_GCC
|
|
||||||
|
|
||||||
/*
|
|
||||||
* JEMALLOC_TCACHE enables a thread-specific caching layer for small objects.
|
|
||||||
* This makes it possible to allocate/deallocate objects without any locking
|
|
||||||
* when the cache is in the steady state.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_TCACHE
|
|
||||||
|
|
||||||
/*
|
|
||||||
* JEMALLOC_DSS enables use of sbrk(2) to allocate chunks from the data storage
|
|
||||||
* segment (DSS).
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_DSS
|
|
||||||
|
|
||||||
/* Support memory filling (junk/zero/quarantine/redzone). */
|
|
||||||
#undef JEMALLOC_FILL
|
|
||||||
|
|
||||||
/* Support the experimental API. */
|
/* Support the experimental API. */
|
||||||
#undef JEMALLOC_EXPERIMENTAL
|
#undef JEMALLOC_EXPERIMENTAL
|
||||||
|
|
||||||
/* Support utrace(2)-based tracing. */
|
|
||||||
#undef JEMALLOC_UTRACE
|
|
||||||
|
|
||||||
/* Support Valgrind. */
|
|
||||||
#undef JEMALLOC_VALGRIND
|
|
||||||
|
|
||||||
/* Support optional abort() on OOM. */
|
|
||||||
#undef JEMALLOC_XMALLOC
|
|
||||||
|
|
||||||
/* Support lazy locking (avoid locking unless a second thread is launched). */
|
|
||||||
#undef JEMALLOC_LAZY_LOCK
|
|
||||||
|
|
||||||
/* One page is 2^STATIC_PAGE_SHIFT bytes. */
|
|
||||||
#undef STATIC_PAGE_SHIFT
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If defined, use munmap() to unmap freed chunks, rather than storing them for
|
|
||||||
* later reuse. This is disabled by default on Linux because common sequences
|
|
||||||
* of mmap()/munmap() calls will cause virtual memory map holes.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_MUNMAP
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If defined, use mremap(...MREMAP_FIXED...) for huge realloc(). This is
|
|
||||||
* disabled by default because it is Linux-specific and it will cause virtual
|
|
||||||
* memory map holes, much like munmap(2) does.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_MREMAP
|
|
||||||
|
|
||||||
/* TLS is used to map arenas and magazine caches to threads. */
|
|
||||||
#undef JEMALLOC_TLS
|
|
||||||
|
|
||||||
/*
|
|
||||||
* JEMALLOC_IVSALLOC enables ivsalloc(), which verifies that pointers reside
|
|
||||||
* within jemalloc-owned chunks before dereferencing them.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_IVSALLOC
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Define overrides for non-standard allocator-related functions if they
|
|
||||||
* are present on the system.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_OVERRIDE_MEMALIGN
|
|
||||||
#undef JEMALLOC_OVERRIDE_VALLOC
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* At least Linux omits the "const" in:
|
* At least Linux omits the "const" in:
|
||||||
*
|
*
|
||||||
@ -229,39 +63,3 @@
|
|||||||
* Match the operating system's prototype.
|
* Match the operating system's prototype.
|
||||||
*/
|
*/
|
||||||
#undef JEMALLOC_USABLE_SIZE_CONST
|
#undef JEMALLOC_USABLE_SIZE_CONST
|
||||||
|
|
||||||
/*
|
|
||||||
* Darwin (OS X) uses zones to work around Mach-O symbol override shortcomings.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_ZONE
|
|
||||||
#undef JEMALLOC_ZONE_VERSION
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Methods for purging unused pages differ between operating systems.
|
|
||||||
*
|
|
||||||
* madvise(..., MADV_DONTNEED) : On Linux, this immediately discards pages,
|
|
||||||
* such that new pages will be demand-zeroed if
|
|
||||||
* the address region is later touched.
|
|
||||||
* madvise(..., MADV_FREE) : On FreeBSD and Darwin, this marks pages as being
|
|
||||||
* unused, such that they will be discarded rather
|
|
||||||
* than swapped out.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_PURGE_MADVISE_DONTNEED
|
|
||||||
#undef JEMALLOC_PURGE_MADVISE_FREE
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Define if operating system has alloca.h header.
|
|
||||||
*/
|
|
||||||
#undef JEMALLOC_HAS_ALLOCA_H
|
|
||||||
|
|
||||||
/* sizeof(void *) == 2^LG_SIZEOF_PTR. */
|
|
||||||
#undef LG_SIZEOF_PTR
|
|
||||||
|
|
||||||
/* sizeof(int) == 2^LG_SIZEOF_INT. */
|
|
||||||
#undef LG_SIZEOF_INT
|
|
||||||
|
|
||||||
/* sizeof(long) == 2^LG_SIZEOF_LONG. */
|
|
||||||
#undef LG_SIZEOF_LONG
|
|
||||||
|
|
||||||
/* sizeof(intmax_t) == 2^LG_SIZEOF_INTMAX_T. */
|
|
||||||
#undef LG_SIZEOF_INTMAX_T
|
|
||||||
|
28
include/jemalloc/jemalloc_macros.h.in
Normal file
28
include/jemalloc/jemalloc_macros.h.in
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#include <limits.h>
|
||||||
|
#include <strings.h>
|
||||||
|
|
||||||
|
#define JEMALLOC_VERSION "@jemalloc_version@"
|
||||||
|
#define JEMALLOC_VERSION_MAJOR @jemalloc_version_major@
|
||||||
|
#define JEMALLOC_VERSION_MINOR @jemalloc_version_minor@
|
||||||
|
#define JEMALLOC_VERSION_BUGFIX @jemalloc_version_bugfix@
|
||||||
|
#define JEMALLOC_VERSION_NREV @jemalloc_version_nrev@
|
||||||
|
#define JEMALLOC_VERSION_GID "@jemalloc_version_gid@"
|
||||||
|
|
||||||
|
#include "jemalloc_defs@install_suffix@.h"
|
||||||
|
|
||||||
|
#ifdef JEMALLOC_EXPERIMENTAL
|
||||||
|
#define ALLOCM_LG_ALIGN(la) (la)
|
||||||
|
#if LG_SIZEOF_PTR == 2
|
||||||
|
#define ALLOCM_ALIGN(a) (ffs(a)-1)
|
||||||
|
#else
|
||||||
|
#define ALLOCM_ALIGN(a) ((a < (size_t)INT_MAX) ? ffs(a)-1 : ffs(a>>32)+31)
|
||||||
|
#endif
|
||||||
|
#define ALLOCM_ZERO ((int)0x40)
|
||||||
|
#define ALLOCM_NO_MOVE ((int)0x80)
|
||||||
|
/* Bias arena index bits so that 0 encodes "ALLOCM_ARENA() unspecified". */
|
||||||
|
#define ALLOCM_ARENA(a) ((int)(((a)+1) << 8))
|
||||||
|
|
||||||
|
#define ALLOCM_SUCCESS 0
|
||||||
|
#define ALLOCM_ERR_OOM 1
|
||||||
|
#define ALLOCM_ERR_NOT_MOVED 2
|
||||||
|
#endif
|
66
include/jemalloc/jemalloc_mangle.h.in
Normal file
66
include/jemalloc/jemalloc_mangle.h.in
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* By default application code must explicitly refer to mangled symbol names,
|
||||||
|
* so that it is possible to use jemalloc in conjunction with another allocator
|
||||||
|
* in the same application. Define JEMALLOC_MANGLE in order to cause automatic
|
||||||
|
* name mangling that matches the API prefixing that happened as a result of
|
||||||
|
* --with-mangling and/or --with-jemalloc-prefix configuration settings.
|
||||||
|
*/
|
||||||
|
#ifdef JEMALLOC_MANGLE
|
||||||
|
#ifndef JEMALLOC_NO_DEMANGLE
|
||||||
|
#define JEMALLOC_NO_DEMANGLE
|
||||||
|
#endif
|
||||||
|
#define malloc_conf je_malloc_conf
|
||||||
|
#define malloc_message je_malloc_message
|
||||||
|
#define malloc je_malloc
|
||||||
|
#define calloc je_calloc
|
||||||
|
#define posix_memalign je_posix_memalign
|
||||||
|
#define aligned_alloc je_aligned_alloc
|
||||||
|
#define realloc je_realloc
|
||||||
|
#define free je_free
|
||||||
|
#define malloc_usable_size je_malloc_usable_size
|
||||||
|
#define malloc_stats_print je_malloc_stats_print
|
||||||
|
#define mallctl je_mallctl
|
||||||
|
#define mallctlnametomib je_mallctlnametomib
|
||||||
|
#define mallctlbymib je_mallctlbymib
|
||||||
|
#define memalign je_memalign
|
||||||
|
#define valloc je_valloc
|
||||||
|
#ifdef JEMALLOC_EXPERIMENTAL
|
||||||
|
#define allocm je_allocm
|
||||||
|
#define rallocm je_rallocm
|
||||||
|
#define sallocm je_sallocm
|
||||||
|
#define dallocm je_dallocm
|
||||||
|
#define nallocm je_nallocm
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The je_* macros can be used as stable alternative names for the public
|
||||||
|
* jemalloc API if JEMALLOC_NO_DEMANGLE is defined. This is primarily meant
|
||||||
|
* for use in jemalloc itself, but it can be used by application code to
|
||||||
|
* provide isolation from the name mangling specified via --with-mangling
|
||||||
|
* and/or --with-jemalloc-prefix.
|
||||||
|
*/
|
||||||
|
#ifndef JEMALLOC_NO_DEMANGLE
|
||||||
|
#undef je_malloc_conf
|
||||||
|
#undef je_malloc_message
|
||||||
|
#undef je_malloc
|
||||||
|
#undef je_calloc
|
||||||
|
#undef je_posix_memalign
|
||||||
|
#undef je_aligned_alloc
|
||||||
|
#undef je_realloc
|
||||||
|
#undef je_free
|
||||||
|
#undef je_malloc_usable_size
|
||||||
|
#undef je_malloc_stats_print
|
||||||
|
#undef je_mallctl
|
||||||
|
#undef je_mallctlnametomib
|
||||||
|
#undef je_mallctlbymib
|
||||||
|
#undef je_memalign
|
||||||
|
#undef je_valloc
|
||||||
|
#ifdef JEMALLOC_EXPERIMENTAL
|
||||||
|
#undef je_allocm
|
||||||
|
#undef je_rallocm
|
||||||
|
#undef je_sallocm
|
||||||
|
#undef je_dallocm
|
||||||
|
#undef je_nallocm
|
||||||
|
#endif
|
||||||
|
#endif
|
50
include/jemalloc/jemalloc_protos.h.in
Normal file
50
include/jemalloc/jemalloc_protos.h.in
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* The @je_@ prefix on the following public symbol declarations is an artifact
|
||||||
|
* of namespace management, and should be omitted in application code unless
|
||||||
|
* JEMALLOC_NO_DEMANGLE is defined (see jemalloc_mangle@install_suffix@.h).
|
||||||
|
*/
|
||||||
|
extern JEMALLOC_EXPORT const char *@je_@malloc_conf;
|
||||||
|
extern JEMALLOC_EXPORT void (*@je_@malloc_message)(void *cbopaque,
|
||||||
|
const char *s);
|
||||||
|
|
||||||
|
JEMALLOC_EXPORT void *@je_@malloc(size_t size) JEMALLOC_ATTR(malloc);
|
||||||
|
JEMALLOC_EXPORT void *@je_@calloc(size_t num, size_t size)
|
||||||
|
JEMALLOC_ATTR(malloc);
|
||||||
|
JEMALLOC_EXPORT int @je_@posix_memalign(void **memptr, size_t alignment,
|
||||||
|
size_t size) JEMALLOC_ATTR(nonnull(1));
|
||||||
|
JEMALLOC_EXPORT void *@je_@aligned_alloc(size_t alignment, size_t size)
|
||||||
|
JEMALLOC_ATTR(malloc);
|
||||||
|
JEMALLOC_EXPORT void *@je_@realloc(void *ptr, size_t size);
|
||||||
|
JEMALLOC_EXPORT void @je_@free(void *ptr);
|
||||||
|
|
||||||
|
#ifdef JEMALLOC_OVERRIDE_MEMALIGN
|
||||||
|
JEMALLOC_EXPORT void * @je_@memalign(size_t alignment, size_t size)
|
||||||
|
JEMALLOC_ATTR(malloc);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef JEMALLOC_OVERRIDE_VALLOC
|
||||||
|
JEMALLOC_EXPORT void * @je_@valloc(size_t size) JEMALLOC_ATTR(malloc);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
JEMALLOC_EXPORT size_t @je_@malloc_usable_size(
|
||||||
|
JEMALLOC_USABLE_SIZE_CONST void *ptr);
|
||||||
|
JEMALLOC_EXPORT void @je_@malloc_stats_print(void (*write_cb)(void *,
|
||||||
|
const char *), void *@je_@cbopaque, const char *opts);
|
||||||
|
JEMALLOC_EXPORT int @je_@mallctl(const char *name, void *oldp,
|
||||||
|
size_t *oldlenp, void *newp, size_t newlen);
|
||||||
|
JEMALLOC_EXPORT int @je_@mallctlnametomib(const char *name, size_t *mibp,
|
||||||
|
size_t *miblenp);
|
||||||
|
JEMALLOC_EXPORT int @je_@mallctlbymib(const size_t *mib, size_t miblen,
|
||||||
|
void *oldp, size_t *oldlenp, void *newp, size_t newlen);
|
||||||
|
|
||||||
|
#ifdef JEMALLOC_EXPERIMENTAL
|
||||||
|
JEMALLOC_EXPORT int @je_@allocm(void **ptr, size_t *rsize, size_t size,
|
||||||
|
int flags) JEMALLOC_ATTR(nonnull(1));
|
||||||
|
JEMALLOC_EXPORT int @je_@rallocm(void **ptr, size_t *rsize, size_t size,
|
||||||
|
size_t extra, int flags) JEMALLOC_ATTR(nonnull(1));
|
||||||
|
JEMALLOC_EXPORT int @je_@sallocm(const void *ptr, size_t *rsize, int flags)
|
||||||
|
JEMALLOC_ATTR(nonnull(1));
|
||||||
|
JEMALLOC_EXPORT int @je_@dallocm(void *ptr, int flags)
|
||||||
|
JEMALLOC_ATTR(nonnull(1));
|
||||||
|
JEMALLOC_EXPORT int @je_@nallocm(size_t *rsize, size_t size, int flags);
|
||||||
|
#endif
|
111
test/include/test/jemalloc_test.h.in
Normal file
111
test/include/test/jemalloc_test.h.in
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
* Define always-enabled assertion macros, so that test assertions execute even
|
||||||
|
* if assertions are disabled in the library code. These definitions must
|
||||||
|
* exist prior to including "jemalloc/internal/util.h".
|
||||||
|
*/
|
||||||
|
#define assert(e) do { \
|
||||||
|
if (!(e)) { \
|
||||||
|
malloc_printf( \
|
||||||
|
"<jemalloc>: %s:%d: Failed assertion: \"%s\"\n", \
|
||||||
|
__FILE__, __LINE__, #e); \
|
||||||
|
abort(); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define not_reached() do { \
|
||||||
|
malloc_printf( \
|
||||||
|
"<jemalloc>: %s:%d: Unreachable code reached\n", \
|
||||||
|
__FILE__, __LINE__); \
|
||||||
|
abort(); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define not_implemented() do { \
|
||||||
|
malloc_printf("<jemalloc>: %s:%d: Not implemented\n", \
|
||||||
|
__FILE__, __LINE__); \
|
||||||
|
abort(); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define assert_not_implemented(e) do { \
|
||||||
|
if (!(e)) \
|
||||||
|
not_implemented(); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
* For unit tests, expose all public and private interfaces.
|
||||||
|
*/
|
||||||
|
#ifdef JEMALLOC_UNIT_TEST
|
||||||
|
# define JEMALLOC_JET
|
||||||
|
# include "jemalloc/internal/jemalloc_internal.h"
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
* For integration tests, expose the public jemalloc interfaces, but only
|
||||||
|
* expose the minimum necessary internal utility code (to avoid re-implementing
|
||||||
|
* essentially identical code within the test infrastructure).
|
||||||
|
*/
|
||||||
|
#elif defined(JEMALLOC_INTEGRATION_TEST)
|
||||||
|
# define JEMALLOC_MANGLE
|
||||||
|
# include "jemalloc/jemalloc@install_suffix@.h"
|
||||||
|
# include "jemalloc/internal/jemalloc_internal_defs.h"
|
||||||
|
|
||||||
|
# define JEMALLOC_N(n) @private_namespace@##n
|
||||||
|
# include "jemalloc/internal/private_namespace.h"
|
||||||
|
|
||||||
|
# include <inttypes.h>
|
||||||
|
# include <stdarg.h>
|
||||||
|
# include <errno.h>
|
||||||
|
# define JEMALLOC_CC_SILENCE
|
||||||
|
# define JEMALLOC_H_TYPES
|
||||||
|
# define JEMALLOC_H_STRUCTS
|
||||||
|
# define JEMALLOC_H_EXTERNS
|
||||||
|
# define JEMALLOC_H_INLINES
|
||||||
|
# include "jemalloc/internal/util.h"
|
||||||
|
# undef JEMALLOC_H_TYPES
|
||||||
|
# undef JEMALLOC_H_STRUCTS
|
||||||
|
# undef JEMALLOC_H_EXTERNS
|
||||||
|
# undef JEMALLOC_H_INLINES
|
||||||
|
# undef JEMALLOC_CC_SILENCE
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
* For stress tests, expose the public jemalloc interfaces with name mangling
|
||||||
|
* so that they can be tested as e.g. malloc() and free(). Also expose the
|
||||||
|
* public jemalloc interfaces with jet_ prefixes, so that stress tests can use
|
||||||
|
* a separate allocator for their internal data structures.
|
||||||
|
*/
|
||||||
|
#elif defined(JEMALLOC_STRESS_TEST)
|
||||||
|
# define JEMALLOC_NO_DEMANGLE
|
||||||
|
# include "jemalloc/jemalloc@install_suffix@.h"
|
||||||
|
# include "jemalloc/internal/public_unnamespace.h"
|
||||||
|
# undef JEMALLOC_NO_DEMANGLE
|
||||||
|
|
||||||
|
# include "jemalloc/jemalloc_protos_jet.h"
|
||||||
|
|
||||||
|
# define JEMALLOC_JET
|
||||||
|
# include "jemalloc/internal/jemalloc_internal.h"
|
||||||
|
# include "jemalloc/internal/public_unnamespace.h"
|
||||||
|
# undef JEMALLOC_JET
|
||||||
|
|
||||||
|
# define JEMALLOC_MANGLE
|
||||||
|
# include "jemalloc/jemalloc_mangle@install_suffix@.h"
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
* This header does dangerous things, the effects of which only test code
|
||||||
|
* should be subject to.
|
||||||
|
*/
|
||||||
|
#else
|
||||||
|
# error "This header cannot be included outside a testing context"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/******************************************************************************/
|
||||||
|
/*
|
||||||
|
* Common test utilities.
|
||||||
|
*/
|
||||||
|
#include "test/test.h"
|
||||||
|
#include "test/thread.h"
|
2
test/include/test/test.h
Normal file
2
test/include/test/test.h
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
void test_fail(const char *format, ...) JEMALLOC_ATTR(format(printf, 1, 2));
|
||||||
|
void test_skip(const char *format, ...) JEMALLOC_ATTR(format(printf, 1, 2));
|
12
test/include/test/thread.h
Normal file
12
test/include/test/thread.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
/* Abstraction layer for threading in tests */
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
typedef HANDLE je_thread_t;
|
||||||
|
#else
|
||||||
|
#include <pthread.h>
|
||||||
|
typedef pthread_t je_thread_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void je_thread_create(je_thread_t *thread, void *(*proc)(void *), void *arg);
|
||||||
|
void je_thread_join(je_thread_t thread, void **ret);
|
@ -1,5 +1,4 @@
|
|||||||
#define JEMALLOC_MANGLE
|
#include "test/jemalloc_test.h"
|
||||||
#include "jemalloc_test.h"
|
|
||||||
|
|
||||||
#define NTHREADS 10
|
#define NTHREADS 10
|
||||||
|
|
@ -1,5 +1,4 @@
|
|||||||
#define JEMALLOC_MANGLE
|
#include "test/jemalloc_test.h"
|
||||||
#include "jemalloc_test.h"
|
|
||||||
|
|
||||||
#define CHUNK 0x400000
|
#define CHUNK 0x400000
|
||||||
/* #define MAXALIGN ((size_t)UINT64_C(0x80000000000)) */
|
/* #define MAXALIGN ((size_t)UINT64_C(0x80000000000)) */
|
||||||
@ -96,10 +95,9 @@ main(void)
|
|||||||
char buf[BUFERROR_BUF];
|
char buf[BUFERROR_BUF];
|
||||||
|
|
||||||
buferror(buf, sizeof(buf));
|
buferror(buf, sizeof(buf));
|
||||||
malloc_printf(
|
test_fail(
|
||||||
"Error for size %zu (%#zx): %s\n",
|
"Error for size %zu (%#zx): %s\n",
|
||||||
size, size, buf);
|
size, size, buf);
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
total += malloc_usable_size(ps[i]);
|
total += malloc_usable_size(ps[i]);
|
||||||
if (total >= (MAXALIGN << 1))
|
if (total >= (MAXALIGN << 1))
|
@ -1,5 +1,4 @@
|
|||||||
#define JEMALLOC_MANGLE
|
#include "test/jemalloc_test.h"
|
||||||
#include "jemalloc_test.h"
|
|
||||||
|
|
||||||
void *
|
void *
|
||||||
je_thread_start(void *arg)
|
je_thread_start(void *arg)
|
||||||
@ -18,9 +17,8 @@ je_thread_start(void *arg)
|
|||||||
#endif
|
#endif
|
||||||
goto label_return;
|
goto label_return;
|
||||||
}
|
}
|
||||||
malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
|
test_fail("%s(): Error in mallctl(): %s\n", __func__,
|
||||||
strerror(err));
|
strerror(err));
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
sz = sizeof(ap0);
|
sz = sizeof(ap0);
|
||||||
if ((err = mallctl("thread.allocatedp", &ap0, &sz, NULL, 0))) {
|
if ((err = mallctl("thread.allocatedp", &ap0, &sz, NULL, 0))) {
|
||||||
@ -30,9 +28,8 @@ je_thread_start(void *arg)
|
|||||||
#endif
|
#endif
|
||||||
goto label_return;
|
goto label_return;
|
||||||
}
|
}
|
||||||
malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
|
test_fail("%s(): Error in mallctl(): %s\n", __func__,
|
||||||
strerror(err));
|
strerror(err));
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
assert(*ap0 == a0);
|
assert(*ap0 == a0);
|
||||||
|
|
||||||
@ -44,9 +41,8 @@ je_thread_start(void *arg)
|
|||||||
#endif
|
#endif
|
||||||
goto label_return;
|
goto label_return;
|
||||||
}
|
}
|
||||||
malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
|
test_fail("%s(): Error in mallctl(): %s\n", __func__,
|
||||||
strerror(err));
|
strerror(err));
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
sz = sizeof(dp0);
|
sz = sizeof(dp0);
|
||||||
if ((err = mallctl("thread.deallocatedp", &dp0, &sz, NULL, 0))) {
|
if ((err = mallctl("thread.deallocatedp", &dp0, &sz, NULL, 0))) {
|
||||||
@ -56,17 +52,14 @@ je_thread_start(void *arg)
|
|||||||
#endif
|
#endif
|
||||||
goto label_return;
|
goto label_return;
|
||||||
}
|
}
|
||||||
malloc_printf("%s(): Error in mallctl(): %s\n", __func__,
|
test_fail("%s(): Error in mallctl(): %s\n", __func__,
|
||||||
strerror(err));
|
strerror(err));
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
assert(*dp0 == d0);
|
assert(*dp0 == d0);
|
||||||
|
|
||||||
p = malloc(1);
|
p = malloc(1);
|
||||||
if (p == NULL) {
|
if (p == NULL)
|
||||||
malloc_printf("%s(): Error in malloc()\n", __func__);
|
test_fail("%s(): Error in malloc()\n", __func__);
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
sz = sizeof(a1);
|
sz = sizeof(a1);
|
||||||
mallctl("thread.allocated", &a1, &sz, NULL, 0);
|
mallctl("thread.allocated", &a1, &sz, NULL, 0);
|
@ -1,5 +1,4 @@
|
|||||||
#define JEMALLOC_MANGLE
|
#include "test/jemalloc_test.h"
|
||||||
#include "jemalloc_test.h"
|
|
||||||
|
|
||||||
#define CHUNK 0x400000
|
#define CHUNK 0x400000
|
||||||
/* #define MAXALIGN ((size_t)UINT64_C(0x80000000000)) */
|
/* #define MAXALIGN ((size_t)UINT64_C(0x80000000000)) */
|
||||||
@ -144,21 +143,19 @@ main(void)
|
|||||||
r = nallocm(&nsz, sz,
|
r = nallocm(&nsz, sz,
|
||||||
ALLOCM_ALIGN(alignment) | ALLOCM_ZERO);
|
ALLOCM_ALIGN(alignment) | ALLOCM_ZERO);
|
||||||
if (r != ALLOCM_SUCCESS) {
|
if (r != ALLOCM_SUCCESS) {
|
||||||
malloc_printf(
|
test_fail(
|
||||||
"nallocm() error for size %zu"
|
"nallocm() error for size %zu"
|
||||||
" (%#zx): %d\n",
|
" (%#zx): %d\n",
|
||||||
sz, sz, r);
|
sz, sz, r);
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
rsz = 0;
|
rsz = 0;
|
||||||
r = allocm(&ps[i], &rsz, sz,
|
r = allocm(&ps[i], &rsz, sz,
|
||||||
ALLOCM_ALIGN(alignment) | ALLOCM_ZERO);
|
ALLOCM_ALIGN(alignment) | ALLOCM_ZERO);
|
||||||
if (r != ALLOCM_SUCCESS) {
|
if (r != ALLOCM_SUCCESS) {
|
||||||
malloc_printf(
|
test_fail(
|
||||||
"allocm() error for size %zu"
|
"allocm() error for size %zu"
|
||||||
" (%#zx): %d\n",
|
" (%#zx): %d\n",
|
||||||
sz, sz, r);
|
sz, sz, r);
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
if (rsz < sz) {
|
if (rsz < sz) {
|
||||||
malloc_printf(
|
malloc_printf(
|
@ -6,7 +6,7 @@
|
|||||||
#include "jemalloc/jemalloc@install_suffix@.h"
|
#include "jemalloc/jemalloc@install_suffix@.h"
|
||||||
#include "jemalloc/internal/jemalloc_internal.h"
|
#include "jemalloc/internal/jemalloc_internal.h"
|
||||||
|
|
||||||
/* Abstraction layer for threading in tests */
|
/* Abstraction layer for threading in tests. */
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
|
||||||
@ -17,15 +17,14 @@ je_thread_create(je_thread_t *thread, void *(*proc)(void *), void *arg)
|
|||||||
{
|
{
|
||||||
LPTHREAD_START_ROUTINE routine = (LPTHREAD_START_ROUTINE)proc;
|
LPTHREAD_START_ROUTINE routine = (LPTHREAD_START_ROUTINE)proc;
|
||||||
*thread = CreateThread(NULL, 0, routine, arg, 0, NULL);
|
*thread = CreateThread(NULL, 0, routine, arg, 0, NULL);
|
||||||
if (*thread == NULL) {
|
if (*thread == NULL)
|
||||||
malloc_printf("Error in CreateThread()\n");
|
test_fail("Error in CreateThread()\n");
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
je_thread_join(je_thread_t thread, void **ret)
|
je_thread_join(je_thread_t thread, void **ret)
|
||||||
{
|
{
|
||||||
|
|
||||||
WaitForSingleObject(thread, INFINITE);
|
WaitForSingleObject(thread, INFINITE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,10 +37,8 @@ void
|
|||||||
je_thread_create(je_thread_t *thread, void *(*proc)(void *), void *arg)
|
je_thread_create(je_thread_t *thread, void *(*proc)(void *), void *arg)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (pthread_create(thread, NULL, proc, arg) != 0) {
|
if (pthread_create(thread, NULL, proc, arg) != 0)
|
||||||
malloc_printf("Error in pthread_create()\n");
|
test_fail("Error in pthread_create()\n");
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
@ -1,5 +1,4 @@
|
|||||||
#define JEMALLOC_MANGLE
|
#include "test/jemalloc_test.h"
|
||||||
#include "jemalloc_test.h"
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main(void)
|
main(void)
|
@ -1,5 +1,4 @@
|
|||||||
#define JEMALLOC_MANGLE
|
#include "test/jemalloc_test.h"
|
||||||
#include "jemalloc_test.h"
|
|
||||||
|
|
||||||
#define CHUNK 0x400000
|
#define CHUNK 0x400000
|
||||||
/* #define MAXALIGN ((size_t)UINT64_C(0x80000000000)) */
|
/* #define MAXALIGN ((size_t)UINT64_C(0x80000000000)) */
|
||||||
@ -92,10 +91,9 @@ main(void)
|
|||||||
err = posix_memalign(&ps[i],
|
err = posix_memalign(&ps[i],
|
||||||
alignment, size);
|
alignment, size);
|
||||||
if (err) {
|
if (err) {
|
||||||
malloc_printf(
|
test_fail(
|
||||||
"Error for size %zu (%#zx): %s\n",
|
"Error for size %zu (%#zx): %s\n",
|
||||||
size, size, strerror(err));
|
size, size, strerror(err));
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
total += malloc_usable_size(ps[i]);
|
total += malloc_usable_size(ps[i]);
|
||||||
if (total >= (MAXALIGN << 1))
|
if (total >= (MAXALIGN << 1))
|
@ -1,5 +1,6 @@
|
|||||||
#define JEMALLOC_MANGLE
|
#include <unistd.h>
|
||||||
#include "jemalloc_test.h"
|
|
||||||
|
#include "test/jemalloc_test.h"
|
||||||
|
|
||||||
int
|
int
|
||||||
main(void)
|
main(void)
|
@ -1,5 +1,4 @@
|
|||||||
#define JEMALLOC_MANGLE
|
#include "test/jemalloc_test.h"
|
||||||
#include "jemalloc_test.h"
|
|
||||||
|
|
||||||
#define NTHREADS 10
|
#define NTHREADS 10
|
||||||
|
|
@ -1,5 +1,4 @@
|
|||||||
#define JEMALLOC_MANGLE
|
#include "test/jemalloc_test.h"
|
||||||
#include "jemalloc_test.h"
|
|
||||||
|
|
||||||
void *
|
void *
|
||||||
je_thread_start(void *arg)
|
je_thread_start(void *arg)
|
28
test/src/test.c
Normal file
28
test/src/test.c
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#include "test/jemalloc_test.h"
|
||||||
|
|
||||||
|
#define JEMALLOC_TEST_EXIT_FAIL 1
|
||||||
|
#define JEMALLOC_TEST_EXIT_SKIP 2
|
||||||
|
|
||||||
|
JEMALLOC_ATTR(format(printf, 1, 2))
|
||||||
|
void
|
||||||
|
test_fail(const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start(ap, format);
|
||||||
|
malloc_vcprintf(NULL, NULL, format, ap);
|
||||||
|
va_end(ap);
|
||||||
|
exit(JEMALLOC_TEST_EXIT_FAIL);
|
||||||
|
}
|
||||||
|
|
||||||
|
JEMALLOC_ATTR(format(printf, 1, 2))
|
||||||
|
void
|
||||||
|
test_skip(const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list ap;
|
||||||
|
|
||||||
|
va_start(ap, format);
|
||||||
|
malloc_vcprintf(NULL, NULL, format, ap);
|
||||||
|
va_end(ap);
|
||||||
|
exit(JEMALLOC_TEST_EXIT_SKIP);
|
||||||
|
}
|
35
test/src/thread.c
Normal file
35
test/src/thread.c
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
#include "test/jemalloc_test.h"
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
void
|
||||||
|
je_thread_create(je_thread_t *thread, void *(*proc)(void *), void *arg)
|
||||||
|
{
|
||||||
|
LPTHREAD_START_ROUTINE routine = (LPTHREAD_START_ROUTINE)proc;
|
||||||
|
*thread = CreateThread(NULL, 0, routine, arg, 0, NULL);
|
||||||
|
if (*thread == NULL)
|
||||||
|
test_fail("Error in CreateThread()\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
je_thread_join(je_thread_t thread, void **ret)
|
||||||
|
{
|
||||||
|
|
||||||
|
WaitForSingleObject(thread, INFINITE);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
void
|
||||||
|
je_thread_create(je_thread_t *thread, void *(*proc)(void *), void *arg)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (pthread_create(thread, NULL, proc, arg) != 0)
|
||||||
|
test_fail("Error in pthread_create()\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
je_thread_join(je_thread_t thread, void **ret)
|
||||||
|
{
|
||||||
|
|
||||||
|
pthread_join(thread, ret);
|
||||||
|
}
|
||||||
|
#endif
|
37
test/test.sh.in
Normal file
37
test/test.sh.in
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
case @abi@ in
|
||||||
|
macho)
|
||||||
|
export DYLD_FALLBACK_LIBRARY_PATH="@objroot@lib"
|
||||||
|
;;
|
||||||
|
pecoff)
|
||||||
|
export PATH="${PATH}:@objroot@lib"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
total=0
|
||||||
|
failures=0
|
||||||
|
echo "========================================="
|
||||||
|
for t in $@; do
|
||||||
|
total=`expr $total + 1`
|
||||||
|
/bin/echo -n "${t} ... "
|
||||||
|
${t}@exe@ @abs_srcroot@ @abs_objroot@ > @objroot@${t}.out 2>&1
|
||||||
|
result=$?
|
||||||
|
if [ -e "@srcroot@${t}.exp" ] ; then
|
||||||
|
diff -w -u @srcroot@${t}.exp @objroot@${t}.out >/dev/null 2>&1
|
||||||
|
fail=$?
|
||||||
|
if [ "${fail}" -eq "1" ] ; then
|
||||||
|
failures=`expr ${failures} + 1`
|
||||||
|
echo "*** FAIL ***"
|
||||||
|
else
|
||||||
|
echo "pass"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "*** FAIL *** (.exp file is missing)"
|
||||||
|
failures=`expr ${failures} + 1`
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "========================================="
|
||||||
|
echo "Failures: ${failures}/${total}"
|
@ -1,5 +1,4 @@
|
|||||||
#define JEMALLOC_MANGLE
|
#include "test/jemalloc_test.h"
|
||||||
#include "jemalloc_test.h"
|
|
||||||
|
|
||||||
#if (LG_BITMAP_MAXBITS > 12)
|
#if (LG_BITMAP_MAXBITS > 12)
|
||||||
# define MAXBITS 4500
|
# define MAXBITS 4500
|
||||||
@ -37,7 +36,6 @@ test_bitmap_init(void)
|
|||||||
for (j = 0; j < i; j++)
|
for (j = 0; j < i; j++)
|
||||||
assert(bitmap_get(bitmap, &binfo, j) == false);
|
assert(bitmap_get(bitmap, &binfo, j) == false);
|
||||||
free(bitmap);
|
free(bitmap);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user