Opened 12 years ago
Closed 11 years ago
#36490 closed defect (fixed)
cctools: lipo assertion failure and crash
Reported by: | ryandesign (Ryan Carsten Schmidt) | Owned by: | jeremyhu (Jeremy Huddleston Sequoia) |
---|---|---|---|
Priority: | Normal | Milestone: | |
Component: | ports | Version: | 2.1.2 |
Keywords: | Cc: | ||
Port: | llvm-3.1 |
Description
lipo is crashing again with an assertion failure on certain input files (files less than 4 bytes long). This is like #36081, except that rebuilding cctools has not helped.
$ echo hi > a $ /usr/bin/lipo -info a /usr/bin/lipo: can't figure out the architecture type of: a $ /opt/local/bin/lipo -info a Assertion failed: (length >=4 && "Invalid magic number length"), function IdentifyFileType, file Path.cpp, line 44. Abort trap: 6 $ echo -n four > a $ /opt/local/bin/lipo -info a /opt/local/bin/lipo: can't figure out the architecture type of: a $ port provides $(which lipo) /opt/local/bin/lipo is provided by: cctools $ port installed cctools The following ports are currently installed: cctools @829_1+llvm31+universal (active) $
Change History (10)
comment:1 Changed 12 years ago by jeremyhu (Jeremy Huddleston Sequoia)
comment:2 Changed 12 years ago by jeremyhu (Jeremy Huddleston Sequoia)
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 libsystem_kernel.dylib 0x00007fff8a004212 __pthread_kill + 10 1 libsystem_c.dylib 0x00007fff888a8af4 pthread_kill + 90 2 libLLVM-3.1.dylib 0x000000010b92baa6 abort + 22 3 libLLVM-3.1.dylib 0x000000010b92ba81 __assert_rtn + 81 4 libLLVM-3.1.dylib 0x000000010b91f285 llvm::sys::IdentifyFileType(char const*, unsigned int) + 725 5 libLTO.dylib 0x000000010af22269 LTOModule::isBitcodeFile(void const*, unsigned long) + 9 6 libLTO.dylib 0x000000010af251a9 lto_module_is_object_file_in_memory + 9 7 lipo 0x000000010aee1bb4 is_llvm_bitcode_from_memory + 702 8 lipo 0x000000010aedb539 main + 5501 9 libdyld.dylib 0x00007fff849d27e1 start + 1
comment:3 Changed 12 years ago by jeremyhu (Jeremy Huddleston Sequoia)
Note that /usr/bin/lipo does not use LTO which is why it does not hit this assertion, but if you use xcrun lipo, it will use LTO and fails with the same assertion:
$ xcrun lipo -info b Assertion failed: (length >=4 && "Invalid magic number length"), function IdentifyFileType, file Path.cpp, line 44. Abort trap: 6
comment:4 Changed 12 years ago by jeremyhu (Jeremy Huddleston Sequoia)
Oh wait, that was actually resulting in /opt/local/bin/lipo being run.
FWIW, replacing llvm-3.1's libLTO with XCode's "fixes" the issue, so we should just fix this in llvm.
I'm seeing this with llvm-2.9 through llvm-3.2's libLTO.
comment:5 Changed 12 years ago by jeremyhu (Jeremy Huddleston Sequoia)
Ok, it passes with the host's libLTO because the host has assertions disabled ...
comment:7 Changed 12 years ago by jeremyhu (Jeremy Huddleston Sequoia)
If you rebuild llvm-3.1 without the +assertions variant, I expect the issue should go away for you.
comment:8 Changed 12 years ago by jeremyhu (Jeremy Huddleston Sequoia)
Port: | llvm-3.1 added; cctools removed |
---|---|
Status: | new → assigned |
comment:9 Changed 12 years ago by mfeiri
Cc: | mfeiri@… removed |
---|
comment:10 Changed 11 years ago by jeremyhu (Jeremy Huddleston Sequoia)
Resolution: | → fixed |
---|---|
Status: | assigned → closed |
This is slightly different than #36081, although it's tripping over the same assertion.
This has to do with the size of the file. llvm-3.1 doesn't like that it's too small. It tries to read a 4-byte magic number, but your file is only 3 bytes.