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
bin_writer_supported (void) MONO_INTERNAL
;
31 MonoImageWriter
* img_writer_create (FILE *fp
, gboolean use_bin_writer
) MONO_INTERNAL
;
33 void img_writer_destroy (MonoImageWriter
*w
) MONO_INTERNAL
;
35 void img_writer_emit_start (MonoImageWriter
*w
) MONO_INTERNAL
;
37 int img_writer_emit_writeout (MonoImageWriter
*w
) MONO_INTERNAL
;
39 guint8
* img_writer_get_output (MonoImageWriter
*acfg
, guint32
*size
) MONO_INTERNAL
;
41 void img_writer_emit_section_change (MonoImageWriter
*w
, const char *section_name
, int subsection_index
) MONO_INTERNAL
;
43 void img_writer_emit_push_section (MonoImageWriter
*w
, const char *section_name
, int subsection
) MONO_INTERNAL
;
45 void img_writer_emit_pop_section (MonoImageWriter
*w
) MONO_INTERNAL
;
47 void img_writer_set_section_addr (MonoImageWriter
*acfg
, guint64 addr
) MONO_INTERNAL
;
49 void img_writer_emit_global (MonoImageWriter
*w
, const char *name
, gboolean func
) MONO_INTERNAL
;
51 void img_writer_emit_local_symbol (MonoImageWriter
*w
, const char *name
, const char *end_label
, gboolean func
) MONO_INTERNAL
;
53 void img_writer_emit_symbol_size (MonoImageWriter
*w
, const char *start
, const char *end_label
);
55 void img_writer_emit_label (MonoImageWriter
*w
, const char *name
) MONO_INTERNAL
;
57 void img_writer_emit_bytes (MonoImageWriter
*w
, const guint8
* buf
, int size
) MONO_INTERNAL
;
59 void img_writer_emit_string (MonoImageWriter
*w
, const char *value
) MONO_INTERNAL
;
61 void img_writer_emit_line (MonoImageWriter
*w
) MONO_INTERNAL
;
63 void img_writer_emit_alignment (MonoImageWriter
*w
, int size
) MONO_INTERNAL
;
65 #ifdef __native_client_codegen__
66 void img_writer_emit_nacl_call_alignment (MonoImageWriter
*w
) MONO_INTERNAL
;
69 void img_writer_emit_pointer_unaligned (MonoImageWriter
*w
, const char *target
) MONO_INTERNAL
;
71 void img_writer_emit_pointer (MonoImageWriter
*w
, const char *target
) MONO_INTERNAL
;
73 void img_writer_emit_int16 (MonoImageWriter
*w
, int value
) MONO_INTERNAL
;
75 void img_writer_emit_int32 (MonoImageWriter
*w
, int value
) MONO_INTERNAL
;
77 void img_writer_emit_symbol_diff (MonoImageWriter
*w
, const char *end
, const char* start
, int offset
) MONO_INTERNAL
;
79 void img_writer_emit_zero_bytes (MonoImageWriter
*w
, int num
) MONO_INTERNAL
;
81 void img_writer_emit_global (MonoImageWriter
*w
, const char *name
, gboolean func
) MONO_INTERNAL
;
83 void img_writer_emit_byte (MonoImageWriter
*w
, guint8 val
) MONO_INTERNAL
;
85 void img_writer_emit_reloc (MonoImageWriter
*acfg
, int reloc_type
, const char *symbol
, int addend
) MONO_INTERNAL
;
87 void img_writer_emit_unset_mode (MonoImageWriter
*acfg
) MONO_INTERNAL
;
89 gboolean
img_writer_subsections_supported (MonoImageWriter
*acfg
) MONO_INTERNAL
;
91 FILE * img_writer_get_fp (MonoImageWriter
*acfg
) MONO_INTERNAL
;
93 const char *img_writer_get_temp_label_prefix (MonoImageWriter
*acfg
) MONO_INTERNAL
;