blob: 26e3054c4b28a832076a1af18a7771e17e4f1cc4 (
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
|
/*
* %CopyrightBegin%
*
* Copyright Ericsson AB 1999-2010. 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%
*/
#ifndef _BEAM_LOAD_H
# define _BEAM_LOAD_H
#include "beam_opcodes.h"
#include "erl_process.h"
int beam_make_current_old(Process *c_p, ErtsProcLocks c_p_locks, Eterm module);
typedef struct gen_op_entry {
char* name;
int arity;
int specific;
int num_specific;
int transform;
int min_window;
} GenOpEntry;
extern GenOpEntry gen_opc[];
#ifdef NO_JUMP_TABLE
#define BeamOp(Op) (Op)
#else
extern void** beam_ops;
#define BeamOp(Op) beam_ops[(Op)]
#endif
extern BeamInstr beam_debug_apply[];
extern BeamInstr* em_call_error_handler;
extern BeamInstr* em_apply_bif;
extern BeamInstr* em_call_traced_function;
typedef struct {
BeamInstr* start; /* Pointer to start of module. */
BeamInstr* end; /* Points one word beyond last function in module. */
} Range;
/*
* The following variables keep a sorted list of address ranges for
* each module. It allows us to quickly find a function given an
* instruction pointer.
*/
extern Range* modules;
extern int num_loaded_modules;
extern int allocated_modules;
extern Range* mid_module;
/* Total code size in bytes */
extern Uint erts_total_code_size;
/*
* Index into start of code chunks which contains additional information
* about the loaded module.
*
* First number of functions.
*/
#define MI_NUM_FUNCTIONS 0
/*
* The attributes retrieved by Mod:module_info(attributes).
*/
#define MI_ATTR_PTR 1
#define MI_ATTR_SIZE 2
#define MI_ATTR_SIZE_ON_HEAP 3
/*
* The compilation information retrieved by Mod:module_info(compile).
*/
#define MI_COMPILE_PTR 4
#define MI_COMPILE_SIZE 5
#define MI_COMPILE_SIZE_ON_HEAP 6
/*
* Number of breakpoints in module is stored in this word
*/
#define MI_NUM_BREAKPOINTS 7
/*
* Literal area (constant pool).
*/
#define MI_LITERALS_START 8
#define MI_LITERALS_END 9
/*
* Pointer to the on_load function (or NULL if none).
*/
#define MI_ON_LOAD_FUNCTION_PTR 10
/*
* Start of function pointer table. This table contains pointers to
* all functions in the module plus an additional pointer just beyond
* the end of the last function.
*
* The actual loaded code (for the first function) start just beyond
* this table.
*/
#define MI_FUNCTIONS 11
#endif /* _BEAM_LOAD_H */
|