R_SPARC_LM22 is similar in spirit (and encoding and behaviour) to R_SPARC_HI22 but truncates the result instead of raising an error on overflow.
Please don't change the style of the code, it messes up review and the full source. Please split the introduction and testing of the new relocation into one patch and using a different set of relocations to implement large code model. The latter part needs at least a test as well?
Functionally, it seems fine, but I'd prefer to look at the split patches first.
I have one concern about sparc-relocations.s, but that is not specific to the change at hand. IMO we should also have a variant of all the relocations with a fixed values of sym to test that the right bits are actually set. That would also make comparing the fixup handling easier e.g. to GNU as.