#if (defined(TARGET_AMD64) || defined(TARGET_POWERPC64)) && !defined(__mono_ilp32__)
#define AS_POINTER_DIRECTIVE ".quad"
+#elif defined(TARGET_ARM64)
+
+#ifdef TARGET_ASM_APPLE
+#define AS_POINTER_DIRECTIVE ".quad"
+#else
+#define AS_POINTER_DIRECTIVE ".xword"
+#endif
+
#else
#define AS_POINTER_DIRECTIVE ".long"
#endif
#define USE_ELF_WRITER 1
#endif
-#if defined(TARGET_ARM) && !defined(TARGET_MACH)
+#if defined(TARGET_ARM) && !defined(TARGET_MACH) && !defined(HOST_WIN32)
#define USE_ELF_WRITER 1
#endif
static int
bin_writer_emit_writeout (MonoImageWriter *acfg)
{
- FILE *file;
ElfHeader header;
ElfProgHeader progh [4];
ElfSectHeader secth [SECT_NUM];
ElfSymbol *symtab;
ElfDynamic dynamic [14];
int *hash;
- int i, num_sections, file_offset, virt_offset, size, num_symtab;
+ int i, num_sections, file_offset, virt_offset, size;
int num_local_syms;
- file = acfg->fp;
-
/* Section headers */
memset (§h, 0, sizeof (secth));
memset (&dynamic, 0, sizeof (dynamic));
num_sections = collect_sections (acfg, secth, all_sections, 16);
hash = build_hash (acfg, num_sections, &dyn_str_table);
- num_symtab = hash [1]; /* FIXME */
#if 0
g_print ("num_sections: %d\n", num_sections);
g_print ("dynsym: %d, dynstr size: %d\n", hash [1], (int)dyn_str_table.data->len);
fprintf (acfg->fp, ".section __DWARF, __%s,regular,debug\n", section_name + 1);
} else
fprintf (acfg->fp, "%s\n", section_name);
-#elif defined(TARGET_ARM) || defined(TARGET_POWERPC)
+#elif defined(TARGET_ARM) || defined(TARGET_ARM64) || defined(TARGET_POWERPC)
/* ARM gas doesn't seem to like subsections of .bss */
if (!strcmp (section_name, ".text") || !strcmp (section_name, ".data")) {
fprintf (acfg->fp, "%s %d\n", section_name, subsection_index);
#endif
}
+#ifndef USE_BIN_WRITER
+static void
+asm_writer_emit_alignment_fill (MonoImageWriter *acfg, int size, int fill)
+{
+ asm_writer_emit_unset_mode (acfg);
+#if defined(TARGET_ASM_APPLE)
+ fprintf (acfg->fp, "\t.align %d, 0x%0x\n", ilog2 (size), fill);
+#else
+ asm_writer_emit_alignment (acfg, size);
+#endif
+}
+#endif
+
#ifdef __native_client_codegen__
static void
asm_writer_emit_nacl_call_alignment (MonoImageWriter *acfg) {
#endif
}
+void
+img_writer_emit_alignment_fill (MonoImageWriter *acfg, int size, int fill)
+{
+#ifdef USE_BIN_WRITER
+ if (acfg->use_bin_writer)
+ bin_writer_emit_alignment (acfg, size);
+ else
+ asm_writer_emit_alignment (acfg, size);
+#else
+ asm_writer_emit_alignment_fill (acfg, size, fill);
+#endif
+}
+
#ifdef __native_client_codegen__
void
img_writer_emit_nacl_call_alignment (MonoImageWriter *acfg) {