Blame libelf/elf_error.c

Packit Service 97d2fb
/* Error handling in libelf.
Packit Service 97d2fb
   Copyright (C) 1998-2010, 2015 Red Hat, Inc.
Packit Service 97d2fb
   This file is part of elfutils.
Packit Service 97d2fb
   Written by Ulrich Drepper <drepper@redhat.com>, 1998.
Packit Service 97d2fb
Packit Service 97d2fb
   This file is free software; you can redistribute it and/or modify
Packit Service 97d2fb
   it under the terms of either
Packit Service 97d2fb
Packit Service 97d2fb
     * the GNU Lesser General Public License as published by the Free
Packit Service 97d2fb
       Software Foundation; either version 3 of the License, or (at
Packit Service 97d2fb
       your option) any later version
Packit Service 97d2fb
Packit Service 97d2fb
   or
Packit Service 97d2fb
Packit Service 97d2fb
     * the GNU General Public License as published by the Free
Packit Service 97d2fb
       Software Foundation; either version 2 of the License, or (at
Packit Service 97d2fb
       your option) any later version
Packit Service 97d2fb
Packit Service 97d2fb
   or both in parallel, as here.
Packit Service 97d2fb
Packit Service 97d2fb
   elfutils is distributed in the hope that it will be useful, but
Packit Service 97d2fb
   WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 97d2fb
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 97d2fb
   General Public License for more details.
Packit Service 97d2fb
Packit Service 97d2fb
   You should have received copies of the GNU General Public License and
Packit Service 97d2fb
   the GNU Lesser General Public License along with this program.  If
Packit Service 97d2fb
   not, see <http://www.gnu.org/licenses/>.  */
Packit Service 97d2fb
Packit Service 97d2fb
#ifdef HAVE_CONFIG_H
Packit Service 97d2fb
# include <config.h>
Packit Service 97d2fb
#endif
Packit Service 97d2fb
Packit Service 97d2fb
#include <assert.h>
Packit Service 97d2fb
#include <libintl.h>
Packit Service 97d2fb
#include <stdbool.h>
Packit Service 97d2fb
#include <stdint.h>
Packit Service 97d2fb
#include <stdlib.h>
Packit Service 97d2fb
Packit Service 97d2fb
#include "libelfP.h"
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* The error number.  */
Packit Service 97d2fb
static __thread int global_error;
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
int
Packit Service 97d2fb
elf_errno (void)
Packit Service 97d2fb
{
Packit Service 97d2fb
  int result = global_error;
Packit Service 97d2fb
  global_error = ELF_E_NOERROR;
Packit Service 97d2fb
  return result;
Packit Service 97d2fb
}
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Return the appropriate message for the error.  */
Packit Service 97d2fb
static const char msgstr[] =
Packit Service 97d2fb
{
Packit Service 97d2fb
#define ELF_E_NOERROR_IDX 0
Packit Service 97d2fb
  N_("no error")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_UNKNOWN_ERROR_IDX (ELF_E_NOERROR_IDX + sizeof "no error")
Packit Service 97d2fb
  N_("unknown error")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_UNKNOWN_VERSION_IDX \
Packit Service 97d2fb
  (ELF_E_UNKNOWN_ERROR_IDX + sizeof "unknown error")
Packit Service 97d2fb
  N_("unknown version")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_UNKNOWN_TYPE_IDX \
Packit Service 97d2fb
  (ELF_E_UNKNOWN_VERSION_IDX + sizeof "unknown version")
Packit Service 97d2fb
  N_("unknown type")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_HANDLE_IDX \
Packit Service 97d2fb
  (ELF_E_UNKNOWN_TYPE_IDX + sizeof "unknown type")
Packit Service 97d2fb
  N_("invalid `Elf' handle")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_SOURCE_SIZE_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_HANDLE_IDX + sizeof "invalid `Elf' handle")
Packit Service 97d2fb
  N_("invalid size of source operand")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_DEST_SIZE_IDX \
Packit Service 97d2fb
  (ELF_E_SOURCE_SIZE_IDX + sizeof "invalid size of source operand")
Packit Service 97d2fb
  N_("invalid size of destination operand")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_ENCODING_IDX \
Packit Service 97d2fb
  (ELF_E_DEST_SIZE_IDX + sizeof "invalid size of destination operand")
Packit Service 97d2fb
  N_("invalid encoding")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_NOMEM_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_ENCODING_IDX + sizeof "invalid encoding")
Packit Service 97d2fb
  N_("out of memory")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_FILE_IDX \
Packit Service 97d2fb
  (ELF_E_NOMEM_IDX + sizeof "out of memory")
Packit Service 97d2fb
  N_("invalid file descriptor")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_ELF_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_FILE_IDX + sizeof "invalid file descriptor")
Packit Service 97d2fb
  N_("invalid ELF file data")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_OP_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_ELF_IDX + sizeof "invalid ELF file data")
Packit Service 97d2fb
  N_("invalid operation")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_NO_VERSION_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_OP_IDX + sizeof "invalid operation")
Packit Service 97d2fb
  N_("ELF version not set")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_CMD_IDX \
Packit Service 97d2fb
  (ELF_E_NO_VERSION_IDX + sizeof "ELF version not set")
Packit Service 97d2fb
  N_("invalid command")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_RANGE_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_CMD_IDX + sizeof "invalid command")
Packit Service 97d2fb
  N_("offset out of range")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_ARCHIVE_FMAG_IDX \
Packit Service 97d2fb
  (ELF_E_RANGE_IDX + sizeof "offset out of range")
Packit Service 97d2fb
  N_("invalid fmag field in archive header")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_ARCHIVE_IDX \
Packit Service 97d2fb
  (ELF_E_ARCHIVE_FMAG_IDX + sizeof "invalid fmag field in archive header")
Packit Service 97d2fb
  N_("invalid archive file")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_NO_ARCHIVE_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_ARCHIVE_IDX + sizeof "invalid archive file")
Packit Service 97d2fb
  N_("descriptor is not for an archive")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_NO_INDEX_IDX \
Packit Service 97d2fb
  (ELF_E_NO_ARCHIVE_IDX + sizeof "descriptor is not for an archive")
Packit Service 97d2fb
  N_("no index available")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_READ_ERROR_IDX \
Packit Service 97d2fb
  (ELF_E_NO_INDEX_IDX + sizeof "no index available")
Packit Service 97d2fb
  N_("cannot read data from file")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_WRITE_ERROR_IDX \
Packit Service 97d2fb
  (ELF_E_READ_ERROR_IDX + sizeof "cannot read data from file")
Packit Service 97d2fb
  N_("cannot write data to file")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_CLASS_IDX \
Packit Service 97d2fb
  (ELF_E_WRITE_ERROR_IDX + sizeof "cannot write data to file")
Packit Service 97d2fb
  N_("invalid binary class")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_INDEX_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_CLASS_IDX + sizeof "invalid binary class")
Packit Service 97d2fb
  N_("invalid section index")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_OPERAND_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_INDEX_IDX + sizeof "invalid section index")
Packit Service 97d2fb
  N_("invalid operand")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_SECTION_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_OPERAND_IDX + sizeof "invalid operand")
Packit Service 97d2fb
  N_("invalid section")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_COMMAND_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_SECTION_IDX + sizeof "invalid section")
Packit Service 97d2fb
  N_("invalid command")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_WRONG_ORDER_EHDR_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_COMMAND_IDX + sizeof "invalid command")
Packit Service 97d2fb
  N_("executable header not created first")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_FD_DISABLED_IDX \
Packit Service 97d2fb
  (ELF_E_WRONG_ORDER_EHDR_IDX + sizeof "executable header not created first")
Packit Service 97d2fb
  N_("file descriptor disabled")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_FD_MISMATCH_IDX \
Packit Service 97d2fb
  (ELF_E_FD_DISABLED_IDX + sizeof "file descriptor disabled")
Packit Service 97d2fb
  N_("archive/member file descriptor mismatch")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_OFFSET_RANGE_IDX \
Packit Service 97d2fb
  (ELF_E_FD_MISMATCH_IDX + sizeof "archive/member file descriptor mismatch")
