libctf, ld: fix formatting of forwards to unions and enums
The type printer was unconditionally printing these as if they were forwards to structs, even if they were forwards to unions or enums. ld/ChangeLog 2021-01-05 Nick Alcock <nick.alcock@oracle.com> * testsuite/ld-ctf/enum-forward.c: New test. * testsuite/ld-ctf/enum-forward.c: New results. libctf/ChangeLog 2021-01-05 Nick Alcock <nick.alcock@oracle.com> * ctf-types.c (ctf_type_aname): Print forwards to unions and enums properly.
This commit is contained in:
parent
608a333d7d
commit
b4b6ea4680
5 changed files with 52 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
|||
2021-01-05 Nick Alcock <nick.alcock@oracle.com>
|
||||
|
||||
* testsuite/ld-ctf/enum-forward.c: New test.
|
||||
* testsuite/ld-ctf/enum-forward.c: New results.
|
||||
|
||||
2021-01-05 Nick Alcock <nick.alcock@oracle.com>
|
||||
|
||||
* testsuite/ld-ctf/array.d: Adjust for dumper changes.
|
||||
|
|
2
ld/testsuite/ld-ctf/enum-forward.c
Normal file
2
ld/testsuite/ld-ctf/enum-forward.c
Normal file
|
@ -0,0 +1,2 @@
|
|||
enum vibgyor;
|
||||
char * (*get_color_name) (enum vibgyor);
|
20
ld/testsuite/ld-ctf/enum-forward.d
Normal file
20
ld/testsuite/ld-ctf/enum-forward.d
Normal file
|
@ -0,0 +1,20 @@
|
|||
#as:
|
||||
#source: enum-forward.c
|
||||
#objdump: --ctf=.ctf
|
||||
#ld: -shared
|
||||
#name: Forwards to enums
|
||||
|
||||
.*: +file format .*
|
||||
|
||||
Contents of CTF section .ctf:
|
||||
|
||||
Header:
|
||||
Magic number: 0xdff2
|
||||
Version: 4 \(CTF_VERSION_3\)
|
||||
#...
|
||||
Type section: .* \(0x48 bytes\)
|
||||
#...
|
||||
Data objects:
|
||||
get_color_name -> 0x[0-9a-f]*: \(kind 3\) char \*\*\(\*\) \(enum vibgyor\) \(size 0x[0-9a-f]*\) \(aligned at 0x[0-9a-f]*\) -> 0x[0-9a-f]*: \(kind 5\) char \*\(\*\) \(enum vibgyor\) \(aligned at 0x[0-9a-f]*\)
|
||||
|
||||
#...
|
|
@ -1,3 +1,8 @@
|
|||
2021-01-05 Nick Alcock <nick.alcock@oracle.com>
|
||||
|
||||
* ctf-types.c (ctf_type_aname): Print forwards to unions and enums
|
||||
properly.
|
||||
|
||||
2021-01-05 Nick Alcock <nick.alcock@oracle.com>
|
||||
|
||||
* ctf-impl.h (ctf_dict_t) <ctf_pptrtab>: New.
|
||||
|
|
|
@ -834,7 +834,6 @@ ctf_type_aname (ctf_dict_t *fp, ctf_id_t type)
|
|||
}
|
||||
break;
|
||||
case CTF_K_STRUCT:
|
||||
case CTF_K_FORWARD:
|
||||
ctf_decl_sprintf (&cd, "struct %s", name);
|
||||
break;
|
||||
case CTF_K_UNION:
|
||||
|
@ -843,6 +842,26 @@ ctf_type_aname (ctf_dict_t *fp, ctf_id_t type)
|
|||
case CTF_K_ENUM:
|
||||
ctf_decl_sprintf (&cd, "enum %s", name);
|
||||
break;
|
||||
case CTF_K_FORWARD:
|
||||
{
|
||||
switch (ctf_type_kind_forwarded (fp, cdp->cd_type))
|
||||
{
|
||||
case CTF_K_STRUCT:
|
||||
ctf_decl_sprintf (&cd, "struct %s", name);
|
||||
break;
|
||||
case CTF_K_UNION:
|
||||
ctf_decl_sprintf (&cd, "union %s", name);
|
||||
break;
|
||||
case CTF_K_ENUM:
|
||||
ctf_decl_sprintf (&cd, "enum %s", name);
|
||||
break;
|
||||
default:
|
||||
ctf_set_errno (fp, ECTF_CORRUPT);
|
||||
ctf_decl_fini (&cd);
|
||||
return NULL;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CTF_K_VOLATILE:
|
||||
ctf_decl_sprintf (&cd, "volatile");
|
||||
break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue