diff options
author | Robert de Bath <rdebath@poboxes.com> | 1999-06-11 14:11:38 +0200 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2013-10-23 23:41:25 +0200 |
commit | 3d4957c86ff239b24b43933924ec72a3fd288518 (patch) | |
tree | da8225a4d7bb2d9123e10d558cdc3eebae6254c8 /ld | |
parent | e62b35169cdcd13632ae353b1e5ffde7dec44201 (diff) | |
download | dev86-3d4957c86ff239b24b43933924ec72a3fd288518.tar.gz |
Import Dev86src-0.14.8.tar.gzv0.14.8
Diffstat (limited to 'ld')
-rw-r--r-- | ld/bindef.h | 4 | ||||
-rw-r--r-- | ld/objdump86.c | 4 | ||||
-rw-r--r-- | ld/writebin.c | 33 |
3 files changed, 38 insertions, 3 deletions
diff --git a/ld/bindef.h b/ld/bindef.h index dbacfcd..0ccbdf9 100644 --- a/ld/bindef.h +++ b/ld/bindef.h @@ -26,12 +26,12 @@ #ifndef STANDARD_GNU_A_OUT # ifndef C_EXT - #define BSD_A_OUT +# define BSD_A_OUT # endif /* Not sure about this one ... it works here ... */ # if defined(BSD_A_OUT) && defined(N_MAGIC) - #define STANDARD_GNU_A_OUT +# define STANDARD_GNU_A_OUT # endif #endif diff --git a/ld/objdump86.c b/ld/objdump86.c index 58a935f..f9f32a3 100644 --- a/ld/objdump86.c +++ b/ld/objdump86.c @@ -16,7 +16,7 @@ #include <malloc.h> #include <string.h> -FILE * ifd = stdin; +FILE * ifd; char * ifname; #ifdef __STDC__ @@ -63,6 +63,8 @@ char ** argv; int ar; char * p; + ifd = stdin; /* In Libc6 stdin is weird */ + p = strrchr(argv[0], '/'); if(p) p++; else p=argv[0]; diff --git a/ld/writebin.c b/ld/writebin.c index 6945eee..ef1cb7f 100644 --- a/ld/writebin.c +++ b/ld/writebin.c @@ -157,7 +157,11 @@ bool_pt arguzp; if (uzp) { if (btextoffset == 0) +#ifdef QMAGIC + btextoffset = page_size()+HEADERLEN; +#else btextoffset = page_size(); +#endif if (bdataoffset == 0 && sepid) bdataoffset = page_size(); } @@ -284,6 +288,14 @@ bool_pt arguzp; etextpadoff = ld_roundup(etextoffset, 0x10, bin_off_t); segadj[1] += etextpadoff - bdataoffset; } +#ifdef QMAGIC + else if (uzp && bdataoffset == 0) + { + bdataoffset = ld_roundup(etextoffset, page_size(), bin_off_t); + etextpadoff = ld_roundup(etextoffset, page_size(), bin_off_t); + segadj[1] += etextpadoff - bdataoffset; + } +#endif else if (bdataoffset == 0) bdataoffset = etextpadoff; segpos[1] = segbase[1] = edataoffset = bdataoffset; @@ -318,6 +330,15 @@ bool_pt arguzp; & ~(bin_off_t) 0xFF; } #endif + +#ifdef QMAGIC + if(seg==3 && uzp && !stripflag) /* XXX Stripped last seek needed */ + { + bin_off_t val; + val = ld_roundup(segbase[seg]+segsz[seg], page_size(), bin_off_t); + segsz[seg] = val - segbase[seg]; + } +#endif combase[seg] = segbase[seg] + segsz[seg]; segadj[seg] = segadj[seg - 1]; } @@ -944,6 +965,11 @@ PRIVATE void writeheader() memset(&header, 0, sizeof header); #ifdef STANDARD_GNU_A_OUT #ifdef N_SET_MAGIC +#ifdef QMAGIC + if(uzp) + N_SET_MAGIC(header, QMAGIC); + else +#endif N_SET_MAGIC(header, OMAGIC); #else *(unsigned short *) &header.a_magic = OMAGIC; /* XXX - works for 386BSD */ @@ -984,12 +1010,19 @@ PRIVATE void writeheader() #ifndef STANDARD_GNU_A_OUT header.a_hdrlen = FILEHEADERLENGTH; #endif +#ifdef QMAGIC + if (uzp) + offtocn((char *) &header.a_text, etextpadoff - btextoffset+HEADERLEN, + sizeof header.a_text); + else +#endif offtocn((char *) &header.a_text, etextpadoff - btextoffset, sizeof header.a_text); offtocn((char *) &header.a_data, edataoffset - bdataoffset, sizeof header.a_data); offtocn((char *) &header.a_bss, endoffset - edataoffset, sizeof header.a_bss); + #ifdef REL_OUTPUT if (!reloc_output) #endif |