aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/erl_alloc.types
blob: c6cc0e1facd9146fda358390ffa05271779364c3 (plain) (blame)
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
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
#
# %CopyrightBegin%
#
# Copyright Ericsson AB 2003-2011. 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

+if halfword
allocator	LONG_LIVED_LOW	true		ll_alloc_low
allocator	STANDARD_LOW	true		std_alloc_low
+endif

+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

+if halfword
allocator	LONG_LIVED_LOW	false		ll_alloc_low
allocator	STANDARD_LOW	false		std_alloc_low
+endif

+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	MODULE		FIXED_SIZE	CODE		module_entry
type	REG_PROC	FIXED_SIZE	PROCESSES	reg_proc
type	LINK_LH		STANDARD	PROCESSES	link_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 	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		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	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_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_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	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	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	ZLIB		STANDARD	SYSTEM		zlib
type	CPU_GRPS_MAP	LONG_LIVED	SYSTEM		cpu_groups_map

+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
type	MISC_AUX_WORK_Q	LONG_LIVED	SYSTEM		misc_aux_work_q
type	MISC_AUX_WORK	SHORT_LIVED	SYSTEM		misc_aux_work
+endif

#
# Types used for special emulators
#

+if threads

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

+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


+if halfword

type	DDLL_PROCESS	STANDARD_LOW	SYSTEM		ddll_processes
type	MONITOR_LH	STANDARD_LOW	PROCESSES	monitor_lh
type	NLINK_LH	STANDARD_LOW	PROCESSES	nlink_lh
type	CODE		LONG_LIVED_LOW	CODE		code
type	DB_HEIR_DATA	STANDARD_LOW	ETS		db_heir_data
type	DB_MS_PSDO_PROC	LONG_LIVED_LOW	ETS		db_match_pseudo_proc
type	SCHDLR_DATA	LONG_LIVED_LOW	SYSTEM		scheduler_data
type  	LL_TEMP_TERM 	LONG_LIVED_LOW	SYSTEM		ll_temp_term

# no FIXED_SIZE for low memory
type	EXPORT		STANDARD_LOW	CODE		export_entry
type	MONITOR_SH	STANDARD_LOW	PROCESSES	monitor_sh
type	NLINK_SH	STANDARD_LOW	PROCESSES	nlink_sh

+else # "fullword"

type	DDLL_PROCESS	STANDARD	SYSTEM		ddll_processes
type	MONITOR_LH	STANDARD	PROCESSES	monitor_lh
type	NLINK_LH	STANDARD	PROCESSES	nlink_lh
type	CODE		LONG_LIVED	CODE		code
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  	LL_TEMP_TERM 	LONG_LIVED	SYSTEM		ll_temp_term

type	EXPORT		FIXED_SIZE	CODE		export_entry
type	MONITOR_SH	FIXED_SIZE	PROCESSES	monitor_sh
type	NLINK_SH	FIXED_SIZE	PROCESSES	nlink_sh

+endif


#
# Types used by system specific code
#

type  	TEMP_TERM 	TEMPORARY	SYSTEM		temp_term
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

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