lede-packages-rs

git clone git://archive.git.mtrnord.blog/MTRNord/lede-packages-rs.git
Log | Files | Refs | README | LICENSE

0003-mksquashfs.c-get-inline-functions-work-with-C99.patch (5329B)


      1 From ac6268e843c43286eebff2a1052182c2393cdb2e Mon Sep 17 00:00:00 2001
      2 From: Roy Li <rongqing.li@windriver.com>
      3 Date: Mon, 14 Sep 2015 12:31:42 +0800
      4 Subject: [PATCH] mksquashfs.c:  get inline functions work with both gnu11 and gnu89
      5 
      6 Upstream-Status: Pending
      7 
      8 After gcc upgraded to gcc5, and if the codes is compiled without optimization(-O0),
      9 and the below error will happen:
     10 
     11 | mksquashfs.o: In function `create_inode':
     12 | git/squashfs-tools/mksquashfs.c:897: undefined reference to `get_inode_no'
     13 | git/squashfs-tools/mksquashfs.c:960: undefined reference to `get_parent_no'
     14 | git/squashfs-tools/mksquashfs.c:983: undefined reference to `get_parent_no'
     15 | mksquashfs.o: In function `reader_read_process':
     16 | git/squashfs-tools/mksquashfs.c:2132: undefined reference to `is_fragment'
     17 | mksquashfs.o: In function `reader_read_file':
     18 | git/squashfs-tools/mksquashfs.c:2228: undefined reference to `is_fragment'
     19 | mksquashfs.o: In function `dir_scan':
     20 | git/squashfs-tools/mksquashfs.c:3101: undefined reference to `create_dir_entry'
     21 
     22 gcc5 defaults to -std=gnu11 instead of -std=gnu89, and it requires that exactly one C
     23 source file has the callable copy of the inline function. Consider the following
     24 program:
     25 
     26   inline int
     27   foo (void)
     28   {
     29     return 42;
     30   }
     31 
     32   int
     33   main (void)
     34   {
     35     return foo ();
     36   }
     37 
     38 The program above will not link with the C99 inline semantics, because no out-of-line
     39 function foo is generated. To fix this, either mark the function foo as static, or
     40 add the following declaration:
     41   static inline int foo (void);
     42 
     43 more information refer to: https://gcc.gnu.org/gcc-5/porting_to.html;
     44 
     45 but the use of "extern inline" will lead to the compilation issue if gcc is not
     46 gcc5, as the commit in oe-core d0af30c92fde [alsa-lib: Change function type to
     47 "static __inline__"]
     48     "extern __inline__ function()" is the inlined version that
     49     can be used in this compilation unit, but there will be another
     50     definition of this function somewhere, so compiler will not emit
     51     any code for the function body. This causes problem in -O0,
     52     where functions are never inlined, the function call is preserved,
     53     but linker can't find the symbol, thus the error happens.
     54 
     55 so replace "inline" with "static inline" to make it work with both gnu11 and gnu89
     56 
     57 Signed-off-by: Roy Li <rongqing.li@windriver.com>
     58 ---
     59  squashfs-tools/mksquashfs.c | 20 ++++++++++----------
     60  1 file changed, 10 insertions(+), 10 deletions(-)
     61 
     62 diff --git a/squashfs-tools/mksquashfs.c b/squashfs-tools/mksquashfs.c
     63 index d221c35..6bba1d2 100644
     64 --- a/squashfs-tools/mksquashfs.c
     65 +++ b/squashfs-tools/mksquashfs.c
     66 @@ -828,13 +828,13 @@ char *subpathname(struct dir_ent *dir_ent)
     67  }
     68  
     69  
     70 -inline unsigned int get_inode_no(struct inode_info *inode)
     71 +static inline unsigned int get_inode_no(struct inode_info *inode)
     72  {
     73  	return inode->inode_number;
     74  }
     75  
     76  
     77 -inline unsigned int get_parent_no(struct dir_info *dir)
     78 +static inline unsigned int get_parent_no(struct dir_info *dir)
     79  {
     80  	return dir->depth ? get_inode_no(dir->dir_ent->inode) : inode_no;
     81  }
     82 @@ -2027,7 +2027,7 @@ struct file_info *duplicate(long long file_size, long long bytes,
     83  }
     84  
     85  
     86 -inline int is_fragment(struct inode_info *inode)
     87 +static inline int is_fragment(struct inode_info *inode)
     88  {
     89  	off_t file_size = inode->buf.st_size;
     90  
     91 @@ -2996,13 +2996,13 @@ struct inode_info *lookup_inode2(struct stat *buf, int pseudo, int id)
     92  }
     93  
     94  
     95 -inline struct inode_info *lookup_inode(struct stat *buf)
     96 +static inline struct inode_info *lookup_inode(struct stat *buf)
     97  {
     98  	return lookup_inode2(buf, 0, 0);
     99  }
    100  
    101  
    102 -inline void alloc_inode_no(struct inode_info *inode, unsigned int use_this)
    103 +static inline void alloc_inode_no(struct inode_info *inode, unsigned int use_this)
    104  {
    105  	if (inode->inode_number == 0) {
    106  		inode->inode_number = use_this ? : inode_no ++;
    107 @@ -3013,7 +3013,7 @@ inline void alloc_inode_no(struct inode_info *inode, unsigned int use_this)
    108  }
    109  
    110  
    111 -inline struct dir_ent *create_dir_entry(char *name, char *source_name,
    112 +static inline struct dir_ent *create_dir_entry(char *name, char *source_name,
    113  	char *nonstandard_pathname, struct dir_info *dir)
    114  {
    115  	struct dir_ent *dir_ent = malloc(sizeof(struct dir_ent));
    116 @@ -3031,7 +3031,7 @@ inline struct dir_ent *create_dir_entry(char *name, char *source_name,
    117  }
    118  
    119  
    120 -inline void add_dir_entry(struct dir_ent *dir_ent, struct dir_info *sub_dir,
    121 +static inline void add_dir_entry(struct dir_ent *dir_ent, struct dir_info *sub_dir,
    122  	struct inode_info *inode_info)
    123  {
    124  	struct dir_info *dir = dir_ent->our_dir;
    125 @@ -3047,7 +3047,7 @@ inline void add_dir_entry(struct dir_ent *dir_ent, struct dir_info *sub_dir,
    126  }
    127  
    128  
    129 -inline void add_dir_entry2(char *name, char *source_name,
    130 +static inline void add_dir_entry2(char *name, char *source_name,
    131  	char *nonstandard_pathname, struct dir_info *sub_dir,
    132  	struct inode_info *inode_info, struct dir_info *dir)
    133  {
    134 @@ -3059,7 +3059,7 @@ inline void add_dir_entry2(char *name, char *source_name,
    135  }
    136  
    137  
    138 -inline void free_dir_entry(struct dir_ent *dir_ent)
    139 +static inline void free_dir_entry(struct dir_ent *dir_ent)
    140  {
    141  	if(dir_ent->name)
    142  		free(dir_ent->name);
    143 @@ -3080,7 +3080,7 @@ inline void free_dir_entry(struct dir_ent *dir_ent)
    144  }
    145  
    146  
    147 -inline void add_excluded(struct dir_info *dir)
    148 +static inline void add_excluded(struct dir_info *dir)
    149  {
    150  	dir->excluded ++;
    151  }
    152 -- 
    153 1.9.1
    154