The object shadow list is maintained so that we can collapse anonymous objects. This is not possible when your backing object is a vnode, for example. In this case there is no sense in maintaining the shadow_list. I created a handful of convenience functions to simplify the code that manages these lists as well.
If you think about a compiler that is mapped private for the data section you can see that we will construct huge chains of shadow lists that every compiler instance contends on. We need only the backing_object pointer to be correct here so that we can traverse the chain for page faults.