mirror of
https://github.com/ksherlock/wdc-utils.git
synced 2024-12-12 19:30:38 +00:00
clean up expression to omf errors.
This commit is contained in:
parent
2ff8267af3
commit
4317d2929b
27
link.cpp
27
link.cpp
@ -633,9 +633,14 @@ inline bool in_range(int value, int low, int high) {
|
|||||||
return value >= low && value <= high;
|
return value >= low && value <= high;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void expr_error(bool fatal, const expression &e, const char *msg) {
|
||||||
|
if (fatal) flags._errors++;
|
||||||
|
warnx("%s:%04x %s", sections[e.section].name.c_str(), e.offset, msg);
|
||||||
|
}
|
||||||
|
|
||||||
void to_omf(const expression &e, omf::segment &seg) {
|
void to_omf(const expression &e, omf::segment &seg) {
|
||||||
if (e.stack.empty() || e.size == 0) {
|
if (e.stack.empty() || e.size == 0) {
|
||||||
warnx("Expression empty at segment \"%s\" pc %04x", seg.segname.c_str(), e.offset);
|
expr_error(false, e, "Expression empty");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -655,9 +660,7 @@ void to_omf(const expression &e, omf::segment &seg) {
|
|||||||
if (e.size == 1 && in_range(tmp, -128, 127)) ok = true;
|
if (e.size == 1 && in_range(tmp, -128, 127)) ok = true;
|
||||||
|
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
warnx("Relative branch out of range (%d) at segment \"%s\" pc %04x",
|
expr_error(true, e, "Relative branch out of range");
|
||||||
tmp, seg.segname.c_str(), e.offset);
|
|
||||||
flags._errors++;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -667,8 +670,7 @@ void to_omf(const expression &e, omf::segment &seg) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
warnx("Relative branch error at \"%s\" pc %04x", seg.segname.c_str(), e.offset);
|
expr_error(true, e, "Relative expression too complex");
|
||||||
flags._errors++;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -681,9 +683,9 @@ void to_omf(const expression &e, omf::segment &seg) {
|
|||||||
|
|
||||||
if (a.tag == OP_LOC) {
|
if (a.tag == OP_LOC) {
|
||||||
auto &loc = a;
|
auto &loc = a;
|
||||||
|
|
||||||
if (loc.section == 0) {
|
if (loc.section == 0) {
|
||||||
warnx("Invalid segment at \"%s\" pc %04x", seg.segname.c_str(), e.offset);
|
expr_error(true, e, "Invalid segment");
|
||||||
flags._errors++;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -731,14 +733,13 @@ void to_omf(const expression &e, omf::segment &seg) {
|
|||||||
|
|
||||||
|
|
||||||
if (shift.value > 24) {
|
if (shift.value > 24) {
|
||||||
warnx("Shift %d at \"%s\" pc %04x", shift.value, seg.segname.c_str(), e.offset);
|
expr_error(false, e, "Shift too large");
|
||||||
// data is already pre-zeroed.
|
// data is already pre-zeroed.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (loc.section == 0) {
|
if (loc.section == 0) {
|
||||||
warnx("Invalid segment at \"%s\" pc %04x", seg.segname.c_str(), e.offset);
|
expr_error(true, e, "Invalid segment");
|
||||||
flags._errors++;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -779,9 +780,9 @@ void to_omf(const expression &e, omf::segment &seg) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
warnx("Expression too complex at \"%s\" pc %04x", seg.segname.c_str(), e.offset);
|
|
||||||
|
expr_error(true, e, "Expression too complex");
|
||||||
// should also pretty-print the expression.
|
// should also pretty-print the expression.
|
||||||
flags._errors++;
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user