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
>

Reply via email to