long datasize ;
long bsssize;
+long align(a,b)
+ long a,b;
+{
+ a += b - 1;
+ return a - a % b;
+}
+
+int
+follows(pa, pb)
+ register struct outsect *pa, *pb;
+{
+ /* return 1 if pa follows pb */
+
+ return pa->os_base == align(pb->os_base+pb->os_size, pa->os_lign);
+}
+
main(argc, argv)
int argc;
char *argv[];
/* A few checks */
if ( outsect[BSSSG].os_flen != 0 )
fatal("bss space contains initialized data\n") ;
- if ( !unresolved && outsect[BSSSG].os_base != outsect[DATASG].os_base+
- outsect[DATASG].os_size )
+ if ( !unresolved && ! follows(&outsect[BSSSG], &outsect[DATASG]))
fatal("bss segment must follow data segment\n") ;
if ( outsect[ROMSG].os_lign == 0x20000 ) {
/* 410/413 file with ROMSG in data space */
magic= NMAGIC ;
textsize= outsect[TEXTSG].os_size ;
datasize= outsect[ROMSG].os_size + outsect[DATASG].os_size ;
- if ( outsect[DATASG].os_base != outsect[ROMSG].os_base+
- outsect[ROMSG].os_size )
+ if (! follows(&outsect[DATASG], &outsect[ROMSG]))
fatal("data segment must follow rom\n") ;
} else
if ( outsect[DATASG].os_lign == 0x20000 ) {
magic= NMAGIC ;
textsize= outsect[TEXTSG].os_size + outsect[ROMSG].os_size ;
datasize= outsect[DATASG].os_size ;
- if ( outsect[ROMSG].os_base != outsect[TEXTSG].os_base+
- outsect[TEXTSG].os_size )
+ if (! follows(&outsect[ROMSG],&outsect[TEXTSG].os_base))
fatal("rom segment must follow text\n") ;
} else {
/* Plain 407 file */
textsize= outsect[TEXTSG].os_size + outsect[ROMSG].os_size ;
datasize= outsect[DATASG].os_size ;
if (!unresolved) {
- if (outsect[ROMSG].os_base != outsect[TEXTSG].os_base+
- outsect[TEXTSG].os_size )
+ if (! follows(&outsect[ROMSG],&outsect[TEXTSG]))
fatal("rom segment must follow text\n") ;
- if ( outsect[DATASG].os_base != outsect[ROMSG].os_base+
- outsect[ROMSG].os_size )
+ if (! follows(&outsect[DATASG],&outsect[ROMSG]))
fatal("data segment must follow rom\n") ;
}
}
}
bsssize = outsect[BSSSG].os_size;
if ( outhead.oh_nsect==NSECT ) {
- if ( outsect[LSECT].os_base != outsect[BSSSG].os_base+
- outsect[BSSSG].os_size )
+ if (! follows(&outsect[LSECT],&outsect[BSSSG]))
fatal("end segment must follow bss\n") ;
if ( outsect[LSECT].os_size != 0 )
fatal("end segment must be empty\n") ;
long datasize ;
long bsssize;
+long align(a,b)
+ long a,b;
+{
+ a += b - 1;
+ return a - a % b;
+}
+
+int
+follows(pa, pb)
+ register struct outsect *pa, *pb;
+{
+ /* return 1 if pa follows pb */
+
+ return pa->os_base == align(pb->os_base+pb->os_size, pa->os_lign);
+}
+
main(argc, argv)
int argc;
char *argv[];
/* A few checks */
if ( outsect[BSSSG].os_flen != 0 )
fatal("bss space contains initialized data\n") ;
- if ( !unresolved && outsect[BSSSG].os_base != outsect[DATASG].os_base+
- outsect[DATASG].os_size )
+ if ( !unresolved && ! follows(&outsect[BSSSG], &outsect[DATASG]))
fatal("bss segment must follow data segment\n") ;
if ( outsect[ROMSG].os_lign == 0x20000 ) {
/* 410/413 file with ROMSG in data space */
magic= NMAGIC ;
textsize= outsect[TEXTSG].os_size ;
datasize= outsect[ROMSG].os_size + outsect[DATASG].os_size ;
- if ( outsect[DATASG].os_base != outsect[ROMSG].os_base+
- outsect[ROMSG].os_size )
+ if (! follows(&outsect[DATASG], &outsect[ROMSG]))
fatal("data segment must follow rom\n") ;
} else
if ( outsect[DATASG].os_lign == 0x20000 ) {
magic= NMAGIC ;
textsize= outsect[TEXTSG].os_size + outsect[ROMSG].os_size ;
datasize= outsect[DATASG].os_size ;
- if ( outsect[ROMSG].os_base != outsect[TEXTSG].os_base+
- outsect[TEXTSG].os_size )
+ if (! follows(&outsect[ROMSG],&outsect[TEXTSG].os_base))
fatal("rom segment must follow text\n") ;
} else {
/* Plain 407 file */
textsize= outsect[TEXTSG].os_size + outsect[ROMSG].os_size ;
datasize= outsect[DATASG].os_size ;
if (!unresolved) {
- if (outsect[ROMSG].os_base != outsect[TEXTSG].os_base+
- outsect[TEXTSG].os_size )
+ if (! follows(&outsect[ROMSG],&outsect[TEXTSG]))
fatal("rom segment must follow text\n") ;
- if ( outsect[DATASG].os_base != outsect[ROMSG].os_base+
- outsect[ROMSG].os_size )
+ if (! follows(&outsect[DATASG],&outsect[ROMSG]))
fatal("data segment must follow rom\n") ;
}
}
}
bsssize = outsect[BSSSG].os_size;
if ( outhead.oh_nsect==NSECT ) {
- if ( outsect[LSECT].os_base != outsect[BSSSG].os_base+
- outsect[BSSSG].os_size )
+ if (! follows(&outsect[LSECT],&outsect[BSSSG]))
fatal("end segment must follow bss\n") ;
if ( outsect[LSECT].os_size != 0 )
fatal("end segment must be empty\n") ;