2 * image-writer.h: Creation of object files or assembly files using the same interface.
5 * Dietmar Maurer (dietmar@ximian.com);
6 * Zoltan Varga (vargaz@gmail.com);
7 * Paolo Molaro (lupus@ximian.com);
9 * (C); 2002 Ximian, Inc.
12 #ifndef __MONO_IMAGE_WRITER_H__
13 #define __MONO_IMAGE_WRITER_H__
20 #include <mono/utils/mono-compiler.h>
22 typedef struct _MonoImageWriter MonoImageWriter
;
24 /* Relocation types */
26 #define R_ARM_JUMP24 29
27 #define R_ARM_ALU_PC_G0_NC 59
29 gboolean
mono_bin_writer_supported (void);
31 MonoImageWriter
* mono_img_writer_create (FILE *fp
, gboolean use_bin_writer
);
33 void mono_img_writer_destroy (MonoImageWriter
*w
);
35 void mono_img_writer_emit_start (MonoImageWriter
*w
);
37 int mono_img_writer_emit_writeout (MonoImageWriter
*w
);
39 guint8
* mono_img_writer_get_output (MonoImageWriter
*acfg
, guint32
*size
);
41 void mono_img_writer_emit_section_change (MonoImageWriter
*w
, const char *section_name
, int subsection_index
);
43 void mono_img_writer_emit_push_section (MonoImageWriter
*w
, const char *section_name
, int subsection
);
45 void mono_img_writer_emit_pop_section (MonoImageWriter
*w
);
47 void mono_img_writer_set_section_addr (MonoImageWriter
*acfg
, guint64 addr
);
49 void mono_img_writer_emit_global (MonoImageWriter
*w
, const char *name
, gboolean func
);
51 void mono_img_writer_emit_local_symbol (MonoImageWriter
*w
, const char *name
, const char *end_label
, gboolean func
);
53 void mono_img_writer_emit_symbol_size (MonoImageWriter
*w
, const char *start
, const char *end_label
);
55 void mono_img_writer_emit_label (MonoImageWriter
*w
, const char *name
);
57 void mono_img_writer_emit_bytes (MonoImageWriter
*w
, const guint8
* buf
, int size
);
59 void mono_img_writer_emit_string (MonoImageWriter
*w
, const char *value
);
61 void mono_img_writer_emit_line (MonoImageWriter
*w
);
63 void mono_img_writer_emit_alignment (MonoImageWriter
*w
, int size
);
65 void mono_img_writer_emit_alignment_fill (MonoImageWriter
*w
, int size
, int fill
);
67 #ifdef __native_client_codegen__
68 void mono_img_writer_emit_nacl_call_alignment (MonoImageWriter
*w
);
71 void mono_img_writer_emit_pointer_unaligned (MonoImageWriter
*w
, const char *target
);
73 void mono_img_writer_emit_pointer (MonoImageWriter
*w
, const char *target
);
75 void mono_img_writer_emit_int16 (MonoImageWriter
*w
, int value
);
77 void mono_img_writer_emit_int32 (MonoImageWriter
*w
, int value
);
79 void mono_img_writer_emit_symbol_diff (MonoImageWriter
*w
, const char *end
, const char* start
, int offset
);
81 void mono_img_writer_emit_zero_bytes (MonoImageWriter
*w
, int num
);
83 void mono_img_writer_emit_global (MonoImageWriter
*w
, const char *name
, gboolean func
);
85 void mono_img_writer_emit_byte (MonoImageWriter
*w
, guint8 val
);
87 void mono_img_writer_emit_reloc (MonoImageWriter
*acfg
, int reloc_type
, const char *symbol
, int addend
);
89 void mono_img_writer_emit_unset_mode (MonoImageWriter
*acfg
);
91 gboolean
mono_img_writer_subsections_supported (MonoImageWriter
*acfg
);
93 FILE * mono_img_writer_get_fp (MonoImageWriter
*acfg
);
95 const char *mono_img_writer_get_temp_label_prefix (MonoImageWriter
*acfg
);