----------------------------------------------------------------------*/
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;
----------------------------------------------------------------------*/
LIBGOBLIN_DWARF_COMMON_EXTERN
Byte *
- LibGoblin_DwarfCommon_Read_Word(
+ DWARF_Common_Read_Word(
Word *pw_value,
Byte *pb_src,
QWord *pqw_size )
----------------------------------------------------------------------*/
LIBGOBLIN_DWARF_COMMON_EXTERN
Byte *
- LibGoblin_DwarfCommon_Read_DWord(
+ DWARF_Common_Read_DWord(
DWord *pdw_value,
Byte *pb_src,
QWord *pqw_size )
----------------------------------------------------------------------*/
LIBGOBLIN_DWARF_COMMON_EXTERN
Byte *
- LibGoblin_DwarfCommon_Read_QWord(
+ DWARF_Common_Read_QWord(
QWord *pqw_value,
Byte *pb_src,
QWord *pqw_size )
----------------------------------------------------------------------*/
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;
}
----------------------------------------------------------------------*/
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 ----------------------------------- */