The RISC-V calling convention specifies that when a C function takes an argument by value, the binary function should take the argument by reference, if the value is larger than 2 pointer words. For binary verification, we avoid implementing this aspect of the RISC-V calling convention, by eliminating all such function arguments for functions which are not inlined. In this commit, we remove `extra_caps_t` function arguments. This primarily concerns invocation decode functions. Since `loookupExtraCaps` already stores extra caps in a global `current_extra_caps`, this essentially amounts to eliminating many redundant structure copy operations. On some execution paths involving IPC, the extra caps lookup may happen twice: first in the invocation decode, and then for cap transfer in the performance phase of the IPC operation. Because the two phases are entirely distinct, there is no interference in the use of a common global variable. Even though we are primarily concerned with RISC-V, we remove `extra_caps_t` arguments across all architectures. Signed-off-by: Matthew Brecknell <Matthew.Brecknell@data61.csiro.au>
14 lines
296 B
C
14 lines
296 B
C
/*
|
|
* Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-only
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <types.h>
|
|
#include <api/failures.h>
|
|
#include <object/structures.h>
|
|
|
|
exception_t decodeSchedControlInvocation(word_t label, cap_t cap, word_t length, word_t *buffer);
|
|
|