论坛首页
任务活动
问答
论坛专题
登录
注册
9dome猫
+ 关注
粉丝
2
|
主题
141
|
回帖
1577
加好友
私信
帖子
主题
回复
评论
ST源码分析-st_thread_create - 弦外之音
2024-1-18 14:08
ST MCU
96
3916
这里展示一下 jmp_buf 的定义: /* Calling environment, plus possibly a saved signal mask. */ struct ...
上面的代码从逻辑是看,就是保存 6 个寄存器 的值到 pthread->context (jmp_buf)里面。 他这个是直接搞 ...
下面继续 分析 _st_md_cxt_save 函数的代码: _st_md_cxt_save: /* * Save registers. ...
如上图所示,在调 callq 之前 ,rax 跟 rdi 的值 就是 thread->context 的内存地址。所以参数 env 是通过 r ...
......
命令如下: gdb ./obj/lookupdns # 设置参数 set args xianwaizhiyin.net www.baidu.com # 断点 1 b *st_t ...
为了理清楚 MD_SETJMP((_thread)->context) 这句代码干了什么事情,需要一步一步分析。 MD_SETJMP((_threa ...
回到 MD_SETJMP((_thread)->context) 这里的 context 是一个 jmp_buf 的结构, jmp_buf 是操作系统提供的 ...
_st_md_cxt_save 函数的汇编实现如下: .globl _st_md_cxt_save .type _st_md_cxt_save, @functio ...
_ST_INIT_CONTEXT 实际上就是 MD_INIT_CONTEXT,我的环境是 Linux + x86_64,所以MD_INIT_CONTEXT 宏定义如 ...
_ST_INIT_CONTEXT 实际上就是 MD_INIT_CONTEXT,我的环境是 Linux + x86_64,所以MD_INIT_CONTEXT 宏定义如 ...
上面这些都是 变量操作,初始化逻辑,跳过,继续看下面代码。 _ST_INIT_CONTEXT(thread, stack->sp, _st_t ...
继续 分析 st_thread_create() 的后续代码逻辑。 memset(thread, 0, sizeof(_st_thread_t)); memset(ptds, ...
从上图可以看出,stack->stk_bottom ~ stack->stk_sp 中间的空白区域,这块区域 是 协程函数局部变量用的。 ...
上面全部代码执行完之后,栈的内存布局如下:
上面的代码就是把 sp 做 64位对齐,最后 再拿走 _ST_STACK_PAD_SIZE 大小的内存,_ST_STACK_PAD_SIZE 等于 ...
再 从 之前申请的内存里面拿出 sizeof(_st_thread_t) 大小的内存来存储 _st_thread_t 协程。 /* Make stac ...
上面的代码,ST_KEYS_MAX 等于 16,(void *) 在 32位占 4字节,在 64 位占 8字节。所以上面的代码逻辑是 从 ...
上面的代码,ST_KEYS_MAX 等于 16,(void *) 在 32位占 4字节,在 64 位占 8字节。所以上面的代码逻辑是 从 ...
因为我的环境 栈是向下压的,所以 MD_STACK_GROWS_DOWN 定义了。 sp = sp - (ST_KEYS_MAX * sizeof(void * ...
前一页
15
16
17
18
19
20
21
后一页
2
3
近期访客