qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 1/2] elf-ops.h: Map into memory the ELF to lo


From: Stefano Garzarella
Subject: Re: [Qemu-devel] [PATCH v2 1/2] elf-ops.h: Map into memory the ELF to load
Date: Tue, 23 Jul 2019 16:57:06 +0200
User-agent: NeoMutt/20180716

On Tue, Jul 23, 2019 at 04:33:44PM +0200, Paolo Bonzini wrote:
> On 23/07/19 16:04, Stefano Garzarella wrote:
> > +                    /* Increments the reference count to avoid the unmap */
> > +                    g_mapped_file_ref(gmf);
> >                      /* rom_add_elf_program() seize the ownership of 'data' 
> > */
> >                      rom_add_elf_program(label, data, file_size, mem_size,
> >                                          addr, as);
> 
> I'm a bit worried about rom_reset g_free'ing rom->data, which goes
> against the comment on top of rom_free:
> 
> /* rom->data must be heap-allocated (do not use with
>    rom_add_elf_program()) */

Thanks for pointing it out. We definitely have to avoid that free in this case.

> 
> 
> Since this is the only call to rom_add_elf_program, what about adding a
> GMappedFile* field to struct Rom and passing it here instead of
> data+file_size?

Ehm, we currently use a subsection of the mmapped file as a ROM.
Should we keep the data+file_size parameter? (plus the new GMappedFile*)

At this point, is it better to call 'g_mapped_file_ref(gmf)' in the
'rom_add_elf_program()'?

> 
> Then the g_mapped_file_ref can be in rom_add_elf_program, and you can
> have a nice
> 
> static void rom_free_data(Rom *rom)
> {
>     if (rom->mapped_file) {
>         g_mapped_file_unref(rom->mapped_file);
>         rom->mapped_file = NULL;
>     } else {
>         g_free(rom->data);
>     }
>     rom->data = NULL;
> }
> 
> that is called from both rom_free and rom_reset.

I'll add this in v3.

Thanks,
Stefano



reply via email to

[Prev in Thread] Current Thread [Next in Thread]