diff options
-rw-r--r-- | ld/ChangeLog | 5 | ||||
-rw-r--r-- | ld/testsuite/ld-ctf/enum-forward.c | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-ctf/enum-forward.d | 20 | ||||
-rw-r--r-- | libctf/ChangeLog | 5 | ||||
-rw-r--r-- | libctf/ctf-types.c | 21 |
5 files changed, 52 insertions, 1 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 213aed0..b939f61 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,10 @@ 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. * testsuite/ld-ctf/conflicting-cycle-1.B-1.d: Likewise. * testsuite/ld-ctf/conflicting-cycle-1.B-2.d: Likewise. diff --git a/ld/testsuite/ld-ctf/enum-forward.c b/ld/testsuite/ld-ctf/enum-forward.c new file mode 100644 index 0000000..e0a64b8 --- /dev/null +++ b/ld/testsuite/ld-ctf/enum-forward.c @@ -0,0 +1,2 @@ +enum vibgyor; +char * (*get_color_name) (enum vibgyor); diff --git a/ld/testsuite/ld-ctf/enum-forward.d b/ld/testsuite/ld-ctf/enum-forward.d new file mode 100644 index 0000000..a83651e --- /dev/null +++ b/ld/testsuite/ld-ctf/enum-forward.d @@ -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]*\) + +#... diff --git a/libctf/ChangeLog b/libctf/ChangeLog index 4c62cf1..0aaf306 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,5 +1,10 @@ 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. <ctf_pptrtab_len>: New. <ctf_pptrtab_typemax>: New. diff --git a/libctf/ctf-types.c b/libctf/ctf-types.c index 6275be0..4129fbc 100644 --- a/libctf/ctf-types.c +++ b/libctf/ctf-types.c @@ -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; |