Re: [U-Boot] [PATCH v4 3/4] dtc/libfdt: introduce fdt types for annotation by endian checkers

2013-01-06 Thread Jon Loeliger
 Projects such as linux and u-boot run sparse on libfdt.  libfdt
 contains the notion of endianness via usage of endian conversion
 functions such as fdt32_to_cpu.  As such, in order to pass endian
 checks, libfdt has to annotate its fdt variables such that sparse
 can warn when mixing bitwise and regular integers.  This patch adds
 these new fdtXX_t types and, ifdef __CHECKER__ (a symbol sparse
 defines), includes the bitwise annotation.
 
 Signed-off-by: Kim Phillips kim.phill...@freescale.com

Applied.

Thanks,
jdl

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v4 3/4] dtc/libfdt: introduce fdt types for annotation by endian checkers

2012-12-02 Thread David Gibson
On Wed, Nov 28, 2012 at 05:33:01PM -0600, Kim Phillips wrote:
 Projects such as linux and u-boot run sparse on libfdt.  libfdt
 contains the notion of endianness via usage of endian conversion
 functions such as fdt32_to_cpu.  As such, in order to pass endian
 checks, libfdt has to annotate its fdt variables such that sparse
 can warn when mixing bitwise and regular integers.  This patch adds
 these new fdtXX_t types and, ifdef __CHECKER__ (a symbol sparse
 defines), includes the bitwise annotation.
 
 Signed-off-by: Kim Phillips kim.phill...@freescale.com

Much better, thanks

Acked-by: David Gibson da...@gibson.dropbear.id.au

-- 
David Gibson| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH v4 3/4] dtc/libfdt: introduce fdt types for annotation by endian checkers

2012-11-28 Thread Kim Phillips
Projects such as linux and u-boot run sparse on libfdt.  libfdt
contains the notion of endianness via usage of endian conversion
functions such as fdt32_to_cpu.  As such, in order to pass endian
checks, libfdt has to annotate its fdt variables such that sparse
can warn when mixing bitwise and regular integers.  This patch adds
these new fdtXX_t types and, ifdef __CHECKER__ (a symbol sparse
defines), includes the bitwise annotation.

Signed-off-by: Kim Phillips kim.phill...@freescale.com

---
v2:
adds bitwise awareness: determine host endianness manually, and
annotate swabs with __force in fdtXX_to_cpu and cpu_to_fdtXX
conversion functions (the inline endian condition checks are
optimized out at compile time).  This allows us to be able to check
libfdt bitwise conversions with sparse by building dtc with make
CC=cgcc. v2 also moves fdt32 definitions from fdt.h to libfdt_env.h
and changes fdt32 definitions to use __bitwise instead of __be32. No
separate _FDT_SPARSE was introduced because there's no need: using
__CHECKER__ directly is valid because it only occurs once, and in
libfdt_env.h.
In addition, the libfdt sparse fixes have been moved to a subsequent
patch.

v3:  address comments from jdl:
o single set of fdt typedefs, since __bitwise is not defined if !CHECKER
o re-work EXTRACT_BYTE to take 'x' as a parameter, not a global
o SWAB function macros converted to take lowercase 'x' as a parameter,
  not a global

v4:  address comments from David Gibson
o rename byte swap routines CPU_TO_FDTXX
o properly define fdt-cpu conversion routines
  to use CPU_TO_FDTXX macros with correct checker attributions.

 libfdt/fdt.h| 42 +-
 libfdt/libfdt_env.h | 53 ++---
 2 files changed, 63 insertions(+), 32 deletions(-)

diff --git a/libfdt/fdt.h b/libfdt/fdt.h
index 48ccfd9..45dd134 100644
--- a/libfdt/fdt.h
+++ b/libfdt/fdt.h
@@ -4,45 +4,45 @@
 #ifndef __ASSEMBLY__
 
 struct fdt_header {
-   uint32_t magic;  /* magic word FDT_MAGIC */
-   uint32_t totalsize;  /* total size of DT block */
-   uint32_t off_dt_struct;  /* offset to structure */
-   uint32_t off_dt_strings; /* offset to strings */
-   uint32_t off_mem_rsvmap; /* offset to memory reserve map */
-   uint32_t version;/* format version */
-   uint32_t last_comp_version;  /* last compatible version */
+   fdt32_t magic;   /* magic word FDT_MAGIC */
+   fdt32_t totalsize;   /* total size of DT block */
+   fdt32_t off_dt_struct;   /* offset to structure */
+   fdt32_t off_dt_strings;  /* offset to strings */
+   fdt32_t off_mem_rsvmap;  /* offset to memory reserve map */
+   fdt32_t version; /* format version */
+   fdt32_t last_comp_version;   /* last compatible version */
 
/* version 2 fields below */
-   uint32_t boot_cpuid_phys;/* Which physical CPU id we're
+   fdt32_t boot_cpuid_phys; /* Which physical CPU id we're
booting on */
/* version 3 fields below */
-   uint32_t size_dt_strings;/* size of the strings block */
+   fdt32_t size_dt_strings; /* size of the strings block */
 
/* version 17 fields below */
-   uint32_t size_dt_struct; /* size of the structure block */
+   fdt32_t size_dt_struct;  /* size of the structure block */
 };
 
 struct fdt_reserve_entry {
-   uint64_t address;
-   uint64_t size;
+   fdt64_t address;
+   fdt64_t size;
 };
 
 struct fdt_node_header {
-   uint32_t tag;
+   fdt32_t tag;
char name[0];
 };
 
 struct fdt_property {
-   uint32_t tag;
-   uint32_t len;
-   uint32_t nameoff;
+   fdt32_t tag;
+   fdt32_t len;
+   fdt32_t nameoff;
char data[0];
 };
 
 #endif /* !__ASSEMBLY */
 
 #define FDT_MAGIC  0xd00dfeed  /* 4: version, 4: total size */
-#define FDT_TAGSIZEsizeof(uint32_t)
+#define FDT_TAGSIZEsizeof(fdt32_t)
 
 #define FDT_BEGIN_NODE 0x1 /* Start node: full name */
 #define FDT_END_NODE   0x2 /* End node */
@@ -51,10 +51,10 @@ struct fdt_property {
 #define FDT_NOP0x4 /* nop */
 #define FDT_END0x9
 
-#define FDT_V1_SIZE(7*sizeof(uint32_t))
-#define FDT_V2_SIZE(FDT_V1_SIZE + sizeof(uint32_t))
-#define FDT_V3_SIZE(FDT_V2_SIZE + sizeof(uint32_t))
+#define FDT_V1_SIZE(7*sizeof(fdt32_t))
+#define FDT_V2_SIZE(FDT_V1_SIZE + sizeof(fdt32_t))
+#define FDT_V3_SIZE(FDT_V2_SIZE + sizeof(fdt32_t))
 #define FDT_V16_SIZE   FDT_V3_SIZE
-#define FDT_V17_SIZE   (FDT_V16_SIZE + sizeof(uint32_t))
+#define FDT_V17_SIZE   (FDT_V16_SIZE + sizeof(fdt32_t))
 
 #endif /* _FDT_H */
diff --git a/libfdt/libfdt_env.h b/libfdt/libfdt_env.h
index