From 9679be4bc0b0ff64c1dcce776c83a33968253826 Mon Sep 17 00:00:00 2001 From: Johann Date: Wed, 17 Feb 2016 18:25:09 -0800 Subject: [PATCH] Use .text instead of .rodata on macho The read only sections are getting stripped on some OS X builds. As a result, random data is used in place of the intended tables. Change-Id: I4629c90d9e0ae4d4efc193a93be6fb93809ae895 --- third_party/x86inc/README.libvpx | 1 + third_party/x86inc/x86inc.asm | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) 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" -- 2.40.0