Mail Archives: djgpp-workers/1998/07/01/06:05:33
This is a multi-part message in MIME format.
--------------64F7C3356D5E5A4DCF881D8B
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Bill Currie wrote:
> I could help with the endian hunt if you like. Even though I don't have
> access to an IRIX box, I do have access to both i860 and pa-risc 1.1
> boxen (both running big-endian and they both enforce alignment). I'm
> quite willing to do this while I have access to these boxen for
> testing. In fact, I'll get started shortly (tonight).
That was easier than I thought! Although only .exe output is tested
(other than .obj, the rest are a subset of .exe) I don't think I missed
anything, there were only 4.5 locations that had to be modified in
relation to endian-ness and alignment. There were a couple more
warnings picked up by compiling on a different system that I fixed up as
well.
FWIW, my testing involved comparing the differences between the i386 and
be-i860 builds of my lfn driver (a few k lines with lots of 32 bit
consts) and cmp showed 2 bytes being different (the timestape in the exe
header).
Bill
--
Leave others their otherness.
--------------64F7C3356D5E5A4DCF881D8B
Content-Type: text/plain; charset=us-ascii; name="djasm.diff.be"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="djasm.diff.be"
*** djasm.y.old Wed Jul 1 00:45:06 1998
--- djasm.y Wed Jul 1 21:40:22 1998
***************
*** 1750,1756 ****
switch (p->rel)
{
case REL_abs32:
! o = *((int *)cp);
break;
case REL_abs:
case REL_16:
--- 1750,1756 ----
switch (p->rel)
{
case REL_abs32:
! o = (signed int)(cp[0] | (cp[1] << 8) | (cp[2] << 16) | (cp[3] << 24));
break;
case REL_abs:
case REL_16:
***************
*** 1764,1771 ****
switch (p->rel)
{
case REL_abs32:
! *((int *)cp) = o;
! break;
case REL_abs:
case REL_16:
cp[1] = o>>8;
--- 1764,1772 ----
switch (p->rel)
{
case REL_abs32:
! cp[3]=o>>24;
! cp[2]=o>>16;
! /* FALL THROUGH */
case REL_abs:
case REL_16:
cp[1] = o>>8;
***************
*** 2382,2391 ****
{
if (symname[0] != '@') return 0;
if (which)
if (symname[1] != which) return 0;
else
if (symname[1] != 'f' && symname[1] != 'b') return 0;
! if (!isdigit(symname[2])) return 0;
if (symname[3]) return 0;
return 1;
}
--- 2383,2396 ----
{
if (symname[0] != '@') return 0;
if (which)
+ {
if (symname[1] != which) return 0;
+ }
else
+ {
if (symname[1] != 'f' && symname[1] != 'b') return 0;
! }
! if (!isdigit((unsigned char)symname[2])) return 0;
if (symname[3]) return 0;
return 1;
}
***************
*** 2705,2712 ****
--- 2710,2722 ----
for (; cnt > 0; cnt--, rp++)
{
Symbol *s=0;
+ unsigned char *vaddr_ptr=outbin + textbase + rp->r_vaddr;
+ int vaddr;
int delta;
+ vaddr=vaddr_ptr[0] | (vaddr_ptr[1] << 8) |
+ (vaddr_ptr[2] << 16) | (vaddr_ptr[3] << 24);
+
if (symbol[rp->r_symndx].e.e.e_zeroes == 0)
p = base + symbol[rp->r_symndx].e.e.e_offset;
else
***************
*** 2722,2728 ****
rp->r_type,
symbol[rp->r_symndx].e_scnum,
s ? s->value : 0,
! *((int *) (outbin + textbase + rp->r_vaddr)),
p);
#endif
if (!strcmp (p, _TEXT))
--- 2732,2738 ----
rp->r_type,
symbol[rp->r_symndx].e_scnum,
s ? s->value : 0,
! vaddr,
p);
#endif
if (!strcmp (p, _TEXT))
***************
*** 2772,2778 ****
inname, lineno, filename, rp->r_type);
delta = 0;
}
! *((int *)(outbin + textbase + rp->r_vaddr)) += delta;
}
}
}
--- 2782,2792 ----
inname, lineno, filename, rp->r_type);
delta = 0;
}
! vaddr += delta;
! vaddr_ptr[0]=vaddr;
! vaddr_ptr[1]=vaddr>>8;
! vaddr_ptr[2]=vaddr>>16;
! vaddr_ptr[3]=vaddr>>24;
}
}
}
--------------64F7C3356D5E5A4DCF881D8B--
- Raw text -