1cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng/* Copyright (C) 2002, 2005, 2006 Red Hat, Inc. 2cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng This file is part of Red Hat elfutils. 3441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project Written by Ulrich Drepper <drepper@redhat.com>, 2002. 4441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 5cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Red Hat elfutils is free software; you can redistribute it and/or modify 6cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng it under the terms of the GNU General Public License as published by the 7cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Free Software Foundation; version 2 of the License. 8441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 9cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Red Hat elfutils is distributed in the hope that it will be useful, but 10cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng WITHOUT ANY WARRANTY; without even the implied warranty of 11cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng General Public License for more details. 13cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 14cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng You should have received a copy of the GNU General Public License along 15cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng with Red Hat elfutils; if not, write to the Free Software Foundation, 16cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA. 17cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng 18cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Red Hat elfutils is an included package of the Open Invention Network. 19cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng An included package of the Open Invention Network is a package for which 20cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Open Invention Network licensees cross-license their patents. No patent 21cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng license is granted, either expressly or impliedly, by designation as an 22cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng included package. Should you wish to participate in the Open Invention 23cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng Network licensing program, please visit www.openinventionnetwork.com 24cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng <http://www.openinventionnetwork.com>. */ 25441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 26441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <config.h> 27441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 28441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <stdio.h> 29441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <stdlib.h> 30441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <string.h> 31441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 32441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project#include <libelfP.h> 33441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 34441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectstatic struct 35441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 36441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project int id; 37441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project const char *expected; 38441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project} libelf_msgs[ELF_E_NUM] = 39441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 40441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_NOERROR, "no error" }, 41441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_UNKNOWN_ERROR, "unknown error" }, 42441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_UNKNOWN_VERSION, "unknown version" }, 43441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_UNKNOWN_TYPE, "unknown type" }, 44441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_INVALID_HANDLE, "invalid `Elf' handle" }, 45441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_SOURCE_SIZE, "invalid size of source operand" }, 46441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_DEST_SIZE, "invalid size of destination operand" }, 47441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_INVALID_ENCODING, "invalid encoding" }, 48441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_NOMEM, "out of memory" }, 49441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_INVALID_FILE, "invalid file descriptor" }, 50441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_INVALID_OP, "invalid operation" }, 51441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_NO_VERSION, "ELF version not set" }, 52441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_INVALID_CMD, "invalid command" }, 53441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_RANGE, "offset out of range" }, 54441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_ARCHIVE_FMAG, "invalid fmag field in archive header" }, 55441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_INVALID_ARCHIVE, "invalid archive file" }, 56441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_NO_ARCHIVE, "descriptor is not for an archive" }, 57441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_NO_INDEX, "no index available" }, 58441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_READ_ERROR, "cannot read data from file" }, 59441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_WRITE_ERROR, "cannot write data to file" }, 60441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_INVALID_CLASS, "invalid binary class" }, 61441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_INVALID_INDEX, "invalid section index" }, 62441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_INVALID_OPERAND, "invalid operand" }, 63441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_INVALID_SECTION, "invalid section" }, 64441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_INVALID_COMMAND, "invalid command" }, 65441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_WRONG_ORDER_EHDR, "executable header not created first" }, 66441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_FD_DISABLED, "file descriptor disabled" }, 67441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_FD_MISMATCH, "archive/member fildes mismatch" }, 68441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_OFFSET_RANGE, "offset out of range" }, 69441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_NOT_NUL_SECTION, "cannot manipulate null section" }, 70441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_DATA_MISMATCH, "data/scn mismatch" }, 71441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_INVALID_SECTION_HEADER, "invalid section header" }, 72441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_INVALID_DATA, "invalid data" }, 73441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_DATA_ENCODING, "unknown data encoding" }, 74441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_SECTION_TOO_SMALL, "section `sh_size' too small for data" }, 75441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_INVALID_ALIGN, "invalid section alignment" }, 76441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_INVALID_SHENTSIZE, "invalid section entry size" }, 77441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_UPDATE_RO, "update() for write on read-only file" }, 78441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_NOFILE, "no such file" }, 79441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_GROUP_NOT_REL, 80441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project "only relocatable files can contain section groups" }, 81441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { ELF_E_INVALID_PHDR, 82cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng "program header only allowed in executables, shared objects, \ 83cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Chengand core files" }, 84cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng { ELF_E_NO_PHDR, "file has no program header" }, 85cc6695e2684ce93cdf8bd2da63d55d2cf49ff076Ben Cheng { ELF_E_INVALID_OFFSET, "invalid offset" } 86441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project }; 87441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 88441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 89441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectint 90441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Projectmain (void) 91441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project{ 92441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project size_t cnt; 93441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project int result = EXIT_SUCCESS; 94441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 95441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Clear the error state. */ 96441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project (void) elf_errno (); 97441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 98441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project /* Check all the messages of libelf. */ 99441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project for (cnt = 1; cnt < ELF_E_NUM; ++cnt) 100441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 101441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project const char *str = elf_errmsg (libelf_msgs[cnt].id); 102441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 103441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project if (strcmp (str, libelf_msgs[cnt].expected) != 0) 104441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project { 105441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project printf ("libelf msg %zu: expected \"%s\", got \"%s\"\n", 106441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project cnt, libelf_msgs[cnt].expected, str); 107441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project result = EXIT_FAILURE; 108441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } 109441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project } 110441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project 111441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project return result; 112441f72d43a9b550baa779fc82f70816da5f74f0eThe Android Open Source Project} 113