Packit Service 97d2fb
  N_("offset out of range")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_NOT_NUL_SECTION_IDX \
Packit Service 97d2fb
  (ELF_E_OFFSET_RANGE_IDX + sizeof "offset out of range")
Packit Service 97d2fb
  N_("cannot manipulate null section")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_DATA_MISMATCH_IDX \
Packit Service 97d2fb
  (ELF_E_NOT_NUL_SECTION_IDX + sizeof "cannot manipulate null section")
Packit Service 97d2fb
  N_("data/scn mismatch")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_SECTION_HEADER_IDX \
Packit Service 97d2fb
  (ELF_E_DATA_MISMATCH_IDX + sizeof "data/scn mismatch")
Packit Service 97d2fb
  N_("invalid section header")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_DATA_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_SECTION_HEADER_IDX + sizeof "invalid section header")
Packit Service 97d2fb
  N_("invalid data")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_DATA_ENCODING_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_DATA_IDX + sizeof "invalid data")
Packit Service 97d2fb
  N_("unknown data encoding")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_SECTION_TOO_SMALL_IDX \
Packit Service 97d2fb
  (ELF_E_DATA_ENCODING_IDX + sizeof "unknown data encoding")
Packit Service 97d2fb
  N_("section `sh_size' too small for data")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_ALIGN_IDX \
Packit Service 97d2fb
  (ELF_E_SECTION_TOO_SMALL_IDX + sizeof "section `sh_size' too small for data")
Packit Service 97d2fb
  N_("invalid section alignment")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_SHENTSIZE_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_ALIGN_IDX + sizeof "invalid section alignment")
Packit Service 97d2fb
  N_("invalid section entry size")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_UPDATE_RO_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_SHENTSIZE_IDX + sizeof "invalid section entry size")
Packit Service 97d2fb
  N_("update() for write on read-only file")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_NOFILE_IDX \
Packit Service 97d2fb
  (ELF_E_UPDATE_RO_IDX + sizeof "update() for write on read-only file")
Packit Service 97d2fb
  N_("no such file")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_GROUP_NOT_REL_IDX \
Packit Service 97d2fb
  (ELF_E_NOFILE_IDX + sizeof "no such file")
Packit Service 97d2fb
  N_("only relocatable files can contain section groups")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_PHDR_IDX \
Packit Service 97d2fb
  (ELF_E_GROUP_NOT_REL_IDX \
Packit Service 97d2fb
   + sizeof "only relocatable files can contain section groups")
Packit Service 97d2fb
  N_("program header only allowed in executables, shared objects, and \
Packit Service 97d2fb
core files")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_NO_PHDR_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_PHDR_IDX \
Packit Service 97d2fb
   + sizeof "program header only allowed in executables, shared objects, and \
Packit Service 97d2fb
core files")
Packit Service 97d2fb
  N_("file has no program header")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_OFFSET_IDX \
Packit Service 97d2fb
  (ELF_E_NO_PHDR_IDX \
Packit Service 97d2fb
   + sizeof "file has no program header")
Packit Service 97d2fb
  N_("invalid offset")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_SECTION_TYPE_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_OFFSET_IDX \
Packit Service 97d2fb
   + sizeof "invalid offset")
Packit Service 97d2fb
  N_("invalid section type")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_INVALID_SECTION_FLAGS_IDX \
Packit Service 97d2fb
  (ELF_E_INVALID_SECTION_TYPE_IDX \
Packit Service 97d2fb
   + sizeof "invalid section type")
Packit Service 97d2fb
  N_("invalid section flags")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_NOT_COMPRESSED_IDX		\
Packit Service 97d2fb
  (ELF_E_INVALID_SECTION_FLAGS_IDX			\
Packit Service 97d2fb
   + sizeof "invalid section flags")
Packit Service 97d2fb
  N_("section does not contain compressed data")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_ALREADY_COMPRESSED_IDX \
Packit Service 97d2fb
  (ELF_E_NOT_COMPRESSED_IDX \
Packit Service 97d2fb
   + sizeof "section does not contain compressed data")
Packit Service 97d2fb
  N_("section contains compressed data")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_UNKNOWN_COMPRESSION_TYPE_IDX \
Packit Service 97d2fb
  (ELF_E_ALREADY_COMPRESSED_IDX \
Packit Service 97d2fb
   + sizeof "section contains compressed data")
Packit Service 97d2fb
  N_("unknown compression type")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_COMPRESS_ERROR_IDX \
Packit Service 97d2fb
  (ELF_E_UNKNOWN_COMPRESSION_TYPE_IDX \
Packit Service 97d2fb
   + sizeof "unknown compression type")
Packit Service 97d2fb
  N_("cannot compress data")
Packit Service 97d2fb
  "\0"
Packit Service 97d2fb
#define ELF_E_DECOMPRESS_ERROR_IDX \
Packit Service 97d2fb
  (ELF_E_COMPRESS_ERROR_IDX \
Packit Service 97d2fb
   + sizeof "cannot compress data")
Packit Service 97d2fb
  N_("cannot decompress data")
Packit Service 97d2fb
};
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
static const uint_fast16_t msgidx[ELF_E_NUM] =
Packit Service 97d2fb
{
Packit Service 97d2fb
  [ELF_E_NOERROR] = ELF_E_NOERROR_IDX,
Packit Service 97d2fb
  [ELF_E_UNKNOWN_ERROR] = ELF_E_UNKNOWN_ERROR_IDX,
Packit Service 97d2fb
  [ELF_E_UNKNOWN_VERSION] = ELF_E_UNKNOWN_VERSION_IDX,
Packit Service 97d2fb
  [ELF_E_UNKNOWN_TYPE] = ELF_E_UNKNOWN_TYPE_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_HANDLE] = ELF_E_INVALID_HANDLE_IDX,
Packit Service 97d2fb
  [ELF_E_SOURCE_SIZE] = ELF_E_SOURCE_SIZE_IDX,
Packit Service 97d2fb
  [ELF_E_DEST_SIZE] = ELF_E_DEST_SIZE_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_ENCODING] = ELF_E_INVALID_ENCODING_IDX,
Packit Service 97d2fb
  [ELF_E_NOMEM] = ELF_E_NOMEM_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_FILE] = ELF_E_INVALID_FILE_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_ELF] = ELF_E_INVALID_ELF_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_OP] = ELF_E_INVALID_OP_IDX,
Packit Service 97d2fb
  [ELF_E_NO_VERSION] = ELF_E_NO_VERSION_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_CMD] = ELF_E_INVALID_CMD_IDX,
Packit Service 97d2fb
  [ELF_E_RANGE] = ELF_E_RANGE_IDX,
Packit Service 97d2fb
  [ELF_E_ARCHIVE_FMAG] = ELF_E_ARCHIVE_FMAG_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_ARCHIVE] = ELF_E_INVALID_ARCHIVE_IDX,
Packit Service 97d2fb
  [ELF_E_NO_ARCHIVE] = ELF_E_NO_ARCHIVE_IDX,
Packit Service 97d2fb
  [ELF_E_NO_INDEX] = ELF_E_NO_INDEX_IDX,
Packit Service 97d2fb
  [ELF_E_READ_ERROR] = ELF_E_READ_ERROR_IDX,
Packit Service 97d2fb
  [ELF_E_WRITE_ERROR] = ELF_E_WRITE_ERROR_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_CLASS] = ELF_E_INVALID_CLASS_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_INDEX] = ELF_E_INVALID_INDEX_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_OPERAND] = ELF_E_INVALID_OPERAND_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_SECTION] = ELF_E_INVALID_SECTION_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_COMMAND] = ELF_E_INVALID_COMMAND_IDX,
Packit Service 97d2fb
  [ELF_E_WRONG_ORDER_EHDR] = ELF_E_WRONG_ORDER_EHDR_IDX,
Packit Service 97d2fb
  [ELF_E_FD_DISABLED] = ELF_E_FD_DISABLED_IDX,
Packit Service 97d2fb
  [ELF_E_FD_MISMATCH] = ELF_E_FD_MISMATCH_IDX,
