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]

Re: [patch] Implement reglocs for s390/s390x


Hi Roland,

jankratochvil/s390-core but it is based on jankratochvil/readelf-width

On Wed, 10 Oct 2012 22:44:31 +0200, Roland McGrath wrote:
> > It is there for special handling of ./tests/run-readelf-vmcoreinfo.sh .
> > So I put there 'offset == 0' which is still compatible with VMCOREINFO and
> > removed the unclean previous fix.
> 
> Sorry if I'm being dense.  But I think we still need some more explanation
> about this, and should make it clear in comments.  (Of course it's my fault
> for not doing this five years ago, but I don't have time to puzzle through
> it now myself.)  The comment shouldn't say it's a special case for a
> particular note type.  If anything, say it's a special case for '\n'
> format.  But I'd still like first to see some more thorough explanation
> about what the special case actually does differently than the general
> case.

I do not see how to design something which has no current use.

Formats 'b', 'B' and '\n' are really very special as they process everything
till the end of the note.  So it does not make sense to combine them with
printing some other data as there are no other data.

The bug was that format 'x' was processed by this special code.

So I made them very explicitly special now, more than before.


> Incidentally, it looks to me like a '\n' item with descsz==0 will crash
> (assert) since Petr's change.  Can you verify that and fix it?

It should be fixed now as part of the change.


> I think any readelf changes we settle on should be done in a separate
> change before the backend additions.

I can commit it separately.


> > --- a/backends/linux-core-note.c
> > +++ b/backends/linux-core-note.c
> > @@ -83,6 +83,9 @@ struct EBLHOOK(prstatus)
> >    struct EBLHOOK(timeval) pr_cstime;
> >    FIELD (ULONG, pr_reg[PRSTATUS_REGS_SIZE / sizeof (ULONG)]);
> >    FIELD (INT, pr_fpvalid);
> > +#ifdef ALIGN_STRUCT
> > +  char alignment[] __attribute__ ((aligned (ALIGN_STRUCT)));
> > +#endif
> >  };
> 
> The aligned attribute should be on the pr_reg field, since that's
> what actually has that alignment requirement.  What I'd do is:

OK, thanks (I was not aware 'aligned' aligns even end - not just start - of
fields).

But I had to create there also PR_FPVALID_TYPE as both pr_reg and whole
pr_status have extra alignment to 8 bytes on s390.


> It's weird to use .count = 0 to mean .count = 1.
> I know arm_corenote.c does that, but I don't know why.

I have therefore removed it also from arm_corenote.c in this patch.


Thanks,
Jan


commit a1380e679928424bd6c1a5adfa65e55214418b5c
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Wed Oct 10 19:32:05 2012 +0200

    backends/
    2012-10-12  Jan Kratochvil  <jan.kratochvil@redhat.com>
    	    Roland McGrath <roland@hack.frob.com>
    
    	* Makefile.am (s390_SRCS): Add s390_corenote.c and s390x_corenote.c.
    	* linux-core-note.c (PR_REG_TYPE, ALIGN_PR_REG_TYPE, PR_FPVALID_TYPE)
    	(ALIGN_PR_FPVALID_TYPE): New definitions.
    	(struct EBLHOOK(prstatus)): Change field pr_reg to type PR_REG_TYPE and
    	field pr_fpvalid to type PR_FPVALID_TYPE.
    	(EXTRA_ITEMS): New macro.
    	* s390_corenote.c: New file.
    	* s390_init.c (s390x_core_note): New declaration.
    	(s390_init): Install s390x_core_note and s390_core_note.
    	* s390x_corenote.c: New file.
    
    src/
    2012-10-12  Jan Kratochvil  <jan.kratochvil@redhat.com>
    
    	* readelf.c (handle_core_items): New variable wrap, choose
    	REGISTER_WRAP_COLUMN for "register" group.  Use it instead of
    	ITEM_WRAP_COLUMN.  Limit special repeated items handling to
    	OFFSET 0 and formats '\n', 'b' and 'B'.  Initialize COLNO to MAX of
    	also REGISTER_WRAP_COLUMN.
    
    tests/
    2012-10-12  Jan Kratochvil  <jan.kratochvil@redhat.com>
    
    	* run-readelf-mixed-corenote.sh: New testcase for readelf -n of s390
    	and s390x core notes.
    	* testfile67.bz2: New file.
    	* testfile68.bz2: New file.
    
    Signed-off-by: Jan Kratochvil <jan.kratochvil@redhat.com>

