From 35d90bb6ec9799e04dacaa4b3a4984de9dc4c7f2 Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Sun, 25 May 2014 10:38:25 -0700 Subject: [PATCH] Restore __srget and __swbuf for LP32. Anthony King reports that for Grouper the Nvidia GL blobs need access to __swbuf. This is because the old had inline getc and putc implementations that directly referred to these symbols. Change-Id: I11a7b5550018ecc93d8f195c99857759669b2906 --- libc/stdio/local.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/libc/stdio/local.h b/libc/stdio/local.h index 7ab73c0b8..c71efd9ae 100644 --- a/libc/stdio/local.h +++ b/libc/stdio/local.h @@ -41,6 +41,18 @@ #include "wcio.h" #include "fileext.h" +/* Android <= KitKat had getc/putc macros in that referred + * to __srget/__swbuf, so those symbols need to be public for LP32 + * but can be hidden for LP64. + */ +#if defined(__LP64__) +__LIBC_HIDDEN__ int __srget(FILE*); +__LIBC_HIDDEN__ int __swbuf(int, FILE*); +#else +__LIBC_ABI_PUBLIC__ int __srget(FILE*); +__LIBC_ABI_PUBLIC__ int __swbuf(int, FILE*); +#endif + #pragma GCC visibility push(hidden) int __sflush(FILE *); @@ -104,10 +116,8 @@ extern int __sdidinit; #define NO_PRINTF_PERCENT_N /* OpenBSD exposes these in , but we only want them exposed to the implementation. */ -__BEGIN_DECLS int __srget(FILE*); int __swbuf(int, FILE*); -__END_DECLS #define __sfeof(p) (((p)->_flags & __SEOF) != 0) #define __sferror(p) (((p)->_flags & __SERR) != 0) #define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF)))