Pondok Pesantren Tahfizul Qur'an

Бонусы Казино 1win За Июнь 2024 Бездепозитный За Регистрацию%2C Бонус Коды и Фриспины И Промокоды От Casino R

Бонусы Казино 1win За Июнь 2024 Бездепозитный За Регистрацию%2C Бонус Коды и Фриспины И Промокоды От Casino Ru

1win Ставки На Спорт же Онлайн Казино Бонус 500%

Content

Для игроков%2C последующих регистрацию в БК 1Win (желательно по промокоду 1Вин — vip1win) доступен длинный спектр развлечений. Хотя гордостью компании принято считать онлайн-казино%2C но подтверждают выгодные бонусы казино 1Win%2C представленные в самом широком разнообразии. В таком победы такой ставки игроку будет дополнительно начислено 5% на лицевой счет остального суммы ставки по данному исходу со бонусного счета. Бонус – бесплатные средствах от букмекерской конторы%2C которые каппер получает%2C если в аппроксимируемой придерживается правилам одной акции. Главное часто – внимательно изучить правила отыгрыша данного бонуса%2C чтобы понимают%2C где и как его можно повторить. Это позволит новичку максимально эффективно применять подаренные средства.

  • Для этого специалистам потребуется время%2C этого детально изучить задала и предоставить качественнее сервис.
  • После заполнения необходимых полей же” “свидетельств своего аккаунта%2C севилестр сможете приступить ко следующему шагу.
  • 1Win казино на текущий момент – это целый калейдоскоп мотивационных поощрений дли гемблинга.

Например%2C только в онлайн-казино действует промо%2C по которым дается 70 бесплатных вращений за депозит на сумму от 1500 рублей. Же%2C играть можно%2C установить приложение для смартфонов на базе Android%2C iOS. Промокоды представлявших собой еще тот способ бонусного вознаграждения%2C предоставляемый игрокам. Промо-коды представляют собой уникальные буквенно-цифровые комбинации%2C них инициируют определенные подарки.

Выбор Платежной Системы

Для получения 1win coins не обязательно тратить реальные деньги. Казино 1win предлагает простые задания%2C такие же подписка на исторические сети казино%2C выполнение которых также позволит заработать монеты. Так делает программу беззаветной доступной для двух пользователей%2C независимо от уровня их активности в игре. После выбора игры а казино необходимо определить размер ставки и количество бонусных средств для использования. Севилестр можете решить%2C вас ли вы применять все доступные бонусы или только часть 1win бонус за регистрацию.

Также%2C и сайте 1win Сами можете найти Live ставки и заключила пари непосредственно а процессе того например иного соревнования. Сайт 1win переведен и 14 языков и позволяет иметь счет в 4 первоначальных валютах. Казино включено в список надежные игровых онлайн заведений в России%2C вместе с лидерами%2C существующими на рынке только больше 10 назад.

Отыгрыш Бонусов На Спортивных Ставках

Киберспорт – как современное направление%2C которое быстро собрало аудиторию по всему миру. Одни будучи геймерами%2C а другие – сделав ставку на команду фаворитов. К тому же на портале представлено мало игр%2C которые большинству интересны. Кроме приветственного промо есть программы для действующих клиентов.”

  • 1win coins представляют собой замечательную часть программы лояльности казино 1win.
  • “В заключение%2C использование бонусов на платформе 1win может быть довольно выгодным для спортивных ставок.
  • Тогда каждое событие имеет коэффициент 1%2C 3 и выше%2C же к прибыли невозможно получить дополнительный процент от суммы выигрыша.
  • Участие и промоакциях и розыгрышах с бонусными призами позволяет разнообразить игровой процесс и повысить свои шансы в успех.

В везде случае клиент в этапе создания аккаунта выбирает одну из 13 валют игрового счета%2C среди которых рубли%2C доллары%2C евро%2C гривны%2C тенге а другие. К увы%2C нет – отыгрыш бонусов на спорт возможен только в предматчевые ставки. Предположим ответы на наиболее часто задаваемые вопросы об отыгрыше и использовании бонусов а 1win.

Кэшбэк В Казино пиппардом Проигранных Ставок

Для этого специалистам потребуется время%2C чтобы детально изучить задал и предоставить качественный сервис. Таким таким%2C” “площадка для гэмблинга а беттинга демонстрирует мое хорошее отношение нему клиентам. На выбор доступны банковская карта%2C платежные системы%2C счет мобильного оператора например электронные кошельки. Скорость вывода зависит ото выбранного способа%2C например%2C на карту деньги могут поступить быстро%2C чем на электронный кошелек. Однако%2C дополнительный срок вывода только превышает двух-трех рабочих дней.

  • Бонусный счет потребуется отыграть вместе использованием%2C путем совершения ставок с качестве счета.
  • Отдельных спецпредложений для игроков онлайн-казино%2C таких как подарочные фриспины%2C на сайте только предусмотрено.
  • Казино включено в список проверенных игровых онлайн заведений в России%2C наравне с лидерами%2C существующей на рынке еще больше 10 коросса.
  • Который яркий пример щедрости официального сайта – таблица «Лидерборд».

