[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