在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_
的唯一引用是在lowlevellock.h
中的宏lll_lock
中。
在那里,我在内联程序集语句中看到一个字符串:
".type _L_lock_%=, @functionn"
这以某种方式成为我的调用堆栈中_L_lock_423
的函数。423
从哪里出现?什么是%=
符号?%= 在汇编中是什么意思?
如 gcc 文档中所述:
'%=' - 输出一个数字,该数字对于整个编译中 asm 语句的每个实例是唯一的。当创建本地标签并在生成多个汇编程序指令的单个模板中多次引用它们时,此选项很有用。
相关文章:
- 函数何时会在c++中包含stack_Unwind_Resume调用
- Python中的for循环与C++有何不同
- 为什么 -1 在 C++ 中变成 -842150451?
- 尝试构建"lock-free"数据结构C++
- 在C++中释放内存期间,迭代器与指针有何不同
- 这里的计数如何变成 5?
- 为什么 c++11 std::lock 和 std::scoped_lock 至少需要 2 个参数?
- 为什么"weak.lock()"返回"nullptr" "auto weak=std::make_shared<int>(42);"的定义?
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- DRD 报告"conflicting load" std::mutex::lock 上的错误
- 在 std::tie 中使用 std::weak_ptr::lock()
- 字符串变成链表,然后检查括号余额
- 类中的 C++ int 被设置为值,似乎不知从何而来
- 停止与GLIBC的联系,将时间变成__strftime_l
- -fvisibility-inline-hidden 与 gcc 中的 -fvisibility=hidden 有何不同
- 为什么我的有线球体在平移和更改相机角度时会变成椭球体?
- std::lock_guard 怎么可能比 std::mutex::lock() 更快?
- 有没有办法把它变成一个循环,让它更具包容性?
- std::mutex::lock() 产生奇怪(和不必要的)ASM 代码
- "lock cmpxchg"如何在装配中工作?