public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/13511] New: Problem with compiler optimization -o2
@ 2003-12-30 10:48 osoentgen at lucent dot com
  2003-12-30 17:01 ` [Bug c++/13511] " pinskia at gcc dot gnu dot org
                   ` (12 more replies)
  0 siblings, 13 replies; 14+ messages in thread
From: osoentgen at lucent dot com @ 2003-12-30 10:48 UTC (permalink / raw)
  To: gcc-bugs

We ran into a problem with compiler optimization -o2.
It is related to a macro which performs a variable bit shift and an assignment:
#define WRITE_TFI(x, value) { x[TFI_UPPER] = (char)(value >> 
SIZE_OF_BYTE_IN_BITS); x[TFI_LOWER] = (char)(value); }

The macro was used even in cases where SIZE_OF_BYTE_IN_BITS is 8 which means 
that a bit shift of 8 bits had to be performed.
This specific case seems to confuse GCC as the generated PowerPC assembler code 
lacks some instructions (see below).

Problem was initially observed with GCC 2.7.6.
Verification with GCC 2.95.3 showed the same problem.
Problem is independent of switch "-fstrict-aliasing".
Without optimization (i.e. -o0) everything is fine.

Sample code:

#define TFI_UPPER                       12
#define TFI_LOWER                       13
#define SIZE_OF_BYTE_IN_BITS          8
#define WRITE_TFI(x, value) { x[TFI_UPPER] = (char)(value >> 
SIZE_OF_BYTE_IN_BITS); x[TFI_LOWER] = (char)(value); }

char buffer[100];
char buffer2[100];

void test ()
{
	char *Frameptr = (char *) buffer;
	char *CEmsgArray = (char *)buffer2;

	Frameptr++;
	WRITE_TFI(CEmsgArray, *Frameptr);
	CEmsgArray[10]=(char) (*Frameptr);
	CEmsgArray[11]=(char) (*Frameptr);
}

With -o2 the instruction Frameptr is not being incremented at all!
With -o0 everything is fine.

---
Below 3 variants are given which show:
* -o2 bug
* -o2 without bug (bit shift 7 instead of 8)
* -o0 without bug

---
Example file with extended macro:
char buffer[100];
char buffer2[100];

void test2 ()
{
	char *Frameptr = (char *) buffer;
	char *CEmsgArray = (char *)buffer2;

	Frameptr++;

	CEmsgArray [12 ] = (char)(  *Frameptr  >> 8 );
	CEmsgArray [13 ] = (char)(  *Frameptr );

	CEmsgArray[10]=(char) (*Frameptr);
	CEmsgArray[11]=(char) (*Frameptr);
}

---
Assembler output (opt. enabled: -o2)
Instruction 'Frameptr++;' is missing:

