[PATCH] D42145: [lldb] Use vFlash commands when writing to target's flash memory regions

Pavel Labath via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 27 17:16:06 PST 2018


labath added a comment.

Ok, so this is what seems to be happening:
The vdso "file" has the following program headers:

  Program Headers:
    Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
    LOAD           0x000000 0xffffe000 0x00000000 0x00434 0x00434 R E 0x1000
    DYNAMIC        0x000324 0xffffe324 0x00000324 0x00090 0x00090 R   0x4
    NOTE           0x0001c4 0xffffe1c4 0x000001c4 0x00034 0x00034 R   0x4
    GNU_EH_FRAME   0x0001f8 0xffffe1f8 0x000001f8 0x00024 0x00024 R   0x4

Your patch makes the makes us use the physical addresses (because some of the physical addresses are non-null), but in this case that is incorrect. For this file the VirtAddr describes the correct address of the file/section/segment in memory. Also the addresses in the section headers  (which is what we were using previously are correct.

Going back to your patch, it's not clear to me whether using physical addresses as load addresses is a correct thing to do in general. I mean, generally, we care about the places where the object file is located in virtual memory, and in physical, so maybe we should keep use virtual addresses here, and have ObjectFile::LoadInMemory use physical addresses through some other api? What do you think?

That said, on my desktop machine I get the following program headers from the vdso:

  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  LOAD           0x000000 0x00000000 0x00000000 0x00d1a 0x00d1a R E 0x1000
  DYNAMIC        0x0002bc 0x000002bc 0x000002bc 0x00090 0x00090 R   0x4
  NOTE           0x000560 0x00000560 0x00000560 0x00060 0x00060 R   0x4
  GNU_EH_FRAME   0x0005c0 0x000005c0 0x000005c0 0x00024 0x00024 R   0x4

and things still work fine, so it may be possible to make this work by just changing how we compute the load bias (I have to look up where we do that). 
(However, I am still not sure about using physical addresses being the right thing here).


Repository:
  rL LLVM

https://reviews.llvm.org/D42145





More information about the llvm-commits mailing list