ntdll: Declare the syscall functions array explicitly.

Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Alexandre Julliard 2021-08-30 12:38:31 +02:00
parent 7ae1c396ac
commit ea6308e364
3 changed files with 242 additions and 17 deletions

View File

@ -116,13 +116,248 @@ SYSTEM_DLL_INIT_BLOCK *pLdrSystemDllInitBlock = NULL;
static NTSTATUS (CDECL *p__wine_set_unix_funcs)( int version, const struct unix_funcs *funcs );
static void *p__wine_syscall_dispatcher;
extern SYSTEM_SERVICE_TABLE __wine_syscall_table DECLSPEC_HIDDEN;
static void * const syscalls[] =
{
NtAcceptConnectPort,
NtAccessCheck,
NtAccessCheckAndAuditAlarm,
NtAddAtom,
NtAdjustGroupsToken,
NtAdjustPrivilegesToken,
NtAlertResumeThread,
NtAlertThread,
NtAllocateLocallyUniqueId,
NtAllocateUuids,
NtAllocateVirtualMemory,
NtAllocateVirtualMemoryEx,
NtAreMappedFilesTheSame,
NtAssignProcessToJobObject,
NtCallbackReturn,
NtCancelIoFile,
NtCancelIoFileEx,
NtCancelTimer,
NtClearEvent,
NtClearPowerRequest,
NtClose,
NtCompleteConnectPort,
NtConnectPort,
NtContinue,
NtCreateDebugObject,
NtCreateDirectoryObject,
NtCreateEvent,
NtCreateFile,
NtCreateIoCompletion,
NtCreateJobObject,
NtCreateKey,
NtCreateKeyTransacted,
NtCreateKeyedEvent,
NtCreateLowBoxToken,
NtCreateMailslotFile,
NtCreateMutant,
NtCreateNamedPipeFile,
NtCreatePagingFile,
NtCreatePort,
NtCreatePowerRequest,
NtCreateSection,
NtCreateSemaphore,
NtCreateSymbolicLinkObject,
NtCreateThread,
NtCreateThreadEx,
NtCreateTimer,
NtCreateUserProcess,
NtDebugActiveProcess,
NtDebugContinue,
NtDelayExecution,
NtDeleteAtom,
NtDeleteFile,
NtDeleteKey,
NtDeleteValueKey,
NtDeviceIoControlFile,
NtDisplayString,
NtDuplicateObject,
NtDuplicateToken,
NtEnumerateKey,
NtEnumerateValueKey,
NtFilterToken,
NtFindAtom,
NtFlushBuffersFile,
NtFlushInstructionCache,
NtFlushKey,
NtFlushProcessWriteBuffers,
NtFlushVirtualMemory,
NtFreeVirtualMemory,
NtFsControlFile,
NtGetContextThread,
NtGetCurrentProcessorNumber,
NtGetNextThread,
NtGetNlsSectionPtr,
NtGetWriteWatch,
NtImpersonateAnonymousToken,
NtInitiatePowerAction ,
NtIsProcessInJob,
NtListenPort,
NtLoadDriver,
NtLoadKey,
NtLoadKey2,
NtLockFile,
NtLockVirtualMemory,
NtMakeTemporaryObject,
NtMapViewOfSection,
NtNotifyChangeDirectoryFile,
NtNotifyChangeKey,
NtNotifyChangeMultipleKeys,
NtOpenDirectoryObject,
NtOpenEvent,
NtOpenFile,
NtOpenIoCompletion,
NtOpenJobObject,
NtOpenKey,
NtOpenKeyEx,
NtOpenKeyTransacted,
NtOpenKeyTransactedEx,
NtOpenKeyedEvent,
NtOpenMutant,
NtOpenProcess,
NtOpenProcessToken,
NtOpenProcessTokenEx,
NtOpenSection,
NtOpenSemaphore,
NtOpenSymbolicLinkObject ,
NtOpenThread,
NtOpenThreadToken,
NtOpenThreadTokenEx,
NtOpenTimer,
NtPowerInformation,
NtPrivilegeCheck,
NtProtectVirtualMemory,
NtPulseEvent,
NtQueryAttributesFile,
NtQueryDefaultLocale,
NtQueryDefaultUILanguage,
NtQueryDirectoryFile,
NtQueryDirectoryObject,
NtQueryEaFile,
NtQueryEvent,
NtQueryFullAttributesFile,
NtQueryInformationAtom,
NtQueryInformationFile,
NtQueryInformationJobObject,
NtQueryInformationProcess,
NtQueryInformationThread,
NtQueryInformationToken,
NtQueryInstallUILanguage,
NtQueryIoCompletion,
NtQueryKey,
NtQueryLicenseValue,
NtQueryMultipleValueKey,
NtQueryMutant,
NtQueryObject,
NtQueryPerformanceCounter,
NtQuerySection,
NtQuerySecurityObject,
NtQuerySemaphore ,
NtQuerySymbolicLinkObject,
NtQuerySystemEnvironmentValue,
NtQuerySystemEnvironmentValueEx,
NtQuerySystemInformation,
NtQuerySystemInformationEx,
NtQuerySystemTime,
NtQueryTimer,
NtQueryTimerResolution,
NtQueryValueKey,
NtQueryVirtualMemory,
NtQueryVolumeInformationFile,
NtQueueApcThread,
NtRaiseException,
NtRaiseHardError,
NtReadFile,
NtReadFileScatter,
NtReadVirtualMemory,
NtRegisterThreadTerminatePort,
NtReleaseKeyedEvent,
NtReleaseMutant,
NtReleaseSemaphore,
NtRemoveIoCompletion,
NtRemoveIoCompletionEx,
NtRemoveProcessDebug,
NtRenameKey,
NtReplaceKey,
NtReplyWaitReceivePort,
NtRequestWaitReplyPort,
NtResetEvent,
NtResetWriteWatch,
NtRestoreKey,
NtResumeProcess,
NtResumeThread,
NtSaveKey,
NtSecureConnectPort,
NtSetContextThread,
NtSetDefaultLocale,
NtSetDefaultUILanguage,
NtSetEaFile,
NtSetEvent,
NtSetInformationDebugObject,
NtSetInformationFile,
NtSetInformationJobObject,
NtSetInformationKey,
NtSetInformationObject,
NtSetInformationProcess,
NtSetInformationThread,
NtSetInformationToken,
NtSetIntervalProfile,
NtSetIoCompletion,
NtSetLdtEntries,
NtSetPowerRequest,
NtSetSecurityObject,
NtSetSystemInformation,
NtSetSystemTime,
NtSetThreadExecutionState,
NtSetTimer,
NtSetTimerResolution,
NtSetValueKey,
NtSetVolumeInformationFile,
NtShutdownSystem,
NtSignalAndWaitForSingleObject,
NtSuspendProcess,
NtSuspendThread,
NtSystemDebugControl,
NtTerminateJobObject,
NtTerminateProcess,
NtTerminateThread,
NtTestAlert,
NtTraceControl,
NtUnloadDriver,
NtUnloadKey,
NtUnlockFile,
NtUnlockVirtualMemory,
NtUnmapViewOfSection,
NtWaitForDebugEvent,
NtWaitForKeyedEvent,
NtWaitForMultipleObjects,
NtWaitForSingleObject,
#ifndef _WIN64
NtWow64AllocateVirtualMemory64,
NtWow64GetNativeSystemInformation,
NtWow64ReadVirtualMemory64,
NtWow64WriteVirtualMemory64,
#endif
NtWriteFile,
NtWriteFileGather,
NtWriteVirtualMemory,
NtYieldExecution,
__wine_dbg_write,
__wine_unix_call,
wine_nt_to_unix_file_name,
wine_server_call,
wine_server_fd_to_handle,
wine_server_handle_to_fd,
wine_unix_to_nt_file_name,
};
static BYTE syscall_args[4096];
static BYTE syscall_args[ARRAY_SIZE(syscalls)];
SYSTEM_SERVICE_TABLE KeServiceDescriptorTable[4];
#ifdef __GNUC__
static void fatal_error( const char *err, ... ) __attribute__((noreturn, format(printf,1,2)));
#endif
@ -1947,7 +2182,7 @@ static struct unix_funcs unix_funcs =
*/
static void start_main_thread(void)
{
SYSTEM_SERVICE_TABLE syscall_table = __wine_syscall_table;
SYSTEM_SERVICE_TABLE syscall_table = { (ULONG_PTR *)syscalls, NULL, ARRAY_SIZE(syscalls), syscall_args };
NTSTATUS status;
TEB *teb = virtual_alloc_first_teb();
@ -1970,7 +2205,6 @@ static void start_main_thread(void)
NtCreateKeyedEvent( &keyed_event, GENERIC_READ | GENERIC_WRITE, NULL, 0 );
load_ntdll();
if (main_image_info.Machine != current_machine) load_wow64_ntdll( main_image_info.Machine );
syscall_table.ArgumentTable = syscall_args;
ntdll_init_syscalls( 0, &syscall_table, p__wine_syscall_dispatcher );
status = p__wine_set_unix_funcs( NTDLL_UNIXLIB_VERSION, &unix_funcs );
if (status == STATUS_REVISION_MISMATCH)

View File

@ -3847,6 +3847,7 @@ NTSYSAPI NTSTATUS WINAPI NtCreateJobObject(PHANDLE,ACCESS_MASK,const OBJECT_ATT
NTSYSAPI NTSTATUS WINAPI NtCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
NTSYSAPI NTSTATUS WINAPI NtCreateKeyTransacted(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,HANDLE,ULONG*);
NTSYSAPI NTSTATUS WINAPI NtCreateKeyedEvent(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG);
NTSYSAPI NTSTATUS WINAPI NtCreateLowBoxToken(HANDLE*,HANDLE,ACCESS_MASK,OBJECT_ATTRIBUTES*,SID*,ULONG,SID_AND_ATTRIBUTES*,ULONG,HANDLE*);
NTSYSAPI NTSTATUS WINAPI NtCreateMailslotFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,PLARGE_INTEGER);
NTSYSAPI NTSTATUS WINAPI NtCreateMutant(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,BOOLEAN);
NTSYSAPI NTSTATUS WINAPI NtCreateNamedPipeFile(PHANDLE,ULONG,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,ULONG,PLARGE_INTEGER);

View File

@ -1426,6 +1426,8 @@ void output_syscalls( DLLSPEC *spec )
int i, count;
ORDDEF **syscalls = NULL;
if (unix_lib) return;
for (i = count = 0; i < spec->nb_entry_points; i++)
{
ORDDEF *odp = &spec->entry_points[i];
@ -1439,18 +1441,6 @@ void output_syscalls( DLLSPEC *spec )
output( "\n/* system calls */\n\n" );
output( "\t.text\n" );
if (unix_lib)
{
output( "\t.data\n" );
output( "\t.align %d\n", get_alignment( get_ptr_size() ) );
output( "%s\n", asm_globl("__wine_syscall_table") );
output( "\t%s .Lsyscall_table, 0, %u, 0\n", get_asm_ptr_keyword(), count );
output( ".Lsyscall_table:\n" );
for (i = 0; i < count; i++)
output( "\t%s %s\n", get_asm_ptr_keyword(), asm_name( get_link_name( syscalls[i] )));
return;
}
for (i = 0; i < count; i++)
{
ORDDEF *odp = syscalls[i];