[swift-dev] Porting swift to FreeBSD

Davide Italiano dccitaliano at gmail.com
Sat Dec 12 23:26:26 CST 2015


On Sun, Dec 13, 2015 at 12:22 AM, Dmitri Gribenko <gribozavr at gmail.com> wrote:
> On Sat, Dec 12, 2015 at 9:09 PM, Davide Italiano <dccitaliano at gmail.com> wrote:
>> 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:
>
> It should be empty in the binary (since this simple program does not
> define any new conformances to protocols).  Could you try checking the
> standard library, libswiftCore.so:
>

 % objdump -t ./lib/swift/freebsd/x86_64/libswiftCore.so | grep conformances
0000000000833710 l    d  .swift2_protocol_conformances
0000000000000000              .swift2_protocol_conformances
0000000000833710 l     O .swift2_protocol_conformances
0000000000002eb0              l_protocol_conformances
00000000008365c0 g       .swift2_protocol_conformances
0000000000000000              _edata

 % objdump -s -j .swift2_protocol_conformances
./lib/swift/freebsd/libswiftCore.so |head -n 10

./lib/swift/freebsd/libswiftCore.so:     file format elf64-x86-64-freebsd

Contents of section .swift2_protocol_conformances:
 833710 00000000 00000000 00000000 04000000  ................
 833720 00000000 00000000 00000000 04000000  ................
 833730 00000000 00000000 00000000 04000000  ................
 833740 00000000 00000000 00000000 04000000  ................
 833750 00000000 00000000 00000000 04000000  ................
 833760 00000000 00000000 00000000 04000000  ................

Thanks,

--
Davide


More information about the swift-dev mailing list