Packit Service 97d2fb
  [ELF_E_OFFSET_RANGE] = ELF_E_OFFSET_RANGE_IDX,
Packit Service 97d2fb
  [ELF_E_NOT_NUL_SECTION] = ELF_E_NOT_NUL_SECTION_IDX,
Packit Service 97d2fb
  [ELF_E_DATA_MISMATCH] = ELF_E_DATA_MISMATCH_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_SECTION_HEADER] = ELF_E_INVALID_SECTION_HEADER_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_DATA] = ELF_E_INVALID_DATA_IDX,
Packit Service 97d2fb
  [ELF_E_DATA_ENCODING] = ELF_E_DATA_ENCODING_IDX,
Packit Service 97d2fb
  [ELF_E_SECTION_TOO_SMALL] = ELF_E_SECTION_TOO_SMALL_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_ALIGN] = ELF_E_INVALID_ALIGN_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_SHENTSIZE] = ELF_E_INVALID_SHENTSIZE_IDX,
Packit Service 97d2fb
  [ELF_E_UPDATE_RO] = ELF_E_UPDATE_RO_IDX,
Packit Service 97d2fb
  [ELF_E_NOFILE] = ELF_E_NOFILE_IDX,
Packit Service 97d2fb
  [ELF_E_GROUP_NOT_REL] = ELF_E_GROUP_NOT_REL_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_PHDR] = ELF_E_INVALID_PHDR_IDX,
Packit Service 97d2fb
  [ELF_E_NO_PHDR] = ELF_E_NO_PHDR_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_OFFSET] = ELF_E_INVALID_OFFSET_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_SECTION_TYPE] = ELF_E_INVALID_SECTION_TYPE_IDX,
Packit Service 97d2fb
  [ELF_E_INVALID_SECTION_FLAGS] = ELF_E_INVALID_SECTION_FLAGS_IDX,
Packit Service 97d2fb
  [ELF_E_NOT_COMPRESSED] = ELF_E_NOT_COMPRESSED_IDX,
Packit Service 97d2fb
  [ELF_E_ALREADY_COMPRESSED] = ELF_E_ALREADY_COMPRESSED_IDX,
Packit Service 97d2fb
  [ELF_E_UNKNOWN_COMPRESSION_TYPE] = ELF_E_UNKNOWN_COMPRESSION_TYPE_IDX,
Packit Service 97d2fb
  [ELF_E_COMPRESS_ERROR] = ELF_E_COMPRESS_ERROR_IDX,
Packit Service 97d2fb
  [ELF_E_DECOMPRESS_ERROR] = ELF_E_DECOMPRESS_ERROR_IDX
Packit Service 97d2fb
};
Packit Service 97d2fb
#define nmsgidx ((int) (sizeof (msgidx) / sizeof (msgidx[0])))
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
void
Packit Service 97d2fb
internal_function
Packit Service 97d2fb
__libelf_seterrno (int value)
Packit Service 97d2fb
{
Packit Service 97d2fb
  global_error = value >= 0 && value < nmsgidx ? value : ELF_E_UNKNOWN_ERROR;
Packit Service 97d2fb
}
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
const char *
Packit Service 97d2fb
elf_errmsg (int error)
Packit Service 97d2fb
{
Packit Service 97d2fb
  int last_error = global_error;
Packit Service 97d2fb
Packit Service 97d2fb
  if (error == 0)
Packit Service 97d2fb
    {
Packit Service 97d2fb
      assert (msgidx[last_error] < sizeof (msgstr));
Packit Service 97d2fb
      return last_error != 0 ? _(msgstr + msgidx[last_error]) : NULL;
Packit Service 97d2fb
    }
Packit Service 97d2fb
  else if (error < -1 || error >= nmsgidx)
Packit Service 97d2fb
    return _(msgstr + ELF_E_UNKNOWN_ERROR_IDX);
Packit Service 97d2fb
Packit Service 97d2fb
  assert (msgidx[error == -1 ? last_error : error] < sizeof (msgstr));
Packit Service 97d2fb
  return _(msgstr + msgidx[error == -1 ? last_error : error]);
Packit Service 97d2fb
}