Revision tags: v0.8.0 |
|
#
c8df31c1 |
| 21-May-2024 |
Andrew Jeffery <andrew@codeconstruct.com.au> |
msgbuf: Add error code personalities
libpldm is in a bit of a transitional period with respect to returned error codes. A historical choice was to return PLDM completion codes from the library API t
msgbuf: Add error code personalities
libpldm is in a bit of a transitional period with respect to returned error codes. A historical choice was to return PLDM completion codes from the library API to indicate errors. This is unfortunate because we're now constrained to errors that are specified by the PLDM protocol, which is much less expressive than the set of errors that might be produced by a run-time environment for the library.
The choice going forward is to return C's errno codes. However at this point we step on another rake in the libpldm design, which is that some internal data structures are very much the wire format of corresponding PLDM messages (such as the PDR repository implementation). Working with wire-format buffers is most safely done via the msgbuf APIs, however we then hit the conflict of different error code styles in various parts of the API surface.
Do a bit of surgery to provide different error code personalities for msgbuf, such that the caller can pick the style of error code they need it to return to maintain consistency.
Note that like the previous patch marking all msgbuf APIs as __attribute__((always_inline)), the rework here makes another small impact on the argument register allocation of several stable APIs. The ABI dump is updated accordingly.
Change-Id: Id59c39c5c822f514f546dab88575317071a97c96 Signed-off-by: Andrew Jeffery <andrew@codeconstruct.com.au>
show more ...
|
#
66c7723a |
| 23-Apr-2024 |
Andrew Jeffery <andrew@codeconstruct.com.au> |
msgbuf: Enable pldm_msgbuf_extract() into packed members
`pldm_msgbuf_extract()` should work correctly regardless of whether the `dst` argument is a member of a packed or padded struct.
To get ther
msgbuf: Enable pldm_msgbuf_extract() into packed members
`pldm_msgbuf_extract()` should work correctly regardless of whether the `dst` argument is a member of a packed or padded struct.
To get there while still achieving type safety we have to jump through some hoops. Commentary in the patch hopefully captures many of them, but a side-effect of the hoop-jumping is a couple of changes to ergonomics of the msgbuf API:
1. `pldm_msgbuf_extract()` no-longer requires that the `dst` argument be a pointer. Instead, it must be an lvalue, removing all the `&<lvalue>` noise from the call-sites.
2. However, unfortunately the generic extraction macro has been split in two. We now have:
2.1 `pldm_msgbuf_extract()`, and 2.2 `pldm_msgbuf_extract_p()`, for when the reference we already have for the `dst` object is a pointer and not an lvalue.
The split was necessary because I couldn't get GCC and Clang to play nice with differences required in the assignment expression for lvalue and pointer type-names in the one macro. Whilst it causes a bunch of churn it isn't a great concern as the APIs are purely internal to the library implementation.
Change-Id: Ifc5440a5b838a48bb84c881ec334d9e145365edb Signed-off-by: Andrew Jeffery <andrew@codeconstruct.com.au> Signed-off-by: Thu Nguyen <thu@os.amperecomputing.com>
show more ...
|
#
691668fe |
| 01-Nov-2023 |
Patrick Williams <patrick@stwcx.xyz> |
license: add spdx identifier to all files
Signed-off-by: Patrick Williams <patrick@stwcx.xyz> Change-Id: Ifddd07cc0eb5edeb2dcb410747073d68c6631cb1
|
Revision tags: v0.7.0, v0.6.0, v0.5.0, v0.4.0, v0.3.0 |
|
#
062c8762 |
| 22-Apr-2023 |
Thu Nguyen <thu@os.amperecomputing.com> |
msgbuf: Add insert and span APIs
pldm_msgbuf_insert() is generic APIs to insert data to a pointer. It automatically calls the correct insertor API for the type of the packing data. pldm_msgbuf_span_
msgbuf: Add insert and span APIs
pldm_msgbuf_insert() is generic APIs to insert data to a pointer. It automatically calls the correct insertor API for the type of the packing data. pldm_msgbuf_span_required() spans the input number of bytes from buffer to the input double pointer. pldm_msgbuf_span_remaining() extracts the remaining number of bytes from buffer to the input double pointer.
Signed-off-by: Thu Nguyen <thu@os.amperecomputing.com> Change-Id: Ide7dbf735f69a8288e6f39a0b7b5c33aad38a98e
show more ...
|
#
369b121a |
| 20-Apr-2023 |
Andrew Jeffery <andrew@aj.id.au> |
msgbuf: Add pldm_msgbuf_extract_array() for uint8
This is required for converting the decode_get_pdr_repository_info_resp() function to pldm_msgbuf.
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
msgbuf: Add pldm_msgbuf_extract_array() for uint8
This is required for converting the decode_get_pdr_repository_info_resp() function to pldm_msgbuf.
Signed-off-by: Andrew Jeffery <andrew@aj.id.au> Change-Id: If9afcaa83872969bcf8e4d0ecdeae2971e12248b
show more ...
|
#
c63f63a2 |
| 24-Feb-2023 |
Andrew Jeffery <andrew@aj.id.au> |
Introduce a small msgbuf abstraction
Tidy up how we extract data from wire-format buffers.
The API achieves the following:
1. Abstracts the buffer tracking to improve clarity in the calling code
Introduce a small msgbuf abstraction
Tidy up how we extract data from wire-format buffers.
The API achieves the following:
1. Abstracts the buffer tracking to improve clarity in the calling code
2. Prevents buffer overflows during data extraction
3. Handles type conversions while avoiding undefined behaviour
4. Handles alignment concerns with packed data and removes the need for `__attribute__((packed))` structs in the public ABI
5. Handles the endianness conversions required by the PLDM specification(s)
6. Batches error checks such that you mostly only have to do `return pldm_msgbuf_destroy();` at the end of the decode_* function for error handling, no error handling required on every `pldm_msgbuf_extract()` call
7. pldm_msgbuf_extract() is generic over the type of the data pointer (automatically calls the correct extractor for the type of the pointer)
8. Generates optimal code (where the optimiser can prove the accesses are in-bounds we generate straight-line load/store pairs and no function calls)
Signed-off-by: Andrew Jeffery <andrew@aj.id.au> Change-Id: I7e727cbd26c43aae2815ababe0e6ca4c8e629766 Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
show more ...
|