Я столкнулся с "SYS # 0" на вершине стека и не могу найти никакой документации относительно того, что это значит.
- Компилятор: g ++
- ОС: Solaris 9
- Арка: SPARC
- Диспетчер памяти libhoard_32.so из Запас 3.5.1
Мы использовали «gcore» для генерации файла ядра. Если посмотреть на результат выполнения команды "pstack" для основного файла, единственный поток, который делал что-нибудь интересное, имел следующее в самом верху своего стека вызовов:
ff309858 SYS#0 ()
ff309848 void MyHashMap<const void*,unsigned,AlignedMmapInstance<65536U>::SourceHeap>::set(const void*,unsigned) (ff31eed4, 9bf20000, 10000, 40, 9bf1fff0, ff31e738) + 134
...
pflags для этого LWP показывает:
/8: flags = PR_STOPPED|PR_ISTOP|PR_ASLEEP
why = PR_REQUESTED
sigmask = 0xfffffeff,0x00003fff
Я не смог найти упоминаний об этом синтаксисе в документации Sun.
Редактировать: Кажется, что процесс завис перед тем, как выполнить gcore. "SYS # 0" как-то взаимосвязано с зависаниями процесса?
Редактировать: Добавлен следующий кадр стека и ссылка на запас, вывод pflags
Редактировать: Принятый ответ правильный. Кроме того, по крайней мере в SPARC регистр g1
должен содержать номер системного вызова, но в нашем основном файле этого не произошло.
Тема "что такое косвенный системный вызов?" вероятно, хороший материал для другого вопроса.