mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-23 23:43:30 +00:00
elfutils: Fix header compatibility with glibc 2.21
Regression introduced by df2b9b48cb
.
This breaks the build for ltrace and other programs using libelf,
because the header file relies on features from glibc >= 2.22.
Here is an excerpt from the log output of the configure script from
ltrace:
In file included from ...elfutils-0.165/include/gelf.h:32:0,
from conftest.c:57:
...elfutils-0.165/include/libelf.h:280:8: error: unknown type name 'Elf32_Chdr'
extern Elf32_Chdr *elf32_getchdr (Elf_Scn *__scn);
^
...elfutils-0.165/include/libelf.h:281:8: error: unknown type name 'Elf64_Chdr'
extern Elf64_Chdr *elf64_getchdr (Elf_Scn *__scn);
^
In file included from conftest.c:57:0:
...elfutils-0.165/include/gelf.h:89:9: error: unknown type name 'Elf64_Chdr'
typedef Elf64_Chdr GElf_Chdr;
^
The issue has been reported in the Debian bug tracker at
https://bugs.debian.org/810885 and I'm using the patch from Mark
Wielaard that has been posted there which adds compatibility for older
glibc versions.
Signed-off-by: aszlig <aszlig@redmoonstudios.org>
This commit is contained in:
parent
5caa8ab55e
commit
8f793ce6bb
@ -10,6 +10,8 @@ stdenv.mkDerivation rec {
|
||||
sha256 = "0wp91hlh9n0ismikljf63558rzdwim8w1s271grsbaic35vr5z57";
|
||||
};
|
||||
|
||||
patches = [ ./glibc-2.21.patch ];
|
||||
|
||||
# We need bzip2 in NativeInputs because otherwise we can't unpack the src,
|
||||
# as the host-bzip2 will be in the path.
|
||||
nativeBuildInputs = [ m4 bison flex gettext bzip2 ];
|
||||
|
164
pkgs/development/tools/misc/elfutils/glibc-2.21.patch
Normal file
164
pkgs/development/tools/misc/elfutils/glibc-2.21.patch
Normal file
@ -0,0 +1,164 @@
|
||||
From b9d70fb9fb0bd0bf84eb2302cba1691aea74c42e Mon Sep 17 00:00:00 2001
|
||||
From: Mark Wielaard <mjw@redhat.com>
|
||||
Date: Wed, 13 Jan 2016 17:16:48 +0100
|
||||
Subject: [PATCH] libelf: Add ELF compression types and defines to libelf.h for
|
||||
older glibc.
|
||||
|
||||
Older glibc elf.h might not define the new ELF compression defines and
|
||||
types. If not just define them in libelf.h directly to make the libelf
|
||||
headers work on older glibc systems.
|
||||
|
||||
Also include a testcase to check the libelf headers build against the
|
||||
system elf.h.
|
||||
|
||||
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=810885
|
||||
|
||||
Signed-off-by: Mark Wielaard <mjw@redhat.com>
|
||||
---
|
||||
libelf/ChangeLog | 5 +++++
|
||||
libelf/libelf.h | 28 ++++++++++++++++++++++++++++
|
||||
tests/ChangeLog | 8 ++++++++
|
||||
tests/Makefile.am | 9 +++++++--
|
||||
tests/system-elf-libelf-test.c | 35 +++++++++++++++++++++++++++++++++++
|
||||
5 files changed, 83 insertions(+), 2 deletions(-)
|
||||
create mode 100644 tests/system-elf-libelf-test.c
|
||||
|
||||
diff --git a/libelf/ChangeLog b/libelf/ChangeLog
|
||||
index 3a1fe91..aabf6f6 100644
|
||||
--- a/libelf/ChangeLog
|
||||
+++ b/libelf/ChangeLog
|
||||
@@ -1,3 +1,8 @@
|
||||
+2016-01-13 Mark Wielaard <mjw@redhat.com>
|
||||
+
|
||||
+ * libelf.h: Check SHF_COMPRESSED is defined. If not define it and the
|
||||
+ associated ELF compression types/defines.
|
||||
+
|
||||
2015-11-26 Mark Wielaard <mjw@redhat.com>
|
||||
|
||||
* elf_compress.c (__libelf_decompress_elf): New function, extracted
|
||||
diff --git a/libelf/libelf.h b/libelf/libelf.h
|
||||
index 364e776..c0d6389 100644
|
||||
--- a/libelf/libelf.h
|
||||
+++ b/libelf/libelf.h
|
||||
@@ -35,6 +35,34 @@
|
||||
/* Get the ELF types. */
|
||||
#include <elf.h>
|
||||
|
||||
+#ifndef SHF_COMPRESSED
|
||||
+ /* Older glibc elf.h might not yet define the ELF compression types. */
|
||||
+ #define SHF_COMPRESSED (1 << 11) /* Section with compressed data. */
|
||||
+
|
||||
+ /* Section compression header. Used when SHF_COMPRESSED is set. */
|
||||
+
|
||||
+ typedef struct
|
||||
+ {
|
||||
+ Elf32_Word ch_type; /* Compression format. */
|
||||
+ Elf32_Word ch_size; /* Uncompressed data size. */
|
||||
+ Elf32_Word ch_addralign; /* Uncompressed data alignment. */
|
||||
+ } Elf32_Chdr;
|
||||
+
|
||||
+ typedef struct
|
||||
+ {
|
||||
+ Elf64_Word ch_type; /* Compression format. */
|
||||
+ Elf64_Word ch_reserved;
|
||||
+ Elf64_Xword ch_size; /* Uncompressed data size. */
|
||||
+ Elf64_Xword ch_addralign; /* Uncompressed data alignment. */
|
||||
+ } Elf64_Chdr;
|
||||
+
|
||||
+ /* Legal values for ch_type (compression algorithm). */
|
||||
+ #define ELFCOMPRESS_ZLIB 1 /* ZLIB/DEFLATE algorithm. */
|
||||
+ #define ELFCOMPRESS_LOOS 0x60000000 /* Start of OS-specific. */
|
||||
+ #define ELFCOMPRESS_HIOS 0x6fffffff /* End of OS-specific. */
|
||||
+ #define ELFCOMPRESS_LOPROC 0x70000000 /* Start of processor-specific. */
|
||||
+ #define ELFCOMPRESS_HIPROC 0x7fffffff /* End of processor-specific. */
|
||||
+#endif
|
||||
|
||||
/* Known translation types. */
|
||||
typedef enum
|
||||
diff --git a/tests/ChangeLog b/tests/ChangeLog
|
||||
index 366aea9..234ae56 100644
|
||||
--- a/tests/ChangeLog
|
||||
+++ b/tests/ChangeLog
|
||||
@@ -1,3 +1,11 @@
|
||||
+2016-01-13 Mark Wielaard <mjw@redhat.com>
|
||||
+
|
||||
+ * system-elf-libelf-test.c: New test.
|
||||
+ * Makefile.am (TESTS): Add system-elf-libelf-test, if !STANDALONE.
|
||||
+ (check_PROGRAMS): Likewise.
|
||||
+ (system_elf_libelf_test_CPPFLAGS): New variable.
|
||||
+ (system_elf_libelf_test_LDADD): Likewise.
|
||||
+
|
||||
2016-01-08 Mark Wielaard <mjw@redhat.com>
|
||||
|
||||
* elfputzdata.c (main): Fix parentheses in strncmp test.
|
||||
diff --git a/tests/Makefile.am b/tests/Makefile.am
|
||||
index d09a6d7..7b9e108 100644
|
||||
--- a/tests/Makefile.am
|
||||
+++ b/tests/Makefile.am
|
||||
@@ -136,8 +136,8 @@ export ELFUTILS_DISABLE_DEMANGLE = 1
|
||||
endif
|
||||
|
||||
if !STANDALONE
|
||||
-check_PROGRAMS += msg_tst md5-sha1-test
|
||||
-TESTS += msg_tst md5-sha1-test
|
||||
+check_PROGRAMS += msg_tst md5-sha1-test system-elf-libelf-test
|
||||
+TESTS += msg_tst md5-sha1-test system-elf-libelf-test
|
||||
endif
|
||||
|
||||
if LZMA
|
||||
@@ -473,6 +473,11 @@ elfgetzdata_LDADD = $(libelf)
|
||||
elfputzdata_LDADD = $(libelf)
|
||||
zstrptr_LDADD = $(libelf)
|
||||
|
||||
+# We want to test the libelf header against the system elf.h header.
|
||||
+# Don't include any -I CPPFLAGS.
|
||||
+system_elf_libelf_test_CPPFLAGS =
|
||||
+system_elf_libelf_test_LDADD = $(libelf)
|
||||
+
|
||||
if GCOV
|
||||
check: check-am coverage
|
||||
.PHONY: coverage
|
||||
diff --git a/tests/system-elf-libelf-test.c b/tests/system-elf-libelf-test.c
|
||||
new file mode 100644
|
||||
index 0000000..7dfe498
|
||||
--- /dev/null
|
||||
+++ b/tests/system-elf-libelf-test.c
|
||||
@@ -0,0 +1,35 @@
|
||||
+/* Explicit test compiling with system elf.h header plus libelf header.
|
||||
+
|
||||
+ Copyright (C) 2016 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 the GNU General Public License as published by
|
||||
+ the Free Software Foundation; either version 3 of the License, or
|
||||
+ (at your option) any later version.
|
||||
+
|
||||
+ 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 a copy of the GNU General Public License
|
||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <elf.h>
|
||||
+#include <stddef.h>
|
||||
+#include "../libelf/libelf.h"
|
||||
+
|
||||
+int
|
||||
+main (void)
|
||||
+{
|
||||
+ /* Trivial test, this is really a compile test anyway. */
|
||||
+ if (elf_version (EV_CURRENT) == EV_NONE)
|
||||
+ return -1;
|
||||
+
|
||||
+ /* This will obviously fail. It is just to check that Elf32_Chdr and
|
||||
+ elf32_getchdr are available (both at compile time and runtime). */
|
||||
+ Elf32_Chdr *chdr = elf32_getchdr (NULL);
|
||||
+
|
||||
+ return chdr == NULL ? 0 : -1;
|
||||
+}
|
||||
--
|
||||
1.8.3.1
|
||||
|
Loading…
Reference in New Issue
Block a user