From: Rob Herring <[email protected]>

SWIG cannot generate setters for a struct's flexible array member and
emits C that does not compile:

./pylibfdt/libfdt_wrap.c: In function '_wrap_fdt_node_header_name_set':
./pylibfdt/libfdt_wrap.c:4350:18: error: cast specifies array type
./pylibfdt/libfdt_wrap.c:4350:16: error: invalid use of flexible array member
./pylibfdt/libfdt_wrap.c:4613:18: error: cast specifies array type
./pylibfdt/libfdt_wrap.c:4613:16: error: invalid use of flexible array member

Turns out this is a known issue with SWIG:
https://github.com/swig/swig/issues/1699

Implement the work-around to ignore the flexible array member. U-Boot's
copy of fdt.h still declares those members as zero-length arrays, so
nothing breaks today, but carrying the work-around now keeps the shipped
file in step with upstream and avoids the failure when the C libfdt is
next resynced.

This is a backport of dtc commit abbd523bae6e ("pylibfdt: Work-around
SWIG limitations with flexible arrays").

Signed-off-by: Rob Herring <[email protected]>
Reviewed-by: Simon Glass <[email protected]>
Tested-by: Simon Glass <[email protected]>
Signed-off-by: David Gibson <[email protected]>
[adapted to U-Boot]
Signed-off-by: Alexey Charkov <[email protected]>
---
 scripts/dtc/pylibfdt/libfdt.i_shipped | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/scripts/dtc/pylibfdt/libfdt.i_shipped 
b/scripts/dtc/pylibfdt/libfdt.i_shipped
index 634ccd2a829a..2a7fdfb2af40 100644
--- a/scripts/dtc/pylibfdt/libfdt.i_shipped
+++ b/scripts/dtc/pylibfdt/libfdt.i_shipped
@@ -1041,6 +1041,9 @@ class NodeAdder():
 
 %rename(fdt_property) fdt_property_func;
 
+%immutable fdt_property::data;
+%immutable fdt_node_header::name;
+
 /*
  * fdt32_t is a big-endian 32-bit value defined to uint32_t in libfdt_env.h
  * so use the same type here.

-- 
2.54.0

Reply via email to