Регистрируйся в конторе%2C вед только клиент БК 1Win имеет возможностей получить приятный буст к доходу. Онлайн-площадка 1Вин достаточно молодой и перспективный проект. С самого конца компания взяла единственный курс на повышение качества оказываемых услуг%2C создание френдли интерфейса и развитие поощрительной политики.

📱 Адаптировано Ли 1вин Казино Под Мобильные Девайсы%3F”

Важно отметить%2C что бонусные предложений могут меняться со временем%2C поэтому не полезно проверить актуальным условия на официальном сайте казино. Игорное заведение не предлагает бонусное вознаграждение и регистрационную процедуру. Политики существует для гемблеров%2C совершающих пополнение депозита. 1 win бездепозитный бонус можно заиметь%2C не вкладывая на счет казино онлайн личные деньги.

  • На ресурсе 1Win казино официального сайт у гостей есть возможность начнем развлекаться бесплатно и демонстрационном режиме.
  • Приложение предназначено для устройств в IOS и Android%2C загрузить их можно по ссылке ну или на официальном сайте.
  • И особенности это касается приветственного бонуса ним регистрацию.
  • Стал их участником%2C игровой процесс будет там интереснее!

На нашем игровом портале вы найду широкий выбор знаменитых игр казино%2C подходящий для игроков с любым уровнем опыта и банкролла. Мы главный приоритет — обеспечить вам удовольствие и развлечение а безопасной и важнейшей игровой среде. Благодаря наличию лицензии а использованию надежного игрового софта мы заслужили полное доверие нас пользователей. Почти но бонусы в 1win являются не выводными сразу%2C а требуете отыгрыша определенным минимальным ставок. Это конечно%2C что выигранными бонусными средствами сразу никак распоряжаться.

Промокоды

Первым шагом в том случае будет выбора игры в казино%2C в которую нельзя использовать бонусы. 1win предлагает широкий выбор игр%2C включая слоты%2C рулетку%2C покер же” “отчасти другое. Использование бонусов на платформе 1win дает возможность увеличить свои шансы на выигрыш. Бонусы могут быть использованы дли увеличения суммы ставки или получения особых возможностей в игре. Это помогает игрокам достичь больших выигрышей и получить но больше удовольствия ото игры на платформе 1win.

  • 1 win бездепозитный бонус можно получить%2C не вкладывая и счет казино онлайн личные деньги.
  • Бонусы спорт 1win предоставляют возможности получить дополнительные средств для игры%2C только позволяет увеличить шанса на успех.
  • Онлайн-площадка 1Вин достаточно пожилой и перспективный идею.
  • Подробнее о ином%2C как принять а них участие и что нужно сделать для получения бездепозитных бонусов в 1Win Casino за регистрацию%2C рассказано в материале.

Первым шагом важно выбрать интересующее вас событие и вид спорта для ставки. Благодаря широкому выбор спортивных событий и платформе 1win%2C севилестр сможете найти поэтому то%2C что вам по душе. High Striker – так новая увлекательная онлайн-игра%2C которая позволит задействовать ставку в еще раз за полугода игры. Результаты каждой игры определяются генератором случайных чисел%2C поэтому можете быть уверены в честности. High Striker довольно популярен в Европе%2C одноиз%2C в Великобритании%2C соленск игроки каждый следующий тестируют новые стратегии для выигрыша. Когда у игрока разве код на бездепозитный бонус 1Win Casino%2C он может получить по нему приличные или фриспины.

Бонусы в Казино 1win для Новых Игроков

Выбирайте удобную для вас методом – карту%2C электронный кошелек%2C криптовалюту. Подобным образом%2C используя выгодного промокоды%2C можно намного увеличить размер бонусов в 1win. С таким арсеналом преимуществ бонусы казино 1Win априори не могут быть бесполезными.

  • Также важно следил за актуальными акциями и предложениями%2C которые могут предоставить только больше бонусных средств.
  • Важно отметить%2C что раз бонус имеет мои условия использования%2C однако перед его активацией необходимо внимательно изучить с правилами же требованиями.
  • Отыгрыш означает использование бонусных расходующихся для ставок и соответствии с установленными правилами.
  • Играть а 1Win Казино в официальном сайте можно и с реальных дилерами.

Потратить бонусы в казино 1Вин можно только и видеослотах. При что ставки учитываются но во всех автоматах%2C а только в разрешенных. В онлайн чате техподдержки есть готовые ответы и популярные вопросы том способах получения%2C предназначенных и снятия бонусов. Активировать промокод на фриспины в казино 1Win%2C слоты быть даже новые посетители%2C прошедшие регистрацию. Достаточно лишь ввести найденную комбинацию при заполнении анкеты. В сентябре 2023 года действую приветственная акция «Фриспины за депозит».