diff --git a/backends/ChangeLog b/backends/ChangeLog
index cca7113..17716d9 100644
--- a/backends/ChangeLog
+++ b/backends/ChangeLog
@@ -1,4 +1,18 @@
 2012-10-12  Jan Kratochvil  <jan.kratochvil@redhat.com>
+	    Roland McGrath <roland@hack.frob.com>
+
+	* Makefile.am (s390_SRCS): Add s390_corenote.c and s390x_corenote.c.
+	* linux-core-note.c (PR_REG_TYPE, ALIGN_PR_REG_TYPE, PR_FPVALID_TYPE)
+	(ALIGN_PR_FPVALID_TYPE): New definitions.
+	(struct EBLHOOK(prstatus)): Change field pr_reg to type PR_REG_TYPE and
+	field pr_fpvalid to type PR_FPVALID_TYPE.
+	(EXTRA_ITEMS): New macro.
+	* s390_corenote.c: New file.
+	* s390_init.c (s390x_core_note): New declaration.
+	(s390_init): Install s390x_core_note and s390_core_note.
+	* s390x_corenote.c: New file.
+
+2012-10-12  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
 	* linux-core-note.c (prstatus_items): Rename groups of sigpend and
 	sighold to signal2 and signal3.
diff --git a/backends/Makefile.am b/backends/Makefile.am
index 982ff2a..283bbfc 100644
--- a/backends/Makefile.am
+++ b/backends/Makefile.am
@@ -94,7 +94,8 @@ ppc64_SRCS = ppc64_init.c ppc64_symbol.c ppc64_retval.c \
 libebl_ppc64_pic_a_SOURCES = $(ppc64_SRCS)
 am_libebl_ppc64_pic_a_OBJECTS = $(ppc64_SRCS:.c=.os)
 
-s390_SRCS = s390_init.c s390_symbol.c s390_regs.c s390_retval.c
+s390_SRCS = s390_init.c s390_symbol.c s390_regs.c s390_retval.c \
+	    s390_corenote.c s390x_corenote.c
 libebl_s390_pic_a_SOURCES = $(s390_SRCS)
 am_libebl_s390_pic_a_OBJECTS = $(s390_SRCS:.c=.os)
 
diff --git a/backends/arm_corenote.c b/backends/arm_corenote.c
index d527944..c5d8d88 100644
--- a/backends/arm_corenote.c
+++ b/backends/arm_corenote.c
@@ -84,7 +84,7 @@ static const Ebl_Core_Item vfp_items[] =
     {
       .name = "fpscr", .group = "register",
       .offset = 0,
-      .count = 0, .type = ELF_T_WORD, .format = 'x',
+      .type = ELF_T_WORD, .format = 'x',
     },
   };
 
diff --git a/backends/linux-core-note.c b/backends/linux-core-note.c
index b09154f..3526c23 100644
--- a/backends/linux-core-note.c
+++ b/backends/linux-core-note.c
@@ -42,6 +42,18 @@
 #define	INT			int32_t
 #define ALIGN_INT		4
 #define TYPE_INT		ELF_T_SWORD
+#ifndef PR_REG_TYPE
+# define PR_REG_TYPE		ULONG
+#endif
+#ifndef ALIGN_PR_REG_TYPE
+# define ALIGN_PR_REG_TYPE	ALIGN_ULONG
+#endif
+#ifndef PR_FPVALID_TYPE
+# define PR_FPVALID_TYPE	INT
+#endif
+#ifndef ALIGN_PR_FPVALID_TYPE
+# define ALIGN_PR_FPVALID_TYPE	ALIGN_INT
+#endif
 
 #define FIELD(type, name) type name __attribute__ ((aligned (ALIGN_##type)))
 
