|
869 | 869 | extern const struct wolfssl_linuxkm_pie_redirect_table *wolfssl_linuxkm_get_pie_redirect_table(void); |
870 | 870 | extern struct wolfssl_linuxkm_pie_redirect_table wolfssl_linuxkm_pie_redirect_table; |
871 | 871 |
|
872 | | - #if defined(CONFIG_X86) |
873 | | - #define WC_LKM_INDIRECT_SYM(x) (wolfssl_linuxkm_pie_redirect_table.x) |
| 872 | + |
| 873 | + #if defined(WC_LKM_INDIRECT_SYM) |
| 874 | + /* keep user-supplied override definition. */ |
| 875 | + #elif defined(WC_LKM_INDIRECT_SYM_BY_FUNC_ONLY) || \ |
| 876 | + defined(WC_LKM_INDIRECT_SYM_BY_DIRECT_TABLE_READ) |
| 877 | + /* keep user-supplied override method. */ |
| 878 | + #elif defined(CONFIG_X86) |
| 879 | + #define WC_LKM_INDIRECT_SYM_BY_DIRECT_TABLE_READ |
874 | 880 | #elif defined(CONFIG_ARM64) |
875 | | - #define WC_LKM_INDIRECT_SYM(x) (wolfssl_linuxkm_get_pie_redirect_table()->x) |
| 881 | + /* direct access to wolfssl_linuxkm_pie_redirect_table.x on aarch64 |
| 882 | + * produces GOT relocations, e.g. R_AARCH64_LD64_GOT_LO12_NC. |
| 883 | + */ |
| 884 | + #define WC_LKM_INDIRECT_SYM_BY_FUNC_ONLY |
876 | 885 | #else |
| 886 | + /* for other archs, by default use the safe way. */ |
| 887 | + #define WC_LKM_INDIRECT_SYM_BY_FUNC_ONLY |
| 888 | + #endif |
| 889 | + |
| 890 | + #if defined(WC_LKM_INDIRECT_SYM) |
| 891 | + /* keep user-supplied override definition. */ |
| 892 | + #elif defined(WC_LKM_INDIRECT_SYM_BY_FUNC_ONLY) |
877 | 893 | #define WC_LKM_INDIRECT_SYM(x) (wolfssl_linuxkm_get_pie_redirect_table()->x) |
| 894 | + #elif defined(WC_LKM_INDIRECT_SYM_BY_DIRECT_TABLE_READ) |
| 895 | + #define WC_LKM_INDIRECT_SYM(x) (wolfssl_linuxkm_pie_redirect_table.x) |
| 896 | + #else |
| 897 | + #error no WC_LKM_INDIRECT_SYM method defined. |
878 | 898 | #endif |
879 | 899 |
|
880 | 900 | #ifdef __PIE__ |
|
0 commit comments