2012-05-30 6 views
6

Alcune librerie di sistema come malloc strlen vogliono o restituiscono size_t come parametro.C'è un equivalente a size_t in llvm

  • Qual è la scelta giusta in LLVM IR per interagire con queste funzioni?
  • La selezione è l'attività per il compilatore?
  • LLVM IR ha un tipo size_t?

risposta

9

Al livello LLVM, size_t non esiste. È un costrutto a beneficio dello sviluppatore che viene tipizzato in un tipo nativo. I tipi nativi hanno una dimensione fissa per l'architettura di destinazione e questo è il modo in cui il compilatore li rappresenta nel codice bit LLVM. Quindi su x86, size_t potrebbe essere visto dal front-end come unsigned long, che poi scrive su LLVM come i32 (poiché l'assembly LLVM non ha un tipo unsigned).

+0

quindi è compito del compilatore conoscere l'architettura per la quale si sta compilando? – waynix

+0

@waynix, Sì, sicuramente. Se hai bisogno di interagire con C/C++ dovresti conoscere il target che stai compilando - queste lingue non sono neutrali al target. –

-2

È possibile utilizzare size_t a LLVM, è un tipo valido per essere utilizzato come normale.

+0

L'assemblatore llvm non conosce size_t. – waynix

+0

Potrebbe essersi riferito a Clang (il compilatore C). @waynix è corretto che non ci sia alcun tipo in LLVM. – mgiuca