/* * Helper functions for ntdll */ #include #include #include "config.h" #include "debugtools.h" #include "ntdll_misc.h" DEFAULT_DEBUG_CHANNEL(ntdll); #if defined(__GNUC__) && defined(__i386__) #define DO_FPU(x,y) __asm__ __volatile__( x " %0;fwait" : "=m" (y) : ) #define POP_FPU(x) DO_FPU("fstpl",x) #endif void dump_ObjectAttributes (const OBJECT_ATTRIBUTES *oa) { if (oa) TRACE("%p:(name=%s, attr=0x%08lx, hRoot=0x%08x, sd=%p) \n", oa, debugstr_us(oa->ObjectName), oa->Attributes, oa->RootDirectory, oa->SecurityDescriptor); } void dump_UnicodeString(const UNICODE_STRING *us, BOOLEAN showstring) { if (us) { if (showstring) TRACE("%p %p(%s) (%u %u)\n", us, us->Buffer, debugstr_us(us), us->Length, us->MaximumLength); else TRACE("%p %p() (%u %u)\n", us, us->Buffer, us->Length, us->MaximumLength); } } LPCSTR debugstr_as( const STRING *str ) { if (!str) return ""; return debugstr_an(str->Buffer, str->Length); } LPCSTR debugstr_us( const UNICODE_STRING *us ) { if (!us) return ""; return debugstr_wn(us->Buffer, us->Length); } /********************************************************************* * _ftol (NTDLL.@) * * VERSION * [GNUC && i386] */ #if defined(__GNUC__) && defined(__i386__) LONG __cdecl NTDLL__ftol(void) { /* don't just do DO_FPU("fistp",retval), because the rounding * mode must also be set to "round towards zero"... */ double fl; POP_FPU(fl); return (LONG)fl; } #endif /* defined(__GNUC__) && defined(__i386__) */ /********************************************************************* * _ftol (NTDLL.@) * * FIXME * Should be register function * VERSION * [!GNUC && i386] */ #if !defined(__GNUC__) && defined(__i386__) LONG __cdecl NTDLL__ftol(double fl) { FIXME("should be register function\n"); return (LONG)fl; } #endif /* !defined(__GNUC__) && defined(__i386__) */ /********************************************************************* * _ftol (NTDLL.@) * VERSION * [!i386] */ #ifndef __i386__ LONG __cdecl NTDLL__ftol(double fl) { return (LONG) fl; } #endif /* !defined(__i386__) */ /********************************************************************* * _CIpow (NTDLL.@) * VERSION * [GNUC && i386] */ #if defined(__GNUC__) && defined(__i386__) double __cdecl NTDLL__CIpow(void) { double x,y; POP_FPU(y); POP_FPU(x); return pow(x,y); } #endif /* defined(__GNUC__) && defined(__i386__) */ /********************************************************************* * _CIpow (NTDLL.@) * * FIXME * Should be register function * * VERSION * [!GNUC && i386] */ #if !defined(__GNUC__) && defined(__i386__) double __cdecl NTDLL__CIpow(double x,double y) { FIXME("should be register function\n"); return pow(x,y); } #endif /* !defined(__GNUC__) && defined(__i386__) */ /********************************************************************* * _CIpow (NTDLL.@) * VERSION * [!i386] */ #ifndef __i386__ double __cdecl NTDLL__CIpow(double x,double y) { return pow(x,y); } #endif /* !defined(__i386__) */