void test2 ()
{
        char *Frameptr = (char *) buffer;
        char *CEmsgArray = (char *)buffer2;
   0:   3d 40 00 00     lis     r10,0
   4:   39 4a 00 00     addi    r10,r10,0

    
        Frameptr++;

        CEmsgArray [12 ] = (char)(  *Frameptr  >> 8 );  
   8:   38 00 00 00     li      r0,0
   c:   3d 60 00 00     lis     r11,0
  10:   98 0a 00 0c     stb     r0,12(r10)
  14:   39 6b 00 00     addi    r11,r11,0
        CEmsgArray [13 ] = (char)(  *Frameptr ); 
  18:   88 0b 00 00     lbz     r0,0(r11)
  1c:   98 0a 00 0d     stb     r0,13(r10)

        CEmsgArray[10]=(char) (*Frameptr);
  20:   89 2b 00 00     lbz     r9,0(r11)
  24:   99 2a 00 0a     stb     r9,10(r10)
        CEmsgArray[11]=(char) (*Frameptr);
  28:   88 0b 00 00     lbz     r0,0(r11)
  2c:   98 0a 00 0b     stb     r0,11(r10)
  30:   4e 80 00 20     blr

---
Assembler output (bit shift 7 instead of 8)
In this case everything is fine:
(Note: the main difference is the lbzu instruction in line 8)

void test2 ()
{
        char *Frameptr = (char *) buffer;
   0:   3d 40 00 00     lis     r10,0
   4:   39 4a 00 00     addi    r10,r10,0
        char *CEmsgArray = (char *)buffer2;

    
        Frameptr++;

        CEmsgArray [12 ] = (char)(  *Frameptr  >> 7 );  
   8:   8c 0a 00 01     lbzu    r0,1(r10)
   c:   3d 60 00 00     lis     r11,0
  10:   39 6b 00 00     addi    r11,r11,0
  14:   54 00 c9 fe     rlwinm  r0,r0,25,7,31
  18:   98 0b 00 0c     stb     r0,12(r11)
        CEmsgArray [13 ] = (char)(  *Frameptr ); 
  1c:   89 2a 00 00     lbz     r9,0(r10)
  20:   99 2b 00 0d     stb     r9,13(r11)

        CEmsgArray[10]=(char) (*Frameptr);
  24:   88 0a 00 00     lbz     r0,0(r10)
  28:   98 0b 00 0a     stb     r0,10(r11)
        CEmsgArray[11]=(char) (*Frameptr);
  2c:   89 2a 00 00     lbz     r9,0(r10)
  30:   99 2b 00 0b     stb     r9,11(r11)
  34:   4e 80 00 20     blr

---
Assembler output (without optimization, i.e. -o0):

void test2 ()
{
   0:	94 21 ff e0 	stwu	r1,-32(r1)
   4:	93 e1 00 1c 	stw	r31,28(r1)
   8:	7c 3f 0b 78 	mr	r31,r1
	char *Frameptr = (char *) buffer;
   c:	3d 20 00 00 	lis	r9,0
  10:	38 09 00 00 	addi	r0,r9,0
  14:	90 1f 00 08 	stw	r0,8(r31)
	char *CEmsgArray = (char *)buffer2;
  18:	3d 20 00 00 	lis	r9,0
  1c:	38 09 00 00 	addi	r0,r9,0
  20:	90 1f 00 0c 	stw	r0,12(r31)

    
	Frameptr++;
  24:	81 3f 00 08 	lwz	r9,8(r31)
  28:	38 09 00 01 	addi	r0,r9,1
  2c:	90 1f 00 08 	stw	r0,8(r31)
	
	CEmsgArray [12 ] = (char)(  *Frameptr  >> 8 );  
  30:	81 7f 00 0c 	lwz	r11,12(r31)
  34:	39 2b 00 0c 	addi	r9,r11,12
  38:	81 7f 00 08 	lwz	r11,8(r31)
  3c:	89 4b 00 00 	lbz	r10,0(r11)
  40:	55 40 06 3e 	clrlwi	r0,r10,24
  44:	7c 0b 46 70 	srawi	r11,r0,8
  48:	7d 60 5b 78 	mr	r0,r11
  4c:	98 09 00 00 	stb	r0,0(r9)
	CEmsgArray [13 ] = (char)(  *Frameptr ); 
  50:	81 7f 00 0c 	lwz	r11,12(r31)
  54:	39 2b 00 0d 	addi	r9,r11,13
  58:	81 7f 00 08 	lwz	r11,8(r31)
  5c:	88 0b 00 00 	lbz	r0,0(r11)
  60:	98 09 00 00 	stb	r0,0(r9)
	
	CEmsgArray[10]=(char) (*Frameptr);
  64:	81 7f 00 0c 	lwz	r11,12(r31)
  68:	39 2b 00 0a 	addi	r9,r11,10
  6c:	81 7f 00 08 	lwz	r11,8(r31)
  70:	88 0b 00 00 	lbz	r0,0(r11)
  74:	98 09 00 00 	stb	r0,0(r9)
	CEmsgArray[11]=(char) (*Frameptr);
  78:	81 7f 00 0c 	lwz	r11,12(r31)
  7c:	39 2b 00 0b 	addi	r9,r11,11
  80:	81 7f 00 08 	lwz	r11,8(r31)
  84:	88 0b 00 00 	lbz	r0,0(r11)
  88:	98 09 00 00 	stb	r0,0(r9)
  8c:	48 00 00 08 	b	94 <test2__Fv+0x94>
  90:	48 00 00 04 	b	94 <test2__Fv+0x94>

 

}
  94:	81 61 00 00 	lwz	r11,0(r1)
  98:	83 eb ff fc 	lwz	r31,-4(r11)
  9c:	7d 61 5b 78 	mr	r1,r11
  a0:	4e 80 00 20 	blr
  
  
---
Compiler commmand line:
/vobs/gnu/gcc/PPC.SunOS-5.8/gcc/bin/powerpc-wrs-vxworks-c++ -c 
tmp/__umc_vx_what.c -v \
-DOS_SunOS_5_8 -g -O0 -v -save-temps -fstrict-aliasing -Wall  -mcpu=603e -
DMODULE_TEST=off -DUMTS -DONEBTS -DFLEXENT \
-DMODCELL -DDM_PC -Dppc8260_TARGET -I.  -I../include \
-I/vobs/ubtssw_onecell_src/usl/pub/include \
-I/vobs/ubtssw_onecell_src/usl/pub/include/ssrv \
-I/vobs/ubtssw_onecell_src/usl/src/lcid \
-I/vobs/ubtssw_onecell_src/usl/include/bsp \
-I/vobs/ubtssw_onecell_src/usl/include/gdf \
-I/vobs/ubtssw_onecell_src/usl/include/osapi \
-I/vobs/ubtssw_onecell_src/usl/include/sim \
-I/vobs/ubtssw_onecell_src/usl/include/util -I/vobs/ubtssw_tornado/target/h \
-I/vobs/ubtssw_tools/codetest/include  \
-fkeep-inline-functions -DPPC_TARGET -DCPU=P603 \
-fvolatile -fno-for-scope -fdollars-in-identifiers -traditional -fno-builtin \
-nostdinc $1 

---
.ii file (-o2 with problem):

# 1 "test3.cc"
char buffer[100];
char buffer2[100];

void test2 ()
{
	char *Frameptr = (char *) buffer;
	char *CEmsgArray = (char *)buffer2;

    
	Frameptr++;
	
	CEmsgArray [12 ] = (char)(  *Frameptr  >> 8 );  
	CEmsgArray [13 ] = (char)(  *Frameptr ); 
	
	CEmsgArray[10]=(char) (*Frameptr);
	CEmsgArray[11]=(char) (*Frameptr);

 

}

---
Shell output of compiler:

powerpc-wrs-vxworks-c++: tmp/__umc_vx_what.c: No such file or directory
Reading specs from /vobs/gnu/gcc/PPC.SunOS-5.8/gcc/lib/gcc-lib/powerpc-wrs-
vxworks/2.95.3/specs
gcc version 2.95.3 20010315 (release)
 /vobs/gnu/gcc/PPC.SunOS-5.8/gcc/lib/gcc-lib/powerpc-wrs-vxworks/2.95.3/cpp0 -
lang-c++ -nostdinc -v -I. -I../include -
I/vobs/ubtssw_onecell_src/usl/pub/include -
I/vobs/ubtssw_onecell_src/usl/pub/include/ssrv -
I/vobs/ubtssw_onecell_src/usl/src/lcid -
I/vobs/ubtssw_onecell_src/usl/include/bsp -
I/vobs/ubtssw_onecell_src/usl/include/gdf -
I/vobs/ubtssw_onecell_src/usl/include/osapi -
I/vobs/ubtssw_onecell_src/usl/include/sim -
I/vobs/ubtssw_onecell_src/usl/include/util -I/vobs/ubtssw_tornado/target/h -
I/vobs/ubtssw_tools/codetest/include -iprefix /vobs/ubtssw_tornado/host/sun4-
solaris2/lib/gcc-lib/powerpc-wrs-vxworks/2.95.3/ -D__GNUC__=2 -D__GNUG__=2 -
D__GNUC_MINOR__=95 -D__cplusplus -D__vxworks -D__vxworks -Asystem(vxworks) -
Asystem(embedded) -Acpu(powerpc) -Amachine(powerpc) -D__EXCEPTIONS -
D__CHAR_UNSIGNED__ -D__OPTIMIZE__ -g -Wall -D_CALL_SYSV -D_BIG_ENDIAN -
D__BIG_ENDIAN__ -Amachine(bigendian) -D_ARCH_PPC -DOS_SunOS_5_8 -
DMODULE_TEST=off -DUMTS -DONEBTS -DFLEXENT -DMODCELL -DDM_PC -Dppc8260_TARGET -
DPPC_TARGET -DCPU=P603 test3.cc test3.ii
GNU CPP version 2.95.3 20010315 (release) (PowerPC System V.4)
#include "..." search starts here:
#include <...> search starts here:
 .
 /vobs/ubtssw_onecell_src/usl/pub/include
 /vobs/ubtssw_onecell_src/usl/pub/include/ssrv
 /vobs/ubtssw_onecell_src/usl/src/lcid
 /vobs/ubtssw_onecell_src/usl/include/bsp
 /vobs/ubtssw_onecell_src/usl/include/gdf
 /vobs/ubtssw_onecell_src/usl/include/util
 /vobs/ubtssw_tornado/target/h
End of search list.
The following default directories have been omitted from the search path:
 /vobs/gnu/gcc/PPC.SunOS-5.8/gcc/lib/gcc-lib/powerpc-wrs-
vxworks/2.95.3/../../../../include/g++-3
 /vobs/gnu/gcc/PPC.SunOS-5.8/gcc/lib/gcc-lib/powerpc-wrs-vxworks/2.95.3/include
 /vobs/gnu/gcc/PPC.SunOS-5.8/gcc/lib/gcc-lib/powerpc-wrs-
vxworks/2.95.3/../../../../powerpc-wrs-vxworks/sys-include
 /vobs/gnu/gcc/PPC.SunOS-5.8/gcc/lib/gcc-lib/powerpc-wrs-
vxworks/2.95.3/../../../../powerpc-wrs-vxworks/include
End of omitted list.
 /vobs/gnu/gcc/PPC.SunOS-5.8/gcc/lib/gcc-lib/powerpc-wrs-vxworks/2.95.3/cc1plus 
test3.ii -quiet -dumpbase test3.cc -mcpu=603e -g -O2 -Wall -version -fstrict-
aliasing -fkeep-inline-functions -fvolatile -fno-for-scope -fdollars-in-
identifiers -fno-builtin -o test3.s
GNU C++ version 2.95.3 20010315 (release) (powerpc-wrs-vxworks) compiled by GNU 
C version 2.95.3 20010315 (release).
 /vobs/gnu/gcc/PPC.SunOS-5.8/binutils/bin/powerpc-wrs-vxworks-as -mppc -V -Qy -
o test3.o test3.s
GNU assembler version 2.10 (powerpc-wrs-vxworks) using BFD version 2.10

-- 
           Summary: Problem with compiler optimization -o2
           Product: gcc
           Version: 2.95.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: osoentgen at lucent dot com
                CC: gcc-bugs at gcc dot gnu dot org
  GCC host triplet: SunOS 5.8
GCC target triplet: PowerPC


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/13511] Problem with compiler optimization -o2
  2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
@ 2003-12-30 17:01 ` pinskia at gcc dot gnu dot org
  2004-01-05 12:43 ` osoentgen at lucent dot com
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2003-12-30 17:01 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2003-12-30 15:35 -------
The relocations which are 0 in your output will show that the problem is that you are not reading 
the asm right:
-O1:
        lis r9,ha16(_buffer2)
        la r9,lo16(_buffer2)(r9)
        lis r2,ha16(_buffer+1)
        lbz r2,lo16(_buffer+1)(r2) <--- see the plus one
        extsb r0,r2
        srawi r0,r0,8
        stb r0,12(r9)
        stb r2,13(r9)
        stb r2,10(r9)
        stb r2,11(r9)
        blr
-O2 (the same on the mainline).

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |INVALID
            Summary|Problem with compiler       |Problem with compiler
                   |optimization -o2            |optimization -o2


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/13511] Problem with compiler optimization -o2
  2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
  2003-12-30 17:01 ` [Bug c++/13511] " pinskia at gcc dot gnu dot org
@ 2004-01-05 12:43 ` osoentgen at lucent dot com
  2004-01-05 12:44 ` osoentgen at lucent dot com
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: osoentgen at lucent dot com @ 2004-01-05 12:43 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From osoentgen at lucent dot com  2004-01-05 12:43 -------
Subject: RE:  Problem with compiler optimization -o2

Andrew,

Now with commented assembler code.
'*Frameptr >> 8' leads to missing pointer increment:

void test ()
{
        char *Frameptr = (char *) buffer;
        char *CEmsgArray = (char *)buffer2;
  100000:       3d 40 00 10     lis     r10,16                  Prepare
CEmsgArray address
  100004:       39 4a 00 98     addi    r10,r10,152             CEmsgArray
addr has been loaded into R10


        Frameptr++;
        {  CEmsgArray [12 ] = (char)(  *Frameptr  >> 8 );  CEmsgArray [13 ]
= (char)(  *Frameptr ); } ;
  100008:       38 00 00 00     li      r0,0                    Shift by 8
is always zero
  10000c:       3d 60 00 10     lis     r11,16                  Prepare
Frameptr address
  100010:       98 0a 00 0c     stb     r0,12(r10)
CEmsgArray[12] is being assigned (OK)
  100014:       39 6b 00 34     addi    r11,r11,52              Frameptr
addr has been loaded into R11
  100018:       88 0b 00 00     lbz     r0,0(r11)               *Frameptr
  10001c:       98 0a 00 0d     stb     r0,13(r10)
CEmsgArray[13] is being assigned (WRONG!!!)
        CEmsgArray[10]=(char) (*Frameptr);
  100020:       89 2b 00 00     lbz     r9,0(r11)               *Frameptr
  100024:       99 2a 00 0a     stb     r9,10(r10)
CEmsgArray[10] is being assigned (WRONG!!!)
        CEmsgArray[11]=(char) (*Frameptr);
  100028:       88 0b 00 00     lbz     r0,0(r11)               *Frameptr
  10002c:       98 0a 00 0b     stb     r0,11(r10)
CEmsgArray[11] is being assigned (WRONG!!!)
  100030:       4e 80 00 20     blr

=================

Example of good case (shift of 7):

void test ()
{
        char *Frameptr = (char *) buffer;
  100000:       3d 40 00 10     lis     r10,16                  Prepare
Frameptr address
  100004:       39 4a 00 38     addi    r10,r10,56              Frameptr
addr has been loaded into R10
        char *CEmsgArray = (char *)buffer2;


        Frameptr++;
        {  CEmsgArray [12 ] = (char)(  *Frameptr  >> 7 );  CEmsgArray [13 ]
= (char)(  *Frameptr ); } ;
  100008:       8c 0a 00 01     lbzu    r0,1(r10)               Frameptr++
  10000c:       3d 60 00 10     lis     r11,16                  Prepare
CEmsgArray address
  100010:       39 6b 00 9c     addi    r11,r11,156             CEmsgArray
addr has been loaded into R11
  100014:       54 00 c9 fe     rlwinm  r0,r0,25,7,31           >> 7
  100018:       98 0b 00 0c     stb     r0,12(r11)
CEmsgArray[12] is being assigned (OK)
  10001c:       89 2a 00 00     lbz     r9,0(r10)               *Frameptr
  100020:       99 2b 00 0d     stb     r9,13(r11)
CEmsgArray[13] is being assigned (OK)
        CEmsgArray[10]=(char) (*Frameptr);
  100024:       88 0a 00 00     lbz     r0,0(r10)               *Frameptr
  100028:       98 0b 00 0a     stb     r0,10(r11)
CEmsgArray[10] is being assigned (OK)
        CEmsgArray[11]=(char) (*Frameptr);
  10002c:       89 2a 00 00     lbz     r9,0(r10)               *Frameptr
  100030:       99 2b 00 0b     stb     r9,11(r11)
CEmsgArray[11] is being assigned (OK)
  100034:       4e 80 00 20     blr


Regards,
 Olaf

-----Original Message-----
From: pinskia at gcc dot gnu dot org [mailto:gcc-bugzilla@gcc.gnu.org]
Sent: Dienstag, 30. Dezember 2003 16:36
To: osoentgen@lucent.com
Subject: [Bug c++/13511] Problem with compiler optimization -o2



------- Additional Comments From pinskia at gcc dot gnu dot org  2003-12-30
15:35 -------
The relocations which are 0 in your output will show that the problem is
that you are not reading 
the asm right:
-O1:
        lis r9,ha16(_buffer2)
        la r9,lo16(_buffer2)(r9)
        lis r2,ha16(_buffer+1)
        lbz r2,lo16(_buffer+1)(r2) <--- see the plus one
        extsb r0,r2
        srawi r0,r0,8
        stb r0,12(r9)
        stb r2,13(r9)
        stb r2,10(r9)
        stb r2,11(r9)
        blr
-O2 (the same on the mainline).

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |INVALID
            Summary|Problem with compiler       |Problem with compiler
                   |optimization -o2            |optimization -o2


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511

------- You are receiving this mail because: -------
You reported the bug, or are watching the reporter.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/13511] Problem with compiler optimization -o2
  2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
  2003-12-30 17:01 ` [Bug c++/13511] " pinskia at gcc dot gnu dot org
  2004-01-05 12:43 ` osoentgen at lucent dot com
@ 2004-01-05 12:44 ` osoentgen at lucent dot com
  2004-01-05 12:48 ` falk dot hueffner at student dot uni-tuebingen dot de
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: osoentgen at lucent dot com @ 2004-01-05 12:44 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From osoentgen at lucent dot com  2004-01-05 12:44 -------
Now with commented assembler code.
'*Frameptr >> 8' leads to missing pointer increment:

void test ()
{
        char *Frameptr = (char *) buffer;
        char *CEmsgArray = (char *)buffer2;
  100000:       3d 40 00 10     lis     r10,16                  Prepare 
CEmsgArray address
  100004:       39 4a 00 98     addi    r10,r10,152             CEmsgArray addr 
has been loaded into R10


        Frameptr++;
        {  CEmsgArray [12 ] = (char)(  *Frameptr  >> 8 );  CEmsgArray [13 ] = 
(char)(  *Frameptr ); } ;
  100008:       38 00 00 00     li      r0,0                    Shift by 8 is 
always zero
  10000c:       3d 60 00 10     lis     r11,16                  Prepare 
Frameptr address
  100010:       98 0a 00 0c     stb     r0,12(r10)              CEmsgArray[12] 
is being assigned (OK)
  100014:       39 6b 00 34     addi    r11,r11,52              Frameptr addr 
has been loaded into R11
  100018:       88 0b 00 00     lbz     r0,0(r11)               *Frameptr
  10001c:       98 0a 00 0d     stb     r0,13(r10)              CEmsgArray[13] 
is being assigned (WRONG!!!)
        CEmsgArray[10]=(char) (*Frameptr);
  100020:       89 2b 00 00     lbz     r9,0(r11)               *Frameptr
  100024:       99 2a 00 0a     stb     r9,10(r10)              CEmsgArray[10] 
is being assigned (WRONG!!!)
        CEmsgArray[11]=(char) (*Frameptr);
  100028:       88 0b 00 00     lbz     r0,0(r11)               *Frameptr
  10002c:       98 0a 00 0b     stb     r0,11(r10)              CEmsgArray[11] 
is being assigned (WRONG!!!)
  100030:       4e 80 00 20     blr

=================

Example of good case (shift of 7):

void test ()
{
        char *Frameptr = (char *) buffer;
  100000:       3d 40 00 10     lis     r10,16                  Prepare 
Frameptr address
  100004:       39 4a 00 38     addi    r10,r10,56              Frameptr addr 
has been loaded into R10
        char *CEmsgArray = (char *)buffer2;


        Frameptr++;
        {  CEmsgArray [12 ] = (char)(  *Frameptr  >> 7 );  CEmsgArray [13 ] = 
(char)(  *Frameptr ); } ;
  100008:       8c 0a 00 01     lbzu    r0,1(r10)               Frameptr++
  10000c:       3d 60 00 10     lis     r11,16                  Prepare 
CEmsgArray address
  100010:       39 6b 00 9c     addi    r11,r11,156             CEmsgArray addr 
has been loaded into R11
  100014:       54 00 c9 fe     rlwinm  r0,r0,25,7,31           >> 7
  100018:       98 0b 00 0c     stb     r0,12(r11)              CEmsgArray[12] 
is being assigned (OK)
  10001c:       89 2a 00 00     lbz     r9,0(r10)               *Frameptr
  100020:       99 2b 00 0d     stb     r9,13(r11)              CEmsgArray[13] 
is being assigned (OK)
        CEmsgArray[10]=(char) (*Frameptr);
  100024:       88 0a 00 00     lbz     r0,0(r10)               *Frameptr
  100028:       98 0b 00 0a     stb     r0,10(r11)              CEmsgArray[10] 
is being assigned (OK)
        CEmsgArray[11]=(char) (*Frameptr);
  10002c:       89 2a 00 00     lbz     r9,0(r10)               *Frameptr
  100030:       99 2b 00 0b     stb     r9,11(r11)              CEmsgArray[11] 
is being assigned (OK)
  100034:       4e 80 00 20     blr


-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |UNCONFIRMED
         Resolution|INVALID                     |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/13511] Problem with compiler optimization -o2
  2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
                   ` (2 preceding siblings ...)
  2004-01-05 12:44 ` osoentgen at lucent dot com
@ 2004-01-05 12:48 ` falk dot hueffner at student dot uni-tuebingen dot de
  2004-01-05 12:54 ` osoentgen at lucent dot com
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: falk dot hueffner at student dot uni-tuebingen dot de @ 2004-01-05 12:48 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From falk dot hueffner at student dot uni-tuebingen dot de  2004-01-05 12:48 -------
Subject: Re:  Problem with compiler optimization -o2

"osoentgen at lucent dot com" <gcc-bugzilla@gcc.gnu.org> writes:

> ------- Additional Comments From osoentgen at lucent dot com  2004-01-05 12:44 -------
> Now with commented assembler code.

I think it would be a lot more helpful if you demonstrated the problem
by giving a complete example which will print a wrong result, can you
provide one?



-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/13511] Problem with compiler optimization -o2
  2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
                   ` (3 preceding siblings ...)
  2004-01-05 12:48 ` falk dot hueffner at student dot uni-tuebingen dot de
@ 2004-01-05 12:54 ` osoentgen at lucent dot com
  2004-01-05 13:06 ` nathan at gcc dot gnu dot org
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: osoentgen at lucent dot com @ 2004-01-05 12:54 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From osoentgen at lucent dot com  2004-01-05 12:54 -------
Bug was observed on a deeply embedded system.
As the bug is related to the generated code, this would anyway not help very 
much.
Also the symptom is quite simple:
The pointer increment (Frameptr++) is simply omitted.

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/13511] Problem with compiler optimization -o2
  2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
                   ` (4 preceding siblings ...)
  2004-01-05 12:54 ` osoentgen at lucent dot com
@ 2004-01-05 13:06 ` nathan at gcc dot gnu dot org
  2004-01-05 13:29 ` osoentgen at lucent dot com
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: nathan at gcc dot gnu dot org @ 2004-01-05 13:06 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From nathan at gcc dot gnu dot org  2004-01-05 13:06 -------
As Andrew keeps pointing out, the increment of Frameptr is being folded into
its initialization. I.e. the compiler is converting
  char *Frameptr = (char *) buffer;
  Frameptr++;
into
 char *Frameptr = (char *) buffer + 1;
and that addend is being held in the relocation table of the object file. You
need to examine that relocation table. Are you using a bespoke linker/loader
and getting the relocations incorrect?

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |FIXED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/13511] Problem with compiler optimization -o2
  2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
                   ` (5 preceding siblings ...)
  2004-01-05 13:06 ` nathan at gcc dot gnu dot org
@ 2004-01-05 13:29 ` osoentgen at lucent dot com
  2004-01-05 13:37 ` osoentgen at lucent dot com
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: osoentgen at lucent dot com @ 2004-01-05 13:29 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From osoentgen at lucent dot com  2004-01-05 13:29 -------
We are not using any special loader.
This is what the objectfile generated by the linker contains
plus a register dump (see R10 and R11).
There is no obvious displacement regarding 'Frameptr' or 'buffer'.


Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000034  00100000  00100000  00000074  2**2
                  CONTENTS, ALLOC, LOAD, CODE
  1 .sdata2       00000000  00100034  00100034  000000a8  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .data         00000000  00100034  00100034  000000a8  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  3 .sdata        00000000  00100034  00100034  000000a8  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  4 .sbss         00000000  00100034  00100034  000000a8  2**0
                  CONTENTS
  5 .bss          000000c8  00100034  00100034  000000a8  2**2
                  ALLOC
  6 .stab         00000210  00000000  00000000  000000a8  2**2
                  CONTENTS, READONLY, DEBUGGING
  7 .stabstr      0000049b  00000000  00000000  000002b8  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .comment      00000026  00000000  00000000  00000753  2**0
                  CONTENTS, READONLY


SYMBOL TABLE:
00100000 l    d  .text  00000000 
00100034 l    d  .sdata2        00000000 
00100034 l    d  .data  00000000 
00100034 l    d  .sdata 00000000 
00100034 l    d  .sbss  00000000 
00100034 l    d  .bss   00000000 
00000000 l    d  .stab  00000000 
00000000 l    d  .stabstr       00000000 
00000000 l    d  .comment       00000000 
00000000 l    d  *ABS*  00000000 
00000000 l    d  *ABS*  00000000 
00000000 l    d  *ABS*  00000000 
00000000 l    df *ABS*  00000000 test4.cc
00100034 l       .text  00000000 Letext
00100098 g     O .bss   00000064 buffer2
001000fc g     O *ABS*  00000000 __end
00108034 g     O .sdata 00000000 _SDA_BASE_
00100034 g     O .bss   00000064 buffer
00100000 g     F .text  00000034 test__Fv
00100034 g     O *ABS*  00000000 __bss_start
00100034 g     O *ABS*  00000000 _edata
001000fc g     O *ABS*  00000000 _end
00108034 g     O .sdata2        00000000 _SDA2_BASE_


MCC::register
R0          4E  R8           0  R16          0  R24          0
R1           0  R9           0  R17          0  R25          0
R2           0  R10   00100098  R18          0  R26          0
R3           0  R11   00100034  R19          0  R27          0
R4           0  R12          0  R20          0  R28          0
R5           0  R13          0  R21          0  R29          0
R6           0  R14          0  R22          0  R30          0
R7           0  R15          0  R23          0  R31          0
--------------------------------------------------------------
TB           5  XER          0  CR           0  LR           0
TBU          0                  CTR          0  IP    00100020
--------------------------------------------------------------
SPRG0        0  SRR0         0  DSISR        0  MSR          0
SPRG1        0  SRR1         0  DAR          0  PVR          0
SPRG2        0                  EAR          0  DEC   FFFFFFFB
SPRG3        0
               POW _  TGPR_  ILE _  EE  _  PR  _  FP  _  ME  _
 FE0 _  SE  _  BE  _  FE1 _  IP  _  IR  _  DR  _  RI  _  LE  _

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |UNCONFIRMED
         Resolution|FIXED                       |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/13511] Problem with compiler optimization -o2
  2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
                   ` (6 preceding siblings ...)
  2004-01-05 13:29 ` osoentgen at lucent dot com
@ 2004-01-05 13:37 ` osoentgen at lucent dot com
  2004-01-05 14:09 ` nathan at gcc dot gnu dot org
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: osoentgen at lucent dot com @ 2004-01-05 13:37 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From osoentgen at lucent dot com  2004-01-05 13:37 -------
These are the relocation table entries of both the compiler output and the 
linker output files:

compiler output:
test4.o:     file format elf32-powerpc

RELOCATION RECORDS FOR [.text]:
OFFSET   TYPE              VALUE 
00000002 R_PPC_ADDR16_HA   buffer2
00000006 R_PPC_ADDR16_LO   buffer2
0000000e R_PPC_ADDR16_HA   buffer
00000016 R_PPC_ADDR16_LO   buffer


RELOCATION RECORDS FOR [.stab]:
OFFSET   TYPE              VALUE 
00000014 R_PPC_ADDR32      .text
00000020 R_PPC_ADDR32      .text
00000140 R_PPC_ADDR32      test__Fv
0000020c R_PPC_ADDR32      Letext


linker output:
test4_out.o:     file format elf32-powerpc

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/13511] Problem with compiler optimization -o2
  2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
                   ` (7 preceding siblings ...)
  2004-01-05 13:37 ` osoentgen at lucent dot com
@ 2004-01-05 14:09 ` nathan at gcc dot gnu dot org
  2004-01-05 14:14 ` osoentgen at lucent dot com
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: nathan at gcc dot gnu dot org @ 2004-01-05 14:09 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From nathan at gcc dot gnu dot org  2004-01-05 14:09 -------
what is the .s file the compiler emits with -save-temps or -S
and what is the output of objdump -dr on the object file?

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/13511] Problem with compiler optimization -o2
  2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
                   ` (8 preceding siblings ...)
  2004-01-05 14:09 ` nathan at gcc dot gnu dot org
@ 2004-01-05 14:14 ` osoentgen at lucent dot com
  2004-01-05 14:15 ` pinskia at gcc dot gnu dot org
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: osoentgen at lucent dot com @ 2004-01-05 14:14 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From osoentgen at lucent dot com  2004-01-05 14:14 -------
pobjdump -dr test4.o:

test4.o:     file format elf32-powerpc

Disassembly of section .text:

00000000 <test__Fv>:
   0:   3d 40 00 00     lis     r10,0
                        2: R_PPC_ADDR16_HA      buffer2
   4:   39 4a 00 00     addi    r10,r10,0
                        6: R_PPC_ADDR16_LO      buffer2
   8:   38 00 00 00     li      r0,0
   c:   3d 60 00 00     lis     r11,0
                        e: R_PPC_ADDR16_HA      buffer
  10:   98 0a 00 0c     stb     r0,12(r10)
  14:   39 6b 00 00     addi    r11,r11,0
                        16: R_PPC_ADDR16_LO     buffer
  18:   88 0b 00 00     lbz     r0,0(r11)
  1c:   98 0a 00 0d     stb     r0,13(r10)
  20:   89 2b 00 00     lbz     r9,0(r11)
  24:   99 2a 00 0a     stb     r9,10(r10)
  28:   88 0b 00 00     lbz     r0,0(r11)
  2c:   98 0a 00 0b     stb     r0,11(r10)
  30:   4e 80 00 20     blr


.s file contents:

	.file	"test4.cc"
.stabs "/home/osoentge/del/opt_comp/",100,0,0,.Ltext0
.stabs "test4.cc",100,0,0,.Ltext0
	.section	".text"
.Ltext0:
	.stabs	"gcc2_compiled.", 0x3c, 0, 0, 0
.stabs "int:t(0,1)=r(0,1);0020000000000;0017777777777;",128,0,0,0
.stabs "char:t(0,2)=r(0,2);0;255;",128,0,0,0
.stabs "long int:t(0,3)=r(0,1);0020000000000;0017777777777;",128,0,0,0
.stabs "unsigned int:t(0,4)=r(0,1);0000000000000;0037777777777;",128,0,0,0
.stabs "long unsigned int:t(0,5)=r(0,1);0000000000000;0037777777777;",128,0,0,0
.stabs "long long int:t(0,6)=r
(0,1);01000000000000000000000;0777777777777777777777;",128,0,0,0
.stabs "long long unsigned int:t(0,7)=r
(0,1);0000000000000;01777777777777777777777;",128,0,0,0
.stabs "short int:t(0,8)=r(0,8);-32768;32767;",128,0,0,0
.stabs "short unsigned int:t(0,9)=r(0,9);0;65535;",128,0,0,0
.stabs "signed char:t(0,10)=r(0,10);-128;127;",128,0,0,0
.stabs "unsigned char:t(0,11)=r(0,11);0;255;",128,0,0,0
.stabs "float:t(0,12)=r(0,1);4;0;",128,0,0,0
.stabs "double:t(0,13)=r(0,1);8;0;",128,0,0,0
.stabs "long double:t(0,14)=r(0,1);8;0;",128,0,0,0
.stabs "complex int:t(0,15)=s8real:(0,1),0,32;imag:(0,1),32,32;;",128,0,0,0
.stabs "complex float:t(0,16)=r(0,16);4;0;",128,0,0,0
.stabs "complex double:t(0,17)=r(0,17);8;0;",128,0,0,0
.stabs "complex long double:t(0,18)=r(0,18);8;0;",128,0,0,0
.stabs "bool:t(0,19)=@s32;-16;",128,0,0,0
.stabs "void:t(0,20)=(0,20)",128,0,0,0
.stabs "__wchar_t:t(0,21)=r(0,1);0020000000000;0017777777777;",128,0,0,0
.stabs "__vtbl_ptr_type:t(0,22)=s8__delta:(0,8),0,16;__index:(0,8),16,16;__pfn:
(0,23)=*(0,20),32,32;__delta2:(0,8),32,16;;",128,0,0,0
	.align 2
.stabs "test__Fv:F(0,20)",36,0,5,test__Fv
	.globl test__Fv
	.type	 test__Fv,@function
test__Fv:
.stabn 68,0,5,.LM1-test__Fv
.LM1:
.LBB2:
.stabn 68,0,7,.LM2-test__Fv
.LM2:
	lis 10,buffer2@ha
	la 10,buffer2@l(10)
.stabn 68,0,11,.LM3-test__Fv
.LM3:
	li 0,0
.stabn 68,0,6,.LM4-test__Fv
.LM4:
	lis 11,buffer@ha
.stabn 68,0,11,.LM5-test__Fv
.LM5:
	stb 0,12(10)
.stabn 68,0,6,.LM6-test__Fv
.LM6:
	la 11,buffer@l(11)
.stabn 68,0,11,.LM7-test__Fv
.LM7:
	lbz 0,0(11)
	stb 0,13(10)
.stabn 68,0,12,.LM8-test__Fv
.LM8:
	lbz 9,0(11)
	stb 9,10(10)
.stabn 68,0,13,.LM9-test__Fv
.LM9:
	lbz 0,0(11)
	stb 0,11(10)
.LBE2:
	blr
.Lfe1:
	.size	 test__Fv,.Lfe1-test__Fv
.stabs "Frameptr:r(0,24)=*(0,2)",64,0,6,11
.stabs "CEmsgArray:r(0,24)",64,0,7,10
.stabn 192,0,0,.LBB2-test__Fv
.stabn 224,0,0,.LBE2-test__Fv
.Lscope0:
.stabs "",36,0,0,.Lscope0-test__Fv
.stabs "buffer:G(0,25)=ar(0,1);0;99;(0,2)",32,0,1,0
	.globl buffer
	.lcomm	buffer,100,4
.stabs "buffer2:G(0,25)",32,0,2,0
	.globl buffer2
	.lcomm	buffer2,100,4
	.text
	.stabs "",100,0,0,Letext
Letext:
	.ident	"GCC: (GNU) 2.95.3 20010315 (release)"

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/13511] Problem with compiler optimization -o2
  2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
                   ` (9 preceding siblings ...)
  2004-01-05 14:14 ` osoentgen at lucent dot com
@ 2004-01-05 14:15 ` pinskia at gcc dot gnu dot org
  2004-01-05 14:20 ` pinskia at gcc dot gnu dot org
  2004-01-05 14:21 ` pinskia at gcc dot gnu dot org
  12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-01-05 14:15 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2004-01-05 14:15 -------
