Re: [OE-core] [PATCH] quashfs-tools: make it be able to be compiled by gcc5 with "-O0"
Typo: "(s)quashfs" Kind regards, Mike Looijmans System Expert TOPIC Embedded Products Eindhovenseweg 32-C, NL-5683 KH Best Postbus 440, NL-5680 AK Best Telefoon: +31 (0) 499 33 69 79 Telefax: +31 (0) 499 33 69 70 E-mail: mike.looijm...@topicproducts.com Website: www.topicproducts.com Please consider the environment before printing this e-mail -- ___ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core
[OE-core] [PATCH] quashfs-tools: make it be able to be compiled by gcc5 with "-O0"
From: Roy LiSigned-off-by: Roy Li --- ...shfs.c-get-inline-functions-work-with-C99.patch | 154 + .../squashfs-tools/squashfs-tools_git.bb | 1 + 2 files changed, 155 insertions(+) create mode 100644 meta/recipes-devtools/squashfs-tools/squashfs-tools/0001-mksquashfs.c-get-inline-functions-work-with-C99.patch diff --git a/meta/recipes-devtools/squashfs-tools/squashfs-tools/0001-mksquashfs.c-get-inline-functions-work-with-C99.patch b/meta/recipes-devtools/squashfs-tools/squashfs-tools/0001-mksquashfs.c-get-inline-functions-work-with-C99.patch new file mode 100644 index 000..fefe9f6 --- /dev/null +++ b/meta/recipes-devtools/squashfs-tools/squashfs-tools/0001-mksquashfs.c-get-inline-functions-work-with-C99.patch @@ -0,0 +1,154 @@ +From ac6268e843c43286eebff2a1052182c2393cdb2e Mon Sep 17 00:00:00 2001 +From: Roy Li +Date: Mon, 14 Sep 2015 12:31:42 +0800 +Subject: [PATCH] mksquashfs.c: get inline functions work with both gnu11 and gnu89 + +Upstream-status: pending + +After gcc upgraded to gcc5, and if the codes is compiled without optimization(-O0), +and the below error will happen: + +| mksquashfs.o: In function `create_inode': +| git/squashfs-tools/mksquashfs.c:897: undefined reference to `get_inode_no' +| git/squashfs-tools/mksquashfs.c:960: undefined reference to `get_parent_no' +| git/squashfs-tools/mksquashfs.c:983: undefined reference to `get_parent_no' +| mksquashfs.o: In function `reader_read_process': +| git/squashfs-tools/mksquashfs.c:2132: undefined reference to `is_fragment' +| mksquashfs.o: In function `reader_read_file': +| git/squashfs-tools/mksquashfs.c:2228: undefined reference to `is_fragment' +| mksquashfs.o: In function `dir_scan': +| git/squashfs-tools/mksquashfs.c:3101: undefined reference to `create_dir_entry' + +gcc5 defaults to -std=gnu11 instead of -std=gnu89, and it requires that exactly one C +source file has the callable copy of the inline function. Consider the following +program: + + inline int + foo (void) + { +return 42; + } + + int + main (void) + { +return foo (); + } + +The program above will not link with the C99 inline semantics, because no out-of-line +function foo is generated. To fix this, either mark the function foo as static, or +add the following declaration: + static inline int foo (void); + +more information refer to: https://gcc.gnu.org/gcc-5/porting_to.html; + +but the use of "extern inline" will lead to the compilation issue if gcc is not +gcc5, as the commit in oe-core d0af30c92fde [alsa-lib: Change function type to +"static __inline__"] +"static __inline__ function()" is the inlined version that +can be used in this compilation unit, but there will be another +definition of this function somewhere, so compiler will not emit +any code for the function body. This causes problem in -O0, +where functions are never inlined, the function call is preserved, +but linker can't find the symbol, thus the error happens. + +so replace "inline" with "static inline" to make it work with both gnu11 and gnu89 + +Signed-off-by: Roy Li +--- + squashfs-tools/mksquashfs.c | 20 ++-- + 1 file changed, 10 insertions(+), 10 deletions(-) + +diff --git a/squashfs-tools/mksquashfs.c b/squashfs-tools/mksquashfs.c +index d221c35..6bba1d2 100644 +--- a/squashfs-tools/mksquashfs.c b/squashfs-tools/mksquashfs.c +@@ -828,13 +828,13 @@ char *subpathname(struct dir_ent *dir_ent) + } + + +-inline unsigned int get_inode_no(struct inode_info *inode) ++static inline unsigned int get_inode_no(struct inode_info *inode) + { + return inode->inode_number; + } + + +-inline unsigned int get_parent_no(struct dir_info *dir) ++static inline unsigned int get_parent_no(struct dir_info *dir) + { + return dir->depth ? get_inode_no(dir->dir_ent->inode) : inode_no; + } +@@ -2027,7 +2027,7 @@ struct file_info *duplicate(long long file_size, long long bytes, + } + + +-inline int is_fragment(struct inode_info *inode) ++static inline int is_fragment(struct inode_info *inode) + { + off_t file_size = inode->buf.st_size; + +@@ -2996,13 +2996,13 @@ struct inode_info *lookup_inode2(struct stat *buf, int pseudo, int id) + } + + +-inline struct inode_info *lookup_inode(struct stat *buf) ++static inline struct inode_info *lookup_inode(struct stat *buf) + { + return lookup_inode2(buf, 0, 0); + } + + +-inline void alloc_inode_no(struct inode_info *inode, unsigned int use_this) ++static inline void alloc_inode_no(struct inode_info *inode, unsigned int use_this) + { + if (inode->inode_number == 0) { + inode->inode_number = use_this ? : inode_no ++; +@@ -3013,7 +3013,7 @@ inline void alloc_inode_no(struct inode_info *inode, unsigned int use_this) + } + + +-inline struct dir_ent *create_dir_entry(char *name, char *source_name, ++static inline
Re: [OE-core] [PATCH] quashfs-tools: make it be able to be compiled by gcc5 with "-O0"
> On Sep 14, 2015, at 12:33 AM,> wrote: > > From: Roy Li > > Signed-off-by: Roy Li > --- > ...shfs.c-get-inline-functions-work-with-C99.patch | 154 + > .../squashfs-tools/squashfs-tools_git.bb | 1 + > 2 files changed, 155 insertions(+) > create mode 100644 > meta/recipes-devtools/squashfs-tools/squashfs-tools/0001-mksquashfs.c-get-inline-functions-work-with-C99.patch > > diff --git > a/meta/recipes-devtools/squashfs-tools/squashfs-tools/0001-mksquashfs.c-get-inline-functions-work-with-C99.patch > > b/meta/recipes-devtools/squashfs-tools/squashfs-tools/0001-mksquashfs.c-get-inline-functions-work-with-C99.patch > new file mode 100644 > index 000..fefe9f6 > --- /dev/null > +++ > b/meta/recipes-devtools/squashfs-tools/squashfs-tools/0001-mksquashfs.c-get-inline-functions-work-with-C99.patch > @@ -0,0 +1,154 @@ > +From ac6268e843c43286eebff2a1052182c2393cdb2e Mon Sep 17 00:00:00 2001 > +From: Roy Li > +Date: Mon, 14 Sep 2015 12:31:42 +0800 > +Subject: [PATCH] mksquashfs.c: get inline functions work with both gnu11 > and gnu89 > + this looks ok. > +Upstream-status: pending > + > +After gcc upgraded to gcc5, and if the codes is compiled without > optimization(-O0), > +and the below error will happen: > + > +| mksquashfs.o: In function `create_inode': > +| git/squashfs-tools/mksquashfs.c:897: undefined reference to `get_inode_no' > +| git/squashfs-tools/mksquashfs.c:960: undefined reference to `get_parent_no' > +| git/squashfs-tools/mksquashfs.c:983: undefined reference to `get_parent_no' > +| mksquashfs.o: In function `reader_read_process': > +| git/squashfs-tools/mksquashfs.c:2132: undefined reference to `is_fragment' > +| mksquashfs.o: In function `reader_read_file': > +| git/squashfs-tools/mksquashfs.c:2228: undefined reference to `is_fragment' > +| mksquashfs.o: In function `dir_scan': > +| git/squashfs-tools/mksquashfs.c:3101: undefined reference to > `create_dir_entry' > + > +gcc5 defaults to -std=gnu11 instead of -std=gnu89, and it requires that > exactly one C > +source file has the callable copy of the inline function. Consider the > following > +program: > + > + inline int > + foo (void) > + { > +return 42; > + } > + > + int > + main (void) > + { > +return foo (); > + } > + > +The program above will not link with the C99 inline semantics, because no > out-of-line > +function foo is generated. To fix this, either mark the function foo as > static, or > +add the following declaration: > + static inline int foo (void); > + > +more information refer to: https://gcc.gnu.org/gcc-5/porting_to.html; > + > +but the use of "extern inline" will lead to the compilation issue if gcc is > not > +gcc5, as the commit in oe-core d0af30c92fde [alsa-lib: Change function type > to > +"static __inline__"] > +"static __inline__ function()" is the inlined version that > +can be used in this compilation unit, but there will be another > +definition of this function somewhere, so compiler will not emit > +any code for the function body. This causes problem in -O0, > +where functions are never inlined, the function call is preserved, > +but linker can't find the symbol, thus the error happens. > + > +so replace "inline" with "static inline" to make it work with both gnu11 and > gnu89 > + > +Signed-off-by: Roy Li > +--- > + squashfs-tools/mksquashfs.c | 20 ++-- > + 1 file changed, 10 insertions(+), 10 deletions(-) > + > +diff --git a/squashfs-tools/mksquashfs.c b/squashfs-tools/mksquashfs.c > +index d221c35..6bba1d2 100644 > +--- a/squashfs-tools/mksquashfs.c > b/squashfs-tools/mksquashfs.c > +@@ -828,13 +828,13 @@ char *subpathname(struct dir_ent *dir_ent) > + } > + > + > +-inline unsigned int get_inode_no(struct inode_info *inode) > ++static inline unsigned int get_inode_no(struct inode_info *inode) > + { > + return inode->inode_number; > + } > + > + > +-inline unsigned int get_parent_no(struct dir_info *dir) > ++static inline unsigned int get_parent_no(struct dir_info *dir) > + { > + return dir->depth ? get_inode_no(dir->dir_ent->inode) : inode_no; > + } > +@@ -2027,7 +2027,7 @@ struct file_info *duplicate(long long file_size, long > long bytes, > + } > + > + > +-inline int is_fragment(struct inode_info *inode) > ++static inline int is_fragment(struct inode_info *inode) > + { > + off_t file_size = inode->buf.st_size; > + > +@@ -2996,13 +2996,13 @@ struct inode_info *lookup_inode2(struct stat *buf, > int pseudo, int id) > + } > + > + > +-inline struct inode_info *lookup_inode(struct stat *buf) > ++static inline struct inode_info *lookup_inode(struct stat *buf) > + { > + return lookup_inode2(buf, 0, 0); > + } > + > + > +-inline void alloc_inode_no(struct inode_info *inode, unsigned int use_this) > ++static inline
Re: [OE-core] [PATCH] quashfs-tools: make it be able to be compiled by gcc5 with "-O0"
On 2015年09月14日 17:07, Mike Looijmans wrote: Typo: "(s)quashfs" thanks -Roy Kind regards, Mike Looijmans System Expert TOPIC Embedded Products Eindhovenseweg 32-C, NL-5683 KH Best Postbus 440, NL-5680 AK Best Telefoon: +31 (0) 499 33 69 79 Telefax: +31 (0) 499 33 69 70 E-mail: mike.looijm...@topicproducts.com Website: www.topicproducts.com Please consider the environment before printing this e-mail -- Best Reagrds, Roy | RongQing Li -- ___ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core