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]

Newlib 1.8.1 problem: strcat causes bus address error


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?

Groeten
          Johan

--
     o o o o o o o . . .   ___________________________________
    o      _____           ||  Johan Borkhuis                |
  .][__n_n_|DD[  ====_____  |  johan.borkhuis@peektraffic.nl |
 >(________|__|_[_________]_|________________________________|
 _/oo OOOOO oo`  ooo   ooo  'o!o!o                      o!o!o`
= VxWorks page: http://www.xs4all.nl/~borkhuis/vxworks/vxworks.html =

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