mirror of
https://github.com/byteworksinc/Linker.git
synced 2024-11-27 23:49:16 +00:00
Do not give spurious errors about segment alignment.
This would happen if a later object segment had a more restrictive alignment than previous object segments that contribute to the same load segment, as in the following example: s1 start jsl s2 rtl end align 256 s2 start rtl end These alignment requirements can be satisfied by just giving the load segment the most restrictive alignment of any object segment (since all alignments are powers of 2) and inserting space as necessary to align the code from each object segment.
This commit is contained in:
parent
d62fdba4bb
commit
aa9a585d19
@ -11,7 +11,14 @@ Updated 2021
|
|||||||
can branch forward or backward by up to 64 KB (to any location
|
can branch forward or backward by up to 64 KB (to any location
|
||||||
in the program bank), and the linker now allows this.
|
in the program bank), and the linker now allows this.
|
||||||
|
|
||||||
(Stephen Heumann)
|
2. The linker can now link together multiple object segments with
|
||||||
|
different alignment requirements into a single load segment,
|
||||||
|
regardless of the order of the object segments. The alignment
|
||||||
|
of the load segment will be the most restrictive alignment
|
||||||
|
of any of the object segments, and the alignment requirements
|
||||||
|
of each object segment will be obeyed. (Previously, an error
|
||||||
|
would be produced if an object segment processed later had a
|
||||||
|
more restrictive alignment requirement than an earlier one.)
|
||||||
|
|
||||||
2.0.5 1. On case-sensitive filesystems (which are not normally used
|
2.0.5 1. On case-sensitive filesystems (which are not normally used
|
||||||
natively on the Apple IIGS, but may be used through emulation
|
natively on the Apple IIGS, but may be used through emulation
|
||||||
|
15
out.asm
15
out.asm
@ -385,10 +385,13 @@ or4 anop
|
|||||||
ora loadAlign+2
|
ora loadAlign+2
|
||||||
bne la1
|
bne la1
|
||||||
move4 segAlign,loadAlign loadAlign = segAlign
|
move4 segAlign,loadAlign loadAlign = segAlign
|
||||||
bra la2 else
|
bra la3 else
|
||||||
la1 move4 segAlign,r0 PrepareAlign(segAlign)
|
la1 cmpl loadAlign,segAlign if loadAlign < segAlign then
|
||||||
|
bge la2
|
||||||
|
move4 segAlign,loadAlign loadAlign = segAlign
|
||||||
|
la2 move4 segAlign,r0 PrepareAlign(segAlign)
|
||||||
jsr PrepareAlign
|
jsr PrepareAlign
|
||||||
la2 anop endif
|
la3 anop endif
|
||||||
bra sa4
|
bra sa4
|
||||||
;
|
;
|
||||||
; Set the load segment alignment (pass 2)
|
; Set the load segment alignment (pass 2)
|
||||||
@ -408,13 +411,9 @@ sa0 lda segAlign skip if alignment is 0
|
|||||||
bra sa3 else
|
bra sa3 else
|
||||||
sa1 cmpl loadAlign,segAlign if loadAlign < segAlign then
|
sa1 cmpl loadAlign,segAlign if loadAlign < segAlign then
|
||||||
bge sa2
|
bge sa2
|
||||||
ph4 #0 Error(NULL,22)
|
move4 segAlign,loadAlign loadAlign = segAlign
|
||||||
ph2 #22
|
|
||||||
jsr Error
|
|
||||||
bra sa3 else
|
|
||||||
sa2 move4 segAlign,r0 DefineAlign(segAlign)
|
sa2 move4 segAlign,r0 DefineAlign(segAlign)
|
||||||
jsr DefineAlign
|
jsr DefineAlign
|
||||||
! anop endif
|
|
||||||
sa3 anop endif
|
sa3 anop endif
|
||||||
jsr CheckAlignOrg check for conflicts between align,org
|
jsr CheckAlignOrg check for conflicts between align,org
|
||||||
sa4 anop
|
sa4 anop
|
||||||
|
Loading…
Reference in New Issue
Block a user