diff options
-rw-r--r-- | libelf/ChangeLog | 5 | ||||
-rw-r--r-- | libelf/libelf.h | 28 | ||||
-rw-r--r-- | tests/ChangeLog | 8 | ||||
-rw-r--r-- | tests/Makefile.am | 9 | ||||
-rw-r--r-- | tests/system-elf-libelf-test.c | 35 |
5 files changed, 83 insertions, 2 deletions
diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 3a1fe91d..aabf6f6d 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 364e7767..c0d6389f 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 366aea9c..234ae562 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 d09a6d7b..7b9e1083 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 00000000..7dfe4989 --- /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; +} |