Пожалуйста, обратите внимание, что пользователь заблокирован
Clang может работать с хедерами и линкером как студии, так и мингв.Но это всё про GCC, а LLVM IR это вроде в Clang?
Clang может работать с хедерами и линкером как студии, так и мингв.Но это всё про GCC, а LLVM IR это вроде в Clang?
Вот фрагмент кодогенератора Clang https://github.com/llvm/llvm-projec...clang/lib/CodeGen/CGBuiltin.cpp#L14746-L14757Clang может работать с хедерами и линкером как студии, так и мингв.
case X86::BI__readfsbyte:
case X86::BI__readfsword:
case X86::BI__readfsdword:
case X86::BI__readfsqword: {
llvm::Type *IntTy = ConvertType(E->getType());
Value *Ptr =
Builder.CreateIntToPtr(Ops[0], llvm::PointerType::get(IntTy, 257));
LoadInst *Load = Builder.CreateAlignedLoad(
IntTy, Ptr, getContext().getTypeAlignInChars(E->getType()));
Load->setVolatile(true);
return Load;
}
Clang 5.0.0 release, 11 LLVMТам кстати есть и RtlGetCurrentPeb()
Wine экспортирует:
$ grep Current.eb wine/dlls/ntdll/ntdll.spec
@ stdcall -arch=i386,arm64 NtCurrentTeb()
@ stdcall RtlGetCurrentPeb()
В Wine есть и ассемблерные варианты для GCC
C:#if defined(__i386__) && defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2))) static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void) { struct _TEB *teb; __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb)); return teb; } #elif defined(__x86_64__) && defined(__GNUC__) static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void) { struct _TEB *teb; __asm__(".byte 0x65\n\tmovq (0x30),%0" : "=r" (teb)); return teb; } #elif
Примерно так же реализованы интринсики для mingw-w64 https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/include/psdk_inc/intrin-impl.h
Но это всё про GCC, а LLVM IR это вроде в Clang? Там есть такой интересный нюанс
lib/clang/13.0.0/include/intrin.h is missing __readfsdword
https://github.com/llvm/llvm-project/issues/50532
Что показывает компилятор, если запустить его с ключём--vers?
У меня хедеры от мингвClang может работать с хедерами и линкером как студии, так и мингв.
Я просто не нашёл оллвм с клангом версии выше 5.0.0Clang 5.0.0 release, 11 LLVM
RtlGetCurrentPeb помогло, спасибо огромное!!!!Там кстати есть и RtlGetCurrentPeb()
Wine экспортирует:
$ grep Current.eb wine/dlls/ntdll/ntdll.spec
@ stdcall -arch=i386,arm64 NtCurrentTeb()
@ stdcall RtlGetCurrentPeb()
В Wine есть и ассемблерные варианты для GCC
C:#if defined(__i386__) && defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 2))) static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void) { struct _TEB *teb; __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb)); return teb; } #elif defined(__x86_64__) && defined(__GNUC__) static FORCEINLINE struct _TEB * WINAPI NtCurrentTeb(void) { struct _TEB *teb; __asm__(".byte 0x65\n\tmovq (0x30),%0" : "=r" (teb)); return teb; } #elif
Примерно так же реализованы интринсики для mingw-w64 https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-headers/include/psdk_inc/intrin-impl.h
Но это всё про GCC, а LLVM IR это вроде в Clang? Там есть такой интересный нюанс
lib/clang/13.0.0/include/intrin.h is missing __readfsdword
https://github.com/llvm/llvm-project/issues/50532
Что показывает компилятор, если запустить его с ключём--vers?