From 35ccd8e07014e5635cca514ef69b0227e98fd5c2 Mon Sep 17 00:00:00 2001 From: clc5q <clc5q@git.zephyr-software.com> Date: Mon, 30 Nov 2015 22:35:19 +0000 Subject: [PATCH] Constrain code xrefs to the real code range, not including XTRN segments. Former-commit-id: 0dbc2a10bd350e98f165b3c7b74bd82f3357e362 --- include/base/SMPProgram.h | 4 ++++ src/interfaces/abstract/STARSProgram.cpp | 13 +++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/include/base/SMPProgram.h b/include/base/SMPProgram.h index 9b237968..154a45a5 100644 --- a/include/base/SMPProgram.h +++ b/include/base/SMPProgram.h @@ -80,6 +80,10 @@ inline bool IsImmedNumeric(STARS_ea_t ImmedValue) { return (!(IsImmedGlobalAddress(ImmedValue) || global_STARS_program->IsImmedCodeAddress(ImmedValue))); } +inline bool IsAddressInCodeRange(STARS_ea_t addr) { + return ((addr >= LowestCodeAddress) && (addr <= HighestCodeAddress)); +} + class LessOff { public: bool operator()(const std::pair<size_t, bool> &Off1, const std::pair<size_t, bool> &Off2) const { diff --git a/src/interfaces/abstract/STARSProgram.cpp b/src/interfaces/abstract/STARSProgram.cpp index 4176e748..490e3376 100644 --- a/src/interfaces/abstract/STARSProgram.cpp +++ b/src/interfaces/abstract/STARSProgram.cpp @@ -11,6 +11,7 @@ #include "interfaces/SMPDBInterface.h" // #include "interfaces/abstract/all.h" #include "base/SMPDataFlowAnalysis.h" +#include "base/SMPProgram.h" using namespace std; @@ -399,14 +400,18 @@ bool STARS_Program_t::AreInstIDsInSameFunction(const STARS_ea_t InstID1, const S // Utility functions to print code xrefs to STARS_XrefsFile void STARS_Program_t::PrintCodeToCodeXref(STARS_ea_t FromAddr, STARS_ea_t ToAddr, std::size_t InstrSize) { - SMP_fprintf(this->GetXrefsFile(), "%18llx %6zu INSTR XREF IBT FROMIB %18llx \n", - (unsigned long long) ToAddr, InstrSize, (unsigned long long) FromAddr); + if (IsAddressInCodeRange(ToAddr)) { + SMP_fprintf(this->GetXrefsFile(), "%18llx %6zu INSTR XREF IBT FROMIB %18llx \n", + (unsigned long long) ToAddr, InstrSize, (unsigned long long) FromAddr); + } return; } void STARS_Program_t::PrintDataToCodeXref(STARS_ea_t FromDataAddr, STARS_ea_t ToCodeAddr, std::size_t InstrSize) { - SMP_fprintf(this->GetXrefsFile(), "%18llx %6zu INSTR XREF IBT FROMDATA %18llx \n", - (unsigned long long) ToCodeAddr, InstrSize, (unsigned long long) FromDataAddr); + if (IsAddressInCodeRange(ToCodeAddr)) { + SMP_fprintf(this->GetXrefsFile(), "%18llx %6zu INSTR XREF IBT FROMDATA %18llx \n", + (unsigned long long) ToCodeAddr, InstrSize, (unsigned long long) FromDataAddr); + } return; } -- GitLab