You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Apple requires bitcode for tvOS builds, and strongly encourages bitcode for iOS builds. Also, the compiler has recently added a check in clang/lib/Driver/ToolChains/Clang.cpp, which does not allow -mllvm in CFLAGS when -fembed-bitcode is present.
This didn't happen before, on llvm-9.0.1 (but that was not compatible with the modern Xcode).
I tried to simply remove the error check for mllvm from Clang.cpp, but this resulted in lots of suspicious warnings while compiling and my iOS code, I tried to simply hardcode -mllvm -bcf -mllvm -sub -mllvm -fla -mllvm -sobf in the compiler. Now, build passes smoothly.
Is there a better way to work around this problem? Also, I am not sure (have not tried) that the bitcode that is produced after my 'fix' is valid.
The text was updated successfully, but these errors were encountered:
hudjefa
pushed a commit
to hudjefa/obfuscator-llvm
that referenced
this issue
Feb 14, 2022
Andrei Matei reported a llvm11 core dump for his bpf program
https://bugs.llvm.org/show_bug.cgi?id=48578
The core dump happens in LiveVariables analysis phase.
heroims#4 0x00007fce54356bb0 __restore_rt
heroims#5 0x00007fce4d51785e llvm::LiveVariables::HandleVirtRegUse(unsigned int,
llvm::MachineBasicBlock*, llvm::MachineInstr&)
heroims#6 0x00007fce4d519abe llvm::LiveVariables::runOnInstr(llvm::MachineInstr&,
llvm::SmallVectorImpl<unsigned int>&)
heroims#7 0x00007fce4d519ec6 llvm::LiveVariables::runOnBlock(llvm::MachineBasicBlock*, unsigned int)
heroims#8 0x00007fce4d51a4bf llvm::LiveVariables::runOnMachineFunction(llvm::MachineFunction&)
The bug can be reproduced with llvm12 and latest trunk as well.
Futher analysis shows that there is a bug in BPF peephole
TRUNC elimination optimization, which tries to remove
unnecessary TRUNC operations (a <<= 32; a >>= 32).
Specifically, the compiler did wrong transformation for the
following patterns:
%1 = LDW ...
%2 = SLL_ri %1, 32
%3 = SRL_ri %2, 32
... %3 ...
%4 = SRA_ri %2, 32
... %4 ...
The current transformation did not check how many uses of %2
and did transformation like
%1 = LDW ...
... %1 ...
%4 = SRL_ri %2, 32
... %4 ...
and pseudo register %2 is used by not defined and
caused LiveVariables analysis core dump.
To fix the issue, when traversing back from SRL_ri to SLL_ri,
check to ensure SLL_ri has only one use. Otherwise, don't
do transformation.
Differential Revision: https://reviews.llvm.org/D97792
(cherry picked from commit 51cdb780db3b9b46c783efcec672c4da272e9992)
Uh oh!
There was an error while loading. Please reload this page.
Apple requires bitcode for tvOS builds, and strongly encourages bitcode for iOS builds. Also, the compiler has recently added a check in
clang/lib/Driver/ToolChains/Clang.cpp
, which does not allow-mllvm
in CFLAGS when-fembed-bitcode
is present.This didn't happen before, on llvm-9.0.1 (but that was not compatible with the modern Xcode).
I tried to simply remove the error check for mllvm from
Clang.cpp
, but this resulted in lots of suspicious warnings while compiling and my iOS code, I tried to simply hardcode-mllvm -bcf -mllvm -sub -mllvm -fla -mllvm -sobf
in the compiler. Now, build passes smoothly.Is there a better way to work around this problem? Also, I am not sure (have not tried) that the bitcode that is produced after my 'fix' is valid.
The text was updated successfully, but these errors were encountered: