124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ABISysV_x86_64.h ----------------------------------------*- C++ -*-===// 224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// The LLVM Compiler Infrastructure 424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source 624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details. 724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===// 924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_ABISysV_x86_64_h_ 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_ABISysV_x86_64_h_ 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h" 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/ABI.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ABISysV_x86_64 : 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner public lldb_private::ABI 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 2475906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton 2537f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton ~ABISysV_x86_64() 2675906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton { 2775906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton } 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual size_t 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetRedZoneSize () const; 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 3375906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton PrepareTrivialCall (lldb_private::Thread &thread, 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t sp, 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t functionAddress, 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t returnAddress, 37989816b9505219cd67ce044d655c54ac86ecf64bGreg Clayton lldb::addr_t *arg1_ptr = NULL, 38989816b9505219cd67ce044d655c54ac86ecf64bGreg Clayton lldb::addr_t *arg2_ptr = NULL, 39989816b9505219cd67ce044d655c54ac86ecf64bGreg Clayton lldb::addr_t *arg3_ptr = NULL, 40989816b9505219cd67ce044d655c54ac86ecf64bGreg Clayton lldb::addr_t *arg4_ptr = NULL, 41989816b9505219cd67ce044d655c54ac86ecf64bGreg Clayton lldb::addr_t *arg5_ptr = NULL, 42989816b9505219cd67ce044d655c54ac86ecf64bGreg Clayton lldb::addr_t *arg6_ptr = NULL) const; 4375906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton 4475906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton virtual bool 4575906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton GetArgumentValues (lldb_private::Thread &thread, 4675906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton lldb_private::ValueList &values) const; 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 48a17a81a1a9ff6b8d87c4a1e47dd874f6ea8a4f1dJim Ingham virtual lldb_private::Error 49a17a81a1a9ff6b8d87c4a1e47dd874f6ea8a4f1dJim Ingham SetReturnValueObject(lldb::StackFrameSP &frame_sp, lldb::ValueObjectSP &new_value); 50a17a81a1a9ff6b8d87c4a1e47dd874f6ea8a4f1dJim Ingham 51016ef8886cd429f8a53bff967e601f831e409eaaJim Inghamprotected: 52016ef8886cd429f8a53bff967e601f831e409eaaJim Ingham lldb::ValueObjectSP 53016ef8886cd429f8a53bff967e601f831e409eaaJim Ingham GetReturnValueObjectSimple (lldb_private::Thread &thread, 54f95fc9e09fa0a32de0a3904a1517266df37e8bffGreg Clayton lldb_private::ClangASTType &ast_type) const; 55466574555e98bc093d443d88492ce9db6ef3015fJim Ingham 56016ef8886cd429f8a53bff967e601f831e409eaaJim Inghampublic: 57016ef8886cd429f8a53bff967e601f831e409eaaJim Ingham virtual lldb::ValueObjectSP 58016ef8886cd429f8a53bff967e601f831e409eaaJim Ingham GetReturnValueObjectImpl (lldb_private::Thread &thread, 59016ef8886cd429f8a53bff967e601f831e409eaaJim Ingham lldb_private::ClangASTType &type) const; 60016ef8886cd429f8a53bff967e601f831e409eaaJim Ingham 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual bool 6275906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton CreateFunctionEntryUnwindPlan (lldb_private::UnwindPlan &unwind_plan); 6375906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton 6475906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton virtual bool 6575906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton CreateDefaultUnwindPlan (lldb_private::UnwindPlan &unwind_plan); 6675906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton 6775906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton virtual bool 6875906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton RegisterIsVolatile (const lldb_private::RegisterInfo *reg_info); 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7054b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton virtual bool 7154b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton StackUsesFrames () 7254b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton { 7354b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton return true; 7454b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton } 7554b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton 7654b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton virtual bool 7754b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton CallFrameAddressIsValid (lldb::addr_t cfa) 7854b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton { 7954b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton // Make sure the stack call frame addresses are are 8 byte aligned 8054b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton if (cfa & (8ull - 1ull)) 8154b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton return false; // Not 8 byte aligned 8254b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton if (cfa == 0) 8354b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton return false; // Zero is not a valid stack address 8454b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton return true; 8554b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton } 8654b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton 8754b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton virtual bool 8854b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton CodeAddressIsValid (lldb::addr_t pc) 8954b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton { 9054b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton // We have a 64 bit address space, so anything is valid as opcodes 9154b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton // aren't fixed width... 9254b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton return true; 9354b38413f62af3bcaeb8802a978cc621c8e88eb1Greg Clayton } 945d30ea748f55faa7542c1b3ba31fe36f402beee2Jason Molenda 955d30ea748f55faa7542c1b3ba31fe36f402beee2Jason Molenda virtual bool 965d30ea748f55faa7542c1b3ba31fe36f402beee2Jason Molenda FunctionCallsChangeCFA () 975d30ea748f55faa7542c1b3ba31fe36f402beee2Jason Molenda { 985d30ea748f55faa7542c1b3ba31fe36f402beee2Jason Molenda return true; 995d30ea748f55faa7542c1b3ba31fe36f402beee2Jason Molenda } 1005d30ea748f55faa7542c1b3ba31fe36f402beee2Jason Molenda 10137f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton virtual const lldb_private::RegisterInfo * 10237f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton GetRegisterInfoArray (uint32_t &count); 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Static Functions 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Initialize(); 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static void 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Terminate(); 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11275906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton static lldb::ABISP 11375906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton CreateInstance (const lldb_private::ArchSpec &arch); 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1150e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton static lldb_private::ConstString 1160e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton GetPluginNameStatic(); 1170e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // PluginInterface protocol 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 1210e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton virtual lldb_private::ConstString 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetPluginName(); 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner virtual uint32_t 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetPluginVersion(); 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 12837f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton void 12937f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton CreateRegisterMapIfNeeded (); 13037f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton 13175906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton bool 13275906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton RegisterIsCalleeSaved (const lldb_private::RegisterInfo *reg_info); 13375906e4ec98af3717e415727a8d663a4e246bb4fGreg Clayton 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ABISysV_x86_64() : lldb_private::ABI() { } // Call CreateInstance instead. 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_ABI_h_ 139