Re: Suspected bug in DW_OP_addr handling

Yichao Yu via Gdb <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <CAMvDr+SVJHczCJ_Em3uT_VKCvAedeCE9cK1Kp8f=QNGxn2Ro3Q@mail.gmail.com>
> My understanding is:

Thanks for the detailed explanation!

>
>  - normally, a value given by DW_OP_addr is an address that should be
>    relocated with the base address of the objfile

OK, this is my confusion I guess. I guess I wasn't sure what "address"
refers to in the dwarf spec.
I now see that dwarf spec has a section dedicated to relocation (7.3)
and it mentions that dw_op_addr should be relocated. I was previously
confused by the "constant address" in table 7.9 in 7.7.1 and assumed
that it is the full address.

The following then all makes sense.

>  - the DW_OP_GNU_push_tls_address operation (now called
>    DW_OP_form_tls_address in DWARF 5) expects some kind of value on top
>    of the stack, identifying the TLS variable to fetch.  It's
>    implementation-defined what this value means, but in practice it
>    means it's some value that should not be relocated.
>  - a contemporary version of GCC produces something like this for a TLS
>    variable's DW_AT_location:
>
>      DW_OP_const8u 0x4, DW_OP_form_tls_address
>
>  - A version of gcc in the past must have used this instead:
>
>      DW_OP_addr 0x4, DW_OP_form_tls_address
>
> The usage of DW_OP_addr was wrong, and it made so GDB had to avoid
> relocating the DW_OP_addr value in this particular case.  So it is
> checking, if we have DW_OP_addr followed by DW_OP_form_tls_address, then
> we don't relocate, because we are in this buggy situation.
>
> And so the condition:
>
>           if (op_ptr >= op_end || *op_ptr != DW_OP_GNU_push_tls_address)
>             result += this->m_per_objfile->objfile->text_section_offset ();
>
> looks right to me.  It says, only relocate if:
>
>  - DW_OP_addr is the last operation of the sequence
>  - the following op is not DW_OP_form_tls_address / DW_OP_GNU_push_tls_address
>
> Simon
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.