Patch: make block_comment work everywhere
Gary Benson
gbenson at redhat.com
Fri Dec 7 08:21:18 PST 2007
Hi Tom,
It's obviously a lot more complicated than I realised. I had
my suspicions: the only assembler my port uses at the moment
is in interpreter code and a couple of stubs (call_stub and
flush_icache_stub), none of which use relocations.
I should be covered by Red Hat's contributor agreement.
Cheers,
Gary
Tom Rodriguez wrote:
> That seems like a good idea and I think it's more straightforward
> in many ways than the original. I'd certainly imagined it would be
> useful to support comments in other situations though the original
> target was really for nmethods. They are being used in the
> stubGenerator in a few cases, and your changes would actually fix a
> minor issue there with the comments only being recorded if
> PrintStubCode is on.
>
> I'm not sure your change is completely correct though. There are a
> couple things to think about. First, compiled code works by
> emitting code into a temporary code blob with extra space and then
> relocating the pieces that we actually filled up into a final code
> blob. This means that if you move the comment collection from the
> CodeBuffer to the CodeBlob you still need to transfer the comments
> from the temporary code blob to the final nmethod. So the place
> where you deleted the set_comments call that transfers ownership
> should be changed to transfer the comments from the source blob to
> the dest blob. Actually you may want to move that code into
> relocate_code_to so that CodeBlob::expand will properly transfer the
> comments too. However you do it I think both expand and
> copy_code_to should change the ownership of the comments.
>
> The other part is that there are multiple sections in a code buffer
> which can contain code and the offsets are all relative to the start
> of the section during construction, with SECT_INSTS always being
> first. This means that offsets into SECT_INSTS don't change after
> relocation but offsets into other sections can. So if you wanted to
> make this completely work you might need to add some tagging to the
> offsets and a relocation pass to clean them up. Alternatively you
> could just distinguish between the cases where relocations were
> needed and assert that block comments don't work in those cases.
> All the cases where we are generating directly code into BufferBlobs
> should only have one section anyway. The existing code probably
> should have asserted when it did nothing instead of silently
> dropping the comments.
>
> I don't see you on the contributor agreement signatories list. Have
> you signed one?
>
> tom
>
> Gary Benson wrote:
> > Hi all,
> >
> > I've been writing the disassembler for my PPC stuff and I noticed
> > that while block_comment worked in some places (stubs) it did not
> > work in others (the interpreter). Looking into it I found that
> > there are two places where comment lists are maintained: in
> > CodeBlobs, and in the CodeBuffers that are created from them. The
> > assembler stores comments in its CodeBuffer, but the disassembler
> > looks for them in the parent CodeBlob. block_comment works in
> > some places because those places copy the comments over to the
> > CodeBlob.
> >
> > It seemed a little strange to be storing in one place and looking
> > in another, so rather than add something to copy the comments in
> > the interpreter generator I altered the assembler to store
> > directly into the CodeBlob, and stripped the comment code from
> > CodeBuffer.
> >
> > Does the attached patch look ok?
> >
> > Cheers,
> > Gary
More information about the hotspot-dev
mailing list