18190db6a86a37aec86c81626ab1b083c96aff891Roland McGrath/* Copyright (C) 2002, 2005, 2006 Red Hat, Inc.
2de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   This file is part of elfutils.
3b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper   Written by Ulrich Drepper <drepper@redhat.com>, 2002.
4b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
5de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   This file is free software; you can redistribute it and/or modify
6de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   it under the terms of the GNU General Public License as published by
7de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   the Free Software Foundation; either version 3 of the License, or
8de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   (at your option) any later version.
9b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
10de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   elfutils is distributed in the hope that it will be useful, but
11361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   WITHOUT ANY WARRANTY; without even the implied warranty of
12de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   GNU General Public License for more details.
14361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper
15de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   You should have received a copy of the GNU General Public License
16de2ed97f33139af5c7a0811e4ec66fc896a13cf2Mark Wielaard   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
17b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
18b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <config.h>
19b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
20b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <stdio.h>
21b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <stdlib.h>
22b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <string.h>
23b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
24b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <libelfP.h>
25b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
26b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstatic struct
27b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{
28b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  int id;
29b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  const char *expected;
30b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper} libelf_msgs[ELF_E_NUM] =
31b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  {
32b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_NOERROR, "no error" },
33b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_UNKNOWN_ERROR, "unknown error" },
34b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_UNKNOWN_VERSION, "unknown version" },
35b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_UNKNOWN_TYPE, "unknown type" },
36b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_HANDLE, "invalid `Elf' handle" },
37b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_SOURCE_SIZE, "invalid size of source operand" },
38b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_DEST_SIZE, "invalid size of destination operand" },
39b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_ENCODING, "invalid encoding" },
40b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_NOMEM, "out of memory" },
41b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_FILE, "invalid file descriptor" },
42b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_OP, "invalid operation" },
43b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_NO_VERSION, "ELF version not set" },
44b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_CMD, "invalid command" },
45b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_RANGE, "offset out of range" },
46b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_ARCHIVE_FMAG, "invalid fmag field in archive header" },
47b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_ARCHIVE, "invalid archive file" },
48b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_NO_ARCHIVE, "descriptor is not for an archive" },
49b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_NO_INDEX, "no index available" },
50b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_READ_ERROR, "cannot read data from file" },
51b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_WRITE_ERROR, "cannot write data to file" },
52b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_CLASS, "invalid binary class" },
53b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_INDEX, "invalid section index" },
54b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_OPERAND, "invalid operand" },
55b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_SECTION, "invalid section" },
56b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_COMMAND, "invalid command" },
57b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_WRONG_ORDER_EHDR, "executable header not created first" },
58b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_FD_DISABLED, "file descriptor disabled" },
59c2d1e4811f159ee5779b6c2c9e459e12170effc9Ulrich Drepper    { ELF_E_FD_MISMATCH, "archive/member file descriptor mismatch" },
60b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_OFFSET_RANGE, "offset out of range" },
61b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_NOT_NUL_SECTION, "cannot manipulate null section" },
62b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_DATA_MISMATCH, "data/scn mismatch" },
63b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_SECTION_HEADER, "invalid section header" },
64b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_DATA, "invalid data" },
65b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_DATA_ENCODING, "unknown data encoding" },
66b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_SECTION_TOO_SMALL, "section `sh_size' too small for data" },
67b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_ALIGN, "invalid section alignment" },
68b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_SHENTSIZE, "invalid section entry size" },
69b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_UPDATE_RO, "update() for write on read-only file" },
70b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_NOFILE, "no such file" },
71b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_GROUP_NOT_REL,
72b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      "only relocatable files can contain section groups" },
73b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_PHDR,
7456bc0b83ea81b7e959aaa4e1d01f8b36f2804a52Ulrich Drepper      "program header only allowed in executables, shared objects, \
7556bc0b83ea81b7e959aaa4e1d01f8b36f2804a52Ulrich Drepperand core files" },
7641de488a0ad6679e816dbab960351e5f62ab8eadUlrich Drepper    { ELF_E_NO_PHDR, "file has no program header" },
775ddb50af4a488fdec358570502cbe058acb8ae93Mark Wielaard    { ELF_E_INVALID_OFFSET, "invalid offset" },
785ddb50af4a488fdec358570502cbe058acb8ae93Mark Wielaard    { ELF_E_INVALID_SECTION_TYPE , "invalid section type" },
795ddb50af4a488fdec358570502cbe058acb8ae93Mark Wielaard    { ELF_E_INVALID_SECTION_FLAGS , "invalid section flags" },
80272018bba1f253bae00b5ba280ad0e0f18c04006Mark Wielaard    { ELF_E_NOT_COMPRESSED, "section does not contain compressed data" },
81272018bba1f253bae00b5ba280ad0e0f18c04006Mark Wielaard    { ELF_E_ALREADY_COMPRESSED, "section contains compressed data" },
82272018bba1f253bae00b5ba280ad0e0f18c04006Mark Wielaard    { ELF_E_UNKNOWN_COMPRESSION_TYPE, "unknown compression type" },
83272018bba1f253bae00b5ba280ad0e0f18c04006Mark Wielaard    { ELF_E_COMPRESS_ERROR, "cannot compress data" },
84272018bba1f253bae00b5ba280ad0e0f18c04006Mark Wielaard    { ELF_E_DECOMPRESS_ERROR, "cannot decompress data" }
85b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  };
86b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
87b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
88b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperint
89b08d5a8fb42f4586d756068065186b5af7e48daUlrich Dreppermain (void)
90b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{
91b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  size_t cnt;
92b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  int result = EXIT_SUCCESS;
93b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
94b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  /* Clear the error state.  */
95b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  (void) elf_errno ();
96b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
97b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  /* Check all the messages of libelf.  */
98b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  for (cnt = 1; cnt < ELF_E_NUM; ++cnt)
99b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    {
100b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      const char *str = elf_errmsg (libelf_msgs[cnt].id);
101b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
102b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      if (strcmp (str, libelf_msgs[cnt].expected) != 0)
103b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	{
104b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  printf ("libelf msg %zu: expected \"%s\", got \"%s\"\n",
105b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper		  cnt, libelf_msgs[cnt].expected, str);
106b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	  result = EXIT_FAILURE;
107b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper	}
108b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    }
109b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
110b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  return result;
111b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper}
112