This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi,
Please, take a look at the attached patch that enables merging
of string literals with alignment bigger than the char size (alignment
is preserved).
Make check-gold passes, testcase is included.
thanks,
Alexander
2013/2/12 Ian Lance Taylor <iant@google.com>:
> On Tue, Feb 12, 2013 at 7:30 AM, Alexander Ivchenko <aivchenk@gmail.com> wrote:
>> The testcase in the patch from my first letter has those .c files. But
>> it's very simple anyway:
>>>cat merge_string_literals_1.c
>>
>> const char* bar1() {
>> return "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
>> }
>> const char* bar1_short() {
>> return "SSSSSS";
>> }
>>
>>>gcc -c merge_string_literals_1.c -O2
>>>readelf -S merge_string_literals_1.o | grep rodata
>> [ 5] .rodata.str1.8 PROGBITS 0000000000000000 00000058
>> [ 6] .rodata.str1.1 PROGBITS 0000000000000000 0000007d
>>
>>>objdump -s -j.rodata.str1.8 merge_string_literals_1.o
>>
>> merge_string_literals_1.o: file format elf64-x86-64
>>
>> Contents of section .rodata.str1.8:
>> 0000 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
>> 0010 41414141 41414141 41414141 41414141 AAAAAAAAAAAAAAAA
>> 0020 41414141 00 AAAA.
>>
>> I mentioned .rodata.str1.4 before - that could happen if we compile
>> for 32 bits..
>
>
> Thanks. I see the code in GCC now. It's in ix86_constant_alignment
> in gcc/config/i386/i386.c. For a string constant of 31 bytes or more,
> GCC sets the alignment to the word size. This means that GCC may use
> vector instructions to load the string constant. So gold has to honor
> the alignment of each individual entry in the mergeable string
> section.
>
> Ian
Attachment:
merging_string_literals_02.patch
Description: Binary data
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |