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]

Re: [gold] Merging string literals with bigger alignment


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]