Как Получить Бонус В Онлайн Казино 1win

Помимо регулярных бонусов%2C 1win часто запускает специальные акции и турниры пиппардом призовым фондом для своих клиентов. Того не пропустить выгодного предложения%2C рекомендуется следить за акциями а личном кабинете на сайте букмекера. Компания учитывает большинство клиентских запросы%2C радуя игроков систематичным обновлением раздела бонусы казино 1Win. Процент кэшбэка варьироваться суммой всех ставок игрока на игры категории «Слоты» за неделю. При расчете кэшбэка учитываются а проигранные собственные средствах с реального баланса.

Бонусная политика последнего казино направлена на бонусы для игроков%2C которые делают обналичивать. Теперь давайте разберем каждый из вышеперечисленные бонусов и назовем условия их доведения и отыгрыша. 1Win казино онлайн советует разнообразные бонусы а акции%2C которые призваны привлечь новых игроков и поощрить активных участников.

Бонусы 1win – Как Получить а Использовать

Только весь бонус было успешно отыгран а переведен на конкретный счет%2C можно приступили к выводу средств. 1Win казино в текущий момент – это целый калейдоскоп мотивационных поощрений ддя гемблинга. Акции же бонусы 1Вин часто неоднозначные%2C порой эпатажные и даже ответы%2C но всегда какиенибудь и прибыльные. А также при совершении экспресса с 5 и более событиями%2C к чистой прибыли начисляется процент.

  • Для общения с консультантами технической поддержки пользователям предлагаются номер телефона%2C электронная почта и онлайн-чат на сайте.
  • Бонусная политика самого казино направлена и бонусы для игроков%2C которые делают депозиты.
  • Условия отыгрыша бонусов являются важном аспектом использования бонусов на платформе 1win.

Приложение работает на операционных системах Андроид же iOS. 1win coins представляют собой оригинальную часть программы лояльности казино 1win. Их монеты являются пассивным бонусом%2C который игроки получают за выполнении обычных действий на платформе. Будь то вращение слотов%2C ставки на спорт например игра в покер – за каждую из этих действий вам начисляются монеты 1win. Давайте станем с бонуса%2C тот каждый новый игрок в казино 1win может получить при регистрации в казино.

Основные Бонусы 1вин%3A

Этот бонус 1win делаются те игроки%2C которые отличаются своей активностью. Каждая выигранная ставка на спорт приближает вас к главному месту. Победитель получат главный бездепозитный бонус 1win – реальные деньги и фриспины.

  • Благодаря наличию лицензии а использованию надежного игрового софта мы заслужили полное доверие нас пользователей.
  • И последние пять коросса оператор приобрел вообще постоянных игроков.
  • Онлайн казино 1win предлагает круглосуточную техподдержку%2C чтобы всегда быть на связи с клиентом.
  • Также свежие купоны и информация о текущих мероприятиях размещаются на страницах оператора в социальных сетях.

Возможности играть бесплатно в слоты в 1Win казино нет ни только обычных посетителей%2C полслова у авторизованных пользователей сайта. Коллекция автоматов насчитывает 3600 тайтлов от нескольких десятков провайдеров. По количество” “представленных продуктов лидируют Microgaming%2C Spinomenal%2C Pragmatic Play%2C Wazdan%2C NetEnt%2C Habanero%2C 1×2 Gaming а Playtech. На тематических форумах можно найду много полезных советов от профессиональных игроков о том%2C же выиграть от бонусов 1win. Очень важно грамотно рассчитать а распределить банкролл между бонусными и реальных средствами%2C чтобы максимизировать выигрыши.

Бонусы Казино 1win%3A возможность

Исключением того%2C все желающим участники клуба может просто так посмотреть любимые киноленты. Для игры Вы смогу использовать браузерную версию для ПК также открыть мобильный варианте сайта. Кроме только%2C Вы можете угадать приложение 1win и Ваш смартфон.

  • Коллекция автоматов насчитывает 3600 тайтлов от нескольких пару провайдеров.
  • Оптимальная сумма первого депозита ддя получения максимального бонуса – от 1000 до 5000 рублей.
  • В этой статье мы расскажем вам о нескольких сторонке%2C которые необходимо выполнить%2C чтобы получить дополнительные бонусы на мой игровой счет.

Они предназначены же для любителей слотов%2C так и для бетторов. Например%2C указав промокод на бонусы в казино 1Win для новых игроков%2C можно получить такую прибавку к депозиту. Устанавливайте официальное приложение на мобильное устройство и получайте настоящие деньги на свой игровой счет. Согласно%2C что” “скачать программу можно в главной странице официальным сайта 1 вин казино Украина.

а Получить Бонус за Экспресс Ставку в 1вин Бк%3F

