Skip to content

Commit 02fcf22

Browse files
committed
Generate const binding files with preprocessed headers
Each unicorn/*.h is preprocessed in bindings/tmp/*.h to expand C macro, then const_generator.py extracts enum from these files. unicorn.h was adapted by using enum for some defines (because they disapear in expanded headers) With preprocessed headers, all <target>.h files are include in tmp/unicorn.h so unicorn_const.* files contains enum of all targets. <target>_const.* are kept for compatibility.
1 parent 9aeae14 commit 02fcf22

28 files changed

+3938
-448
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ bindings/python/unicorn/include/
6969
bindings/python/MANIFEST
7070
bindings/rust/target/
7171
bindings/rust/Cargo.lock
72+
bindings/tmp/
7273
config.log
7374

7475

bindings/Makefile

+19-2
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,34 @@ else
1616
ENV_VARS = LD_LIBRARY_PATH=../ DYLD_LIBRARY_PATH=../ LIBUNICORN_PATH=$(TRAVIS_BUILD_DIR)
1717
endif
1818

19+
TEMPDIR = tmp
20+
21+
HEADERS = $(wildcard ../include/unicorn/*.h)
22+
HEADERS_DIR = ../include/unicorn
23+
HEADERS_PREPROC_DIR = $(TEMPDIR)
24+
HEADERS_PREPROC := $(HEADERS:$(HEADERS_DIR)/%.h=$(HEADERS_PREPROC_DIR)/%.h)
1925

2026
.PHONY: build install python c clean check test
2127

22-
build:
28+
29+
build: $(TEMPDIR) $(HEADERS_PREPROC)
2330
$(MAKE) -C python gen_const
2431
$(MAKE) -C go gen_const
2532
$(MAKE) -C java gen_const
2633
$(MAKE) -C ruby gen_const
2734
python const_generator.py dotnet
2835
python const_generator.py pascal
2936

37+
tmp_headers: $(TEMPDIR) $(HEADERS_PREPROC)
38+
39+
$(TEMPDIR):
40+
-mkdir $(TEMPDIR)
41+
42+
$(HEADERS_PREPROC): $(HEADERS_PREPROC_DIR)/%.h : $(HEADERS_DIR)/%.h
43+
# To generate header file with macro expanded. '-C' to keep comments
44+
$(CC) -E -C $< -o $@
45+
@echo "Preprocess "$<" in "$@" successfully!"
46+
3047
install: build
3148
$(MAKE) -C python install
3249
$(MAKE) -C java install
@@ -49,6 +66,6 @@ clean:
4966
# rm -rf *.txt
5067
$(MAKE) -C python clean
5168
$(MAKE) -C java clean
52-
69+
rm -rf $(TEMPDIR)
5370
check:
5471
make -C python check

bindings/const_generator.py

+16-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from __future__ import print_function
55
import sys, re, os
66

7-
INCL_DIR = os.path.join('..', 'include', 'unicorn')
7+
INCL_DIR = os.path.join('.', 'tmp')
88

99
include = [ 'arm.h', 'arm64.h', 'mips.h', 'x86.h', 'sparc.h', 'm68k.h', 'ppc.h', 'riscv.h', 'unicorn.h' ]
1010

@@ -119,6 +119,8 @@
119119
},
120120
}
121121

122+
all_arch_prefix = [ template["python"][tmp_target].upper() for tmp_target in include]
123+
122124
# markup for comments to be added to autogen files
123125
MARKUP = '//>'
124126

@@ -129,8 +131,11 @@ def gen(lang):
129131
prefix = templ[target]
130132
outfile = open(templ['out_file'] %(prefix), 'wb') # open as binary prevents windows newlines
131133
outfile.write((templ['header'] % (prefix)).encode("utf-8"))
134+
add_comments = True
135+
132136
if target == 'unicorn.h':
133137
prefix = ''
138+
add_comments = False
134139
with open(os.path.join(INCL_DIR, target)) as f:
135140
lines = f.readlines()
136141

@@ -139,7 +144,7 @@ def gen(lang):
139144
for line in lines:
140145
line = line.strip()
141146

142-
if line.startswith(MARKUP): # markup for comments
147+
if add_comments and line.startswith(MARKUP): # markup for comments
143148
outfile.write(("\n%s%s%s\n" %(templ['comment_open'], \
144149
line.replace(MARKUP, ''), templ['comment_close'])).encode("utf-8"))
145150
continue
@@ -170,6 +175,15 @@ def gen(lang):
170175
else:
171176
rhs = str(count)
172177

178+
if prefix == "":
179+
incorrect_prefix = False
180+
for arch in all_arch_prefix:
181+
if f[0].startswith("UC_" + arch):
182+
incorrect_prefix = True
183+
break
184+
if incorrect_prefix:
185+
continue
186+
173187
lhs = f[0].strip()
174188
# evaluate bitshifts in constants e.g. "UC_X86 = 1 << 1"
175189
match = re.match(r'(?P<rhs>\s*\d+\s*<<\s*\d+\s*)', rhs)

bindings/dotnet/UnicornManaged/Const/Arm.fs

+226-29
Original file line numberDiff line numberDiff line change
@@ -120,35 +120,32 @@ module Arm =
120120
let UC_ARM_REG_S29 = 108
121121
let UC_ARM_REG_S30 = 109
122122
let UC_ARM_REG_S31 = 110
123-
let UC_ARM_REG_C1_C0_2 = 111
124-
let UC_ARM_REG_C13_C0_2 = 112
125-
let UC_ARM_REG_C13_C0_3 = 113
126-
let UC_ARM_REG_IPSR = 114
127-
let UC_ARM_REG_MSP = 115
128-
let UC_ARM_REG_PSP = 116
129-
let UC_ARM_REG_CONTROL = 117
130-
let UC_ARM_REG_IAPSR = 118
131-
let UC_ARM_REG_EAPSR = 119
132-
let UC_ARM_REG_XPSR = 120
133-
let UC_ARM_REG_EPSR = 121
134-
let UC_ARM_REG_IEPSR = 122
135-
let UC_ARM_REG_PRIMASK = 123
136-
let UC_ARM_REG_BASEPRI = 124
137-
let UC_ARM_REG_BASEPRI_MAX = 125
138-
let UC_ARM_REG_FAULTMASK = 126
139-
let UC_ARM_REG_APSR_NZCVQ = 127
140-
let UC_ARM_REG_APSR_G = 128
141-
let UC_ARM_REG_APSR_NZCVQG = 129
142-
let UC_ARM_REG_IAPSR_NZCVQ = 130
143-
let UC_ARM_REG_IAPSR_G = 131
144-
let UC_ARM_REG_IAPSR_NZCVQG = 132
145-
let UC_ARM_REG_EAPSR_NZCVQ = 133
146-
let UC_ARM_REG_EAPSR_G = 134
147-
let UC_ARM_REG_EAPSR_NZCVQG = 135
148-
let UC_ARM_REG_XPSR_NZCVQ = 136
149-
let UC_ARM_REG_XPSR_G = 137
150-
let UC_ARM_REG_XPSR_NZCVQG = 138
151-
let UC_ARM_REG_ENDING = 139
123+
let UC_ARM_REG_IPSR = 111
124+
let UC_ARM_REG_MSP = 112
125+
let UC_ARM_REG_PSP = 113
126+
let UC_ARM_REG_CONTROL = 114
127+
let UC_ARM_REG_IAPSR = 115
128+
let UC_ARM_REG_EAPSR = 116
129+
let UC_ARM_REG_XPSR = 117
130+
let UC_ARM_REG_EPSR = 118
131+
let UC_ARM_REG_IEPSR = 119
132+
let UC_ARM_REG_PRIMASK = 120
133+
let UC_ARM_REG_BASEPRI = 121
134+
let UC_ARM_REG_BASEPRI_MAX = 122
135+
let UC_ARM_REG_FAULTMASK = 123
136+
let UC_ARM_REG_APSR_NZCVQ = 124
137+
let UC_ARM_REG_APSR_G = 125
138+
let UC_ARM_REG_APSR_NZCVQG = 126
139+
let UC_ARM_REG_IAPSR_NZCVQ = 127
140+
let UC_ARM_REG_IAPSR_G = 128
141+
let UC_ARM_REG_IAPSR_NZCVQG = 129
142+
let UC_ARM_REG_EAPSR_NZCVQ = 130
143+
let UC_ARM_REG_EAPSR_G = 131
144+
let UC_ARM_REG_EAPSR_NZCVQG = 132
145+
let UC_ARM_REG_XPSR_NZCVQ = 133
146+
let UC_ARM_REG_XPSR_G = 134
147+
let UC_ARM_REG_XPSR_NZCVQG = 135
148+
let UC_ARM_REG_ENDING = 136
152149

153150
// alias registers
154151
let UC_ARM_REG_R13 = 12
@@ -159,3 +156,203 @@ module Arm =
159156
let UC_ARM_REG_FP = 77
160157
let UC_ARM_REG_IP = 78
161158

159+
// CP registers
160+
let UC_ARM_REG_ACTLR_EL1 = 2685339649
161+
let UC_ARM_REG_ACTLR_EL2 = 2685339681
162+
let UC_ARM_REG_ACTLR_EL3 = 2417225857
163+
let UC_ARM_REG_AFSR0_EL1 = 2685347968
164+
let UC_ARM_REG_AFSR1_EL1 = 2685347969
165+
let UC_ARM_REG_AIDR = 2685337615
166+
let UC_ARM_REG_AMAIR0 = 2685358464
167+
let UC_ARM_REG_AMAIR1 = 2685358465
168+
let UC_ARM_REG_ATS12NSOPR = 2685352964
169+
let UC_ARM_REG_ATS12NSOPW = 2685352965
170+
let UC_ARM_REG_ATS12NSOUR = 2685352966
171+
let UC_ARM_REG_ATS12NSOUW = 2685352967
172+
let UC_ARM_REG_ATS1CPR = 2685352960
173+
let UC_ARM_REG_ATS1CPW = 2685352961
174+
let UC_ARM_REG_ATS1CUR = 2685352962
175+
let UC_ARM_REG_ATS1CUW = 2685352963
176+
let UC_ARM_REG_CBAR = 2685368352
177+
let UC_ARM_REG_CCSIDR = 2685337608
178+
let UC_ARM_REG_CLIDR = 2685337609
179+
let UC_ARM_REG_CNTFRQ = 2685366272
180+
let UC_ARM_REG_CNTFRQ_EL0 = 2417221376
181+
let UC_ARM_REG_CNTKCTL = 2685366400
182+
let UC_ARM_REG_CNTPCT = 2685372160
183+
let UC_ARM_REG_CNTPCT_EL0 = 2417221377
184+
let UC_ARM_REG_CNTPS_CTL_EL1 = 2417229585
185+
let UC_ARM_REG_CNTPS_CVAL_EL1 = 2417229586
186+
let UC_ARM_REG_CNTPS_TVAL_EL1 = 2417229584
187+
let UC_ARM_REG_CNTP_CTL = 2685366529
188+
let UC_ARM_REG_CNTP_CTL_EL0 = 2417221393
189+
let UC_ARM_REG_CNTP_CVAL = 2685372176
190+
let UC_ARM_REG_CNTP_CVAL_EL0 = 2417221394
191+
let UC_ARM_REG_CNTP_TVAL = 2685366528
192+
let UC_ARM_REG_CNTP_TVAL_EL0 = 2417221392
193+
let UC_ARM_REG_CNTVCT = 2685372168
194+
let UC_ARM_REG_CNTVCT_EL0 = 2417221378
195+
let UC_ARM_REG_CNTV_CTL = 2685366657
196+
let UC_ARM_REG_CNTV_CTL_EL0 = 2417221401
197+
let UC_ARM_REG_CNTV_CVAL = 2685372184
198+
let UC_ARM_REG_CNTV_CVAL_EL0 = 2417221402
199+
let UC_ARM_REG_CNTV_TVAL = 2685366656
200+
let UC_ARM_REG_CNTV_TVAL_EL0 = 2417221400
201+
let UC_ARM_REG_CONTEXTIDR_EL1 = 2685364225
202+
let UC_ARM_REG_CPACR = 2685339650
203+
let UC_ARM_REG_CSSELR = 2685337616
204+
let UC_ARM_REG_CTR = 2685337601
205+
let UC_ARM_REG_CTR_EL0 = 2417219585
206+
let UC_ARM_REG_DBGBCR0 = 2685272069
207+
let UC_ARM_REG_DBGBCR1 = 2685272197
208+
let UC_ARM_REG_DBGBCR2 = 2685272325
209+
let UC_ARM_REG_DBGBCR3 = 2685272453
210+
let UC_ARM_REG_DBGBCR4 = 2685272581
211+
let UC_ARM_REG_DBGBCR5 = 2685272709
212+
let UC_ARM_REG_DBGBVR0 = 2685272068
213+
let UC_ARM_REG_DBGBVR1 = 2685272196
214+
let UC_ARM_REG_DBGBVR2 = 2685272324
215+
let UC_ARM_REG_DBGBVR3 = 2685272452
216+
let UC_ARM_REG_DBGBVR4 = 2685272580
217+
let UC_ARM_REG_DBGBVR5 = 2685272708
218+
let UC_ARM_REG_DBGDIDR = 2685272064
219+
let UC_ARM_REG_DBGDRAR = 2685304960
220+
let UC_ARM_REG_DBGDSAR = 2685305088
221+
let UC_ARM_REG_DBGVCR = 2685272960
222+
let UC_ARM_REG_DBGVCR32_EL2 = 2417205304
223+
let UC_ARM_REG_DBGWCR0 = 2685272071
224+
let UC_ARM_REG_DBGWCR1 = 2685272199
225+
let UC_ARM_REG_DBGWCR2 = 2685272327
226+
let UC_ARM_REG_DBGWCR3 = 2685272455
227+
let UC_ARM_REG_DBGWVR0 = 2685272070
228+
let UC_ARM_REG_DBGWVR1 = 2685272198
229+
let UC_ARM_REG_DBGWVR2 = 2685272326
230+
let UC_ARM_REG_DBGWVR3 = 2685272454
231+
let UC_ARM_REG_DFAR = 2685349888
232+
let UC_ARM_REG_DFSR = 2685347840
233+
let UC_ARM_REG_DMB = 2685353221
234+
let UC_ARM_REG_DSB = 2685353220
235+
let UC_ARM_REG_DTLBIALL = 2685354752
236+
let UC_ARM_REG_DTLBIASID = 2685354754
237+
let UC_ARM_REG_DTLBIMVA = 2685354753
238+
let UC_ARM_REG_ESR_EL1 = 2417214096
239+
let UC_ARM_REG_FAR_EL1 = 2417214208
240+
let UC_ARM_REG_FCSEIDR = 2685364224
241+
let UC_ARM_REG_ID_AFR0 = 2685337731
242+
let UC_ARM_REG_ID_DFR0 = 2685337730
243+
let UC_ARM_REG_ID_ISAR0 = 2685337856
244+
let UC_ARM_REG_ID_ISAR1 = 2685337857
245+
let UC_ARM_REG_ID_ISAR2 = 2685337858
246+
let UC_ARM_REG_ID_ISAR3 = 2685337859
247+
let UC_ARM_REG_ID_ISAR4 = 2685337860
248+
let UC_ARM_REG_ID_ISAR5 = 2685337861
249+
let UC_ARM_REG_ID_ISAR6 = 2685337863
250+
let UC_ARM_REG_ID_MMFR0 = 2685337732
251+
let UC_ARM_REG_ID_MMFR1 = 2685337733
252+
let UC_ARM_REG_ID_MMFR2 = 2685337734
253+
let UC_ARM_REG_ID_MMFR3 = 2685337735
254+
let UC_ARM_REG_ID_MMFR4 = 2685337862
255+
let UC_ARM_REG_ID_PFR0 = 2685337728
256+
let UC_ARM_REG_ID_PFR1 = 2685337729
257+
let UC_ARM_REG_IFAR = 2685349890
258+
let UC_ARM_REG_IFSR = 2685347841
259+
let UC_ARM_REG_ISB = 2685352580
260+
let UC_ARM_REG_ISR_EL1 = 2685362304
261+
let UC_ARM_REG_ITLBIALL = 2685354624
262+
let UC_ARM_REG_ITLBIASID = 2685354626
263+
let UC_ARM_REG_ITLBIMVA = 2685354625
264+
let UC_ARM_REG_JIDR = 2685272120
265+
let UC_ARM_REG_JMCR = 2685276216
266+
let UC_ARM_REG_JOSCR = 2685274168
267+
let UC_ARM_REG_L2CTLR = 2685356042
268+
let UC_ARM_REG_L2ECTLR = 2685356043
269+
let UC_ARM_REG_MAIR0 = 2685358336
270+
let UC_ARM_REG_MAIR1 = 2685358337
271+
let UC_ARM_REG_MAIR_EL1 = 2417214736
272+
let UC_ARM_REG_MAIR_EL3 = 2417227024
273+
let UC_ARM_REG_MDCCINT_EL1 = 2685272320
274+
let UC_ARM_REG_MDCCSR_EL0 = 2685272192
275+
let UC_ARM_REG_MDRAR_EL1 = 2417197184
276+
let UC_ARM_REG_MDSCR_EL1 = 2685272322
277+
let UC_ARM_REG_MPIDR_EL1 = 2685337605
278+
let UC_ARM_REG_MVA_prefetch = 2685353601
279+
let UC_ARM_REG_NOP = 2685351940
280+
let UC_ARM_REG_OSDLR_EL1 = 2685274500
281+
let UC_ARM_REG_OSLAR_EL1 = 2685274116
282+
let UC_ARM_REG_OSLSR_EL1 = 2685274244
283+
let UC_ARM_REG_PAR = 2685352448
284+
let UC_ARM_REG_PMCCFILTR = 2685368199
285+
let UC_ARM_REG_PMCCFILTR_EL0 = 2417221503
286+
let UC_ARM_REG_PMCCNTR = 2685357696
287+
let UC_ARM_REG_PMCCNTR_EL0 = 2417220840
288+
let UC_ARM_REG_PMCNTENCLR = 2685357570
289+
let UC_ARM_REG_PMCNTENCLR_EL0 = 2417220834
290+
let UC_ARM_REG_PMCNTENSET = 2685357569
291+
let UC_ARM_REG_PMCNTENSET_EL0 = 2417220833
292+
let UC_ARM_REG_PMCR = 2685357568
293+
let UC_ARM_REG_PMCR_EL0 = 2417220832
294+
let UC_ARM_REG_PMEVCNTR0 = 2685367296
295+
let UC_ARM_REG_PMEVCNTR0_EL0 = 2417221440
296+
let UC_ARM_REG_PMEVCNTR1 = 2685367297
297+
let UC_ARM_REG_PMEVCNTR1_EL0 = 2417221441
298+
let UC_ARM_REG_PMEVCNTR2 = 2685367298
299+
let UC_ARM_REG_PMEVCNTR2_EL0 = 2417221442
300+
let UC_ARM_REG_PMEVCNTR3 = 2685367299
301+
let UC_ARM_REG_PMEVCNTR3_EL0 = 2417221443
302+
let UC_ARM_REG_PMEVTYPER0 = 2685367808
303+
let UC_ARM_REG_PMEVTYPER0_EL0 = 2417221472
304+
let UC_ARM_REG_PMEVTYPER1 = 2685367809
305+
let UC_ARM_REG_PMEVTYPER1_EL0 = 2417221473
306+
let UC_ARM_REG_PMEVTYPER2 = 2685367810
307+
let UC_ARM_REG_PMEVTYPER2_EL0 = 2417221474
308+
let UC_ARM_REG_PMEVTYPER3 = 2685367811
309+
let UC_ARM_REG_PMEVTYPER3_EL0 = 2417221475
310+
let UC_ARM_REG_PMINTENCLR = 2685357826
311+
let UC_ARM_REG_PMINTENCLR_EL1 = 2417214706
312+
let UC_ARM_REG_PMINTENSET = 2685357825
313+
let UC_ARM_REG_PMINTENSET_EL1 = 2417214705
314+
let UC_ARM_REG_PMOVSCLR_EL0 = 2417220835
315+
let UC_ARM_REG_PMOVSR = 2685357571
316+
let UC_ARM_REG_PMOVSSET = 2685357827
317+
let UC_ARM_REG_PMOVSSET_EL0 = 2417220851
318+
let UC_ARM_REG_PMSELR = 2685357573
319+
let UC_ARM_REG_PMSELR_EL0 = 2417220837
320+
let UC_ARM_REG_PMSWINC = 2685357572
321+
let UC_ARM_REG_PMSWINC_EL0 = 2417220836
322+
let UC_ARM_REG_PMUSERENR = 2685357824
323+
let UC_ARM_REG_PMUSERENR_EL0 = 2417220848
324+
let UC_ARM_REG_PMXEVCNTR = 2685357698
325+
let UC_ARM_REG_PMXEVCNTR_EL0 = 2417220842
326+
let UC_ARM_REG_PMXEVTYPER = 2685357697
327+
let UC_ARM_REG_PMXEVTYPER_EL0 = 2417220841
328+
let UC_ARM_REG_SCTLR = 2685339648
329+
let UC_ARM_REG_TCMTR = 2685337602
330+
let UC_ARM_REG_TCR_EL1 = 2417213698
331+
let UC_ARM_REG_TEECR = 2685272112
332+
let UC_ARM_REG_TEEHBR = 2685274160
333+
let UC_ARM_REG_TLBIALL = 2685354880
334+
let UC_ARM_REG_TLBIALLIS = 2685354368
335+
let UC_ARM_REG_TLBIASID = 2685354882
336+
let UC_ARM_REG_TLBIASIDIS = 2685354370
337+
let UC_ARM_REG_TLBIMVA = 2685354881
338+
let UC_ARM_REG_TLBIMVAA = 2685354883
339+
let UC_ARM_REG_TLBIMVAAIS = 2685354371
340+
let UC_ARM_REG_TLBIMVAIS = 2685354369
341+
let UC_ARM_REG_TLBTR = 2685337603
342+
let UC_ARM_REG_TPIDRPRW = 2685364228
343+
let UC_ARM_REG_TPIDRRO_EL0 = 2417221251
344+
let UC_ARM_REG_TPIDRURO = 2685364227
345+
let UC_ARM_REG_TPIDRURW = 2685364226
346+
let UC_ARM_REG_TPIDR_EL0 = 2417221250
347+
let UC_ARM_REG_TPIDR_EL1 = 2417215108
348+
let UC_ARM_REG_TTBCR = 2685341698
349+
let UC_ARM_REG_TTBR0 = 2685370624
350+
let UC_ARM_REG_TTBR0_EL1 = 2685341696
351+
let UC_ARM_REG_TTBR1 = 2685370632
352+
let UC_ARM_REG_TTBR1_EL1 = 2685341697
353+
let UC_ARM_REG_VBAR = 2685362176
354+
let UC_ARM_REG_WFAR = 2685349889
355+
let UC_ARM_REG_C1_C0_2 = 2685339650
356+
let UC_ARM_REG_C13_C0_2 = 2685364226
357+
let UC_ARM_REG_C13_C0_3 = 2685364227
358+

0 commit comments

Comments
 (0)