mirror of
https://github.com/ipxe/ipxe
synced 2026-02-07 08:02:49 +03:00
[build] Fix build failures with older versions of gcc
Some versions of gcc (observed with gcc 4.8.5 in CentOS 7) will report spurious build_assert() failures for some assertions about structure layouts. There is no clear pattern as to what causes these spurious failures, and the build assertion does succeed in that no unresolvable symbol reference is generated in the compiled code. Adjust the assertions to work around these apparent compiler issues. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -469,13 +469,15 @@ int gcm_setkey ( struct gcm_context *context, const void *key, size_t keylen,
|
||||
* @v ivlen Initialisation vector length
|
||||
*/
|
||||
void gcm_setiv ( struct gcm_context *context, const void *iv, size_t ivlen ) {
|
||||
union gcm_block *check = ( ( void * ) context );
|
||||
|
||||
/* Sanity checks */
|
||||
build_assert ( &context->hash == check );
|
||||
build_assert ( &context->len == check + 1 );
|
||||
build_assert ( &context->ctr == check + 2 );
|
||||
build_assert ( &context->key == check + 3 );
|
||||
/* Sanity check: ensure that memset()s will clear expected state */
|
||||
build_assert ( &context->hash < &context->ctr );
|
||||
build_assert ( &context->len < &context->ctr );
|
||||
build_assert ( &context->ctr < &context->key );
|
||||
build_assert ( ( ( void * ) &context->raw_cipher ) >
|
||||
( ( void * ) &context->key ) );
|
||||
build_assert ( ( ( void * ) context->raw_ctx ) >
|
||||
( ( void * ) &context->key ) );
|
||||
|
||||
/* Reset non-key state */
|
||||
memset ( context, 0, offsetof ( typeof ( *context ), key ) );
|
||||
|
||||
Reference in New Issue
Block a user