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