-extern void PerlIO_define_layer (PerlIO_funcs *tab);
-extern SV * PerlIO_find_layer (const char *name, STRLEN len);
-extern PerlIO * PerlIO_push (PerlIO *f,PerlIO_funcs *tab,const char *mode);
-extern void PerlIO_pop (PerlIO *f);
-
-#endif /* PerlIO */
+/* PERLIO_FUNCS_CONST is now on by default for efficiency, PERLIO_FUNCS_CONST
+ can be removed 1 day once stable & then PerlIO vtables are permanently RO */
+#ifdef PERLIO_FUNCS_CONST
+#define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs
+#define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs)
+#else
+#define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs
+#define PERLIO_FUNCS_CAST(funcs) (funcs)
+#endif
+
+PERL_CALLCONV void PerlIO_define_layer(pTHX_ PerlIO_funcs *tab);
+PERL_CALLCONV PerlIO_funcs *PerlIO_find_layer(pTHX_ const char *name,
+ STRLEN len,
+ int load);
+PERL_CALLCONV PerlIO *PerlIO_push(pTHX_ PerlIO *f, PERLIO_FUNCS_DECL(*tab),
+ const char *mode, SV *arg);
+PERL_CALLCONV void PerlIO_pop(pTHX_ PerlIO *f);
+PERL_CALLCONV AV* PerlIO_get_layers(pTHX_ PerlIO *f);
+PERL_CALLCONV void PerlIO_clone(pTHX_ PerlInterpreter *proto,
+ CLONE_PARAMS *param);
+
+#endif /* PerlIO */