[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] remove target_os
From: |
Javier Martín |
Subject: |
Re: [PATCH] remove target_os |
Date: |
Tue, 27 Jan 2009 18:40:09 +0100 |
El mar, 27-01-2009 a las 18:21 +0100, Christian Franke escribió:
> Javier Martín wrote:
> >> Unfortunately, gcc has no '-fno_os' option to specify the bare CPU as
> >> target.
> >>
> >
> > Might -ffreestanding be what you are looking for?
> >
> >
>
> The option '-ffreestanding' is the same as '-fno-hosted'.
>
> According to gcc (4.3.1) source, '-fno-hosted' clears variable
> 'flag_hosted' and sets '-fno-builtin'. The latter is already set within
> GRUB build.
>
> A cleared 'flag_hosted' apparently has only 2 effects:
> - disable the special handling of 'main()'.
> - #define __STDC_HOSTED__ to 0 instead of 1
>
> There is no effect on the target_os dependent parts of the gcc code
> generation. For example, on i386, __enable_execute_stack() calls are
> generated for target_os netbsd, openbsd and cygwin, but not for linux.
> The emit call is hard-coded in
> gcc/configs/i386/i386.c:x86_initialize_trampoline().
In that case, we are dealing with a GCC bug. We might want to require
the user to create a bare "no-OS" cross compiler. These thingies are
most likely only known to OS developers, but you can build a perfectly
good "i686-pc-elf" GCC (only with no libc, of course). This might be the
Right Way (TM) of building boot code, instead of the current way of
using the OS-targetter compiler and trying to tell it not to do what it
was built to do.
>
> Other workarounds are needed to support building GRUB with code
> generators tailored for various target_os.
>
>
> >>
> >>> AC_MSG_CHECKING([for command to convert module to ELF format])
> >>> -case "${host_os}:${target_os}" in
> >>> - cygwin:cygwin) TARGET_OBJ2ELF='grub-pe2elf' ;;
> >>> +case "${host_os}" in
> >>> + cygwin) TARGET_OBJ2ELF='grub-pe2elf' ;;
> >>> *) ;;
> >>> esac
> >>>
> >>>
> >> This won't work for a Linux cross compiler hosted on Cygwin. It would
> >> emit ELF format and does not need pe2elf.
> >>
> >
> > A, say, AMD64 Linux cross compiler hosted on x86 Cygwin would have
> > $build=i686-pc-cygwin and $host=amd64-linux-gnu. Thus, no conflict ought
> > to arise even with cross compilation enabled.
> >
> >
>
> But the opposite won't work: $host=i686-pc-cygwin would enable
> grub-pe2elf, even if this gcc emits ELF for a linux target.
"The opposite" of a the described situation would be a Linux AMD64
machine cross compiling for a Cygwin x86 machine, that is
$build=amd64-linux-gnu and $host=i686-pc-cygwin. In that case,
i686-pc-cygwin-gcc would generate PE executables, and thus grub-pe2elf
_is_ required indeed.
>
> Christian
>
>
>
> _______________________________________________
> Grub-devel mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/grub-devel
signature.asc
Description: Esta parte del mensaje está firmada digitalmente
- [PATCH] remove target_os, Robert Millan, 2009/01/25
- Re: [PATCH] remove target_os, Christian Franke, 2009/01/26
- Re: [PATCH] remove target_os, Javier Martín, 2009/01/26
- Re: [PATCH] remove target_os, Christian Franke, 2009/01/27
- Re: [PATCH] remove target_os,
Javier Martín <=
- Re: [PATCH] remove target_os, Christian Franke, 2009/01/27
- Re: [PATCH] remove target_os, Javier Martín, 2009/01/27
- Re: [PATCH] remove target_os, Christian Franke, 2009/01/29