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