Merge pull request #5714 from alexischr/update_bockbuild
[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 #if defined(TARGET_AMD64) && !defined(HOST_WIN32) && !defined(__APPLE__)
26 #define USE_ELF_WRITER 1
27 #define USE_ELF_RELA 1
28 #endif
29
30 #if defined(TARGET_X86) && !defined(HOST_WIN32) && !defined(__APPLE__)
31 #define USE_ELF_WRITER 1
32 #endif
33
34 #if defined(TARGET_ARM) && !defined(TARGET_MACH) && !defined(HOST_WIN32)
35 //#define USE_ELF_WRITER 1
36 #endif
37
38 #if defined(__mips__)
39 #define USE_ELF_WRITER 1
40 #endif
41
42 #if defined(TARGET_X86) && defined(__APPLE__)
43 //#define USE_MACH_WRITER
44 #endif
45
46 #if defined(USE_ELF_WRITER) || defined(USE_MACH_WRITER)
47 #define USE_BIN_WRITER 1
48 #endif
49
50 /* Relocation types */
51 #define R_ARM_CALL 28
52 #define R_ARM_JUMP24 29
53 #define R_ARM_ALU_PC_G0_NC 59
54
55 gboolean mono_bin_writer_supported (void);
56
57 MonoImageWriter* mono_img_writer_create (FILE *fp, gboolean use_bin_writer);
58
59 void mono_img_writer_destroy (MonoImageWriter *w);
60
61 void mono_img_writer_emit_start (MonoImageWriter *w);
62
63 int mono_img_writer_emit_writeout (MonoImageWriter *w);
64
65 guint8* mono_img_writer_get_output (MonoImageWriter *acfg, guint32 *size);
66
67 void mono_img_writer_emit_section_change (MonoImageWriter *w, const char *section_name, int subsection_index);
68
69 void mono_img_writer_emit_push_section (MonoImageWriter *w, const char *section_name, int subsection);
70
71 void mono_img_writer_emit_pop_section (MonoImageWriter *w);
72
73 void mono_img_writer_set_section_addr (MonoImageWriter *acfg, guint64 addr);
74
75 void mono_img_writer_emit_global (MonoImageWriter *w, const char *name, gboolean func);
76
77 void mono_img_writer_emit_local_symbol (MonoImageWriter *w, const char *name, const char *end_label, gboolean func);
78
79 void mono_img_writer_emit_symbol_size (MonoImageWriter *w, const char *start, const char *end_label);
80
81 void mono_img_writer_emit_label (MonoImageWriter *w, const char *name);
82
83 void mono_img_writer_emit_bytes (MonoImageWriter *w, const guint8* buf, int size);
84
85 void mono_img_writer_emit_string (MonoImageWriter *w, const char *value);
86
87 void mono_img_writer_emit_line (MonoImageWriter *w);
88
89 void mono_img_writer_emit_alignment (MonoImageWriter *w, int size);
90
91 void mono_img_writer_emit_alignment_fill (MonoImageWriter *w, int size, int fill);
92
93 void mono_img_writer_emit_pointer_unaligned (MonoImageWriter *w, const char *target);
94
95 void mono_img_writer_emit_pointer (MonoImageWriter *w, const char *target);
96
97 void mono_img_writer_emit_int16 (MonoImageWriter *w, int value);
98
99 void mono_img_writer_emit_int32 (MonoImageWriter *w, int value);
100
101 void mono_img_writer_emit_symbol_diff (MonoImageWriter *w, const char *end, const char* start, int offset);
102
103 void mono_img_writer_emit_zero_bytes (MonoImageWriter *w, int num);
104
105 void mono_img_writer_emit_global (MonoImageWriter *w, const char *name, gboolean func);
106
107 void mono_img_writer_emit_byte (MonoImageWriter *w, guint8 val);
108
109 void mono_img_writer_emit_reloc (MonoImageWriter *acfg, int reloc_type, const char *symbol, int addend);
110
111 void mono_img_writer_emit_unset_mode (MonoImageWriter *acfg);
112
113 gboolean mono_img_writer_subsections_supported (MonoImageWriter *acfg);
114
115 FILE * mono_img_writer_get_fp (MonoImageWriter *acfg);
116
117 const char *mono_img_writer_get_temp_label_prefix (MonoImageWriter *acfg);
118
119 #endif