summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn van Groningen2011-02-03 14:37:44 +0000
committerJohn van Groningen2011-02-03 14:37:44 +0000
commit43646d288bd5ef3ad7d96f66ad4e20e72aded5b7 (patch)
tree6ff68c67ffdc95062b966355d5da0e0de98c74a6
parentadd makefile for Mac OS X (AMD64) (diff)
port stack tracing to Mac OS X (AMD64)
-rw-r--r--cgawas.c13
-rw-r--r--cgcode.c6
2 files changed, 16 insertions, 3 deletions
diff --git a/cgawas.c b/cgawas.c
index 58566b0..fff3e92 100644
--- a/cgawas.c
+++ b/cgawas.c
@@ -3939,6 +3939,9 @@ static void w_as_import_labels (struct label_node *label_node)
static void w_as_profile_call (struct basic_block *block)
{
+#ifdef MACH_O64
+ w_as_lea_descriptor (block->block_profile_function_label,0,REGISTER_O0);
+#else
w_as_opcode_movl();
if (intel_asm)
w_as_scratch_register_comma();
@@ -3946,7 +3949,7 @@ static void w_as_profile_call (struct basic_block *block)
if (!intel_asm)
w_as_comma_scratch_register();
w_as_newline();
-
+#endif
w_as_opcode ("call");
if (block->block_n_node_arguments>-100)
@@ -4114,6 +4117,9 @@ void write_assembly (VOID)
intel_syntax();
#endif
} else {
+#ifdef MACH_O64
+ w_as_lea_descriptor (block->block_profile_function_label,0,REGISTER_A4);
+#else
w_as_opcode_movl();
if (intel_asm)
w_as_register_comma (REGISTER_A4);
@@ -4121,7 +4127,7 @@ void write_assembly (VOID)
if (!intel_asm)
w_as_comma_register (REGISTER_A4);
w_as_newline();
-
+#endif
w_as_opcode ("jmp");
w_as_label (eval_upd_labels[n_node_arguments]->label_name);
fprintf (assembly_file,"-8");
@@ -4131,6 +4137,9 @@ void write_assembly (VOID)
if (intel_asm)
w_as_register_comma (REGISTER_D0);
w_as_label (block->block_ea_label->label_name);
+#ifdef MACH_O64
+ fprintf (assembly_file,"%s",intel_asm ? "[rip]" : "(%rip)");
+#endif
if (!intel_asm)
w_as_comma_register (REGISTER_D0);
w_as_newline();
diff --git a/cgcode.c b/cgcode.c
index 341cac7..8c24ee0 100644
--- a/cgcode.c
+++ b/cgcode.c
@@ -3860,7 +3860,11 @@ static void code_jmp_ap_ (int n_apply_args)
i_move_id_r (0,REGISTER_A1,REGISTER_A2);
# ifdef PROFILE
if (profile_function_label!=NULL)
- i_jmp_id_profile (4-2,REGISTER_A2,0);
+# ifdef MACH_O64
+ i_jmp_id_profile (8-2,REGISTER_A2,0);
+# else
+ i_jmp_id_profile (4-2,REGISTER_A2,0);
+# endif
else
# endif
# ifdef MACH_O64