Hi, I tried to compile glibc 2.3.6 and 2.4 for an e500 target using gcc-4.1.2-20070128. I applied the proposed patch for PR30370 go get gcc compiled.
Unfortunately, glibc compilation fails. After some testing, I was able to create a small test program - see below. It turns out that the problem was introduced into the 4.1 branch between 11/17/06 and 11/24/06. gcc-4.2-20070131 also fails. I tried both "--with-cpu=8540" and "--enable-e500-double --with-cpu=8548" configuration options. gcc compiled for other powerpc/ppc targets appears to be ok. Has anyone besides me seen this problem ? Thanks, Guenter Test code is as follows. Compile with any option for -me500 to see the resulting error. Failing code in glibc is atomic_increment() in elf/dl-profile.c, line 550. ----------------------------------------------- #define testmacro(mem) \ ({ \ __typeof (*(mem)) __val; \ __asm __volatile (" addi %0,%2,1\n" \ : "=&b" (__val), "=m" (*mem) \ : "b" (mem), "m" (*mem) \ : "cr0", "memory"); \ __val; \ }) struct teststruct1 { int count; } __attribute__ ((packed)); struct teststruct2 { int count; }; void testfunc (struct teststruct1 *s1, struct teststruct2 *s2) { int v; testmacro(&v); // ok testmacro(&s1->count); // fails testmacro(&s2->count); // ok } -------------------------------------------------- Compiler output: $ ppc-teak-linuxspe1-gcc -c testcc.c testcc.c: In function 'testfunc': testcc.c:26: error: output number 1 not directly addressable testcc.c:26: warning: use of memory input without lvalue in asm operand 3 is deprecated