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