Error building libffi on x86_64

Kai Tietz ktietz70@googlemail.com
Wed Mar 13 09:25:00 GMT 2013


2013/3/13 Yaakov <yselkowitz@users.sourceforge.net>:
> I have encountered the following error attempting to build
> libffi-3.0.12 on Cygwin:
>
> src/x86/.libs/win64.o:/usr/src/debug/libffi-3.0.12-1/src/x86/win64.S:298:(.text+0x69): relocation truncated to fit: R_X86_64_32S against symbol `ffi_closure_win64_inner' defined in .text section in src/x86/.libs/ffi.o

Hmm, I think the issue is here that the instruction used at this place
misses ip-relative addressing.

At line 298  we have       mov     $SYMBOL_NAME(ffi_closure_win64_inner), %rax

Could you try if you get same isse with that line replaced by  lea
SYMBOL_NAME(ffi_closure_win64_inner)(%rip), %rax

> The only matches on Google for this sort of error were for >2GB code on
> Linux, but I suspect the problem here is with the medium code model.

Well, as ffi_closure_win64_inner is a *near* symbol to win64.S - as it
is within same library and is a static one - I suspect that the issue
is related to medium (means far data) scenario.

Otherway might be to translate libffi itself by using the option
-mcmodel=small instead.  BUt I assuem it is more related by
none-ip-relative addressing within that assembler file.

> Here's what I'm working with:
>
> http://cygwin-ports.git.sourceforge.net/git/gitweb.cgi?p=cygwin-ports/libffi
>
>
> Yaakov

Kai



More information about the Cygwin-developers mailing list