mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-11 18:20:43 +09:00
Kernel: Add kernelearlyputstr and use it in dbgln in very-early boot
This variant of dbgputstr does not lock the global log lock, as it is called before the current or any other processor was initialized, meaning that: A) The $gs base was not setup yet, so we cannot enter into critical sections, and as a result we cannot use SpinLocks B) No other processors may try to print at the same time anyway
This commit is contained in:
parent
18d2a74e62
commit
6348b63476
Notes:
sideshowbarker
2024-07-18 04:19:44 +09:00
Author: https://github.com/IdanHo
Commit: 6348b63476
Pull-request: https://github.com/SerenityOS/serenity/pull/9942
Reviewed-by: https://github.com/bgianfo ✅
3 changed files with 20 additions and 0 deletions
|
@ -817,6 +817,14 @@ void vdbgln(StringView fmtstr, TypeErasedFormatParams& params)
|
||||||
|
|
||||||
const auto string = builder.string_view();
|
const auto string = builder.string_view();
|
||||||
|
|
||||||
|
#ifdef __serenity__
|
||||||
|
# ifdef KERNEL
|
||||||
|
if (!Kernel::Processor::is_initialized()) {
|
||||||
|
kernelearlyputstr(string.characters_without_null_termination(), string.length());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
dbgputstr(string.characters_without_null_termination(), string.length());
|
dbgputstr(string.characters_without_null_termination(), string.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -188,3 +188,14 @@ extern "C" void kernelcriticalputstr(const char* characters, size_t length)
|
||||||
for (size_t i = 0; i < length; ++i)
|
for (size_t i = 0; i < length; ++i)
|
||||||
critical_console_out(characters[i]);
|
critical_console_out(characters[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" void kernelearlyputstr(const char* characters, size_t length)
|
||||||
|
{
|
||||||
|
if (!characters)
|
||||||
|
return;
|
||||||
|
// NOTE: We do not lock the log lock here, as this function is called before this or any other processor was initialized, meaning:
|
||||||
|
// A) The $gs base was not setup yet, so we cannot enter into critical sections, and as a result we cannot use SpinLocks
|
||||||
|
// B) No other processors may try to print at the same time anyway
|
||||||
|
for (size_t i = 0; i < length; ++i)
|
||||||
|
internal_dbgputch(characters[i]);
|
||||||
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ void dbgputch(char);
|
||||||
void dbgputstr(const char*, size_t);
|
void dbgputstr(const char*, size_t);
|
||||||
void kernelputstr(const char*, size_t);
|
void kernelputstr(const char*, size_t);
|
||||||
void kernelcriticalputstr(const char*, size_t);
|
void kernelcriticalputstr(const char*, size_t);
|
||||||
|
void kernelearlyputstr(const char*, size_t);
|
||||||
int snprintf(char* buf, size_t, const char* fmt, ...) __attribute__((format(printf, 3, 4)));
|
int snprintf(char* buf, size_t, const char* fmt, ...) __attribute__((format(printf, 3, 4)));
|
||||||
void set_serial_debug(bool on_or_off);
|
void set_serial_debug(bool on_or_off);
|
||||||
int get_serial_debug();
|
int get_serial_debug();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue