Project

General

Profile

Bug #6892

ctf_add_encoded assigns() incorrect byte size to types

Added by Robert Mustacchi over 3 years ago. Updated 5 months ago.

Status:
Closed
Priority:
Normal
Category:
lib - userland libraries
Start date:
2016-04-11
Due date:
% Done:

100%

Estimated time:
Difficulty:
Medium
Tags:

Description

The ctf_add_encoded routine attemps to round up the size of an encoded structure to a power of two number of bytes. This can be incorrect in many different cases and is rather arbitrary. For example, when processing a long double, on i386 this is actually 12 bytes long; however, it rounds it up to 16, which is drastically incorrect. In addition, when trying to work with bitfields, it assigns a drastically incorrect size. While we need to use a byte size to try and represent the amount of space this type takes up, we should instead round it up to the nearest byte, if and only if, the types size is not evenly divisible by the number of bits in a byte (NBBY macro).


Related issues

Related to illumos gate - Feature #6885: CTF Everywhere Part 1Closed2016-04-11

Actions

History

#1

Updated by Robert Mustacchi over 3 years ago

#2

Updated by Electric Monk 5 months ago

  • Status changed from New to Closed

git commit bc1f688b4872ace323eaddbb1a6365d054e7bf56

commit  bc1f688b4872ace323eaddbb1a6365d054e7bf56
Author: Robert Mustacchi <rm@joyent.com>
Date:   2019-02-11T17:40:04.000Z

    6885 CTF Everywhere Part 1
    6886 Want ctfdiff
    6887 ctfdump should be written in terms of libctf
    6888 ctfmerge should be implemented in terms of libctf
    6889 ctfconvert should be implemented in terms of libctf
    6890 Want general workq
    6891 Want general mergeq
    6892 ctf_add_encoded assigns() incorrect byte size to types
    6893 ctf_add_{struct,union,enum} can reuse forwards
    6894 ctf_add_{struct,union,enum} occasionally forget to dirty the ctf_file_t
    6895 ctf_add_member could better handle bitfields
    6896 ctf_type_size() reports wrong size for forwards
    6897 Want libctf ctf_kind_name() function
    6898 Want libctf function to set struct/union size
    Portions contributed by: John Levon <john.levon@joyent.com>
    Portions contributed by: Richard Lowe <richlowe@richlowe.net>
    Reviewed by: John Levon <john.levon@joyent.com>
    Reviewed by: Andy Fiddaman <andy@omniosce.org>
    Reviewed by: Gergő Doma <domag02@gmail.com>
    Approved by: Dan McDonald <danmcd@joyent.com>

Also available in: Atom PDF