On the 0x25A day of Apache Harmony George Timoshenko wrote: > Egor Pasko wrote: > > On the 0x243 day of Apache Harmony Eugene Ostrovsky wrote: > >> Let me propose the following design: > >> > >> Compiled method load event. More precise specification for inlined methods. > >> 1. CML event must be sent for every method compiled by JIT. > >> If compiled method code is disposed in several disconnected regions each of > >> them must be reported by separate CML event. > >> Each region location is described by code_addr and code_size parameters. > >> Native addresses to bytecode location correspondence should be described in > >> map parameter if this information is available. If compiled method code > >> contains code blocks of inlined methods the addresses of those blocks > >> should > >> be associated with the location of corresponding invoke bytecode > >> instruction. > >> 2. If compiled method code region was inlined within the code region of the > >> outer method it should be reported by separate CML event. Inlined method > >> code region must be enclosed within one of the outer method's code regions. > >> I.e. outer.start <= inlined.start < inlined.end <= outer.end (where > >> method.start = code_addr , method.end = code_addr + code_size - 1) > >> 3. According to #1 and #2 any two of reported regions (R1, R2) may by > >> enclosed one by other (in case of inlining) but must not overlap (i.e. > >> R1.start < R2.start <= R1.end < R2.end condition must not be true). > >> > >> Is it clear enough? > > sort of, thank you thank you! > > George, could you, please, also put a short HOWTO what patches (of > > 11) > > in HARMONY-2145 should be applied to make the solution and in which > > order. (then I will be able to make a more thorough review) > > > >> What do you think? > > well, a couple of words about your algorithm would also have been > > good! (in comments too) > > also, an assert verifying the (3) would have been excellent (I cannot > > find it in the patch) > > please, also substitute all 'unsigned' to 'uint32' in your patch > > (that's a sort of convention in Jitrino) > > The last killer-question for today :) > > you are doing: > > sendCompiledMethodLoadEvent(...AddrLocation* addrLocationMap...) > > before addrLocationMap is initialized completely. Is that OK? > > > > As it is written in JIRA > H-2145-JIT-side-version-2.patch spposed to be applied firstly. > VM_side patch needs to be renewed: > H-2145-VM-support-for-compiled-method-load-events-for-inlined-methods.patch > (24 kb) > (There is a problem with compile.cpp file) > > So the instructions is: > > apply patch H-2145-JIT-side-version-2.patch > then apply > H-2145-VM-support-for-compiled-method-load-events-for-inlined-methods.patch > and (if it was not renewed yet) resolve the conflict in compile.cpp > manually.
thanks! > After this one can be able to build VM. > > Regarding the last question: > don't you find the solution is rather elegant? > addrLocationMap is not supposed to be always filled completely before > sending thne event. OK, now I see, thanks! > At the beginning of the reporting we know the whole size but have no > the information about it's continuity. > I see 2 ways: perform 2 passes: the first - to get the sizes of each > continuous region, the second - to report regions. that makes sense! > Or report all regions by one pass but using the 'hack' with addrLocationMap. IMHO, we should report conscequent regions of the same method as one region. Thus, 2 passes are better. And it is NOT slow :) -- Egor Pasko
