libobjc2 icon indicating copy to clipboard operation
libobjc2 copied to clipboard

#warning imp_implementationWithBlock() not implemented for your architecture

Open aperezbios opened this issue 8 years ago • 6 comments

on ppc64, compiling libobjc2 fails during linking with "ManyManySelectors.m.o: In function main': /home/cyrus/libobjc2/Test/ManyManySelectors.m:(.text+0x618): undefined reference toobjc_msgSend'"

but I also see "#warning imp_implementationWithBlock() not implemented for your architecture"

`cyrus@cyrus:~/libobjc2/Build$ make Scanning dependencies of target objc [ 1%] Building C object CMakeFiles/objc.dir/abi_version.c.o [ 2%] Building C object CMakeFiles/objc.dir/alias_table.c.o [ 3%] Building C object CMakeFiles/objc.dir/block_to_imp.c.o /home/cyrus/libobjc2/block_to_imp.c:59:19: warning: passing 'const char *' to parameter of type 'char *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] int fd = mkstemp(pattern); ^~~~~~~ /usr/include/stdlib.h:619:27: note: passing argument to parameter '__template' here extern int mkstemp (char *__template) __nonnull ((1)) __wur; ^ /home/cyrus/libobjc2/block_to_imp.c:61:7: warning: passing 'const char *' to parameter of type 'void *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers] free(pattern); ^~~~~~~ /usr/include/stdlib.h:483:25: note: passing argument to parameter '__ptr' here extern void free (void *__ptr) __THROW; ^ 2 warnings generated. [ 4%] Building C object CMakeFiles/objc.dir/caps.c.o [ 5%] Building C object CMakeFiles/objc.dir/category_loader.c.o [ 6%] Building C object CMakeFiles/objc.dir/class_table.c.o [ 8%] Building C object CMakeFiles/objc.dir/dtable.c.o [ 9%] Building C object CMakeFiles/objc.dir/eh_personality.c.o [ 10%] Building C object CMakeFiles/objc.dir/encoding2.c.o [ 11%] Building C object CMakeFiles/objc.dir/hash_table.c.o [ 12%] Building C object CMakeFiles/objc.dir/hooks.c.o [ 13%] Building C object CMakeFiles/objc.dir/ivar.c.o [ 15%] Building C object CMakeFiles/objc.dir/legacy_malloc.c.o [ 16%] Building C object CMakeFiles/objc.dir/loader.c.o [ 17%] Building C object CMakeFiles/objc.dir/mutation.m.o [ 18%] Building C object CMakeFiles/objc.dir/protocol.c.o [ 19%] Building C object CMakeFiles/objc.dir/runtime.c.o [ 20%] Building C object CMakeFiles/objc.dir/sarray2.c.o [ 22%] Building C object CMakeFiles/objc.dir/selector_table.c.o [ 23%] Building C object CMakeFiles/objc.dir/sendmsg2.c.o [ 24%] Building C object CMakeFiles/objc.dir/statics_loader.c.o [ 25%] Building C object CMakeFiles/objc.dir/toydispatch.c.o [ 26%] Building ASM object CMakeFiles/objc.dir/block_trampolines.S.o /home/cyrus/libobjc2/block_trampolines.S:106:2: warning: imp_implementationWithBlock() not implemented for your architecture [-W#warnings]

warning imp_implementationWithBlock() not implemented for your architecture

^ 1 warning generated. [ 27%] Building ASM object CMakeFiles/objc.dir/objc_msgSend.S.o /home/cyrus/libobjc2/objc_msgSend.S:11:2: warning: objc_msgSend() not implemented for your architecture [-W#warnings]

warning objc_msgSend() not implemented for your architecture

^ 1 warning generated. [ 29%] Building C object CMakeFiles/objc.dir/NSBlocks.m.o [ 30%] Building C object CMakeFiles/objc.dir/Protocol2.m.o [ 31%] Building C object CMakeFiles/objc.dir/arc.m.o [ 32%] Building C object CMakeFiles/objc.dir/associate.m.o [ 33%] Building C object CMakeFiles/objc.dir/blocks_runtime.m.o [ 34%] Building C object CMakeFiles/objc.dir/properties.m.o [ 36%] Building C object CMakeFiles/objc.dir/gc_none.c.o Linking C shared library libobjc.so [ 36%] Built target objc Scanning dependencies of target objcxx [ 37%] Building CXX object CMakeFiles/objcxx.dir/objcxx_eh.cc.o Linking C shared library libobjcxx.so [ 37%] Built target objcxx Scanning dependencies of target AllocatePair [ 38%] Building C object Test/CMakeFiles/AllocatePair.dir/AllocatePair.m.o Linking C executable AllocatePair [ 38%] Built target AllocatePair Scanning dependencies of target AllocatePair_optimised [ 39%] Building C object Test/CMakeFiles/AllocatePair_optimised.dir/AllocatePair.m.o Linking C executable AllocatePair_optimised [ 39%] Built target AllocatePair_optimised Scanning dependencies of target AssociatedObject [ 40%] Building C object Test/CMakeFiles/AssociatedObject.dir/AssociatedObject.m.o Linking C executable AssociatedObject [ 40%] Built target AssociatedObject Scanning dependencies of target AssociatedObject2 [ 41%] Building C object Test/CMakeFiles/AssociatedObject2.dir/AssociatedObject2.m.o Linking C executable AssociatedObject2 [ 41%] Built target AssociatedObject2 Scanning dependencies of target AssociatedObject2_optimised [ 43%] Building C object Test/CMakeFiles/AssociatedObject2_optimised.dir/AssociatedObject2.m.o Linking C executable AssociatedObject2_optimised [ 43%] Built target AssociatedObject2_optimised Scanning dependencies of target AssociatedObject_optimised [ 44%] Building C object Test/CMakeFiles/AssociatedObject_optimised.dir/AssociatedObject.m.o Linking C executable AssociatedObject_optimised [ 44%] Built target AssociatedObject_optimised Scanning dependencies of target BlockImpTest [ 45%] Building C object Test/CMakeFiles/BlockImpTest.dir/BlockImpTest.m.o Linking C executable BlockImpTest [ 45%] Built target BlockImpTest Scanning dependencies of target BlockImpTest_optimised [ 46%] Building C object Test/CMakeFiles/BlockImpTest_optimised.dir/BlockImpTest.m.o Linking C executable BlockImpTest_optimised [ 46%] Built target BlockImpTest_optimised Scanning dependencies of target BlockTest_arc [ 47%] Building C object Test/CMakeFiles/BlockTest_arc.dir/BlockTest_arc.m.o [ 48%] Building C object Test/CMakeFiles/BlockTest_arc.dir/Test.m.o Linking C executable BlockTest_arc [ 48%] Built target BlockTest_arc Scanning dependencies of target BlockTest_arc_optimised [ 50%] Building C object Test/CMakeFiles/BlockTest_arc_optimised.dir/BlockTest_arc.m.o [ 51%] Building C object Test/CMakeFiles/BlockTest_arc_optimised.dir/Test.m.o Linking C executable BlockTest_arc_optimised [ 51%] Built target BlockTest_arc_optimised Scanning dependencies of target BoxedForeignException [ 52%] Building C object Test/CMakeFiles/BoxedForeignException.dir/BoxedForeignException.m.o Linking C executable BoxedForeignException [ 52%] Built target BoxedForeignException Scanning dependencies of target BoxedForeignException_optimised [ 53%] Building C object Test/CMakeFiles/BoxedForeignException_optimised.dir/BoxedForeignException.m.o Linking C executable BoxedForeignException_optimised [ 53%] Built target BoxedForeignException_optimised Scanning dependencies of target CXXExceptions [ 54%] Building C object Test/CMakeFiles/CXXExceptions.dir/CXXException.m.o [ 55%] Building CXX object Test/CMakeFiles/CXXExceptions.dir/CXXException.cc.o Linking C executable CXXExceptions [ 55%] Built target CXXExceptions Scanning dependencies of target CXXExceptions_optimised [ 56%] Building C object Test/CMakeFiles/CXXExceptions_optimised.dir/CXXException.m.o [ 58%] Building CXX object Test/CMakeFiles/CXXExceptions_optimised.dir/CXXException.cc.o Linking C executable CXXExceptions_optimised [ 58%] Built target CXXExceptions_optimised Scanning dependencies of target ExceptionTest [ 59%] Building C object Test/CMakeFiles/ExceptionTest.dir/ExceptionTest.m.o Linking C executable ExceptionTest [ 59%] Built target ExceptionTest Scanning dependencies of target ExceptionTest_optimised [ 60%] Building C object Test/CMakeFiles/ExceptionTest_optimised.dir/ExceptionTest.m.o Linking C executable ExceptionTest_optimised [ 60%] Built target ExceptionTest_optimised Scanning dependencies of target ForeignException [ 61%] Building C object Test/CMakeFiles/ForeignException.dir/ForeignException.m.o Linking C executable ForeignException [ 61%] Built target ForeignException Scanning dependencies of target ForeignException_optimised [ 62%] Building C object Test/CMakeFiles/ForeignException_optimised.dir/ForeignException.m.o Linking C executable ForeignException_optimised [ 62%] Built target ForeignException_optimised Scanning dependencies of target Forward [ 63%] Building C object Test/CMakeFiles/Forward.dir/Forward.m.o Linking C executable Forward [ 63%] Built target Forward Scanning dependencies of target Forward_optimised [ 65%] Building C object Test/CMakeFiles/Forward_optimised.dir/Forward.m.o Linking C executable Forward_optimised [ 65%] Built target Forward_optimised Scanning dependencies of target ManyManySelectors [ 66%] Building C object Test/CMakeFiles/ManyManySelectors.dir/ManyManySelectors.m.o /home/cyrus/libobjc2/Test/ManyManySelectors.m:40:2: warning: implicitly declaring library function 'objc_msgSend' with type 'id (id, SEL, ...)' objc_msgSend([Test class], nextSel); ^ /home/cyrus/libobjc2/Test/ManyManySelectors.m:40:2: note: include the header <objc/message.h> or explicitly provide a declaration for 'objc_msgSend' 1 warning generated. Linking C executable ManyManySelectors CMakeFiles/ManyManySelectors.dir/ManyManySelectors.m.o: In function main': /home/cyrus/libobjc2/Test/ManyManySelectors.m:(.text+0x618): undefined reference toobjc_msgSend' clang: error: linker command failed with exit code 1 (use -v to see invocation) Test/CMakeFiles/ManyManySelectors.dir/build.make:86: recipe for target 'Test/ManyManySelectors' failed make[2]: *** [Test/ManyManySelectors] Error 1 CMakeFiles/Makefile2:981: recipe for target 'Test/CMakeFiles/ManyManySelectors.dir/all' failed make[1]: *** [Test/CMakeFiles/ManyManySelectors.dir/all] Error 2 Makefile:146: recipe for target 'all' failed make: *** [all] Error 2`

