Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit 2f99c8c

Browse files
author
Evgeny Pavlov
committed
Use NewArrayHolder instead of raw pointers
1 parent 1a0a5c8 commit 2f99c8c

File tree

2 files changed

+9
-82
lines changed

2 files changed

+9
-82
lines changed

src/vm/gdbjit.cpp

Lines changed: 8 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ void NotifyGdb::MethodCompiled(MethodDesc* MethodDescPtr)
264264
if (pCode == NULL)
265265
return;
266266
unsigned int symInfoLen = 0;
267-
SymbolsInfo* symInfo = nullptr;
267+
NewArrayHolder<SymbolsInfo> symInfo = nullptr;
268268

269269
/* Get method name & size of jitted code */
270270
LPCUTF8 methodName = MethodDescPtr->GetName();
@@ -296,15 +296,12 @@ void NotifyGdb::MethodCompiled(MethodDesc* MethodDescPtr)
296296
/* Build .debug_abbrev section */
297297
if (!BuildDebugAbbrev(dbgAbbrev))
298298
{
299-
delete[] symInfo;
300299
return;
301300
}
302301

303302
/* Build .debug_line section */
304303
if (!BuildLineTable(dbgLine, pCode, symInfo, symInfoLen))
305304
{
306-
delete[] symInfo;
307-
delete[] dbgAbbrev.MemPtr;
308305
return;
309306
}
310307

@@ -314,75 +311,42 @@ void NotifyGdb::MethodCompiled(MethodDesc* MethodDescPtr)
314311
/* Build .debug_str section */
315312
if (!BuildDebugStrings(dbgStr))
316313
{
317-
delete[] symInfo;
318-
delete[] dbgAbbrev.MemPtr;
319-
delete[] dbgLine.MemPtr;
320314
return;
321315
}
322316

323317
/* Build .debug_info section */
324318
if (!BuildDebugInfo(dbgInfo))
325319
{
326-
delete[] symInfo;
327-
delete[] dbgAbbrev.MemPtr;
328-
delete[] dbgLine.MemPtr;
329-
delete[] dbgStr.MemPtr;
330320
return;
331321
}
332322

333323
/* Build .debug_pubname section */
334324
if (!BuildDebugPub(dbgPubname, methodName, dbgInfo.MemSize, 26))
335325
{
336-
delete[] symInfo;
337-
delete[] dbgAbbrev.MemPtr;
338-
delete[] dbgLine.MemPtr;
339-
delete[] dbgStr.MemPtr;
340-
delete[] dbgInfo.MemPtr;
341326
return;
342327
}
343328

344329
/* Build debug_pubtype section */
345330
if (!BuildDebugPub(dbgPubType, "int", dbgInfo.MemSize, 37))
346331
{
347-
delete[] symInfo;
348-
delete[] dbgAbbrev.MemPtr;
349-
delete[] dbgLine.MemPtr;
350-
delete[] dbgStr.MemPtr;
351-
delete[] dbgInfo.MemPtr;
352-
delete[] dbgPubname.MemPtr;
353332
return;
354333
}
355334

356335
/* Build section names section */
357336
if (!BuildSectionNameTable(sectStr))
358337
{
359-
delete[] symInfo;
360-
delete[] dbgAbbrev.MemPtr;
361-
delete[] dbgLine.MemPtr;
362-
delete[] dbgStr.MemPtr;
363-
delete[] dbgInfo.MemPtr;
364-
delete[] dbgPubname.MemPtr;
365-
delete[] dbgPubType.MemPtr;
366338
return;
367339
}
368340

369341
/* Build section headers table */
370342
if (!BuildSectionTable(sectHeaders))
371343
{
372-
delete[] symInfo;
373-
delete[] dbgAbbrev.MemPtr;
374-
delete[] dbgLine.MemPtr;
375-
delete[] dbgStr.MemPtr;
376-
delete[] dbgInfo.MemPtr;
377-
delete[] dbgPubname.MemPtr;
378-
delete[] dbgPubType.MemPtr;
379-
delete[] sectStr.MemPtr;
380344
return;
381345
}
382346

383347
/* Patch section offsets & sizes */
384348
long offset = sizeof(Elf_Ehdr);
385-
Elf_Shdr* pShdr = reinterpret_cast<Elf_Shdr*>(sectHeaders.MemPtr);
349+
Elf_Shdr* pShdr = reinterpret_cast<Elf_Shdr*>(sectHeaders.MemPtr.Extract());
386350
++pShdr; // .text
387351
pShdr->sh_addr = pCode;
388352
pShdr->sh_size = codeSize;
@@ -418,18 +382,9 @@ void NotifyGdb::MethodCompiled(MethodDesc* MethodDescPtr)
418382
/* Build ELF header */
419383
if (!BuildELFHeader(elfHeader))
420384
{
421-
delete[] symInfo;
422-
delete[] dbgAbbrev.MemPtr;
423-
delete[] dbgLine.MemPtr;
424-
delete[] dbgStr.MemPtr;
425-
delete[] dbgInfo.MemPtr;
426-
delete[] dbgPubname.MemPtr;
427-
delete[] dbgPubType.MemPtr;
428-
delete[] sectStr.MemPtr;
429-
delete[] sectHeaders.MemPtr;
430385
return;
431386
}
432-
Elf_Ehdr* header = reinterpret_cast<Elf_Ehdr*>(elfHeader.MemPtr);
387+
Elf_Ehdr* header = reinterpret_cast<Elf_Ehdr*>(elfHeader.MemPtr.Extract());
433388
#ifdef _TARGET_ARM_
434389
header->e_flags = EF_ARM_EABI_VER5;
435390
#ifdef ARM_SOFTFP
@@ -449,16 +404,6 @@ void NotifyGdb::MethodCompiled(MethodDesc* MethodDescPtr)
449404
elfFile.MemPtr = new (nothrow) char[elfFile.MemSize];
450405
if (elfFile.MemPtr == nullptr)
451406
{
452-
delete[] symInfo;
453-
delete[] dbgAbbrev.MemPtr;
454-
delete[] dbgLine.MemPtr;
455-
delete[] dbgStr.MemPtr;
456-
delete[] dbgInfo.MemPtr;
457-
delete[] dbgPubname.MemPtr;
458-
delete[] dbgPubType.MemPtr;
459-
delete[] sectStr.MemPtr;
460-
delete[] sectHeaders.MemPtr;
461-
delete[] elfHeader.MemPtr;
462407
return;
463408
}
464409

