LLVM backend for 6502
Go to file
Chandler Carruth 6da21c0e33 Don't mark the declarations of the TSan annotation functions as weak.
That causes references to them to be weak references which can collapse
to null if no definition is provided. We call these functions
unconditionally, so a definition *must* be provided. Make the
definitions provided in the .cpp file weak by re-declaring them as weak
just prior to defining them. This should keep compilers which cannot
attach the weak attribute to the definition happy while actually
resolving the symbols correctly during the link.

You might ask yourself upon reading this commit log: how did *any* of
this work before? Well, fun story. It turns out we have some code in
Support (BumpPtrAllocator) which both uses virtual dispatch and has
out-of-line vtables used by that virtual dispatch. If you move the
virtual dispatch into its header in *just* the right way, the optimizer
gets to devirtualize, and remove all references to the vtable. Then the
sad part: the references to this one vtable were the only strong symbol
uses in the support library for llvm-tblgen AFAICT. At least, after
doing something just like this, these symbols stopped getting their weak
definition and random calls to them would segfault instead.

Yay software.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205137 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-30 11:20:25 +00:00
autoconf ARM64: initial backend import 2014-03-29 10:18:08 +00:00
bindings
cmake ARM64: initial backend import 2014-03-29 10:18:08 +00:00
docs Exception handling docs: Clarify how the llvm.eh.* intrinsics are used 2014-03-28 17:08:57 +00:00
examples Fix warnings about an variable only used in asserts. 2014-03-06 06:35:46 +00:00
include Don't mark the declarations of the TSan annotation functions as weak. 2014-03-30 11:20:25 +00:00
lib Don't mark the declarations of the TSan annotation functions as weak. 2014-03-30 11:20:25 +00:00
projects Remove projects/sample. 2014-03-12 22:40:22 +00:00
test Suppress llvm/test/CodeGen/ARM64 for targeting pecoff. ARM64 is unaware of that. 2014-03-30 05:01:17 +00:00
tools Windows: canonicalise the default windows triple 2014-03-29 01:08:53 +00:00
unittests ARM64: remove -m32/-m64 mapping with ARM. 2014-03-30 07:25:23 +00:00
utils tblgen: Twinify PrintFatalError. 2014-03-29 17:17:15 +00:00
.arcconfig
.clang-format
.gitignore Remove projects/sample. 2014-03-12 22:40:22 +00:00
CMakeLists.txt ARM64: initial backend import 2014-03-29 10:18:08 +00:00
CODE_OWNERS.TXT Update my e-mail address in CODE_OWNERS.TXT 2014-03-13 18:04:41 +00:00
configure ARM64: initial backend import 2014-03-29 10:18:08 +00:00
CREDITS.TXT
LICENSE.TXT Remove projects/sample. 2014-03-12 22:40:22 +00:00
llvm.spec.in
LLVMBuild.txt
Makefile [configure/make] Propagate names of build host tools when making BuildTools 2014-03-25 21:45:41 +00:00
Makefile.common
Makefile.config.in Add a --enable-clang-plugin-support option to configure. 2014-03-10 16:58:35 +00:00
Makefile.rules Use -std=gnu++11 on cygwin and mingw. 2014-03-12 20:01:15 +00:00
README.txt

Low Level Virtual Machine (LLVM)
================================

This directory and its subdirectories contain source code for the Low Level
Virtual Machine, a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments.

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the documentation provided in docs/ for further
assistance with LLVM, and in particular docs/GettingStarted.rst for getting
started with LLVM and docs/README.txt for an overview of LLVM's
documentation setup.

If you're writing a package for LLVM, see docs/Packaging.rst for our
suggestions.