libobjc2
libobjc2 copied to clipboard
#warning imp_implementationWithBlock() not implemented for your architecture
on ppc64, compiling libobjc2 fails during linking with "ManyManySelectors.m.o: In function main': /home/cyrus/libobjc2/Test/ManyManySelectors.m:(.text+0x618): undefined reference to
objc_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 to
objc_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`
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.
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.
Closing - anyone who wants to write some PowerPC assembly can reopen...
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 ?
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.
It also looks as if that's 32-bit only.