Skip to content

Commit da056fc

Browse files
committed
Fix pre-generated capstone bindings update
Also reformatted code with rustfmt.
1 parent 2023136 commit da056fc

File tree

4 files changed

+109
-76
lines changed

4 files changed

+109
-76
lines changed

build.rs

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -76,16 +76,20 @@ fn find_capstone_header(header_search_paths: &Vec<PathBuf>, name: &str) -> Optio
7676

7777
/// Create bindings using bindgen
7878
fn write_bindgen_bindings(header_search_paths: &Vec<PathBuf>, update_pregenerated_bindings: bool) {
79-
debug_println!("Writing bindgen bindings with search paths {:?}",
80-
header_search_paths);
79+
debug_println!(
80+
"Writing bindgen bindings with search paths {:?}",
81+
header_search_paths
82+
);
8183

8284

8385
let mut builder = bindgen::Builder::default()
8486
.unstable_rust(false)
85-
.header(find_capstone_header(header_search_paths, "capstone.h")
86-
.expect("Could not find header")
87-
.to_str()
88-
.unwrap())
87+
.header(
88+
find_capstone_header(header_search_paths, "capstone.h")
89+
.expect("Could not find header")
90+
.to_str()
91+
.unwrap(),
92+
)
8993
.disable_name_namespacing()
9094
.prepend_enum_name(false)
9195
.generate_comments(true)
@@ -108,17 +112,23 @@ fn write_bindgen_bindings(header_search_paths: &Vec<PathBuf>, update_pregenerate
108112

109113
// Write bindings to $OUT_DIR/bindings.rs
110114
let out_path = PathBuf::from(env::var("OUT_DIR").unwrap()).join(BINDINGS_FILE);
111-
bindings
112-
.write_to_file(out_path.clone())
113-
.expect("Unable to write bindings");
114-
115-
if update_pregenerated_bindings {
116-
let stored_bindgen_header: PathBuf = [
117-
env::var("CARGO_MANIFEST_DIR").expect("Could not find cargo environment variable"),
118-
"pre_generated".into(),
119-
BINDINGS_FILE.into()
120-
].iter().collect();
121-
debug_println!("Updating capstone bindings at \"{}\"", stored_bindgen_header.to_str().unwrap());
115+
bindings.write_to_file(out_path.clone()).expect(
116+
"Unable to write bindings",
117+
);
118+
119+
if update_pregenerated_bindings {
120+
debug_println!("Updating pre-generated capstone bindings");
121+
let stored_bindgen_header: PathBuf =
122+
[
123+
env::var("CARGO_MANIFEST_DIR").expect("Could not find cargo environment variable"),
124+
"pre_generated".into(),
125+
BINDINGS_FILE.into(),
126+
].iter()
127+
.collect();
128+
debug_println!(
129+
"Updating capstone bindings at \"{}\"",
130+
stored_bindgen_header.to_str().unwrap()
131+
);
122132
copy(out_path, stored_bindgen_header).expect("Unable to update capstone bindings");
123133
}
124134
}
@@ -132,8 +142,10 @@ fn main() {
132142
if cfg!(feature = "use_system_capstone") {
133143
debug_println!("Using system capstone library");
134144

135-
assert!(!cfg!(feature = "build_capstone_cmake"),
136-
"build_capstone_cmake feature is only valid when using bundled cmake");
145+
assert!(
146+
!cfg!(feature = "build_capstone_cmake"),
147+
"build_capstone_cmake feature is only valid when using bundled cmake"
148+
);
137149

138150
let capstone_lib =
139151
pkg_config::find_library("capstone").expect("Could not find system capstone");
@@ -178,11 +190,15 @@ fn main() {
178190
// If UPDATE_CAPSTONE_BINDINGS is set, then updated the pre-generated capstone bindings
179191
let update_pregenerated_bindings = env::var("UPDATE_CAPSTONE_BINDINGS").is_ok();
180192
if update_pregenerated_bindings {
181-
assert!(cfg!(feature = "use_bundled_capstone_bindings"),
182-
concat!("Setting UPDATE_CAPSTONE_BINDINGS only makes ",
183-
"sense when NOT enabling feature use_bundled_capstone_bindings"));
184-
} else {
185-
debug_println!("Creating capstone bindings with bindgen");
186-
write_bindgen_bindings(&header_search_paths, update_pregenerated_bindings);
193+
assert!(
194+
!cfg!(feature = "use_bundled_capstone_bindings"),
195+
concat!(
196+
"Setting UPDATE_CAPSTONE_BINDINGS only makes ",
197+
"sense when NOT enabling feature use_bundled_capstone_bindings"
198+
)
199+
);
187200
}
201+
202+
debug_println!("Creating capstone bindings with bindgen");
203+
write_bindgen_bindings(&header_search_paths, update_pregenerated_bindings);
188204
}

common.rs

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
//
33
// Needs to be included with include! macro
44

5-
#[derive(Clone,Copy,PartialEq,Eq,Debug,Hash)]
5+
#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)]
66
/// Information specific to architecture
77
struct CapstoneArchInfo<'a> {
88
/// name of C header
@@ -12,37 +12,39 @@ struct CapstoneArchInfo<'a> {
1212
cs_name: &'a str,
1313
}
1414

15-
static ARCH_INCLUDES: &'static [CapstoneArchInfo<'static>] = &[CapstoneArchInfo {
16-
header_name: "arm.h",
17-
cs_name: "arm",
18-
},
19-
CapstoneArchInfo {
20-
header_name: "arm64.h",
21-
cs_name: "arm64",
22-
},
23-
CapstoneArchInfo {
24-
header_name: "mips.h",
25-
cs_name: "mips",
26-
},
27-
CapstoneArchInfo {
28-
header_name: "ppc.h",
29-
cs_name: "ppc",
30-
},
31-
CapstoneArchInfo {
32-
header_name: "sparc.h",
33-
cs_name: "sparc",
34-
},
35-
CapstoneArchInfo {
36-
header_name: "systemz.h",
37-
cs_name: "sysz",
38-
},
39-
CapstoneArchInfo {
40-
header_name: "x86.h",
41-
cs_name: "x86",
42-
},
43-
CapstoneArchInfo {
44-
header_name: "xcore.h",
45-
cs_name: "xcore",
46-
}];
15+
static ARCH_INCLUDES: &'static [CapstoneArchInfo<'static>] = &[
16+
CapstoneArchInfo {
17+
header_name: "arm.h",
18+
cs_name: "arm",
19+
},
20+
CapstoneArchInfo {
21+
header_name: "arm64.h",
22+
cs_name: "arm64",
23+
},
24+
CapstoneArchInfo {
25+
header_name: "mips.h",
26+
cs_name: "mips",
27+
},
28+
CapstoneArchInfo {
29+
header_name: "ppc.h",
30+
cs_name: "ppc",
31+
},
32+
CapstoneArchInfo {
33+
header_name: "sparc.h",
34+
cs_name: "sparc",
35+
},
36+
CapstoneArchInfo {
37+
header_name: "systemz.h",
38+
cs_name: "sysz",
39+
},
40+
CapstoneArchInfo {
41+
header_name: "x86.h",
42+
cs_name: "x86",
43+
},
44+
CapstoneArchInfo {
45+
header_name: "xcore.h",
46+
cs_name: "xcore",
47+
},
48+
];
4749

4850
static BINDINGS_FILE: &'static str = "capstone.rs";

pre_generated/capstone.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1249,7 +1249,7 @@ pub enum arm64_cc {
12491249
}
12501250
#[repr(u32)]
12511251
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
1252-
pub enum arm64_mrs_reg {
1252+
pub enum arm64_sysreg {
12531253
ARM64_SYSREG_INVALID = 0,
12541254
ARM64_SYSREG_MDCCSR_EL0 = 38920,
12551255
ARM64_SYSREG_DBGDTRRX_EL0 = 38952,
@@ -1344,7 +1344,6 @@ pub enum arm64_mrs_reg {
13441344
ARM64_SYSREG_ICH_EISR_EL2 = 58971,
13451345
ARM64_SYSREG_ICH_ELSR_EL2 = 58973,
13461346
}
1347-
pub use self::arm64_mrs_reg as arm64_sysreg;
13481347
#[repr(u32)]
13491348
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
13501349
pub enum arm64_msr_reg {

src/lib.rs

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,10 @@ use std::os::raw::c_int;
4343

4444
// Include pre-generated bindgen bindings
4545
#[cfg(feature = "use_bundled_capstone_bindings")]
46-
include!(concat!(env!("CARGO_MANIFEST_DIR"), "/pre_generated/capstone.rs"));
46+
include!(concat!(
47+
env!("CARGO_MANIFEST_DIR"),
48+
"/pre_generated/capstone.rs"
49+
));
4750

4851
// Include dynamically generated bindings
4952
#[cfg(not(feature = "use_bundled_capstone_bindings"))]
@@ -228,7 +231,11 @@ mod test {
228231
// Union structs
229232
let op = cs_ppc_op {
230233
type_: ppc_op_type::PPC_OP_REG,
231-
__bindgen_anon_1: new_bindgen_union!(cs_ppc_op__bindgen_ty_1, reg, ppc_reg::PPC_REG_CARRY),
234+
__bindgen_anon_1: new_bindgen_union!(
235+
cs_ppc_op__bindgen_ty_1,
236+
reg,
237+
ppc_reg::PPC_REG_CARRY
238+
),
232239
};
233240
cs_ppc {
234241
bc: ppc_bc::PPC_BC_LT,
@@ -450,9 +457,11 @@ mod test {
450457
println!("Capstone version (major, minor) = {:?}", (major, minor));
451458

452459
assert!(major == 3, "Invalid major version {:?}", major);
453-
assert!(minor >= 0 && minor < 1000,
454-
"Invalid minor version {:?}",
455-
minor);
460+
assert!(
461+
minor >= 0 && minor < 1000,
462+
"Invalid minor version {:?}",
463+
minor
464+
);
456465
}
457466

458467
#[test]
@@ -485,12 +494,14 @@ mod test {
485494
let mut insn_ptr: *mut cs_insn = 0 as *mut cs_insn;
486495
let mut address = 0x1000;
487496
let count = unsafe {
488-
cs_disasm(handle,
489-
code_bytes.as_ptr(),
490-
code_bytes.len(),
491-
address,
492-
0,
493-
&mut insn_ptr as *mut *mut cs_insn)
497+
cs_disasm(
498+
handle,
499+
code_bytes.as_ptr(),
500+
code_bytes.len(),
501+
address,
502+
0,
503+
&mut insn_ptr as *mut *mut cs_insn,
504+
)
494505
};
495506

496507
assert!(count == code.len());
@@ -515,11 +526,16 @@ mod test {
515526

516527
#[test]
517528
fn test_x86_disassembly() {
518-
let code: &[(&[u8], &str, _)] =
519-
&[(&[0x48, 0x83, 0xec, 0x08], "sub", x86_insn::X86_INS_SUB as u32),
520-
(&[0x31, 0xdb], "xor", x86_insn::X86_INS_XOR as u32),
521-
(&[0xc3], "ret", x86_insn::X86_INS_RET as u32),
522-
(&[0x90], "nop", x86_insn::X86_INS_NOP as u32)];
529+
let code: &[(&[u8], &str, _)] = &[
530+
(
531+
&[0x48, 0x83, 0xec, 0x08],
532+
"sub",
533+
x86_insn::X86_INS_SUB as u32,
534+
),
535+
(&[0x31, 0xdb], "xor", x86_insn::X86_INS_XOR as u32),
536+
(&[0xc3], "ret", x86_insn::X86_INS_RET as u32),
537+
(&[0x90], "nop", x86_insn::X86_INS_NOP as u32),
538+
];
523539
test_disassembly_helper(cs_arch::CS_ARCH_X86, cs_mode::CS_MODE_LITTLE_ENDIAN, code);
524540
}
525541
}

0 commit comments

Comments
 (0)