block_of_code: Provide an alloc function to allocate space in the code block
This commit is contained in:
parent
f467589346
commit
179a3388f9
2 changed files with 13 additions and 0 deletions
|
@ -4,6 +4,7 @@
|
|||
* General Public License version 2 or any later version.
|
||||
*/
|
||||
|
||||
#include <cstring>
|
||||
#include <limits>
|
||||
|
||||
#include <xbyak.h>
|
||||
|
@ -227,6 +228,17 @@ void BlockOfCode::nop(size_t size) {
|
|||
}
|
||||
}
|
||||
|
||||
void* BlockOfCode::alloc(size_t alloc_size) {
|
||||
if (size_ + alloc_size >= maxSize_) {
|
||||
throw Xbyak::Error(Xbyak::ERR_CODE_IS_TOO_BIG);
|
||||
}
|
||||
|
||||
void* ret = getCurr<void*>();
|
||||
size_ += alloc_size;
|
||||
memset(ret, 0, alloc_size);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void BlockOfCode::SetCodePtr(CodePtr code_ptr) {
|
||||
// The "size" defines where top_, the insertion point, is.
|
||||
size_t required_size = reinterpret_cast<const u8*>(code_ptr) - getCode();
|
||||
|
|
|
@ -127,6 +127,7 @@ public:
|
|||
void int3() { db(0xCC); }
|
||||
void nop(size_t size = 1);
|
||||
|
||||
void* alloc(size_t size);
|
||||
void SetCodePtr(CodePtr code_ptr);
|
||||
void EnsurePatchLocationSize(CodePtr begin, size_t size);
|
||||
|
||||
|
|
Loading…
Reference in a new issue