繁体   English   中英

在glibc中,“ _ L_lock _%=”如何变为“ _L_lock_432”?

[英]How does `_L_lock_%=` become `_L_lock_432` in glibc?

我正在阅读glibc源代码,试图调试死锁。

在我的堆栈跟踪中,我看到:

#0  0x00007ff58b449eec in __lll_lock_wait_private () from /lib64/libc.so.6
#1  0x00007ff58b3bda31 in _L_lock_423 () from /lib64/libc.so.6
#2  0x00007ff58b3bbca8 in __GI__IO_link_in () from /lib64/libc.so.6
#3  0x00007ff58b3bab92 in __GI__IO_file_init () from /lib64/libc.so.6

但通过阅读代码,以唯一的参考_L_lock_是在宏观lll_locklowlevellock.h

在那里,我在一个内联汇编语句中看到一个字符串:

".type _L_lock_%=, @function\n"

这以某种方式成为我的调用堆栈中的函数_L_lock_423 423从哪里出现? 什么是%=表示法? %=在组装中是什么意思?

gcc docs中所述

'%='-输出一个数字,该数字对于整个编译过程中的asm语句的每个实例都是唯一的。 在创建本地标签并在生成多个汇编指令的单个模板中多次引用它们时,此选项很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM