aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-07-04 15:06:14 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-07-04 15:39:50 +0200
commitdcf7d2a15920303ff74df298f3fb1cf29289c118 (patch)
tree9ebf4a600d1896f445df2e4d0a86c5e597cdd174
parent709595b2979d7fcbc94b57236a8dca1a5d2dd4cb (diff)
downloadsparse-dcf7d2a15920303ff74df298f3fb1cf29289c118.tar.gz
add support for arch specific asm constraints
When evaluating asm operands it must be known if they correspond to a memory operand or not in order to process/ignore the 'noderef' attribute. This is done for operands specified with the common constraints but not for the machine specific constraints. So, add support for processing machine specific constraints. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--evaluate.c5
-rw-r--r--target.h3
2 files changed, 6 insertions, 2 deletions
diff --git a/evaluate.c b/evaluate.c
index 3b9aec3c..f515ce6f 100644
--- a/evaluate.c
+++ b/evaluate.c
@@ -3642,7 +3642,10 @@ static void parse_asm_constraint(struct asm_operand *op)
return;
default:
- // FIXME: arch-specific (and multi-letter) constraints
+ if (arch_target->asm_constraint)
+ str = arch_target->asm_constraint(op, c, str);
+
+ // FIXME: multi-letter constraints
break;
}
}
diff --git a/target.h b/target.h
index 8640026c..3ef0d520 100644
--- a/target.h
+++ b/target.h
@@ -53,7 +53,7 @@ extern int pointer_alignment;
extern int bits_in_enum;
extern int enum_alignment;
-
+struct asm_operand;
struct builtin_fn;
struct target {
@@ -77,6 +77,7 @@ struct target {
void (*init)(const struct target *self);
void (*predefine)(const struct target *self);
+ const char *(*asm_constraint)(struct asm_operand *op, int c, const char *str);
};
extern const struct target target_default;