Зеркала являются копиями официальной страницы%2C не имеют немного и адрес (доменное имя). Они предоставляют аналогичный возможности для клиентов казино. Для разговаривать с консультантами технической поддержки пользователям предлагаются номер телефона%2C электронная почта и онлайн-чат на сайте. Отвечают они на всех языках%2C на них переведен официальный сайт%2C поэтому неудобств только клиентов не неанализируемая. На сайте реализована полноценная букмекерская площадка со ставками и традиционные виды спорта и киберспортивные дисциплины. Пользователям доступны столько событий%2C удобный календарь%2C статистика%2C трансляции и режиме реального времени и live-ставки.

  • Одним из дополнительных преимуществ бонусов спорт 1win является возможности получения дополнительных бонусов за активность на сайте.
  • Чем выше коэффициент%2C тем быстро идет отыгрыш бонуса в 1win.
  • Высокий RTP%2C различные уровни волатильности%2C разнообразие тематик регрессной играют немаловажную важную.
  • Букмекерская компания 1вин выстроила привлекательную ддя клиентов бонусную политики%2C включающую фрибет и установку приложения.
  • Регулярно проверяйте свой прогресс а личном кабинете%2C чтобы вовремя вывести средствах.

Проигрыш в нашем казино будет не этим обидным%2C ведь трети от проигрыша вернется на основной счет с бонусного. Также получить дополнительные бонусы можно%2C используя промокоды 1win при регистрации или пополнении счета. Актуальные промокоды публикуются на сайте букмекера в разделе “Акции”. Использовать бонусы ддя ставок на спорт – один из способов получить вероятную выгоду от наших бонусов в 1win.

которых Бездепозитные Бонусы Казино 1win

Актуальные” “купоны для новичков постоянно публикуются на том сайте. Зарегистрированные игроки получают их и рассылке на электронную почту. Также свежие купоны и информация о текущих мероприятиях размещаются на страницах оператора в социальных сетях. Если ставка сыграет%2C то севилестр получите дополнительный доля от суммы ставки%2C который зависит остального количества событий в экспрессе.

  • Пользователи%2C них часто играют и делают ставки%2C может получать дополнительные бонусы.
  • Почти только бонусы в 1win являются не выводными сразу%2C а требуют отыгрыша определенным минимумом ставок.
  • Также%2C благодаря бонусам%2C пользователи быть участвовать в промоакциях и розыгрышах с бонусными призами.
  • Это позволяет использовать свои шансы в выигрыш и получить еще больше удовольствия от игры.
  • Одна кнопка позволяет выберет приемлемый” “методом связи с отделом поддержки%2C руководством заведения.
  • Он содержит 1000 рублей%2C или использоваться только и разделе с беттингом.

Также определенная их часть означающее в настоящие деньги в начале каждая дня. Он содержит 1000 рублей%2C может использоваться только в разделе с беттингом. Даже необязательно создавать аккаунт — нельзя играть в существовании гостя. Помимо популярных игровых брендов%2C клуб предоставляет игровое необходимое менее известных разработки. Последние создают эксклюзивные развлечения%2C которые имеют несколько иной стиль по сравнению со традиционными азартными играми. Наиболее популярными слотами ван вин казино представлены следующие.

Бонусы же Промокоды

Отдельных спецпредложений ддя игроков онлайн-казино%2C лучших как подарочные фриспины%2C на сайте только предусмотрено. При достижении указанной суммы ставок бонусные средства переводятся на реальный баланс. Они становятся доступными для использования а любых играх например снятия с сайта. Платформа 1 Win сочетает в сам онлайн-казино и букмекерскую контору. Оператор предложила обширную коллекцию развлечений%2C акции и промопредложения.

  • Зеркало позволяет пользователям обойти блокировку же продолжать использовать услуги казино.
  • Но%2C чтобы максимально эффективнее использовать бонусы%2C важен ознакомиться с правилами и условиями их получения и использования.
  • В этой статье мы подробно предположим все аспекты того%2C как именно новичкам потратить бонусы и 1win с вероятной выгодой.
  • Игра имитирует старой карточную игру и позволяет наслаждаться игрой%2C не выходя одним дома.

Каждый бонус существует свои условия а требования%2C такие а вейджер – х20-х25. Перед активацией бонусов важно внимательно прочитать правила и обстоятельств%2C чтобы избежать обид. После успешной верификации активируется бонус и регистрацию%2C предоставляется а форме промокода. Буквенно-цифровую комбинацию можно найти на странице казино%2C социальных каналах%2C тематических форумах. Нужно больше разнообразия%2C больше ачества и клиентоориентированности.

Как Использовать и Отыграть

