summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--third_party/x86inc/README.libvpx1
-rw-r--r--third_party/x86inc/x86inc.asm12
2 files changed, 12 insertions, 1 deletions
diff --git a/third_party/x86inc/README.libvpx b/third_party/x86inc/README.libvpx
index 6fe3429d6..e8cbbf889 100644
--- a/third_party/x86inc/README.libvpx
+++ b/third_party/x86inc/README.libvpx
@@ -15,3 +15,4 @@ Manage name mangling (prefixing with '_') manually because 'PREFIX' does not
Expand PIC default to macho64 and respect CONFIG_PIC from libvpx
Set 'private_extern' visibility for macho targets.
Copy PIC 'GLOBAL' macros from x86_abi_support.asm
+Use .text instead of .rodata on macho to avoid broken tables in PIC mode.
diff --git a/third_party/x86inc/x86inc.asm b/third_party/x86inc/x86inc.asm
index e28348eef..9aaa0e5ad 100644
--- a/third_party/x86inc/x86inc.asm
+++ b/third_party/x86inc/x86inc.asm
@@ -97,8 +97,18 @@
%define mangle(x) x
%endif
+; In some instances macho32 tables get misaligned when using .rodata.
+; When looking at the disassembly it appears that the offset is either
+; correct or consistently off by 90. Placing them in the .text section
+; works around the issue. It appears to be specific to the way libvpx
+; handles the tables.
%macro SECTION_RODATA 0-1 16
- SECTION .rodata align=%1
+ %ifidn __OUTPUT_FORMAT__,macho32
+ SECTION .text align=%1
+ fakegot:
+ %else
+ SECTION .rodata align=%1
+ %endif
%endmacro
; PIC macros are copied from vpx_ports/x86_abi_support.asm. The "define PIC"