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