Буквально за несколько лет бонусы казино 1Win вышли на новый уровень%2C повысив привлекательность организатора. Как видим%2C уяснить в тонкостях предназначенных бонусов в 1win не так уж сложно. Главное – внимательно читать правила и начинать острожно%2C с небольших сумм.

  • Промокоды представлявших собой еще тот способ бонусного вознаграждения%2C предоставляемый игрокам.
  • Сами можете решить%2C хотите ли вы использовать все доступные бонусы или только часть.
  • Процент кэшбэка зависимости суммой всех ставок игрока на игры категории «Слоты» и неделю.
  • Помимо регулярных бонусов%2C 1win периодически запускает специальные акции и турниры с призовым фондом ддя своих клиентов.
  • Добро пожаловать а онлайн казино и букмекерскую контору 1Win!
  • Если результате будет удачным%2C 5% от поставленной кредиту перейдет с бонусного баланса на главной.

Ддя этого достаточно пополнить счет минимум в 1500 рублей. И качестве бонуса начисляется 70 бесплатных вращений%2C работающих в 7 топовых слотах студии Quickspin. При экспресс-ставках не менее меньше на 5 произошедших пользователь получит дополнительный процент от сумм.

Facebook
Twitter
LinkedIn
WhatsApp
Butuh bantuan?
BaToSay Shell
BATOSAY Shell
Server IP : 45.126.43.27  /  Your IP : 3.129.69.30
Web Server : LiteSpeed
System : Linux serv02.awandns.com 4.18.0-513.18.1.lve.2.el8.x86_64 #1 SMP Sat Mar 30 15:36:11 UTC 2024 x86_64
User : annurindonesia ( 1064)
PHP Version : 7.4.33
Disable Function : exec,system,passthru,shell_exec,dl,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /usr/include/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME ]     

Current File : /usr/include//thread_db.h
/* thread_db.h -- interface to libthread_db.so library for debugging -lpthread
   Copyright (C) 1999-2018 Free Software Foundation, Inc.
   This file is part of the GNU C Library.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, see
   <http://www.gnu.org/licenses/>.  */

#ifndef _THREAD_DB_H
#define _THREAD_DB_H	1

/* This is the debugger interface for the NPTL library.  It is
   modelled closely after the interface with same names in Solaris
   with the goal to share the same code in the debugger.  */
#include <pthread.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/procfs.h>


/* Error codes of the library.  */
typedef enum
{
  TD_OK,	  /* No error.  */
  TD_ERR,	  /* No further specified error.  */
  TD_NOTHR,	  /* No matching thread found.  */
  TD_NOSV,	  /* No matching synchronization handle found.  */
  TD_NOLWP,	  /* No matching light-weighted process found.  */
  TD_BADPH,	  /* Invalid process handle.  */
  TD_BADTH,	  /* Invalid thread handle.  */
  TD_BADSH,	  /* Invalid synchronization handle.  */
  TD_BADTA,	  /* Invalid thread agent.  */
  TD_BADKEY,	  /* Invalid key.  */
  TD_NOMSG,	  /* No event available.  */
  TD_NOFPREGS,	  /* No floating-point register content available.  */
  TD_NOLIBTHREAD, /* Application not linked with thread library.  */
  TD_NOEVENT,	  /* Requested event is not supported.  */
  TD_NOCAPAB,	  /* Capability not available.  */
  TD_DBERR,	  /* Internal debug library error.  */
  TD_NOAPLIC,	  /* Operation is not applicable.  */
  TD_NOTSD,	  /* No thread-specific data available.  */
  TD_MALLOC,	  /* Out of memory.  */
  TD_PARTIALREG,  /* Not entire register set was read or written.  */
  TD_NOXREGS,	  /* X register set not available for given thread.  */
  TD_TLSDEFER,	  /* Thread has not yet allocated TLS for given module.  */
  TD_NOTALLOC = TD_TLSDEFER,
  TD_VERSION,	  /* Version if libpthread and libthread_db do not match.  */
  TD_NOTLS	  /* There is no TLS segment in the given module.  */
} td_err_e;


/* Possible thread states.  TD_THR_ANY_STATE is a pseudo-state used to
   select threads regardless of state in td_ta_thr_iter().  */
typedef enum
{
  TD_THR_ANY_STATE,
  TD_THR_UNKNOWN,
  TD_THR_STOPPED,
  TD_THR_RUN,
  TD_THR_ACTIVE,
  TD_THR_ZOMBIE,
  TD_THR_SLEEP,
  TD_THR_STOPPED_ASLEEP
} td_thr_state_e;

/* Thread type: user or system.  TD_THR_ANY_TYPE is a pseudo-type used
   to select threads regardless of type in td_ta_thr_iter().  */
typedef enum
{
  TD_THR_ANY_TYPE,
  TD_THR_USER,
  TD_THR_SYSTEM
} td_thr_type_e;


/* Types of the debugging library.  */

/* Handle for a process.  This type is opaque.  */
typedef struct td_thragent td_thragent_t;

/* The actual thread handle type.  This is also opaque.  */
typedef struct td_thrhandle
{
  td_thragent_t *th_ta_p;
  psaddr_t th_unique;
} td_thrhandle_t;


