From c3fec1f1124e398844337578dbd293645cd1dcc5 Mon Sep 17 00:00:00 2001 From: ceriel Date: Tue, 11 Aug 1987 15:28:06 +0000 Subject: [PATCH] take alignments into account --- mach/sun2/cv/cv.c | 34 ++++++++++++++++++++++------------ mach/sun3/cv/cv.c | 34 ++++++++++++++++++++++------------ 2 files changed, 44 insertions(+), 24 deletions(-) diff --git a/mach/sun2/cv/cv.c b/mach/sun2/cv/cv.c index 4d310c028..5932a80aa 100644 --- a/mach/sun2/cv/cv.c +++ b/mach/sun2/cv/cv.c @@ -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") ; diff --git a/mach/sun3/cv/cv.c b/mach/sun3/cv/cv.c index 4d310c028..5932a80aa 100644 --- a/mach/sun3/cv/cv.c +++ b/mach/sun3/cv/cv.c @@ -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") ;