It seems possible that two runs of eg. gcc at different levels of
optimisation on the same files assigns different IDs to the same files.
To circumvent this, we use the file paths instead of file IDs.
It is possible, eg. for the end-of-data debug_line tag, that the address
does not correspond to an instruction address but eg. the last address
of .text. To avoid an error here, we use as a bound address the greater
known address below the given bound instead.
Some entries in .dwarf_line might span 0 instructions, because a
following entry refers to exactly the same address. An enhancement might
be to make all these addresses equivalent in the matcher.