Etiquetas locais no GNU assembler; backdrace de impressão gdb como se etiquetas fossem funções

Dois pedaços de código de exemplo; primeiro algum código C ++ chamando em assembly:

/* test1.cc */
#include <stdio.h>

extern "C" void blah();
extern "C" void stuff() {
  printf( "This is a test\n" );
}

int main( int argc, char *argv[] ) {
  blah();

  return 0;
}

... então a montagem:

.file "test2.s"
.text
.globl blah, stuff
.type blah,@function
.type stuff,@function
.align 16

blah:
  /* normal function preamble */
  pushl %ebp
  movl %esp, %ebp

label1:
  call stuff

  leave
  retn

Construído com:

as -g --32 test2.s -o test2.o
clang++ -m32 -g test1.cc -c
clang++ -m32 -g test*.o -o test

Execute-o no gdb, defina um ponto de interrupção em stuff () e observe o backtrace:

gdb test
(gdb) break stuff
(gdb) run
(gdb) back
     #0  stuff () at test1.cc:5
---> #1  0x08048458 in label1 () at test2.s:12
---> #2  0xffffc998 in ?? ()
     #3  0x0804843e in main (argc=1, argv=0xffffca44) at test1.cc:9

Depois de peneirar [editar uma cópia antiga da] documentação do assembler GNU, tentei rótulos prefixados comL & postfixed with$ para ver se impediria a exportação dos rótulos, mas não funcionou.

Se eu tornar os rótulos numéricos, o backtrace parecerá normal, mas não gosto muito da noção de usar rótulos numéricos.

Alguém poderia me apontar na direção certa, por favor?

questionAnswers(1)

yourAnswerToTheQuestion