On Thu, 2009-06-25 at 01:10 +0200, Robert Millan wrote:
> On Wed, Jun 24, 2009 at 03:00:32AM +0200, Robert Millan wrote:
> > A possible solution to this could be to make grub_dl_load_core() create a
> > copy of the module and work on the copy.  This could even be ifdef'ed,
> > but I doubt the performance hit would be significant.
> 
> I found a better approach;  instead of copiing the whole module, we just
> need to copy the symbol tab.  A small adjustment to each of the functions
> that will access it (grub_dl_resolve_symbols and
> grub_arch_dl_relocate_symbols) will make them use the copy instead of
> the original.

Massive use of undef seems inelegant.  Maybe it's better to use
distinctive names instead, e.g. target_Elf_Ehdr v.s. host_Elf_Ehdr?

Also, I'm getting many warnings on i386-pc about redefined Elf_Ehdr when
compiling on x86_64.

Generally, I like the idea for i386-qemu, but for other architectures,
the only change is the increased memory consumption.  I would be willing
to accept this change if you could suggest some universal benefit for
all platforms.

Otherwise, it would be better to use wrappers like get_header() and
put_header() what would do grub_malloc() and grub_free() only if needed
and return the original header otherwise.

I'm fine with adding the symtab field unconditionally, it doesn't cost
much memory.

-- 
Regards,
Pavel Roskin


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to