This is the mail archive of the elfutils-devel@sourceware.org mailing list for the elfutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 1/2] Show contents NT_SIGINFO core note in readelf


Signed-off-by: Petr Machata <pmachata@redhat.com>
---
 src/ChangeLog                       |    6 ++
 src/readelf.c                       |  103 +++++++++++++++++++++++++++++++++++
 tests/ChangeLog                     |    6 ++
 tests/Makefile.am                   |    2 +-
 tests/run-readelf-mixed-corenote.sh |   59 ++++++++++++++++++++-
 tests/testfile71.bz2                |  Bin 0 -> 18164 bytes
 6 files changed, 174 insertions(+), 2 deletions(-)
 create mode 100644 tests/testfile71.bz2

diff --git a/src/ChangeLog b/src/ChangeLog
index 6788087..9d4c2e2 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2013-09-26  Petr Machata  <pmachata@redhat.com>
+
+	* readelf.c (handle_siginfo_note): New function.
+	(handle_notes_data): Call it to handle NT_SIGINFO notes.
+	(buf_read_int, buf_read_ulong, buf_has_data): New functions.
+
 2013-08-13  Mark Wielaard  <mjw@redhat.com>
 
 	* addr2line.c (options): Add "inlines", 'i'.
diff --git a/src/readelf.c b/src/readelf.c
index 119c100..da3661c 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -42,6 +42,7 @@
 #include <unistd.h>
 #include <sys/param.h>
 #include <sys/stat.h>
+#include <signal.h>
 
 #include <system.h>
 #include "../libelf/libelfP.h"
@@ -8616,6 +8617,104 @@ handle_auxv_note (Ebl *ebl, Elf *core, GElf_Word descsz, GElf_Off desc_pos)
     }
 }
 
+static bool
+buf_has_data (unsigned char const *ptr, unsigned char const *end, size_t sz)
+{
+  return ptr < end && (size_t) (end - ptr) >= sz;
+}
+
+static bool
+buf_read_int (Elf *core, unsigned char const **ptrp, unsigned char const *end,
+	      int *retp)
+{
+  if (! buf_has_data (*ptrp, end, 4))
+    return false;
+
+  *ptrp = convert (core, ELF_T_WORD, 1, retp, *ptrp, 4);
+  return true;
+}
+
+static bool
+buf_read_ulong (Elf *core, unsigned char const **ptrp, unsigned char const *end,
+		uint64_t *retp)
+{
+  size_t sz = gelf_fsize (core, ELF_T_ADDR, 1, EV_CURRENT);
+  if (! buf_has_data (*ptrp, end, sz))
+    return false;
+
+  union
+  {
+    uint64_t u64;
+    uint32_t u32;
+  } u;
+
+  *ptrp = convert (core, ELF_T_ADDR, 1, &u, *ptrp, sizeof u);
+
+  if (sz == 4)
+    *retp = u.u32;
+  else
+    *retp = u.u64;
+  return true;
+}
+
+static void
+handle_siginfo_note (Elf *core, GElf_Word descsz, GElf_Off desc_pos)
+{
+  Elf_Data *data = elf_getdata_rawchunk (core, desc_pos, descsz, ELF_T_BYTE);
+  if (data == NULL)
+    error (EXIT_FAILURE, 0,
+	   gettext ("cannot convert core note data: %s"), elf_errmsg (-1));
+
+  unsigned char const *ptr = data->d_buf;
+  unsigned char const *const end = data->d_buf + data->d_size;
+
+  /* Siginfo head is three ints: signal number, error number, origin
+     code.  */
+  int si_signo, si_errno, si_code;
+  if (! buf_read_int (core, &ptr, end, &si_signo)
+      || ! buf_read_int (core, &ptr, end, &si_errno)
+      || ! buf_read_int (core, &ptr, end, &si_code))
+    {
+    fail:
+      printf ("    Not enough data in NT_SIGINFO note.\n");
+      return;
+    }
+
+  /* Next is a pointer-aligned union of structures.  On 64-bit
+     machines, that implies a word of padding.  */
+  if (gelf_getclass (core) == ELFCLASS64)
+    ptr += 4;
+
+  printf ("    si_signo: %d, si_errno: %d, si_code: %d\n",
+	  si_signo, si_errno, si_code);
+
+  if (si_code > 0)
+    switch (si_signo)
+      {
+      case SIGILL:
+      case SIGFPE:
+      case SIGSEGV:
+      case SIGBUS:
+	{
+	  uint64_t addr;
+	  if (! buf_read_ulong (core, &ptr, end, &addr))
+	    goto fail;
+	  printf ("    fault address: %#" PRIx64 "\n", addr);
+	  break;
+	}
+      default:
+	;
+      }
+  else if (si_code == SI_USER)
+    {
+      int pid, uid;
+      if (! buf_read_int (core, &ptr, end, &pid)
+	  || ! buf_read_int (core, &ptr, end, &uid))
+	goto fail;
+      printf ("    sender PID: %d, sender UID: %d\n", pid, uid);
+    }
+}
+
 static void
 handle_core_note (Ebl *ebl, const GElf_Nhdr *nhdr,
 		  const char *name, const void *desc)
@@ -8689,6 +8788,10 @@ handle_notes_data (Ebl *ebl, const GElf_Ehdr *ehdr,
 		  && !memcmp (name, "CORE", 4))
 		handle_auxv_note (ebl, ebl->elf, nhdr.n_descsz,
 				  start + desc_offset);
