librz/arch/c166: remove unnecessary use of assert macroses (#6345)
This commit is contained in:
parent
e8708c62d5
commit
5256726d00
8 changed files with 94 additions and 67 deletions
|
|
@ -1500,7 +1500,7 @@ end:
|
|||
* \param len Length of buffer
|
||||
* \return Instruction byte size, 2 or 4 or -1 on error
|
||||
*/
|
||||
RZ_IPI st32 c166_decode_command(RZ_NONNULL C166State *state, RZ_NONNULL C166_Inst *instr, const ut8 *bytes, st32 len) {
|
||||
RZ_IPI st32 c166_decode_command(RZ_NONNULL C166State *state, RZ_NONNULL C166_Inst *instr, RZ_NONNULL const ut8 *bytes, st32 len) {
|
||||
rz_return_val_if_fail(state && instr && bytes, -1);
|
||||
if (len < 2)
|
||||
return -1;
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@
|
|||
#ifndef C166_DISAS_H
|
||||
#define C166_DISAS_H
|
||||
|
||||
#include <rz_vector.h>
|
||||
#include <rz_types.h>
|
||||
|
||||
#define C166_INSTR_MAXLEN (16 + 16) // ?
|
||||
|
|
@ -748,7 +749,7 @@ typedef enum {
|
|||
typedef struct {
|
||||
bool esfr; ///< Extended register sequence active
|
||||
C166ExtMode mode; ///< Extended page/seq mode
|
||||
ut8 i; ///< Number of unstructions remaining until state exits
|
||||
ut8 i; ///< Number of unstructions remaining until state exits
|
||||
ut16 value; ///< Value of ext
|
||||
} C166ExtState;
|
||||
|
||||
|
|
@ -785,6 +786,6 @@ static inline ut16 get_operand(const C166_Inst *i, const ut8 index) {
|
|||
return get_byte(i, index);
|
||||
}
|
||||
|
||||
RZ_IPI st32 c166_decode_command(RZ_NONNULL C166State *state, RZ_NONNULL C166_Inst *instr, const ut8 *bytes, st32 len);
|
||||
RZ_IPI st32 c166_decode_command(RZ_NONNULL C166State *state, RZ_NONNULL C166_Inst *instr, RZ_NONNULL const ut8 *bytes, st32 len);
|
||||
static bool check_unused_opcode(ut8 opcode);
|
||||
#endif /* C166_DISAS_H */
|
||||
|
|
|
|||
|
|
@ -9,6 +9,31 @@
|
|||
#include <string.h>
|
||||
#include "omf/omf.h"
|
||||
|
||||
bool set_reg_val2(RzReg *areg, const char *name, const ut16 value) {
|
||||
RzRegItem *r = rz_reg_get(areg, name, RZ_REG_TYPE_GPR);
|
||||
return rz_reg_set_value(areg, r, (ut64)value);
|
||||
}
|
||||
|
||||
ut64 get_flg_val(RzReg *areg, const char *name) {
|
||||
const ut64 value = rz_reg_getv(areg, name);
|
||||
return value;
|
||||
}
|
||||
|
||||
ut64 get_reg_val2(RzReg *areg, const char *name) {
|
||||
RzRegItem *reg = rz_reg_get(areg, name, RZ_REG_TYPE_GPR);
|
||||
const ut64 value = rz_reg_get_value(areg, reg);
|
||||
return value;
|
||||
}
|
||||
|
||||
#define SET_CPUCON1(val) set_reg_val2(areg, CPUCON1_NAME, val)
|
||||
#define SET_SP(val) set_reg_val2(areg, "SP", val)
|
||||
#define SET_CSP(val) set_reg_val2(areg, "CSP", val)
|
||||
#define SET_SGTDIS(val) set_reg_val2(areg, CPUCON1_NAME, (CPUCON1_RESET_VALUE | (val << 3)))
|
||||
|
||||
#define GET_SGTDIS get_flg_val(areg, "SGTDIS")
|
||||
#define GET_CPUCON1 get_reg_val2(areg, "CPUCON1")
|
||||
#define GET_SP get_reg_val2(areg, "SP")
|
||||
|
||||
static OMF_components *get_component_by_ti(const rz_bin_omf166_obj *omf_obj, ut16 ti) {
|
||||
bool found = false;
|
||||
OMF_type *type = ht_up_find(omf_obj->ht_types, ti, &found);
|
||||
|
|
@ -21,7 +46,9 @@ static OMF_components *get_component_by_ti(const rz_bin_omf166_obj *omf_obj, ut1
|
|||
static bool is_final_type(const rz_bin_omf166_obj *obj, ut16 ti_index) {
|
||||
bool found = false;
|
||||
const OMF_type *type = ht_up_find(obj->ht_types, ti_index, &found);
|
||||
rz_return_val_if_fail(found, false);
|
||||
if (!found) {
|
||||
return false;
|
||||
}
|
||||
return (type->descr_type == FINAL_TYPE) ? true : false;
|
||||
}
|
||||
|
||||
|
|
@ -30,7 +57,9 @@ static inline RzType *TYPE_TI(rz_bin_omf166_obj *omf_obj, ut16 ti) {
|
|||
const RzTypeDB *typedb = omf_obj->typedb;
|
||||
|
||||
const OMF_type *type = ht_up_find(omf_obj->ht_types, ti, &found);
|
||||
rz_return_val_if_fail(found, rz_type_identifier_of_base_type_str(typedb, "unknown_t"));
|
||||
if (!found) {
|
||||
return rz_type_identifier_of_base_type_str(typedb, "unknown_t");
|
||||
}
|
||||
if (found && type->descr_type == ARRAY_DESCRIPTOR) {
|
||||
RzType *subtype = TYPE_TI(omf_obj, type->descriptor.array.ti);
|
||||
const ut64 count = (type->descriptor.array.dimsz == 0xFFFFFFFF) ? 0 : type->descriptor.array.dimsz;
|
||||
|
|
@ -72,6 +101,7 @@ static RzBaseType *create_new_primitive_type(const RzTypeDB *typedb, const char
|
|||
const bool result = rz_type_db_save_base_type(typedb, bt);
|
||||
if (!result) {
|
||||
rz_type_base_type_free(bt);
|
||||
RZ_LOG_WARN("Not found: `%s`\n", name);
|
||||
return NULL;
|
||||
}
|
||||
return bt;
|
||||
|
|
@ -134,7 +164,9 @@ static bool types_cb(void *user, const ut64 k, const void *v) {
|
|||
newtype->callable = cal;
|
||||
cal->ret = TYPE_TI(omf_obj, type->descriptor.function.rtype_ti);
|
||||
cal->args = rz_pvector_new((RzPVectorFree)rz_type_callable_arg_free);
|
||||
rz_return_val_if_fail(cal->args, false);
|
||||
if (!cal->args) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const OMF_components *components = get_component_by_ti(omf_obj, type->descriptor.function.parmlist_ti);
|
||||
if (components) {
|
||||
|
|
@ -157,32 +189,10 @@ static bool types_cb(void *user, const ut64 k, const void *v) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool set_reg_val2(RzReg *areg, const char *name, const ut16 value) {
|
||||
RzRegItem *r = rz_reg_get(areg, name, RZ_REG_TYPE_GPR);
|
||||
return rz_reg_set_value(areg, r, (ut64)value);
|
||||
}
|
||||
|
||||
ut64 get_flg_val(RzReg *areg, const char *name) {
|
||||
const ut64 value = rz_reg_getv(areg, name);
|
||||
return value;
|
||||
}
|
||||
|
||||
ut64 get_reg_val2(RzReg *areg, const char *name) {
|
||||
RzRegItem *reg = rz_reg_get(areg, name, RZ_REG_TYPE_GPR);
|
||||
const ut64 value = rz_reg_get_value(areg, reg);
|
||||
return value;
|
||||
}
|
||||
#define SET_CPUCON1(val) rz_return_val_if_fail(set_reg_val2(areg, CPUCON1_NAME, val), false)
|
||||
#define SET_SP(val) rz_return_val_if_fail(set_reg_val2(areg, "SP", val), false)
|
||||
#define SET_CSP(val) rz_return_val_if_fail(set_reg_val2(areg, "CSP", val), false)
|
||||
#define SET_SGTDIS(val) rz_return_val_if_fail(set_reg_val2(areg, CPUCON1_NAME, (CPUCON1_RESET_VALUE | (val << 3))), false)
|
||||
|
||||
#define GET_SGTDIS get_flg_val(areg, "SGTDIS")
|
||||
#define GET_CPUCON1 get_reg_val2(areg, "CPUCON1")
|
||||
#define GET_SP get_reg_val2(areg, "SP")
|
||||
|
||||
RZ_API bool rz_core_bin_apply_omf_debug(const RzCore *core, const RzBinFile *binfile) {
|
||||
rz_return_val_if_fail(core, false);
|
||||
if (!core || !binfile) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *arch = rz_config_get(core->config, "asm.arch");
|
||||
if (!strstr(arch, "c166")) {
|
||||
|
|
@ -200,12 +210,9 @@ RZ_API bool rz_core_bin_apply_omf_debug(const RzCore *core, const RzBinFile *bin
|
|||
if (RZ_STR_NE(info->rclass, "OMF166")) {
|
||||
return false;
|
||||
}
|
||||
rz_return_val_if_fail(binfile, false);
|
||||
|
||||
RzReg *areg = rz_analysis_get_reg(core->analysis);
|
||||
|
||||
SET_SP(SP_RESET_VALUE);
|
||||
|
||||
rz_bin_omf166_obj *omf_obj = (rz_bin_omf166_obj *)binfile->o->bin_obj;
|
||||
|
||||
#ifdef RZ_BUILD_DEBUG
|
||||
|
|
@ -217,7 +224,7 @@ RZ_API bool rz_core_bin_apply_omf_debug(const RzCore *core, const RzBinFile *bin
|
|||
|
||||
const ut8 mm = memory_model_type(omf_obj->modinfo);
|
||||
if (mm == OMF_MEMORY_MODEL_TINY && !(omf_obj->modinfo & 0x01)) {
|
||||
eprintf("Wrong memory model type, segmentation cannot be enabled, if mm is TINY\n");
|
||||
RZ_LOG_WARN("Wrong memory model type, segmentation cannot be enabled, if mm is TINY\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -380,7 +380,7 @@ static void c166_op_jmps_seg_caddr(RzAnalysis *analysis, RzAnalysisOp *op, const
|
|||
const ut8 SGTDIS = (ut8)GET_A_SGTDIS;
|
||||
if (SGTDIS == 0) {
|
||||
if (!SET_A_CSP((ut64)seg)) {
|
||||
eprintf("Error setting reg value\n");
|
||||
RZ_LOG_WARN("Error setting reg value\n");
|
||||
}
|
||||
}
|
||||
c166_set_jump_target_seg_caddr(op, seg, caddr);
|
||||
|
|
@ -502,7 +502,7 @@ static void c166_op_call_seg_caddr(RzAnalysis *analysis, RzAnalysisOp *op, const
|
|||
const ut8 SGTDIS = (ut8)GET_A_SGTDIS;
|
||||
if (SGTDIS == 0) {
|
||||
if (!SET_A_CSP((ut64)seg)) {
|
||||
eprintf("Error setting reg value\n");
|
||||
RZ_LOG_WARN("Error setting reg value\n");
|
||||
}
|
||||
}
|
||||
SET_A_IP((ut64)caddr);
|
||||
|
|
@ -1299,7 +1299,7 @@ static void c166_op_set_type(RZ_NONNULL C166_Inst *instr, RzAnalysis *analysis,
|
|||
case C166_CoSTORE_B3:
|
||||
break;
|
||||
default:
|
||||
printf("c166_op_set_type 0x%02x\n", instr->id);
|
||||
RZ_LOG_DEBUG("c166_op_set_type 0x%02x\n", instr->id);
|
||||
rz_warn_if_reached();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -332,7 +332,9 @@ static _RzAnalysisOpType c166_analysis_op_type_by_opcode(const ut8 opcode) {
|
|||
* to perform the actual disassembly.
|
||||
*/
|
||||
static st32 disassemble(const RzAsm *a, RzAsmOp *op, const ut8 *buf, st32 len) {
|
||||
rz_return_val_if_fail(a && op && buf, -1);
|
||||
if (!a || !op || !buf) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (len < 2) {
|
||||
rz_asm_op_setf_asm(op, FMT_WORD, buf[0], 0x00);
|
||||
|
|
@ -373,9 +375,10 @@ static st32 disassemble(const RzAsm *a, RzAsmOp *op, const ut8 *buf, st32 len) {
|
|||
}
|
||||
}
|
||||
op->asm_toks = rz_asm_tokenize_asm_regex(&op->buf_asm, state->token_patterns);
|
||||
|
||||
rz_return_val_if_fail(op->asm_toks, op->size);
|
||||
op->asm_toks->op_type = c166_analysis_op_type_by_opcode(inst.id); // ???
|
||||
if (!op->asm_toks) {
|
||||
return op->size;
|
||||
}
|
||||
op->asm_toks->op_type = c166_analysis_op_type_by_opcode(inst.id);
|
||||
return op->size;
|
||||
}
|
||||
|
||||
|
|
@ -450,7 +453,9 @@ static bool c16x_init(void **user) {
|
|||
}
|
||||
|
||||
static bool c16x_fini(void *user) {
|
||||
rz_return_val_if_fail(user, false);
|
||||
if (!user) {
|
||||
return false;
|
||||
}
|
||||
C166State *state = (C166State *)user;
|
||||
rz_pvector_free(state->token_patterns);
|
||||
free(state);
|
||||
|
|
|
|||
|
|
@ -9,11 +9,8 @@
|
|||
#include <rz_util.h>
|
||||
#include <rz_types.h>
|
||||
#include <rz_bin.h>
|
||||
|
||||
#include "omf_specs.h"
|
||||
|
||||
#define BOOL_STR(x) x ? "true" : "false"
|
||||
|
||||
#define FINAL_TYPE 0x00
|
||||
/**
|
||||
* <b>COMPONENT-LIST Descriptor</b><br>
|
||||
|
|
|
|||
|
|
@ -31,7 +31,9 @@ static bool check_buffer(RzBuffer *buf) {
|
|||
|
||||
rz_bin_c166_obj *rz_bin_format_c166_load(const ut8 *buf, ut64 size) {
|
||||
rz_bin_c166_obj *ret = RZ_NEW0(rz_bin_c166_obj);
|
||||
rz_return_val_if_fail(ret, NULL);
|
||||
if (!ret) {
|
||||
return NULL;
|
||||
}
|
||||
const ut8 c = rz_read_le8(buf + 1);
|
||||
ret->base_addr = c << 16 | 0x000000;
|
||||
return ret;
|
||||
|
|
@ -40,9 +42,13 @@ rz_bin_c166_obj *rz_bin_format_c166_load(const ut8 *buf, ut64 size) {
|
|||
static bool load_buffer(RzBinFile *bf, RzBinObject *obj, RzBuffer *b, Sdb *sdb) {
|
||||
ut64 size;
|
||||
const ut8 *buf = rz_buf_data(b, &size);
|
||||
rz_return_val_if_fail(buf, false);
|
||||
if (!buf) {
|
||||
return false;
|
||||
}
|
||||
obj->bin_obj = rz_bin_format_c166_load(buf, size);
|
||||
rz_return_val_if_fail(obj->bin_obj, false);
|
||||
if (!obj->bin_obj) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,10 +32,14 @@ static bool _is_any_n(const char *str, size_t n, ...) {
|
|||
static bool load_buffer(RzBinFile *bf, RzBinObject *obj, RzBuffer *b, Sdb *sdb) {
|
||||
ut64 size;
|
||||
const ut8 *buf = rz_buf_data(b, &size);
|
||||
rz_return_val_if_fail(buf, false);
|
||||
if (!buf) {
|
||||
return false;
|
||||
}
|
||||
|
||||
obj->bin_obj = rz_bin_format_omf166_load(buf, size);
|
||||
rz_return_val_if_fail(obj->bin_obj, false);
|
||||
if (!obj->bin_obj) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -51,7 +55,9 @@ static void destroy(RzBinFile *bf) {
|
|||
}
|
||||
|
||||
rz_bin_omf166_obj *omf_obj = (rz_bin_omf166_obj *)bf->o->bin_obj;
|
||||
rz_return_val_if_fail(omf_obj, (void)NULL);
|
||||
if (omf_obj) {
|
||||
return;
|
||||
}
|
||||
ht_up_free(omf_obj->ht_types);
|
||||
rz_bin_format_omf166_fini(omf_obj);
|
||||
}
|
||||
|
|
@ -88,7 +94,6 @@ static bool check_buffer(RzBuffer *b) {
|
|||
rz_buf_read_at(b, 0, sbuf, sizeof(sbuf));
|
||||
return rz_bin_checksum_omf_ok(sbuf, sizeof(sbuf));
|
||||
}
|
||||
rz_return_val_if_fail(buf, false);
|
||||
return rz_bin_checksum_omf_ok(buf, length);
|
||||
}
|
||||
|
||||
|
|
@ -198,18 +203,20 @@ static int offset_cmp(const void *a, const void *b, void *user) {
|
|||
}
|
||||
|
||||
static RzPVector /*<RzBinSymbol *>*/ *symbols(RzBinFile *bf) {
|
||||
rz_return_val_if_fail(bf && bf->o, NULL);
|
||||
if (!bf || !bf->o) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const rz_bin_omf166_obj *obj = (rz_bin_omf166_obj *)bf->o->bin_obj;
|
||||
rz_return_val_if_fail(obj, NULL);
|
||||
if (!obj) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!rz_pvector_len(obj->symbols_vec)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
RzPVector *ret = rz_pvector_new((RzPVectorFree)rz_bin_symbol_free);
|
||||
rz_return_val_if_fail(obj, ret);
|
||||
|
||||
rz_pvector_sort(obj->symbols_vec, offset_cmp, NULL);
|
||||
void **it;
|
||||
rz_pvector_foreach (obj->symbols_vec, it) {
|
||||
|
|
@ -283,11 +290,13 @@ static RzPVector /*<RzBinSymbol *>*/ *symbols(RzBinFile *bf) {
|
|||
}
|
||||
|
||||
static RzStructuredData *omf166_structure(RzBinFile *bf) {
|
||||
rz_return_val_if_fail(bf, NULL);
|
||||
const RzBinObject *o = bf->o;
|
||||
rz_return_val_if_fail(o, NULL);
|
||||
const rz_bin_omf166_obj *obj = (rz_bin_omf166_obj *)o->bin_obj;
|
||||
rz_return_val_if_fail(obj, NULL);
|
||||
if (!bf || !bf->o) {
|
||||
return NULL;
|
||||
}
|
||||
const rz_bin_omf166_obj *obj = (rz_bin_omf166_obj *)bf->o->bin_obj;
|
||||
if (!obj) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
RzStructuredData *info = rz_structured_data_new_map();
|
||||
if (!info) {
|
||||
|
|
@ -343,11 +352,13 @@ static RzStructuredData *omf166_structure(RzBinFile *bf) {
|
|||
}
|
||||
|
||||
static RzBinInfo *info(RzBinFile *bf) {
|
||||
rz_return_val_if_fail(bf, NULL);
|
||||
const RzBinObject *o = bf->o;
|
||||
rz_return_val_if_fail(o, NULL);
|
||||
const rz_bin_omf166_obj *obj = (rz_bin_omf166_obj *)o->bin_obj;
|
||||
rz_return_val_if_fail(obj, NULL);
|
||||
if (!bf || !bf->o) {
|
||||
return NULL;
|
||||
}
|
||||
const rz_bin_omf166_obj *obj = (rz_bin_omf166_obj *)bf->o->bin_obj;
|
||||
if (!obj) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
RzBinInfo *ret;
|
||||
if (!((ret = RZ_NEW0(RzBinInfo)))) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue