Fix comment in ABIMacOSX_i386::RegisterIsCalleeSaved to say that
authorJason Molenda <jmolenda@apple.com>
Tue, 4 Dec 2012 22:08:50 +0000 (22:08 +0000)
committerJason Molenda <jmolenda@apple.com>
Tue, 4 Dec 2012 22:08:50 +0000 (22:08 +0000)
these are the *non-volatile* registers on Darwin/i386, not the
volatile registers.
Recognize the sp, pc, fp generic reg names as well.

llvm-svn: 169316

lldb/source/Plugins/ABI/MacOSX-i386/ABIMacOSX_i386.cpp

index 1118667..4201edd 100644 (file)
@@ -931,19 +931,21 @@ ABIMacOSX_i386::RegisterIsVolatile (const RegisterInfo *reg_info)
     return RegisterIsCalleeSaved (reg_info);
 }
 
+// v. http://developer.apple.com/library/mac/#documentation/developertools/Conceptual/LowLevelABI/130-IA-32_Function_Calling_Conventions/IA32.html#//apple_ref/doc/uid/TP40002492-SW4
+
 bool
 ABIMacOSX_i386::RegisterIsCalleeSaved (const RegisterInfo *reg_info)
 {
     if (reg_info)
     {
-        // Volatile registers include: ebx, ebp, esi, edi, esp, eip
+        // Saved registers are ebx, ebp, esi, edi, esp, eip
         const char *name = reg_info->name;
         if (name[0] == 'e')
         {
             switch (name[1])
             {
             case 'b': 
-                if (name[2] == 'x') // ebp is volatile in the ABI, but the unwinders can find it
+                if (name[2] == 'x' || name[2] == 'p')
                     return name[3] == '\0';
                 break;
             case 'd':
@@ -960,6 +962,12 @@ ABIMacOSX_i386::RegisterIsCalleeSaved (const RegisterInfo *reg_info)
                 break;
             }
         }
+        if (name[0] == 's' && name[1] == 'p' && name[2] == '\0')   // sp
+            return true;
+        if (name[0] == 'f' && name[1] == 'p' && name[2] == '\0')   // fp
+            return true;
+        if (name[0] == 'p' && name[1] == 'c' && name[2] == '\0')   // pc
+            return true;
     }
     return false;
 }