Re: The 'cold' function attribute and GDB

Kevin Buettner
2019-05-02T19:13:08Z

On Thu, 02 May 2019 21:51:26 +0300
Eli Zaretskii <eliz@gnu.org> wrote:

> > Date: Thu, 2 May 2019 11:25:17 -0700
> > From: Kevin Buettner <kevinb@redhat.com>
> > Cc: gdb-patches@sourceware.org, simark@simark.ca
> >
> > (gdb) x/i 0x000000000041fed1
> > 0x41fed1 <print_vectorlike+4293473313>: callq 0x41cca5 <emacs_abort>
> > (gdb) b *0x41fed1
> > Breakpoint 6 at 0x41fed1: file /ironwood1/emacs-git/f30/bld/../../emacs/src/print.c, line 1824.
> > (gdb) info line *0x41fed1
> > Line 1824 of "/ironwood1/emacs-git/f30/bld/../../emacs/src/print.c"
> > starts at address 0x41fed1 <print_vectorlike+4293473313>
> > and ends at 0x5873b0 <print_unwind>.
> >
> > These look okay to me too. On Linux, I think we're lacking the minimal
> > symbol which Eli is seeing on Windows.
>
> Don't you see print_vectorlike.cold in the debug info, with objdump or
> elfread? If not, perhaps ELF binaries record cold sections in some
> different way from PE-COFF.
>
> I also see a lot of *.cold symbols with "nm -A" on the Emacs binary.
> Do you?

I hadn't checked before, but I do see .cold symbols...

emacs:000000000058cab0 t print_vectorlike
emacs:000000000041fed1 t print_vectorlike.cold

The address for print_vectorlike.cold is exactly the address for the
second address range for print_vectorlike:

Address range 0x41fed1 to 0x41fed6:
0x000000000041fed1 <+-1493983>: callq 0x41cca5 <emacs_abort>

It's interesting that this _doesn't_ show up when doing the following:

(gdb) x/i 0x000000000041fed1
0x41fed1 <print_vectorlike+4293473313>: callq 0x41cca5
<emacs_abort>

What do you see when you issue a similar command for your build
of emacs on Windows? (Apologies if you've already shown this to
me.)

Kevin