summaryrefslogtreecommitdiff
path: root/erts/emulator/beam/erl_alloc.types
blob: 349977ebe75836f5bd2605a1131fc2fd7aa8c4bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
#
# %CopyrightBegin%
#
# Copyright Ericsson AB 2003-2018. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions 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
#   cannot be used.
# * The descriptions invalid_allocator, invalid_class, and invalid_type
#   are reserved and cannot 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.
#
# IMPORTANT! Only use 7-bit ascii text in this file!


# --- Allocator declarations -------------------------------------------------
#
# If, and only if, the same thread performs *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

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
allocator	LITERAL 	true		literal_alloc
+if exec_alloc
allocator	EXEC     	true	        exec_alloc
+endif

allocator	BINARY		true		binary_alloc
allocator	DRIVER		true		driver_alloc

allocator	TEST            true            test_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.
#
#	<TYPE>		<ALLOCATOR>	<CLASS>		<DESCRIPTION>

type	PROC		FIXED_SIZE	PROCESSES	proc
type	PORT		DRIVER		SYSTEM		port
type	ATOM		LONG_LIVED	ATOM		atom_entry
type	MODULE		LONG_LIVED	CODE		module_entry
type	REG_PROC	STANDARD	PROCESSES	reg_proc
type	PROC_LIST	SHORT_LIVED	PROCESSES	proc_list
type	SAVED_ESTACK	SHORT_LIVED	PROCESSES	saved_estack
type	FUN_ENTRY	LONG_LIVED	CODE		fun_entry
type	ATOM_TXT	LONG_LIVED	ATOM		atom_text
type 	BEAM_REGISTER	EHEAP		PROCESSES	beam_register
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		FIXED_SIZE	PROCESSES	msg_ref
type	MSG		EHEAP		PROCESSES	message
type	MSGQ_CHNG	SHORT_LIVED	PROCESSES	messages_queue_change
type	ROOTSET		TEMPORARY	PROCESSES	root_set
type	LOADER_TMP	TEMPORARY	CODE		loader_tmp
type	PREPARED_CODE	SHORT_LIVED	CODE		prepared_code
type	TIMER_SERVICE	LONG_LIVED	SYSTEM		timer_service
type    LL_PTIMER	FIXED_SIZE	PROCESSES	ll_ptimer
type    HL_PTIMER	FIXED_SIZE	PROCESSES	hl_ptimer
type    BIF_TIMER	FIXED_SIZE	PROCESSES	bif_timer
type    TIMER_REQUEST	SHORT_LIVED	PROCESSES	timer_request
type    BTM_YIELD_STATE	SHORT_LIVED	PROCESSES	btm_yield_state
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	NC_STD		STANDARD	SYSTEM		nc_std
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		DRIVER		SYSTEM		driver
type	DRV_CMD_DATA	DRIVER		SYSTEM		driver_command_data
type	DRV_CTRL_DATA	DRIVER		SYSTEM		driver_control_data
type	DRV_CALL_DATA	DRIVER		SYSTEM		driver_call_data
type	NIF		DRIVER		SYSTEM		nif_internal
type	BINARY		BINARY		BINARIES	binary
type	NBIF_TABLE	SYSTEM		SYSTEM		nbif_tab
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	LINEBUF		STANDARD	SYSTEM		line_buf
type	IOQ		STANDARD	SYSTEM		io_queue
type	BITS_BUF	STANDARD	SYSTEM		bits_buf
type	ASYNC_DATA	LONG_LIVED	SYSTEM		internal_async_data
type	ESTACK		TEMPORARY	SYSTEM		estack
type	DB_TABLE	ETS		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_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_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	ETS_ALL_REQ	SHORT_LIVED	ETS		ets_all_request
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_SLP_INFO	LONG_LIVED	SYSTEM		scheduler_sleep_info
type	RUNQS		LONG_LIVED	SYSTEM		run_queues
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	PT_HNDL_LIST	SHORT_LIVED	SYSTEM		port_task_handle_list
type	MISC_OP_LIST	SHORT_LIVED	SYSTEM		misc_op_list
type	PORT_NAMES	SHORT_LIVED	SYSTEM		port_names
type	PORT_DATA_LOCK	DRIVER		SYSTEM		port_data_lock
type	PTAB_LIST_DEL	SHORT_LIVED	PROCESSES	ptab_list_deleted_el
type	PTAB_LIST_CNKI	SHORT_LIVED	PROCESSES	ptab_list_chunk_info
type	PTAB_LIST_PIDS	SHORT_LIVED	PROCESSES	ptab_list_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	BINARY_BUFFER 	SHORT_LIVED	SYSTEM		binary_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	CPU_GRPS_MAP	LONG_LIVED	SYSTEM		cpu_groups_map
type	MISC_AUX_WORK_Q	LONG_LIVED	SYSTEM		misc_aux_work_q
type	CODE_IX_LOCK_Q  SHORT_LIVED	SYSTEM		code_ix_lock_q
type    BUSY_CALLER_TAB	SHORT_LIVED	SYSTEM		busy_caller_table
type    BUSY_CALLER	SHORT_LIVED	SYSTEM		busy_caller
type	PROC_SYS_TSK	SHORT_LIVED	PROCESSES	proc_sys_task
type	PROC_SYS_TSK_QS	SHORT_LIVED	PROCESSES	proc_sys_task_queues
type    NEW_TIME_OFFSET	SHORT_LIVED	SYSTEM		new_time_offset
type	IOB_REQ		SHORT_LIVED	SYSTEM		io_bytes_request
type    TRACER_NIF      LONG_LIVED      SYSTEM          tracer_nif
type    TRACE_MSG_QUEUE SHORT_LIVED     SYSTEM          trace_message_queue
type    DIRTY_SL	SHORT_LIVED	SYSTEM		dirty_short_lived
type    MREF_NSCHED_ENT	FIXED_SIZE	SYSTEM		nsched_magic_ref_entry
type    MREF_ENT	STANDARD	SYSTEM		magic_ref_entry
type	MREF_TAB_BKTS	STANDARD	SYSTEM		magic_ref_table_buckets
type	MREF_TAB	LONG_LIVED	SYSTEM		magic_ref_table
type	MINDIRECTION	FIXED_SIZE	SYSTEM		magic_indirection
type	BINARY_FIND	SHORT_LIVED	PROCESSES	binary_find
type	CRASH_DUMP	STANDARD	SYSTEM		crash_dump
type	DIST_TRANSCODE  SHORT_LIVED	SYSTEM		dist_transcode_context

type	THR_Q_EL	STANDARD   	SYSTEM		thr_q_element
type	THR_Q_EL_SL	FIXED_SIZE	SYSTEM		sl_thr_q_element
type	MISC_AUX_WORK	SHORT_LIVED	SYSTEM		misc_aux_work
type	THR_Q		STANDARD	SYSTEM		thr_queue
type	THR_Q_SL	SHORT_LIVED	SYSTEM		short_lived_thr_queue
type	THR_Q_LL	LONG_LIVED	SYSTEM		long_lived_thr_queue

type	ASYNC		SHORT_LIVED	SYSTEM		async
type	ZLIB		STANDARD	SYSTEM		zlib

type	DRIVER_LOCK	STANDARD	SYSTEM		driver_lock
type	XPORTS_LIST	SHORT_LIVED	SYSTEM		extra_port_list
type	RUNQ_BLNS	LONG_LIVED	SYSTEM		run_queue_balancing
type	THR_PRGR_IDATA	LONG_LIVED	SYSTEM		thr_prgr_internal_data
type	THR_PRGR_DATA	LONG_LIVED	SYSTEM		thr_prgr_data
type	T_THR_PRGR_DATA	SHORT_LIVED	SYSTEM		temp_thr_prgr_data
type	RELEASE_LAREA	SHORT_LIVED	SYSTEM		release_literal_area
type	SIG_DATA	SHORT_LIVED	PROCESSES	signal_data
type	DIST_DEMONITOR	SHORT_LIVED	PROCESSES	dist_demonitor
type	CML_CLEANUP	SHORT_LIVED	SYSTEM		connection_ml_cleanup
type	ML_YIELD_STATE	SHORT_LIVED	SYSTEM		monitor_link_yield_state
type	ML_DIST		STANDARD	SYSTEM		monitor_link_dist
type	PF3_ARGS	SHORT_LIVED	PROCESSES	process_flag_3_arguments
type	SETUP_CONN_ARG	SHORT_LIVED	PROCESSES	setup_connection_argument
type    LIST_TRAP       SHORT_LIVED     PROCESSES       list_bif_trap_state
type    CONT_EXIT_TRAP  SHORT_LIVED     PROCESSES       continue_exit_trap_state
type    SEQ_YIELD_STATE SHORT_LIVED     SYSTEM          dist_seq_yield_state
type    PHASH2_TRAP     SHORT_LIVED     PROCESSES       phash2_trap_state

type	ENVIRONMENT	SYSTEM		SYSTEM		environment

type	PERSISTENT_TERM	LONG_LIVED	CODE		persisten_term
type	PERSISTENT_LOCK_Q SHORT_LIVED	SYSTEM		persistent_lock_q
type	PERSISTENT_TERM_TMP SHORT_LIVED	SYSTEM		persistent_term_tmp_table

#
# Types used for special emulators
#

type	ETHR_STD	STANDARD	SYSTEM		ethread_standard
type	ETHR_SL		SHORT_LIVED	SYSTEM		ethread_short_lived
type	ETHR_LL		LONG_LIVED	SYSTEM		ethread_long_lived

