Will Newton <will.new...@linaro.org> writes:

> On 12 December 2013 23:14, Michael Hudson-Doyle
> <michael.hud...@linaro.org> wrote:
>> Will Newton <will.new...@linaro.org> writes:
>>
>>> On 12 December 2013 21:59, Michael Hudson-Doyle
>>> <michael.hud...@linaro.org> wrote:
>>>> Will Newton <will.new...@linaro.org> writes:
>>
>> [sniiiip]
>>
>>>>> I would guess that 0x64c000 is the base of the GOT and 776 is the
>>>>> offset into it (but I could be wrong). objdump -h will give you the
>>>>> layout of the sections, objdump -R will dump the relocations.
>>>>
>>>> So I get this:
>>>>
>>>> $ objdump -h build/linux2/normal/mongo/base/counter_test | grep got 
>>>> --context=2
>>>>  23 .dynamic      00000220  000000000064b160  000000000064b160  0023b160  
>>>> 2**3
>>>>                   CONTENTS, ALLOC, LOAD, DATA
>>>>  24 .got          00001c78  000000000064b380  000000000064b380  0023b380  
>>>> 2**3
>>>>                   CONTENTS, ALLOC, LOAD, DATA
>>>>  25 .data         00000130  000000000064d000  000000000064d000  0023d000  
>>>> 2**4
>>>>
>>>> And objdump -C -R gives this: http://paste.ubuntu.com/6563640/
>>>>
>>>> This would seem to be the relevant entry:
>>>>
>>>> 000000000064ccb8 R_AARCH64_TLS_TPREL64  mongo::_threadOstreamCache
>>>>
>>>> But I don't know what the offset means here and how it relates to the
>>>> 776 in "ldr     x0, [x0,#776]".  0x64c000 + 776 is 0x64c308 which is
>>>>
>>>> 000000000064c308 R_AARCH64_GLOB_DAT  vtable for 
>>>> boost::program_options::typed_value<unsigned int, char>
>>>
>>> This looks wrong.
>>
>> Yeah, it does.  Also poking around at 0x64c308 shows something that
>> looks very much like a vtable for a class called typed_value...
>>
>>>> which is just random, but I don't know if that's a valid thing to be
>>>> looking at :-)  That said, if we examine the memory at 0x64ccb8 and
>>>> interpret it as an offset against tpidr_el0 things *seem* to make sense:
>>>>
>>>> (gdb) x 0x64ccb8
>>>> 0x64ccb8:       0x00000010
>>>> (gdb) x/g $x1 + 0x10
>>>> 0x7fb7ff7700:   0x0000000000000000
>>>>
>>>> The correct value for this tls pointer at this point in time _is_ in
>>>> fact NULL, but obviously this could happen just by chance :-)
>>>>
>>>> Still, looks a bit like a toolchain bug to me.  This is with g++ 4.8
>>>> from trusty fwiw.
>>>
>>> I would be inclined to agree. Is there a simple way to reproduce the build?
>>
>> Ha.  No, I've only seen this when compiling all of mongodb, which takes
>> a pretty long time on hw.  I'll certainly let you know if I can come up
>> with something smaller.  I'll also try with 4.9.
>
> Small is good, but we do have access to hardware so at least it won't
> be days waiting for the model. ;-)
>
>>> (although I don't think I will have time to look at it until the new year)
>>
>> No worries, a bug on launchpad.net/linaro-gcc is the right way to track
>> this properly?
>
> Yeah I think so, although I think it will actually be a binutils bug.

Aaah, you might be onto something there.  I built myself a cross gcc-4.8
today and it appeared to compile things correctly (I didn't actually get
to run it, but the objdump poking looked right) and I got a bit worried
that this was all down to some cosmic ray / corruption when I first
compiled it.  But, the scripts I cargo culted just use compile binutils
from git tip, so if the bug is in binutils...

Cheers,
mwh

_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to