ARM GCC rename static functions?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi All,

I found ARM GCC renamed some of static functions.

Here is my test code:
$cat 1.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <ucontext.h>

static void my_signal_handler(int signum, siginfo_t* siginfo,
ucontext_t *lpContext)
{
	mcontext_t *mc = &lpContext->uc_mcontext;
	fprintf(stderr, "[CORE]: Catch exception at 0x%x\n", mc->arm_pc);
}

static int register_signal_handler(int sig, void *handler)
{
	int ret = -EINVAL;
	sigset_t signal_set;
	if (sigemptyset(&signal_set) >= 0) {
		struct sigaction sa = {
			.sa_handler  = handler,
			.sa_mask     = signal_set,
			.sa_flags    = SA_SIGINFO,
			.sa_restorer = NULL
		};
		ret = sigaction(sig, &sa, NULL);
		if( ret < 0 )
			fprintf(stderr, "failed to install signal hander.\n");
	}
	return ret;
}

int main()
{
	register_signal_handler(SIGSEGV,my_signal_handler);
	register_signal_handler(SIGILL, my_signal_handler);
	register_signal_handler(SIGBUS, my_signal_handler);
	return 0;
}

Then I did:
$arm-none-linux-gnueabi-gcc -O2 1.c
$arm-none-linux-gnueabi-objdump -dr -j .text a.out

a.out:     file format elf32-littlearm


Disassembly of section .text:

000084a4 <_start>:
    84a4:	e3a0b000 	mov	fp, #0
    84a8:	e3a0e000 	mov	lr, #0
    84ac:	e49d1004 	pop	{r1}		; (ldr r1, [sp], #4)
    84b0:	e1a0200d 	mov	r2, sp
    84b4:	e52d2004 	push	{r2}		; (str r2, [sp, #-4]!)
    84b8:	e52d0004 	push	{r0}		; (str r0, [sp, #-4]!)
    84bc:	e59fc010 	ldr	ip, [pc, #16]	; 84d4 <_start+0x30>
    84c0:	e52dc004 	push	{ip}		; (str ip, [sp, #-4]!)
    84c4:	e59f000c 	ldr	r0, [pc, #12]	; 84d8 <_start+0x34>
    84c8:	e59f300c 	ldr	r3, [pc, #12]	; 84dc <_start+0x38>
    84cc:	ebffffdf 	bl	8450 <_init+0x38>
    84d0:	ebffffdb 	bl	8444 <_init+0x2c>
    84d4:	00008634 	.word	0x00008634
    84d8:	00008610 	.word	0x00008610
    84dc:	00008638 	.word	0x00008638

000084e0 <call_gmon_start>:
    84e0:	e59f3014 	ldr	r3, [pc, #20]	; 84fc <call_gmon_start+0x1c>
    84e4:	e59f0014 	ldr	r0, [pc, #20]	; 8500 <call_gmon_start+0x20>
    84e8:	e08f3003 	add	r3, pc, r3
    84ec:	e7932000 	ldr	r2, [r3, r0]
    84f0:	e3520000 	cmp	r2, #0
    84f4:	012fff1e 	bxeq	lr
    84f8:	eaffffd7 	b	845c <_init+0x44>
    84fc:	000083c8 	.word	0x000083c8
    8500:	00000030 	.word	0x00000030

00008504 <__do_global_dtors_aux>:
    8504:	e59f3010 	ldr	r3, [pc, #16]	; 851c <__do_global_dtors_aux+0x18>
    8508:	e5d32000 	ldrb	r2, [r3]
    850c:	e3520000 	cmp	r2, #0
    8510:	03a02001 	moveq	r2, #1
    8514:	05c32000 	strbeq	r2, [r3]
    8518:	e12fff1e 	bx	lr
    851c:	000108fc 	.word	0x000108fc

00008520 <frame_dummy>:
    8520:	e59f0020 	ldr	r0, [pc, #32]	; 8548 <frame_dummy+0x28>
    8524:	e92d4008 	push	{r3, lr}
    8528:	e5903000 	ldr	r3, [r0]
    852c:	e3530000 	cmp	r3, #0
    8530:	08bd8008 	popeq	{r3, pc}
    8534:	e59f3010 	ldr	r3, [pc, #16]	; 854c <frame_dummy+0x2c>
    8538:	e3530000 	cmp	r3, #0
    853c:	08bd8008 	popeq	{r3, pc}
    8540:	e12fff33 	blx	r3
    8544:	e8bd8008 	pop	{r3, pc}
    8548:	000107c4 	.word	0x000107c4
    854c:	00000000 	.word	0x00000000

00008550 <my_signal_handler>:
    8550:	e59f300c 	ldr	r3, [pc, #12]	; 8564 <my_signal_handler+0x14>
    8554:	e592205c 	ldr	r2, [r2, #92]	; 0x5c
    8558:	e5930000 	ldr	r0, [r3]
    855c:	e59f1004 	ldr	r1, [pc, #4]	; 8568 <my_signal_handler+0x18>
    8560:	eaffffc9 	b	848c <_init+0x74>
    8564:	000108f8 	.word	0x000108f8
    8568:	00008710 	.word	0x00008710

0000856c <T.25>:
    856c:	e92d4070 	push	{r4, r5, r6, lr}
    8570:	e24dde11 	sub	sp, sp, #272	; 0x110
    8574:	e28d4090 	add	r4, sp, #144	; 0x90
    8578:	e1a06000 	mov	r6, r0
    857c:	e1a00004 	mov	r0, r4
    8580:	ebffffac 	bl	8438 <_init+0x20>
    8584:	e3500000 	cmp	r0, #0
    8588:	b3e04015 	mvnlt	r4, #21
    858c:	ba000012 	blt	85dc <T.25+0x70>
    8590:	e28d5004 	add	r5, sp, #4
    8594:	e3a01000 	mov	r1, #0
    8598:	e3a0208c 	mov	r2, #140	; 0x8c
    859c:	e1a00005 	mov	r0, r5
    85a0:	ebffffb0 	bl	8468 <_init+0x50>
    85a4:	e1a01004 	mov	r1, r4
    85a8:	e3a02080 	mov	r2, #128	; 0x80
    85ac:	e59f4050 	ldr	r4, [pc, #80]	; 8604 <T.25+0x98>
    85b0:	e28d0008 	add	r0, sp, #8
    85b4:	e58d4004 	str	r4, [sp, #4]
    85b8:	ebffffad 	bl	8474 <_init+0x5c>
    85bc:	e3a03004 	mov	r3, #4
    85c0:	e1a00006 	mov	r0, r6
    85c4:	e1a01005 	mov	r1, r5
    85c8:	e3a02000 	mov	r2, #0
    85cc:	e58d3088 	str	r3, [sp, #136]	; 0x88
    85d0:	ebffffb0 	bl	8498 <_init+0x80>
    85d4:	e2504000 	subs	r4, r0, #0
    85d8:	ba000002 	blt	85e8 <T.25+0x7c>
    85dc:	e1a00004 	mov	r0, r4
    85e0:	e28dde11 	add	sp, sp, #272	; 0x110
    85e4:	e8bd8070 	pop	{r4, r5, r6, pc}
    85e8:	e59f1018 	ldr	r1, [pc, #24]	; 8608 <T.25+0x9c>
    85ec:	e3a02021 	mov	r2, #33	; 0x21
    85f0:	e5913000 	ldr	r3, [r1]
    85f4:	e59f0010 	ldr	r0, [pc, #16]	; 860c <T.25+0xa0>
    85f8:	e3a01001 	mov	r1, #1
    85fc:	ebffff9f 	bl	8480 <_init+0x68>
    8600:	eafffff5 	b	85dc <T.25+0x70>
    8604:	00008550 	.word	0x00008550
    8608:	000108f8 	.word	0x000108f8
    860c:	00008734 	.word	0x00008734

00008610 <main>:
    8610:	e92d4008 	push	{r3, lr}
    8614:	e3a0000b 	mov	r0, #11
    8618:	ebffffd3 	bl	856c <T.25>
    861c:	e3a00004 	mov	r0, #4
    8620:	ebffffd1 	bl	856c <T.25>
    8624:	e3a00007 	mov	r0, #7
    8628:	ebffffcf 	bl	856c <T.25>
    862c:	e3a00000 	mov	r0, #0
    8630:	e8bd8008 	pop	{r3, pc}

00008634 <__libc_csu_fini>:
    8634:	e12fff1e 	bx	lr

00008638 <__libc_csu_init>:
    8638:	e92d47f0 	push	{r4, r5, r6, r7, r8, r9, sl, lr}
    863c:	e1a08000 	mov	r8, r0
    8640:	e1a07001 	mov	r7, r1
    8644:	e1a06002 	mov	r6, r2
    8648:	ebffff72 	bl	8418 <_init>
    864c:	e59f30a4 	ldr	r3, [pc, #164]	; 86f8 <__libc_csu_init+0xc0>
    8650:	e59f00a4 	ldr	r0, [pc, #164]	; 86fc <__libc_csu_init+0xc4>
    8654:	e59fa0a4 	ldr	sl, [pc, #164]	; 8700 <__libc_csu_init+0xc8>
    8658:	e0639000 	rsb	r9, r3, r0
    865c:	e08fa00a 	add	sl, pc, sl
    8660:	e1b09149 	asrs	r9, r9, #2
    8664:	e08aa003 	add	sl, sl, r3
    8668:	08bd87f0 	popeq	{r4, r5, r6, r7, r8, r9, sl, pc}
    866c:	e3a04001 	mov	r4, #1
    8670:	e1a00008 	mov	r0, r8
    8674:	e1a01007 	mov	r1, r7
    8678:	e1a02006 	mov	r2, r6
    867c:	e2495001 	sub	r5, r9, #1
    8680:	e1a0e00f 	mov	lr, pc
    8684:	e59af000 	ldr	pc, [sl]
    8688:	e1540009 	cmp	r4, r9
    868c:	e0055004 	and	r5, r5, r4
    8690:	28bd87f0 	popcs	{r4, r5, r6, r7, r8, r9, sl, pc}
    8694:	e3550000 	cmp	r5, #0
    8698:	0a000007 	beq	86bc <__libc_csu_init+0x84>
    869c:	e1a00008 	mov	r0, r8
    86a0:	e1a01007 	mov	r1, r7
    86a4:	e1a02006 	mov	r2, r6
    86a8:	e3a04002 	mov	r4, #2
    86ac:	e1a0e00f 	mov	lr, pc
    86b0:	e59af004 	ldr	pc, [sl, #4]
    86b4:	e1540009 	cmp	r4, r9
    86b8:	28bd87f0 	popcs	{r4, r5, r6, r7, r8, r9, sl, pc}
    86bc:	e2845001 	add	r5, r4, #1
    86c0:	e1a00008 	mov	r0, r8
    86c4:	e1a01007 	mov	r1, r7
    86c8:	e1a02006 	mov	r2, r6
    86cc:	e1a0e00f 	mov	lr, pc
    86d0:	e79af104 	ldr	pc, [sl, r4, lsl #2]
    86d4:	e2854001 	add	r4, r5, #1
    86d8:	e1a00008 	mov	r0, r8
    86dc:	e1a01007 	mov	r1, r7
    86e0:	e1a02006 	mov	r2, r6
    86e4:	e1a0e00f 	mov	lr, pc
    86e8:	e79af105 	ldr	pc, [sl, r5, lsl #2]
    86ec:	e1540009 	cmp	r4, r9
    86f0:	3afffff1 	bcc	86bc <__libc_csu_init+0x84>
    86f4:	e8bd87f0 	pop	{r4, r5, r6, r7, r8, r9, sl, pc}
    86f8:	ffffff04 	.word	0xffffff04
    86fc:	ffffff08 	.word	0xffffff08
    8700:	00008254 	.word	0x00008254

The ARM GCC renames the static function name from register_signal_handler to
T.25, which will bring extra confusions in reading the unassembly code.

Why does gcc do these renaming stuff?


-- 

Best Regards,
Pan Ruochen


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux