| OLD | NEW |
| 1 //===------- ItaniumCXXABI.cpp - Emit LLVM Code from ASTs for a Module ----===// | 1 //===------- ItaniumCXXABI.cpp - Emit LLVM Code from ASTs for a Module ----===// |
| 2 // | 2 // |
| 3 // The LLVM Compiler Infrastructure | 3 // The LLVM Compiler Infrastructure |
| 4 // | 4 // |
| 5 // This file is distributed under the University of Illinois Open Source | 5 // This file is distributed under the University of Illinois Open Source |
| 6 // License. See LICENSE.TXT for details. | 6 // License. See LICENSE.TXT for details. |
| 7 // | 7 // |
| 8 //===----------------------------------------------------------------------===// | 8 //===----------------------------------------------------------------------===// |
| 9 // | 9 // |
| 10 // This provides C++ code generation targeting the Itanium C++ ABI. The class | 10 // This provides C++ code generation targeting the Itanium C++ ABI. The class |
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 case TargetCXXABI::iOS64: | 332 case TargetCXXABI::iOS64: |
| 333 return new iOS64CXXABI(CGM); | 333 return new iOS64CXXABI(CGM); |
| 334 | 334 |
| 335 // Note that AArch64 uses the generic ItaniumCXXABI class since it doesn't | 335 // Note that AArch64 uses the generic ItaniumCXXABI class since it doesn't |
| 336 // include the other 32-bit ARM oddities: constructor/destructor return values | 336 // include the other 32-bit ARM oddities: constructor/destructor return values |
| 337 // and array cookies. | 337 // and array cookies. |
| 338 case TargetCXXABI::GenericAArch64: | 338 case TargetCXXABI::GenericAArch64: |
| 339 return new ItaniumCXXABI(CGM, /* UseARMMethodPtrABI = */ true, | 339 return new ItaniumCXXABI(CGM, /* UseARMMethodPtrABI = */ true, |
| 340 /* UseARMGuardVarABI = */ true); | 340 /* UseARMGuardVarABI = */ true); |
| 341 | 341 |
| 342 // @LOCALMOD-START Emscripten |
| 343 case TargetCXXABI::Emscripten: |
| 344 // Use ARM-style method pointers so that generated code does not assume |
| 345 // anything about the alignment of function pointers. |
| 346 return new ItaniumCXXABI(CGM, /* UseARMMethodPtrABI = */ true, |
| 347 /* UseARMGuardVarABI = */ false); |
| 348 // @LOCALMOD-END Emscripten |
| 349 |
| 342 case TargetCXXABI::GenericItanium: | 350 case TargetCXXABI::GenericItanium: |
| 343 if (CGM.getContext().getTargetInfo().getTriple().getArch() | 351 if (CGM.getContext().getTargetInfo().getTriple().getArch() |
| 344 == llvm::Triple::le32) { | 352 == llvm::Triple::le32) { |
| 345 // For PNaCl, use ARM-style method pointers so that PNaCl code | 353 // For PNaCl, use ARM-style method pointers so that PNaCl code |
| 346 // does not assume anything about the alignment of function | 354 // does not assume anything about the alignment of function |
| 347 // pointers. | 355 // pointers. |
| 348 return new ItaniumCXXABI(CGM, /* UseARMMethodPtrABI = */ true, | 356 return new ItaniumCXXABI(CGM, /* UseARMMethodPtrABI = */ true, |
| 349 /* UseARMGuardVarABI = */ false); | 357 /* UseARMGuardVarABI = */ false); |
| 350 } | 358 } |
| 351 return new ItaniumCXXABI(CGM); | 359 return new ItaniumCXXABI(CGM); |
| (...skipping 2844 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3196 SmallString<256> Buffer; | 3204 SmallString<256> Buffer; |
| 3197 llvm::raw_svector_ostream Out(Buffer); | 3205 llvm::raw_svector_ostream Out(Buffer); |
| 3198 if (DD) | 3206 if (DD) |
| 3199 getMangleContext().mangleCXXDtorComdat(DD, Out); | 3207 getMangleContext().mangleCXXDtorComdat(DD, Out); |
| 3200 else | 3208 else |
| 3201 getMangleContext().mangleCXXCtorComdat(CD, Out); | 3209 getMangleContext().mangleCXXCtorComdat(CD, Out); |
| 3202 llvm::Comdat *C = CGM.getModule().getOrInsertComdat(Out.str()); | 3210 llvm::Comdat *C = CGM.getModule().getOrInsertComdat(Out.str()); |
| 3203 Fn->setComdat(C); | 3211 Fn->setComdat(C); |
| 3204 } | 3212 } |
| 3205 } | 3213 } |
| OLD | NEW |