We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
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
When the following code compiles:
int printf(const char *, ...); int main(int argc, char **argv) { static const void *jump_table[] = {&&label, &&label2}; goto *jump_table[argc - 1]; label: printf("label1\n"); goto out; label2: printf("label2\n"); goto out; out: return 0; }
Clang generates a global jump table containing blockaddresses.
blockaddress
E.g.:
@main.jump_table = internal global [2 x i8*] [i8* blockaddress(@main, %11), i8* blockaddress(@main, %13)], align 16
Mull corrupts the blockaddresses when it replaces the original function with an indirect stub.
We should be also duplicating and fixing all the blockaddresses before destructive actions.
The text was updated successfully, but these errors were encountered:
As a workaround, Mull does not mutate functions that have basic blocks with blockaddress taken.
Sorry, something went wrong.
No branches or pull requests
When the following code compiles:
Clang generates a global jump table containing
blockaddress
es.E.g.:
Mull corrupts the
blockaddress
es when it replaces the original function with an indirect stub.We should be also duplicating and fixing all the
blockaddress
es before destructive actions.The text was updated successfully, but these errors were encountered: