TIL - Today I learned
=====================

Little factoids I've learned today.

Entries are ordered from most to least recent, in an "endless file".
Each entry is introduced by the output of: date +'= %F, %A ='

= 2022-11-14, Monday =

You can request the collected latency statistics from a running ping(1)
process by sending it a SIGQUIT signal. (linux)

= 2022-11-13, Sunday =

Useful strace(1) options (linux)

The -e flag can be used for a variety of things:

 - To filter the systemcall.  It supports classe of syscalls, e.g.
   `strace -e %file x` is equivalent to
   `strace -e trace=open,stat,chmod,unlink,... x`.
   Hidden jems in the available classes.

 - To dump the data of the read/write operations.

 - To decode information about the file descriptors (e.g path of the files)
   (see also -y / -yy / -Y)

 - To inject syscall behaviours.

The -c flag shows a table of statistics on invoked syscalls.

The -z/-Z flags filter successful and faulty syscalls respectively.

The -r/-T flags measure times between and within syscalls respectively.
Possibly useful for a rough performance assessment.

= 2022-11-08, Tuesday =

A few interesting flags for gcc, mentioned by a work
colleague during a discussion:

-fwhole-program:
   Assume that the current compilation unit represents the
   whole program being compiled. [...]

In short, it will turn every function to static (except for
main), so they can be optimized aggressively.

= 2022-11-08, Tuesday =

Hidden perls in the linker.

--wrap=symbol can be used to easily set mock any function
external to the module.  This is very useful for unit tests,
for example.

= 2022-10-23, Sunday =

The ptrace(2) call (linux), of which I heard of, but never studied before,
allows to trace a child process in the same way as a debugger would.

It can be used to do interesting things, such as dumping the
.text of a binary one instruction at the time.

= 2022-01-26, Wednesday =

htobe32(3) - and friends.  I only knew htonl(3) - and friends.

I could not find a trivial extractor for Flattened Image Tree.  I
manually extracted the Flattened Device Tree into a C array, by
means of some shell-fu.  It turns out that the magic number of the
FDT is 0xd00dfeed (big endian).

See also (linux): byteorder(3) endian(3)
See also (freebsd): byteorder(3) byteorder(9)

= 2022-01-26, Wednesday =

Flattened Image Tree (FIT) is a file format based on device tree.
It allows to pack together multi-component images (such as kernel,
bootloaders and device trees) into a single file.

= 2022-01-26, Wednesday =

In Linux, it is possible to interpret a device tree by using the
reference material under Documentation/devicetree/bindings.