summaryrefslogtreecommitdiff
path: root/vpx_ports
diff options
context:
space:
mode:
Diffstat (limited to 'vpx_ports')
-rw-r--r--vpx_ports/emms_mmx.asm2
-rw-r--r--vpx_ports/float_control_word.asm4
-rw-r--r--vpx_ports/x86_abi_support.asm70
3 files changed, 44 insertions, 32 deletions
diff --git a/vpx_ports/emms_mmx.asm b/vpx_ports/emms_mmx.asm
index ee7595e1f..b31b25ebd 100644
--- a/vpx_ports/emms_mmx.asm
+++ b/vpx_ports/emms_mmx.asm
@@ -12,7 +12,7 @@
%include "vpx_ports/x86_abi_support.asm"
section .text
-global sym(vpx_clear_system_state)PRIVATE
+globalsym(vpx_clear_system_state)
sym(vpx_clear_system_state):
emms
ret
diff --git a/vpx_ports/float_control_word.asm b/vpx_ports/float_control_word.asm
index d9d000ab6..bb75b7a31 100644
--- a/vpx_ports/float_control_word.asm
+++ b/vpx_ports/float_control_word.asm
@@ -14,7 +14,7 @@
section .text
%if LIBVPX_YASM_WIN64
-global sym(vpx_winx64_fldcw)PRIVATE
+globalsym(vpx_winx64_fldcw)
sym(vpx_winx64_fldcw):
sub rsp, 8
mov [rsp], rcx ; win x64 specific
@@ -23,7 +23,7 @@ sym(vpx_winx64_fldcw):
ret
-global sym(vpx_winx64_fstcw)PRIVATE
+globalsym(vpx_winx64_fstcw)
sym(vpx_winx64_fstcw):
sub rsp, 8
fstcw [rsp]
diff --git a/vpx_ports/x86_abi_support.asm b/vpx_ports/x86_abi_support.asm
index 420aa668d..6b2d6b968 100644
--- a/vpx_ports/x86_abi_support.asm
+++ b/vpx_ports/x86_abi_support.asm
@@ -89,34 +89,51 @@
%define LIBVPX_YASM_WIN64 0
%endif
+; Declare groups of platforms
+%ifidn __OUTPUT_FORMAT__,elf32
+ %define LIBVPX_ELF 1
+%elifidn __OUTPUT_FORMAT__,elfx32
+ %define LIBVPX_ELF 1
+%elifidn __OUTPUT_FORMAT__,elf64
+ %define LIBVPX_ELF 1
+%else
+ %define LIBVPX_ELF 0
+%endif
+
+%ifidn __OUTPUT_FORMAT__,macho32
+ %define LIBVPX_MACHO 1
+%elifidn __OUTPUT_FORMAT__,macho64
+ %define LIBVPX_MACHO 1
+%else
+ %define LIBVPX_MACHO 0
+%endif
+
; sym()
; Return the proper symbol name for the target ABI.
;
; Certain ABIs, notably MS COFF and Darwin MACH-O, require that symbols
; with C linkage be prefixed with an underscore.
;
-%ifidn __OUTPUT_FORMAT__,elf32
-%define sym(x) x
-%elifidn __OUTPUT_FORMAT__,elf64
-%define sym(x) x
-%elifidn __OUTPUT_FORMAT__,elfx32
-%define sym(x) x
-%elif LIBVPX_YASM_WIN64
-%define sym(x) x
+%if LIBVPX_ELF || LIBVPX_YASM_WIN64
+ %define sym(x) x
%else
-%define sym(x) _ %+ x
+ ; Mach-O / COFF
+ %define sym(x) _ %+ x
%endif
-; PRIVATE
-; Macro for the attribute to hide a global symbol for the target ABI.
-; This is only active if CHROMIUM is defined.
+; globalsym()
+; Return a global declaration with the proper decoration for the target ABI.
+;
+; When CHROMIUM is defined, include attributes to hide the symbol from the
+; global namespace.
;
-; Chromium doesn't like exported global symbols due to symbol clashing with
-; plugins among other things.
+; Chromium doesn't like exported global symbols due to symbol clashing with
+; plugins among other things.
;
-; Requires Chromium's patched copy of yasm:
-; http://src.chromium.org/viewvc/chrome?view=rev&revision=73761
-; http://www.tortall.net/projects/yasm/ticket/236
+; Requires Chromium's patched copy of yasm:
+; http://src.chromium.org/viewvc/chrome?view=rev&revision=73761
+; http://www.tortall.net/projects/yasm/ticket/236
+; or nasm > 2.14.
;
%ifdef CHROMIUM
%ifdef __NASM_VER__
@@ -126,21 +143,16 @@
%endif
%endif
- %ifidn __OUTPUT_FORMAT__,elf32
- %define PRIVATE :function hidden
- %elifidn __OUTPUT_FORMAT__,elf64
- %define PRIVATE :function hidden
- %elifidn __OUTPUT_FORMAT__,elfx32
- %define PRIVATE :function hidden
- %elifidn __OUTPUT_FORMAT__,macho32
- %define PRIVATE :private_extern
- %elifidn __OUTPUT_FORMAT__,macho64
- %define PRIVATE :private_extern
+ %if LIBVPX_ELF
+ %define globalsym(x) global sym(x) %+ :function hidden
+ %elif LIBVPX_MACHO
+ %define globalsym(x) global sym(x) %+ :private_extern
%else
- %define PRIVATE
+ ; COFF / PE32+
+ %define globalsym(x) global sym(x)
%endif
%else
- %define PRIVATE
+ %define globalsym(x) global sym(x)
%endif
; arg()