SAOC LLDB D integration: 16th Weekly Update

Luís Ferreira contact at lsferreira.net
Fri Jan 7 05:29:47 UTC 2022


Hi D community!

I'm here again, to describe what I've done during the sixteenth 
week of
Symmetry Autumn of Code.

## LLVM upstream updates

This week I continued my work on the demangler patches, including 
the next 3
patches related to minimal type parsing and symbol/type back 
referencing. I
removed most of the types in this next patch, due to the fact 
that it requires
other dependencies to be visually tested.

Two more patches got merged into the upstream. The LLD one got 
reverted due to
failures on PowerPC buildbots, although the error ended up being 
a missing
dependency. The second one was about the other patch I worked 
last week about
immutable type qualifier in the DWARF debug info:

- https://reviews.llvm.org/D113633
- https://reviews.llvm.org/D116279

## Extending value dumping for the rest of the built-in types

After adding support for boolean type I successfully extended 
type value
dumping for the rest of the built-in types:

```
(lldb) ta v
Global variables for app.d in app:
(int) app.int42_gvar = -42
(ulong) app.ulong42_gvar = 42
(uint) app.uint_gvar = 0
(uint) app.uint42_gvar = 42
(double) app.double_42_gvar = -42
(real) app.real42_gvar = 42
(long) app.long42_gvar = -42
(dchar) app.d = U+0x00000064
(ulong) app.ulong_gvar = 0
(char) app.c = 0x63
(bool) app.true_gvar = true
(ushort) app.ushort_gvar = 0
(byte) app.byte42_gvar = d6
(double) app.double_gvar = 0
(long) app.long_gvar = 0
(double) app.double42_gvar = 42
(float) app.float42_gvar = 42
(wchar) app.w = U+0077
...
```

I have tested almost every built-in type including `real`. Thanks 
to some
guidance on the previous weekly report, I made some basic logic 
to make `real`
work according to the exported DWARF type name, although 
realizing that D
should map directly to `long double`, I can later map the `real` 
bit size using
the same interface used in the Clang DWARF Parser 
(`clang::TargetInfo`).

 From what I tested, at least one target that have support for 
128bit `long
double`, RISC-V, is not correctly mapped by the LDC compiler, so 
I decided to
make a PR to fix that:

https://github.com/ldc-developers/ldc/pull/3891
https://github.com/ldc-developers/ldc/pull/3892

## What is next?

After having support for basic built-in types functionality, I 
plan to
implement some type modifiers, including `const` and add support 
for other
derived types. I also plan to work in parallel to merge some more 
patches about
the demangler.



More information about the Digitalmars-d mailing list