Skip to content

Commit

Permalink
Merge pull request #159 from lvb2000/PR
Browse files Browse the repository at this point in the history
Fixes in traceDecoder and loadelf
  • Loading branch information
mubes authored Oct 27, 2024
2 parents 3dfda27 + ff18fc2 commit dfb021d
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 11 deletions.
3 changes: 3 additions & 0 deletions Inc/traceDecoder.h
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,9 @@ struct TRACECPUState

// Convinience, for debug reporting
genericsReportCB report;

// Debugging
uint64_t overflows;
};

// ============================================================================
Expand Down
26 changes: 17 additions & 9 deletions Src/loadelf.c
Original file line number Diff line number Diff line change
Expand Up @@ -369,15 +369,15 @@ static void _processFunctionDie( struct symbol *p, Dwarf_Debug dbg, Dwarf_Die di
attr_tag = DW_AT_abstract_origin;
dwarf_attr( die, attr_tag, &attr_data, 0 );
dwarf_global_formref( attr_data, &abstract_origin_offset, 0 );
dwarf_offdie_b( dbg, abstract_origin_offset, IS_INFO, &abstract_origin_die, 0 );
isinline = true;
}
else
{
dwarf_highpc_b ( die, &h, 0, &formclass, 0 );
dwarf_lowpc ( die, &l, 0 );
if (DW_DLV_OK == dwarf_offdie_b( dbg, abstract_origin_offset, IS_INFO, &abstract_origin_die, 0 ))
{
isinline = true;
}
}

dwarf_highpc_b ( die, &h, 0, &formclass, 0 );
dwarf_lowpc ( die, &l, 0 );

if ( formclass == DW_FORM_CLASS_CONSTANT )
{
h += l;
Expand Down Expand Up @@ -1001,7 +1001,7 @@ char *symbolDisassembleLine( struct symbol *p, enum instructionClass *ic, symbol
if ( !p->caphandle )
{
/* Disassembler isn't initialised yet */
if ( cs_open( CS_ARCH_ARM, CS_MODE_THUMB + CS_MODE_LITTLE_ENDIAN, &p->caphandle ) != CS_ERR_OK )
if ( cs_open( CS_ARCH_ARM, CS_MODE_THUMB + CS_MODE_LITTLE_ENDIAN + CS_MODE_MCLASS, &p->caphandle ) != CS_ERR_OK )
{
return NULL;
}
Expand Down Expand Up @@ -1044,6 +1044,14 @@ char *symbolDisassembleLine( struct symbol *p, enum instructionClass *ic, symbol
&& strstr( insn->op_str, "pc" ) )
) ? LE_IC_JUMP : 0;

/* create a copy to check if load in pc */
char *copy = strdup(insn->op_str);
*ic |= (
( ( ( insn->id == ARM_INS_LDR ) )
&& strstr(strtok(copy,","), "pc" ) )
) ? LE_IC_JUMP : 0;
free(copy);

/* Was it an exception return? */
*ic |= ( ( insn->id == ARM_INS_ERET ) ) ? LE_IC_JUMP | LE_IC_IRET : 0;

Expand Down Expand Up @@ -1072,7 +1080,7 @@ char *symbolDisassembleLine( struct symbol *p, enum instructionClass *ic, symbol

if ( newaddr )
{
*newaddr = detail->arm.operands[0].imm;
*newaddr = detail->arm.operands[n].imm;
}

break;
Expand Down
11 changes: 9 additions & 2 deletions Src/traceDecoder_etm4.c
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,11 @@ static bool _pumpAction( struct TRACEDecoderEngine *e, struct TRACECPUState *cpu
}
else
{
if( c == 0x05 && j->asyncCount == 1)
{
cpu->overflows++;
DEBUG( "Overflow Detected. ReSync Trace Stream:" EOL );
}
j->asyncCount = c ? 0 : j->asyncCount + 1;

switch ( j->p )
Expand Down Expand Up @@ -336,7 +341,7 @@ static bool _pumpAction( struct TRACEDecoderEngine *e, struct TRACECPUState *cpu

case 0b11000000 ... 0b11010100:
case 0b11100000 ... 0b11110100: /* Atom format 6, Figure 6-44, Pg 6.307 */
cpu->eatoms = ( c & 0x1f ) + 3;
cpu->eatoms = ( c & 0x1f ) + 4;
cpu->instCount = cpu->eatoms;
cpu->disposition = ( 1 << ( cpu->eatoms ) ) - 1;

Expand Down Expand Up @@ -404,6 +409,8 @@ static bool _pumpAction( struct TRACEDecoderEngine *e, struct TRACECPUState *cpu
cpu->addr = j->q[match].addr;
retVal = TRACE_EV_MSG_RXED;
_stateChange( cpu, EV_CH_ADDRESS );
_stackQ( j );
j->q[0].addr = cpu->addr;
break;

case 0b10010101: /* Short address, IS0 short, Figure 6-32, Pg 6-294 */
Expand Down Expand Up @@ -685,7 +692,7 @@ static bool _pumpAction( struct TRACEDecoderEngine *e, struct TRACECPUState *cpu
}
else
{
if ( j->idx == 8 )
if ( j->idx == 9 )
{
/* Second byte of IS1 case - mask MSB */
j->q[0].addr = ( j->q[0].addr & ( ~( 0x7F << j->idx ) ) ) | ( ( c & 0x7f ) << ( j->idx ) );
Expand Down

0 comments on commit dfb021d

Please sign in to comment.