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"