From: Jan Kratochvil Date: Mon, 15 Oct 2012 13:32:25 +0000 (+0200) Subject: Revert "backends/" X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=71ad0a007dbaa22ffab841e342d2a2084f32c45d;p=thirdparty%2Felfutils.git Revert "backends/" This reverts commit a1380e679928424bd6c1a5adfa65e55214418b5c. --- diff --git a/backends/ChangeLog b/backends/ChangeLog index 17716d98a..cca71130e 100644 --- a/backends/ChangeLog +++ b/backends/ChangeLog @@ -1,17 +1,3 @@ -2012-10-12 Jan Kratochvil - Roland McGrath - - * 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 * linux-core-note.c (prstatus_items): Rename groups of sigpend and diff --git a/backends/Makefile.am b/backends/Makefile.am index 243a95acb..fa85593fa 100644 --- a/backends/Makefile.am +++ b/backends/Makefile.am @@ -95,8 +95,7 @@ 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_corenote.c s390x_corenote.c +s390_SRCS = s390_init.c s390_symbol.c s390_regs.c s390_retval.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 c5d8d887a..d52794424 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, - .type = ELF_T_WORD, .format = 'x', + .count = 0, .type = ELF_T_WORD, .format = 'x', }, }; diff --git a/backends/linux-core-note.c b/backends/linux-core-note.c index 3526c238b..b09154f23 100644 --- a/backends/linux-core-note.c +++ b/backends/linux-core-note.c @@ -42,18 +42,6 @@ #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))) @@ -93,8 +81,8 @@ struct EBLHOOK(prstatus) struct EBLHOOK(timeval) pr_stime; struct EBLHOOK(timeval) pr_cutime; struct EBLHOOK(timeval) pr_cstime; - FIELD (PR_REG_TYPE, pr_reg[PRSTATUS_REGS_SIZE / sizeof (PR_REG_TYPE)]); - FIELD (PR_FPVALID_TYPE, pr_fpvalid); + FIELD (ULONG, pr_reg[PRSTATUS_REGS_SIZE / sizeof (ULONG)]); + FIELD (INT, pr_fpvalid); }; #define FNAMESZ 16 @@ -277,17 +265,6 @@ 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 deleted file mode 100644 index 9110218b2..000000000 --- a/backends/s390_corenote.c +++ /dev/null @@ -1,189 +0,0 @@ -/* 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 . */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include -#include -#include -#include -#include - -#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 91fe4b8d1..528e3576c 100644 --- a/backends/s390_init.c +++ b/backends/s390_init.c @@ -37,8 +37,6 @@ /* 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) @@ -57,10 +55,6 @@ 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 deleted file mode 100644 index 427bf7deb..000000000 --- a/backends/s390x_corenote.c +++ /dev/null @@ -1,2 +0,0 @@ -#define BITS 64 -#include "s390_corenote.c" diff --git a/src/ChangeLog b/src/ChangeLog index 63296ce0d..9d6fbe3c3 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,11 +1,3 @@ -2012-10-12 Jan Kratochvil - - * 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 * readelf.c (ITEM_WRAP_COLUMN, REGISTER_WRAP_COLUMN): Merge to ... diff --git a/src/readelf.c b/src/readelf.c index 19239c7e7..1801c1c5c 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -7681,19 +7681,6 @@ 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) @@ -7711,7 +7698,23 @@ 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 1ac7dcc98..2495fb58c 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,10 +1,3 @@ -2012-10-12 Jan Kratochvil - - * 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 * 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 db7eb18dd..f9b96c83d 100755 --- a/tests/run-readelf-mixed-corenote.sh +++ b/tests/run-readelf-mixed-corenote.sh @@ -84,137 +84,4 @@ 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 deleted file mode 100644 index bb64745db..000000000 Binary files a/tests/testfile67.bz2 and /dev/null differ diff --git a/tests/testfile68.bz2 b/tests/testfile68.bz2 deleted file mode 100644 index 3fe67921f..000000000 Binary files a/tests/testfile68.bz2 and /dev/null differ