Local labels im GNU Assembler; GDB-Druck-Backtrace, als ob Etiketten Funktionen sind

Zwei Teile des Beispielcodes; Zuerst ein paar C ++ - Codes, die in Assembly aufrufen:

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

... dann die Montage:

.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

Errichtet mit:

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

Führen Sie es unter gdb aus, setzen Sie einen Haltepunkt für stuff () und schauen Sie sich dann den Backtrace an:

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

Nach dem Durchsuchen von bearbeiteei einer älteren Kopie der GNU-Assembler-Dokumentation habe ich versucht, Labels mit dem Präfix @ zu verwendeL & mit @ nachfixie$, um zu sehen, ob der Export der Etiketten verhindert wird, aber es hat nicht funktioniert.

Wenn ich die Beschriftungen numerisch mache, sieht die Rückverfolgung normal aus, aber ich mag den Gedanken, numerische Beschriftungen zu verwenden, nicht sonderlich.

Kann mir bitte jemand die richtige Richtung zeigen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage