From 48f0b3eb836162d41622cedc1eb5f5168168fb8e Mon Sep 17 00:00:00 2001 From: Robert de Bath Date: Sun, 1 Feb 1998 11:26:21 +0100 Subject: Import Dev86src-0.13.5.tar.gz --- as/as.c | 8 ++++++++ as/as86_encap.sh | 10 +++++----- as/globvar.h | 2 ++ as/pops.c | 5 ++++- as/readsrc.c | 1 + 5 files changed, 20 insertions(+), 6 deletions(-) (limited to 'as') diff --git a/as/as.c b/as/as.c index 8f45f40..4bf76c7 100644 --- a/as/as.c +++ b/as/as.c @@ -68,6 +68,7 @@ char **argv; last_pass=1; process_args(argc, argv); initscan(); + ptext(); assemble(); /* doesn't return, maybe use setjmp */ @@ -256,6 +257,13 @@ char **argv; --argc; ++argv; break; + case 't': + if (!isnextarg || binfil != 0) + usage(); + textseg = atoi(nextarg); + --argc; + ++argv; + break; case 'u': if( flag_state ) inidata = IMPBIT | SEGM; else inidata = 0; diff --git a/as/as86_encap.sh b/as/as86_encap.sh index e5cf9e7..6bad886 100644 --- a/as/as86_encap.sh +++ b/as/as86_encap.sh @@ -57,10 +57,10 @@ $LIBDIR/as86 "$@" "$IFILE" -b _$$.bin -s _$$.sym || RV=$? if( flg == 1 ) { if( !started ) - printf "int %s = 0;\n", sname; + printf "#define %s 0\n", sname; printf "\n"; - printf "char %sdata[] = {\n", prefix; + printf "static char %sdata[] = {\n", prefix; bincount=0; } next; @@ -70,12 +70,12 @@ $LIBDIR/as86 "$@" "$IFILE" -b _$$.bin -s _$$.sym || RV=$? if( substr($2,1,4) == "0000" ) $2=substr($2,5); if( $1 == "+" && $4 == "$start" ) { - printf "int %s = 0x%s;\n", sname, $2; + printf "#define %s 0x%s\n", sname, $2; started = 1; } else if( substr($3, 1, 1) == "E" && $4 != "start" && $4 != "size" && $4 != "data" ) { - printf "int %s%s = 0x%s;\n", prefix, $4, $2; + printf "#define %s%s 0x%s\n", prefix, $4, $2; } next; } @@ -93,7 +93,7 @@ $LIBDIR/as86 "$@" "$IFILE" -b _$$.bin -s _$$.sym || RV=$? } END { printf "};\n\n"; - printf "int %ssize = %d;\n", prefix, bincount; + printf "#define %ssize %d\n", prefix, bincount; } ' RV=$? diff --git a/as/globvar.h b/as/globvar.h index aed6aed..df4ed6e 100644 --- a/as/globvar.h +++ b/as/globvar.h @@ -83,6 +83,8 @@ EXTERN unsigned char pcrflag; /* OBJ_RMASK set if addressing is PC-relative */ EXTERN int last_pass; /* Pass number of last pass */ EXTERN int dirty_pass; /* Set if this pass had a label movement */ +EXTERN int textseg; /* Text segment id */ + #ifdef I80386 EXTERN opcode_t aprefix; /* address size prefix or 0 */ diff --git a/as/pops.c b/as/pops.c index e239892..c9aba90 100644 --- a/as/pops.c +++ b/as/pops.c @@ -983,7 +983,10 @@ PUBLIC void psetdp() PUBLIC void ptext() { - setloc(TEXTLOC); + if( textseg <= 0 ) + setloc(TEXTLOC); + else + setloc(BSSLOC+textseg); } /* .WARN pseudo-op */ diff --git a/as/readsrc.c b/as/readsrc.c index 557ca5d..80c62f2 100644 --- a/as/readsrc.c +++ b/as/readsrc.c @@ -253,6 +253,7 @@ PUBLIC void pproceof() maclevel = iflevel = blocklevel = totwarn = toterr = linum = macnum = 0; initp1p2(); /* reset other varaiables */ + ptext(); if(pass==last_pass) binaryc = binaryg; #ifdef I80386 -- cgit v1.2.1