On Tue, May 6, 2008 at 6:17 PM, Peter Teoh <[EMAIL PROTECTED]> wrote:

>
>
> On Wed, May 7, 2008 at 5:20 AM, tejas khatiwala <[EMAIL PROTECTED]>
> wrote:
>
> >
> >
> > 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
> >
>
> BIOS!!!   So I guessed u don't have the luxury of system call like
> "fork()" or "exec()" API in C right?   But if u call your BIOS test program
> at the command line level, then u have a shell.....and so inside your C u
> can do a fork().
>

I'm not sure if I can use fork and exec but assuming that I can, I still
need to have the 64-bit executable somewhere in the BIOS file. So I will
have to copy that file manually to final BIOS file so that my 32-bit file
can jump to that (already known) address.

>
>
> (because if u have ....then inside a 32bit program, just call fork() on a
> 64bit program....and all the loading stuff is handled at the shell
> level....64bit loader will load the binary + 64bit libraries and create the
> 64 bit elf image etc.  )
>
> Alternatively, if u are running it straight from bootup, then u can
> compile your codes as 32bit STATIC program (so all 32bit libraries are
> included), and then compile 64bit as STATIC as well.   And combine two
> together....lots of details when combining...
>

This combining is same as option 3) I mentioned in earlier email. I know and
have tested little bit of combining 2 binary image and make it work and both
of your solutions seem to be "combining" solutions. But if you mean
"linking" by combining then I'd be really interested.

thanks,

/tejas


> but we can discuss this privately....
>
>
> >  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()`
> > > >
> > >
> >
>
>
> --
> Regards,
> Peter Teoh
>

Reply via email to