diff --git a/mach/proto/mcg/data.c b/mach/proto/mcg/data.c
index 13352ed37..ff4ddb5bd 100644
--- a/mach/proto/mcg/data.c
+++ b/mach/proto/mcg/data.c
@@ -12,14 +12,19 @@ static struct symbol* pending;
 
 void data_label(const char* label)
 {
-	if (pending)
-		fatal("two consecutive data labels ('%s' and '%s')",
-            pending->name, label);
+    struct symbol* sym = symbol_get(label);
+    if (sym->is_defined)
+        fatal("label '%s' defined twice", sym->name);
 
-	pending = symbol_get(label);
-    if (pending->is_defined)
-        fatal("label '%s' defined twice", pending->name);
-    pending->is_defined = true;
+	if (pending)
+        fprintf(outputfile, "%s = %s\n",
+            platform_label(label), platform_label(pending->name));
+    else
+    {
+        pending = sym;
+        pending = symbol_get(label);
+        pending->is_defined = true;
+    }
 }
 
 static const char* section_to_str(int section)