take alignments into account
authorceriel <none@none>
Tue, 11 Aug 1987 15:28:06 +0000 (15:28 +0000)
committerceriel <none@none>
Tue, 11 Aug 1987 15:28:06 +0000 (15:28 +0000)
mach/sun2/cv/cv.c
mach/sun3/cv/cv.c

index 4d310c0..5932a80 100644 (file)
@@ -95,6 +95,22 @@ long textsize ;
 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[];
@@ -133,8 +149,7 @@ main(argc, 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 */
@@ -142,8 +157,7 @@ main(argc, argv)
                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 ) {
@@ -152,8 +166,7 @@ main(argc, argv)
                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 */
@@ -162,11 +175,9 @@ main(argc, argv)
                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") ;
                }
        }
@@ -180,8 +191,7 @@ main(argc, argv)
        }
        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") ;
index 4d310c0..5932a80 100644 (file)
@@ -95,6 +95,22 @@ long textsize ;
 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[];
@@ -133,8 +149,7 @@ main(argc, 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 */
@@ -142,8 +157,7 @@ main(argc, argv)
                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 ) {
@@ -152,8 +166,7 @@ main(argc, argv)
                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 */
@@ -162,11 +175,9 @@ main(argc, argv)
                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") ;
                }
        }
@@ -180,8 +191,7 @@ main(argc, argv)
        }
        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") ;