@@ -81,8 +93,8 @@ struct EBLHOOK(prstatus)
   struct EBLHOOK(timeval) pr_stime;
   struct EBLHOOK(timeval) pr_cutime;
   struct EBLHOOK(timeval) pr_cstime;
-  FIELD (ULONG, pr_reg[PRSTATUS_REGS_SIZE / sizeof (ULONG)]);
-  FIELD (INT, pr_fpvalid);
+  FIELD (PR_REG_TYPE, pr_reg[PRSTATUS_REGS_SIZE / sizeof (PR_REG_TYPE)]);
+  FIELD (PR_FPVALID_TYPE, pr_fpvalid);
 };
 
 #define	FNAMESZ	16
@@ -265,6 +277,17 @@ EBLHOOK(core_note) (nhdr, name, regs_offset, nregloc, reglocs, nitems, items)
       *items = extra_items;						      \
       return 1;
 
+#define EXTRA_ITEMS(type, size, extra_items)				      \
+    case type:								      \
+      if (nhdr->n_descsz != size)					      \
+	return 0;							      \
+      *regs_offset = 0;							      \
+      *nregloc = 0;							      \
+      *reglocs = NULL;							      \
+      *nitems = sizeof extra_items / sizeof extra_items[0];		      \
+      *items = extra_items;						      \
+      return 1;
+
 #ifdef FPREGSET_SIZE
     EXTRA_REGSET (NT_FPREGSET, FPREGSET_SIZE, fpregset_regs)
 #endif