aperezbios avatar Dec 01 '15 01:12 aperezbios

This all looks expected. The assembly paths are not provided for PPC (patches very welcome, but I have no knowledge of PPC assembly nor access to hardware to test), and the tests of functions that are implemented in assembly will not pass for the same reason.

davidchisnall avatar Dec 01 '15 10:12 davidchisnall

Thanks, @davidchisnall, I figured as much but wanted to offer up remote access to my hardware, if you have the time or inclination to poke at this.

aperezbios avatar Dec 05 '15 14:12 aperezbios

Closing - anyone who wants to write some PowerPC assembly can reopen...

davidchisnall avatar Aug 07 '18 12:08 davidchisnall

I've found this implementation of objc_msgSend for ppc on here: https://github.com/jackoalan/gnustep-libobjc2/blob/wiistep/objc_msgSend.ppc.S. Could this be used and imported here ? And if it could, would this work also on ppc64 ?

BertrandDekoninck avatar Feb 22 '21 18:02 BertrandDekoninck

Hi, if the author is willing to contribute it then it's probably a good starting point. I think it predates the change to the SpareArray structure though, so it probably won't work as-is. You'll need to tweak the logic a bit.

davidchisnall avatar Feb 22 '21 20:02 davidchisnall

It also looks as if that's 32-bit only.

davidchisnall avatar Feb 22 '21 20:02 davidchisnall