[swift-dev] Porting swift to FreeBSD
Davide Italiano
dccitaliano at gmail.com
Sat Dec 12 23:09:49 CST 2015
On Sat, Dec 12, 2015 at 11:45 PM, Dmitri Gribenko <gribozavr at gmail.com> wrote:
> On Sat, Dec 12, 2015 at 8:29 PM, Davide Italiano via swift-dev
> <swift-dev at swift.org> wrote:
>> Hi,
>> I'm a FreeBSD developer who has been working on porting swift to FreeBSD.
>> I'm at a point where with a local patch (
>> https://people.freebsd.org/~davide/swift/build_freebsd.diff ) to fix
>> build errors I'm able to build the compiler itself on FreeBSD 11
>> (-CURRENT).
>
> +Doug for this patch.
>
>> The compiler itself seems to work fine (at least semantic analysis is
>> able to produce the correct result for toy examples).
>> Example:
>>
>> % cat hello.swift
>> let number = 4
>> println(number)
>>
>> % ./swiftc hello.swift -o hello
>> hello.swift:2:1: error: 'println' has been renamed to 'print'
>> println(number)
>> ^~~~~~~
>> [...]
>>
>> The executables generated seem to have some problems, though.
>> This is what I see:
>>
>> % cat hello2.swift
>> let number = 4
>> print(number)
>> % ./swiftc hello2.swift -o hello2
>> % ./hello2
>> Int(String(String(String(String(String(String(String(String(String(String(String(String(String(String(String(String(String(String(String(String(String(String(String(String(String(String(String(Stri
>
> The reason is that the program can't find the protocol conformance
> tables. On Linux, we are using a linker script to collect all
> conformances into one section, and insert symbols at the beginning and
> at the end, see stdlib/public/runtime/swift.ld. The code that reads
> these sections is in stdlib/public/runtime/Casting.cpp.
>
Thanks Dmitri.
The linker script is actually executed on FreeBSD as well (with a
recent version of GNU ld, with the old ld shipped with FreeBSD or gold
the parsing of the linker script fails)
and the section is created (as objdump -h witnesses):
20 .dtors 00000010 0000000000603218 0000000000603218 00003218 2**3
CONTENTS, ALLOC, LOAD, DATA
21 .swift2_protocol_conformances 00000008 0000000000603228
0000000000603228 00003228 2**0
CONTENTS, ALLOC, LOAD, DATA
22 .jcr 00000008 0000000000603230 0000000000603230 00003230 2**3
CONTENTS, ALLOC, LOAD, DATA
% objdump -t ./hello | grep conformances
0000000000603228 l d .swift2_protocol_conformances
0000000000000000 .swift2_protocol_conformances
0000000000603228 g .swift2_protocol_conformances
0000000000000000 .swift2_protocol_conformances_start
Although the section seems to be empty/corrupted:
Disassembly of section .dtors:
0000000000603218 <__DTOR_LIST__>:
603218: ff (bad)
603219: ff (bad)
60321a: ff (bad)
60321b: ff (bad)
60321c: ff (bad)
60321d: ff (bad)
60321e: ff (bad)
60321f: ff 00 incl (%rax)
0000000000603220 <__DTOR_END__>:
...
Disassembly of section .swift2_protocol_conformances:
0000000000603228 <.swift2_protocol_conformances_start>:
...
Disassembly of section .jcr:
0000000000603230 <__JCR_END__>:
Do you have an example on how that should look like (on Linux) so I
can investigate and try to adapt that to work on FreeBSD?
Thanks,
--
Davide
More information about the swift-dev
mailing list