blob: cb8a8d72c24b24d7e66e121454d4702e955dc8e3 [file] [log] [blame]
/*
* Copyright 2014 Andy Lutomirski
* Subject to the GNU Public License, v.2
*
* Hack to keep broken Go programs working.
*
* The Go runtime had a couple of bugs: it would read the section table to try
* to figure out how many dynamic symbols there were (it shouldn't have looked
* at the section table at all) and, if there were no SHT_SYNDYM section table
* entry, it would use an uninitialized value for the number of symbols. As a
* workaround, we supply a minimal section table. vdso2c will adjust the
* in-memory image so that "vdso_fake_sections" becomes the section table.
*
* The bug was introduced by:
* https://code.google.com/p/go/source/detail?r=56ea40aac72b (2012-08-31)
* and is being addressed in the Go runtime in this issue:
* https://code.google.com/p/go/issues/detail?id=8197
*/
#ifndef __x86_64__
#error This hack is specific to the 64-bit vDSO
#endif
#include <linux/elf.h>
extern const __visible struct elf64_shdr vdso_fake_sections[];
const __visible struct elf64_shdr vdso_fake_sections[] = {
{
.sh_type = SHT_DYNSYM,
.sh_entsize = sizeof(Elf64_Sym),
}
};