Fix potential failure to invalidate instruction decoding after bp. Updated simple assembler to allow setting data segment origin. PiperOrigin-RevId: 805868787 Change-Id: I3b20c3897a0a0d33d3000e487058bc59f08484d7
diff --git a/mpact/sim/util/asm/simple_assembler.cc b/mpact/sim/util/asm/simple_assembler.cc index afb2c13..8fd27f2 100644 --- a/mpact/sim/util/asm/simple_assembler.cc +++ b/mpact/sim/util/asm/simple_assembler.cc
@@ -500,10 +500,13 @@ uint64_t data_segment_start = 0; uint64_t bss_segment_start = 0; if ((data_section_ != nullptr) || (bss_section_ != nullptr)) { - data_segment_start = - (text_segment_start + section_address_map_[text_section_] + 4095) & - ~4095ULL; - + if (data_segment_start_ != 0) { + data_segment_start = data_segment_start_; + } else { + data_segment_start = + (text_segment_start + section_address_map_[text_section_] + 4095) & + ~4095ULL; + } data_segment = writer_.segments.add(); if (data_segment == nullptr) { return absl::InternalError("Failed to create elf segment for data");
diff --git a/mpact/sim/util/asm/simple_assembler.h b/mpact/sim/util/asm/simple_assembler.h index c684685..e2ed324 100644 --- a/mpact/sim/util/asm/simple_assembler.h +++ b/mpact/sim/util/asm/simple_assembler.h
@@ -114,6 +114,9 @@ void set_data_address_unit(unsigned data_address_unit) { data_address_unit_ = data_address_unit; } + void set_data_segment_start(uint64_t data_segment_start) { + data_segment_start_ = data_segment_start; + } private: // Helper function to update the symbol table entries. @@ -189,6 +192,7 @@ absl::flat_hash_set<std::string> undefined_symbols_; // Data address unit - by default 1 for byte addressable. unsigned data_address_unit_ = 1; + uint64_t data_segment_start_ = 0; }; } // namespace assembler