diff --git a/backends/s390_corenote.c b/backends/s390_corenote.c
new file mode 100644
index 0000000..9110218
--- /dev/null
+++ b/backends/s390_corenote.c
@@ -0,0 +1,189 @@
+/* S390 specific core note handling.
+   Copyright (C) 2012 Red Hat, Inc.
+   This file is part of elfutils.
+
+   This file is free software; you can redistribute it and/or modify
+   it under the terms of either
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at
+       your option) any later version
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at
+       your option) any later version
+
+   or both in parallel, as here.
+
+   elfutils is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+
+   You should have received copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see <http://www.gnu.org/licenses/>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <elf.h>
+#include <inttypes.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <sys/time.h>
+
+#ifndef BITS
+# define BITS 		32
+# define BACKEND	s390_
+#else
+# define BITS 		64
+# define BACKEND	s390x_
+#endif
+#include "libebl_CPU.h"
+
+static const Ebl_Register_Location prstatus_regs[] =
+  {
+#define GR(at, n, dwreg, b)						\
+    { .offset = at * BITS/8, .regno = dwreg, .count = n, .bits = b }
+
+    GR ( 0,  1, 64, BITS),		/* pswm */
+    GR ( 1,  1, 65, BITS),		/* pswa */
+    GR ( 2, 16,  0, BITS),		/* r0-r15 */
+    GR (18, 16, 48,   32),		/* ar0-ar15 */
+
+#undef	GR
+  };
+
+  /* orig_r2 is at offset (BITS == 32 ? 34 * 4 : 26 * 8).  */
+#define PRSTATUS_REGS_SIZE	(BITS / 8 * (BITS == 32 ? 35 : 27))
+
+static const Ebl_Register_Location fpregset_regs[] =
+  {
+#define FPR(at, n, dwreg)						\
+    { .offset = at * 64/8, .regno = dwreg, .count = n, .bits = 64 }
+
+    /* fpc is at offset 0, see fpregset_items, it has no assigned DWARF regno.
+       Bytes at offsets 4 to 7 are unused.  */
+    FPR (1 +  0, 1, 16),	/* f0 */
+    FPR (1 +  1, 1, 20),	/* f1 */
+    FPR (1 +  2, 1, 17),	/* f2 */
+    FPR (1 +  3, 1, 21),	/* f3 */
+    FPR (1 +  4, 1, 18),	/* f4 */
+    FPR (1 +  5, 1, 22),	/* f5 */
+    FPR (1 +  6, 1, 19),	/* f6 */
+    FPR (1 +  7, 1, 23),	/* f7 */
+    FPR (1 +  8, 1, 24),	/* f8 */
+    FPR (1 +  9, 1, 28),	/* f9 */
+    FPR (1 + 10, 1, 25),	/* f10 */
+    FPR (1 + 11, 1, 29),	/* f11 */
+    FPR (1 + 12, 1, 26),	/* f12 */
+    FPR (1 + 13, 1, 30),	/* f13 */
+    FPR (1 + 14, 1, 27),	/* f14 */
+    FPR (1 + 15, 1, 31),	/* f15 */
+
+#undef	FPR
+  };
+
+static const Ebl_Core_Item fpregset_items[] =
+  {
+    {
+      .name = "fpc", .group = "register", .offset = 0, .type = ELF_T_WORD,
+      .format = 'x',
+    },
+  };
+
+/* Do not set FPREGSET_SIZE so that we can supply fpregset_items.  */
+#define EXTRA_NOTES_FPREGSET \
+    EXTRA_REGSET_ITEMS (NT_FPREGSET, 17 * 8, fpregset_regs, fpregset_items)
+
+#if BITS == 32
+# define ULONG			uint32_t
+# define ALIGN_ULONG		4
+# define TYPE_ULONG		ELF_T_WORD
+# define TYPE_LONG		ELF_T_SWORD
+# define UID_T			uint16_t
+# define GID_T			uint16_t
+# define ALIGN_UID_T		2
+# define ALIGN_GID_T		2
+# define TYPE_UID_T		ELF_T_HALF
+# define TYPE_GID_T		ELF_T_HALF
+#else
+# define ULONG			uint64_t
+# define ALIGN_ULONG		8
+# define TYPE_ULONG		ELF_T_XWORD
+# define TYPE_LONG		ELF_T_SXWORD
+# define UID_T			uint32_t
+# define GID_T			uint32_t
+# define ALIGN_UID_T		4
+# define ALIGN_GID_T		4
+# define TYPE_UID_T		ELF_T_WORD
+# define TYPE_GID_T		ELF_T_WORD
+#endif
+#define PID_T			int32_t
+#define ALIGN_PID_T		4
+#define TYPE_PID_T		ELF_T_SWORD
+#define ALIGN_PR_REG_TYPE	8
+#define ALIGN_PR_FPVALID_TYPE	8
+
+#define PRSTATUS_REGSET_ITEMS					\
+  {								\
+    .name = "orig_r2", .type = TYPE_LONG, .format = 'd',	\
+    .offset = offsetof (struct EBLHOOK(prstatus),		\
+			pr_reg[BITS == 32 ? 34 : 26]),		\
+    .group = "register"						\
+  }
+
+#if BITS == 32
+
+static const Ebl_Core_Item high_regs_items[] =
+  {
+#define HR(n)								\
+    {									\
+      .name = "high_r" #n , .group = "register", .offset = (n) * 4,	\
+      .type = ELF_T_WORD, .format = 'x',				\
+    }
+
+    /* Upper halves of r0-r15 are stored here.
+       FIXME: They are currently not combined with the r0-r15 lower halves.  */
+    HR (0), HR (1), HR (2), HR (3), HR (4), HR (5), HR (6), HR (7),
+    HR (8), HR (9), HR (10), HR (11), HR (12), HR (13), HR (14), HR (15)
+
+#undef HR
+  };
+
+#define EXTRA_NOTES_HIGH_GPRS \
+  EXTRA_ITEMS (NT_S390_HIGH_GPRS, 16 * 4, high_regs_items)
+
+#else /* BITS == 64 */
+
+#define EXTRA_NOTES_HIGH_GPRS
+
+#endif /* BITS == 64 */
+
+static const Ebl_Core_Item last_break_items[] =
+  {
+    {
+      .name = "last_break", .group = "system", .offset = BITS == 32 ? 4 : 0,
+      .type = BITS == 32 ? ELF_T_WORD : ELF_T_XWORD, .format = 'x',
+    },
+  };
+
+static const Ebl_Core_Item system_call_items[] =
+  {
+    {
+      .name = "system_call", .group = "system", .offset = 0, .type = ELF_T_WORD,
+      .format = 'x',
+    },
+  };
+
+#define	EXTRA_NOTES							  \
+  EXTRA_NOTES_FPREGSET							  \
+  EXTRA_NOTES_HIGH_GPRS							  \
+  EXTRA_ITEMS (NT_S390_LAST_BREAK, 8, last_break_items)	  \
+  EXTRA_ITEMS (NT_S390_SYSTEM_CALL, 4, system_call_items)
+
+#include "linux-core-note.c"
diff --git a/backends/s390_init.c b/backends/s390_init.c
index 528e357..91fe4b8 100644
--- a/backends/s390_init.c
+++ b/backends/s390_init.c
@@ -37,6 +37,8 @@
 /* This defines the common reloc hooks based on arm_reloc.def.  */
 #include "common-reloc.c"
 
+extern __typeof (s390_core_note) s390x_core_note;
+
 
 const char *
 s390_init (elf, machine, eh, ehlen)
@@ -55,6 +57,10 @@ s390_init (elf, machine, eh, ehlen)
   HOOK (eh, reloc_simple_type);
   HOOK (eh, register_info);
   HOOK (eh, return_value_location);
+  if (eh->class == ELFCLASS64)
+    eh->core_note = s390x_core_note;
+  else
+    HOOK (eh, core_note);
 
   /* Only the 64-bit format uses the incorrect hash table entry size.  */
   if (eh->class == ELFCLASS64)
diff --git a/backends/s390x_corenote.c b/backends/s390x_corenote.c
new file mode 100644
index 0000000..427bf7d
--- /dev/null
+++ b/backends/s390x_corenote.c
@@ -0,0 +1,2 @@
+#define BITS 64
+#include "s390_corenote.c"
diff --git a/src/ChangeLog b/src/ChangeLog
index 9d6fbe3..63296ce 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,13 @@
 2012-10-12  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
+	* readelf.c (handle_core_items): New variable wrap, choose
+	REGISTER_WRAP_COLUMN for "register" group.  Use it instead of
+	ITEM_WRAP_COLUMN.  Limit special repeated items handling to
+	OFFSET 0 and formats '\n', 'b' and 'B'.  Initialize COLNO to MAX of
+	also REGISTER_WRAP_COLUMN.
+
+2012-10-12  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
 	* readelf.c (ITEM_WRAP_COLUMN, REGISTER_WRAP_COLUMN): Merge to ...
 	(WRAP_COLUMN): ... here.
 	(print_core_item): Remove parameter format_max.  Update function
