Two pieces of example code; first some C++ code calling into 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;
}
... then the assembly:
.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
Built with:
as -g --32 test2.s -o test2.o
clang++ -m32 -g test1.cc -c
clang++ -m32 -g test*.o -o test
Run it under gdb, set a breakpoint on stuff(), then look at the 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
After sifting through [edit an older copy of] the GNU assembler documentation, I tried labels prefixed with L
& postfixed with $
to see if it would prevent the labels from being exported, but it didn't work.
If I make the labels numeric the backtrace looks normal, but I'm not overly fond of the notion of using numeric labels.
Could someone point me in the right direction, please?
.L
(dot L
). For example,.Llabel1
works. – Sabol