3da1717d3e3d56e7791748e64c1bf88b302bed3c
[mono.git] / mono / mini / image-writer.h
1 /**
2  * \file
3  * Creation of object files or assembly files using the same interface.
4  *
5  * Author:
6  *   Dietmar Maurer (dietmar@ximian.com);
7  *   Zoltan Varga (vargaz@gmail.com);
8  *   Paolo Molaro (lupus@ximian.com);
9  *
10  * (C); 2002 Ximian, Inc.
11  */
12
13 #ifndef __MONO_IMAGE_WRITER_H__
14 #define __MONO_IMAGE_WRITER_H__
15
16 #include "config.h"
17
18 #include <glib.h>
19 #include <stdio.h>
20
21 #include <mono/utils/mono-compiler.h>
22
23 typedef struct _MonoImageWriter MonoImageWriter;
24
25 /* Relocation types */
26 #define R_ARM_CALL 28
27 #define R_ARM_JUMP24 29
28 #define R_ARM_ALU_PC_G0_NC 59
29
30 gboolean mono_bin_writer_supported (void);
31
32 MonoImageWriter* mono_img_writer_create (FILE *fp, gboolean use_bin_writer);
33
34 void mono_img_writer_destroy (MonoImageWriter *w);
35
36 void mono_img_writer_emit_start (MonoImageWriter *w);
37
38 int mono_img_writer_emit_writeout (MonoImageWriter *w);
39
40 guint8* mono_img_writer_get_output (MonoImageWriter *acfg, guint32 *size);
41
42 void mono_img_writer_emit_section_change (MonoImageWriter *w, const char *section_name, int subsection_index);
43
44 void mono_img_writer_emit_push_section (MonoImageWriter *w, const char *section_name, int subsection);
45
46 void mono_img_writer_emit_pop_section (MonoImageWriter *w);
47
48 void mono_img_writer_set_section_addr (MonoImageWriter *acfg, guint64 addr);
49
50 void mono_img_writer_emit_global (MonoImageWriter *w, const char *name, gboolean func);
51
52 void mono_img_writer_emit_local_symbol (MonoImageWriter *w, const char *name, const char *end_label, gboolean func);
53
54 void mono_img_writer_emit_symbol_size (MonoImageWriter *w, const char *start, const char *end_label);
55
56 void mono_img_writer_emit_label (MonoImageWriter *w, const char *name);
57
58 void mono_img_writer_emit_bytes (MonoImageWriter *w, const guint8* buf, int size);
59
60 void mono_img_writer_emit_string (MonoImageWriter *w, const char *value);
61
62 void mono_img_writer_emit_line (MonoImageWriter *w);
63
64 void mono_img_writer_emit_alignment (MonoImageWriter *w, int size);
65
66 void mono_img_writer_emit_alignment_fill (MonoImageWriter *w, int size, int fill);
67
68 void mono_img_writer_emit_pointer_unaligned (MonoImageWriter *w, const char *target);
69
70 void mono_img_writer_emit_pointer (MonoImageWriter *w, const char *target);
71
72 void mono_img_writer_emit_int16 (MonoImageWriter *w, int value);
73
74 void mono_img_writer_emit_int32 (MonoImageWriter *w, int value);
75
76 void mono_img_writer_emit_symbol_diff (MonoImageWriter *w, const char *end, const char* start, int offset);
77
78 void mono_img_writer_emit_zero_bytes (MonoImageWriter *w, int num);
79
80 void mono_img_writer_emit_global (MonoImageWriter *w, const char *name, gboolean func);
81
82 void mono_img_writer_emit_byte (MonoImageWriter *w, guint8 val);
83
84 void mono_img_writer_emit_reloc (MonoImageWriter *acfg, int reloc_type, const char *symbol, int addend);
85
86 void mono_img_writer_emit_unset_mode (MonoImageWriter *acfg);
87
88 gboolean mono_img_writer_subsections_supported (MonoImageWriter *acfg);
89
90 FILE * mono_img_writer_get_fp (MonoImageWriter *acfg);
91
92 const char *mono_img_writer_get_temp_label_prefix (MonoImageWriter *acfg);
93
94 #endif