commit-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[2057] 2009-04-01 David S.


From: Robert Millan
Subject: [2057] 2009-04-01 David S.
Date: Wed, 01 Apr 2009 13:01:05 +0000

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  <address@hidden>

        * 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  <address@hidden>
+
+       * 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  <address@hidden>
 
        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





reply via email to

[Prev in Thread] Current Thread [Next in Thread]