diff --git a/src/readelf.c b/src/readelf.c
index 273275b..bf19e23 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -7675,6 +7675,19 @@ handle_core_items (Elf *core, const void *desc, size_t descsz,
   if (nitems == 0)
     return 0;
 
+  unsigned int colno = 0;
+  if (items[0].format == '\n' || items[0].format == 'b'
+      || items[0].format == 'B')
+    {
+      assert (nitems == 1);
+      assert (items[0].offset == 0);
+      size_t size = descsz;
+      colno = handle_core_item (core, items, desc, colno, &size);
+      /* If SIZE is not zero here there is some remaining data.  But we do not
+	 know how to process it anyway.  */
+      return colno;
+    }
+
   /* Sort to collect the groups together.  */
   const Ebl_Core_Item *sorted_items[nitems];
   for (size_t i = 0; i < nitems; ++i)
@@ -7692,23 +7705,7 @@ handle_core_items (Elf *core, const void *desc, size_t descsz,
   qsort (groups, ngroups, sizeof groups[0], &compare_core_item_groups);
 
   /* Write out all the groups.  */
-  unsigned int colno = 0;
-
   const void *last = desc;
-  if (nitems == 1)
-    {
-      size_t size = descsz;
-      /* If this note contains registers as well as items, don't pass
-	 &size to express that we don't wish to repeat.  */
-      colno = handle_core_item (core, sorted_items[0], desc, colno,
-				size != 0 ? &size : NULL);
-
-      if (size == 0)
-	return colno;
-      desc += descsz - size;
-      descsz = size;
-    }
-
   do
     {
       for (size_t i = 0; i < ngroups; ++i)
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 2495fb5..1ac7dcc 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,10 @@
+2012-10-12  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+	* run-readelf-mixed-corenote.sh: New testcase for readelf -n of s390
+	and s390x core notes.
+	* testfile67.bz2: New file.
+	* testfile68.bz2: New file.
+
 2012-10-10  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
 	* run-addrname-test.sh: New test for core vDSO bias.
diff --git a/tests/run-readelf-mixed-corenote.sh b/tests/run-readelf-mixed-corenote.sh
index f9b96c8..db7eb18 100755
--- a/tests/run-readelf-mixed-corenote.sh
+++ b/tests/run-readelf-mixed-corenote.sh
@@ -84,4 +84,137 @@ Note segment of 892 bytes at offset 0x274:
     d30: 0x0000000000000000  d31: 0x0000000000000000
 EOF
 
+testfiles testfile67
+testrun_compare ../src/readelf -n testfile67 <<\EOF
+
+Note segment of 1044 bytes at offset 0xe8:
+  Owner          Data size  Type
+  CORE                 336  PRSTATUS
+    info.si_signo: 4, info.si_code: 0, info.si_errno: 0, cursig: 4
+    sigpend: <>
+    sighold: <>
+    pid: 805, ppid: 804, pgrp: 804, sid: 699
+    utime: 0.000042, stime: 0.000103, cutime: 0.000000, cstime: 0.000000
+    orig_r2: 2571552016, fpvalid: 1
+    pswm:   0x0705c00180000000  pswa:   0x00000000800000d6
+    r0:         4393751543808  r1:         4398002544388
+    r2:                    11  r3:            2571578208
+    r4:            2571702016  r5:         4398003235624
+    r6:            2571580768  r7:            2571702016
+    r8:            2571578208  r9:            2571552016
+    r10:           2571552016  r11:                    0
+    r12:        4398003499008  r13:           2148274656
+    r14:                    0  r15:        4398040761216
+    a0:   0x000003ff  a1:   0xfd54a6f0  a2:   0x00000000  a3:   0x00000000
+    a4:   0x00000000  a5:   0x00000000  a6:   0x00000000  a7:   0x00000000
+    a8:   0x00000000  a9:   0x00000000  a10:  0x00000000  a11:  0x00000000
+    a12:  0x00000000  a13:  0x00000000  a14:  0x00000000  a15:  0x00000000
+  CORE                 136  PRPSINFO
+    state: 0, sname: R, zomb: 0, nice: 0, flag: 0x0000000000400400
+    uid: 0, gid: 0, pid: 805, ppid: 804, pgrp: 804, sid: 699
+    fname: 1, psargs: ./1 
+  CORE                 304  AUXV
+    SYSINFO_EHDR: 0
+    HWCAP: 0x37f
+    PAGESZ: 4096
+    CLKTCK: 100
+    PHDR: 0x80000040
+    PHENT: 56
+    PHNUM: 2
+    BASE: 0
+    FLAGS: 0
+    ENTRY: 0x800000d4
+    UID: 0
+    EUID: 0
+    GID: 0
+    EGID: 0
+    SECURE: 0
+    RANDOM: 0x3ffffa8463c
+    EXECFN: 0x3ffffa85ff4
+    PLATFORM: 0x3ffffa8464c
+    NULL
+  CORE                 136  FPREGSET
+    fpc: 0x00000000
+    f0:  0x0000000000000040  f1:  0x4b00000000000000
+    f2:  0x0000000000000041  f3:  0x3ad50b5555555600
+    f4:  0x0000000000000000  f5:  0x0000000000000000
+    f6:  0x0000000000000000  f7:  0x0000000000000000
+    f8:  0x0000000000000000  f9:  0x0000000000000000
+    f10: 0x0000000000000000  f11: 0x0000000000000000
+    f12: 0x0000000000000000  f13: 0x0000000000000000
+    f14: 0x0000000000000000  f15: 0x0000000000000000
+  LINUX                  8  S390_LAST_BREAK
+    last_break: 0x000003fffd75ccbe
+  LINUX                  4  S390_SYSTEM_CALL
+    system_call: 0x00000000
+EOF
+
+testfiles testfile68
+testrun_compare ../src/readelf -n testfile68 <<\EOF
+
+Note segment of 852 bytes at offset 0x94:
+  Owner          Data size  Type
+  CORE                 224  PRSTATUS
+    info.si_signo: 4, info.si_code: 0, info.si_errno: 0, cursig: 4
+    sigpend: <>
+    sighold: <>
+    pid: 839, ppid: 838, pgrp: 838, sid: 699
+    utime: 0.000043, stime: 0.000102, cutime: 0.000000, cstime: 0.000000
+    orig_r2: -1723388288, fpvalid: 1
+    pswm:  0x070dc000  pswa:  0x8040009a
+    r0:            0  r1:    -43966716  r2:           11  r3:  -1723238816
+    r4:  -1723265280  r5:    -43275480  r6:  -1723245280  r7:  -1723265280
+    r8:  -1723238816  r9:  -1723388288  r10: -1723388288  r11:           0
+    r12:   -43012096  r13: -2146692640  r14:           0  r15:  2139883440
+    a0:   0x000003ff  a1:   0xfd54a6f0  a2:   0x00000000  a3:   0x00000000
+    a4:   0x00000000  a5:   0x00000000  a6:   0x00000000  a7:   0x00000000
+    a8:   0x00000000  a9:   0x00000000  a10:  0x00000000  a11:  0x00000000
+    a12:  0x00000000  a13:  0x00000000  a14:  0x00000000  a15:  0x00000000
+  CORE                 124  PRPSINFO
+    state: 0, sname: R, zomb: 0, nice: 0, flag: 0x00400400
+    uid: 0, gid: 0, pid: 839, ppid: 838, pgrp: 838, sid: 699
+    fname: 2, psargs: ./2 
+  CORE                 152  AUXV
+    SYSINFO_EHDR: 0
+    HWCAP: 0x37f
+    PAGESZ: 4096
+    CLKTCK: 100
+    PHDR: 0x400034
+    PHENT: 32
+    PHNUM: 2
+    BASE: 0
+    FLAGS: 0
+    ENTRY: 0x400098
+    UID: 0
+    EUID: 0
+    GID: 0
+    EGID: 0
+    SECURE: 0
+    RANDOM: 0x7f8c090c
+    EXECFN: 0x7f8c1ff4
+    PLATFORM: 0x7f8c091c
+    NULL
+  CORE                 136  FPREGSET
+    fpc: 0x00000000
+    f0:  0x0000000000000040  f1:  0x4b00000000000000
+    f2:  0x0000000000000041  f3:  0x3ad50b5555555600
+    f4:  0x0000000000000000  f5:  0x0000000000000000
+    f6:  0x0000000000000000  f7:  0x0000000000000000
+    f8:  0x0000000000000000  f9:  0x0000000000000000
+    f10: 0x0000000000000000  f11: 0x0000000000000000
+    f12: 0x0000000000000000  f13: 0x0000000000000000
+    f14: 0x0000000000000000  f15: 0x0000000000000000
+  LINUX                  8  S390_LAST_BREAK
+    last_break: 0xfd75ccbe
+  LINUX                  4  S390_SYSTEM_CALL
+    system_call: 0x00000000
+  LINUX                 64  S390_HIGH_GPRS
+    high_r0: 0x000003ff, high_r1: 0x000003ff, high_r2: 0x00000000
+    high_r3: 0x00000000, high_r4: 0x00000000, high_r5: 0x000003ff
+    high_r6: 0x00000000, high_r7: 0x00000000, high_r8: 0x00000000
+    high_r9: 0x00000000, high_r10: 0x00000000, high_r11: 0x00000000
+    high_r12: 0x000003ff, high_r13: 0x00000000, high_r14: 0x00000000
+    high_r15: 0x00000000
+EOF
+
 exit 0
diff --git a/tests/testfile67.bz2 b/tests/testfile67.bz2
new file mode 100644
index 0000000..bb64745
Binary files /dev/null and b/tests/testfile67.bz2 differ
diff --git a/tests/testfile68.bz2 b/tests/testfile68.bz2
new file mode 100644
index 0000000..3fe6792
Binary files /dev/null and b/tests/testfile68.bz2 differ

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