[PATCH v2 04/11] scripts/carray.sh: Allow referencing a struct member
Anup Patel
anup at brainfault.org
Thu Nov 28 04:33:48 PST 2024
On Tue, Nov 12, 2024 at 3:33 AM Samuel Holland
<samuel.holland at sifive.com> wrote:
>
> It can be useful to embed the objects referenced by a carray inside
> another struct. To avoid type punning, the generated carray code must
> use the correct type for the enclosing struct and member access to
> compute the desired object address.
>
> Signed-off-by: Samuel Holland <samuel.holland at sifive.com>
LGTM.
Reviewed-by: Anup Patel <anup at brainfault.org>
Regards,
Anup
> ---
>
> Changes in v2:
> - New patch for v2
>
> scripts/carray.sh | 11 +++++++++--
> 1 file changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/scripts/carray.sh b/scripts/carray.sh
> index 16c6c136..fb985c86 100755
> --- a/scripts/carray.sh
> +++ b/scripts/carray.sh
> @@ -61,6 +61,13 @@ if [ -z "${ARRAY_NAME}" ]; then
> usage
> fi
>
> +MEMBER_NAME=$(awk '{ if ($1 == "MEMBER-NAME:") { printf $2; exit 0; } }' "${CONFIG_FILE}")
> +MEMBER_TYPE=$(awk '{ if ($1 == "MEMBER-TYPE:") { printf $2; for (i=3; i<=NF; i++) printf " %s", $i; exit 0; } }' "${CONFIG_FILE}")
> +if [ -n "${MEMBER_NAME}" ] && [ -z "${MEMBER_TYPE}" ]; then
> + echo "Must specify MEMBER-TYPE: when using MEMBER-NAME:"
> + usage
> +fi
> +
> printf "// Generated with $(basename $0) from $(basename ${CONFIG_FILE})\n"
> printf "#include <%s>\n\n" "${TYPE_HEADER}"
>
> @@ -69,9 +76,9 @@ for VAR in ${VAR_LIST}; do
> done
> printf "\n"
>
> -printf "%s *const %s[] = {\n" "${TYPE_NAME}" "${ARRAY_NAME}"
> +printf "%s *const %s[] = {\n" "${MEMBER_TYPE:-${TYPE_NAME}}" "${ARRAY_NAME}"
> for VAR in ${VAR_LIST}; do
> - printf "\t&%s,\n" "${VAR}"
> + printf "\t&%s,\n" "${VAR}${MEMBER_NAME:+.}${MEMBER_NAME}"
> done
> printf "\tNULL\n"
> printf "};\n"
> --
> 2.45.1
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
More information about the opensbi
mailing list