forked from pool/elfutils
Accepting request 390276 from home:michel_mno:branches:Base:System
- add elfutils-0.164-gcc6.patch OBS-URL: https://build.opensuse.org/request/show/390276 OBS-URL: https://build.opensuse.org/package/show/Base:System/elfutils?expand=0&rev=78
This commit is contained in:
parent
54596ab49d
commit
eee228fdec
412
elfutils-0.164-gcc6.patch
Normal file
412
elfutils-0.164-gcc6.patch
Normal file
@ -0,0 +1,412 @@
|
||||
From c5da7c9e08c2bdb6dba8e115dcc09ed51a07f0e4 Mon Sep 17 00:00:00 2001
|
||||
From: Mark Wielaard <mjw@redhat.com>
|
||||
Date: Sat, 9 Jan 2016 22:09:48 +0100
|
||||
Subject: libebl: Fix missing brackets around if statement body.
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
GCC6 [will have] a nice new warning that showed a real bug:
|
||||
|
||||
elfutils/libebl/eblobjnote.c: In function ‘ebl_object_note’:
|
||||
elfutils/libebl/eblobjnote.c:135:5: error: statement is indented as if it were guarded by... [-Werror=misleading-indentation]
|
||||
switch (type)
|
||||
^~~~~~
|
||||
|
||||
elfutils/libebl/eblobjnote.c:45:3: note: ...this ‘if’ clause, but it is not
|
||||
if (! ebl->object_note (name, type, descsz, desc))
|
||||
^~
|
||||
|
||||
And indeed, it should have been under the if, but wasn't because of missing
|
||||
brackets. Added brackets (and reindent).
|
||||
|
||||
Signed-off-by: Mark Wielaard <mjw@redhat.com>
|
||||
---
|
||||
libebl/eblobjnote.c | 362 ++++++++++++++++++++++++++--------------------------
|
||||
2 files changed, 187 insertions(+), 180 deletions(-)
|
||||
|
||||
diff --git a/libebl/eblobjnote.c b/libebl/eblobjnote.c
|
||||
index fa1eb93..f80a1a5 100644
|
||||
--- a/libebl/eblobjnote.c
|
||||
+++ b/libebl/eblobjnote.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Print contents of object file note.
|
||||
- Copyright (C) 2002, 2007, 2009, 2011, 2015 Red Hat, Inc.
|
||||
+ Copyright (C) 2002, 2007, 2009, 2011, 2015, 2016 Red Hat, Inc.
|
||||
This file is part of elfutils.
|
||||
Written by Ulrich Drepper <drepper@redhat.com>, 2002.
|
||||
|
||||
@@ -43,189 +43,191 @@ ebl_object_note (Ebl *ebl, const char *name, uint32_t type,
|
||||
uint32_t descsz, const char *desc)
|
||||
{
|
||||
if (! ebl->object_note (name, type, descsz, desc))
|
||||
- /* The machine specific function did not know this type. */
|
||||
+ {
|
||||
+ /* The machine specific function did not know this type. */
|
||||
|
||||
- if (strcmp ("stapsdt", name) == 0)
|
||||
- {
|
||||
- if (type != 3)
|
||||
- {
|
||||
- printf (gettext ("unknown SDT version %u\n"), type);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- /* Descriptor starts with three addresses, pc, base ref and
|
||||
- semaphore. Then three zero terminated strings provider,
|
||||
- name and arguments. */
|
||||
-
|
||||
- union
|
||||
+ if (strcmp ("stapsdt", name) == 0)
|
||||
{
|
||||
- Elf64_Addr a64[3];
|
||||
- Elf32_Addr a32[3];
|
||||
- } addrs;
|
||||
+ if (type != 3)
|
||||
+ {
|
||||
+ printf (gettext ("unknown SDT version %u\n"), type);
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
- size_t addrs_size = gelf_fsize (ebl->elf, ELF_T_ADDR, 3, EV_CURRENT);
|
||||
- if (descsz < addrs_size + 3)
|
||||
- {
|
||||
- invalid_sdt:
|
||||
- printf (gettext ("invalid SDT probe descriptor\n"));
|
||||
- return;
|
||||
- }
|
||||
+ /* Descriptor starts with three addresses, pc, base ref and
|
||||
+ semaphore. Then three zero terminated strings provider,
|
||||
+ name and arguments. */
|
||||
|
||||
- Elf_Data src =
|
||||
+ union
|
||||
{
|
||||
- .d_type = ELF_T_ADDR, .d_version = EV_CURRENT,
|
||||
- .d_buf = (void *) desc, .d_size = addrs_size
|
||||
- };
|
||||
-
|
||||
- Elf_Data dst =
|
||||
- {
|
||||
- .d_type = ELF_T_ADDR, .d_version = EV_CURRENT,
|
||||
- .d_buf = &addrs, .d_size = addrs_size
|
||||
- };
|
||||
-
|
||||
- if (gelf_xlatetom (ebl->elf, &dst, &src,
|
||||
- elf_getident (ebl->elf, NULL)[EI_DATA]) == NULL)
|
||||
- {
|
||||
- printf ("%s\n", elf_errmsg (-1));
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- const char *provider = desc + addrs_size;
|
||||
- const char *pname = memchr (provider, '\0', desc + descsz - provider);
|
||||
- if (pname == NULL)
|
||||
- goto invalid_sdt;
|
||||
-
|
||||
- ++pname;
|
||||
- const char *args = memchr (pname, '\0', desc + descsz - pname);
|
||||
- if (args == NULL ||
|
||||
- memchr (++args, '\0', desc + descsz - pname) != desc + descsz - 1)
|
||||
- goto invalid_sdt;
|
||||
-
|
||||
- GElf_Addr pc;
|
||||
- GElf_Addr base;
|
||||
- GElf_Addr sem;
|
||||
- if (gelf_getclass (ebl->elf) == ELFCLASS32)
|
||||
- {
|
||||
- pc = addrs.a32[0];
|
||||
- base = addrs.a32[1];
|
||||
- sem = addrs.a32[2];
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- pc = addrs.a64[0];
|
||||
- base = addrs.a64[1];
|
||||
- sem = addrs.a64[2];
|
||||
- }
|
||||
-
|
||||
- printf (gettext (" PC: "));
|
||||
- printf ("%#" PRIx64 ",", pc);
|
||||
- printf (gettext (" Base: "));
|
||||
- printf ("%#" PRIx64 ",", base);
|
||||
- printf (gettext (" Semaphore: "));
|
||||
- printf ("%#" PRIx64 "\n", sem);
|
||||
- printf (gettext (" Provider: "));
|
||||
- printf ("%s,", provider);
|
||||
- printf (gettext (" Name: "));
|
||||
- printf ("%s,", pname);
|
||||
- printf (gettext (" Args: "));
|
||||
- printf ("'%s'\n", args);
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- switch (type)
|
||||
- {
|
||||
- case NT_GNU_BUILD_ID:
|
||||
- if (strcmp (name, "GNU") == 0 && descsz > 0)
|
||||
- {
|
||||
- printf (gettext (" Build ID: "));
|
||||
- uint_fast32_t i;
|
||||
- for (i = 0; i < descsz - 1; ++i)
|
||||
- printf ("%02" PRIx8, (uint8_t) desc[i]);
|
||||
- printf ("%02" PRIx8 "\n", (uint8_t) desc[i]);
|
||||
- }
|
||||
- break;
|
||||
-
|
||||
- case NT_GNU_GOLD_VERSION:
|
||||
- if (strcmp (name, "GNU") == 0 && descsz > 0)
|
||||
- /* A non-null terminated version string. */
|
||||
- printf (gettext (" Linker version: %.*s\n"),
|
||||
- (int) descsz, desc);
|
||||
- break;
|
||||
-
|
||||
- case NT_GNU_ABI_TAG:
|
||||
- if (strcmp (name, "GNU") == 0 && descsz >= 8 && descsz % 4 == 0)
|
||||
- {
|
||||
- Elf_Data in =
|
||||
- {
|
||||
- .d_version = EV_CURRENT,
|
||||
- .d_type = ELF_T_WORD,
|
||||
- .d_size = descsz,
|
||||
- .d_buf = (void *) desc
|
||||
- };
|
||||
- /* Normally NT_GNU_ABI_TAG is just 4 words (16 bytes). If it
|
||||
- is much (4*) larger dynamically allocate memory to convert. */
|
||||
+ Elf64_Addr a64[3];
|
||||
+ Elf32_Addr a32[3];
|
||||
+ } addrs;
|
||||
+
|
||||
+ size_t addrs_size = gelf_fsize (ebl->elf, ELF_T_ADDR, 3, EV_CURRENT);
|
||||
+ if (descsz < addrs_size + 3)
|
||||
+ {
|
||||
+ invalid_sdt:
|
||||
+ printf (gettext ("invalid SDT probe descriptor\n"));
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ Elf_Data src =
|
||||
+ {
|
||||
+ .d_type = ELF_T_ADDR, .d_version = EV_CURRENT,
|
||||
+ .d_buf = (void *) desc, .d_size = addrs_size
|
||||
+ };
|
||||
+
|
||||
+ Elf_Data dst =
|
||||
+ {
|
||||
+ .d_type = ELF_T_ADDR, .d_version = EV_CURRENT,
|
||||
+ .d_buf = &addrs, .d_size = addrs_size
|
||||
+ };
|
||||
+
|
||||
+ if (gelf_xlatetom (ebl->elf, &dst, &src,
|
||||
+ elf_getident (ebl->elf, NULL)[EI_DATA]) == NULL)
|
||||
+ {
|
||||
+ printf ("%s\n", elf_errmsg (-1));
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ const char *provider = desc + addrs_size;
|
||||
+ const char *pname = memchr (provider, '\0', desc + descsz - provider);
|
||||
+ if (pname == NULL)
|
||||
+ goto invalid_sdt;
|
||||
+
|
||||
+ ++pname;
|
||||
+ const char *args = memchr (pname, '\0', desc + descsz - pname);
|
||||
+ if (args == NULL ||
|
||||
+ memchr (++args, '\0', desc + descsz - pname) != desc + descsz - 1)
|
||||
+ goto invalid_sdt;
|
||||
+
|
||||
+ GElf_Addr pc;
|
||||
+ GElf_Addr base;
|
||||
+ GElf_Addr sem;
|
||||
+ if (gelf_getclass (ebl->elf) == ELFCLASS32)
|
||||
+ {
|
||||
+ pc = addrs.a32[0];
|
||||
+ base = addrs.a32[1];
|
||||
+ sem = addrs.a32[2];
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ pc = addrs.a64[0];
|
||||
+ base = addrs.a64[1];
|
||||
+ sem = addrs.a64[2];
|
||||
+ }
|
||||
+
|
||||
+ printf (gettext (" PC: "));
|
||||
+ printf ("%#" PRIx64 ",", pc);
|
||||
+ printf (gettext (" Base: "));
|
||||
+ printf ("%#" PRIx64 ",", base);
|
||||
+ printf (gettext (" Semaphore: "));
|
||||
+ printf ("%#" PRIx64 "\n", sem);
|
||||
+ printf (gettext (" Provider: "));
|
||||
+ printf ("%s,", provider);
|
||||
+ printf (gettext (" Name: "));
|
||||
+ printf ("%s,", pname);
|
||||
+ printf (gettext (" Args: "));
|
||||
+ printf ("'%s'\n", args);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ switch (type)
|
||||
+ {
|
||||
+ case NT_GNU_BUILD_ID:
|
||||
+ if (strcmp (name, "GNU") == 0 && descsz > 0)
|
||||
+ {
|
||||
+ printf (gettext (" Build ID: "));
|
||||
+ uint_fast32_t i;
|
||||
+ for (i = 0; i < descsz - 1; ++i)
|
||||
+ printf ("%02" PRIx8, (uint8_t) desc[i]);
|
||||
+ printf ("%02" PRIx8 "\n", (uint8_t) desc[i]);
|
||||
+ }
|
||||
+ break;
|
||||
+
|
||||
+ case NT_GNU_GOLD_VERSION:
|
||||
+ if (strcmp (name, "GNU") == 0 && descsz > 0)
|
||||
+ /* A non-null terminated version string. */
|
||||
+ printf (gettext (" Linker version: %.*s\n"),
|
||||
+ (int) descsz, desc);
|
||||
+ break;
|
||||
+
|
||||
+ case NT_GNU_ABI_TAG:
|
||||
+ if (strcmp (name, "GNU") == 0 && descsz >= 8 && descsz % 4 == 0)
|
||||
+ {
|
||||
+ Elf_Data in =
|
||||
+ {
|
||||
+ .d_version = EV_CURRENT,
|
||||
+ .d_type = ELF_T_WORD,
|
||||
+ .d_size = descsz,
|
||||
+ .d_buf = (void *) desc
|
||||
+ };
|
||||
+ /* Normally NT_GNU_ABI_TAG is just 4 words (16 bytes). If it
|
||||
+ is much (4*) larger dynamically allocate memory to convert. */
|
||||
#define FIXED_TAG_BYTES 16
|
||||
- uint32_t sbuf[FIXED_TAG_BYTES];
|
||||
- uint32_t *buf;
|
||||
- if (unlikely (descsz / 4 > FIXED_TAG_BYTES))
|
||||
- {
|
||||
- buf = malloc (descsz);
|
||||
- if (unlikely (buf == NULL))
|
||||
- return;
|
||||
- }
|
||||
- else
|
||||
- buf = sbuf;
|
||||
- Elf_Data out =
|
||||
- {
|
||||
- .d_version = EV_CURRENT,
|
||||
- .d_type = ELF_T_WORD,
|
||||
- .d_size = descsz,
|
||||
- .d_buf = buf
|
||||
- };
|
||||
-
|
||||
- if (elf32_xlatetom (&out, &in, ebl->data) != NULL)
|
||||
- {
|
||||
- const char *os;
|
||||
- switch (buf[0])
|
||||
- {
|
||||
- case ELF_NOTE_OS_LINUX:
|
||||
- os = "Linux";
|
||||
- break;
|
||||
-
|
||||
- case ELF_NOTE_OS_GNU:
|
||||
- os = "GNU";
|
||||
- break;
|
||||
-
|
||||
- case ELF_NOTE_OS_SOLARIS2:
|
||||
- os = "Solaris";
|
||||
- break;
|
||||
-
|
||||
- case ELF_NOTE_OS_FREEBSD:
|
||||
- os = "FreeBSD";
|
||||
- break;
|
||||
-
|
||||
- default:
|
||||
- os = "???";
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
- printf (gettext (" OS: %s, ABI: "), os);
|
||||
- for (size_t cnt = 1; cnt < descsz / 4; ++cnt)
|
||||
- {
|
||||
- if (cnt > 1)
|
||||
- putchar_unlocked ('.');
|
||||
- printf ("%" PRIu32, buf[cnt]);
|
||||
- }
|
||||
- putchar_unlocked ('\n');
|
||||
- }
|
||||
- if (descsz / 4 > FIXED_TAG_BYTES)
|
||||
- free (buf);
|
||||
- break;
|
||||
- }
|
||||
- /* FALLTHROUGH */
|
||||
-
|
||||
- default:
|
||||
- /* Unknown type. */
|
||||
- break;
|
||||
- }
|
||||
+ uint32_t sbuf[FIXED_TAG_BYTES];
|
||||
+ uint32_t *buf;
|
||||
+ if (unlikely (descsz / 4 > FIXED_TAG_BYTES))
|
||||
+ {
|
||||
+ buf = malloc (descsz);
|
||||
+ if (unlikely (buf == NULL))
|
||||
+ return;
|
||||
+ }
|
||||
+ else
|
||||
+ buf = sbuf;
|
||||
+ Elf_Data out =
|
||||
+ {
|
||||
+ .d_version = EV_CURRENT,
|
||||
+ .d_type = ELF_T_WORD,
|
||||
+ .d_size = descsz,
|
||||
+ .d_buf = buf
|
||||
+ };
|
||||
+
|
||||
+ if (elf32_xlatetom (&out, &in, ebl->data) != NULL)
|
||||
+ {
|
||||
+ const char *os;
|
||||
+ switch (buf[0])
|
||||
+ {
|
||||
+ case ELF_NOTE_OS_LINUX:
|
||||
+ os = "Linux";
|
||||
+ break;
|
||||
+
|
||||
+ case ELF_NOTE_OS_GNU:
|
||||
+ os = "GNU";
|
||||
+ break;
|
||||
+
|
||||
+ case ELF_NOTE_OS_SOLARIS2:
|
||||
+ os = "Solaris";
|
||||
+ break;
|
||||
+
|
||||
+ case ELF_NOTE_OS_FREEBSD:
|
||||
+ os = "FreeBSD";
|
||||
+ break;
|
||||
+
|
||||
+ default:
|
||||
+ os = "???";
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ printf (gettext (" OS: %s, ABI: "), os);
|
||||
+ for (size_t cnt = 1; cnt < descsz / 4; ++cnt)
|
||||
+ {
|
||||
+ if (cnt > 1)
|
||||
+ putchar_unlocked ('.');
|
||||
+ printf ("%" PRIu32, buf[cnt]);
|
||||
+ }
|
||||
+ putchar_unlocked ('\n');
|
||||
+ }
|
||||
+ if (descsz / 4 > FIXED_TAG_BYTES)
|
||||
+ free (buf);
|
||||
+ break;
|
||||
+ }
|
||||
+ /* FALLTHROUGH */
|
||||
+
|
||||
+ default:
|
||||
+ /* Unknown type. */
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
--
|
||||
cgit v0.12
|
||||
|
@ -1,3 +1,8 @@
|
||||
-------------------------------------------------------------------
|
||||
Sat Apr 16 03:41:22 UTC 2016 - normand@linux.vnet.ibm.com
|
||||
|
||||
- add elfutils-0.164-gcc6.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Sat Feb 27 07:36:03 UTC 2016 - normand@linux.vnet.ibm.com
|
||||
|
||||
|
@ -31,6 +31,7 @@ Source2: baselibs.conf
|
||||
Source3: %{name}.changes
|
||||
Patch1: elfutils-0.137-dwarf-header-check-fix.diff
|
||||
Patch2: elfutils-0.164-dt-ppc-opt.patch
|
||||
Patch3: elfutils-0.164-gcc6.patch
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
BuildRequires: autoconf
|
||||
BuildRequires: automake
|
||||
@ -140,6 +141,7 @@ to develop applications that require these.
|
||||
%setup -q
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
|
||||
%build
|
||||
# Change DATE/TIME macros to use last change time of elfutils.changes
|
||||
|
Loading…
Reference in New Issue
Block a user