You can create gaps in memory by performing alignment calculations such as
. = (. + 0x20) & ~0x20;
This kind of calculation can occur between output_specs , between input_specs, or even in address_modifiers . A "." refers to the current address. You may assign the . to a specific unallocated address or just do alignment as the example shows. The gap is filled with zeroes, in the case of an alignment (but not with ALIGN() ).
You can specify an alternate fill pattern with = <short_value> , as in
.text : { . = (. + 0x20) & ~0x20; *(.text) } = 0xAB > text
short_value is 2 bytes long. Note that the fill pattern comes before the memory_spec . You can add a fill to a GROUP or to an individual output_spec section. Fills cannot be added between .bss type sections. All calculations must end in a " ; ".