If the relocations are wrong, then it is a binutils bug, report it to them.

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |INVALID


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/13511] Problem with compiler optimization -o2
  2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
                   ` (10 preceding siblings ...)
  2004-01-05 14:15 ` pinskia at gcc dot gnu dot org
@ 2004-01-05 14:20 ` pinskia at gcc dot gnu dot org
  2004-01-05 14:21 ` pinskia at gcc dot gnu dot org
  12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-01-05 14:20 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2004-01-05 14:20 -------
Anyway this is fixed since at 3.0 so reopening to close it right.

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |UNCONFIRMED
         Resolution|INVALID                     |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Bug c++/13511] Problem with compiler optimization -o2
  2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
                   ` (11 preceding siblings ...)
  2004-01-05 14:20 ` pinskia at gcc dot gnu dot org
@ 2004-01-05 14:21 ` pinskia at gcc dot gnu dot org
  12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2004-01-05 14:21 UTC (permalink / raw)
  To: gcc-bugs


------- Additional Comments From pinskia at gcc dot gnu dot org  2004-01-05 14:21 -------
        lis 11,buffer+1@ha
        lis 3,buffer2@ha
        lbz 10,buffer+1@l(11)
        la 9,buffer2@l(3)
        li 0,0
        stb 10,11(9)
        stb 0,12(9)
        stb 10,13(9)
        stb 10,10(9)
        blr

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |FIXED
   Target Milestone|---                         |3.0.x


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=13511


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2004-01-05 14:21 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-12-30 10:48 [Bug c++/13511] New: Problem with compiler optimization -o2 osoentgen at lucent dot com
2003-12-30 17:01 ` [Bug c++/13511] " pinskia at gcc dot gnu dot org
2004-01-05 12:43 ` osoentgen at lucent dot com
2004-01-05 12:44 ` osoentgen at lucent dot com
2004-01-05 12:48 ` falk dot hueffner at student dot uni-tuebingen dot de
2004-01-05 12:54 ` osoentgen at lucent dot com
2004-01-05 13:06 ` nathan at gcc dot gnu dot org
2004-01-05 13:29 ` osoentgen at lucent dot com
2004-01-05 13:37 ` osoentgen at lucent dot com
2004-01-05 14:09 ` nathan at gcc dot gnu dot org
2004-01-05 14:14 ` osoentgen at lucent dot com
2004-01-05 14:15 ` pinskia at gcc dot gnu dot org
2004-01-05 14:20 ` pinskia at gcc dot gnu dot org
2004-01-05 14:21 ` pinskia at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).