On Fri, Jul 5, 2019 at 9:16 PM Mohit Verma <vmohit...@gmail.com> wrote:
> Thanks Keith. > > Yes, the function call takes a variadic interface argument, so it would > cause the variables to escape if it existed before. To take care of this, I > allocate space for the interface during buildSSA & then call > *runtime.convT2E** functions. > > *1. How do I turn off escape analysis with command-line flag? I couldn't > find this option anywhere.* > > I thought it was part of -N, but apparently not. Nevermind. > *2. Why would having calls to functions marked nosplit, be a problem?* > The function I am adding would internally call *runtime.spanOfHeap()* > function which is marked nosplit. Will this be a problem? > I haven't gone through the stack migration code yet, but this blog > <https://dave.cheney.net/2018/01/08/gos-hidden-pragmas> by Dave > Cheney mentioned that compiler maintains a 768-byte redzone to make sure > there is no memory corruption. > > The only problem would be calling splittable functions from nosplit ones. If you're not doing that, it shouldn't be a problem. There is a redzone big enough for the nosplit routines. As long as yours fit, you should be fine (the linker should check the fit for you). > I had one other question. > *3. Is the stack check & runtime.morestack() code inserted by the linker? * > I see stacksplit code in cmd/internal/obj/ directory which is invoked > during compileSSA() in gc/pgen.go. > > It's inserted by the compiler, I believe. cmd/internal/obj.Flushplist is called from (*Progs).Flush in cmd/compile/internal/gc/gsubr.go > > Thanks a lot! > Mohit > > > On Fri, Jul 5, 2019 at 11:32 AM Keith Randall <k...@google.com> wrote: > >> >> >> On Fri, Jul 5, 2019 at 2:05 PM Mohit Verma <vmohit...@gmail.com> wrote: >> >>> Thanks Keith, Ian. >>> >>> Specifically, I am trying to catch all the memory stores/moves during >>> the build SSA phase, and instead call a function that can do things like >>> record the old/new values in a journal. >>> So I changed the methods like (*state).assign, (*state).storeType in >>> gc/ssa.go and injected equivalent SSA nodes to make the function call. I >>> can see the modified SSA code when I generate ssa.html using GOSSAFUNC. >>> *This >>> is why I was looking for a tool that could convert SSA form back to Go code >>> so I could see if I caught all the stores.* >>> >>> Right now, I am running up against something like this: >>> Escape analysis didn't see the function call, it saw normal assignments >>> & marked variables in stack. Now I inject a function call during buildSSA. >>> Now, before the function call, runtime decided that stack should migrate, >>> and now I get a seg fault. >>> >>> >> That shouldn't matter unless your function call would cause something to >> escape, than otherwise wouldn't. >> Or are you passing a pointer to a stack object as a uintptr, maybe? >> You can turn off escape analysis with a command-line flag, if that helps. >> >> Adding function calls should normally be ok. Functions marked nosplit >> (mostly in the runtime) would be the exception; don't add any calls to >> those. >> >> >>> I was trying to debug this, but putting up prints in the >>> compiler/runtime seemed inefficient to me, and I thought the Go team might >>> be doing things differently during their development/debug. >>> >>> Thanks! >>> Mohit >>> >>> On Wed, Jul 3, 2019 at 9:24 PM Keith Randall <k...@google.com> wrote: >>> >>>> >>>> >>>> On Wed, Jul 3, 2019 at 9:04 PM Ian Lance Taylor <i...@golang.org> >>>> wrote: >>>> >>>>> [ +khr ] >>>>> >>>>> On Wed, Jul 3, 2019 at 4:46 PM Mohit Verma <vmohit...@gmail.com> >>>>> wrote: >>>>> > >>>>> > Hi All, >>>>> > >>>>> > I am trying to change the ssa phase of Go compiler to do extra work >>>>> during memory stores. >>>>> > For example whenever there is a memory store, I want to make a >>>>> function call to one of my Go packages instead of the store. >>>>> > So, far I have some working changes and I can see the new SSA nodes >>>>> when I dump SSA using GOSSAFUNC. >>>>> > >>>>> > I have a couple of questions: >>>>> > >>>>> > 1. Is there a tool which can covert the SSA nodes back to some >>>>> version of Go code? >>>>> >>>> >>>> Nope. Such a thing might be nice, actually. Handing phis, memory >>>> values, flags, etc. might be hard. >>>> >>>> >>>>> > 2. How does Go team/others develop/make changes to Go compiler? So, >>>>> far I have been adding prints in the Go compiler >>>>> (cmd/compile/internal/syntax, gc, & ssa packages) to understand the code >>>>> flow. But, this is very time consuming. I am sure a better way exists. >>>>> >>>> >>>> That sounds about what I do when working on the compiler. Understanding >>>> what the compiler is doing is often 90% of the battle, and there's no easy >>>> solution. You can run the compiler under a debugger, if you want. >>>> If you can be more specific about what you are trying to do and what >>>> you are running up against, I might be able to give you more specific >>>> recommendations. >>>> If the compiler is generating bad code, you might be able to condition >>>> your new code on cmd/compile/internal/ssa/func.go:DebugTest which will let >>>> you binary search for a particular function whose code is bad. >>>> >>>> >>>> >>>>> > >>>>> > I'll appreciate any help! >>>>> > >>>>> > Thanks! >>>>> > Mohit >>>>> > >>>>> > -- >>>>> > You received this message because you are subscribed to the Google >>>>> Groups "golang-nuts" group. >>>>> > To unsubscribe from this group and stop receiving emails from it, >>>>> send an email to golang-nuts+unsubscr...@googlegroups.com. >>>>> > To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/golang-nuts/CAJ%2B6RRU%3D%3D33ct1%3D%2B0U10nDLnFjvBXff%2BrrmbYRvwY-TTRReLfw%40mail.gmail.com >>>>> . >>>>> > For more options, visit https://groups.google.com/d/optout. >>>>> >>>> -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAB%3Df9xRK_jXixUyMhfvyz913tRnUi_7Jbp%3D-g13v%3DHR7FZKJBw%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.