VirtualBox

Changeset 41 in kStuff


Ignore:
Timestamp:
Aug 24, 2011 2:35:57 PM (14 years ago)
Author:
bird
Message:

Debug info enumration adjustments. Working on MH_DSYM support.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/k/kLdr.h

    r29 r41  
    337337    /** Core or dump. */
    338338    KLDRTYPE_CORE,
     339    /** Debug module (debug info with empty code & data segments). */
     340    KLDRTYPE_DEBUG_INFO,
    339341    /** The end of the valid types values (exclusive). */
    340342    KLDRTYPE_END,
     
    523525 * @param   iMajorVer   The major version number of the debug info format. -1 if unknow - implies invalid iMinorVer.
    524526 * @param   iMinorVer   The minor version number of the debug info format. -1 when iMajorVer is -1.
     527 * @param   pszPartNm   The name of the debug info part, NULL if not applicable.
    525528 * @param   offFile     The file offset *if* this type has one specific location in the executable image file.
    526529 *                      This is -1 if there isn't any specific file location.
     
    532535 */
    533536typedef int FNKLDRENUMDBG(PKLDRMOD pMod, KU32 iDbgInfo, KLDRDBGINFOTYPE enmType, KI16 iMajorVer, KI16 iMinorVer,
    534                           KLDRFOFF offFile, KLDRADDR LinkAddress, KLDRSIZE cb, const char *pszExtFile, void *pvUser);
     537                          const char *pszPartNm, KLDRFOFF offFile, KLDRADDR LinkAddress, KLDRSIZE cb,
     538                          const char *pszExtFile, void *pvUser);
    535539/** Pointer to a debug info enumerator callback. */
    536540typedef FNKLDRENUMDBG *PFNKLDRENUMDBG;
  • trunk/kLdr/kLdrMod.c

    r30 r41  
    311311            return rc;
    312312        if (    u.u16 == IMAGE_DOS_SIGNATURE
    313             &&  kRdrSize(pRdr) > sizeof(IMAGE_DOS_HEADER))
     313            &&  kRdrSize(pRdr) > (KFOFF)sizeof(IMAGE_DOS_HEADER))
    314314        {
    315315            rc = kRdrRead(pRdr, &u, sizeof(u.u32), K_OFFSETOF(IMAGE_DOS_HEADER, e_lfanew));
  • trunk/kLdr/kLdrModMachO.c

    r29 r41  
    330330            return KLDR_ERR_MACHO_UNSUPPORTED_MACHINE;
    331331    }
    332     if (s.Hdr32.filetype != MH_OBJECT)
     332    if (   s.Hdr32.filetype != MH_OBJECT
     333        && s.Hdr32.filetype != MH_EXECUTE
     334        && s.Hdr32.filetype != MH_DYLIB
     335        && s.Hdr32.filetype != MH_DSYM)
    333336        return KLDR_ERR_MACHO_UNSUPPORTED_FILE_TYPE;
    334337
     
    432435    switch (s.Hdr32.filetype)
    433436    {
    434         case MH_OBJECT:
    435             pMod->enmType = KLDRTYPE_OBJECT;
    436             break;
     437        case MH_OBJECT:     pMod->enmType = KLDRTYPE_OBJECT; break;
     438        case MH_EXECUTE:    pMod->enmType = KLDRTYPE_EXECUTABLE_FIXED; break;
     439        case MH_DYLIB:      pMod->enmType = KLDRTYPE_SHARED_LIBRARY_RELOCATABLE; break;
     440        case MH_DSYM:       pMod->enmType = KLDRTYPE_DEBUG_INFO; break;
    437441        default:
    438442            return KLDR_ERR_MACHO_UNSUPPORTED_FILE_TYPE;
     
    677681                    {
    678682                        case MH_OBJECT:
     683                        case MH_EXECUTE:
     684                        case MH_DYLIB:
     685                        case MH_DSYM:
    679686                        {
    680687                            cSections++;
     
    852859                    {
    853860                        case MH_OBJECT:
     861                        case MH_EXECUTE:
     862                        case MH_DYLIB:
     863                        case MH_DSYM:
    854864                        {
    855865                            cSections++;
     
    10001010    {
    10011011        case MH_OBJECT:
     1012        case MH_EXECUTE:
     1013        case MH_DYLIB:
     1014        case MH_DSYM:
    10021015            if (!cSegments)
    10031016                return KLDR_ERR_MACHO_BAD_OBJECT_FILE;
     
    10731086                    {
    10741087                        case MH_OBJECT:
     1088                        case MH_EXECUTE:
     1089                        case MH_DYLIB:
     1090                        case MH_DSYM:
    10751091                        {
    10761092                            /* Section data extract. */
     
    12041220                    {
    12051221                        case MH_OBJECT:
     1222                        case MH_EXECUTE:
     1223                        case MH_DYLIB:
     1224                        case MH_DSYM:
    12061225                        {
    12071226                            /* Section data extract. */
     
    13211340                {
    13221341                    case MH_OBJECT:
     1342                    case MH_EXECUTE:
     1343                    case MH_DYLIB: /** @todo ??? */
     1344                    case MH_DSYM:
    13231345                        pModMachO->offSymbols = u.pSymTab->symoff + pModMachO->offImage;
    13241346                        pModMachO->cSymbols = u.pSymTab->nsyms;
     
    13961418    {
    13971419        case MH_OBJECT:
     1420        case MH_EXECUTE:
     1421        case MH_DYLIB: /** @todo dylib */
     1422        case MH_DSYM:
    13981423        {
    13991424            KLDRADDR cb1;
     
    15051530     * Take action according to file type.
    15061531     */
    1507     if (pModMachO->Hdr.filetype == MH_OBJECT)
     1532    if (   pModMachO->Hdr.filetype == MH_OBJECT
     1533        || pModMachO->Hdr.filetype == MH_EXECUTE /** @todo dylib, execute, dsym: symbols */
     1534        || pModMachO->Hdr.filetype == MH_DYLIB
     1535        || pModMachO->Hdr.filetype == MH_DSYM)
    15081536    {
    15091537        rc = kldrModMachOLoadObjSymTab(pModMachO);
     
    17971825     * Take action according to file type.
    17981826     */
    1799     if (pModMachO->Hdr.filetype == MH_OBJECT)
     1827    if (   pModMachO->Hdr.filetype == MH_OBJECT
     1828        || pModMachO->Hdr.filetype == MH_EXECUTE /** @todo dylib, execute, dsym: symbols */
     1829        || pModMachO->Hdr.filetype == MH_DYLIB
     1830        || pModMachO->Hdr.filetype == MH_DSYM)
    18001831    {
    18011832        rc = kldrModMachOLoadObjSymTab(pModMachO);
     
    21102141static int kldrModMachOEnumDbgInfo(PKLDRMOD pMod, const void *pvBits, PFNKLDRENUMDBG pfnCallback, void *pvUser)
    21112142{
    2112 #if 0
    2113     PKLDRMODMACHO                      pModMachO = (PKLDRMODMACHO)pMod->pvData;
    2114     const IMAGE_DEBUG_DIRECTORY    *pDbgDir;
    2115     KU32                            iDbgInfo;
    2116     KU32                            cb;
    2117     int                             rc;
    2118 
    2119     /*
    2120      * Check that there is a debug directory first.
    2121      */
    2122     cb = pModMachO->Hdrs.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].Size;
    2123     if (    cb < sizeof(IMAGE_DEBUG_DIRECTORY) /* screw borland linkers */
    2124         ||  !pModMachO->Hdrs.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress)
    2125         return 0;
    2126 
    2127     /*
    2128      * Make sure we've got mapped bits.
    2129      */
    2130     rc = kldrModMachOBitsAndBaseAddress(pModMachO, &pvBits, NULL);
    2131     if (rc)
    2132         return rc;
    2133 
    2134     /*
    2135      * Enumerate the debug directory.
    2136      */
    2137     pDbgDir = KLDRMODMACHO_RVA2TYPE(pvBits,
    2138                                  pModMachO->Hdrs.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress,
    2139                                  const IMAGE_DEBUG_DIRECTORY *);
    2140     for (iDbgInfo = 0;; iDbgInfo++, pDbgDir++, cb -= sizeof(IMAGE_DEBUG_DIRECTORY))
    2141     {
    2142         KLDRDBGINFOTYPE     enmDbgInfoType;
    2143 
    2144         /* convert the type. */
    2145         switch (pDbgDir->Type)
    2146         {
    2147             case IMAGE_DEBUG_TYPE_UNKNOWN:
    2148             case IMAGE_DEBUG_TYPE_FPO:
    2149             case IMAGE_DEBUG_TYPE_COFF: /*stabs dialect??*/
    2150             case IMAGE_DEBUG_TYPE_MISC:
    2151             case IMAGE_DEBUG_TYPE_EXCEPTION:
    2152             case IMAGE_DEBUG_TYPE_FIXUP:
    2153             case IMAGE_DEBUG_TYPE_BORLAND:
    2154             default:
    2155                 enmDbgInfoType = KLDRDBGINFOTYPE_UNKNOWN;
    2156                 break;
    2157             case IMAGE_DEBUG_TYPE_CODEVIEW:
    2158                 enmDbgInfoType = KLDRDBGINFOTYPE_CODEVIEW;
    2159                 break;
    2160         }
    2161 
    2162         rc = pfnCallback(pMod, iDbgInfo,
    2163                          enmDbgInfoType, pDbgDir->MajorVersion, pDbgDir->MinorVersion,
    2164                          pDbgDir->PointerToRawData ? pDbgDir->PointerToRawData : -1,
    2165                          pDbgDir->AddressOfRawData ? pDbgDir->AddressOfRawData : NIL_KLDRADDR,
    2166                          pDbgDir->SizeOfData,
    2167                          NULL,
    2168                          pvUser);
    2169         if (rc)
     2143    PKLDRMODMACHO pModMachO = (PKLDRMODMACHO)pMod->pvData;
     2144    int rc = 0;
     2145    KU32 iSect;
     2146
     2147    for (iSect = 0; iSect < pModMachO->cSections; iSect++)
     2148    {
     2149        section_32_t *pMachOSect = pModMachO->paSections[iSect].pvMachoSection; /* (32-bit & 64-bit starts the same way) */
     2150        if (kHlpStrComp(pMachOSect->segname, "DWARF"))
     2151            continue;
     2152
     2153        rc = pfnCallback(pMod, iSect, KLDRDBGINFOTYPE_DWARF, 0, 0, pMachOSect->sectname,
     2154                         pModMachO->paSections[iSect].offFile,
     2155                         pModMachO->paSections[iSect].LinkAddress,
     2156                         pModMachO->paSections[iSect].cb,
     2157                         NULL, pvUser);
     2158        if (rc != 0)
    21702159            break;
    2171 
    2172         /* next */
    2173         if (cb <= sizeof(IMAGE_DEBUG_DIRECTORY))
    2174             break;
    21752160    }
    21762161
    21772162    return rc;
    2178 #else
    2179     return 0;
    2180 #endif
    21812163}
    21822164
  • trunk/kLdr/kLdrModPE.c

    r29 r41  
    11931193
    11941194        rc = pfnCallback(pMod, iDbgInfo,
    1195                          enmDbgInfoType, pDbgDir->MajorVersion, pDbgDir->MinorVersion,
     1195                         enmDbgInfoType, pDbgDir->MajorVersion, pDbgDir->MinorVersion, NULL,
    11961196                         pDbgDir->PointerToRawData ? (KLDRFOFF)pDbgDir->PointerToRawData : -1,
    11971197                         pDbgDir->AddressOfRawData ? pDbgDir->AddressOfRawData : NIL_KLDRADDR,
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette