Hi, > On Nov 10, 2018, at 2:51 AM, Martin Liška <mliska@xxxxxxx> wrote: > > On 11/9/18 6:43 PM, Qing Zhao wrote: >> Hi, Martin, >> >> thanks a lot for the previous two new options for live-patching. >> >> >> I have two more questions below: > > Hello. > >> >> 1. do we still need new options to disable the following: >> A. unreachable code/variable removal? > > I hope it's guarded with newly added option -fipa-reference-addressable. Correct me > if I'm wrong. The followings are some previous discussions on this: “ >>> >>> We perform discovery of functions/variables with no address taken and >>> optimizations that are not valid otherwise such as duplicating them >>> or doing skipping them for alias analysis (no flag to disable) >> >> Can you be please more verbose here? What optimizations do you mean? See ipa_discover_readonly_nonaddressable_vars. If addressable bit is cleared we start analyzing uses of the variable via ipa_reference or so. If writeonly bit is set, we start removing writes to the variable and if readonly bit is set we skip any analysis about whether vairable changed. “ the new -fipa-reference-addressable is to control the above, seems not the unreachable code/variable removal? > >> B. Visibility changes with -flto and/or -fwhole-program? > > The options are not used in linux kernel, thus I didn't consider. Okay, I see. > >> >> 2. for this new patch, could you please explain a little bit more on the problem? > > We want to enable a single option that will disable all possible (and future) optimizations > that influence live patching. Okay, I see. I am also working on a similar option as yours, but make the -flive-patching as two level control: +flive-patching +Common RejectNegative Alias(flive-patching=,inline-clone) + +flive-patching= +Common Report Joined RejectNegative Enum(live_patching_level) Var(flag_live_patching) Init(LIVE_NONE) +-flive-patching=[inline-only-static|inline-clone] Control optimizations to provide a safe comp for live-patching purpose. the implementation for -flive-patching=inline-clone (the default) is exactly as yours, the new level -flive-patching=inline-only-static is to only enable inlining of static function for live patching, which is important for multiple-processes live patching to control memory consumption. (please see my 2nd version of the -flive-patching proposal). I will send out my complete patch in another email. thanks. Qing