Hi,
in the following small example program, g++ puts the constant data into
the .data section and not into .rodata as it should. It works just fine with
the C frontend. This is a regression from at least 3.3/3.4.
Cheers,
Lars
[EMAIL PROTECTED] rodata]$ cat main.c
const char rodata[] = "Hello World";
const char * foo() { return rodata; }
[EMAIL PROTECTED] rodata]$ g++ -c main.c
[EMAIL PROTECTED] rodata]$ objdump -h main.o
main.o: file format elf64-x86-64
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000000b 0000000000000000 0000000000000000 00000040 2**2
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
1 .data 0000000c 0000000000000000 0000000000000000 0000004c 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 0000000000000000 0000000000000000 00000058 2**2
ALLOC
3 .eh_frame 00000048 0000000000000000 0000000000000000 00000058 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
4 .comment 00000028 0000000000000000 0000000000000000 000000a0 2**0
CONTENTS, READONLY
5 .note.GNU-stack 00000000 0000000000000000 0000000000000000 000000c8
2**0
CONTENTS, READONLY
[EMAIL PROTECTED] rodata]$ gcc -c main.c
[EMAIL PROTECTED] rodata]$ objdump -h main.o
main.o: file format elf64-x86-64
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000000b 0000000000000000 0000000000000000 00000040 2**2
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
1 .data 00000000 0000000000000000 0000000000000000 0000004c 2**2
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 0000000000000000 0000000000000000 0000004c 2**2
ALLOC
3 .rodata 0000000c 0000000000000000 0000000000000000 0000004c 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .eh_frame 00000038 0000000000000000 0000000000000000 00000058 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
5 .comment 00000028 0000000000000000 0000000000000000 00000090 2**0
CONTENTS, READONLY
6 .note.GNU-stack 00000000 0000000000000000 0000000000000000 000000b8
2**0
CONTENTS, READONLY
--
Summary: g++ puts read only data into the .data section
Product: gcc
Version: 4.0.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: lars at trolltech dot com
CC: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21476