[2057] 2009-04-01 David S.

Robert Millan <[email protected]>
Newsgroups gmane.comp.boot-loaders.grub.cvs
Message-ID <[email protected]>
Revision: 2057
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=2057
Author:   robertmh
Date:     2009-04-01 13:01:05 +0000 (Wed, 01 Apr 2009)
Log Message:
-----------
2009-04-01  David S. Miller  <[email protected]>

	* normal/sparc64/setjmp.S: Fix setjmp implementation.
	* include/grub/sparc64/setjmp.h (grub_jmp_buf): Update.
	(grub_setjmp): Mark with 'returns_twice' attribute.
	* include/grub/i386/setjmp.h (grub_setjmp): Likewise
	* include/grub/powerpc/setjmp.h (grub_setjmp): Likewise.
	* include/grub/x86_64/setjmp.h (grub_setjmp): Likewise.

Modified Paths:
--------------
    trunk/grub2/ChangeLog
    trunk/grub2/include/grub/i386/setjmp.h
    trunk/grub2/include/grub/powerpc/setjmp.h
    trunk/grub2/include/grub/sparc64/setjmp.h
    trunk/grub2/include/grub/x86_64/setjmp.h
    trunk/grub2/normal/sparc64/setjmp.S

Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog	2009-04-01 01:26:58 UTC (rev 2056)
+++ trunk/grub2/ChangeLog	2009-04-01 13:01:05 UTC (rev 2057)
@@ -1,3 +1,12 @@
+2009-04-01  David S. Miller  <[email protected]>
+
+	* normal/sparc64/setjmp.S: Fix setjmp implementation.
+	* include/grub/sparc64/setjmp.h (grub_jmp_buf): Update.	 
+	(grub_setjmp): Mark with 'returns_twice' attribute.
+	* include/grub/i386/setjmp.h (grub_setjmp): Likewise
+	* include/grub/powerpc/setjmp.h (grub_setjmp): Likewise.
+	* include/grub/x86_64/setjmp.h (grub_setjmp): Likewise.
+
 2009-04-01  Robert Millan  <[email protected]>
 
 	Reapply fix from 2008-07-28 which was accidentally reverted; also

Modified: trunk/grub2/include/grub/i386/setjmp.h
===================================================================
--- trunk/grub2/include/grub/i386/setjmp.h	2009-04-01 01:26:58 UTC (rev 2056)
+++ trunk/grub2/include/grub/i386/setjmp.h	2009-04-01 13:01:05 UTC (rev 2057)
@@ -1,6 +1,6 @@
 /*
  *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2003,2006,2007  Free Software Foundation, Inc.
+ *  Copyright (C) 2003,2006,2007,2009  Free Software Foundation, Inc.
  *
  *  GRUB is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -21,7 +21,8 @@
 
 typedef unsigned long grub_jmp_buf[6];
 
-int grub_setjmp (grub_jmp_buf env) __attribute__ ((cdecl, regparm (3)));
+int grub_setjmp (grub_jmp_buf env) __attribute__ ((returns_twice, cdecl,
+						   regparm (3)));
 void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn, cdecl,
 							      regparm (3)));
 

Modified: trunk/grub2/include/grub/powerpc/setjmp.h
===================================================================
--- trunk/grub2/include/grub/powerpc/setjmp.h	2009-04-01 01:26:58 UTC (rev 2056)
+++ trunk/grub2/include/grub/powerpc/setjmp.h	2009-04-01 13:01:05 UTC (rev 2057)
@@ -1,6 +1,6 @@
 /*
  *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2002,2004,2006,2007  Free Software Foundation, Inc.
+ *  Copyright (C) 2002,2004,2006,2007,2009  Free Software Foundation, Inc.
  *
  *  GRUB is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -21,7 +21,7 @@
 
 typedef unsigned long grub_jmp_buf[20];
 
-int grub_setjmp (grub_jmp_buf env);
+int grub_setjmp (grub_jmp_buf env) __attribute__ ((returns_twice));
 void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn));
 
 #endif /* ! GRUB_SETJMP_CPU_HEADER */

