@@ -264,7 +264,7 @@ void NotifyGdb::MethodCompiled(MethodDesc* MethodDescPtr)
264
264
if (pCode == NULL )
265
265
return ;
266
266
unsigned int symInfoLen = 0 ;
267
- SymbolsInfo* symInfo = nullptr ;
267
+ NewArrayHolder< SymbolsInfo> symInfo = nullptr ;
268
268
269
269
/* Get method name & size of jitted code */
270
270
LPCUTF8 methodName = MethodDescPtr->GetName ();
@@ -296,15 +296,12 @@ void NotifyGdb::MethodCompiled(MethodDesc* MethodDescPtr)
296
296
/* Build .debug_abbrev section */
297
297
if (!BuildDebugAbbrev (dbgAbbrev))
298
298
{
299
- delete[] symInfo;
300
299
return ;
301
300
}
302
301
303
302
/* Build .debug_line section */
304
303
if (!BuildLineTable (dbgLine, pCode, symInfo, symInfoLen))
305
304
{
306
- delete[] symInfo;
307
- delete[] dbgAbbrev.MemPtr ;
308
305
return ;
309
306
}
310
307
@@ -314,75 +311,42 @@ void NotifyGdb::MethodCompiled(MethodDesc* MethodDescPtr)
314
311
/* Build .debug_str section */
315
312
if (!BuildDebugStrings (dbgStr))
316
313
{
317
- delete[] symInfo;
318
- delete[] dbgAbbrev.MemPtr ;
319
- delete[] dbgLine.MemPtr ;
320
314
return ;
321
315
}
322
316
323
317
/* Build .debug_info section */
324
318
if (!BuildDebugInfo (dbgInfo))
325
319
{
326
- delete[] symInfo;
327
- delete[] dbgAbbrev.MemPtr ;
328
- delete[] dbgLine.MemPtr ;
329
- delete[] dbgStr.MemPtr ;
330
320
return ;
331
321
}
332
322
333
323
/* Build .debug_pubname section */
334
324
if (!BuildDebugPub (dbgPubname, methodName, dbgInfo.MemSize , 26 ))
335
325
{
336
- delete[] symInfo;
337
- delete[] dbgAbbrev.MemPtr ;
338
- delete[] dbgLine.MemPtr ;
339
- delete[] dbgStr.MemPtr ;
340
- delete[] dbgInfo.MemPtr ;
341
326
return ;
342
327
}
343
328
344
329
/* Build debug_pubtype section */
345
330
if (!BuildDebugPub (dbgPubType, " int" , dbgInfo.MemSize , 37 ))
346
331
{
347
- delete[] symInfo;
348
- delete[] dbgAbbrev.MemPtr ;
349
- delete[] dbgLine.MemPtr ;
350
- delete[] dbgStr.MemPtr ;
351
- delete[] dbgInfo.MemPtr ;
352
- delete[] dbgPubname.MemPtr ;
353
332
return ;
354
333
}
355
334
356
335
/* Build section names section */
357
336
if (!BuildSectionNameTable (sectStr))
358
337
{
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 ;
366
338
return ;
367
339
}
368
340
369
341
/* Build section headers table */
370
342
if (!BuildSectionTable (sectHeaders))
371
343
{
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 ;
380
344
return ;
381
345
}
382
346
383
347
/* Patch section offsets & sizes */
384
348
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 () );
386
350
++pShdr; // .text
387
351
pShdr->sh_addr = pCode;
388
352
pShdr->sh_size = codeSize;
@@ -418,18 +382,9 @@ void NotifyGdb::MethodCompiled(MethodDesc* MethodDescPtr)
418
382
/* Build ELF header */
419
383
if (!BuildELFHeader (elfHeader))
420
384
{
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 ;
430
385
return ;
431
386
}
432
- Elf_Ehdr* header = reinterpret_cast <Elf_Ehdr*>(elfHeader.MemPtr );
387
+ Elf_Ehdr* header = reinterpret_cast <Elf_Ehdr*>(elfHeader.MemPtr . Extract () );
433
388
#ifdef _TARGET_ARM_
434
389
header->e_flags = EF_ARM_EABI_VER5;
435
390
#ifdef ARM_SOFTFP
@@ -449,16 +404,6 @@ void NotifyGdb::MethodCompiled(MethodDesc* MethodDescPtr)
449
404
elfFile.MemPtr = new (nothrow) char [elfFile.MemSize ];
450
405
if (elfFile.MemPtr == nullptr )
451
406
{
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 ;
462
407
return ;
463
408
}
464
409
@@ -481,24 +426,12 @@ void NotifyGdb::MethodCompiled(MethodDesc* MethodDescPtr)
481
426
memcpy (elfFile.MemPtr + offset, dbgLine.MemPtr , dbgLine.MemSize );
482
427
offset += dbgLine.MemSize ;
483
428
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
+
496
430
/* Create GDB JIT structures */
497
431
jit_code_entry* jit_symbols = new (nothrow) jit_code_entry;
498
432
499
433
if (jit_symbols == nullptr )
500
434
{
501
- delete elfFile.MemPtr ;
502
435
return ;
503
436
}
504
437
@@ -571,7 +504,6 @@ bool NotifyGdb::BuildLineTable(MemBuf& buf, PCODE startAddr, SymbolsInfo* lines,
571
504
/* Build line info program */
572
505
if (!BuildLineProg (lineProg, startAddr, lines, nlines))
573
506
{
574
- delete[] fileTable.MemPtr ;
575
507
return false ;
576
508
}
577
509
@@ -580,13 +512,11 @@ bool NotifyGdb::BuildLineTable(MemBuf& buf, PCODE startAddr, SymbolsInfo* lines,
580
512
581
513
if (buf.MemPtr == nullptr )
582
514
{
583
- delete[] fileTable.MemPtr ;
584
- delete[] lineProg.MemPtr ;
585
515
return false ;
586
516
}
587
517
588
518
/* Fill the line info header */
589
- DwarfLineNumHeader* header = reinterpret_cast <DwarfLineNumHeader*>(buf.MemPtr );
519
+ DwarfLineNumHeader* header = reinterpret_cast <DwarfLineNumHeader*>(buf.MemPtr . Extract () );
590
520
memcpy (buf.MemPtr , &LineNumHeader, sizeof (DwarfLineNumHeader));
591
521
header->m_length = buf.MemSize - sizeof (uint32_t );
592
522
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,
595
525
memcpy (buf.MemPtr + sizeof (DwarfLineNumHeader) + 1 , fileTable.MemPtr , fileTable.MemSize );
596
526
/* copy line program */
597
527
memcpy (buf.MemPtr + sizeof (DwarfLineNumHeader) + 1 + fileTable.MemSize , lineProg.MemPtr , lineProg.MemSize );
598
-
599
- delete[] fileTable.MemPtr ;
600
- delete[] lineProg.MemPtr ;
601
-
528
+
602
529
return true ;
603
530
}
604
531
@@ -826,7 +753,7 @@ bool NotifyGdb::BuildDebugInfo(MemBuf& buf)
826
753
return false ;
827
754
828
755
/* Compile uint header */
829
- DwarfCompUnit* cu = reinterpret_cast <DwarfCompUnit*>(buf.MemPtr );
756
+ DwarfCompUnit* cu = reinterpret_cast <DwarfCompUnit*>(buf.MemPtr . Extract () );
830
757
cu->m_length = buf.MemSize - sizeof (uint32_t );
831
758
cu->m_version = 4 ;
832
759
cu->m_abbrev_offset = 0 ;
@@ -856,7 +783,7 @@ bool NotifyGdb::BuildDebugPub(MemBuf& buf, const char* name, uint32_t size, uint
856
783
if (buf.MemPtr == nullptr )
857
784
return false ;
858
785
859
- DwarfPubHeader* header = reinterpret_cast <DwarfPubHeader*>(buf.MemPtr );
786
+ DwarfPubHeader* header = reinterpret_cast <DwarfPubHeader*>(buf.MemPtr . Extract () );
860
787
header->m_length = length - sizeof (uint32_t );
861
788
header->m_version = 2 ;
862
789
header->m_debug_info_off = 0 ;
0 commit comments