For what it's worth, I have a set of code to do this, written in order
to canonicalize and modify e820 data structures for memdisk.
The key to it is the observation that the e820-delivered (address, len,
type) tuples isn't actually the data structure you want -- what you want
is an ordered list of (address, type) tuples, where type may includes
undefined (the e820 default type - i.e. unused, available address space).
In addition to the attached code, to do this right, we probably want a
function to do filtering (only clobber entries of a specfic type, in
this case type 1) as opposed to blind clobber; with an ordered array
this is quite trivial.
-hpa