Correct offset calculation for FreeBSD i386 core NT_PRSTATUS
authorEd Maste <emaste@freebsd.org>
Fri, 14 Feb 2014 21:29:05 +0000 (21:29 +0000)
committerEd Maste <emaste@freebsd.org>
Fri, 14 Feb 2014 21:29:05 +0000 (21:29 +0000)
llvm-svn: 201434

lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp

index a2b02d2..1db5855 100644 (file)
@@ -374,8 +374,8 @@ ParseFreeBSDPrStatus(ThreadData *thread_data, DataExtractor &data,
                      ArchSpec &arch)
 {
     lldb::offset_t offset = 0;
-    bool have_padding = (arch.GetMachine() == llvm::Triple::mips64 ||
-                         arch.GetMachine() == llvm::Triple::x86_64);
+    bool lp64 = (arch.GetMachine() == llvm::Triple::mips64 ||
+                 arch.GetMachine() == llvm::Triple::x86_64);
     int pr_version = data.GetU32(&offset);
 
     Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_PROCESS));
@@ -385,12 +385,15 @@ ParseFreeBSDPrStatus(ThreadData *thread_data, DataExtractor &data,
             log->Printf("FreeBSD PRSTATUS unexpected version %d", pr_version);
     }
 
-    if (have_padding)
-        offset += 4;
-    offset += 28;       // pr_statussz, pr_gregsetsz, pr_fpregsetsz, pr_osreldate
+    // Skip padding, pr_statussz, pr_gregsetsz, pr_fpregsetsz, pr_osreldate
+    if (lp64)
+        offset += 32;
+    else
+        offset += 16;
+
     thread_data->signo = data.GetU32(&offset); // pr_cursig
     offset += 4;        // pr_pid
-    if (have_padding)
+    if (lp64)
         offset += 4;
     
     size_t len = data.GetByteSize() - offset;