@@ -481,24 +426,12 @@ void NotifyGdb::MethodCompiled(MethodDesc* MethodDescPtr)
481426
memcpy(elfFile.MemPtr + offset, dbgLine.MemPtr, dbgLine.MemSize);
482427
offset += dbgLine.MemSize;
483428
memcpy(elfFile.MemPtr + offset, sectHeaders.MemPtr, sectHeaders.MemSize);
484-
485-
delete[] symInfo;
486-
delete[] elfHeader.MemPtr;
487-
delete[] sectStr.MemPtr;
488-
delete[] dbgStr.MemPtr;
489-
delete[] dbgAbbrev.MemPtr;
490-
delete[] dbgInfo.MemPtr;
491-
delete[] dbgPubname.MemPtr;
492-
delete[] dbgPubType.MemPtr;
493-
delete[] dbgLine.MemPtr;
494-
delete[] sectHeaders.MemPtr;
495-
429+
496430
/* Create GDB JIT structures */
497431
jit_code_entry* jit_symbols = new (nothrow) jit_code_entry;
498432

499433
if (jit_symbols == nullptr)
500434
{
501-
delete elfFile.MemPtr;
502435
return;
503436
}
504437

@@ -571,7 +504,6 @@ bool NotifyGdb::BuildLineTable(MemBuf& buf, PCODE startAddr, SymbolsInfo* lines,
571504
/* Build line info program */
572505
if (!BuildLineProg(lineProg, startAddr, lines, nlines))
573506
{
574-
delete[] fileTable.MemPtr;
575507
return false;
576508
}
577509

@@ -580,13 +512,11 @@ bool NotifyGdb::BuildLineTable(MemBuf& buf, PCODE startAddr, SymbolsInfo* lines,
580512

581513
if (buf.MemPtr == nullptr)
582514
{
583-
delete[] fileTable.MemPtr;
584-
delete[] lineProg.MemPtr;
585515
return false;
586516
}
587517

588518
/* Fill the line info header */
589-
DwarfLineNumHeader* header = reinterpret_cast<DwarfLineNumHeader*>(buf.MemPtr);
519+
DwarfLineNumHeader* header = reinterpret_cast<DwarfLineNumHeader*>(buf.MemPtr.Extract());
590520
memcpy(buf.MemPtr, &LineNumHeader, sizeof(DwarfLineNumHeader));
591521
header->m_length = buf.MemSize - sizeof(uint32_t);
592522
header->m_hdr_length = sizeof(DwarfLineNumHeader) + 1 + fileTable.MemSize - 2 * sizeof(uint32_t) - sizeof(uint16_t);
@@ -595,10 +525,7 @@ bool NotifyGdb::BuildLineTable(MemBuf& buf, PCODE startAddr, SymbolsInfo* lines,
595525
memcpy(buf.MemPtr + sizeof(DwarfLineNumHeader) + 1, fileTable.MemPtr, fileTable.MemSize);
596526
/* copy line program */
597527
memcpy(buf.MemPtr + sizeof(DwarfLineNumHeader) + 1 + fileTable.MemSize, lineProg.MemPtr, lineProg.MemSize);
598-
599-
delete[] fileTable.MemPtr;
600-
delete[] lineProg.MemPtr;
601-
528+
602529
return true;
603530
}
604531

@@ -826,7 +753,7 @@ bool NotifyGdb::BuildDebugInfo(MemBuf& buf)
826753
return false;
827754

828755
/* Compile uint header */
829-
DwarfCompUnit* cu = reinterpret_cast<DwarfCompUnit*>(buf.MemPtr);
756+
DwarfCompUnit* cu = reinterpret_cast<DwarfCompUnit*>(buf.MemPtr.Extract());
830757
cu->m_length = buf.MemSize - sizeof(uint32_t);
831758
cu->m_version = 4;
832759
cu->m_abbrev_offset = 0;
@@ -856,7 +783,7 @@ bool NotifyGdb::BuildDebugPub(MemBuf& buf, const char* name, uint32_t size, uint
856783
if (buf.MemPtr == nullptr)
857784
return false;
858785

859-
DwarfPubHeader* header = reinterpret_cast<DwarfPubHeader*>(buf.MemPtr);
786+
DwarfPubHeader* header = reinterpret_cast<DwarfPubHeader*>(buf.MemPtr.Extract());
860787
header->m_length = length - sizeof(uint32_t);
861788
header->m_version = 2;
862789
header->m_debug_info_off = 0;

src/vm/gdbjit.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ class NotifyGdb
493493
private:
494494
struct MemBuf
495495
{
496-
char* MemPtr;
496+
NewArrayHolder<char> MemPtr;
497497
unsigned MemSize;
498498
MemBuf() : MemPtr(0), MemSize(0)
499499
{}

0 commit comments

Comments
 (0)