This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH libctf] Fix a number of build problems found on Solaris and NetBSD
- From: Szabolcs Nagy <Szabolcs dot Nagy at arm dot com>
- To: Nick Alcock <nick dot alcock at oracle dot com>, "binutils at sourceware dot org" <binutils at sourceware dot org>
- Cc: nd <nd at arm dot com>, "nickc at redhat dot com" <nickc at redhat dot com>, Szabolcs Nagy <nsz at port70 dot net>, "christophe dot lyon at linaro dot org" <christophe dot lyon at linaro dot org>, Rainer Orth <ro at cebitec dot uni-bielefeld dot de>, Simon Marchi <simark at simark dot ca>, Kamil Rytarowski <n54 at gmx dot com>, "Jose E. Marchesi" <jose dot marchesi at oracle dot com>
- Date: Thu, 30 May 2019 14:21:29 +0000
- Subject: Re: [PATCH libctf] Fix a number of build problems found on Solaris and NetBSD
- References: <8736kw2h5b.fsf@esperi.org.uk>
On 30/05/2019 14:42, Nick Alcock wrote:
> - Use of nonportable <endian.h>
> - Use of qsort_r
> - Use of zlib without appropriate magic to pull in the binutils zlib
> - Use of off64_t without checking (fixed by dropping the unused fields
> that need off64_t entirely)
> - signedness problems due to long being too short a type on 32-bit
> platforms: ctf_id_t is now 'unsigned long', and CTF_ERR must be
> used only for functions that return ctf_id_t
> - One lingering use of bzero() and of <sys/errno.h>
>
> All fixed, using code from gnulib where possible.
>
> Relatedly, set cts_size in a couple of places it was missed
> (string table and symbol table loading upon ctf_bfdopen()).
>
> binutils/
> * objdump.c (make_ctfsect): Drop cts_type, cts_flags, and
> cts_offset.
> * readelf.c (shdr_to_ctf_sect): Likewise.
> include/
> * ctf-api.h (ctf_sect_t): Drop cts_type, cts_flags, and cts_offset.
> (ctf_id_t): This is now an unsigned type.
> (CTF_ERR): Cast it to ctf_id_t. Note that it should only be used
> for ctf_id_t-returning functions.
> libctf/
> * Makefile.am (ZLIB): New.
> (ZLIBINC): Likewise.
> (AM_CFLAGS): Use them.
> (libctf_a_LIBADD): New, for LIBOBJS.
> * configure.ac: Check for zlib, endian.h, and qsort_r.
> * ctf-endian.h: New, providing htole64 and le64toh.
> * swap.h: Code style fixes.
> (bswap_identity_64): New.
> * qsort_r.c: New, from gnulib (with one added #include).
> * ctf-decls.h: New, providing a conditional qsort_r declaration,
> and unconditional definitions of MIN and MAX.
> * ctf-impl.h: Use it. Do not use <sys/errno.h>.
> (ctf_set_errno): Now returns unsigned long.
> * ctf-util.c (ctf_set_errno): Adjust here too.
> * ctf-archive.c: Use ctf-endian.h.
> (ctf_arc_open_by_offset): Use memset, not bzero. Drop cts_type,
> cts_flags and cts_offset.
> (ctf_arc_write): Drop debugging dependent on the size of off_t.
> * ctf-create.c: Provide a definition of roundup if not defined.
> (ctf_create): Drop cts_type, cts_flags and cts_offset.
> (ctf_add_reftype): Do not check if type IDs are below zero.
> (ctf_add_slice): Likewise.
> (ctf_add_typedef): Likewise.
> (ctf_add_member_offset): Cast error-returning ssize_t's to size_t
> when known error-free. Drop CTF_ERR usage for functions returning
> int.
> (ctf_add_member_encoded): Drop CTF_ERR usage for functions returning
> int.
> (ctf_add_variable): Likewise.
> (enumcmp): Likewise.
> (enumadd): Likewise.
> (membcmp): Likewise.
> (ctf_add_type): Likewise. Cast error-returning ssize_t's to size_t
> when known error-free.
> * ctf-dump.c (ctf_is_slice): Drop CTF_ERR usage for functions
> returning int: use CTF_ERR for functions returning ctf_type_id.
> (ctf_dump_label): Likewise.
> (ctf_dump_objts): Likewise.
> * ctf-labels.c (ctf_label_topmost): Likewise.
> (ctf_label_iter): Likewise.
> (ctf_label_info): Likewise.
> * ctf-lookup.c (ctf_func_args): Likewise.
> * ctf-open.c (upgrade_types): Cast to size_t where appropriate.
> (ctf_bufopen): Likewise. Use zlib types as needed.
> * ctf-types.c (ctf_member_iter): Drop CTF_ERR usage for functions
> returning int.
> (ctf_enum_iter): Likewise.
> (ctf_type_size): Likewise.
> (ctf_type_align): Likewise. Cast to size_t where appropriate.
> (ctf_type_kind_unsliced): Likewise.
> (ctf_type_kind): Likewise.
> (ctf_type_encoding): Likewise.
> (ctf_member_info): Likewise.
> (ctf_array_info): Likewise.
> (ctf_enum_value): Likewise.
> (ctf_type_rvisit): Likewise.
> * ctf-open-bfd.c (ctf_bfdopen): Drop cts_type, cts_flags and
> cts_offset.
> (ctf_simple_open): Likewise.
> (ctf_bfdopen_ctfsect): Likewise. Set cts_size properly.
> * Makefile.in: Regenerate.
> * aclocal.m4: Likewise.
> * config.h: Likewise.
> * configure: Likewise.
> ---
> binutils/ChangeLog | 6 +
> binutils/objdump.c | 3 -
> binutils/readelf.c | 3 -
> include/ChangeLog | 7 +
> include/ctf-api.h | 12 +-
> libctf/ChangeLog | 67 +++++++++
> libctf/Makefile.am | 9 +-
> libctf/Makefile.in | 24 +++-
> libctf/aclocal.m4 | 1 +
> libctf/config.h.in | 22 +++
> libctf/configure | 322 +++++++++++++++++++++++++++++++++++++++++-
> libctf/configure.ac | 6 +-
> libctf/ctf-archive.c | 8 +-
> libctf/ctf-create.c | 50 ++++---
> libctf/ctf-decls.h | 37 +++++
> libctf/ctf-dump.c | 20 +--
> libctf/ctf-endian.h | 37 +++++
> libctf/ctf-impl.h | 5 +-
> libctf/ctf-labels.c | 8 +-
> libctf/ctf-lookup.c | 4 +-
> libctf/ctf-open-bfd.c | 11 +-
> libctf/ctf-open.c | 13 +-
> libctf/ctf-types.c | 48 +++----
> libctf/ctf-util.c | 4 +-
> libctf/qsort_r.c | 259 +++++++++++++++++++++++++++++++++
> libctf/swap.h | 12 +-
> 26 files changed, 883 insertions(+), 115 deletions(-)
> create mode 100644 libctf/ctf-decls.h
> create mode 100644 libctf/ctf-endian.h
> create mode 100644 libctf/qsort_r.c
>
> This patch assumes that commit
> 90bd54236cb8b1c31c3662977159be971044c20d is reverted first. (It, and
> commit e33f2313bf63b77763739732be14b469b4b647b7, are unnecessary now
> that commit 9698cf9b1c485edbbeabc9f65bfd0fdef92e3854 is in.)
>
fwiw i applied the patch on top of
9698cf9b1c485edbbeabc9f65bfd0fdef92e3854
and it fixes my build issue.
i cannot apply it on top of master, but i'd
like to fix the build issue soon, so our
builders can continue testing binutils.