Skip to contentSkip to conversation

lib: mpi: Use "static inline" instead of "extern inline" in header file for __GNUC__

PATCH In review Chen Gang 2 participants 3 messages Nov 9, 2014

lore
Share & tools
lore

Chen Gang

author
#0 lore raw

PATCH 1/1 lib: mpi: Use "static inline" instead of "extern inline" in header file for __GNUC__

In header file, "extern inline" may cause multiple definition, so need change it to "static inline". And also need be quoted by __GNUC__ for they are as inline functions only for __GNUC__.

The related error (with allmodconfig under tile):

LD lib/mpi/mpi.o
lib/mpi/generic_mpih-mul1.o: In function `mpihelp_add_1':
generic_mpih-mul1.c:(.text+0x0): multiple definition of mpihelp_add_1' lib/mpi/generic_mpih-lshift.o:generic_mpih-lshift.c:(.text+0x0): first defined here lib/mpi/generic_mpih-mul1.o: In function mpihelp_add':
generic_mpih-mul1.c:(.text+0xe8): multiple definition of mpihelp_add' lib/mpi/generic_mpih-lshift.o:generic_mpih-lshift.c:(.text+0xe8): first defined here lib/mpi/generic_mpih-mul1.o: In function mpihelp_sub_1':
generic_mpih-mul1.c:(.text+0x278): multiple definition of mpihelp_sub_1' lib/mpi/generic_mpih-lshift.o:generic_mpih-lshift.c:(.text+0x278): first defined here lib/mpi/generic_mpih-mul1.o: In function mpihelp_sub':
generic_mpih-mul1.c:(.text+0x368): multiple definition of `mpihelp_sub' lib/mpi/generic_mpih-lshift.o:generic_mpih-lshift.c:(.text+0x368): first defined here
...

---
 lib/mpi/mpi-inline.h   |  2 +-
 lib/mpi/mpi-internal.h | 12 ++++++++----
 2 files changed, 9 insertions(+), 5 deletions(-)
lib/mpi/mpi-inline.h +1 -1
index e2b3985..c245ea3 100644
@@ -30,7 +30,7 @@
 #define G10_MPI_INLINE_H
 
 #ifndef G10_MPI_INLINE_DECL
-#define G10_MPI_INLINE_DECL  extern inline
+#define G10_MPI_INLINE_DECL  static inline
 #endif
 
 G10_MPI_INLINE_DECL mpi_limb_t
lib/mpi/mpi-internal.h +8 -4
index 60cf765..91ef8ac 100644
@@ -168,20 +168,24 @@ void mpi_rshift_limbs(MPI a, unsigned int count);
 int mpi_lshift_limbs(MPI a, unsigned int count);
 
 /*-- mpihelp-add.c --*/
+#ifndef __GNUC__
 mpi_limb_t mpihelp_add_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
 			 mpi_size_t s1_size, mpi_limb_t s2_limb);
-mpi_limb_t mpihelp_add_n(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
-			 mpi_ptr_t s2_ptr, mpi_size_t size);
 mpi_limb_t mpihelp_add(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size,
 		       mpi_ptr_t s2_ptr, mpi_size_t s2_size);
+#endif
+mpi_limb_t mpihelp_add_n(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
+			 mpi_ptr_t s2_ptr, mpi_size_t size);
 
 /*-- mpihelp-sub.c --*/
+#ifndef __GNUC__
 mpi_limb_t mpihelp_sub_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
 			 mpi_size_t s1_size, mpi_limb_t s2_limb);
-mpi_limb_t mpihelp_sub_n(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
-			 mpi_ptr_t s2_ptr, mpi_size_t size);
 mpi_limb_t mpihelp_sub(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size,
 		       mpi_ptr_t s2_ptr, mpi_size_t s2_size);
+#endif
+mpi_limb_t mpihelp_sub_n(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr,
+			 mpi_ptr_t s2_ptr, mpi_size_t size);
 
 /*-- mpihelp-cmp.c --*/
 int mpihelp_cmp(mpi_ptr_t op1_ptr, mpi_ptr_t op2_ptr, mpi_size_t size);
Signature · 1 line
1.9.3
#1 lore raw
Quoted 3 lines · Chen Gang

In header file, "extern inline" may cause multiple definition, so need change it to "static inline". And also need be quoted by __GNUC__ for they are as inline functions only for __GNUC__.

[]

lib/mpi/mpi-inline.h

Quoted 1 line
lib/mpi/mpi-inline.h +0 -0

[]

lib/mpi/mpi-inline.h line 33

Quoted 6 lines
lib/mpi/mpi-inline.h +1 -1
@@ -30,7 +30,7 @@
 #define G10_MPI_INLINE_H
 
 #ifndef G10_MPI_INLINE_DECL
-#define G10_MPI_INLINE_DECL  extern inline
+#define G10_MPI_INLINE_DECL  static inline

Why not remove the #define and use static inline
in the 4 places the #define is currently used?

author
#2 lore raw
Quoted 10 lines · Joe Perches
Quoted 3 lines · Chen Gang

In header file, "extern inline" may cause multiple definition, so need change it to "static inline". And also need be quoted by __GNUC__ for they are as inline functions only for __GNUC__.

[]

lib/mpi/mpi-inline.h

Quoted 1 line
lib/mpi/mpi-inline.h +0 -0

[]

Quoted 3 lines
lib/mpi/mpi-inline.h +0 -0
@@ -30,7 +30,7 @@
 #define G10_MPI_INLINE_H
 
Quoted 7 lines

lib/mpi/mpi-inline.h line 33

Quoted 3 lines
lib/mpi/mpi-inline.h +1 -1
 #ifndef G10_MPI_INLINE_DECL
-#define G10_MPI_INLINE_DECL  extern inline
+#define G10_MPI_INLINE_DECL  static inline

Why not remove the #define and use static inline
in the 4 places the #define is currently used?

I just follow the original author's ways, the original author may think it is useful.

I guess, it may be used by other systems (neither Linux kernel nor gcc). For another compiler, it may need another syntax for it (although I am not quite sure about it).

So for safety reason, still keep it no touch, at present.

Thanks.

Signature · 3 lines
Chen Gang

Open share and attitude like air water and life which God blessed