Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
186 changes: 184 additions & 2 deletions po/uk.po
Original file line number Diff line number Diff line change
Expand Up @@ -19818,6 +19818,165 @@ msgid ""
"\tb 2b\n"
"```"
msgstr ""
"```armasm\n"
Copy link
Contributor Author

@reta reta May 20, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Primarily, because Git generated very weird diff for this particular block in the original pull request (#2088), failing msgid check for no reasons, I had to split the change into 2

"/*\n"
" * Copyright 2023 Google LLC\n"
" *\n"
" * Licensed under the Apache License, Version 2.0 (the \"License\");\n"
" * you may not use this file except in compliance with the License.\n"
" * You may obtain a copy of the License at\n"
" *\n"
" * https://www.apache.org/licenses/LICENSE-2.0\n"
" *\n"
" * Unless required by applicable law or agreed to in writing, software\n"
" * distributed under the License is distributed on an \"AS IS\" BASIS,\n"
" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n"
" * See the License for the specific language governing permissions and\n"
" * limitations under the License.\n"
" */\n"
"\n"
".macro adr_l, reg:req, sym:req\n"
"\tadrp \\reg, \\sym\n"
"\tadd \\reg, \\reg, :lo12:\\sym\n"
".endm\n"
"\n"
".macro mov_i, reg:req, imm:req\n"
"\tmovz \\reg, :abs_g3:\\imm\n"
"\tmovk \\reg, :abs_g2_nc:\\imm\n"
"\tmovk \\reg, :abs_g1_nc:\\imm\n"
"\tmovk \\reg, :abs_g0_nc:\\imm\n"
".endm\n"
"\n"
".set .L_MAIR_DEV_nGnRE,\t0x04\n"
".set .L_MAIR_MEM_WBWA,\t0xff\n"
".set .Lmairval, .L_MAIR_DEV_nGnRE | (.L_MAIR_MEM_WBWA << 8)\n"
"\n"
"/* Розмір гранул 4 KiB для TTBR0_EL1. */\n"
".set .L_TCR_TG0_4KB, 0x0 << 14\n"
"/* Розмір гранул 4 KiB для TTBR1_EL1. */\n"
".set .L_TCR_TG1_4KB, 0x2 << 30\n"
"/* Вимкнути обхід таблиці перекладу для TTBR1_EL1, замість цього генерувати "
"помилку трансляції. */\n"
".set .L_TCR_EPD1, 0x1 << 23\n"
"/* Обхід таблиці перекладу для TTBR0_EL1 є внутрішньо спільним. */\n"
".set .L_TCR_SH_INNER, 0x3 << 12\n"
"/*\n"
" * Обхід таблиці трансляції для TTBR0_EL1 є зовнішнім зворотним записом "
"зчитуванням-виділенням записом-виділенням\n"
" * з кешуванням.\n"
" */\n"
".set .L_TCR_RGN_OWB, 0x1 << 10\n"
"/*\n"
" * Обхід таблиці трансляції для TTBR0_EL1 є внутрішнім зворотним записом "
"зчитуванням-виділенням записом-виділенням\n"
" * з кешуванням.\n"
" */\n"
".set .L_TCR_RGN_IWB, 0x1 << 8\n"
"/* Зміщення розміру для TTBR0_EL1 становить 2**39 байт (512 Гігабайт). */\n"
".set .L_TCR_T0SZ_512, 64 - 39\n"
".set .Ltcrval, .L_TCR_TG0_4KB | .L_TCR_TG1_4KB | .L_TCR_EPD1 | ."
"L_TCR_RGN_OWB\n"
".set .Ltcrval, .Ltcrval | .L_TCR_RGN_IWB | .L_TCR_SH_INNER | ."
"L_TCR_T0SZ_512\n"
"\n"
"/* Кешування доступу до інструкцій етапу 1 не порушується. */\n"
".set .L_SCTLR_ELx_I, 0x1 << 12\n"
"/* Помилка вирівнювання SP, якщо SP не вирівняно до межі 16 байт. */\n"
".set .L_SCTLR_ELx_SA, 0x1 << 3\n"
"/* Кешування доступу до даних на етапі 1 не порушується. */\n"
".set .L_SCTLR_ELx_C, 0x1 << 2\n"
"/* EL0 і EL1 етапу 1 MMU увімкнено. */\n"
".set .L_SCTLR_ELx_M, 0x1 << 0\n"
"/* Privileged Access Never не змінюється, коли робиться виключення з EL1. "
"*/\n"
".set .L_SCTLR_EL1_SPAN, 0x1 << 23\n"
"/* Інструкція SETEND відключена на EL0 у режимі aarch32. */\n"
".set .L_SCTLR_EL1_SED, 0x1 << 8\n"
"/* У режимі aarch32 на EL0 відключені різні ІТ-інструкції. */\n"
".set .L_SCTLR_EL1_ITD, 0x1 << 7\n"
".set .L_SCTLR_EL1_RES1, (0x1 << 11) | (0x1 << 20) | (0x1 << 22) | (0x1 << "
"28) | (0x1 << 29)\n"
".set .Lsctlrval, .L_SCTLR_ELx_M | .L_SCTLR_ELx_C | .L_SCTLR_ELx_SA | ."
"L_SCTLR_EL1_ITD | .L_SCTLR_EL1_SED\n"
".set .Lsctlrval, .Lsctlrval | .L_SCTLR_ELx_I | .L_SCTLR_EL1_SPAN | ."
"L_SCTLR_EL1_RES1\n"
"\n"
"/**\n"
" * Це загальна точка входу для образу. Вона виконує операції, необхідні для "
"підготовки\n"
" * завантаженого образу до запуску. Зокрема, обнуляє секцію bss за допомогою "
"регістрів x25 і вище,\n"
" * готує стек, вмикає плаваючу крапку і налаштовує вектор виключень. Вона "
"зберігає x0-x3 для\n"
" * точки входу у Rust, оскільки вони можуть містити параметри завантаження.\n"
" */\n"
".section .init.entry, \"ax\"\n"
".global entry\n"
"entry:\n"
"\t/* Завантажує та застосовує конфігурацію керування пам'яттю, готові до "
"ввімкнення MMU та кешів. */\n"
"\tadrp x30, idmap\n"
"\tmsr ttbr0_el1, x30\n"
"\n"
"\tmov_i x30, .Lmairval\n"
"\tmsr mair_el1, x30\n"
"\n"
"\tmov_i x30, .Ltcrval\n"
"\t/* Копіюємо підтримуваний діапазон PA у TCR_EL1.IPS. */\n"
"\tmrs x29, id_aa64mmfr0_el1\n"
"\tbfi x30, x29, #32, #4\n"
"\n"
"\tmsr tcr_el1, x30\n"
"\n"
"\tmov_i x30, .Lsctlrval\n"
"\n"
"\t/*\n"
"\t * Перевіряємо все до завершення цього етапу, а потім робимо недійсними "
"всі потенційно застарілі\n"
"\t * локальні записи TLB, перш ніж вони почнуть використовуватися.\n"
"\t */\n"
"\tisb\n"
"\ttlbi vmalle1\n"
"\tic iallu\n"
"\tdsb nsh\n"
"\tisb\n"
"\n"
"\t/*\n"
"\t * Налаштовуємо sctlr_el1, щоб увімкнути MMU і кеш, і не продовжуємо, доки "
"це не буде зроблено.\n"
"\t */\n"
"\tmsr sctlr_el1, x30\n"
"\tisb\n"
"\n"
"\t/* Вимкнути перехоплення доступу з плаваючою комою в EL1. */\n"
"\tmrs x30, cpacr_el1\n"
"\torr x30, x30, #(0x3 << 20)\n"
"\tmsr cpacr_el1, x30\n"
"\tisb\n"
"\n"
"\t/* Обнулити секцію bss. */\n"
"\tadr_l x29, bss_begin\n"
"\tadr_l x30, bss_end\n"
"0:\tcmp x29, x30\n"
"\tb.hs 1f\n"
"\tstp xzr, xzr, [x29], #16\n"
"\tb 0b\n"
"\n"
"1:\t/* Готуємо стек. */\n"
"\tadr_l x30, boot_stack_end\n"
"\tmov sp, x30\n"
"\n"
"\t/* Настроюємо вектор виключень. */\n"
"\tadr x30, vector_table_el1\n"
"\tmsr vbar_el1, x30\n"
"\n"
"\t/* Виклик коду Rust. */\n"
"\tbl main\n"
"\n"
"\t/* Цикл з постійним очікуванням переривань. */\n"
"2:\twfi\n"
"\tb 2b\n"
"```"

#: src/exercises/bare-metal/rtc.md
msgid "_exceptions.S_ (you shouldn't need to change this):"
Expand Down Expand Up @@ -20621,29 +20780,44 @@ msgid ""
"process\n"
" /// as device memory and not have any other aliases.\n"
msgstr ""
"/// Створює новий екземпляр драйвера RTC для пристрою PL031 за заданою\n"
" /// базовою адресою.\n"
" ///\n"
" /// # Безпека\n"
" ///\n"
" /// Вказана базова адреса має вказувати на регістри керування MMIO\n"
" /// пристрою PL031, які мають бути відображені у адресному просторі "
"процесу\n"
" /// як пам'ять пристрою і не мати інших псевдонімів.\n"

#: src/exercises/bare-metal/solutions-afternoon.md
msgid "/// Reads the current RTC value.\n"
msgstr ""
msgstr "/// Зчитує поточне значення RTC.\n"

#: src/exercises/bare-metal/solutions-afternoon.md
msgid ""
"// Safe because we know that self.registers points to the control\n"
" // registers of a PL031 device which is appropriately mapped.\n"
msgstr ""
"// Безпечно, тому що ми знаємо, що self.registers вказує на керуючі\n"
" // регістри пристрою PL031, який відповідним чином відображено.\n"

#: src/exercises/bare-metal/solutions-afternoon.md
msgid ""
"/// Writes a match value. When the RTC value matches this then an interrupt\n"
" /// will be generated (if it is enabled).\n"
msgstr ""
"/// Записує значення збігу. Коли значення RTC збігається з цим, буде\n"
" /// згенеровано переривання (якщо його увімкнено).\n"

#: src/exercises/bare-metal/solutions-afternoon.md
msgid ""
"/// Returns whether the match register matches the RTC value, whether or "
"not\n"
" /// the interrupt is enabled.\n"
msgstr ""
"/// Повертає, чи відповідає регістр збігу значенню RTC, незалежно від того,\n"
" /// увімкнено переривання чи ні.\n"

#: src/exercises/bare-metal/solutions-afternoon.md
msgid ""
Expand All @@ -20652,6 +20826,10 @@ msgid ""
" /// This should be true if and only if `matched` returns true and the\n"
" /// interrupt is masked.\n"
msgstr ""
"/// Повертає, чи є переривання в очікуванні.\n"
" ///\n"
" /// Це значення має бути істинним тоді і тільки тоді, коли `matched`\n"
" /// повертає істину і переривання замасковане.\n"

#: src/exercises/bare-metal/solutions-afternoon.md
msgid ""
Expand All @@ -20661,10 +20839,14 @@ msgid ""
"the\n"
" /// interrupt is disabled.\n"
msgstr ""
"/// Встановлює або очищує маску переривання.\n"
" ///\n"
" /// Якщо маска дорівнює істині, переривання увімкнено; якщо ні - \n"
" /// переривання вимкнено.\n"

#: src/exercises/bare-metal/solutions-afternoon.md
msgid "/// Clears a pending interrupt, if any.\n"
msgstr ""
msgstr "/// Очищає очікуване переривання, якщо таке є.\n"

#: src/concurrency.md
msgid "Welcome to Concurrency in Rust"
Expand Down