Browse Source

Merge pull request #1161 from riscv-software-src/snprintf

Avoid use of sprintf
pull/430/merge
Andrew Waterman 3 years ago
committed by GitHub
parent
commit
b09a4dc2ae
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      disasm/disasm.cc
  2. 21
      riscv/trap.h

10
disasm/disasm.cc

@ -1392,14 +1392,12 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
0x10000000, 0x10005000, 0x10006000, 0x10007000};
for (unsigned nf = 0; nf <= 7; ++nf) {
char seg_str[8] = "";
if (nf)
sprintf(seg_str, "seg%u", nf + 1);
const auto seg_str = nf ? "seg" + std::to_string(nf + 1) : "";
for (auto item : template_insn) {
const reg_t match_nf = nf << 29;
char buf[128];
sprintf(buf, item.fmt, seg_str, 8 << elt);
snprintf(buf, sizeof(buf), item.fmt, seg_str.c_str(), 8 << elt);
add_insn(new disasm_insn_t(
buf,
((item.match | match_nf) & ~mask_vldst) | elt_map[elt],
@ -1417,7 +1415,7 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
for (auto item : template_insn2) {
const reg_t match_nf = nf << 29;
char buf[128];
sprintf(buf, item.fmt, nf + 1, 8 << elt);
snprintf(buf, sizeof(buf), item.fmt, nf + 1, 8 << elt);
add_insn(new disasm_insn_t(
buf,
item.match | match_nf | elt_map[elt],
@ -1778,7 +1776,7 @@ void disassembler_t::add_instructions(const isa_parser_t* isa)
for (size_t idx = 0; idx < sizeof(amo_map) / sizeof(amo_map[0]); ++idx) {
for (auto item : template_insn) {
char buf[128];
sprintf(buf, item.fmt, amo_map[idx].first, 8 << elt);
snprintf(buf, sizeof(buf), item.fmt, amo_map[idx].first, 8 << elt);
add_insn(new disasm_insn_t(buf,
item.match | amo_map[idx].second | elt_map[elt],
item.mask,

21
riscv/trap.h

@ -4,7 +4,7 @@
#define _RISCV_TRAP_H
#include "decode.h"
#include <cstdio>
#include <string>
struct state_t;
@ -26,17 +26,16 @@ class trap_t
virtual reg_t get_tinst() { return 0; }
reg_t cause() const { return which; }
virtual const char* name()
virtual std::string name()
{
const char* fmt = uint8_t(which) == which ? "trap #%u" : "interrupt #%u";
sprintf(_name, fmt, uint8_t(which));
return _name;
const uint8_t code = uint8_t(which);
const bool is_interrupt = code != which;
return (is_interrupt ? "interrupt #" : "trap #") + std::to_string(code);
}
virtual ~trap_t() = default;
private:
char _name[16];
reg_t which;
};
@ -73,31 +72,31 @@ class mem_trap_t : public trap_t
#define DECLARE_TRAP(n, x) class trap_##x : public trap_t { \
public: \
trap_##x() : trap_t(n) {} \
const char* name() { return "trap_"#x; } \
std::string name() { return "trap_"#x; } \
};
#define DECLARE_INST_TRAP(n, x) class trap_##x : public insn_trap_t { \
public: \
trap_##x(reg_t tval) : insn_trap_t(n, /*gva*/false, tval) {} \
const char* name() { return "trap_"#x; } \
std::string name() { return "trap_"#x; } \
};
#define DECLARE_INST_WITH_GVA_TRAP(n, x) class trap_##x : public insn_trap_t { \
public: \
trap_##x(bool gva, reg_t tval) : insn_trap_t(n, gva, tval) {} \
const char* name() { return "trap_"#x; } \
std::string name() { return "trap_"#x; } \
};
#define DECLARE_MEM_TRAP(n, x) class trap_##x : public mem_trap_t { \
public: \
trap_##x(bool gva, reg_t tval, reg_t tval2, reg_t tinst) : mem_trap_t(n, gva, tval, tval2, tinst) {} \
const char* name() { return "trap_"#x; } \
std::string name() { return "trap_"#x; } \
};
#define DECLARE_MEM_GVA_TRAP(n, x) class trap_##x : public mem_trap_t { \
public: \
trap_##x(reg_t tval, reg_t tval2, reg_t tinst) : mem_trap_t(n, true, tval, tval2, tinst) {} \
const char* name() { return "trap_"#x; } \
std::string name() { return "trap_"#x; } \
};
DECLARE_MEM_TRAP(CAUSE_MISALIGNED_FETCH, instruction_address_misaligned)

Loading…
Cancel
Save