Hi, this is the newest version of the patch. major changes: 1. format fixes raised by Martin; 2. output error when disabled IPA optimizations are turned on explicitly by the user with -flive-patching at the same time. based on Honza’s suggestions. the new changes have been bootstrapped and tested on both aarch64 and x86, no regressions. Okay for commit? thanks. Qing. =========== gcc/ChangeLog: 2018-11-20 qing zhao * cif-code.def (EXTERN_LIVE_ONLY_STATIC): New CIF code. * common.opt: Add -flive-patching flag. * doc/invoke.texi: Document -flive-patching. * flag-types.h (enum live_patching_level): New enum. * ipa-inline.c (can_inline_edge_p): Disable external functions from inlining when flag_live_patching is LIVE_PATCHING_INLINE_ONLY_STATIC. * opts.c (control_options_for_live_patching): New function. (finish_options): Make flag_live_patching incompatible with flag_lto. Control IPA optimizations based on different levels of flag_live_patching. gcc/testsuite/ChangeLog: 2018-11-20 qing zhao * gcc.dg/live-patching-1.c: New test. * gcc.dg/live-patching-2.c: New test. * gcc.dg/live-patching-3.c: New test. * gcc.dg/tree-ssa/writeonly-3.c: New test. * gcc.target/i386/ipa-stack-alignment-2.c: New test.