Newlib 1.8.1 problem: strcat causes bus address error

J. Johnston jjohnstn@cygnus.com
Wed Nov 17 07:51:00 GMT 1999


"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.


More information about the Newlib mailing list