[clang] Add `target modules dump separate-debug-info` (PR #66035)

2023-10-12 Thread Tom Yang via cfe-commits

https://github.com/zhyty updated https://github.com/llvm/llvm-project/pull/66035

>From 9a52ac5193af2a8ddca2a5d922684935b043d0ef Mon Sep 17 00:00:00 2001
From: Tom Yang 
Date: Mon, 11 Sep 2023 17:17:13 -0700
Subject: [PATCH 1/2] Add `target modules dump separate-debug-info`

Summary:

Add a new command
```
target modules dump separate-debug-info [-j] [ [ [...]]]
```
or
```
image dump separate-debug-info [-j] [ [ [...]]]
```
(since `image` is an alias for `target modules`).

This lists the separate debug info files and their current status (loaded or 
not loaded) for the specified modules. This diff implements this command for 
mach-O files with OSO and ELF files with dwo.

Example dwo:
```
(lldb) image dump separate-debug-info
Symbol file: /home/toyang/workspace/dwo-scratch/a.out
Type: "dwo"
Dwo ID Dwo Path
-- -
0x9a429da5abb6faae /home/toyang/workspace/dwo-scratch/a-main.dwo
0xbcc129959e76ff33 /home/toyang/workspace/dwo-scratch/a-foo.dwo

(lldb) image dump separate-debug-info -j
[
  {
"separate-debug-info-files": [
  {
"comp_dir": "/home/toyang/workspace/dwo-scratch",
"dwo_id": 5620165179865774,
"dwo_name": "a-main.dwo",
"loaded": true,
"resolved_dwo_path": "/home/toyang/workspace/dwo-scratch/a-main.dwo"
  },
  {
"comp_dir": "/home/toyang/workspace/dwo-scratch",
"dwo_id": 13601198072221073203,
"dwo_name": "a-foo.dwo",
"loaded": true,
"resolved_dwo_path": "/home/toyang/workspace/dwo-scratch/a-foo.dwo"
  }
],
"symfile": "/home/toyang/workspace/dwo-scratch/a.out",
"type": "dwo"
  }
]
```

Example dwo with missing dwo:
```
(lldb) image dump separate-debug-info
Symbol file: /home/toyang/workspace/dwo-scratch/a.out
Type: "dwo"
Dwo ID Dwo Path
-- -
0x9a429da5abb6faae error: unable to locate .dwo debug file 
"/home/toyang/workspace/dwo-scratch/a-main.dwo" for skeleton DIE 
0x0014
0xbcc129959e76ff33 error: unable to locate .dwo debug file 
"/home/toyang/workspace/dwo-scratch/a-foo.dwo" for skeleton DIE 
0x003c

(lldb) image dump separate-debug-info -j
[
  {
"separate-debug-info-files": [
  {
"comp_dir": "/home/toyang/workspace/dwo-scratch",
"dwo_id": 5620165179865774,
"dwo_name": "a-main.dwo",
"error": "unable to locate .dwo debug file 
\"/home/toyang/workspace/dwo-scratch/a-main.dwo\" for skeleton DIE 
0x0014",
"loaded": false
  },
  {
"comp_dir": "/home/toyang/workspace/dwo-scratch",
"dwo_id": 13601198072221073203,
"dwo_name": "a-foo.dwo",
"error": "unable to locate .dwo debug file 
\"/home/toyang/workspace/dwo-scratch/a-foo.dwo\" for skeleton DIE 
0x003c",
"loaded": false
  }
],
"symfile": "/home/toyang/workspace/dwo-scratch/a.out",
"type": "dwo"
  }
]
```

Example output with dwp:
```
(lldb) image dump separate-debug-info
Symbol file: /home/toyang/workspace/dwo-scratch/a.out
Type: "dwo"
Dwo ID Dwo Path
-- -
0x9a429da5abb6faae /home/toyang/workspace/dwo-scratch/a.out.dwp(a-main.dwo)
0xbcc129959e76ff33 /home/toyang/workspace/dwo-scratch/a.out.dwp(a-foo.dwo)

(lldb) image dump separate-debug-info -j
[
  {
"separate-debug-info-files": [
  {
"comp_dir": "/home/toyang/workspace/dwo-scratch",
"dwo_id": 5620165179865774,
"dwo_name": "a-main.dwo",
"loaded": true,
"resolved_dwo_path": "/home/toyang/workspace/dwo-scratch/a.out.dwp"
  },
  {
"comp_dir": "/home/toyang/workspace/dwo-scratch",
"dwo_id": 13601198072221073203,
"dwo_name": "a-foo.dwo",
"loaded": true,
"resolved_dwo_path": "/home/toyang/workspace/dwo-scratch/a.out.dwp"
  }
],
"symfile": "/home/toyang/workspace/dwo-scratch/a.out",
"type": "dwo"
  }
]
```

Example oso on my Mac (after manipulating the mod times with `touch`):
```
(lldb) image dump separate-debug-info
Symbol file: /Users/toyang/workspace/scratch/a.out
Type: "oso"
Mod Time   Oso Path
-- -
0x64e64868 /Users/toyang/workspace/scratch/foo.a(foo.o)
0x64e64868 /Users/toyang/workspace/scratch/foo.a(main.o)

(lldb) image dump separate-debug-info -j
[
  {
"separate-debug-info-files": [
  {
"loaded": true,
"oso_mod_time": 1692813416,
"oso_path": "/Users/toyang/workspace/scratch/foo.a(foo.o)",
"so_file": "/Users/toyang/workspace/scratch/foo.cpp"
  },
  {
"loaded": true,
"oso_mod_time": 1692813416,
"oso_path": "/Users/toyang/workspace/scratch/foo.a(main.o)",
"so_file": "/Users/toyang/workspace/scratch/main.cpp"
  }
],
"symfile": "/Users/toyang/workspace/scratch/a.out",
   

[clang-tools-extra] Add `target modules dump separate-debug-info` (PR #66035)

2023-10-12 Thread Tom Yang via cfe-commits

https://github.com/zhyty updated https://github.com/llvm/llvm-project/pull/66035

>From 9a52ac5193af2a8ddca2a5d922684935b043d0ef Mon Sep 17 00:00:00 2001
From: Tom Yang 
Date: Mon, 11 Sep 2023 17:17:13 -0700
Subject: [PATCH 1/2] Add `target modules dump separate-debug-info`

Summary:

Add a new command
```
target modules dump separate-debug-info [-j] [ [ [...]]]
```
or
```
image dump separate-debug-info [-j] [ [ [...]]]
```
(since `image` is an alias for `target modules`).

This lists the separate debug info files and their current status (loaded or 
not loaded) for the specified modules. This diff implements this command for 
mach-O files with OSO and ELF files with dwo.

Example dwo:
```
(lldb) image dump separate-debug-info
Symbol file: /home/toyang/workspace/dwo-scratch/a.out
Type: "dwo"
Dwo ID Dwo Path
-- -
0x9a429da5abb6faae /home/toyang/workspace/dwo-scratch/a-main.dwo
0xbcc129959e76ff33 /home/toyang/workspace/dwo-scratch/a-foo.dwo

(lldb) image dump separate-debug-info -j
[
  {
"separate-debug-info-files": [
  {
"comp_dir": "/home/toyang/workspace/dwo-scratch",
"dwo_id": 5620165179865774,
"dwo_name": "a-main.dwo",
"loaded": true,
"resolved_dwo_path": "/home/toyang/workspace/dwo-scratch/a-main.dwo"
  },
  {
"comp_dir": "/home/toyang/workspace/dwo-scratch",
"dwo_id": 13601198072221073203,
"dwo_name": "a-foo.dwo",
"loaded": true,
"resolved_dwo_path": "/home/toyang/workspace/dwo-scratch/a-foo.dwo"
  }
],
"symfile": "/home/toyang/workspace/dwo-scratch/a.out",
"type": "dwo"
  }
]
```

Example dwo with missing dwo:
```
(lldb) image dump separate-debug-info
Symbol file: /home/toyang/workspace/dwo-scratch/a.out
Type: "dwo"
Dwo ID Dwo Path
-- -
0x9a429da5abb6faae error: unable to locate .dwo debug file 
"/home/toyang/workspace/dwo-scratch/a-main.dwo" for skeleton DIE 
0x0014
0xbcc129959e76ff33 error: unable to locate .dwo debug file 
"/home/toyang/workspace/dwo-scratch/a-foo.dwo" for skeleton DIE 
0x003c

(lldb) image dump separate-debug-info -j
[
  {
"separate-debug-info-files": [
  {
"comp_dir": "/home/toyang/workspace/dwo-scratch",
"dwo_id": 5620165179865774,
"dwo_name": "a-main.dwo",
"error": "unable to locate .dwo debug file 
\"/home/toyang/workspace/dwo-scratch/a-main.dwo\" for skeleton DIE 
0x0014",
"loaded": false
  },
  {
"comp_dir": "/home/toyang/workspace/dwo-scratch",
"dwo_id": 13601198072221073203,
"dwo_name": "a-foo.dwo",
"error": "unable to locate .dwo debug file 
\"/home/toyang/workspace/dwo-scratch/a-foo.dwo\" for skeleton DIE 
0x003c",
"loaded": false
  }
],
"symfile": "/home/toyang/workspace/dwo-scratch/a.out",
"type": "dwo"
  }
]
```

Example output with dwp:
```
(lldb) image dump separate-debug-info
Symbol file: /home/toyang/workspace/dwo-scratch/a.out
Type: "dwo"
Dwo ID Dwo Path
-- -
0x9a429da5abb6faae /home/toyang/workspace/dwo-scratch/a.out.dwp(a-main.dwo)
0xbcc129959e76ff33 /home/toyang/workspace/dwo-scratch/a.out.dwp(a-foo.dwo)

(lldb) image dump separate-debug-info -j
[
  {
"separate-debug-info-files": [
  {
"comp_dir": "/home/toyang/workspace/dwo-scratch",
"dwo_id": 5620165179865774,
"dwo_name": "a-main.dwo",
"loaded": true,
"resolved_dwo_path": "/home/toyang/workspace/dwo-scratch/a.out.dwp"
  },
  {
"comp_dir": "/home/toyang/workspace/dwo-scratch",
"dwo_id": 13601198072221073203,
"dwo_name": "a-foo.dwo",
"loaded": true,
"resolved_dwo_path": "/home/toyang/workspace/dwo-scratch/a.out.dwp"
  }
],
"symfile": "/home/toyang/workspace/dwo-scratch/a.out",
"type": "dwo"
  }
]
```

Example oso on my Mac (after manipulating the mod times with `touch`):
```
(lldb) image dump separate-debug-info
Symbol file: /Users/toyang/workspace/scratch/a.out
Type: "oso"
Mod Time   Oso Path
-- -
0x64e64868 /Users/toyang/workspace/scratch/foo.a(foo.o)
0x64e64868 /Users/toyang/workspace/scratch/foo.a(main.o)

(lldb) image dump separate-debug-info -j
[
  {
"separate-debug-info-files": [
  {
"loaded": true,
"oso_mod_time": 1692813416,
"oso_path": "/Users/toyang/workspace/scratch/foo.a(foo.o)",
"so_file": "/Users/toyang/workspace/scratch/foo.cpp"
  },
  {
"loaded": true,
"oso_mod_time": 1692813416,
"oso_path": "/Users/toyang/workspace/scratch/foo.a(main.o)",
"so_file": "/Users/toyang/workspace/scratch/main.cpp"
  }
],
"symfile": "/Users/toyang/workspace/scratch/a.out",