This is the mail archive of the newlib@sourceware.cygnus.com mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Newlib 1.8.1 problem: strcat causes bus address error


"Borkhuis, Johan" wrote:
> 
> Hello,
> 
> We are using the GNU toolchain for m68k and newlib. When we are running our
> SW we get a bus address error. This error occurs in strcat. The code where
> the problem comes from is the following:
> 
>   /* Skip over the data in s1 as quickly as possible.  */
>   if (ALIGNED (s1))
>     {
>       unsigned long *aligned_s1 = (unsigned long *)s1;
>       while (!DETECTNULL (*aligned_s1))
>         aligned_s1++;
> 
>       s1 = (char *)aligned_s1;
>     }
> 
> with ALLIGNED replaced with the following:
> 
> #define ALIGNED(X)   (((long)X & (sizeof (long) - 1)))
> 
> The error occured in the first assignement, because s1 is not alligned.
> The problems is created by the macro ALLIGNED. When X is not a multiple of 4
> (for a 32 bit long) this function returns TRUE when it should return FALSE.
> (BTW: this macro is also used in other modules, but there it is called
> UNALLIGNED.)
> 
> Did anyone discover this problem, or is there a workaround for this?
> 

Johan,

  This problem was fixed in December of 98.  The ALIGNED macro was changed
to be:

#define ALIGNED(X) \
  (((long)X & (sizeof (long) - 1)) == 0)


-- Jeff J.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]