diff --git a/Makefile b/Makefile index e998933..46826e1 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,5 @@ -obj-m += mini-gmp.o +obj-m += minigmp.o +minigmp-objs := mini-gmp.o export.o EXTRA_CFLAGS+=-DKERNEL=1 all: diff --git a/export.c b/export.c new file mode 100644 index 0000000..0af854e --- /dev/null +++ b/export.c @@ -0,0 +1,144 @@ +#include <linux/kernel.h> +#include "mini-gmp.h" +EXPORT_SYMBOL_GPL(mp_set_memory_functions); +EXPORT_SYMBOL_GPL(mp_get_memory_functions); +EXPORT_SYMBOL_GPL(mpn_copyi); +EXPORT_SYMBOL_GPL(mpn_copyd); +EXPORT_SYMBOL_GPL(mpn_zero); +EXPORT_SYMBOL_GPL(mpn_cmp); +EXPORT_SYMBOL_GPL(mpn_zero_p); +EXPORT_SYMBOL_GPL(mpn_add_1); +EXPORT_SYMBOL_GPL(mpn_add_n); +EXPORT_SYMBOL_GPL(mpn_add); +EXPORT_SYMBOL_GPL(mpn_sub_1); +EXPORT_SYMBOL_GPL(mpn_sub_n); +EXPORT_SYMBOL_GPL(mpn_sub); +EXPORT_SYMBOL_GPL(mpn_mul_1); +EXPORT_SYMBOL_GPL(mpn_addmul_1); +EXPORT_SYMBOL_GPL(mpn_submul_1); +EXPORT_SYMBOL_GPL(mpn_mul); +EXPORT_SYMBOL_GPL(mpn_mul_n); +EXPORT_SYMBOL_GPL(mpn_sqr); +EXPORT_SYMBOL_GPL(mpn_perfect_square_p); +EXPORT_SYMBOL_GPL(mpn_sqrtrem); +EXPORT_SYMBOL_GPL(mpn_lshift); +EXPORT_SYMBOL_GPL(mpn_rshift); +EXPORT_SYMBOL_GPL(mpn_scan0); +EXPORT_SYMBOL_GPL(mpn_scan1); +EXPORT_SYMBOL_GPL(mpn_popcount); +EXPORT_SYMBOL_GPL(mpn_invert_3by2); +EXPORT_SYMBOL_GPL(mpn_get_str); +EXPORT_SYMBOL_GPL(mpn_set_str); +EXPORT_SYMBOL_GPL(mpz_init); +EXPORT_SYMBOL_GPL(mpz_init2); +EXPORT_SYMBOL_GPL(mpz_clear); +EXPORT_SYMBOL_GPL(mpz_sgn); +EXPORT_SYMBOL_GPL(mpz_cmp_si); +EXPORT_SYMBOL_GPL(mpz_cmp_ui); +EXPORT_SYMBOL_GPL(mpz_cmp); +EXPORT_SYMBOL_GPL(mpz_cmpabs_ui); +EXPORT_SYMBOL_GPL(mpz_cmpabs); +EXPORT_SYMBOL_GPL(mpz_abs); +EXPORT_SYMBOL_GPL(mpz_neg); +EXPORT_SYMBOL_GPL(mpz_swap); +EXPORT_SYMBOL_GPL(mpz_add_ui); +EXPORT_SYMBOL_GPL(mpz_add); +EXPORT_SYMBOL_GPL(mpz_sub_ui); +EXPORT_SYMBOL_GPL(mpz_ui_sub); +EXPORT_SYMBOL_GPL(mpz_sub); +EXPORT_SYMBOL_GPL(mpz_mul_si); +EXPORT_SYMBOL_GPL(mpz_mul_ui); +EXPORT_SYMBOL_GPL(mpz_mul); +EXPORT_SYMBOL_GPL(mpz_mul_2exp); +EXPORT_SYMBOL_GPL(mpz_addmul_ui); +EXPORT_SYMBOL_GPL(mpz_addmul); +EXPORT_SYMBOL_GPL(mpz_submul_ui); +EXPORT_SYMBOL_GPL(mpz_submul); +EXPORT_SYMBOL_GPL(mpz_cdiv_qr); +EXPORT_SYMBOL_GPL(mpz_fdiv_qr); +EXPORT_SYMBOL_GPL(mpz_tdiv_qr); +EXPORT_SYMBOL_GPL(mpz_cdiv_q); +EXPORT_SYMBOL_GPL(mpz_fdiv_q); +EXPORT_SYMBOL_GPL(mpz_tdiv_q); +EXPORT_SYMBOL_GPL(mpz_cdiv_r); +EXPORT_SYMBOL_GPL(mpz_fdiv_r); +EXPORT_SYMBOL_GPL(mpz_tdiv_r); +EXPORT_SYMBOL_GPL(mpz_cdiv_q_2exp); +EXPORT_SYMBOL_GPL(mpz_fdiv_q_2exp); +EXPORT_SYMBOL_GPL(mpz_tdiv_q_2exp); +EXPORT_SYMBOL_GPL(mpz_cdiv_r_2exp); +EXPORT_SYMBOL_GPL(mpz_fdiv_r_2exp); +EXPORT_SYMBOL_GPL(mpz_tdiv_r_2exp); +EXPORT_SYMBOL_GPL(mpz_mod); +EXPORT_SYMBOL_GPL(mpz_divexact); +EXPORT_SYMBOL_GPL(mpz_divisible_p); +EXPORT_SYMBOL_GPL(mpz_congruent_p); +EXPORT_SYMBOL_GPL(mpz_cdiv_qr_ui); +EXPORT_SYMBOL_GPL(mpz_fdiv_qr_ui); +EXPORT_SYMBOL_GPL(mpz_tdiv_qr_ui); +EXPORT_SYMBOL_GPL(mpz_cdiv_q_ui); +EXPORT_SYMBOL_GPL(mpz_fdiv_q_ui); +EXPORT_SYMBOL_GPL(mpz_tdiv_q_ui); +EXPORT_SYMBOL_GPL(mpz_cdiv_r_ui); +EXPORT_SYMBOL_GPL(mpz_fdiv_r_ui); +EXPORT_SYMBOL_GPL(mpz_tdiv_r_ui); +EXPORT_SYMBOL_GPL(mpz_cdiv_ui); +EXPORT_SYMBOL_GPL(mpz_fdiv_ui); +EXPORT_SYMBOL_GPL(mpz_tdiv_ui); +EXPORT_SYMBOL_GPL(mpz_mod_ui); +EXPORT_SYMBOL_GPL(mpz_divexact_ui); +EXPORT_SYMBOL_GPL(mpz_divisible_ui_p); +EXPORT_SYMBOL_GPL(mpz_gcd_ui); +EXPORT_SYMBOL_GPL(mpz_gcd); +EXPORT_SYMBOL_GPL(mpz_gcdext); +EXPORT_SYMBOL_GPL(mpz_lcm_ui); +EXPORT_SYMBOL_GPL(mpz_lcm); +EXPORT_SYMBOL_GPL(mpz_invert); +EXPORT_SYMBOL_GPL(mpz_sqrtrem); +EXPORT_SYMBOL_GPL(mpz_sqrt); +EXPORT_SYMBOL_GPL(mpz_perfect_square_p); +EXPORT_SYMBOL_GPL(mpz_pow_ui); +EXPORT_SYMBOL_GPL(mpz_ui_pow_ui); +EXPORT_SYMBOL_GPL(mpz_powm); +EXPORT_SYMBOL_GPL(mpz_powm_ui); +EXPORT_SYMBOL_GPL(mpz_rootrem); +EXPORT_SYMBOL_GPL(mpz_root); +EXPORT_SYMBOL_GPL(mpz_fac_ui); +EXPORT_SYMBOL_GPL(mpz_bin_uiui); +EXPORT_SYMBOL_GPL(mpz_probab_prime_p); +EXPORT_SYMBOL_GPL(mpz_tstbit); +EXPORT_SYMBOL_GPL(mpz_setbit); +EXPORT_SYMBOL_GPL(mpz_clrbit); +EXPORT_SYMBOL_GPL(mpz_combit); +EXPORT_SYMBOL_GPL(mpz_com); +EXPORT_SYMBOL_GPL(mpz_and); +EXPORT_SYMBOL_GPL(mpz_ior); +EXPORT_SYMBOL_GPL(mpz_xor); +EXPORT_SYMBOL_GPL(mpz_popcount); +EXPORT_SYMBOL_GPL(mpz_hamdist); +EXPORT_SYMBOL_GPL(mpz_scan0); +EXPORT_SYMBOL_GPL(mpz_scan1); +EXPORT_SYMBOL_GPL(mpz_fits_slong_p); +EXPORT_SYMBOL_GPL(mpz_fits_ulong_p); +EXPORT_SYMBOL_GPL(mpz_get_si); +EXPORT_SYMBOL_GPL(mpz_get_ui); +EXPORT_SYMBOL_GPL(mpz_size); +EXPORT_SYMBOL_GPL(mpz_getlimbn); +EXPORT_SYMBOL_GPL(mpz_realloc2); +EXPORT_SYMBOL_GPL(mpz_limbs_read); +EXPORT_SYMBOL_GPL(mpz_limbs_modify); +EXPORT_SYMBOL_GPL(mpz_limbs_write); +EXPORT_SYMBOL_GPL(mpz_limbs_finish); +EXPORT_SYMBOL_GPL(mpz_roinit_n); +EXPORT_SYMBOL_GPL(mpz_set_si); +EXPORT_SYMBOL_GPL(mpz_set_ui); +EXPORT_SYMBOL_GPL(mpz_set); +EXPORT_SYMBOL_GPL(mpz_init_set_si); +EXPORT_SYMBOL_GPL(mpz_init_set_ui); +EXPORT_SYMBOL_GPL(mpz_init_set); +EXPORT_SYMBOL_GPL(mpz_sizeinbase); +EXPORT_SYMBOL_GPL(mpz_get_str); +EXPORT_SYMBOL_GPL(mpz_set_str); +EXPORT_SYMBOL_GPL(mpz_init_set_str); +EXPORT_SYMBOL_GPL(mpz_import); +EXPORT_SYMBOL_GPL(mpz_export); diff --git a/gen_export.sh b/gen_export.sh new file mode 100755 index 0000000..fe5a825 --- /dev/null +++ b/gen_export.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +echo '#include <linux/kernel.h>' > export.c +echo '#include "mini-gmp.h"' >> export.c + + +gcc -P -E -DKERNEL=1 ./mini-gmp.h | +perl -e 'my $all=join("",<>); my @d; push @d, "EXPORT_SYMBOL_GPL($1);" while $all =~ m/(\w++)\h*(\((?:[^()]++|(?2))*\))\s*;/g; print join("\n", @d) . "\n";' >> export.c +