LINUX.ORG.RU

[gcc] "." в идентификаторе

 


0

2

Есть функция, и имя ее начинается с ".", например, .udiv

libgcc.a:

00000000 T .udiv

Собственно, вопрос: как объяснить компилятору, что это функция, у нее есть адрес и ее можно вызывать? И вообще, как обращаться к глобальным символам с точкой в имени?

★★

А как так получилось? В C и в многих других языках идентификатор может начинатся только с буквы же.

Kosyak ★★★★
()

> И вообще, как обращаться к глобальным символам с точкой в имени?

$ gcc -x c -o test.o -c - <<<'int dot_udiv();int foo(){return dot_udiv();}'
$ objcopy --redefine-sym dot_udiv=.udiv test.o test_.o
$ nm test.o test_.o

test.o:
                 U dot_udiv
0000000000000000 T foo

test_.o:
                 U .udiv
0000000000000000 T foo
$ _

но лучше их не вызывать: такие функции могут иметь нестандартный вызов, не зря же их «спрятали».

arsi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.