1/*- 2 * Copyright (c) 2009 Kai Wang 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer 10 * in this position and unchanged. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR 16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 17 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 18 * IN NO EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY DIRECT, INDIRECT, 19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * 26 * $FreeBSD: users/kaiwang27/elftc/libelftc.h 392 2009-05-31 19:17:46Z kaiwang27 $ 27 * $Id: libelftc.h 3744 2019-06-28 00:41:47Z emaste $ 28 */ 29 30#ifndef _LIBELFTC_H_ 31#define _LIBELFTC_H_ 32 33#include <sys/stat.h> 34 35#include <libelf.h> 36 37/* 38 * Types meant to be opaque to the consumers of these APIs. 39 */ 40typedef struct _Elftc_Bfd_Target Elftc_Bfd_Target; 41typedef struct _Elftc_String_Table Elftc_String_Table; 42 43/* Target types. */ 44typedef enum { 45 ETF_NONE, 46 ETF_ELF, 47 ETF_BINARY, 48 ETF_SREC, 49 ETF_IHEX, 50 ETF_PE, 51 ETF_EFI, 52} Elftc_Bfd_Target_Flavor; 53 54/* 55 * Demangler flags. 56 */ 57 58/* Name mangling style. */ 59#define ELFTC_DEM_UNKNOWN 0x00000000U /* Not specified. */ 60#define ELFTC_DEM_ARM 0x00000001U /* C++ Ann. Ref. Manual. */ 61#define ELFTC_DEM_GNU2 0x00000002U /* GNU version 2. */ 62#define ELFTC_DEM_GNU3 0x00000004U /* GNU version 3. */ 63 64/* Demangling behaviour control. */ 65#define ELFTC_DEM_NOPARAM 0x00010000U 66 67#ifdef __cplusplus 68extern "C" { 69#endif 70Elftc_Bfd_Target *elftc_bfd_find_target(const char *_tgt_name); 71Elftc_Bfd_Target_Flavor elftc_bfd_target_flavor(Elftc_Bfd_Target *_tgt); 72unsigned int elftc_bfd_target_byteorder(Elftc_Bfd_Target *_tgt); 73unsigned int elftc_bfd_target_class(Elftc_Bfd_Target *_tgt); 74unsigned int elftc_bfd_target_machine(Elftc_Bfd_Target *_tgt); 75unsigned int elftc_bfd_target_osabi(Elftc_Bfd_Target *_tgt); 76int elftc_copyfile(int _srcfd, int _dstfd); 77int elftc_demangle(const char *_mangledname, char *_buffer, 78 size_t _bufsize, unsigned int _flags); 79const char *elftc_reloc_type_str(unsigned int mach, unsigned int type); 80int elftc_set_timestamps(const char *_filename, struct stat *_sb); 81Elftc_String_Table *elftc_string_table_create(size_t _sizehint); 82void elftc_string_table_destroy(Elftc_String_Table *_table); 83Elftc_String_Table *elftc_string_table_from_section(Elf_Scn *_scn, 84 size_t _sizehint); 85const char *elftc_string_table_image(Elftc_String_Table *_table, 86 size_t *_sz); 87size_t elftc_string_table_insert(Elftc_String_Table *_table, 88 const char *_string); 89size_t elftc_string_table_lookup(Elftc_String_Table *_table, 90 const char *_string); 91int elftc_string_table_remove(Elftc_String_Table *_table, 92 const char *_string); 93const char *elftc_string_table_to_string(Elftc_String_Table *_table, 94 size_t offset); 95int elftc_timestamp(time_t *_timestamp); 96const char *elftc_version(void); 97#ifdef __cplusplus 98} 99#endif 100 101#endif /* _LIBELFTC_H_ */ 102