www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/1998/07/01/06:05:33

Sender: bill AT taniwha DOT tssc DOT co DOT nz
Message-ID: <359A09C6.6BDEFD1C@taniwha.tssc.co.nz>
Date: Wed, 01 Jul 1998 22:04:54 +1200
From: Bill Currie <bill AT taniwha DOT tssc DOT co DOT nz>
MIME-Version: 1.0
To: DJ Delorie <dj AT delorie DOT com>, djgpp-workers AT delorie DOT com
Subject: Re: djasm patches
References: <199806301654 DOT MAA10970 AT delorie DOT com> <3599E5B4 DOT 6C2A0DC9 AT taniwha DOT tssc DOT co DOT nz>

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 -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019