3 * Creation of object files or assembly files using the same interface.
6 * Dietmar Maurer (dietmar@ximian.com);
7 * Zoltan Varga (vargaz@gmail.com);
8 * Paolo Molaro (lupus@ximian.com);
10 * (C); 2002 Ximian, Inc.
13 #ifndef __MONO_IMAGE_WRITER_H__
14 #define __MONO_IMAGE_WRITER_H__
21 #include <mono/utils/mono-compiler.h>
23 typedef struct _MonoImageWriter MonoImageWriter
;
25 #if defined(TARGET_AMD64) && !defined(HOST_WIN32) && !defined(__APPLE__)
26 #define USE_ELF_WRITER 1
27 #define USE_ELF_RELA 1
30 #if defined(TARGET_X86) && !defined(HOST_WIN32) && !defined(__APPLE__)
31 #define USE_ELF_WRITER 1
34 #if defined(TARGET_ARM) && !defined(TARGET_MACH) && !defined(HOST_WIN32)
35 //#define USE_ELF_WRITER 1
39 #define USE_ELF_WRITER 1
42 #if defined(TARGET_X86) && defined(__APPLE__)
43 //#define USE_MACH_WRITER
46 #if defined(USE_ELF_WRITER) || defined(USE_MACH_WRITER)
47 #define USE_BIN_WRITER 1
50 /* Relocation types */
52 #define R_ARM_JUMP24 29
53 #define R_ARM_ALU_PC_G0_NC 59
55 gboolean
mono_bin_writer_supported (void);
57 MonoImageWriter
* mono_img_writer_create (FILE *fp
, gboolean use_bin_writer
);
59 void mono_img_writer_destroy (MonoImageWriter
*w
);
61 void mono_img_writer_emit_start (MonoImageWriter
*w
);
63 int mono_img_writer_emit_writeout (MonoImageWriter
*w
);
65 guint8
* mono_img_writer_get_output (MonoImageWriter
*acfg
, guint32
*size
);
67 void mono_img_writer_emit_section_change (MonoImageWriter
*w
, const char *section_name
, int subsection_index
);
69 void mono_img_writer_emit_push_section (MonoImageWriter
*w
, const char *section_name
, int subsection
);
71 void mono_img_writer_emit_pop_section (MonoImageWriter
*w
);
73 void mono_img_writer_set_section_addr (MonoImageWriter
*acfg
, guint64 addr
);
75 void mono_img_writer_emit_global (MonoImageWriter
*w
, const char *name
, gboolean func
);
77 void mono_img_writer_emit_local_symbol (MonoImageWriter
*w
, const char *name
, const char *end_label
, gboolean func
);
79 void mono_img_writer_emit_symbol_size (MonoImageWriter
*w
, const char *start
, const char *end_label
);
81 void mono_img_writer_emit_label (MonoImageWriter
*w
, const char *name
);
83 void mono_img_writer_emit_bytes (MonoImageWriter
*w
, const guint8
* buf
, int size
);
85 void mono_img_writer_emit_string (MonoImageWriter
*w
, const char *value
);
87 void mono_img_writer_emit_line (MonoImageWriter
*w
);
89 void mono_img_writer_emit_alignment (MonoImageWriter
*w
, int size
);
91 void mono_img_writer_emit_alignment_fill (MonoImageWriter
*w
, int size
, int fill
);
93 void mono_img_writer_emit_pointer_unaligned (MonoImageWriter
*w
, const char *target
);
95 void mono_img_writer_emit_pointer (MonoImageWriter
*w
, const char *target
);
97 void mono_img_writer_emit_int16 (MonoImageWriter
*w
, int value
);
99 void mono_img_writer_emit_int32 (MonoImageWriter
*w
, int value
);
101 void mono_img_writer_emit_symbol_diff (MonoImageWriter
*w
, const char *end
, const char* start
, int offset
);
103 void mono_img_writer_emit_zero_bytes (MonoImageWriter
*w
, int num
);
105 void mono_img_writer_emit_global (MonoImageWriter
*w
, const char *name
, gboolean func
);
107 void mono_img_writer_emit_byte (MonoImageWriter
*w
, guint8 val
);
109 void mono_img_writer_emit_reloc (MonoImageWriter
*acfg
, int reloc_type
, const char *symbol
, int addend
);
111 void mono_img_writer_emit_unset_mode (MonoImageWriter
*acfg
);
113 gboolean
mono_img_writer_subsections_supported (MonoImageWriter
*acfg
);
115 FILE * mono_img_writer_get_fp (MonoImageWriter
*acfg
);
117 const char *mono_img_writer_get_temp_label_prefix (MonoImageWriter
*acfg
);