[MLton] Intel Mac version of MLton
John Reppy
jhr at cs.uchicago.edu
Fri Oct 13 17:24:51 PDT 2006
Looking at the assembler code, I think that I know what the problem
is. Mac OS uses
a different linking scheme for libraries, which support dynamic
linking the first
time a function is called. Basically, calling a library function
like tanh requires
going through a stub function. If you look at what gcc generates,
you would see
something like:
call L_tanh$stub
...
.section
__IMPORT,__jump_table,symbol_stubs,self_modifying_code
+pure_instructions,5
L_tanh$stub:
.indirect_symbol _tanh
hlt ; hlt ; hlt ; hlt ; hlt
whereas mlton is just generating
call _tanh
The simple workaround is to create statically-linked wrapper
functions in C or you can bite the
bullet and implement the Mach-O calling convention for external
functions.
- John
On Oct 12, 2006, at 10:07 AM, Matthew Fluet wrote:
>
>> I would guess that it is in the assembly code that you produce.
>> The rules for MACH-O files are different in places than those for
>> ELF and COFF.
>
> I can believe that MACH-O is different than ELF or COFF, but I
> guess I would have hoped that the assembler would complain, rather
> than producing an object file that doesn't link.
>
>> Will the flags you suggest save the asm code?
>
> Yes; '-keep g' is "keep code-Generated files".
>
>>> Well, its obviously a linker issue. You could try compiling
>>> regression/math.sml with the options '-keep g -keep o -verbose 1'
>>> which will save the intermediate files and print out the command
>>> line passed to gcc. I would also try '-codegen c -verbose 1' to
>>> see whether it is a general linker problem or specific to the
>>> native codegen.
>>> I googled for the error message, and there are a number of pages/
>>> posts where people report seeing the error, but I haven't found
>>> an explaination or a solution.
>>> On Wed, 11 Oct 2006, John Reppy wrote:
>>>> I did a bin/regression and got a failure (see below).
>>>> - John
>>>> <jhr at frogbat> bin/regression
>>>> MLton MLTONVERSION (built Mon Oct 09 23:08:56 2006 on
>>>> frogbat.local)
>>>> flags = -type-check true
>>>> testing 1
>>>> ...
>>>> testing math
>>>> /usr/bin/ld: /tmp/file1D7oqw.o has external relocation entries
>>>> in non- writable section (__TEXT,__text) for symbols:
>>>> _tanh
>>>> _cosh
>>>> _sinh
>>>> _pow
>>>> collect2: ld returned 1 exit status
>>>> call to system failed with exit status 1:
>>>> gcc -o math /tmp/filen4F46H.o /tmp/file1D7oqw.o -L/Users/jhr/
>>>> Work/ mlton/mlton/build/lib/self -lmlton -L/sw/lib -lgmp -lgdtoa
>>>> -lm
>>>> _______________________________________________
>>>> MLton mailing list
>>>> MLton at mlton.org
>>>> http://mlton.org/mailman/listinfo/mlton
>>
>
More information about the MLton
mailing list