980b4d53 | 16-Nov-2014 |
Mark Johnston <markj@FreeBSD.org> |
Remove an incorrect optimization. The type IDs of each member of a struct or union must be checked when determine whether two types are equivalent. This bug could cause ctfmerge(1) to incorrectly mer
Remove an incorrect optimization. The type IDs of each member of a struct or union must be checked when determine whether two types are equivalent. This bug could cause ctfmerge(1) to incorrectly merge distinct types.
Reviewed by: Robert Mustacchi <rm@joyent.com> MFC after: 2 weeks Sponsored by: EMC / Isilon Storage Division
show more ...
|
d32f0149 | 20-Jan-2014 |
Kai Wang <kaiw@FreeBSD.org> |
Clang 3.4 will sometimes emit DIE for struct/union member before emitting the DIE for the type of that member. ctfconvert can not handle this properly and will calculate a wrong member bit offset. Sa
Clang 3.4 will sometimes emit DIE for struct/union member before emitting the DIE for the type of that member. ctfconvert can not handle this properly and will calculate a wrong member bit offset. Same struct/union type from different .o file will be treated as different types when their member bit offsets are different, and gets added/merged multiple times. This will in turn cause many other structs/pointers/typedefs that refer to the duplicated struct/union gets added/merged multiple times and eventually causes numerous duplicated CTF types in the kernel.debug file.
The simple workaround here is to make use of DW_AT_byte_size attribute of the member DIE to calculate the bits occupied by the member's type, without actually resolving the type.
show more ...
|
aedbdd2c | 17-Jan-2014 |
Kai Wang <kaiw@FreeBSD.org> |
We should not set the unnamed DIE's name to "__anon__" since that will bring back a known issue with DTrace regarding type name comparison. Instead, we can set the name to an empty string.
Pointed o
We should not set the unnamed DIE's name to "__anon__" since that will bring back a known issue with DTrace regarding type name comparison. Instead, we can set the name to an empty string.
Pointed out by: avg
show more ...
|
1391789e | 16-Jan-2014 |
Kai Wang <kaiw@FreeBSD.org> |
If function die_name() finds a DIE without a name, set its name to "__anon__". This hack is used to workaround a issue that compilers like GCC could generate DW_TAG_base_type DIE without a name.
Not
If function die_name() finds a DIE without a name, set its name to "__anon__". This hack is used to workaround a issue that compilers like GCC could generate DW_TAG_base_type DIE without a name.
Note that we didn't need this before because the old libdwarf internally set all the unnamed DIE's name to "__anon__".
show more ...
|