diff options
-rw-r--r-- | ld/ChangeLog | 10 | ||||
-rw-r--r-- | ld/testsuite/ld-ctf/array.d | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-ctf/data-func-conflicted.d | 22 | ||||
-rw-r--r-- | ld/testsuite/ld-ctf/diag-cttname-null.d | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-ctf/diag-cuname.d | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-ctf/diag-parlabel.d | 2 | ||||
-rw-r--r-- | ld/testsuite/ld-ctf/function.d | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-ctf/slice.d | 2 | ||||
-rw-r--r-- | libctf/ChangeLog | 7 | ||||
-rw-r--r-- | libctf/ctf-dump.c | 70 |
10 files changed, 69 insertions, 56 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 21ba58a..a130c6c 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,6 +1,16 @@ 2021-01-05 Nick Alcock <nick.alcock@oracle.com> * testsuite/ld-ctf/array.d: Adjust for dumper changes. + * testsuite/ld-ctf/data-func-conflicted.d: Likewise. + * testsuite/ld-ctf/diag-cttname-null.d: Likewise. + * testsuite/ld-ctf/diag-cuname.d: Likewise. + * testsuite/ld-ctf/diag-parlabel.d: Likewise. + * testsuite/ld-ctf/function.d: Likewise. + * testsuite/ld-ctf/slice.d: Likewise. + +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. * testsuite/ld-ctf/conflicting-cycle-1.parent.d: Likewise. diff --git a/ld/testsuite/ld-ctf/array.d b/ld/testsuite/ld-ctf/array.d index e07d63e..6c3915a 100644 --- a/ld/testsuite/ld-ctf/array.d +++ b/ld/testsuite/ld-ctf/array.d @@ -20,8 +20,8 @@ Contents of CTF section .ctf: Labels: Data objects: - digits -> int \[10\] - digits_names -> char \*\[10\] + digits -> 0x[0-9a-f]*: int \[10\] .* + digits_names -> 0x[0-9a-f]*: char \*\[10\] .* Function objects: diff --git a/ld/testsuite/ld-ctf/data-func-conflicted.d b/ld/testsuite/ld-ctf/data-func-conflicted.d index 62855f8..e51bb76 100644 --- a/ld/testsuite/ld-ctf/data-func-conflicted.d +++ b/ld/testsuite/ld-ctf/data-func-conflicted.d @@ -20,12 +20,12 @@ Contents of CTF section \.ctf: String section: .* #... Data objects: - bar -> struct var_3 - var_1 -> foo_t - var_666 -> foo_t \* + bar -> 0x[0-9a-f]*: struct var_3 \(size 0x[0-9a-f]*\) + var_1 -> 0x[0-9a-f]*: foo_t \(size 0x[0-9a-f]*\) -> .* + var_666 -> 0x[0-9a-f]*: foo_t \* \(size 0x[0-9a-f]*\) -> .* Function objects: - func_[0-9]* -> void \*\(\*\) \(const char \*restrict, int \(\*\)\(\*\) \(const char \*\)\) + func_[0-9]* -> 0x[0-9a-f]*: void \*\(\*\) \(const char \*restrict, int \(\*\)\(\*\) \(const char \*\)\) #... Types: #... @@ -46,13 +46,13 @@ CTF archive member: .*/data-func-1\.c: Labels: Data objects: - var_[0-9]* -> foo_t - var_[0-9]* -> foo_t - var_[0-9]* -> foo_t - var_[0-9]* -> foo_t - var_[0-9]* -> foo_t - var_[0-9]* -> foo_t - var_[0-9]* -> foo_t + var_[0-9]* -> 0x[0-9a-f]*: foo_t \(size 0x[0-9a-f]*\) -> .* + var_[0-9]* -> 0x[0-9a-f]*: foo_t \(size 0x[0-9a-f]*\) -> .* + var_[0-9]* -> 0x[0-9a-f]*: foo_t \(size 0x[0-9a-f]*\) -> .* + var_[0-9]* -> 0x[0-9a-f]*: foo_t \(size 0x[0-9a-f]*\) -> .* + var_[0-9]* -> 0x[0-9a-f]*: foo_t \(size 0x[0-9a-f]*\) -> .* + var_[0-9]* -> 0x[0-9a-f]*: foo_t \(size 0x[0-9a-f]*\) -> .* + var_[0-9]* -> 0x[0-9a-f]*: foo_t \(size 0x[0-9a-f]*\) -> .* #... Function objects: diff --git a/ld/testsuite/ld-ctf/diag-cttname-null.d b/ld/testsuite/ld-ctf/diag-cttname-null.d index 00db425..86a7fd1 100644 --- a/ld/testsuite/ld-ctf/diag-cttname-null.d +++ b/ld/testsuite/ld-ctf/diag-cttname-null.d @@ -13,7 +13,7 @@ Contents of CTF section .ctf: Version: 4 \(CTF_VERSION_3\) #... Data objects: - a -> struct + a -> 0x[0-9a-f]*: struct \(size 0x[0-9a-f]*\) #... Types: #... diff --git a/ld/testsuite/ld-ctf/diag-cuname.d b/ld/testsuite/ld-ctf/diag-cuname.d index 19a4bfd..20624fd 100644 --- a/ld/testsuite/ld-ctf/diag-cuname.d +++ b/ld/testsuite/ld-ctf/diag-cuname.d @@ -21,7 +21,7 @@ Contents of CTF section .ctf: Labels: Data objects: - a -> struct A + a -> 0x[0-9a-f]*: struct A \(size 0x[0-9a-f]*\) #... Function objects: diff --git a/ld/testsuite/ld-ctf/diag-parlabel.d b/ld/testsuite/ld-ctf/diag-parlabel.d index b2b047c..5ad5870 100644 --- a/ld/testsuite/ld-ctf/diag-parlabel.d +++ b/ld/testsuite/ld-ctf/diag-parlabel.d @@ -20,7 +20,7 @@ Contents of CTF section .ctf: Labels: Data objects: - a -> struct A + a -> 0x[0-9a-f]*: struct A \(size 0x[0-9a-f]*\) #... Function objects: diff --git a/ld/testsuite/ld-ctf/function.d b/ld/testsuite/ld-ctf/function.d index 241adc2..9bf26a4 100644 --- a/ld/testsuite/ld-ctf/function.d +++ b/ld/testsuite/ld-ctf/function.d @@ -18,10 +18,10 @@ Contents of CTF section .ctf: String section: .* #... Function objects: - foo -> int \(\*\) \(char, int, float, void \*, void \(\*\)\(\*\) \(int\)\) + foo -> 0x[0-9a-f]*: int \(\*\) \(char, int, float, void \*, void \(\*\)\(\*\) \(int\)\) #... Types: #... - 0x[0-9a-f]*: int \(\*\) \(char, int, float, void \*, void \(\*\)\(\*\) \(int\)\) \(size 0x0\) + 0x[0-9a-f]*: int \(\*\) \(char, int, float, void \*, void \(\*\)\(\*\) \(int\)\) *\[0x0\] \(ID 0x[0-9a-f]*\) \(kind 5\) int \(\*\) \(char, int[0-9]*, float, void \*, void \(\*\)\(\*\) \(int\)\) \(aligned at 0x[0-9a-f]*\) #... diff --git a/ld/testsuite/ld-ctf/slice.d b/ld/testsuite/ld-ctf/slice.d index e42ffdf..3967a2d 100644 --- a/ld/testsuite/ld-ctf/slice.d +++ b/ld/testsuite/ld-ctf/slice.d @@ -19,7 +19,7 @@ Contents of CTF section .ctf: String section: .* #... Data objects: - slices -> struct slices + slices -> 0x[0-9a-f]*: struct slices \(size 0x[0-9a-f]*\) #... Types: #... diff --git a/libctf/ChangeLog b/libctf/ChangeLog index 99f9022..80f05e9 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,5 +1,12 @@ 2021-01-05 Nick Alcock <nick.alcock@oracle.com> + * ctf-dump.c (ctf_dump_objts): Dump by calling ctf_dump_format_type. + (ctf_dump_format_type): Don't emit the size for function objects. + Dump the element type of arrays like we dump the pointed-to type of + pointers, etc. + +2021-01-05 Nick Alcock <nick.alcock@oracle.com> + * ctf-dump.c (ctf_dump_format_type): Add 0x to hex type IDs. (ctf_dump_header): Add 0x to the hex magic number. (ctf_dump_str): Add 0x to the hex string offsets. diff --git a/libctf/ctf-dump.c b/libctf/ctf-dump.c index ee22f77..f01f225 100644 --- a/libctf/ctf-dump.c +++ b/libctf/ctf-dump.c @@ -93,6 +93,8 @@ ctf_dump_format_type (ctf_dict_t *fp, ctf_id_t id, int flag) do { ctf_encoding_t enc; + ctf_arinfo_t ar; + int kind, unsliced_kind; const char *nonroot_leader = ""; const char *nonroot_trailer = ""; @@ -123,26 +125,25 @@ ctf_dump_format_type (ctf_dict_t *fp, ctf_id_t id, int flag) bit = NULL; if (buf[0] != '\0') - { - str = str_append (str, buf); - str = str_append (str, " "); - } + str = str_append (str, buf); free (buf); buf = NULL; + unsliced_kind = ctf_type_kind_unsliced (fp, id); + kind = ctf_type_kind (fp, id); /* Slices get a different print representation. */ - if (ctf_type_kind_unsliced (fp, id) == CTF_K_SLICE) + if (unsliced_kind == CTF_K_SLICE) { ctf_type_encoding (fp, id, &enc); - if (asprintf (&bit, "[slice 0x%x:0x%x] ", + if (asprintf (&bit, " [slice 0x%x:0x%x]", enc.cte_offset, enc.cte_bits) < 0) goto oom; } - else if (ctf_type_kind (fp, id) == CTF_K_INTEGER) + else if (kind == CTF_K_INTEGER) { ctf_type_encoding (fp, id, &enc); - if (asprintf (&bit, "[0x%x:0x%x] ", + if (asprintf (&bit, " [0x%x:0x%x]", enc.cte_offset, enc.cte_bits) < 0) goto oom; } @@ -150,16 +151,27 @@ ctf_dump_format_type (ctf_dict_t *fp, ctf_id_t id, int flag) free (bit); bit = NULL; - if (asprintf (&bit, "(size 0x%lx)%s", - (unsigned long) ctf_type_size (fp, id), - nonroot_trailer) < 0) - goto oom; + if (kind != CTF_K_FUNCTION) + if (asprintf (&bit, " (size 0x%lx)%s", + (unsigned long) ctf_type_size (fp, id), + nonroot_trailer) < 0) + goto oom; str = str_append (str, bit); free (bit); bit = NULL; - new_id = ctf_type_reference (fp, id); + /* Keep going as long as this type references another. We consider arrays + to "reference" their element type. */ + + if (kind == CTF_K_ARRAY) + { + if (ctf_array_info (fp, id, &ar) < 0) + goto err; + new_id = ar.ctr_contents; + } + else + new_id = ctf_type_reference (fp, id); if (new_id != CTF_ERR) str = str_append (str, " ->"); } while (new_id != CTF_ERR); @@ -383,36 +395,26 @@ ctf_dump_objts (ctf_dict_t *fp, ctf_dump_state_t *state, int functions) while ((id = ctf_symbol_next (fp, &i, &name, functions)) != CTF_ERR) { char *typestr = NULL; - int err = 0; - /* Emit the name, if we know it. */ + /* Emit the name, if we know it. No trailing space: ctf_dump_format_type + has a leading one. */ if (name) { - if (asprintf (&str, "%s -> ", name) < 0) + if (asprintf (&str, "%s ->", name) < 0) goto oom; } else str = xstrdup (""); - if ((typestr = ctf_type_aname (fp, id)) == NULL) + if ((typestr = ctf_dump_format_type (state->cds_fp, id, + CTF_ADD_ROOT)) == NULL) { - if (id == 0 || ctf_errno (fp) == ECTF_NONREPRESENTABLE) - { - if (asprintf (&typestr, " (%s)", _("type not represented in CTF")) < 0) - goto oom; - - goto out; - } - - if (asprintf (&typestr, _("error: %s"), ctf_errmsg (ctf_errno (fp))) < 0) - goto oom; - - err = -1; - goto out; + ctf_dump_append (state, str); + continue; /* Swallow the error. */ } str = str_append (str, typestr); - str = str_append (str, "\n"); + free (typestr); ctf_dump_append (state, str); continue; @@ -420,12 +422,6 @@ ctf_dump_objts (ctf_dict_t *fp, ctf_dump_state_t *state, int functions) ctf_set_errno (fp, ENOMEM); ctf_next_destroy (i); return -1; - out: - str = str_append (str, typestr); - free (typestr); - ctf_dump_append (state, str); - ctf_next_destroy (i); - return err; /* errno is set for us. */ } return 0; } |