Emit DWARF debug_abbrev offset for compile units as a label instead of 0 (#19794)
[mono-project.git] / mono / mini / image-writer.h
blob309ec37c059a77cfc15531e831913724d8eac692
1 /**
2 * \file
3 * Creation of object files or assembly files using the same interface.
5 * Author:
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__
16 #include "config.h"
18 #include <glib.h>
19 #include <stdio.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
28 #endif
30 #if defined(TARGET_X86) && !defined(HOST_WIN32) && !defined(__APPLE__)
31 #define USE_ELF_WRITER 1
32 #endif
34 #if defined(TARGET_ARM) && !defined(TARGET_MACH) && !defined(HOST_WIN32)
35 //#define USE_ELF_WRITER 1
36 #endif
38 #if defined(__mips__)
39 #define USE_ELF_WRITER 1
40 #endif
42 #if defined(TARGET_X86) && defined(__APPLE__)
43 //#define USE_MACH_WRITER
44 #endif
46 #if defined(USE_ELF_WRITER) || defined(USE_MACH_WRITER)
47 #define USE_BIN_WRITER 1
48 #endif
50 /* Relocation types */
51 #define R_ARM_CALL 28
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 (MonoImageWriter *w, const char *symbol);
103 void mono_img_writer_emit_symbol_diff (MonoImageWriter *w, const char *end, const char* start, int offset);
105 void mono_img_writer_emit_zero_bytes (MonoImageWriter *w, int num);
107 void mono_img_writer_emit_global (MonoImageWriter *w, const char *name, gboolean func);
109 void mono_img_writer_emit_byte (MonoImageWriter *w, guint8 val);
111 void mono_img_writer_emit_reloc (MonoImageWriter *acfg, int reloc_type, const char *symbol, int addend);
113 void mono_img_writer_emit_unset_mode (MonoImageWriter *acfg);
115 gboolean mono_img_writer_subsections_supported (MonoImageWriter *acfg);
117 FILE * mono_img_writer_get_fp (MonoImageWriter *acfg);
119 const char *mono_img_writer_get_temp_label_prefix (MonoImageWriter *acfg);
121 #endif