Thanks for the tip
I bought the book and have been working through it. The overlay stuff is on page 156 onwards.
However it is pretty opaque - as indeed I suspected it would be. The syntax is weird and I am not going to spend time trying to unravel it since I have now bypassed the problem. But as I suspected the solution lies in the use of the keyword OVERLAY, and you need to thus declare
all overlapping regions; there isn't a single keyword which tells the linker to just ignore the overlap of one particular section with some other one(s).
I think this topic is not well known because few people are using overlays today. It was a big thing in the old days, with e.g. the Z180 offering 64k addressing with a simple MMU giving you 1MB physical addressing, and compilers (we used IAR back then) having a "large model" mode where you had typically 60k of code+data and the last 4k was mapped to some address in a 1MB ROM, via an 8 bit overlay value. You had to make sure each C function fitted into this 4k (usually doable) but a 4k overlay could contain any number of small functions. Each function call consisted of loading the 8 bit overlay value into the register and then calling the function by its 16 bit address, so there was a bit of overhead but otherwise it was pretty transparent and a great productivity tool. Maybe some ARM users are doing overlays but it's not obvious when, other than if e.g. wanting to address a few GB.