On Tue, May 6, 2008 at 7:34 AM, Peter Teoh <[EMAIL PROTECTED]> wrote:
> First at the hardware level: AMD64 has a few mode, among them pure > 64-bit, pure 32bit, mixed 64-32-bit, and etc. So theoretically at > the assembly level, u can still run 32bit assembly a 64-bit CPU. > > 2nd, at the software level (essentially: it is possible to run 32bit > in 64bit environment.....done by the different distros as below): > > http://www.redhat.com/magazine/009jul05/features/multilib/ > http://www.debian-administration.org/articles/534 > > http://www-uxsup.csx.cam.ac.uk/pub/doc/suse/suse9.2/suselinux-adminguide_en/ch06.html > > http://www.scribd.com/doc/363677/Benchmarks-AMD64-in-32bit-mode-vs-64bit-mode-Ubuntu > https://help.ubuntu.com/community/32bit_and_64bit > > How all these work (*I think*) is basically having a 64-bit shell > (windows is called WOW64 http://en.wikipedia.org/wiki/WOW64) that can > switch to 32 bit mode to run the program, and therefore everything > inside that process are running at 32bit, and vice versa. Some > binary-only applications (like Flash) may not have 64-bit version, and > therefore the browser have to be 32bit. > > But all kernel modules/kernel development (*I think*) must be done in > a 64bit environment....unless there exists a 32bit kernel wrapper in > 64bit kernel which i am not aware of. > > I suspect I may have misunderstood u...in view of what is written > above please elaborate your requirements???? I am working on a 32-bit BIOS that is running on 32-bit hardware and as further development we want to test 64-bit processors (new Xeon chips). The problem is, I cannot recompile BIOS to 64-bit mode due to compatibility reasons. So the requirement is to call 64-bit code from a 32-bit code. There were 3 ways I could have made this work: 1) Compile 32-bit BIOS and 64-bit code separately and try to link them with some modification (if any) I asked earlier in this forum. 2) Call an assembly file from 32-bit code. This assembly file will make transition from 32-bit to 32e (64-bit) mode and call the function in 64-bit code, comes back and makes the transition back to 32-bit mode. Here, again the problem remains the same. The assembly file will be compiled either 32-bit or 64-bit and there's no way I can link all 3 files together. 3) Compile and lijnk 32-bit C and asm files as one file; compile 64-bit C file separately and put the object code into a file at known addresses. Make the 32-bit linked file jump to the address of 64-bit file and come back. Though, I haven't tried but I think I can make 3) work but that is my last resort and I want to find out some way to be able to compile and link 32-bit and 64-bit mode code together or be able to call 64-bit code (64 or 32-bit ELF header) from 32-bit code (32-bit ELF header). Please help me with this and correct me if I have some misunderstanding about ELF headers. /tejas > > > On Tue, May 6, 2008 at 2:14 AM, tejas khatiwala <[EMAIL PROTECTED]> > wrote: > > Hello, > > > > This is not exactly relevant to Linux kernel but I'm gonna ask any way. > > > > Is there any way I can modify a 64-bit ELF object file to make it look > like > > 32-bit ELF object file and link it (using `ld`) with 32-bit ELF file? > > > > I tried libelf but was unsuccessful. I had this pretty link > > http://people.freebsd.org/~jkoshy/download/libelf/article.html<http://people.freebsd.org/%7Ejkoshy/download/libelf/article.html>from > > Freebsd > > website and it seems like the libelf library on Freebsd system is not > > similar to that on Linux system as it complained for "vis.h" headerfile > and > > few library calls such as `elf_setshstrndx()` > > > > Any suggestions? > > > > Thanks :-) > > > > /tejas > > > > > > -- > Regards, > Peter Teoh >