Undefined symbols in embedded Swift - are they ok to ignore?

Hi,
I am porting Swift Embedded to a new device, and found that, when linking with ld.lld, I get a few (the stack canary functions, putchar ).

Are these safe to ignore using the --unresolved-symbols=ignore-in-object-files argument?

ld.lld: error: undefined symbol: __stack_chk_guard
>>> referenced by HelloEmbedded.o
>>>               HelloEmbedded.o:($ss17swift_allocObject8metadata12requiredSize0E13AlignmentMaskSpys04HeapC0VGSpys13ClassMetadataVG_S2itF)
>>> referenced by HelloEmbedded.o
>>>               HelloEmbedded.o:($ss17swift_allocObject8metadata12requiredSize0E13AlignmentMaskSpys04HeapC0VGSpys13ClassMetadataVG_S2itF)
>>> referenced by HelloEmbedded.o
>>>               HelloEmbedded.o:($ss17swift_allocObject8metadata12requiredSize0E13AlignmentMaskSpys04HeapC0VGSpys13ClassMetadataVG_S2itF)
>>> referenced 9 more times

ld.lld: error: undefined symbol: posix_memalign
>>> referenced by HelloEmbedded.o
>>>               HelloEmbedded.o:($ss17swift_allocObject8metadata12requiredSize0E13AlignmentMaskSpys04HeapC0VGSpys13ClassMetadataVG_S2itF)
>>> referenced by HelloEmbedded.o
>>>               HelloEmbedded.o:($ss15swift_slowAllocySvSgSi_SitF)

ld.lld: error: undefined symbol: __stack_chk_fail
>>> referenced by HelloEmbedded.o
>>>               HelloEmbedded.o:($ss17swift_allocObject8metadata12requiredSize0E13AlignmentMaskSpys04HeapC0VGSpys13ClassMetadataVG_S2itF)
>>> referenced by HelloEmbedded.o
>>>               HelloEmbedded.o:($sSzsE13writeToStdoutyyFSu_Tg5)
>>> referenced by HelloEmbedded.o
>>>               HelloEmbedded.o:($ss15swift_slowAllocySvSgSi_SitF)

ld.lld: error: undefined symbol: putchar
>>> referenced by HelloEmbedded.o
>>>               HelloEmbedded.o:($ss5print_10terminatorys12StaticStringV_ADtF)
>>> referenced by HelloEmbedded.o
>>>               HelloEmbedded.o:($ss5print_10terminatorys12StaticStringV_ADtF)
>>> referenced by HelloEmbedded.o
>>>               HelloEmbedded.o:($ss15printCharactersyySWF)

ld.lld: error: undefined symbol: memmove
>>> referenced by HelloEmbedded.o
>>>               HelloEmbedded.o:($sSv10copyMemory4from9byteCountySV_SitF)

ld.lld: error: undefined symbol: free
>>> referenced by HelloEmbedded.o
>>>               HelloEmbedded.o:($ss19swift_deallocObject6object13allocatedSize0E9AlignMaskyBp_S2itF)
>>> referenced by HelloEmbedded.o
>>>               HelloEmbedded.o:($ss26swift_deallocClassInstance6object13allocatedSize0F9AlignMaskyBp_S2itF)
>>> referenced by HelloEmbedded.o
>>>               HelloEmbedded.o:($ss17swift_slowDeallocyySv_S2itF)

It depends what your code will do.
Take a look at swift/docs/EmbeddedSwift/UserManual.md at main · swiftlang/swift for some explanations on external dependencies.

For instance, if you'll be allocating memory, you'll need to provide an implementation for posix_memalign and free.

1 Like

That's exactly what I was looking for but couldn't find it. Thanks a lot!

For instance, if you'll be allocating memory, you'll need to provide an implementation for posix_memalign and free.

Yeah, makes sense. That's why I was afraid of these warnings, the stack protectors and putchar were pretty self-explanatory compared to the allocation stuff.