No public description PiperOrigin-RevId: 746180833 Change-Id: I14826263bfe88ef20ca24255db93f5ef2530eba2
diff --git a/mpact/sim/util/asm/simple_assembler.cc b/mpact/sim/util/asm/simple_assembler.cc index 889c8c7..aff0218 100644 --- a/mpact/sim/util/asm/simple_assembler.cc +++ b/mpact/sim/util/asm/simple_assembler.cc
@@ -367,8 +367,13 @@ lines_.push_back(statement); } else if (!label.empty()) { // This is just a single label definition. Add it to the symbol table. - auto status = - AddSymbolToCurrentSection(label, address, 0, STT_NOTYPE, 0, 0); + uint64_t symbol_address = address; + if ((current_section_ == data_section_) || + (current_section_ == bss_section_)) { + symbol_address = address / data_address_unit_; + } + auto status = AddSymbolToCurrentSection(label, symbol_address, 0, + STT_NOTYPE, 0, 0); if (!status.ok()) return status; } continue;
diff --git a/mpact/sim/util/asm/simple_assembler.h b/mpact/sim/util/asm/simple_assembler.h index 982b5bf..1f705c5 100644 --- a/mpact/sim/util/asm/simple_assembler.h +++ b/mpact/sim/util/asm/simple_assembler.h
@@ -105,11 +105,15 @@ // Add a symbol reference to the symbol table if it is not already defined. void SimpleAddSymbol(absl::string_view name); - // Getters. + // Getters and setters. absl::flat_hash_map<std::string, ELFIO::Elf_Word> &symbol_indices() { return symbol_indices_; } ELFIO::section *symtab() { return symtab_; } + unsigned data_address_unit() { return data_address_unit_; } + void set_data_address_unit(unsigned data_address_unit) { + data_address_unit_ = data_address_unit; + } private: // Helper function to update the symbol table entries. @@ -183,6 +187,8 @@ absl::flat_hash_map<std::string, ELFIO::Elf_Word> symbol_indices_; // Set of undefined symbols. absl::flat_hash_set<std::string> undefined_symbols_; + // Data address unit - by default 1 for byte addressable. + unsigned data_address_unit_ = 1; }; } // namespace assembler