On Sat, Dec 12, 2015 at 11:45 PM, Dmitri Gribenko <griboz...@gmail.com> wrote: > On Sat, Dec 12, 2015 at 8:29 PM, Davide Italiano via swift-dev > <swift-dev@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 _______________________________________________ swift-dev mailing list swift-dev@swift.org https://lists.swift.org/mailman/listinfo/swift-dev