This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Re: ARM GCC rename static functions?
- From: Andrew Haley <aph at redhat dot com>
- To: Pan ruochen <panruochen at gmail dot com>
- Cc: gcc-help <gcc-help at gcc dot gnu dot org>
- Date: Mon, 27 Jun 2011 10:57:05 +0100
- Subject: Re: ARM GCC rename static functions?
- References: <BANLkTimZDCwFRRry7whXsr+zgO7rzhsaZg@mail.gmail.com>
On 27/06/11 07:02, Pan ruochen wrote:
> 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
>
>
> 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?
When optimizing, gcc generates clones of functions that are specialized to
particular tasks. T.25 is a clone of register_signal_handler() that is
specialized to my_signal_handler(). You can see this if you read the assembly
language output.
Andrew.