File: README.md

package info (click to toggle)
capstone 5.0.7-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 58,212 kB
  • sloc: ansic: 96,103; cpp: 67,489; cs: 29,510; python: 25,829; pascal: 24,412; java: 15,582; ml: 14,473; makefile: 1,274; sh: 479; ruby: 386
file content (58 lines) | stat: -rw-r--r-- 2,109 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# How to update SystemZ tables.

* Checkout LLVM. Patches are tested on commit `c13d5969^`, because
  `c13d5969` changed the decode table format.
* Apply patches from the current directory.
* Run tablegen.
  ```
      cd $LLVM
      mkdir build
      cd build
      cmake -DCMAKE_CXX_FLAGS=-DCAPSTONE ..
      make SystemZCommonTableGen -j$(getconf _NPROCESSORS_ONLN)
   ```
* Copy `.inc` files.
  ```
      cp arch/SystemZ/SystemZGenInsnNameMaps.inc \
         arch/SystemZ/SystemZGenInsnNameMaps.inc.old
      for inc in $(cd arch/SystemZ && ls *.inc); do
        cp $LLVM/build/lib/Target/SystemZ/$inc arch/SystemZ/
      done
  ```
* Fixup `SystemZGenInsnNameMaps.inc`.
  ```
      comm -1 -3 \
          <(grep SYSZ_INS_ <arch/SystemZ/SystemZGenInsnNameMaps.inc.old \
            | sort -u) \
          <(grep SYSZ_INS_ <arch/SystemZ/SystemZGenInsnNameMaps.inc \
            | sort -u) \
          >arch/SystemZ/SystemZGenInsnNameMaps.inc.new
      cat arch/SystemZ/SystemZGenInsnNameMaps.inc.old \
          arch/SystemZ/SystemZGenInsnNameMaps.inc.new \
          >arch/SystemZ/SystemZGenInsnNameMaps.inc
  ```
* Add new groups, insns, registers and formats.
  * `include/capstone/systemz.h`
    * `enum sysz_insn`:
      ```
          comm -1 -3 \
              <(perl -ne 'if (/(SYSZ_INS_.+),/) { print "\t$1,\n" }' \
                <include/capstone/systemz.h | sort -u) \
              <(perl -ne 'if (/(SYSZ_INS_.+),/) { print "\t$1,\n" }' \
                <arch/SystemZ/SystemZMappingInsn.inc | sort -u)
      ```
    * `enum sysz_insn_group`:
      ```
          perl -ne 'if (/(SYSZ_GRP_.*?),/) { print "\t$1,\n"; }' < \
              arch/SystemZ/SystemZMappingInsn.inc | sort -u
      ```
  * `arch/SystemZ/SystemZDisassembler.c`
  * `arch/SystemZ/SystemZInstPrinter.c`
  * `arch/SystemZ/SystemZMCTargetDesc.c`
  * `arch/SystemZ/SystemZMCTargetDesc.h`
  * `arch/SystemZ/SystemZMapping.c`
    * `enum group_name_maps`:
      ```
          perl -ne 'if (/(SYSZ_GRP_(.*?)),/) { print "\t{ $1, \"" . lc($2) . "\" },\n"; }' \
              arch/SystemZ/SystemZMappingInsn.inc | sort -u
      ```