OSDN Git Service

(LibGoblin)
[drdeamon64/drdeamon64.git] / libgoblin / drd64_libgoblin_dwarf_common.c
index dec40df..d38b20b 100644 (file)
@@ -41,14 +41,14 @@ Comment:
 ----------------------------------------------------------------------*/
 LIBGOBLIN_DWARF_COMMON_EXTERN
 Byte *
-       LibGoblin_DwarfCommon_Read_Byte(
+       DWARF_Common_Read_Byte(
                Byte    *pb_value,
                Byte    *pb_src,
                QWord   *pqw_size )
 {
        if( 1 > *pqw_size )             { return NULL; }
 
-       *pb_value       = *((Byte *)pb_src);
+       *pb_value       = *(pb_src);
        pb_src          += 1;
        *pqw_size       -= 1;
        
@@ -60,7 +60,7 @@ Byte *
 ----------------------------------------------------------------------*/
 LIBGOBLIN_DWARF_COMMON_EXTERN
 Byte *
-       LibGoblin_DwarfCommon_Read_Word(
+       DWARF_Common_Read_Word(
                Word    *pw_value,
                Byte    *pb_src,
                QWord   *pqw_size )
@@ -79,7 +79,7 @@ Byte *
 ----------------------------------------------------------------------*/
 LIBGOBLIN_DWARF_COMMON_EXTERN
 Byte *
-       LibGoblin_DwarfCommon_Read_DWord(
+       DWARF_Common_Read_DWord(
                DWord   *pdw_value,
                Byte    *pb_src,
                QWord   *pqw_size )
@@ -98,7 +98,7 @@ Byte *
 ----------------------------------------------------------------------*/
 LIBGOBLIN_DWARF_COMMON_EXTERN
 Byte *
-       LibGoblin_DwarfCommon_Read_QWord(
+       DWARF_Common_Read_QWord(
                QWord   *pqw_value,
                Byte    *pb_src,
                QWord   *pqw_size )
@@ -117,89 +117,23 @@ Byte *
 ----------------------------------------------------------------------*/
 LIBGOBLIN_DWARF_COMMON_EXTERN
 Byte *
-       LibGoblin_DwarfCommon_Read_CUHeader(
-               LibGoblin_DwarfCommon_CUHeader  *p_cuhead,
+       DWARF_Common_DecodeULEB128(
+               QWord   *qw_result,
                Byte    *pb_data,
-               QWord   qw_size_info )
-{
-       int             i_bitflag;
-       int             i_readbytes;
-       DWord   dw_dword;
-       QWord   qw_qword;
-
-       assert( NULL != p_cuhead );
-       assert( NULL != pb_data );
-
-       i_readbytes     = 0;
-       i_bitflag       = 32;
-
-       /*   Read unit_length (4Byte + 8Byte(64bit)) */
-       pb_data = LibGoblin_DwarfCommon_Read_DWord(
-                               &dw_dword, pb_data, &qw_size_info );
-       if( NULL == pb_data )   { return NULL; }
-
-       if( ((DWord)0xffffffff) == dw_dword )   {
-               pb_data = LibGoblin_DwarfCommon_Read_QWord(
-                                       &qw_qword, pb_data, &qw_size_info );
-               if( NULL == pb_data )   { return NULL; }
-
-               p_cuhead->qw_unitsize   = (QWord)qw_qword;
-               i_bitflag       = 64;
-       }
-       else    {
-               p_cuhead->qw_unitsize   = (QWord)dw_dword;
-       }
-       
-       /*   Read version (2Byte) */
-       pb_data = LibGoblin_DwarfCommon_Read_Word(
-                               &(p_cuhead->w_version), pb_data, &qw_size_info );
-       if( NULL == pb_data )   { return NULL; }
-
-       /*   Read abbrev_offset (4Byte(32bit), 8Byte(64bit)) */
-       if( 64 == i_bitflag )   {
-               pb_data = LibGoblin_DwarfCommon_Read_QWord(
-                                       &qw_qword, pb_data, &qw_size_info );
-               if( NULL == pb_data )   { return NULL; }
-
-               p_cuhead->qw_abbrev_offset      = qw_qword;
-       }
-       else    {
-               pb_data = LibGoblin_DwarfCommon_Read_DWord(
-                                       &dw_dword, pb_data, &qw_size_info );
-               if( NULL == pb_data )   { return NULL; }
-
-               p_cuhead->qw_abbrev_offset      = (QWord)dw_dword;
-       }
-
-       /*   Read address_size (1Byte) */
-       pb_data = LibGoblin_DwarfCommon_Read_Byte(
-                               &(p_cuhead->b_pointersize), pb_data, &qw_size_info);
-       if( NULL == pb_data )   { return NULL; }
-       
-       return pb_data;
-}
-
-
-/*----------------------------------------------------------------------
-----------------------------------------------------------------------*/
-LIBGOBLIN_DWARF_COMMON_EXTERN
-Byte *
-       LibGoblin_DwarfCommon_Decode_ULEB128(
-               DWord   *dw_result,
-               Byte    *pb_data,
-               QWord   qw_remain )
+               QWord   *pqw_remain )
 {
        Byte    b_value;
        int             i_shift;
 
-       *dw_result      = 0x00;
+       *qw_result      = 0x00;
        i_shift         = 0;
-       do      {
+       b_value         = 0x80;
+       while( (0x00 != (b_value & 0x80)) && (0 < *pqw_remain) )        {
                b_value         = *pb_data++;
-               qw_remain--;
-               *dw_result      = *dw_result | ((DWord)(b_value & 0x7f) << i_shift);
+               *qw_result      = *qw_result | ((QWord)(b_value & 0x7f) << i_shift);
+               (*pqw_remain)--;
                i_shift         += 7;   
-       } while( (0x00 != (b_value & 0x80)) || (0 == qw_remain) );
+       }
 
        return  pb_data;
 }
@@ -209,30 +143,30 @@ Byte *
 ----------------------------------------------------------------------*/
 LIBGOBLIN_DWARF_COMMON_EXTERN
 Byte *
-       LibGoblin_DwarfCommon_Decode_LEB128(
-               INT             *i_result, 
+       DWARF_Common_DecodeLEB128(
+               Int64   *ii_result, 
                Byte    *pb_data,
-               QWord   qw_remain )
+               QWord   *pqw_remain )
 {
        Byte    b_value;
        int             i_shift;
 
-       *i_result       = 0x00;
+       *ii_result      = 0x00;
        i_shift         = 0;
-       do      {
+       b_value         = 0x80;
+       while( (0x00 != (b_value & 0x80)) && (0 < *pqw_remain) )        {
                b_value         = *pb_data++;
-               qw_remain--;
-               *i_result       = *i_result | ((INT)(b_value & 0x7f) << i_shift);
+               *ii_result      = *ii_result | ((Int64)(b_value & 0x7f) << i_shift);
+               (*pqw_remain)--;
                i_shift         += 7;   
-       } while( (0x00 != (b_value & 0x80)) || (0 == qw_remain) );
+       }
 
        if((i_shift < 64) && ( 0x00 != (b_value & 0x40)))       {
-               *i_result       |= -1 * (0x01 << i_shift);
+               *ii_result      |= -1 * (0x01 << i_shift);
        }
 
        return  pb_data;
 }
 
 
-
 /* EOF of drd64_.c ----------------------------------- */