<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
</head>
<body dir="ltr" bgcolor="#ffffff" text="#000000">
Eli Billauer wrote:
<blockquote cite="mid:4B77E494.3020301@billauer.co.il" type="cite">
  <pre wrap="">

So I wondered if I could compile it all as 32 bit, and then somehow get 
the 64-bit kernel to accept this alien module?

  </pre>
</blockquote>
Gut feeling - no, you can't. Not with unreasonable effort, which is
about tantamount to running 32 and 64 bit kernels simultaneously.<br>
<br>
Instead of thinking of the linker as the problem, why not look at the
desired end result. Even if we, somehow, get the module to load, what
will it have? The kernel is running in virtual addresses that are
located at the very end of the virtual address space. I'm not sure
whether this means 42, 48 or 64 bits, but is definitely more than than
where a 32 bit kernel would be located. This also means that the 32 bit
module has no means of even containing the pointers to the functions it
needs inside its registers/GOT.<br>
<br>
In order to solve this, you would need to map some parts of the kernel
to its usual address (0xc0000000). Since the kernel's address space is
mapped across all user space contexts, this would punch a hole in the
middle of the address space for all 64 bit applications, as well as
restore the wasted 1GB virtual area that running on 64bit kernel saves
you when running 32bit user space.<br>
<br>
Even if you, somehow, manage to solve this problem, you are very far
from being able to actually run the module. The X86 architecture
assigns 32/64 bit meaning to specific segments. In other words, the
SEGMENT REGISTER of a 32bit module needs to be different than a 64bit
module. This implies a type of context switching between the main
kernel and the 32bit module which I'm not sure whether the kernel is
built to perform.<br>
<br>
In conclusion - if you want to go that route, you are far better off
implementing the kernel interfaces in user space, and running the 32bit
module there.<br>
<br>
Shachar<br>
<pre class="moz-signature" cols="72">-- 
Shachar Shemesh
Lingnu Open Source Consulting Ltd.
<a class="moz-txt-link-freetext" href="http://www.lingnu.com">http://www.lingnu.com</a>
</pre>
</body>
</html>