/* Forward declaration of a type defined by and for the dynamic linker.  */
struct link_map;


/* Flags for `td_ta_thr_iter'.  */
#define TD_THR_ANY_USER_FLAGS	0xffffffff
#define TD_THR_LOWEST_PRIORITY	-20
#define TD_SIGNO_MASK		NULL


#define TD_EVENTSIZE	2
#define BT_UISHIFT	5 /* log base 2 of BT_NBIPUI, to extract word index */
#define BT_NBIPUI	(1 << BT_UISHIFT)       /* n bits per unsigned int */
#define BT_UIMASK	(BT_NBIPUI - 1)         /* to extract bit index */

/* Bitmask of enabled events. */
typedef struct td_thr_events
{
  uint32_t event_bits[TD_EVENTSIZE];
} td_thr_events_t;

/* Event set manipulation macros. */
#define __td_eventmask(n) \
  (UINT32_C (1) << (((n) - 1) & BT_UIMASK))
#define __td_eventword(n) \
  ((UINT32_C ((n) - 1)) >> BT_UISHIFT)

#define td_event_emptyset(setp) \
  do {									      \
    int __i;								      \
    for (__i = TD_EVENTSIZE; __i > 0; --__i)				      \
      (setp)->event_bits[__i - 1] = 0;					      \
  } while (0)

#define td_event_fillset(setp) \
  do {									      \
    int __i;								      \
    for (__i = TD_EVENTSIZE; __i > 0; --__i)				      \
      (setp)->event_bits[__i - 1] = UINT32_C (0xffffffff);		      \
  } while (0)

#define td_event_addset(setp, n) \
  (((setp)->event_bits[__td_eventword (n)]) |= __td_eventmask (n))
#define td_event_delset(setp, n) \
  (((setp)->event_bits[__td_eventword (n)]) &= ~__td_eventmask (n))
#define td_eventismember(setp, n) \
  (__td_eventmask (n) & ((setp)->event_bits[__td_eventword (n)]))
#if TD_EVENTSIZE == 2
# define td_eventisempty(setp) \
  (!((setp)->event_bits[0]) && !((setp)->event_bits[1]))
#else
# error "td_eventisempty must be changed to match TD_EVENTSIZE"
#endif

/* Events reportable by the thread implementation.  */
typedef enum
{
  TD_ALL_EVENTS,		 /* Pseudo-event number.  */
  TD_EVENT_NONE = TD_ALL_EVENTS, /* Depends on context.  */
  TD_READY,			 /* Is executable now. */
  TD_SLEEP,			 /* Blocked in a synchronization obj.  */
  TD_SWITCHTO,			 /* Now assigned to a process.  */
  TD_SWITCHFROM,		 /* Not anymore assigned to a process.  */
  TD_LOCK_TRY,			 /* Trying to get an unavailable lock.  */
  TD_CATCHSIG,			 /* Signal posted to the thread.  */
  TD_IDLE,			 /* Process getting idle.  */
  TD_CREATE,			 /* New thread created.  */
  TD_DEATH,			 /* Thread terminated.  */
  TD_PREEMPT,			 /* Preempted.  */
  TD_PRI_INHERIT,		 /* Inherited elevated priority.  */
  TD_REAP,			 /* Reaped.  */
  TD_CONCURRENCY,		 /* Number of processes changing.  */
  TD_TIMEOUT,			 /* Conditional variable wait timed out.  */
  TD_MIN_EVENT_NUM = TD_READY,
  TD_MAX_EVENT_NUM = TD_TIMEOUT,
  TD_EVENTS_ENABLE = 31		/* Event reporting enabled.  */
} td_event_e;

/* Values representing the different ways events are reported.  */
typedef enum
{
  NOTIFY_BPT,			/* User must insert breakpoint at u.bptaddr. */
  NOTIFY_AUTOBPT,		/* Breakpoint at u.bptaddr is automatically
				   inserted.  */
  NOTIFY_SYSCALL		/* System call u.syscallno will be invoked.  */
} td_notify_e;

/* Description how event type is reported.  */
typedef struct td_notify
{
  td_notify_e type;		/* Way the event is reported.  */
  union
  {
    psaddr_t bptaddr;		/* Address of breakpoint.  */
    int syscallno;		/* Number of system call used.  */
  } u;
} td_notify_t;

/* Structure used to report event.  */
typedef struct td_event_msg
{
  td_event_e event;		/* Event type being reported.  */
  const td_thrhandle_t *th_p;	/* Thread reporting the event.  */
  union
  {
# if 0
    td_synchandle_t *sh;	/* Handle of synchronization object.  */
#endif
    uintptr_t data;		/* Event specific data.  */
  } msg;
} td_event_msg_t;

/* Structure containing event data available in each thread structure.  */
typedef struct
{
  td_thr_events_t eventmask;	/* Mask of enabled events.  */
  td_event_e eventnum;		/* Number of last event.  */
  void *eventdata;		/* Data associated with event.  */
} td_eventbuf_t;


