[binutils-gdb] libctf: fix ctf_archive_count return value on big-endian

Nick Alcock nix@sourceware.org
Wed Jul 31 20:45:42 GMT 2024


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=86fd34fde15021bb9157b7da55316c34f8c9fe1d

commit 86fd34fde15021bb9157b7da55316c34f8c9fe1d
Author: Nick Alcock <nick.alcock@oracle.com>
Date:   Tue Jul 30 12:28:04 2024 +0100

    libctf: fix ctf_archive_count return value on big-endian
    
    This failed to properly byteswap its return value.
    
    The ctf_archive format predates the idea of "just write natively and
    flip on open", and byteswaps all over the place.  It's too easy to
    forget one.  The next revision of the archive format (not versioned,
    so we just tweak the magic number instead) should be native-endianned
    like the dicts inside it are.
    
    libctf/
            * ctf-archive.c (ctf_archive_count): Byteswap return value.

Diff:
---
 libctf/ctf-archive.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libctf/ctf-archive.c b/libctf/ctf-archive.c
index 0034bf0982a..b73999cacb5 100644
--- a/libctf/ctf-archive.c
+++ b/libctf/ctf-archive.c
@@ -785,7 +785,7 @@ ctf_archive_count (const ctf_archive_t *wrapper)
   if (!wrapper->ctfi_is_archive)
     return 1;
 
-  return wrapper->ctfi_archive->ctfa_ndicts;
+  return le64toh (wrapper->ctfi_archive->ctfa_ndicts);
 }
 
 /* Look up a symbol in an archive by name or index (if the name is set, a lookup


More information about the Binutils-cvs mailing list