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 3174 2015-03-27 17:13:41Z 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 */ 40 typedef struct _Elftc_Bfd_Target Elftc_Bfd_Target; 41 typedef struct _Elftc_String_Table Elftc_String_Table; 42 43 /* Target types. */ 44 typedef enum { 45 ETF_NONE, 46 ETF_ELF, 47 ETF_BINARY, 48 ETF_SREC, 49 ETF_IHEX 50 } Elftc_Bfd_Target_Flavor; 51 52 /* 53 * Demangler flags. 54 */ 55 56 /* Name mangling style. */ 57 #define ELFTC_DEM_UNKNOWN 0x00000000U /* Not specified. */ 58 #define ELFTC_DEM_ARM 0x00000001U /* C++ Ann. Ref. Manual. */ 59 #define ELFTC_DEM_GNU2 0x00000002U /* GNU version 2. */ 60 #define ELFTC_DEM_GNU3 0x00000004U /* GNU version 3. */ 61 62 /* Demangling behaviour control. */ 63 #define ELFTC_DEM_NOPARAM 0x00010000U 64 65 #ifdef __cplusplus 66 extern "C" { 67 #endif 68 Elftc_Bfd_Target *elftc_bfd_find_target(const char *_tgt_name); 69 Elftc_Bfd_Target_Flavor elftc_bfd_target_flavor(Elftc_Bfd_Target *_tgt); 70 unsigned int elftc_bfd_target_byteorder(Elftc_Bfd_Target *_tgt); 71 unsigned int elftc_bfd_target_class(Elftc_Bfd_Target *_tgt); 72 unsigned int elftc_bfd_target_machine(Elftc_Bfd_Target *_tgt); 73 int elftc_copyfile(int _srcfd, int _dstfd); 74 int elftc_demangle(const char *_mangledname, char *_buffer, 75 size_t _bufsize, unsigned int _flags); 76 int elftc_set_timestamps(const char *_filename, struct stat *_sb); 77 Elftc_String_Table *elftc_string_table_create(int _hint); 78 void elftc_string_table_destroy(Elftc_String_Table *_table); 79 Elftc_String_Table *elftc_string_table_from_section(Elf_Scn *_scn, 80 int _hint); 81 const char *elftc_string_table_image(Elftc_String_Table *_table, 82 size_t *_sz); 83 size_t elftc_string_table_insert(Elftc_String_Table *_table, 84 const char *_string); 85 size_t elftc_string_table_lookup(Elftc_String_Table *_table, 86 const char *_string); 87 int elftc_string_table_remove(Elftc_String_Table *_table, 88 const char *_string); 89 const char *elftc_string_table_to_string(Elftc_String_Table *_table, 90 size_t offset); 91 const char *elftc_version(void); 92 #ifdef __cplusplus 93 } 94 #endif 95 96 #endif /* _LIBELFTC_H_ */ 97