+	      else if (nhdr.n_type == NT_SIGINFO
+		       && nhdr.n_namesz == 5 && strcmp (name, "CORE") == 0)
+		handle_siginfo_note (ebl->elf, nhdr.n_descsz,
+				     start + desc_offset);
 	      else
 		handle_core_note (ebl, &nhdr, name, desc);
 	    }
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 34cffd4..7e71661 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,9 @@
+2013-09-26  Petr Machata  <pmachata@redhat.com>
+
+	* Makefile.am (EXTRA_DIST): Add testfile71.bz2.
+	* run-readelf-mixed-corenote.sh: New test for this file.
+	* testfile71.bz2: New file.
+
 2013-09-20  Mark Wielaard  <mjw@redhat.com>
 
 	* allfcts.c (cb): Return DWARF_CB_ABORT.
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 58db6c3..0024395 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -198,7 +198,7 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \
 	     run-readelf-mixed-corenote.sh testfile63.bz2 testfile64.bz2 \
 	     testfile65.bz2 testfile67.bz2 testfile68.bz2 \
 	     testfile69.core.bz2 testfile69.so.bz2 \
-	     testfile70.core.bz2 testfile70.exec.bz2 \
+	     testfile70.core.bz2 testfile70.exec.bz2 testfile71.bz2 \
 	     run-dwfllines.sh run-dwfl-report-elf-align.sh \
 	     testfile-dwfl-report-elf-align-shlib.so.bz2 \
 	     testfilenolines.bz2 test-core-lib.so.bz2 test-core.core.bz2 \
diff --git a/tests/run-readelf-mixed-corenote.sh b/tests/run-readelf-mixed-corenote.sh
index 915bdeb..8823c3e 100755
--- a/tests/run-readelf-mixed-corenote.sh
+++ b/tests/run-readelf-mixed-corenote.sh
@@ -1,5 +1,5 @@
 #! /bin/sh
-# Copyright (C) 2012 Red Hat, Inc.
+# Copyright (C) 2012, 2013 Red Hat, Inc.
 # This file is part of elfutils.
 #
 # This file is free software; you can redistribute it and/or modify
@@ -217,4 +217,61 @@ Note segment of 852 bytes at offset 0x94:
     high_r15: 0x00000000
 EOF
 
+# To reproduce this core dump, do this on x86_64 machine with Linux
+# 3.7 or later:
+# $ gcc -x c <(echo 'int main () { return *(int *)0x12345678; }')
+# $ ./a.out
+testfiles testfile71
+testrun_compare ${abs_top_builddir}/src/readelf -n testfile71 <<\EOF
+
+Note segment of 1476 bytes at offset 0x430:
+  Owner          Data size  Type
+  CORE                 336  PRSTATUS
+    info.si_signo: 11, info.si_code: 0, info.si_errno: 0, cursig: 11
+    sigpend: <>
+    sighold: <>
+    pid: 9664, ppid: 2868, pgrp: 9664, sid: 2868
+    utime: 0.000000, stime: 0.004000, cutime: 0.000000, cstime: 0.000000
+    orig_rax: -1, fpvalid: 0
+    r15:                       0  r14:                       0
+    r13:         140734971656848  r12:                 4195328
+    rbp:      0x00007fff69fe39b0  rbx:                       0
+    r11:            266286012928  r10:         140734971656256
+    r9:                        0  r8:             266289790592
+    rax:               305419896  rcx:                 4195584
+    rdx:         140734971656872  rsi:         140734971656856
+    rdi:                       1  rip:      0x00000000004004f9
+    rflags:   0x0000000000010246  rsp:      0x00007fff69fe39b0
+    fs.base:   0x00007fa1c8933740  gs.base:   0x0000000000000000
+    cs: 0x0033  ss: 0x002b  ds: 0x0000  es: 0x0000  fs: 0x0000  gs: 0x0000
+  CORE                 136  PRPSINFO
+    state: 0, sname: R, zomb: 0, nice: 0, flag: 0x0000000000000200
+    uid: 1000, gid: 1000, pid: 9664, ppid: 2868, pgrp: 9664, sid: 2868
+    fname: a.out, psargs: ./a.out 
+  CORE                 128  SIGINFO
+    si_signo: 11, si_errno: 0, si_code: 1
+    fault address: 0x12345678
+  CORE                 304  AUXV
+    SYSINFO_EHDR: 0x7fff69ffe000
+    HWCAP: 0xafebfbff  <fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss tm pbe>
+    PAGESZ: 4096
+    CLKTCK: 100
+    PHDR: 0x400040
+    PHENT: 56
+    PHNUM: 9
+    BASE: 0
+    FLAGS: 0
+    ENTRY: 0x400400
+    UID: 1000
+    EUID: 1000
+    GID: 1000
+    EGID: 1000
+    SECURE: 0
+    RANDOM: 0x7fff69fe3d19
+    EXECFN: 0x7fff69fe4ff0
+    PLATFORM: 0x7fff69fe3d29
+    NULL
+  CORE                 469  FILE
+EOF
+
 exit 0
diff --git a/tests/testfile71.bz2 b/tests/testfile71.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..ce5b08fea4cad214c72e1d7773cfc34357957a1f
GIT binary patch
literal 18164
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

literal 0
HcmV?d00001

-- 
1.7.6.5


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]