type	SYS_MSG_Q	SHORT_LIVED	PROCESSES	system_messages_queue
type	FP_EXCEPTION	LONG_LIVED	SYSTEM		fp_exception
type	LL_MPATHS	LONG_LIVED	SYSTEM		ll_migration_paths
type	SL_MPATHS	SHORT_LIVED	SYSTEM		sl_migration_paths

+if hipe

type	HIPE_LL		LONG_LIVED	SYSTEM		hipe_long_lived
type	HIPE_SL		SHORT_LIVED	SYSTEM		hipe_short_lived
type	HIPE_STK	STANDARD	SYSTEM		hipe_nstack

+if exec_alloc
type	HIPE_EXEC	EXEC            CODE		hipe_code
+endif

+endif

+if lcnt

type    LCNT_CARRIER   STANDARD    SYSTEM  lcnt_lock_info_carrier
type    LCNT_VECTOR SHORT_LIVED SYSTEM lcnt_sample_vector

+endif

type	DEBUG	        SHORT_LIVED	SYSTEM          debugging

type	DDLL_PROCESS	STANDARD	SYSTEM		ddll_processes
type	MONITOR_EXT	STANDARD	PROCESSES	monitor_extended
type	LINK_EXT	STANDARD	PROCESSES	link_extended
type	CODE		LONG_LIVED	CODE		code
type	LITERAL		LITERAL 	CODE		literal
type	LITERAL_REF	SHORT_LIVED	CODE		literal_area_ref
type	PURGE_DATA	SHORT_LIVED	CODE		purge_data
type	DB_HEIR_DATA	STANDARD	ETS		db_heir_data
type	DB_MS_PSDO_PROC	LONG_LIVED	ETS		db_match_pseudo_proc
type	SCHDLR_DATA	LONG_LIVED	SYSTEM		scheduler_data

type	NIF_TRAP_EXPORT	STANDARD	PROCESSES	nif_trap_export_entry
type	NIF_EXP_TRACE	FIXED_SIZE	PROCESSES	nif_export_trace
type	EXPORT		LONG_LIVED	CODE		export_entry
type	MONITOR		FIXED_SIZE	PROCESSES	monitor
type	MONITOR_SUSPEND	STANDARD	PROCESSES	monitor_suspend
type	LINK		FIXED_SIZE	PROCESSES	link
type	AINFO_REQ	SHORT_LIVED	SYSTEM		alloc_info_request
type	SCHED_WTIME_REQ	SHORT_LIVED	SYSTEM		sched_wall_time_request
type	GC_INFO_REQ	SHORT_LIVED	SYSTEM		gc_info_request
type	PORT_DATA_HEAP	STANDARD	SYSTEM		port_data_heap
type    MSACC           DRIVER          SYSTEM          microstate_accounting
type	SYS_CHECK_REQ	SHORT_LIVED	SYSTEM		system_check_request
type	ATOMICS		STANDARD	SYSTEM		erl_bif_atomics
type	COUNTERS	STANDARD	SYSTEM		erl_bif_counters

#
# Types used by system specific code
#

type  	TEMP_TERM       	TEMPORARY	SYSTEM		temp_term
type  	SHORT_LIVED_TERM 	SHORT_LIVED	SYSTEM		short_lived_term
type	DRV_TAB		        LONG_LIVED	SYSTEM		drv_tab
type	DRV_EV_STATE	        LONG_LIVED	SYSTEM		driver_event_state
type	DRV_SEL_D_STATE	        FIXED_SIZE	SYSTEM		driver_select_data_state
type	NIF_SEL_D_STATE	        FIXED_SIZE	SYSTEM		enif_select_data_state
type	POLLSET		        LONG_LIVED	SYSTEM		pollset
type	POLLSET_UPDREQ	        SHORT_LIVED	SYSTEM		pollset_update_req
type	POLL_FDS	        LONG_LIVED	SYSTEM		poll_fds
type	FD_STATUS	        LONG_LIVED	SYSTEM		fd_status
type	SELECT_FDS	        LONG_LIVED	SYSTEM		select_fds

+if unix

type	SYS_READ_BUF	TEMPORARY	SYSTEM		sys_read_buf
type	FD_ENTRY_BUF	STANDARD	SYSTEM		fd_entry_buf
type	CS_PROG_PATH	LONG_LIVED	SYSTEM		cs_prog_path
type	SYS_BLOCKING	STANDARD	SYSTEM		sys_blocking

type	SYS_WRITE_BUF	TEMPORARY	SYSTEM		sys_write_buf

+endif

+if win32

type	DRV_DATA_BUF	SYSTEM		SYSTEM		drv_data_buf
type	PRELOADED	LONG_LIVED	SYSTEM		preloaded
type	WAITER_OBJ	LONG_LIVED	SYSTEM		waiter_object

+endif

# This type should only be used for test
type	TEST		TEST		SYSTEM		testing

# ----------------------------------------------------------------------------