tech-kern archive

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

Re: Fixing the ELF priorities

Le 03/07/2014 21:40, David Holland a écrit :
> On Thu, Jul 03, 2014 at 03:26:09PM +0200, Maxime Villard wrote:
>  > > Being able to automatically invoke a suitable emulator for user
>  > > binaries of the wrong OS and/or architecture would be very helpful for
>  > > crossbuilding difficult packages.
>  > 
>  > But this isn't related to the priority problem, right?
> Right, I think Justin mentioned it just because it was worth
> mentioning and tangentially related.
>  > Perhaps I haven't been clear enough; the question is:
>  > 
>  >   - exec_elf32 is a module, and is enabled with EXEC_ELF32 (#define).
>  >   - exec_elf32 (module) is dormant on 64bit systems.
>  >   - linux32 and netbsd32 *don't need* exec_elf32 (module), but need
>  >     EXEC_ELF32 (#define).
>  >   - my plan is to keep EXEC_ELF32 defined on 64bit systems, but to disable
>  >     exec_elf32 (module).
>  >   - Problem: linux32 has exec_elf32 (module) as dependency.
>  >   - Question: do I remove this dependency, given the fact that netbsd32
>  >     too does not have it?
> Well ok. It looks to me like the problem is that the EXEC_ELF32 and
> EXEC_ELF64 code each provides a "native" struct execsw entry, but
> obviously only one of them can be native at once so the other one
> won't ever work.
> It seems like the solution, then, is to take the "native" struct
> execsw entries out of the EXEC_ELF32 and EXEC_ELF64 code, and instead
> always provide a single native struct execsw entry in exec_elf.c based
> on ARCH_ELFSIZE. That will always work for native binaries, and a
> 64-bit machine with compat32 (of whatever flavor) will load one or
> more additional execsw entries via compat32 that use compat32.
> And then the compat_linux32, compat_netbsd32, etc. can all depend on
> the EXEC_ELF32 module like they need to.

Yes. Normally there should be one, native exec_elf module, and another
exec_elf32 for linux32 and netbsd32.

But exec_elf{32/64} also compile core_elf{32/64}.c, and they all rely
on ELFSIZE, EXEC_ELF32/EXEC_ELF64, ARCH_ELFSIZE, etc, that are defined
everywhere and nowhere. It is not clear to me how all these #defines are
supposed to work.

> AIUI, btw, it is wrong for this dependency to depend on whether
> EXEC_ELF32 is defined during compilation; theoretically if EXEC_ELF32
> is compiled into the kernel the module should still depend on it and
> will still "load" it properly. (However, it's possible that the reason
> such logic is in place is that this doesn't actually work in
> practice.)
> The question is whether taking the "native" execsw entries out of the
> EXEC_ELF32 and EXEC_ELF64 code will break the module system. I'm not
> clear on this.

I don't think it would break the module system. But this big change will
surely break something else. That's why I wanted to keep the current
architecture and just remove exec_elf32 on 64bit systems, for the moment.

Home | Main Index | Thread Index | Old Index