msg_tst.c revision 361df7da6dfecd817b27e62b91752ac316d7cdd4
141de488a0ad6679e816dbab960351e5f62ab8eadUlrich Drepper/* Copyright (C) 2002, 2005 Red Hat, Inc.
2361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   This file is part of Red Hat elfutils.
3b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper   Written by Ulrich Drepper <drepper@redhat.com>, 2002.
4b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
5361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   Red Hat elfutils is free software; you can redistribute it and/or modify
6361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   it under the terms of the GNU General Public License as published by the
7361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   Free Software Foundation; version 2 of the License.
8b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
9361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   Red Hat elfutils is distributed in the hope that it will be useful, but
10361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   WITHOUT ANY WARRANTY; without even the implied warranty of
11361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   General Public License for more details.
13361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper
14361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   You should have received a copy of the GNU General Public License along
15361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   with Red Hat elfutils; if not, write to the Free Software Foundation,
16361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
17361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper
18361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   Red Hat elfutils is an included package of the Open Invention Network.
19361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   An included package of the Open Invention Network is a package for which
20361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   Open Invention Network licensees cross-license their patents.  No patent
21361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   license is granted, either expressly or impliedly, by designation as an
22361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   included package.  Should you wish to participate in the Open Invention
23361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   Network licensing program, please visit www.openinventionnetwork.com
24361df7da6dfecd817b27e62b91752ac316d7cdd4Ulrich Drepper   <http://www.openinventionnetwork.com>.  */
25b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
26b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <config.h>
27b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
28b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <stdio.h>
29b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <stdlib.h>
30b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <string.h>
31b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
32b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper#include <libelfP.h>
33b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper
34b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepperstatic struct
35b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper{
36b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  int id;
37b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  const char *expected;
38b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper} libelf_msgs[ELF_E_NUM] =
39b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper  {
40b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_NOERROR, "no error" },
41b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_UNKNOWN_ERROR, "unknown error" },
42b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_UNKNOWN_VERSION, "unknown version" },
43b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_UNKNOWN_TYPE, "unknown type" },
44b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_HANDLE, "invalid `Elf' handle" },
45b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_SOURCE_SIZE, "invalid size of source operand" },
46b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_DEST_SIZE, "invalid size of destination operand" },
47b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_ENCODING, "invalid encoding" },
48b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_NOMEM, "out of memory" },
49b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_FILE, "invalid file descriptor" },
50b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_OP, "invalid operation" },
51b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_NO_VERSION, "ELF version not set" },
52b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_CMD, "invalid command" },
53b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_RANGE, "offset out of range" },
54b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_ARCHIVE_FMAG, "invalid fmag field in archive header" },
55b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_ARCHIVE, "invalid archive file" },
56b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_NO_ARCHIVE, "descriptor is not for an archive" },
57b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_NO_INDEX, "no index available" },
58b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_READ_ERROR, "cannot read data from file" },
59b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_WRITE_ERROR, "cannot write data to file" },
60b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_CLASS, "invalid binary class" },
61b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_INDEX, "invalid section index" },
62b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_OPERAND, "invalid operand" },
63b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_SECTION, "invalid section" },
64b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_COMMAND, "invalid command" },
65b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_WRONG_ORDER_EHDR, "executable header not created first" },
66b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_FD_DISABLED, "file descriptor disabled" },
67b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_FD_MISMATCH, "archive/member fildes mismatch" },
68b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_OFFSET_RANGE, "offset out of range" },
69b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_NOT_NUL_SECTION, "cannot manipulate null section" },
70b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_DATA_MISMATCH, "data/scn mismatch" },
71b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_SECTION_HEADER, "invalid section header" },
72b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_DATA, "invalid data" },
73b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_DATA_ENCODING, "unknown data encoding" },
74b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_SECTION_TOO_SMALL, "section `sh_size' too small for data" },
75b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_ALIGN, "invalid section alignment" },
76b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_SHENTSIZE, "invalid section entry size" },
77b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_UPDATE_RO, "update() for write on read-only file" },
78b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_NOFILE, "no such file" },
79b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_GROUP_NOT_REL,
80b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      "only relocatable files can contain section groups" },
81b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper    { ELF_E_INVALID_PHDR,
82b08d5a8fb42f4586d756068065186b5af7e48daUlrich Drepper      "program header only allowed in executables and shared objects" },
8341de488a0ad6679e816dbab960351e5f62ab8eadUlrich Drepper    { ELF_E_NO_PHDR, "file has no program header" },
8441de488a0ad6679e816dbab960351e5f62ab8eadUlrich Drepper    { ELF_E_INVALID_OFFSET, "invalid offset" }
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