1*4d9fdb46SRobert Mustacchi /* Copyright (c) 2018, David Anderson 2*4d9fdb46SRobert Mustacchi All rights reserved. 3*4d9fdb46SRobert Mustacchi 4*4d9fdb46SRobert Mustacchi Redistribution and use in source and binary forms, with 5*4d9fdb46SRobert Mustacchi or without modification, are permitted provided that the 6*4d9fdb46SRobert Mustacchi following conditions are met: 7*4d9fdb46SRobert Mustacchi 8*4d9fdb46SRobert Mustacchi Redistributions of source code must retain the above 9*4d9fdb46SRobert Mustacchi copyright notice, this list of conditions and the following 10*4d9fdb46SRobert Mustacchi disclaimer. 11*4d9fdb46SRobert Mustacchi 12*4d9fdb46SRobert Mustacchi Redistributions in binary form must reproduce the above 13*4d9fdb46SRobert Mustacchi copyright notice, this list of conditions and the following 14*4d9fdb46SRobert Mustacchi disclaimer in the documentation and/or other materials 15*4d9fdb46SRobert Mustacchi provided with the distribution. 16*4d9fdb46SRobert Mustacchi 17*4d9fdb46SRobert Mustacchi THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 18*4d9fdb46SRobert Mustacchi CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 19*4d9fdb46SRobert Mustacchi INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 20*4d9fdb46SRobert Mustacchi OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21*4d9fdb46SRobert Mustacchi ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 22*4d9fdb46SRobert Mustacchi CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23*4d9fdb46SRobert Mustacchi SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 24*4d9fdb46SRobert Mustacchi NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25*4d9fdb46SRobert Mustacchi LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26*4d9fdb46SRobert Mustacchi HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27*4d9fdb46SRobert Mustacchi CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 28*4d9fdb46SRobert Mustacchi OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 29*4d9fdb46SRobert Mustacchi EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30*4d9fdb46SRobert Mustacchi */ 31*4d9fdb46SRobert Mustacchi 32*4d9fdb46SRobert Mustacchi #ifndef DWARF_OBJECT_DETECTOR_H 33*4d9fdb46SRobert Mustacchi #define DWARF_OBJECT_DETECTOR_H 34*4d9fdb46SRobert Mustacchi 35*4d9fdb46SRobert Mustacchi #ifdef __cplusplus 36*4d9fdb46SRobert Mustacchi extern "C" { 37*4d9fdb46SRobert Mustacchi #endif /* __cplusplus */ 38*4d9fdb46SRobert Mustacchi 39*4d9fdb46SRobert Mustacchi 40*4d9fdb46SRobert Mustacchi /* Declares the interface function. 41*4d9fdb46SRobert Mustacchi outpath is a place you provide, of a length outpath_len 42*4d9fdb46SRobert Mustacchi you consider reasonable, 43*4d9fdb46SRobert Mustacchi where the final path used is recorded. 44*4d9fdb46SRobert Mustacchi outpath_len must be larger than strlen(path); 45*4d9fdb46SRobert Mustacchi 46*4d9fdb46SRobert Mustacchi This matters as for mach-o if the path is a directory 47*4d9fdb46SRobert Mustacchi name the function will look in the standard macho-place 48*4d9fdb46SRobert Mustacchi for the object file (useful for dSYM) and return the 49*4d9fdb46SRobert Mustacchi constructed path in oupath. 50*4d9fdb46SRobert Mustacchi returns DW_DLV_OK, DW_DLV_ERROR, or DW_DLV_NO_ENTRY */ 51*4d9fdb46SRobert Mustacchi 52*4d9fdb46SRobert Mustacchi #ifndef DW_FTYPE_UNKNOWN 53*4d9fdb46SRobert Mustacchi #define DW_FTYPE_UNKNOWN 0 54*4d9fdb46SRobert Mustacchi #define DW_FTYPE_ELF 1 55*4d9fdb46SRobert Mustacchi #define DW_FTYPE_MACH_O 2 56*4d9fdb46SRobert Mustacchi #define DW_FTYPE_PE 3 57*4d9fdb46SRobert Mustacchi #define DW_FTYPE_ARCHIVE 4 /* unix archive */ 58*4d9fdb46SRobert Mustacchi #endif /* DW_FTYPE_UNKNOWN */ 59*4d9fdb46SRobert Mustacchi 60*4d9fdb46SRobert Mustacchi #ifndef DW_ENDIAN_UNKNOWN 61*4d9fdb46SRobert Mustacchi #define DW_ENDIAN_UNKNOWN 0 62*4d9fdb46SRobert Mustacchi #define DW_ENDIAN_BIG 1 63*4d9fdb46SRobert Mustacchi #define DW_ENDIAN_LITTLE 2 64*4d9fdb46SRobert Mustacchi #endif /* DW_ENDIAN_UNKNOWN */ 65*4d9fdb46SRobert Mustacchi 66*4d9fdb46SRobert Mustacchi /* offsetsize refers to the object-file-format. 67*4d9fdb46SRobert Mustacchi Elf 32 or macho-32 or PE 32, for example. 68*4d9fdb46SRobert Mustacchi Not to DWARF offset sizes. */ 69*4d9fdb46SRobert Mustacchi 70*4d9fdb46SRobert Mustacchi /* Path means look(first) for an dynsym object 71*4d9fdb46SRobert Mustacchi of the same name per MacOS standards, 72*4d9fdb46SRobert Mustacchi making the outpath space needed is more than 73*4d9fdb46SRobert Mustacchi that in path. 74*4d9fdb46SRobert Mustacchi Copies the actual path into outpath, (an error 75*4d9fdb46SRobert Mustacchi if the length in outpath_len is less than needed 76*4d9fdb46SRobert Mustacchi for the object found). 77*4d9fdb46SRobert Mustacchi For non-MacOS outpath will contain the string 78*4d9fdb46SRobert Mustacchi taken from path. 79*4d9fdb46SRobert Mustacchi 80*4d9fdb46SRobert Mustacchi If DW_DLV_NO_ENTRY or DW_DLV_ERROR returned 81*4d9fdb46SRobert Mustacchi the argument values other than path 82*4d9fdb46SRobert Mustacchi must be considered to be in an unknown state. */ 83*4d9fdb46SRobert Mustacchi 84*4d9fdb46SRobert Mustacchi /* The errcode is a small integer distinct from libdwarf 85*4d9fdb46SRobert Mustacchi and simply printing the integer (returned through 86*4d9fdb46SRobert Mustacchi *errcode when the function returns DW_DLV_ERROR) 87*4d9fdb46SRobert Mustacchi will hopefully suffice for most purposes. */ 88*4d9fdb46SRobert Mustacchi 89*4d9fdb46SRobert Mustacchi int dwarf_object_detector_path(const char *path, 90*4d9fdb46SRobert Mustacchi char *outpath, 91*4d9fdb46SRobert Mustacchi unsigned long outpath_len, 92*4d9fdb46SRobert Mustacchi unsigned *ftype, 93*4d9fdb46SRobert Mustacchi unsigned *endian, 94*4d9fdb46SRobert Mustacchi unsigned *offsetsize, 95*4d9fdb46SRobert Mustacchi Dwarf_Unsigned *filesize, 96*4d9fdb46SRobert Mustacchi int * errcode); 97*4d9fdb46SRobert Mustacchi 98*4d9fdb46SRobert Mustacchi int dwarf_object_detector_fd(int fd, 99*4d9fdb46SRobert Mustacchi unsigned *ftype, 100*4d9fdb46SRobert Mustacchi unsigned *endian, 101*4d9fdb46SRobert Mustacchi unsigned *offsetsize, 102*4d9fdb46SRobert Mustacchi Dwarf_Unsigned *filesize, 103*4d9fdb46SRobert Mustacchi int * errcode); 104*4d9fdb46SRobert Mustacchi 105*4d9fdb46SRobert Mustacchi #ifdef __cplusplus 106*4d9fdb46SRobert Mustacchi } 107*4d9fdb46SRobert Mustacchi #endif /* __cplusplus */ 108*4d9fdb46SRobert Mustacchi #endif /* DWARF_OBJECT_DETECTOR_H */ 109