Modified: trunk/grub2/include/grub/sparc64/setjmp.h
===================================================================
--- trunk/grub2/include/grub/sparc64/setjmp.h	2009-04-01 01:26:58 UTC (rev 2056)
+++ trunk/grub2/include/grub/sparc64/setjmp.h	2009-04-01 13:01:05 UTC (rev 2057)
@@ -1,6 +1,6 @@
 /*
  *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2002,2004,2006,2007  Free Software Foundation, Inc.
+ *  Copyright (C) 2002,2004,2006,2007,2009  Free Software Foundation, Inc.
  *
  *  GRUB is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -19,10 +19,11 @@
 #ifndef GRUB_SETJMP_CPU_HEADER
 #define GRUB_SETJMP_CPU_HEADER	1
 
-/* FIXME (sparc64).  */
-typedef unsigned long grub_jmp_buf[20];
+#include <grub/types.h>
 
-int grub_setjmp (grub_jmp_buf env);
+typedef grub_uint64_t grub_jmp_buf[3];
+
+int grub_setjmp (grub_jmp_buf env) __attribute__ ((returns_twice));
 void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn));
 
 #endif /* ! GRUB_SETJMP_CPU_HEADER */

Modified: trunk/grub2/include/grub/x86_64/setjmp.h
===================================================================
--- trunk/grub2/include/grub/x86_64/setjmp.h	2009-04-01 01:26:58 UTC (rev 2056)
+++ trunk/grub2/include/grub/x86_64/setjmp.h	2009-04-01 13:01:05 UTC (rev 2057)
@@ -1,6 +1,6 @@
 /*
  *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2003,2006,2007  Free Software Foundation, Inc.
+ *  Copyright (C) 2003,2006,2007,2009  Free Software Foundation, Inc.
  *
  *  GRUB is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -21,7 +21,7 @@
 
 typedef unsigned long grub_jmp_buf[8];
 
-int grub_setjmp (grub_jmp_buf env);
+int grub_setjmp (grub_jmp_buf env) __attribute__ ((returns_twice));
 void grub_longjmp (grub_jmp_buf env, int val) __attribute__ ((noreturn));
 
 #endif /* ! GRUB_SETJMP_CPU_HEADER */

Modified: trunk/grub2/normal/sparc64/setjmp.S
===================================================================
--- trunk/grub2/normal/sparc64/setjmp.S	2009-04-01 01:26:58 UTC (rev 2056)
+++ trunk/grub2/normal/sparc64/setjmp.S	2009-04-01 13:01:05 UTC (rev 2057)
@@ -1,6 +1,6 @@
 /*
  *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2005,2007  Free Software Foundation, Inc.
+ *  Copyright (C) 2005,2007,2009  Free Software Foundation, Inc.
  *
  *  GRUB is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License as published by
@@ -26,13 +26,22 @@
  * int grub_setjmp (grub_jmp_buf env)
  */
 FUNCTION(grub_setjmp)
-        ret
-         nop
+	stx	%o7, [%o0 + 0x00]
+	stx	%sp, [%o0 + 0x08]
+	stx	%fp, [%o0 + 0x10]
+	retl
+	 clr	%o0
 
 /*
  * int grub_longjmp (grub_jmp_buf env, int val)
  */
 FUNCTION(grub_longjmp)
-        ret
-         nop
-
+	ldx	[%o0 + 0x10], %g1
+	movrz	%o1, 1, %o1
+	flushw
+	ldx	[%o0 + 0x00], %o7
+	ldx	[%o0 + 0x08], %fp
+	sub	%fp, 192, %sp
+	stx	%g1, [%sp + 2047 + (14 * 8)]
+	retl
+	 restore %o1, 0, %o0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.