Etiquetas locales en ensamblador GNU; traza de impresión gdb como si las etiquetas fueran funciones

Dos piezas de código de ejemplo; primero un poco de código C ++ llamando al ensamblaje:

/* 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;
}

... entonces la asamblea:

.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

Construido con:

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

Ejecútelo en gdb, establezca un punto de interrupción en stuff (), luego mire la traza inversa:

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

Después de examinar [editar una copia anterior de] la documentación del ensamblador GNU, probé etiquetas con el prefijoL y postfixed con$ para ver si evitaría que se exportaran las etiquetas, pero no funcionó.

Si hago que las etiquetas sean numéricas, la traza inversa parece normal, pero no me gusta demasiado la idea de usar etiquetas numéricas.

¿Podría alguien señalarme en la dirección correcta, por favor?

Respuestas a la pregunta(1)

Su respuesta a la pregunta