| Index: third_party/crazy_linker/crazy_linker/src/crazy_linker_thread.h
|
| diff --git a/third_party/crazy_linker/crazy_linker/src/crazy_linker_thread.h b/third_party/crazy_linker/crazy_linker/src/crazy_linker_thread.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..75eaf2e7ecd678ebac9f855f8cdcbee747834422
|
| --- /dev/null
|
| +++ b/third_party/crazy_linker/crazy_linker/src/crazy_linker_thread.h
|
| @@ -0,0 +1,83 @@
|
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CRAZY_LINKER_THREAD_H
|
| +#define CRAZY_LINKER_THREAD_H
|
| +
|
| +#include <stdarg.h>
|
| +#include <stddef.h>
|
| +
|
| +namespace crazy {
|
| +
|
| +// Per-thread context used during crazy linker operations.
|
| +class ThreadData {
|
| +
|
| +public:
|
| + ThreadData() {}
|
| +
|
| + // Init new ThreadData instance.
|
| + void Init();
|
| +
|
| + // Return the current error message. This also clears the internal
|
| + // error message, which means that the next call to this method
|
| + // will return a pointer to an empty string unless AppendError()
|
| + // was called.
|
| + const char* GetError() const {
|
| + return dlerror_;
|
| + }
|
| +
|
| + // Swap the error buffers.
|
| + void SwapErrorBuffers();
|
| +
|
| + // Set message string in current dlerror buffer.
|
| + void SetError(const char* fmt, ...) {
|
| + va_list args;
|
| + va_start(args, fmt);
|
| + SetErrorArgs(fmt, args);
|
| + va_end(args);
|
| + }
|
| +
|
| + void SetErrorArgs(const char* fmt, va_list args);
|
| +
|
| + // Append message string to current dlerror buffer.
|
| + void AppendError(const char* fmt, ...) {
|
| + va_list args;
|
| + va_start(args, fmt);
|
| + AppendErrorArgs(fmt, args);
|
| + va_end(args);
|
| + }
|
| +
|
| + void AppendErrorArgs(const char* fmt, va_list args);
|
| +
|
| +private:
|
| + // Pointer to the current dlerror buffer. This points to one
|
| + // of the dlerror_buffers[] arrays, swapped on each dlerror()
|
| + // call.
|
| + char* dlerror_;
|
| +
|
| + // Size of each dlerror message buffer size.
|
| + static const size_t kBufferSize = 512;
|
| +
|
| + // Two buffers used to store dlerror messages.
|
| + char dlerror_buffers_[2][kBufferSize];
|
| +};
|
| +
|
| +// Retrieves the ThreadData structure for the current thread.
|
| +// The first time this is called on a given thread, this creates
|
| +// a fresh new object, so this should never return NULL.
|
| +ThreadData* GetThreadData();
|
| +
|
| +// Faster variant that should only be called when GetThreadData() was
|
| +// called at least once on the current thread.
|
| +ThreadData* GetThreadDataFast();
|
| +
|
| +// Set the linker error string for the current thread.
|
| +void SetLinkerErrorString(const char* str);
|
| +
|
| +// Set the formatted linker error for the current thread.
|
| +void SetLinkerError(const char* fmt, ...);
|
| +
|
| +} // namespace crazy;
|
| +
|
| +#endif // CRAZY_LINKER_THREAD_H
|
|
|