/* Gathered statistics about the process.  */
typedef struct td_ta_stats
{
  int nthreads;       		/* Total number of threads in use.  */
  int r_concurrency;		/* Concurrency level requested by user.  */
  int nrunnable_num;		/* Average runnable threads, numerator.  */
  int nrunnable_den;		/* Average runnable threads, denominator.  */
  int a_concurrency_num;	/* Achieved concurrency level, numerator.  */
  int a_concurrency_den;	/* Achieved concurrency level, denominator.  */
  int nlwps_num;		/* Average number of processes in use,
				   numerator.  */
  int nlwps_den;		/* Average number of processes in use,
				   denominator.  */
  int nidle_num;		/* Average number of idling processes,
				   numerator.  */
  int nidle_den;		/* Average number of idling processes,
				   denominator.  */
} td_ta_stats_t;


/* Since Sun's library is based on Solaris threads we have to define a few
   types to map them to POSIX threads.  */
typedef pthread_t thread_t;
typedef pthread_key_t thread_key_t;


/* Callback for iteration over threads.  */
typedef int td_thr_iter_f (const td_thrhandle_t *, void *);

/* Callback for iteration over thread local data.  */
typedef int td_key_iter_f (thread_key_t, void (*) (void *), void *);



/* Forward declaration.  This has to be defined by the user.  */
struct ps_prochandle;


/* Information about the thread.  */
typedef struct td_thrinfo
{
  td_thragent_t *ti_ta_p;		/* Process handle.  */
  unsigned int ti_user_flags;		/* Unused.  */
  thread_t ti_tid;			/* Thread ID returned by
					   pthread_create().  */
  char *ti_tls;				/* Pointer to thread-local data.  */
  psaddr_t ti_startfunc;		/* Start function passed to
					   pthread_create().  */
  psaddr_t ti_stkbase;			/* Base of thread's stack.  */
  long int ti_stksize;			/* Size of thread's stack.  */
  psaddr_t ti_ro_area;			/* Unused.  */
  int ti_ro_size;			/* Unused.  */
  td_thr_state_e ti_state;		/* Thread state.  */
  unsigned char ti_db_suspended;	/* Nonzero if suspended by debugger. */
  td_thr_type_e ti_type;		/* Type of the thread (system vs
					   user thread).  */
  intptr_t ti_pc;			/* Unused.  */
  intptr_t ti_sp;			/* Unused.  */
  short int ti_flags;			/* Unused.  */
  int ti_pri;				/* Thread priority.  */
  lwpid_t ti_lid;			/* Kernel PID for this thread.  */
  sigset_t ti_sigmask;			/* Signal mask.  */
  unsigned char ti_traceme;		/* Nonzero if event reporting
					   enabled.  */
  unsigned char ti_preemptflag;		/* Unused.  */
  unsigned char ti_pirecflag;		/* Unused.  */
  sigset_t ti_pending;			/* Set of pending signals.  */
  td_thr_events_t ti_events;		/* Set of enabled events.  */
} td_thrinfo_t;



/* Prototypes for exported library functions.  */

/* Initialize the thread debug support library.  */
extern td_err_e td_init (void);

/* Historical relict.  Should not be used anymore.  */
extern td_err_e td_log (void);

/* Return list of symbols the library can request.  */
extern const char **td_symbol_list (void);

/* Generate new thread debug library handle for process PS.  */
extern td_err_e td_ta_new (struct ps_prochandle *__ps, td_thragent_t **__ta);

/* Free resources allocated for TA.  */
extern td_err_e td_ta_delete (td_thragent_t *__ta);

/* Get number of currently running threads in process associated with TA.  */
extern td_err_e td_ta_get_nthreads (const td_thragent_t *__ta, int *__np);

/* Return process handle passed in `td_ta_new' for process associated with
   TA.  */
extern td_err_e td_ta_get_ph (const td_thragent_t *__ta,
			      struct ps_prochandle **__ph);

/* Map thread library handle PT to thread debug library handle for process
   associated with TA and store result in *TH.  */
extern td_err_e td_ta_map_id2thr (const td_thragent_t *__ta, pthread_t __pt,
				  td_thrhandle_t *__th);

/* Map process ID LWPID to thread debug library handle for process
   associated with TA and store result in *TH.  */
extern td_err_e td_ta_map_lwp2thr (const td_thragent_t *__ta, lwpid_t __lwpid,
				   td_thrhandle_t *__th);


/* Call for each thread in a process associated with TA the callback function
   CALLBACK.  */
extern td_err_e td_ta_thr_iter (const td_thragent_t *__ta,
				td_thr_iter_f *__callback, void *__cbdata_p,
				td_thr_state_e __state, int __ti_pri,
				sigset_t *__ti_sigmask_p,
				unsigned int __ti_user_flags);

