Clean up some code

- Use good ELF technique in cosmo_dlopen()
- Make strerror() conform more to other libc impls
- Introduce __clear_cache() and use it in cosmo_dlopen()
- Remove libc/fmt/fmt.h header (trying to kill off LIBC_FMT)
This commit is contained in:
Justine Tunney 2023-11-16 16:34:53 -08:00
parent 7010a8081e
commit 68c7c9c1e0
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
244 changed files with 378 additions and 588 deletions

View file

@ -0,0 +1,18 @@
#include "libc/nt/codegen.h"
.imp kernel32,__imp_FormatMessageA,FormatMessageA
.text.windows
.ftrace1
FormatMessageA:
.ftrace2
#ifdef __x86_64__
push %rbp
mov %rsp,%rbp
mov __imp_FormatMessageA(%rip),%rax
jmp __sysv2nt8
#elif defined(__aarch64__)
mov x0,#0
ret
#endif
.endfn FormatMessageA,globl
.previous

View file

@ -87,6 +87,7 @@ imp 'FindNextVolume' FindNextVolumeW kernel32 3
imp 'FindVolumeClose' FindVolumeClose kernel32 1
imp 'FlushConsoleInputBuffer' FlushConsoleInputBuffer kernel32 1
imp 'FormatMessage' FormatMessageW kernel32 7
imp 'FormatMessageA' FormatMessageA kernel32 7
imp 'FreeConsole' FreeConsole kernel32 0
imp 'FreeEnvironmentStrings' FreeEnvironmentStringsW kernel32 1
imp 'FreeLibrary' FreeLibrary kernel32 1

View file

@ -51,6 +51,9 @@ void SetLastError(uint32_t dwErrCode);
uint32_t FormatMessage(uint32_t dwFlags, const void *lpSource,
uint32_t dwMessageId, uint32_t dwLanguageId,
char16_t *lpBuffer, uint32_t nSize, va_list *Arguments);
uint32_t FormatMessageA(uint32_t dwFlags, const void *lpSource,
uint32_t dwMessageId, uint32_t dwLanguageId,
char *lpBuffer, uint32_t nSize, va_list *Arguments);
int64_t OpenProcess(uint32_t dwDesiredAccess, bool32 bInheritHandle,
uint32_t dwProcessId);
uint32_t GetCurrentProcessId(void); /* %gs:0x40 */