blob: 1220fdd9379099157a35c11f314b74acd299d2c1 [file] [log] [blame]
Denys Vlasenko5e977542009-02-23 07:56:01 +00001Each strace port relies heavily on port-specific headers:
2 - errnoent.h - map error number to error name like strerror()
3 - ioctlent.h - map ioctl number to symbolic define
4 - signalent.h - map signal number to signal name like strsignal()
5 - syscallent.h - map syscall number to name and function signature
6
7Since generating these headers from scratch (or even just updating them) can be
8a big pain, there are a few scripts to help automate the process. Since each
9port organizes their kernel sources differently, there may be a specific script
10for your kernel.
11
12We will use the Linux kernel (2.6.20+) as an example below (the Blackfin
13architecture to be specific). Hopefully, it'll be obvious how to swap out a
14different system or architecture as your circumstances apply.
15
16ksrc=/usr/src/linux
Dmitry V. Levindf7aa2b2015-01-19 17:02:16 +000017asrc=$ksrc/arch/blackfin/include
Denys Vlasenko5e977542009-02-23 07:56:01 +000018
19To use the errnoent.sh script, give it all the headers that might contain
20appropriate errno values. Excessive headers are not a problem. The resulting
21output should be directly usable without modification.
22 sh ./errnoent.sh \
23 $ksrc/include/linux/*errno*.h \
24 $ksrc/include/asm-generic/*errno*.h \
Dmitry V. Levindf7aa2b2015-01-19 17:02:16 +000025 $asrc/asm/*errno*.h \
Denys Vlasenko5e977542009-02-23 07:56:01 +000026 > errnoent.h
27
Dmitry V. Levindf7aa2b2015-01-19 17:02:16 +000028To use the ioctls_gen.sh script, give it all the base include directories. The
Denys Vlasenko5e977542009-02-23 07:56:01 +000029script will crawl all the headers and try to discover appropriate ioctls.
30Unlike the other scripts, this one creates files for further processing. This
Dmitry V. Levindf7aa2b2015-01-19 17:02:16 +000031is because ioctls tend to have a lot of define indirection, and the ioctlent0.h
Denys Vlasenko5e977542009-02-23 07:56:01 +000032header needs to be fully expanded into numeric form and sorted properly. So
Dmitry V. Levindf7aa2b2015-01-19 17:02:16 +000033first we process all of the ioctls with the ioctls_gen.sh into ioctls_inc.h and
34ioctls_arch.h, and then we compile them into ioctlsort.c. The resulting
35output, while directly usable, only contains definitions that match exactly the
36current kernel version that the script ran against. That means older/newer
37ioctl defines that might be present in the existing ioctlent0.h header will be
38lost if things are copied directly. A little creative use of `diff` and manual
39merging should be used to produce the final ioctlent0.h header.
40 sh ./maint/ioctls_gen.sh $ksrc/include $asrc
41 gcc -Wall -I. ioctlsort.c -o ioctlsort
42 ./ioctlsort > ioctlent0.h
Denys Vlasenko5e977542009-02-23 07:56:01 +000043
44To use the signalent.sh script, give it all the headers that might contain
45appropriate signal values. Excessive headers are not a problem. The resulting
46output should be directly usable without modification.
47 sh ./signalent.sh \
Dmitry V. Levindf7aa2b2015-01-19 17:02:16 +000048 $asrc/asm/signal.h \
Denys Vlasenko5e977542009-02-23 07:56:01 +000049 > signalent.h
50
51To use the syscallent.sh script, give it the header with the list of your
52system call numbers. The resulting output is useful as a template for creating
53a proper header as it can really only detect the system call number and its
54name. It has no way of knowing the number of arguments or strace flags for
55decoding them (yet?).
56 sh ./syscallent.sh \
Dmitry V. Levindf7aa2b2015-01-19 17:02:16 +000057 $asrc/asm/unistd.h \
Denys Vlasenko5e977542009-02-23 07:56:01 +000058 > syscallent.h