aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_alloc.types
diff options
context:
space:
mode:
Diffstat (limited to 'erts/emulator/beam/erl_alloc.types')
-rw-r--r--erts/emulator/beam/erl_alloc.types383
1 files changed, 383 insertions, 0 deletions
diff --git a/erts/emulator/beam/erl_alloc.types b/erts/emulator/beam/erl_alloc.types
new file mode 100644
index 0000000000..f701f71c7d
--- /dev/null
+++ b/erts/emulator/beam/erl_alloc.types
@@ -0,0 +1,383 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2003-2009. All Rights Reserved.
+#
+# The contents of this file are subject to the Erlang Public License,
+# Version 1.1, (the "License"); you may not use this file except in
+# compliance with the License. You should have received a copy of the
+# Erlang Public License along with this software. If not, it can be
+# retrieved online at http://www.erlang.org/.
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+# the License for the specific language governing rights and limitations
+# under the License.
+#
+# %CopyrightEnd%
+#
+
+#
+# Rules:
+# * Types, allocators, and classes can be declared.
+# * Types, allocators, classes, and descriptions can only contain
+# alphanumeric characters.
+# * Allocators and classes have to be declared before they are used in
+# type declarations.
+# * Descriptions have only one name space (i.e. class descriptions,
+# allocator descriptions, and type descriptions are all in the same
+# name space).
+# * Types, allocators, classes, and descriptions have different name
+# spaces.
+# * The type, allocator, and class names INVALID are reserved and can
+# not be used.
+# * The descriptions invalid_allocator, invalid_class, and invalid_type
+# are reserved and can not be used.
+# * Declarations can be done conditionally by use of a
+# +if <boolean_variable>
+#
+# +else
+#
+# +endif
+# or a
+# +ifnot <boolean_variable>
+#
+# +else
+#
+# +endif
+# construct (else branches are optional). The boolean variable X is
+# true after a "+enable X" statement or if it has been passed as a
+# command line argument to make_alloc_types. The variable X is false
+# after a "+disable X" statement or if it has never been mentioned.
+
+
+# --- Allocator declarations -------------------------------------------------
+#
+# If, and only if, the same thread performes *all* allocations,
+# reallocations and deallocations of all memory types that are handled
+# by a specific allocator (<ALLOCATOR> in type declaration), set
+# <MULTI_THREAD> for this specific allocator to false; otherwise, set
+# it to true.
+#
+# Syntax: allocator <ALLOCATOR> <MULTI_THREAD> <DESCRIPTION>
+#
+# <ALLOCATOR> <MULTI_THREAD> <DESCRIPTION>
+
+allocator SYSTEM true sys_alloc
+
++if smp
+
+allocator TEMPORARY true temp_alloc
+allocator SHORT_LIVED true sl_alloc
+allocator STANDARD true std_alloc
+allocator LONG_LIVED true ll_alloc
+allocator EHEAP true eheap_alloc
+allocator ETS true ets_alloc
+allocator FIXED_SIZE true fix_alloc
+
++else # Non smp build
+
+allocator TEMPORARY false temp_alloc
+allocator SHORT_LIVED false sl_alloc
+allocator STANDARD false std_alloc
+allocator LONG_LIVED false ll_alloc
+allocator EHEAP false eheap_alloc
+allocator ETS false ets_alloc
+allocator FIXED_SIZE false fix_alloc
+
++endif
+
+allocator BINARY true binary_alloc
+allocator DRIVER true driver_alloc
+
+
+# --- Class declarations -----------------------------------------------------
+#
+# Syntax: class <CLASS> <DESCRIPTION>
+#
+# <CLASS> <DESCRIPTION>
+
+class PROCESSES process_data
+class ATOM atom_data
+class CODE code_data
+class ETS ets_data
+class BINARIES binary_data
+class SYSTEM system_data
+
+# --- Type declarations ------------------------------------------------------
+#
+# Syntax: type <TYPE> <ALLOCATOR> <CLASS> <DESCRIPTION>
+#
+# Use ERTS_ALC_T_<TYPE> as first parameter to erts_alloc(), erts_alloc_fnf(),
+# erts_realloc(), erts_realloc_fnf() or erts_free() in order to allocate,
+# reallocate or deallocate a memory block of type <TYPE>.
+#
+# NOTE: Only use temp_alloc for memory types that *really* are *temporarily*
+# allocated. A good thumb rule: all memory allocated by temp_alloc
+# should be deallocated before the emulator starts executing Erlang
+# code again.
+#
+# NOTE: When adding or removing a type which uses the FIXED_SIZE allocator,
+# also add or remove initialization of the type in erts_alloc_init()
+# (erl_alloc.c).
+#
+# <TYPE> <ALLOCATOR> <CLASS> <DESCRIPTION>
+
+type PROC FIXED_SIZE PROCESSES proc
+type ATOM FIXED_SIZE ATOM atom_entry
+type EXPORT FIXED_SIZE CODE export_entry
+type MODULE FIXED_SIZE CODE module_entry
+type REG_PROC FIXED_SIZE PROCESSES reg_proc
+type LINK_LH STANDARD PROCESSES link_lh
+type MONITOR_SH FIXED_SIZE PROCESSES monitor_sh
+type MONITOR_LH STANDARD PROCESSES monitor_lh
+type NLINK_SH FIXED_SIZE PROCESSES nlink_sh
+type NLINK_LH STANDARD PROCESSES nlink_lh
+type SUSPEND_MON STANDARD PROCESSES suspend_monitor
+type PEND_SUSPEND SHORT_LIVED PROCESSES pending_suspend
+type PROC_LIST SHORT_LIVED PROCESSES proc_list
+type FUN_ENTRY FIXED_SIZE CODE fun_entry
+type ATOM_TXT LONG_LIVED ATOM atom_text
+type HEAP EHEAP PROCESSES heap
+type OLD_HEAP EHEAP PROCESSES old_heap
+type HEAP_FRAG EHEAP PROCESSES heap_frag
+type TMP_HEAP TEMPORARY PROCESSES tmp_heap
+type MSG_REF SHORT_LIVED PROCESSES msg_ref
+type MSG_ROOTS TEMPORARY PROCESSES msg_roots
+type ROOTSET TEMPORARY PROCESSES root_set
+type LOADER_TMP TEMPORARY CODE loader_tmp
+type BIF_TIMER_TABLE LONG_LIVED SYSTEM bif_timer_table
+type SL_BIF_TIMER SHORT_LIVED PROCESSES bif_timer_sl
+type LL_BIF_TIMER STANDARD PROCESSES bif_timer_ll
+type REG_TABLE STANDARD SYSTEM reg_tab
+type FUN_TABLE STANDARD CODE fun_tab
+type DIST_TABLE STANDARD SYSTEM dist_tab
+type NODE_TABLE STANDARD SYSTEM node_tab
+type ATOM_TABLE LONG_LIVED ATOM atom_tab
+type EXPORT_TABLE LONG_LIVED CODE export_tab
+type MODULE_TABLE LONG_LIVED CODE module_tab
+type TAINT LONG_LIVED CODE taint_list
+type MODULE_REFS STANDARD CODE module_refs
+type NC_TMP TEMPORARY SYSTEM nc_tmp
+type TMP TEMPORARY SYSTEM tmp
+type UNDEF SYSTEM SYSTEM undefined
+type DCACHE STANDARD SYSTEM dcache
+type DCTRL_BUF TEMPORARY SYSTEM dctrl_buf
+type DIST_ENTRY STANDARD SYSTEM dist_entry
+type NODE_ENTRY STANDARD SYSTEM node_entry
+type PROC_TABLE LONG_LIVED PROCESSES proc_tab
+type PORT_TABLE LONG_LIVED SYSTEM port_tab
+type TIMER_WHEEL LONG_LIVED SYSTEM timer_wheel
+type DRV DRIVER SYSTEM drv_internal
+type DRV_BINARY BINARY BINARIES drv_binary
+type DRIVER STANDARD SYSTEM driver
+type NIF DRIVER SYSTEM nif_internal
+type BINARY BINARY BINARIES binary
+type NBIF_TABLE SYSTEM SYSTEM nbif_tab
+type CODE LONG_LIVED CODE code
+type ARG_REG STANDARD PROCESSES arg_reg
+type PROC_DICT STANDARD PROCESSES proc_dict
+type CALLS_BUF STANDARD PROCESSES calls_buf
+type BPD STANDARD SYSTEM bpd
+type PORT_NAME STANDARD SYSTEM port_name
+type LINEBUF STANDARD SYSTEM line_buf
+type IOQ STANDARD SYSTEM io_queue
+type BITS_BUF STANDARD SYSTEM bits_buf
+type TMP_DIST_BUF TEMPORARY SYSTEM tmp_dist_buf
+type ASYNC_Q LONG_LIVED SYSTEM async_queue
+type ESTACK TEMPORARY SYSTEM estack
+type PORT_CALL_BUF TEMPORARY SYSTEM port_call_buf
+type DB_TABLE FIXED_SIZE ETS db_tab
+type DB_FIXATION SHORT_LIVED ETS db_fixation
+type DB_FIX_DEL SHORT_LIVED ETS fixed_del
+type DB_TABLES LONG_LIVED ETS db_tabs
+type DB_NTAB_ENT STANDARD ETS db_named_table_entry
+type DB_TMP TEMPORARY ETS db_tmp
+type DB_MC_STK TEMPORARY ETS db_mc_stack
+type DB_MS_PSDO_PROC LONG_LIVED ETS db_match_pseudo_proc
+type DB_MS_RUN_HEAP SHORT_LIVED ETS db_match_spec_run_heap
+type DB_MS_CMPL_HEAP TEMPORARY ETS db_match_spec_cmpl_heap
+type DB_SEG ETS ETS db_segment
+type DB_SEG_TAB ETS ETS db_segment_tab
+type DB_STK ETS ETS db_stack
+type DB_TRANS_TAB ETS ETS db_trans_tab
+type DB_SEL_LIST ETS ETS db_select_list
+type DB_DMC_ERROR ETS ETS db_dmc_error
+type DB_DMC_ERR_INFO ETS ETS db_dmc_error_info
+type DB_TERM ETS ETS db_term
+type DB_PROC_CLEANUP SHORT_LIVED ETS db_proc_cleanup_state
+type INSTR_INFO LONG_LIVED SYSTEM instr_info
+type LOGGER_DSBUF TEMPORARY SYSTEM logger_dsbuf
+type TMP_DSBUF TEMPORARY SYSTEM tmp_dsbuf
+type INFO_DSBUF SYSTEM SYSTEM info_dsbuf
+# INFO_DSBUF have to use the SYSTEM allocator; otherwise, a deadlock might occur
+type SCHDLR_DATA LONG_LIVED PROCESSES scheduler_data
+type RUNQS LONG_LIVED SYSTEM run_queues
+type DDLL_PROCESS STANDARD SYSTEM ddll_processes
+type DDLL_HANDLE STANDARD SYSTEM ddll_handle
+type DDLL_ERRCODES LONG_LIVED SYSTEM ddll_errcodes
+type DDLL_TMP_BUF TEMPORARY SYSTEM ddll_tmp_buf
+type PORT_TASK SHORT_LIVED SYSTEM port_task
+type PORT_TASKQ SHORT_LIVED SYSTEM port_task_queue
+type MISC_OP_LIST SHORT_LIVED SYSTEM misc_op_list
+type PORT_NAMES SHORT_LIVED SYSTEM port_names
+type PORT_DATA_LOCK STANDARD SYSTEM port_data_lock
+type NODES_MON STANDARD PROCESSES nodes_monitor
+type PROCS_TPROC_EL SHORT_LIVED PROCESSES processes_term_proc_el
+type PROCS_CNKINF SHORT_LIVED PROCESSES processes_chunk_info
+type PROCS_PIDS SHORT_LIVED PROCESSES processes_pids
+type RE_TMP_BUF TEMPORARY SYSTEM re_tmp_buf
+type RE_SUBJECT SHORT_LIVED SYSTEM re_subject
+type RE_HEAP STANDARD SYSTEM re_heap
+type RE_STACK SHORT_LIVED SYSTEM re_stack
+type UNICODE_BUFFER SHORT_LIVED SYSTEM unicode_buffer
+type PRE_ALLOC_DATA LONG_LIVED SYSTEM pre_alloc_data
+type DRV_THR_OPTS DRIVER SYSTEM driver_thread_opts
+type DRV_TID DRIVER SYSTEM driver_tid
+type DRV_MTX DRIVER SYSTEM driver_mutex
+type DRV_CND DRIVER SYSTEM driver_cond
+type DRV_RWLCK DRIVER SYSTEM driver_rwlock
+type DRV_TSD DRIVER SYSTEM driver_tsd
+type PSD STANDARD PROCESSES process_specific_data
+type PRTSD STANDARD SYSTEM port_specific_data
+type CPUDATA LONG_LIVED SYSTEM cpu_data
+type TMP_CPU_IDS SHORT_LIVED SYSTEM tmp_cpu_ids
+type EXT_TERM_DATA SHORT_LIVED PROCESSES external_term_data
+type ZLIB STANDARD SYSTEM zlib
+
++if smp
+type ASYNC SHORT_LIVED SYSTEM async
++else
+# sl_alloc is not thread safe in non smp build; therefore, we use driver_alloc
+type ASYNC DRIVER SYSTEM async
++endif
+
++if smp
+type PORT_LOCK STANDARD SYSTEM port_lock
+type DRIVER_LOCK STANDARD SYSTEM driver_lock
+type XPORTS_LIST SHORT_LIVED SYSTEM extra_port_list
+type PROC_LCK_WTR LONG_LIVED SYSTEM proc_lock_waiter
+type PROC_LCK_QS LONG_LIVED SYSTEM proc_lock_queues
+type RUNQ_BLNS LONG_LIVED SYSTEM run_queue_balancing
++endif
+
+#
+# Types used for special emulators
+#
+
++if threads
+
+type ETHR_INTERNAL SYSTEM SYSTEM ethread_internal
+
++ifnot smp
+
+type ARCALLBACK LONG_LIVED SYSTEM async_ready_callback
+
++endif
+
++endif
+
++if shared_heap
+
+type STACK STANDARD PROCESSES stack
+type ACTIVE_PROCS STANDARD PROCESSES active_procs
+
++endif
+
++if hybrid
+
+type ACTIVE_PROCS STANDARD PROCESSES active_procs
+
+# Used for all memory involved in incremental gc of the message area
+# that is, young (x2) and old generation, forwarding pointers and blackmap
+type MESSAGE_AREA LONG_LIVED PROCESSES message_area
+
+# Used in MA_STACK (global.h) and INC_STORAGE (erl_nmgc.h)
+type OBJECT_STACK STANDARD PROCESSES object_stack
+
++endif
+
++if smp
+type SL_PTIMER SHORT_LIVED SYSTEM ptimer_sl
+type LL_PTIMER STANDARD SYSTEM ptimer_ll
+type SYS_MSG_Q SHORT_LIVED PROCESSES system_messages_queue
+type FP_EXCEPTION LONG_LIVED SYSTEM fp_exception
++endif
+
++if hipe
+
+# Currently most hipe code use this type.
+type HIPE SYSTEM SYSTEM hipe_data
+
++endif
+
++if heap_frag_elim_test
+
+type SSB SHORT_LIVED PROCESSES ssb
+
++endif
+
+
+#
+# Types used by system specific code
+#
+
+type DRV_TAB LONG_LIVED SYSTEM drv_tab
+type DRV_EV_STATE LONG_LIVED SYSTEM driver_event_state
+type DRV_EV_D_STATE FIXED_SIZE SYSTEM driver_event_data_state
+type DRV_SEL_D_STATE FIXED_SIZE SYSTEM driver_select_data_state
+type FD_LIST SHORT_LIVED SYSTEM fd_list
+type POLLSET LONG_LIVED SYSTEM pollset
+type POLLSET_UPDREQ SHORT_LIVED SYSTEM pollset_update_req
+type POLL_FDS LONG_LIVED SYSTEM poll_fds
+type POLL_RES_EVS LONG_LIVED SYSTEM poll_result_events
+type FD_STATUS LONG_LIVED SYSTEM fd_status
+
++if unix
+
+type SYS_READ_BUF TEMPORARY SYSTEM sys_read_buf
+type FD_TAB LONG_LIVED SYSTEM fd_tab
+type FD_ENTRY_BUF STANDARD SYSTEM fd_entry_buf
+type CS_PROG_PATH LONG_LIVED SYSTEM cs_prog_path
+type ENVIRONMENT TEMPORARY SYSTEM environment
+type PUTENV_STR SYSTEM SYSTEM putenv_string
+type PRT_REP_EXIT STANDARD SYSTEM port_report_exit
+
++endif
+
++if win32
+
+type DRV_DATA_BUF SYSTEM SYSTEM drv_data_buf
+type PRELOADED LONG_LIVED SYSTEM preloaded
+type PUTENV_STR SYSTEM SYSTEM putenv_string
+type WAITER_OBJ LONG_LIVED SYSTEM waiter_object
+type ENVIRONMENT SYSTEM SYSTEM environment
+type CON_VPRINTF_BUF TEMPORARY SYSTEM con_vprintf_buf
+
++endif
+
++if vxworks
+
+type SYS_TMP_BUF LONG_LIVED SYSTEM sys_tmp_buf
+type PEND_DATA SYSTEM SYSTEM pending_data
+type FD_TAB LONG_LIVED SYSTEM fd_tab
+type FD_ENTRY_BUF SYSTEM SYSTEM fd_entry_buf
+
++endif
+
++if ose
+
+type SYS_TMP_BUF LONG_LIVED SYSTEM sys_tmp_buf
+type PUTENV_STR SYSTEM SYSTEM putenv_string
+type GETENV_STR SYSTEM SYSTEM getenv_string
+type GETENV_STATE SYSTEM SYSTEM getenv_state
+type SIG_ENTRY SYSTEM SYSTEM sig_entry
+type DRIVER_DATA SYSTEM SYSTEM driver_data
+type PGM_TAB SYSTEM SYSTEM pgm_tab
+type PGM_ENTRY SYSTEM SYSTEM pgm_entry
+type PRT_TAB SYSTEM SYSTEM prt_tab
+type PRT_ENTRY SYSTEM SYSTEM prt_entry
+
++endif
+
+# ----------------------------------------------------------------------------