#clang #llvm #llvm-ir #llvm-c -api #llvm-gcc
Вопрос:
У меня есть функция перехвата, подобная этой
void newThreadCreated(void *ptid) {}
Я хочу вставить эту функцию в функцию дочернего потока.
Проблема в том, как передать идентификатор родительского потока (ptid) этой функции.
Любое конкретное решение или мысли?
Заранее спасибо!
Комментарии:
1. Почему вы не / не можете создать вызов? Инструкция вызова — это значение.
2. Извините, но не могли бы вы уточнить. Что вы подразумеваете под «инструкцией вызова является значением».
3. Класс CallInst наследует значение (через несколько промежуточных звеньев), поэтому, если у вас есть a
CallInst*
, у вас есть aValue*
. Как вы можете догадаться, он представляет возвращаемое значение.4. Может быть, вы здесь что-то смешиваете? Т.Е.
thread::get_id
Принадлежит процессу, который генерирует LLVM IR, в то время как IR затем используется в другом процессе (сгенерированной программе). Если вы не находитесь в контексте JIT, thread_id получит «мусорное» значение при использовании в сгенерированной программе.5. @AlexDenisov да, вы правы. Я также заметил это через некоторое время. Что я хочу сделать, так это получить родительский идентификатор и передать его в хук функции дочернего потока. Есть ли у вас решение о том, как это сделать, поскольку, насколько я знаю, в Linux нет способа получить ptid внутри дочернего потока.