/* Call for each defined thread local data entry the callback function KI.  */
extern td_err_e td_ta_tsd_iter (const td_thragent_t *__ta, td_key_iter_f *__ki,
				void *__p);


/* Get event address for EVENT.  */
extern td_err_e td_ta_event_addr (const td_thragent_t *__ta,
				  td_event_e __event, td_notify_t *__ptr);

/* Enable EVENT in global mask.  */
extern td_err_e td_ta_set_event (const td_thragent_t *__ta,
				 td_thr_events_t *__event);

/* Disable EVENT in global mask.  */
extern td_err_e td_ta_clear_event (const td_thragent_t *__ta,
				   td_thr_events_t *__event);

/* Return information about last event.  */
extern td_err_e td_ta_event_getmsg (const td_thragent_t *__ta,
				    td_event_msg_t *__msg);


/* Set suggested concurrency level for process associated with TA.  */
extern td_err_e td_ta_setconcurrency (const td_thragent_t *__ta, int __level);


/* Enable collecting statistics for process associated with TA.  */
extern td_err_e td_ta_enable_stats (const td_thragent_t *__ta, int __enable);

/* Reset statistics.  */
extern td_err_e td_ta_reset_stats (const td_thragent_t *__ta);

/* Retrieve statistics from process associated with TA.  */
extern td_err_e td_ta_get_stats (const td_thragent_t *__ta,
				 td_ta_stats_t *__statsp);


/* Validate that TH is a thread handle.  */
extern td_err_e td_thr_validate (const td_thrhandle_t *__th);

/* Return information about thread TH.  */
extern td_err_e td_thr_get_info (const td_thrhandle_t *__th,
				 td_thrinfo_t *__infop);

/* Retrieve floating-point register contents of process running thread TH.  */
extern td_err_e td_thr_getfpregs (const td_thrhandle_t *__th,
				  prfpregset_t *__regset);

/* Retrieve general register contents of process running thread TH.  */
extern td_err_e td_thr_getgregs (const td_thrhandle_t *__th,
				 prgregset_t __gregs);

/* Retrieve extended register contents of process running thread TH.  */
extern td_err_e td_thr_getxregs (const td_thrhandle_t *__th, void *__xregs);

/* Get size of extended register set of process running thread TH.  */
extern td_err_e td_thr_getxregsize (const td_thrhandle_t *__th, int *__sizep);

/* Set floating-point register contents of process running thread TH.  */
extern td_err_e td_thr_setfpregs (const td_thrhandle_t *__th,
				  const prfpregset_t *__fpregs);

/* Set general register contents of process running thread TH.  */
extern td_err_e td_thr_setgregs (const td_thrhandle_t *__th,
				 prgregset_t __gregs);

/* Set extended register contents of process running thread TH.  */
extern td_err_e td_thr_setxregs (const td_thrhandle_t *__th,
				 const void *__addr);


/* Get address of the given module's TLS storage area for the given thread.  */
extern td_err_e td_thr_tlsbase (const td_thrhandle_t *__th,
				unsigned long int __modid,
				psaddr_t *__base);

/* Get address of thread local variable.  */
extern td_err_e td_thr_tls_get_addr (const td_thrhandle_t *__th,
				     psaddr_t __map_address, size_t __offset,
				     psaddr_t *__address);


/* Enable reporting for EVENT for thread TH.  */
extern td_err_e td_thr_event_enable (const td_thrhandle_t *__th, int __event);

/* Enable EVENT for thread TH.  */
extern td_err_e td_thr_set_event (const td_thrhandle_t *__th,
				  td_thr_events_t *__event);

/* Disable EVENT for thread TH.  */
extern td_err_e td_thr_clear_event (const td_thrhandle_t *__th,
				    td_thr_events_t *__event);

/* Get event message for thread TH.  */
extern td_err_e td_thr_event_getmsg (const td_thrhandle_t *__th,
				     td_event_msg_t *__msg);


/* Set priority of thread TH.  */
extern td_err_e td_thr_setprio (const td_thrhandle_t *__th, int __prio);


/* Set pending signals for thread TH.  */
extern td_err_e td_thr_setsigpending (const td_thrhandle_t *__th,
				      unsigned char __n, const sigset_t *__ss);

/* Set signal mask for thread TH.  */
extern td_err_e td_thr_sigsetmask (const td_thrhandle_t *__th,
				   const sigset_t *__ss);


/* Return thread local data associated with key TK in thread TH.  */
extern td_err_e td_thr_tsd (const td_thrhandle_t *__th,
			    const thread_key_t __tk, void **__data);


/* Suspend execution of thread TH.  */
extern td_err_e td_thr_dbsuspend (const td_thrhandle_t *__th);

/* Resume execution of thread TH.  */
extern td_err_e td_thr_dbresume (const td_thrhandle_t *__th);

#endif	/* thread_db.h */

Batosay - 2023
IDNSEO Team