All of lore.kernel.org
 help / color / mirror / Atom feed
From: Robert Millan <rmh@aybabtu.com>
To: The development of GRUB 2 <grub-devel@gnu.org>
Subject: merging i386-efi and x86_64-efi (Re: Current SVN is broken on x86_64)
Date: Thu, 7 Aug 2008 14:21:03 +0200	[thread overview]
Message-ID: <20080807122103.GA10038@thorin> (raw)
In-Reply-To: <1217854285.27237.6.camel@dv>

[-- Attachment #1: Type: text/plain, Size: 1388 bytes --]

On Mon, Aug 04, 2008 at 08:51:25AM -0400, Pavel Roskin wrote:
> On Mon, 2008-08-04 at 11:16 +0200, Robert Millan wrote:
> 
> > Furthermore, I had a look and some of the x86_64 versions are just stubs that
> > include the i386 one.
> > 
> > Why don't we handle this like Linux?  They ship a single directory and use
> > #ifdefs where appropiate.  That enforces consistency in the dir layout.
> 
> I think we can do it.  i386 and x86_64 could be joined into one "x86"
> architecture with common headers and sources.  Perhaps the users should
> still use i386 and x86_64 in configure, but the code should be mostly
> common.

I gave a try at this, which I haven't completed yet.  Here's what I have
so far.

The biggest stumbling block seems to be that autoconf doesn't make it easy
to do AC_CHECK_SIZEOF checks for standard compiling and cross-compiling in
the same run (it does support cross-compiling though).

I haven't found a way to do it.  If I modify types.m4 to export its
findings to a variable instead of dumping them to config.h directly,
further calls to the same check won't return different results, even if
CC / CFLAGS has been adjusted.

-- 
Robert Millan

  The DRM opt-in fallacy: "Your data belongs to us. We will decide when (and
  how) you may access your data; but nobody's threatening your freedom: we
  still allow you to remove your data and not access it at all."

[-- Attachment #2: efi_build.diff --]
[-- Type: text/x-diff, Size: 3033 bytes --]

Index: conf/i386-efi.rmk
===================================================================
--- conf/i386-efi.rmk	(revision 1787)
+++ conf/i386-efi.rmk	(working copy)
@@ -1,8 +1,8 @@
 # -*- makefile -*-
 
-COMMON_ASFLAGS = -nostdinc -fno-builtin -m32
-COMMON_CFLAGS = -fno-builtin -m32
-COMMON_LDFLAGS = -melf_i386 -nostdlib
+COMMON_ASFLAGS = -nostdinc -fno-builtin
+COMMON_CFLAGS = -fno-builtin
+COMMON_LDFLAGS = -nostdlib
 
 # Used by various components.  These rules need to precede them.
 normal/lexer.c_DEPENDENCIES = grub_script.tab.h
Index: configure.ac
===================================================================
--- configure.ac	(revision 1787)
+++ configure.ac	(working copy)
@@ -75,7 +75,6 @@
 # Adjust CPU unless target was explicitly specified.
 if test -z "$target_alias"; then
   case "$target_cpu"-"$platform" in
-    x86_64-efi) ;;
     x86_64-*) target_cpu=i386 ;;
     powerpc64-ieee1275) target_cpu=powerpc ;;
   esac
@@ -84,21 +83,15 @@
 # Check if the platform is supported, make final adjustments.
 case "$target_cpu"-"$platform" in
   i386-efi) ;;
-  x86_64-efi) ;;
-  i386-pc) ;;
-  i386-coreboot) ;;
-  i386-linuxbios) platform=coreboot ;;
-  i386-ieee1275) ;;
+  i386-pc)		target_m32=1 ;;
+  i386-coreboot)	target_m32=1 ;;
+  i386-linuxbios)	target_m32=1 ; platform=coreboot ;;
+  i386-ieee1275)	target_m32=1 ;;
   powerpc-ieee1275) ;;
   sparc64-ieee1275) ;;
   *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
 esac
 
-case "$target_cpu" in
-  i386 | powerpc) target_m32=1 ;;
-  x86_64 | sparc64) target_m64=1 ;;
-esac
-
 AC_SUBST(target_cpu)
 AC_SUBST(platform)
 
Index: include/grub/i386/setjmp.h
===================================================================
--- include/grub/i386/setjmp.h	(revision 1787)
+++ include/grub/i386/setjmp.h	(working copy)
@@ -19,10 +19,19 @@
 #ifndef GRUB_SETJMP_CPU_HEADER
 #define GRUB_SETJMP_CPU_HEADER	1
 
-typedef unsigned long grub_jmp_buf[6];
+typedef unsigned long grub_jmp_buf[8];
 
+#ifdef __x86_64__
+
+int grub_setjmp (grub_jmp_buf env);
+void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn));
+
+#else
+
 int grub_setjmp (grub_jmp_buf env) __attribute__ ((cdecl, regparm (3)));
 void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn, cdecl,
 							      regparm (3)));
 
+#endif
+
 #endif /* ! GRUB_SETJMP_CPU_HEADER */
Index: include/grub/i386/types.h
===================================================================
--- include/grub/i386/types.h	(revision 1787)
+++ include/grub/i386/types.h	(working copy)
@@ -19,12 +19,24 @@
 #ifndef GRUB_TYPES_CPU_HEADER
 #define GRUB_TYPES_CPU_HEADER	1
 
+#ifdef __i386__
+
 /* The size of void *.  */
 #define GRUB_TARGET_SIZEOF_VOID_P	4
 
 /* The size of long.  */
 #define GRUB_TARGET_SIZEOF_LONG		4
 
+#else
+
+/* The size of void *.  */
+#define GRUB_TARGET_SIZEOF_VOID_P	8
+
+/* The size of long.  */
+#define GRUB_TARGET_SIZEOF_LONG		8
+
+#endif
+
 /* i386 is little-endian.  */
 #undef GRUB_TARGET_WORDS_BIGENDIAN
 

  parent reply	other threads:[~2008-08-07 12:22 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-04  0:31 Current SVN is broken on x86_64 Felix Zielcke
2008-08-04  5:02 ` Pavel Roskin
2008-08-04  9:16   ` Robert Millan
2008-08-04  9:16 ` Robert Millan
2008-08-04 12:51   ` Pavel Roskin
2008-08-04 15:11     ` Robert Millan
2008-08-04 18:27       ` Pavel Roskin
2008-08-07 12:21     ` Robert Millan [this message]
2008-08-07 12:25       ` merging i386-efi and x86_64-efi (Re: Current SVN is broken on x86_64) Robert Millan
2008-08-04 10:09 ` Current SVN is broken on x86_64 Felix Zielcke
2008-08-07 10:58 ` Current SVN is (still ?, again ?) broken Felix Zielcke
2008-08-07 12:01   ` Bean

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080807122103.GA10038@thorin \
    --to=rmh@aybabtu.com \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.