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 181901 a393ec07bc6ac4aad1a687038c750f0cd819faa5
parent 181900 9694b5d763ac9f81e7bdadb72a1fa1ef3f084792
child 181902 3554c8a5fefb75f5025488ea00eca27ad00cda4b
push idunknown
push userunknown
push dateunknown
reviewersglandium
bugs1006248
milestone32.0a1
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);