Merge "ART: Do not inline elf writer debug symbols"
diff --git a/compiler/elf_writer_quick.cc b/compiler/elf_writer_quick.cc
index 25cf086..d651c0f 100644
--- a/compiler/elf_writer_quick.cc
+++ b/compiler/elf_writer_quick.cc
@@ -669,6 +669,8 @@
template <typename Elf_Word, typename Elf_Sword, typename Elf_Addr,
typename Elf_Dyn, typename Elf_Sym, typename Elf_Ehdr,
typename Elf_Phdr, typename Elf_Shdr>
+// Do not inline to avoid Clang stack frame problems. b/18738594
+NO_INLINE
static void WriteDebugSymbols(const CompilerDriver* compiler_driver,
ElfBuilder<Elf_Word, Elf_Sword, Elf_Addr, Elf_Dyn,
Elf_Sym, Elf_Ehdr, Elf_Phdr, Elf_Shdr>* builder,
diff --git a/disassembler/disassembler_x86.cc b/disassembler/disassembler_x86.cc
index ba72707..b58f5fa 100644
--- a/disassembler/disassembler_x86.cc
+++ b/disassembler/disassembler_x86.cc
@@ -154,8 +154,8 @@
}
// Do not inline to avoid Clang stack frame problems. b/18733806
-static std::string __attribute__((noinline)) DumpCodeHex(const uint8_t* begin,
- const uint8_t* end) {
+NO_INLINE
+static std::string DumpCodeHex(const uint8_t* begin, const uint8_t* end) {
std::stringstream hex;
for (size_t i = 0; begin + i < end; ++i) {
hex << StringPrintf("%02X", begin[i]);
diff --git a/runtime/base/macros.h b/runtime/base/macros.h
index 66d6fab..f705469 100644
--- a/runtime/base/macros.h
+++ b/runtime/base/macros.h
@@ -158,6 +158,8 @@
#define ALWAYS_INLINE_LAMBDA ALWAYS_INLINE
#endif
+#define NO_INLINE __attribute__ ((noinline))
+
#if defined (__APPLE__)
#define HOT_ATTR
#define COLD_ATTR