Как передать идентификатор родительского потока в хук функции LLVM в дочернем потоке?

#clang #llvm #llvm-ir #llvm-c -api #llvm-gcc

Вопрос:

У меня есть функция перехвата, подобная этой

 void newThreadCreated(void *ptid) {}
 

Я хочу вставить эту функцию в функцию дочернего потока.
Проблема в том, как передать идентификатор родительского потока (ptid) этой функции.
Любое конкретное решение или мысли?

Заранее спасибо!

Комментарии:

1. Почему вы не / не можете создать вызов? Инструкция вызова — это значение.

2. Извините, но не могли бы вы уточнить. Что вы подразумеваете под «инструкцией вызова является значением».

3. Класс CallInst наследует значение (через несколько промежуточных звеньев), поэтому, если у вас есть a CallInst* , у вас есть a Value* . Как вы можете догадаться, он представляет возвращаемое значение.

4. Может быть, вы здесь что-то смешиваете? Т.Е. thread::get_id Принадлежит процессу, который генерирует LLVM IR, в то время как IR затем используется в другом процессе (сгенерированной программе). Если вы не находитесь в контексте JIT, thread_id получит «мусорное» значение при использовании в сгенерированной программе.

5. @AlexDenisov да, вы правы. Я также заметил это через некоторое время. Что я хочу сделать, так это получить родительский идентификатор и передать его в хук функции дочернего потока. Есть ли у вас решение о том, как это сделать, поскольку, насколько я знаю, в Linux нет способа получить ptid внутри дочернего потока.