bug with -native true and MLton_bug
Matthew Fluet
fluet@CS.Cornell.EDU
Tue, 12 Dec 2000 10:15:22 -0500 (EST)
> Matthew, I think there is a problem with the way the native backend handles
> MLton_bug. I had a buggy version of MLton that actually generated code that
> called MLton_bug, and the result produced was not correct. Of course, there's
> no SML example I can send you, but if you could look into it, that would be
> great.
Really simple fix, I think. In x86codegen.h, change the line
char* MLton_bug_msg = "cps machine"; \
to
char MLton_bug_msg[] = "cps machine"; \
In the first version, MLton_bug_msg is compiled as follows:
.globl MLton_bug_msg
.section .rodata
.LC0:
.string "cps machine"
.data
.align 4
.type MLton_bug_msg,@object
.size MLton_bug_msg,4
MLton_bug_msg:
.long .LC0
Note that there is one level of indirection from MLton_bug_msg to the
actual string.
In the revised version, it's compiled like:
.globl MLton_bug_msg
.data
.type MLton_bug_msg,@object
.size MLton_bug_msg,12
MLton_bug_msg:
.string "cps machine"
without the level of indirection.
The translation of MLton_bug was relying on MLton_bug_msg being the label
of the string.
Note, if there is some reason why char* is better than char[], it's a
really easy fix to change the the translation to use the level of
indirection.