Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#warning imp_implementationWithBlock() not implemented for your architecture #9

Closed
aperezbios opened this issue Dec 1, 2015 · 6 comments

Comments

@aperezbios
Copy link

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`

@davidchisnall
Copy link
Member

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.

@aperezbios
Copy link
Author

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.

@davidchisnall
Copy link
Member

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

@BertrandDekoninck
Copy link

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 ?

@davidchisnall
Copy link
Member

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
Copy link
Member

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

@hmelder hmelder closed this as completed Jan 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

4 participants