Bug 1006248. Part 1: Add MOZ_EXPORT in various places. r=glandium
authorRobert O'Callahan <robert@ocallahan.org>
Tue, 06 May 2014 17:26:46 +1200
changeset 201123 a393ec07bc6ac4aad1a687038c750f0cd819faa5
parent 201122 9694b5d763ac9f81e7bdadb72a1fa1ef3f084792
child 201124 3554c8a5fefb75f5025488ea00eca27ad00cda4b
push id3741
push userasasaki@mozilla.com
push dateMon, 21 Jul 2014 20:25:18 +0000
treeherdermozilla-beta@4d6f46f5af68 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersglandium
bugs1006248
milestone32.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1006248. Part 1: Add MOZ_EXPORT in various places. r=glandium
content/media/omx/MediaOmxReader.h
dom/camera/GonkRecorder.h
js/src/jit/AsmJSModule.cpp
js/src/jit/arm/BaselineIC-arm.cpp
js/src/jit/arm/CodeGenerator-arm.cpp
mozglue/android/APKOpen.h
mozglue/build/BionicGlue.cpp
mozglue/build/Nuwa.cpp
mozglue/linker/ElfLoader.cpp
netwerk/protocol/rtsp/rtsp/AAMRAssembler.h
netwerk/protocol/rtsp/rtsp/AAVCAssembler.h
netwerk/protocol/rtsp/rtsp/AH263Assembler.h
netwerk/protocol/rtsp/rtsp/AMPEG4AudioAssembler.h
netwerk/protocol/rtsp/rtsp/AMPEG4ElementaryAssembler.h
netwerk/protocol/rtsp/rtsp/ARTPAssembler.h
netwerk/protocol/rtsp/rtsp/ARTPConnection.h
netwerk/protocol/rtsp/rtsp/ARTPSession.h
netwerk/protocol/rtsp/rtsp/ARTPSource.h
netwerk/protocol/rtsp/rtsp/ARTPWriter.h
netwerk/protocol/rtsp/rtsp/ARTSPConnection.h
netwerk/protocol/rtsp/rtsp/ARawAudioAssembler.h
netwerk/protocol/rtsp/rtsp/ASessionDescription.h
netwerk/protocol/rtsp/rtsp/RTSPSource.h
toolkit/mozapps/update/updater/updater.cpp
tools/profiler/shared-libraries-linux.cc
widget/android/AndroidBridge.h
widget/android/AndroidJNIWrapper.h
widget/gonk/libdisplay/GonkDisplay.h
widget/gonk/libdisplay/GonkDisplayICS.h
widget/gonk/libdisplay/GonkDisplayJB.h
--- a/content/media/omx/MediaOmxReader.h
+++ b/content/media/omx/MediaOmxReader.h
@@ -10,17 +10,17 @@
 #include "MediaDecoderReader.h"
 #include "nsRect.h"
 #include "mozilla/dom/AudioChannelBinding.h"
 #include <ui/GraphicBuffer.h>
 #include <stagefright/MediaSource.h>
 
 namespace android {
 class OmxDecoder;
-class MediaExtractor;
+class MOZ_EXPORT MediaExtractor;
 }
 
 namespace mozilla {
 
 namespace dom {
   class TimeRanges;
 }
 
--- a/dom/camera/GonkRecorder.h
+++ b/dom/camera/GonkRecorder.h
@@ -26,21 +26,21 @@
 #include <system/audio.h>
 
 #include "mozilla/RefPtr.h"
 #include "GonkCameraHwMgr.h"
 
 namespace android {
 
 class GonkCameraSource;
-struct MediaSource;
-struct MediaWriter;
-class MetaData;
-struct AudioSource;
-class MediaProfiles;
+struct MOZ_EXPORT MediaSource;
+struct MOZ_EXPORT MediaWriter;
+class MOZ_EXPORT MetaData;
+struct MOZ_EXPORT AudioSource;
+class MOZ_EXPORT MediaProfiles;
 class GonkCameraHardware;
 
 struct GonkRecorder {
     NS_INLINE_DECL_THREADSAFE_REFCOUNTING(GonkRecorder)
 
     GonkRecorder();
 
     virtual status_t init();
--- a/js/src/jit/AsmJSModule.cpp
+++ b/js/src/jit/AsmJSModule.cpp
@@ -162,20 +162,20 @@ InvokeFromAsmJS_ToInt32(JSContext *cx, i
 int32_t
 InvokeFromAsmJS_ToNumber(JSContext *cx, int32_t exitIndex, int32_t argc, Value *argv);
 
 }
 
 #if defined(JS_CODEGEN_ARM)
 extern "C" {
 
-extern int64_t
+extern MOZ_EXPORT int64_t
 __aeabi_idivmod(int, int);
 
-extern int64_t
+extern MOZ_EXPORT int64_t
 __aeabi_uidivmod(int, int);
 
 }
 #endif
 
 template <class F>
 static inline void *
 FuncCast(F *pf)
--- a/js/src/jit/arm/BaselineIC-arm.cpp
+++ b/js/src/jit/arm/BaselineIC-arm.cpp
@@ -66,17 +66,17 @@ ICCompare_Double::Compiler::generateStub
     masm.bind(&failure);
     EmitStubGuardFailure(masm);
     return true;
 }
 
 // ICBinaryArith_Int32
 
 extern "C" {
-    extern int64_t __aeabi_idivmod(int,int);
+    extern MOZ_EXPORT int64_t __aeabi_idivmod(int,int);
 }
 
 bool
 ICBinaryArith_Int32::Compiler::generateStubCode(MacroAssembler &masm)
 {
     // Guard that R0 is an integer and R1 is an integer.
     Label failure;
     masm.branchTestInt32(Assembler::NotEqual, R0, &failure);
--- a/js/src/jit/arm/CodeGenerator-arm.cpp
+++ b/js/src/jit/arm/CodeGenerator-arm.cpp
@@ -614,18 +614,18 @@ CodeGeneratorARM::visitDivI(LDivI *ins)
     }
 
     masm.bind(&done);
 
     return true;
 }
 
 extern "C" {
-    extern int64_t __aeabi_idivmod(int,int);
-    extern int64_t __aeabi_uidivmod(int,int);
+    extern MOZ_EXPORT int64_t __aeabi_idivmod(int,int);
+    extern MOZ_EXPORT int64_t __aeabi_uidivmod(int,int);
 }
 
 bool
 CodeGeneratorARM::visitSoftDivI(LSoftDivI *ins)
 {
     // Extract the registers from this instruction
     Register lhs = ToRegister(ins->lhs());
     Register rhs = ToRegister(ins->rhs());
--- a/mozglue/android/APKOpen.h
+++ b/mozglue/android/APKOpen.h
@@ -13,15 +13,15 @@
 
 struct mapping_info {
   char * name;
   uintptr_t base;
   size_t len;
   size_t offset;
 };
 
-const struct mapping_info * getLibraryMapping();
+NS_EXPORT const struct mapping_info * getLibraryMapping();
 
 static const int SUCCESS = 0;
 static const int FAILURE = 1;
 void JNI_Throw(JNIEnv* jenv, const char* classname, const char* msg);
 
 #endif /* APKOpen_h */
--- a/mozglue/build/BionicGlue.cpp
+++ b/mozglue/build/BionicGlue.cpp
@@ -92,16 +92,18 @@ WRAP(pthread_atfork)(void (*prepare)(voi
   funcs.parent = parent;
   funcs.child = child;
   if (!atfork.capacity())
     atfork.reserve(1);
   atfork.push_back(funcs);
   return 0;
 }
 
+extern "C" NS_EXPORT pid_t __fork(void);
+
 extern "C" NS_EXPORT pid_t
 WRAP(fork)(void)
 {
   pid_t pid;
   for (auto it = atfork.rbegin();
        it < atfork.rend(); ++it)
     if (it->prepare)
       it->prepare();
--- a/mozglue/build/Nuwa.cpp
+++ b/mozglue/build/Nuwa.cpp
@@ -36,16 +36,17 @@ extern "C" MFBT_API int tgkill(pid_t tgi
  * Provides the wrappers to a selected set of pthread and system-level functions
  * as the basis for implementing Zygote-like preforking mechanism.
  */
 
 /**
  * Real functions for the wrappers.
  */
 extern "C" {
+#pragma GCC visibility push(default)
 int __real_pthread_create(pthread_t *thread,
                           const pthread_attr_t *attr,
                           void *(*start_routine) (void *),
                           void *arg);
 int __real_pthread_key_create(pthread_key_t *key, void (*destructor)(void*));
 int __real_pthread_key_delete(pthread_key_t key);
 pthread_t __real_pthread_self();
 int __real_pthread_join(pthread_t thread, void **retval);
@@ -64,16 +65,17 @@ int __real___pthread_cond_timedwait(pthr
 int __real_pthread_mutex_lock(pthread_mutex_t *mtx);
 int __real_poll(struct pollfd *fds, nfds_t nfds, int timeout);
 int __real_epoll_create(int size);
 int __real_socketpair(int domain, int type, int protocol, int sv[2]);
 int __real_pipe2(int __pipedes[2], int flags);
 int __real_pipe(int __pipedes[2]);
 int __real_epoll_ctl(int aEpollFd, int aOp, int aFd, struct epoll_event *aEvent);
 int __real_close(int aFd);
+#pragma GCC visibility pop
 }
 
 #define REAL(s) __real_##s
 
 /**
  * A Nuwa process is started by preparing.  After preparing, it waits
  * for all threads becoming frozen. Then, it is ready while all
  * threads are frozen.
--- a/mozglue/linker/ElfLoader.cpp
+++ b/mozglue/linker/ElfLoader.cpp
@@ -29,17 +29,17 @@ inline int sigaltstack(const stack_t *ss
   return syscall(__NR_sigaltstack, ss, oss);
 }
 
 } /* extern "C" */
 #endif /* __ANDROID_API__ */
 #endif /* ANDROID */
 
 #ifdef __ARM_EABI__
-extern "C" const void *
+extern "C" MOZ_EXPORT const void *
 __gnu_Unwind_Find_exidx(void *pc, int *pcount) __attribute__((weak));
 #endif
 
 using namespace mozilla;
 
 /**
  * dlfcn.h replacements functions
  */
--- a/netwerk/protocol/rtsp/rtsp/AAMRAssembler.h
+++ b/netwerk/protocol/rtsp/rtsp/AAMRAssembler.h
@@ -13,26 +13,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 #ifndef A_AMR_ASSEMBLER_H_
 
 #define A_AMR_ASSEMBLER_H_
 
+#include "mozilla/Types.h"
 #include "ARTPAssembler.h"
 
 #include <utils/List.h>
 
 #include <stdint.h>
 
 namespace android {
 
-struct AMessage;
-struct AString;
+struct MOZ_EXPORT AMessage;
+struct MOZ_EXPORT AString;
 
 struct AAMRAssembler : public ARTPAssembler {
     AAMRAssembler(
             const sp<AMessage> &notify, bool isWide,
             const AString &params);
 
 protected:
     virtual ~AAMRAssembler();
--- a/netwerk/protocol/rtsp/rtsp/AAVCAssembler.h
+++ b/netwerk/protocol/rtsp/rtsp/AAVCAssembler.h
@@ -13,25 +13,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 #ifndef A_AVC_ASSEMBLER_H_
 
 #define A_AVC_ASSEMBLER_H_
 
+#include "mozilla/Types.h"
 #include "ARTPAssembler.h"
 
 #include <utils/List.h>
 #include <utils/RefBase.h>
 
 namespace android {
 
-struct ABuffer;
-struct AMessage;
+struct MOZ_EXPORT ABuffer;
+struct MOZ_EXPORT AMessage;
 
 struct AAVCAssembler : public ARTPAssembler {
     AAVCAssembler(const sp<AMessage> &notify);
 
 protected:
     virtual ~AAVCAssembler();
 
     virtual AssemblyStatus assembleMore(const sp<ARTPSource> &source);
--- a/netwerk/protocol/rtsp/rtsp/AH263Assembler.h
+++ b/netwerk/protocol/rtsp/rtsp/AH263Assembler.h
@@ -13,25 +13,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 #ifndef A_H263_ASSEMBLER_H_
 
 #define A_H263_ASSEMBLER_H_
 
+#include "mozilla/Types.h"
 #include "ARTPAssembler.h"
 
 #include <utils/List.h>
 
 #include <stdint.h>
 
 namespace android {
 
-struct AMessage;
+struct MOZ_EXPORT AMessage;
 
 struct AH263Assembler : public ARTPAssembler {
     AH263Assembler(const sp<AMessage> &notify);
 
 protected:
     virtual ~AH263Assembler();
 
     virtual AssemblyStatus assembleMore(const sp<ARTPSource> &source);
--- a/netwerk/protocol/rtsp/rtsp/AMPEG4AudioAssembler.h
+++ b/netwerk/protocol/rtsp/rtsp/AMPEG4AudioAssembler.h
@@ -13,26 +13,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 #ifndef A_MPEG4_AUDIO_ASSEMBLER_H_
 
 #define A_MPEG4_AUDIO_ASSEMBLER_H_
 
+#include "mozilla/Types.h"
 #include "ARTPAssembler.h"
 
 #include <utils/List.h>
 
 #include <stdint.h>
 
 namespace android {
 
-struct AMessage;
-struct AString;
+struct MOZ_EXPORT AMessage;
+struct MOZ_EXPORT AString;
 
 struct AMPEG4AudioAssembler : public ARTPAssembler {
     AMPEG4AudioAssembler(
             const sp<AMessage> &notify, const AString &params);
 
 protected:
     virtual ~AMPEG4AudioAssembler();
 
--- a/netwerk/protocol/rtsp/rtsp/AMPEG4ElementaryAssembler.h
+++ b/netwerk/protocol/rtsp/rtsp/AMPEG4ElementaryAssembler.h
@@ -13,27 +13,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 #ifndef A_MPEG4_ELEM_ASSEMBLER_H_
 
 #define A_MPEG4_ELEM_ASSEMBLER_H_
 
+#include "mozilla/Types.h"
 #include "ARTPAssembler.h"
 
 #include <media/stagefright/foundation/AString.h>
 
 #include <utils/List.h>
 #include <utils/RefBase.h>
 
 namespace android {
 
-struct ABuffer;
-struct AMessage;
+struct MOZ_EXPORT ABuffer;
+struct MOZ_EXPORT AMessage;
 
 struct AMPEG4ElementaryAssembler : public ARTPAssembler {
     AMPEG4ElementaryAssembler(
             const sp<AMessage> &notify, const AString &desc,
             const AString &params);
 
 protected:
     virtual ~AMPEG4ElementaryAssembler();
--- a/netwerk/protocol/rtsp/rtsp/ARTPAssembler.h
+++ b/netwerk/protocol/rtsp/rtsp/ARTPAssembler.h
@@ -13,22 +13,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 #ifndef A_RTP_ASSEMBLER_H_
 
 #define A_RTP_ASSEMBLER_H_
 
+#include "mozilla/Types.h"
 #include <media/stagefright/foundation/ABase.h>
 #include <utils/RefBase.h>
 
 namespace android {
 
-struct ABuffer;
+struct MOZ_EXPORT ABuffer;
 struct ARTPSource;
 
 struct ARTPAssembler : public RefBase {
     enum AssemblyStatus {
         MALFORMED_PACKET,
         WRONG_SEQUENCE_NUMBER,
         NOT_ENOUGH_DATA,
         OK
--- a/netwerk/protocol/rtsp/rtsp/ARTPConnection.h
+++ b/netwerk/protocol/rtsp/rtsp/ARTPConnection.h
@@ -13,22 +13,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 #ifndef A_RTP_CONNECTION_H_
 
 #define A_RTP_CONNECTION_H_
 
+#include "mozilla/Types.h"
 #include <media/stagefright/foundation/AHandler.h>
 #include <utils/List.h>
 
 namespace android {
 
-struct ABuffer;
+struct MOZ_EXPORT ABuffer;
 struct ARTPSource;
 struct ASessionDescription;
 
 struct ARTPConnection : public AHandler {
     enum Flags {
         kRegularlyRequestFIR = 2,
     };
 
--- a/netwerk/protocol/rtsp/rtsp/ARTPSession.h
+++ b/netwerk/protocol/rtsp/rtsp/ARTPSession.h
@@ -13,24 +13,25 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 #ifndef A_RTP_SESSION_H_
 
 #define A_RTP_SESSION_H_
 
+#include "mozilla/Types.h"
 #include <media/stagefright/foundation/AHandler.h>
 
 namespace android {
 
 struct APacketSource;
 struct ARTPConnection;
 struct ASessionDescription;
-struct MediaSource;
+struct MOZ_EXPORT MediaSource;
 
 struct ARTPSession : public AHandler {
     ARTPSession();
 
     status_t setup(const sp<ASessionDescription> &desc);
 
     size_t countTracks();
     sp<MediaSource> trackAt(size_t index);
--- a/netwerk/protocol/rtsp/rtsp/ARTPSource.h
+++ b/netwerk/protocol/rtsp/rtsp/ARTPSource.h
@@ -13,26 +13,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 #ifndef A_RTP_SOURCE_H_
 
 #define A_RTP_SOURCE_H_
 
+#include "mozilla/Types.h"
 #include <stdint.h>
 
 #include <media/stagefright/foundation/ABase.h>
 #include <utils/List.h>
 #include <utils/RefBase.h>
 
 namespace android {
 
-struct ABuffer;
-struct AMessage;
+struct MOZ_EXPORT ABuffer;
+struct MOZ_EXPORT AMessage;
 struct ARTPAssembler;
 struct ASessionDescription;
 
 struct ARTPSource : public RefBase {
     ARTPSource(
             uint32_t id,
             const sp<ASessionDescription> &sessionDesc, size_t index,
             const sp<AMessage> &notify);
--- a/netwerk/protocol/rtsp/rtsp/ARTPWriter.h
+++ b/netwerk/protocol/rtsp/rtsp/ARTPWriter.h
@@ -13,31 +13,32 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 #ifndef A_RTP_WRITER_H_
 
 #define A_RTP_WRITER_H_
 
+#include "mozilla/Types.h"
 #include <media/stagefright/foundation/ABase.h>
 #include <media/stagefright/foundation/AHandlerReflector.h>
 #include <media/stagefright/foundation/AString.h>
 #include <media/stagefright/foundation/base64.h>
 #include <media/stagefright/MediaWriter.h>
 
 #include <arpa/inet.h>
 #include <sys/socket.h>
 
 #define LOG_TO_FILES    0
 
 namespace android {
 
-struct ABuffer;
-struct MediaBuffer;
+struct MOZ_EXPORT ABuffer;
+struct MOZ_EXPORT MediaBuffer;
 
 struct ARTPWriter : public MediaWriter {
     ARTPWriter(int fd);
 
     virtual status_t addSource(const sp<MediaSource> &source);
     virtual bool reachedEOS();
     virtual status_t start(MetaData *params);
     virtual status_t stop();
--- a/netwerk/protocol/rtsp/rtsp/ARTSPConnection.h
+++ b/netwerk/protocol/rtsp/rtsp/ARTSPConnection.h
@@ -13,22 +13,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 #ifndef A_RTSP_CONNECTION_H_
 
 #define A_RTSP_CONNECTION_H_
 
+#include "mozilla/Types.h"
 #include <media/stagefright/foundation/AHandler.h>
 #include <media/stagefright/foundation/AString.h>
 
 namespace android {
 
-struct ABuffer;
+struct MOZ_EXPORT ABuffer;
 
 struct ARTSPResponse : public RefBase {
     unsigned long mStatusCode;
     AString mStatusLine;
     KeyedVector<AString,AString> mHeaders;
     sp<ABuffer> mContent;
 };
 
--- a/netwerk/protocol/rtsp/rtsp/ARawAudioAssembler.h
+++ b/netwerk/protocol/rtsp/rtsp/ARawAudioAssembler.h
@@ -13,23 +13,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 #ifndef A_RAW_AUDIO_ASSEMBLER_H_
 
 #define A_RAW_AUDIO_ASSEMBLER_H_
 
+#include "mozilla/Types.h"
 #include "ARTPAssembler.h"
 
 namespace android {
 
-struct AMessage;
-struct AString;
-struct MetaData;
+struct MOZ_EXPORT AMessage;
+struct MOZ_EXPORT AString;
+struct MOZ_EXPORT MetaData;
 
 struct ARawAudioAssembler : public ARTPAssembler {
     ARawAudioAssembler(
             const sp<AMessage> &notify,
             const char *desc, const AString &params);
 
     static bool Supports(const char *desc);
 
--- a/netwerk/protocol/rtsp/rtsp/ASessionDescription.h
+++ b/netwerk/protocol/rtsp/rtsp/ASessionDescription.h
@@ -13,26 +13,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 #ifndef A_SESSION_DESCRIPTION_H_
 
 #define A_SESSION_DESCRIPTION_H_
 
+#include "mozilla/Types.h"
 #include <sys/types.h>
 
 #include <media/stagefright/foundation/ABase.h>
 #include <utils/KeyedVector.h>
 #include <utils/RefBase.h>
 #include <utils/Vector.h>
 
 namespace android {
 
-struct AString;
+struct MOZ_EXPORT AString;
 
 struct ASessionDescription : public RefBase {
     ASessionDescription();
 
     bool setTo(const void *data, size_t size);
     bool isValid() const;
 
     // Actually, 1 + number of tracks, as index 0 is reserved for the
--- a/netwerk/protocol/rtsp/rtsp/RTSPSource.h
+++ b/netwerk/protocol/rtsp/rtsp/RTSPSource.h
@@ -13,31 +13,32 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 #ifndef RTSP_SOURCE_H_
 
 #define RTSP_SOURCE_H_
 
+#include "mozilla/Types.h"
 #include <utils/RefBase.h>
 #include <media/stagefright/foundation/AString.h>
 #include <media/stagefright/foundation/AHandlerReflector.h>
 
 #include "nsCOMPtr.h"
 #include "nsString.h"
 #include "nsIStreamingProtocolController.h"
 #include "nsProxyRelease.h"
 
 namespace android {
 
-struct MetaData;
-struct ABuffer;
-struct ALooper;
-struct AnotherPacketSource;
+struct MOZ_EXPORT MetaData;
+struct MOZ_EXPORT ABuffer;
+struct MOZ_EXPORT ALooper;
+struct MOZ_EXPORT AnotherPacketSource;
 struct RtspConnectionHandler;
 
 class RTSPSource : public RefBase
 {
 public:
 
     RTSPSource(
             nsIStreamingProtocolListener *aListener,
--- a/toolkit/mozapps/update/updater/updater.cpp
+++ b/toolkit/mozapps/update/updater/updater.cpp
@@ -49,16 +49,17 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <limits.h>
 #include <errno.h>
 
 #include "updatelogging.h"
 
 #include "mozilla/Compiler.h"
+#include "mozilla/Types.h"
 
 // Amount of the progress bar to use in each of the 3 update stages,
 // should total 100.0.
 #define PROGRESS_PREPARE_SIZE 20.0f
 #define PROGRESS_EXECUTE_SIZE 75.0f
 #define PROGRESS_FINISH_SIZE   5.0f
 
 // Amount of time in ms to wait for the parent process to close
@@ -94,17 +95,17 @@ void LaunchMacPostProcess(const char* aA
 # include <unistd.h>
 # include <android/log.h>
 # include <linux/ioprio.h>
 # include <sys/resource.h>
 
 // The only header file in bionic which has a function prototype for ioprio_set
 // is libc/include/sys/linux-unistd.h. However, linux-unistd.h conflicts
 // badly with unistd.h, so we declare the prototype for ioprio_set directly.
-extern "C" int ioprio_set(int which, int who, int ioprio);
+extern "C" MOZ_EXPORT int ioprio_set(int which, int who, int ioprio);
 
 # define MAYBE_USE_HARD_LINKS 1
 static bool sUseHardLinks = true;
 #else
 # define MAYBE_USE_HARD_LINKS 0
 #endif
 
 #ifdef XP_WIN
--- a/tools/profiler/shared-libraries-linux.cc
+++ b/tools/profiler/shared-libraries-linux.cc
@@ -23,17 +23,17 @@
 #else
 #include <link.h> // dl_phdr_info
 #endif
 #include <features.h>
 #include <dlfcn.h>
 #include <sys/types.h>
 
 #ifdef ANDROID
-extern "C" __attribute__((weak))
+extern "C" MOZ_EXPORT __attribute__((weak))
 int dl_iterate_phdr(
           int (*callback) (struct dl_phdr_info *info,
                            size_t size, void *data),
           void *data);
 #endif
 
 int dl_iterate_callback(struct dl_phdr_info *dl_info, size_t size, void *data)
 {
--- a/widget/android/AndroidBridge.h
+++ b/widget/android/AndroidBridge.h
@@ -23,27 +23,28 @@
 
 #include "nsIAndroidBridge.h"
 #include "nsIMobileMessageCallback.h"
 
 #include "mozilla/Likely.h"
 #include "mozilla/StaticPtr.h"
 #include "mozilla/layers/GeckoContentController.h"
 #include "mozilla/TimeStamp.h"
+#include "mozilla/Types.h"
 
 // Some debug #defines
 // #define DEBUG_ANDROID_EVENTS
 // #define DEBUG_ANDROID_WIDGET
 
 class nsWindow;
 class nsIDOMMozSmsMessage;
 class nsIObserver;
 
 /* See the comment in AndroidBridge about this function before using it */
-extern "C" JNIEnv * GetJNIForThread();
+extern "C" MOZ_EXPORT JNIEnv * GetJNIForThread();
 
 extern bool mozilla_AndroidBridge_SetMainThread(pthread_t);
 
 namespace base {
 class Thread;
 } // end namespace base
 
 typedef void* EGLSurface;
--- a/widget/android/AndroidJNIWrapper.h
+++ b/widget/android/AndroidJNIWrapper.h
@@ -1,33 +1,34 @@
 /* -*- Mode: c++; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
  * This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #ifndef AndroidJNIWrapper_h__
 #define AndroidJNIWrapper_h__
 
+#include "mozilla/Types.h"
 #include <jni.h>
 #include <android/log.h>
 
-extern "C" jclass jsjni_FindClass(const char *className);
+extern "C" MOZ_EXPORT jclass jsjni_FindClass(const char *className);
 
 /**
  * JNIEnv::FindClass alternative.
  * Callable from any thread, including code
  * invoked via the JNI that doesn't have MOZILLA_INTERNAL_API defined.
  * The caller is responsible for ensuring that the class is not leaked by
  * calling DeleteGlobalRef at an appropriate time.
  */
-extern "C" jclass jsjni_GetGlobalClassRef(const char *className);
+extern "C" MOZ_EXPORT jclass jsjni_GetGlobalClassRef(const char *className);
 
-extern "C" jmethodID jsjni_GetStaticMethodID(jclass methodClass,
+extern "C" MOZ_EXPORT jmethodID jsjni_GetStaticMethodID(jclass methodClass,
                                        const char *methodName,
                                        const char *signature);
-extern "C" bool jsjni_ExceptionCheck();
-extern "C" void jsjni_CallStaticVoidMethodA(jclass cls, jmethodID method, jvalue *values);
-extern "C" int jsjni_CallStaticIntMethodA(jclass cls, jmethodID method, jvalue *values);
-extern "C" jobject jsjni_GetGlobalContextRef();
-extern "C" JavaVM* jsjni_GetVM();
-extern "C" JNIEnv* jsjni_GetJNIForThread();
+extern "C" MOZ_EXPORT bool jsjni_ExceptionCheck();
+extern "C" MOZ_EXPORT void jsjni_CallStaticVoidMethodA(jclass cls, jmethodID method, jvalue *values);
+extern "C" MOZ_EXPORT int jsjni_CallStaticIntMethodA(jclass cls, jmethodID method, jvalue *values);
+extern "C" MOZ_EXPORT jobject jsjni_GetGlobalContextRef();
+extern "C" MOZ_EXPORT JavaVM* jsjni_GetVM();
+extern "C" MOZ_EXPORT JNIEnv* jsjni_GetJNIForThread();
 
 #endif /* AndroidJNIWrapper_h__ */
--- a/widget/gonk/libdisplay/GonkDisplay.h
+++ b/widget/gonk/libdisplay/GonkDisplay.h
@@ -12,27 +12,28 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 #ifndef GONKDISPLAY_H
 #define GONKDISPLAY_H
 
 #include <system/window.h>
+#include "mozilla/Types.h"
 
 namespace mozilla {
 
 namespace layers {
 class Layer;
 }
 
 typedef void * EGLDisplay;
 typedef void * EGLSurface;
 
-class GonkDisplay {
+class MOZ_EXPORT GonkDisplay {
 public:
     virtual ANativeWindow* GetNativeWindow() = 0;
 
     virtual void SetEnabled(bool enabled) = 0;
 
     typedef void (*OnEnabledCallbackType)(bool enabled);
 
     virtual void OnEnabled(OnEnabledCallbackType callback) = 0;
@@ -61,13 +62,13 @@ public:
      * AcquireFence will be signaled when a buffer's content is available.
      */
     virtual int GetPrevFBAcquireFd() = 0;
 
     float xdpi;
     uint32_t surfaceformat;
 };
 
-__attribute__ ((weak))
+MOZ_EXPORT __attribute__ ((weak))
 GonkDisplay* GetGonkDisplay();
 
 }
 #endif /* GONKDISPLAY_H */
--- a/widget/gonk/libdisplay/GonkDisplayICS.h
+++ b/widget/gonk/libdisplay/GonkDisplayICS.h
@@ -20,17 +20,17 @@
 
 #include "GonkDisplay.h"
 #include "ui/FramebufferNativeWindow.h"
 #include "hardware/hwcomposer.h"
 #include "utils/RefBase.h"
 
 namespace mozilla {
 
-class GonkDisplayICS : public GonkDisplay {
+class MOZ_EXPORT GonkDisplayICS : public GonkDisplay {
 public:
     GonkDisplayICS();
     ~GonkDisplayICS();
 
     virtual ANativeWindow* GetNativeWindow();
 
     virtual void SetEnabled(bool enabled);
 
--- a/widget/gonk/libdisplay/GonkDisplayJB.h
+++ b/widget/gonk/libdisplay/GonkDisplayJB.h
@@ -20,17 +20,17 @@
 #include "FramebufferSurface.h"
 #include "hardware/hwcomposer.h"
 #include "hardware/power.h"
 #include "ui/Fence.h"
 #include "utils/RefBase.h"
 
 namespace mozilla {
 
-class GonkDisplayJB : public GonkDisplay {
+class MOZ_EXPORT GonkDisplayJB : public GonkDisplay {
 public:
     GonkDisplayJB();
     ~GonkDisplayJB();
 
     virtual ANativeWindow* GetNativeWindow();
 
     virtual void SetEnabled(bool enabled);