This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Constify host-side offload data`
- From: Ilya Verbin <iverbin at gmail dot com>
- To: "H.J. Lu" <hjl dot tools at gmail dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>, Kirill Yukhin <kirill dot yukhin at gmail dot com>
- Date: Thu, 22 Oct 2015 18:08:02 +0300
- Subject: Re: Constify host-side offload data`
- Authentication-results: sourceware.org; auth=none
- References: <55A70152 dot 8010702 at acm dot org> <20151021173350 dot GA7682 at msticlxl57 dot ims dot intel dot com> <CAMe9rOomg0iVFe23yHZN8us=AhwJbr8mtR-APrSMO9Pved0=dg at mail dot gmail dot com> <20151021174252 dot GB7682 at msticlxl57 dot ims dot intel dot com> <CAMe9rOorSXzUiBb_Do-MTpkaLA39s-7uaCgdueCZQaFSRwOT6g at mail dot gmail dot com> <20151022141138 dot GA63867 at msticlxl57 dot ims dot intel dot com> <CAMe9rOrCd1RbHr4s38EiO+xfEu5kf-3YQ6Dwv5efszvgxmCmHg at mail dot gmail dot com>
On Thu, Oct 22, 2015 at 07:35:55 -0700, H.J. Lu wrote:
> On Thu, Oct 22, 2015 at 7:11 AM, Ilya Verbin <iverbin@gmail.com> wrote:
> > On Wed, Oct 21, 2015 at 10:44:56 -0700, H.J. Lu wrote:
> >> On Wed, Oct 21, 2015 at 10:42 AM, Ilya Verbin <iverbin@gmail.com> wrote:
> >> > On Wed, Oct 21, 2015 at 10:38:10 -0700, H.J. Lu wrote:
> >> >> On Wed, Oct 21, 2015 at 10:33 AM, Ilya Verbin <iverbin@gmail.com> wrote:
> >> >> > H.J.,
> >> >> > Maybe linker should print some warning about joining writable + nonwritable
> >> >> > sections? Here is a simple testcase:
> >> >> >
> >> >> > $ cat t1.s
> >> >> > .section ".AAA", "a"
> >> >> > .long 0x12345678
> >> >> > $ cat t2.s
> >> >> > .section ".AAA", "wa"
> >> >> > .long 0x12345678
> >> >> > $ as t1.s -o t1.o
> >> >> > $ as t2.s -o t2.o
> >> >> > $ ld -shared t1.o t2.o
> >> >> > $ ls -lh a.out
> >> >> > 2.1M a.out
> >> >> >
> >> >>
> >> >> Does linker make AAA writable? If yes, linker does what it
> >> >> is told.
> >> >
> >> > Yes, it makes it writable, but why it also makes this?
> >> >
> >> > [Nr] Name Type Address Offset
> >> > Size EntSize Flags Link Info Align
> >> > [ 0] NULL 0000000000000000 00000000
> >> > 0000000000000000 0000000000000000 0 0 0
> >> > [ 1] .hash HASH 00000000000000b0 000000b0
> >> > 0000000000000028 0000000000000004 A 2 0 8
> >> > [ 2] .dynsym DYNSYM 00000000000000d8 000000d8
> >> > 0000000000000078 0000000000000018 A 3 2 8
> >> > [ 3] .dynstr STRTAB 0000000000000150 00000150
> >> > 0000000000000019 0000000000000000 A 0 0 1
> >> > [ 4] .AAA PROGBITS 0000000000000169 00000169
> >> > 0000000000000008 0000000000000000 WA 0 0 1
> >> > [ 5] .eh_frame PROGBITS 0000000000000178 00000178
> >> > 0000000000000000 0000000000000000 A 0 0 8
> >> > [ 6] .dynamic DYNAMIC 0000000000200178 00200178 <-- ???
> >> > 00000000000000b0 0000000000000010 WA 3 0 8
> >> > [ 7] .shstrtab STRTAB 0000000000000000 00200380
> >> > 0000000000000049 0000000000000000 0 0 1
> >> > [ 8] .symtab SYMTAB 0000000000000000 00200228
> >> > 0000000000000120 0000000000000018 9 9 8
> >> > [ 9] .strtab STRTAB 0000000000000000 00200348
> >> > 0000000000000038 0000000000000000 0 0 1
> >> >
> >>
> >> Linker groups input sections by section name and ors section
> >> flags.
> >
> > Could you please help figure out how this number 0x200178 is calculated?
> > ld -verbose doesn't show anything helpful. It seems that something goes wrong
> > during section-to-segment mapping, because when both .AAA have "wa" flags, we
> > got small binary with 2 LOAD segments:
> > Type Offset VirtAddr PhysAddr
> > FileSiz MemSiz Flags Align
> > LOAD 0x0000000000000000 0x0000000000000000 0x0000000000000000
> > 0x00000000000001a8 0x00000000000001a8 R 200000
> > LOAD 0x00000000000001a8 0x00000000002001a8 0x00000000002001a8
> > 0x00000000000000b8 0x00000000000000b8 RW 200000
> >
> > But when one .AAA has "a" flag, and another .AAA has "wa" flag, we got huge
> > binary with only one big LOAD segment:
> > Type Offset VirtAddr PhysAddr
> > FileSiz MemSiz Flags Align
> > LOAD 0x0000000000000000 0x0000000000000000 0x0000000000000000
> > 0x0000000000200228 0x0000000000200228 RW 200000
> >
> > BTW, gold produces small binary in both cases.
> >
>
> Please open a binutils bug with a testcase.
Done: https://sourceware.org/bugzilla/show_bug.cgi?id=19162
-- Ilya