decoder->packet_buffer[i].last_instr_subtype = 0;
                decoder->packet_buffer[i].last_instr_cond = 0;
                decoder->packet_buffer[i].flags = 0;
+               decoder->packet_buffer[i].exception_number = UINT32_MAX;
                decoder->packet_buffer[i].cpu = INT_MIN;
        }
 }
        decoder->packet_buffer[et].last_instr_subtype = 0;
        decoder->packet_buffer[et].last_instr_cond = 0;
        decoder->packet_buffer[et].flags = 0;
+       decoder->packet_buffer[et].exception_number = UINT32_MAX;
 
        if (decoder->packet_count == MAX_BUFFER - 1)
                return OCSD_RESP_WAIT;
 
 static ocsd_datapath_resp_t
 cs_etm_decoder__buffer_exception(struct cs_etm_decoder *decoder,
+                                const ocsd_generic_trace_elem *elem,
                                 const uint8_t trace_chan_id)
-{
-       return cs_etm_decoder__buffer_packet(decoder, trace_chan_id,
-                                            CS_ETM_EXCEPTION);
+{      int ret = 0;
+       struct cs_etm_packet *packet;
+
+       ret = cs_etm_decoder__buffer_packet(decoder, trace_chan_id,
+                                           CS_ETM_EXCEPTION);
+       if (ret != OCSD_RESP_CONT && ret != OCSD_RESP_WAIT)
+               return ret;
+
+       packet = &decoder->packet_buffer[decoder->tail];
+       packet->exception_number = elem->exception_number;
+
+       return ret;
 }
 
 static ocsd_datapath_resp_t
                                                    trace_chan_id);
                break;
        case OCSD_GEN_TRC_ELEM_EXCEPTION:
-               resp = cs_etm_decoder__buffer_exception(decoder,
+               resp = cs_etm_decoder__buffer_exception(decoder, elem,
                                                        trace_chan_id);
                break;
        case OCSD_GEN_TRC_ELEM_EXCEPTION_RET: