From 77bcd64f03b7057d3ef1460b308b58c4caac128c Mon Sep 17 00:00:00 2001 From: ceriel Date: Wed, 4 Nov 1987 10:41:32 +0000 Subject: [PATCH] improved the alilgnment checking somewhat --- mach/pmds/cv/cv.c | 49 +++++++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/mach/pmds/cv/cv.c b/mach/pmds/cv/cv.c index 7eaa53471..077e85af1 100644 --- a/mach/pmds/cv/cv.c +++ b/mach/pmds/cv/cv.c @@ -53,6 +53,22 @@ char hdr[HDRSIZE]; FILE *output; +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[]; @@ -98,45 +114,46 @@ main(argc, argv) outsect[TEXTSG].os_base) ; if ( outsect[BSSSG].os_flen != 0 ) fatal("bss space contains initialized data\n") ; - if ( outsect[BSSSG].os_base != outsect[DATASG].os_base+ - outsect[DATASG].os_size ) + if (! follows(&outsect[BSSSG], &outsect[DATASG])) fatal("bss segment must follow data segment\n") ; if ( outsect[ROMSG].os_lign == 0x8000 ) { /* 410 file with ROMSG in data space */ rom_in_data = 1; magic= 0410 ; + if (! follows(&outsect[DATASG], &outsect[ROMSG])) + fatal("data segment must follow rom\n") ; textsize= outsect[TEXTSG].os_size ; + outsect[ROMSG].os_size = outsect[DATASG].os_base - outsect[ROMSG].os_base; + outsect[DATASG].os_size = outsect[BSSSG].os_base - outsect[DATASG].os_base; datasize= outsect[ROMSG].os_size + outsect[DATASG].os_size ; - if ( outsect[DATASG].os_base != outsect[ROMSG].os_base+ - outsect[ROMSG].os_size ) - fatal("data segment must follow rom\n") ; } else if ( outsect[DATASG].os_lign == 0x8000 ) { /* 410 file with ROMSG in instruction space */ rom_in_data = 0; magic= 0410 ; + if (! follows(&outsect[ROMSG], &outsect[TEXTSG])) + fatal("rom segment must follow text\n") ; + outsect[TEXTSG].os_size = outsect[ROMSG].os_base - outsect[TEXTSG].os_base; textsize= outsect[TEXTSG].os_size + outsect[ROMSG].os_size ; + outsect[DATASG].os_size = outsect[BSSSG].os_base - outsect[DATASG].os_base; datasize= outsect[DATASG].os_size ; - if ( outsect[ROMSG].os_base != outsect[TEXTSG].os_base+ - outsect[TEXTSG].os_size ) - fatal("rom segment must follow text\n") ; } else { /* Plain 407 file */ rom_in_data = 1; magic= 0407 ; - textsize= outsect[TEXTSG].os_size ; - datasize= outsect[ROMSG].os_size + outsect[DATASG].os_size ; - 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") ; + outsect[TEXTSG].os_size = outsect[ROMSG].os_base - outsect[TEXTSG].os_base; + outsect[ROMSG].os_size = outsect[DATASG].os_base - outsect[ROMSG].os_base; + outsect[DATASG].os_size = outsect[BSSSG].os_base - outsect[DATASG].os_base; + textsize= outsect[TEXTSG].os_size ; + datasize= outsect[ROMSG].os_size + outsect[DATASG].os_size ; } 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") ; -- 2.34.1