Blame src/arlib.h

Packit Service 97d2fb
/* Copyright (C) 2007-2012 Red Hat, Inc.
Packit Service 97d2fb
   This file is part of elfutils.
Packit Service 97d2fb
   Written by Ulrich Drepper <drepper@redhat.com>, 2007.
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 the GNU General Public License as published by
Packit Service 97d2fb
   the Free Software Foundation; either version 3 of the License, or
Packit Service 97d2fb
   (at your option) any later version.
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
Packit Service 97d2fb
   GNU General Public License for more details.
Packit Service 97d2fb
Packit Service 97d2fb
   You should have received a copy of the GNU General Public License
Packit Service 97d2fb
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
Packit Service 97d2fb
Packit Service 97d2fb
#ifndef _ARLIB_H
Packit Service 97d2fb
#define _ARLIB_H	1
Packit Service 97d2fb
Packit Service 97d2fb
#include <ar.h>
Packit Service 97d2fb
#include <argp.h>
Packit Service 97d2fb
#include <byteswap.h>
Packit Service 97d2fb
#include <endian.h>
Packit Service 97d2fb
#include <libelf.h>
Packit Service 97d2fb
#include <obstack.h>
Packit Service 97d2fb
#include <stdbool.h>
Packit Service 97d2fb
#include <stddef.h>
Packit Service 97d2fb
#include <stdint.h>
Packit Service 97d2fb
#include <sys/types.h>
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* State of -D/-U flags.  */
Packit Service 97d2fb
extern bool arlib_deterministic_output;
Packit Service 97d2fb
Packit Service 97d2fb
/* For options common to ar and ranlib.  */
Packit Service 97d2fb
extern const struct argp_child arlib_argp_children[];
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Maximum length of a file name that fits directly into the ar header.
Packit Service 97d2fb
   We cannot use the final byte since a / goes there.  */
Packit Service 97d2fb
#define MAX_AR_NAME_LEN (sizeof (((struct ar_hdr *) NULL)->ar_name) - 1)
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Words matching in size to archive header.  */
Packit Service 97d2fb
#define AR_HDR_WORDS (sizeof (struct ar_hdr) / sizeof (uint32_t))
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
#if __BYTE_ORDER == __LITTLE_ENDIAN
Packit Service 97d2fb
# define le_bswap_32(val) bswap_32 (val)
Packit Service 97d2fb
#else
Packit Service 97d2fb
# define le_bswap_32(val) (val)
Packit Service 97d2fb
#endif
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Symbol table type.  */
Packit Service 97d2fb
struct arlib_symtab
Packit Service 97d2fb
{
Packit Service 97d2fb
  /* Symbol table handling.  */
Packit Service 97d2fb
  struct obstack symsoffob;
Packit Service 97d2fb
  struct obstack symsnameob;
Packit Service 97d2fb
  size_t symsofflen;
Packit Service 97d2fb
  uint32_t *symsoff;
Packit Service 97d2fb
  size_t symsnamelen;
Packit Service 97d2fb
  char *symsname;
Packit Service 97d2fb
Packit Service 97d2fb
  /* Long filename handling.  */
Packit Service 97d2fb
  struct obstack longnamesob;
Packit Service 97d2fb
  size_t longnameslen;
Packit Service 97d2fb
  char *longnames;
Packit Service 97d2fb
};
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Global variable with symbol table.  */
Packit Service 97d2fb
extern struct arlib_symtab symtab;
Packit Service 97d2fb
Packit Service 97d2fb
Packit Service 97d2fb
/* Initialize ARLIB_SYMTAB structure.  */
Packit Service 97d2fb
extern void arlib_init (void);
Packit Service 97d2fb
Packit Service 97d2fb
/* Finalize ARLIB_SYMTAB content.  */
Packit Service 97d2fb
extern void arlib_finalize (void);
Packit Service 97d2fb
Packit Service 97d2fb
/* Free resources for ARLIB_SYMTAB.  */
Packit Service 97d2fb
extern void arlib_fini (void);
Packit Service 97d2fb
Packit Service 97d2fb
/* Add symbols from ELF with value OFFSET to the symbol table SYMTAB.  */
Packit Service 97d2fb
extern void arlib_add_symbols (Elf *elf, const char *arfname,
Packit Service 97d2fb
			       const char *membername, off_t off);
Packit Service 97d2fb
Packit Service 97d2fb
/* Add name a file offset of a symbol.  */
Packit Service 97d2fb
extern void arlib_add_symref (const char *symname, off_t symoff);
Packit Service 97d2fb
Packit Service 97d2fb
/* Add long file name FILENAME of length FILENAMELEN to the symbol table
Packit Service 97d2fb
   SYMTAB.  Return the offset into the long file name table.  */
Packit Service 97d2fb
extern long int arlib_add_long_name (const char *filename, size_t filenamelen);
Packit Service 97d2fb
Packit Service 97d2fb
#endif	/* arlib.h */