Fix Mac Breakpad host tools to build in Linux cross-compile
We're working on building our Firefox Mac builds as a Linux cross-compile (https://bugzilla.mozilla.org/show_bug.cgi?id=921040) and we need symbol dumping to work. This change ports the Mac dump_syms tool to build and work on Linux. I've tested it and it produces identical output to running the tool on Mac. The bulk of the work here was converting src/common/mac/dump_syms.mm and src/tools/mac/dump_syms/dump_syms_tool.mm from ObjC++ to C++ and removing their use of Foundation classes in favor of standard C/C++. This won't compile out-of-the-box on Linux, it requires some Mac system headers that are not included in this patch. I have those tentatively in a separate patch to land in Gecko (http://hg.mozilla.org/users/tmielczarek_mozilla.com/mc/rev/5fb8da23c83c), but I wasn't sure if you'd be interested in having them in the Breakpad tree. We could almost certainly pare down the set of headers included there, I didn't spend too much time trying to minimize them (we primarily just need the Mach-O structs and a few associated bits). I just realized that this patch is missing updating the XCode project files (ugh). I'll fix that up in a bit. R=mark@chromium.org BUG=https://bugzilla.mozilla.org/show_bug.cgi?id=543111 Review URL: https://codereview.chromium.org/1340543002 .
This commit is contained in:
parent
d28bebcd16
commit
8079ae192d
35 changed files with 4534 additions and 202 deletions
68
Makefile.am
68
Makefile.am
|
@ -317,7 +317,8 @@ bin_PROGRAMS += \
|
|||
src/tools/linux/dump_syms/dump_syms \
|
||||
src/tools/linux/md2core/minidump-2-core \
|
||||
src/tools/linux/symupload/minidump_upload \
|
||||
src/tools/linux/symupload/sym_upload
|
||||
src/tools/linux/symupload/sym_upload \
|
||||
src/tools/mac/dump_syms/dump_syms
|
||||
endif
|
||||
endif LINUX_HOST
|
||||
|
||||
|
@ -364,6 +365,7 @@ check_PROGRAMS += \
|
|||
if !DISABLE_TOOLS
|
||||
check_PROGRAMS += \
|
||||
src/common/dumper_unittest \
|
||||
src/common/mac/macho_reader_unittest \
|
||||
src/tools/linux/md2core/minidump_2_core_unittest
|
||||
endif
|
||||
endif LINUX_HOST
|
||||
|
@ -546,6 +548,30 @@ src_tools_linux_symupload_sym_upload_SOURCES = \
|
|||
src/tools/linux/symupload/sym_upload.cc
|
||||
src_tools_linux_symupload_sym_upload_LDADD = -ldl
|
||||
|
||||
src_tools_mac_dump_syms_dump_syms_SOURCES = \
|
||||
src/common/dwarf_cfi_to_module.cc \
|
||||
src/common/dwarf_cu_to_module.cc \
|
||||
src/common/dwarf_line_to_module.cc \
|
||||
src/common/language.cc \
|
||||
src/common/md5.cc \
|
||||
src/common/module.cc \
|
||||
src/common/stabs_reader.cc \
|
||||
src/common/stabs_to_module.cc \
|
||||
src/common/dwarf/bytereader.cc \
|
||||
src/common/dwarf/dwarf2diehandler.cc \
|
||||
src/common/dwarf/dwarf2reader.cc \
|
||||
src/common/mac/arch_utilities.cc \
|
||||
src/common/mac/dump_syms.cc \
|
||||
src/common/mac/file_id.cc \
|
||||
src/common/mac/macho_id.cc \
|
||||
src/common/mac/macho_reader.cc \
|
||||
src/common/mac/macho_utilities.cc \
|
||||
src/common/mac/macho_walker.cc \
|
||||
src/tools/mac/dump_syms/dump_syms_tool.cc
|
||||
src_tools_mac_dump_syms_dump_syms_CXXFLAGS= \
|
||||
-I$(top_srcdir)/src/third_party/mac_headers \
|
||||
-DHAVE_MACH_O_NLIST_H
|
||||
|
||||
src_common_dumper_unittest_SOURCES = \
|
||||
src/common/byte_cursor_unittest.cc \
|
||||
src/common/dwarf_cfi_to_module.cc \
|
||||
|
@ -601,6 +627,42 @@ src_common_dumper_unittest_CPPFLAGS = \
|
|||
-I$(top_srcdir)/src/testing \
|
||||
$(PTHREAD_CFLAGS)
|
||||
src_common_dumper_unittest_LDADD = $(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
|
||||
|
||||
src_common_mac_macho_reader_unittest_SOURCES = \
|
||||
src/common/dwarf_cfi_to_module.cc \
|
||||
src/common/dwarf_cu_to_module.cc \
|
||||
src/common/dwarf_line_to_module.cc \
|
||||
src/common/language.cc \
|
||||
src/common/md5.cc \
|
||||
src/common/module.cc \
|
||||
src/common/stabs_reader.cc \
|
||||
src/common/stabs_to_module.cc \
|
||||
src/common/test_assembler.cc \
|
||||
src/common/dwarf/bytereader.cc \
|
||||
src/common/dwarf/cfi_assembler.cc \
|
||||
src/common/dwarf/dwarf2diehandler.cc \
|
||||
src/common/dwarf/dwarf2reader.cc \
|
||||
src/common/mac/arch_utilities.cc \
|
||||
src/common/mac/file_id.cc \
|
||||
src/common/mac/macho_id.cc \
|
||||
src/common/mac/macho_reader.cc \
|
||||
src/common/mac/macho_reader_unittest.cc \
|
||||
src/common/mac/macho_utilities.cc \
|
||||
src/common/mac/macho_walker.cc \
|
||||
src/common/tests/file_utils.cc \
|
||||
src/testing/gtest/src/gtest-all.cc \
|
||||
src/testing/gtest/src/gtest_main.cc \
|
||||
src/testing/src/gmock-all.cc
|
||||
src_common_mac_macho_reader_unittest_CPPFLAGS = \
|
||||
-I$(top_srcdir)/src \
|
||||
-I$(top_srcdir)/src/testing/include \
|
||||
-I$(top_srcdir)/src/testing/gtest/include \
|
||||
-I$(top_srcdir)/src/testing/gtest \
|
||||
-I$(top_srcdir)/src/testing \
|
||||
-I$(top_srcdir)/src/third_party/mac_headers \
|
||||
-DHAVE_MACH_O_NLIST_H \
|
||||
$(PTHREAD_CFLAGS)
|
||||
src_common_mac_macho_reader_unittest_LDADD = $(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
|
||||
endif
|
||||
|
||||
src_tools_linux_md2core_minidump_2_core_unittest_SOURCES = \
|
||||
|
@ -1287,7 +1349,7 @@ EXTRA_DIST = \
|
|||
src/common/mac/HTTPMultipartUpload.h \
|
||||
src/common/mac/HTTPMultipartUpload.m \
|
||||
src/common/mac/dump_syms.h \
|
||||
src/common/mac/dump_syms.mm \
|
||||
src/common/mac/dump_syms.cc \
|
||||
src/common/mac/file_id.cc \
|
||||
src/common/mac/file_id.h \
|
||||
src/common/mac/macho_id.cc \
|
||||
|
@ -1339,7 +1401,7 @@ EXTRA_DIST = \
|
|||
src/tools/mac/crash_report/on_demand_symbol_supplier.h \
|
||||
src/tools/mac/crash_report/on_demand_symbol_supplier.mm \
|
||||
src/tools/mac/dump_syms/dump_syms.xcodeproj/project.pbxproj \
|
||||
src/tools/mac/dump_syms/dump_syms_tool.m \
|
||||
src/tools/mac/dump_syms/dump_syms_tool.cc \
|
||||
src/tools/mac/symupload/minidump_upload.m \
|
||||
src/tools/mac/symupload/symupload.m \
|
||||
src/tools/mac/symupload/symupload.xcodeproj/project.pbxproj \
|
||||
|
|
980
Makefile.in
980
Makefile.in
File diff suppressed because it is too large
Load diff
|
@ -120,7 +120,7 @@
|
|||
'mac/bootstrap_compat.h',
|
||||
'mac/byteswap.h',
|
||||
'mac/dump_syms.h',
|
||||
'mac/dump_syms.mm',
|
||||
'mac/dump_syms.cc',
|
||||
'mac/file_id.cc',
|
||||
'mac/file_id.h',
|
||||
'mac/GTMDefines.h',
|
||||
|
|
|
@ -30,27 +30,20 @@
|
|||
#include "common/mac/arch_utilities.h"
|
||||
|
||||
#include <mach-o/arch.h>
|
||||
#include <mach-o/fat.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifndef CPU_TYPE_ARM
|
||||
#define CPU_TYPE_ARM (static_cast<cpu_type_t>(12))
|
||||
#endif // CPU_TYPE_ARM
|
||||
|
||||
#ifndef CPU_SUBTYPE_ARM_V7
|
||||
#define CPU_SUBTYPE_ARM_V7 (static_cast<cpu_subtype_t>(9))
|
||||
#endif // CPU_SUBTYPE_ARM_V7
|
||||
|
||||
#ifndef CPU_SUBTYPE_ARM_V7S
|
||||
#define CPU_SUBTYPE_ARM_V7S (static_cast<cpu_subtype_t>(11))
|
||||
#endif // CPU_SUBTYPE_ARM_V7S
|
||||
|
||||
#ifndef CPU_TYPE_ARM64
|
||||
#define CPU_TYPE_ARM64 (static_cast<cpu_type_t>(16777228))
|
||||
#define CPU_TYPE_ARM64 (CPU_TYPE_ARM | CPU_ARCH_ABI64)
|
||||
#endif // CPU_TYPE_ARM64
|
||||
|
||||
#ifndef CPU_SUBTYPE_ARM64_ALL
|
||||
#define CPU_SUBTYPE_ARM64_ALL (static_cast<cpu_type_t>(0))
|
||||
#define CPU_SUBTYPE_ARM64_ALL (static_cast<cpu_subtype_t>(0))
|
||||
#endif // CPU_SUBTYPE_ARM64_ALL
|
||||
|
||||
namespace {
|
||||
|
@ -111,3 +104,108 @@ const NXArchInfo* BreakpadGetArchInfoFromCpuType(cpu_type_t cpu_type,
|
|||
}
|
||||
|
||||
} // namespace google_breakpad
|
||||
|
||||
#ifndef __APPLE__
|
||||
namespace {
|
||||
|
||||
enum Architecture {
|
||||
kArch_i386 = 0,
|
||||
kArch_x86_64,
|
||||
kArch_arm,
|
||||
kArch_arm64,
|
||||
kArch_ppc,
|
||||
// This must be last.
|
||||
kNumArchitectures
|
||||
};
|
||||
|
||||
// enum Architecture above and kKnownArchitectures below
|
||||
// must be kept in sync.
|
||||
const NXArchInfo kKnownArchitectures[] = {
|
||||
{
|
||||
"i386",
|
||||
CPU_TYPE_I386,
|
||||
CPU_SUBTYPE_I386_ALL,
|
||||
NX_LittleEndian,
|
||||
"Intel 80x86"
|
||||
},
|
||||
{
|
||||
"x86_64",
|
||||
CPU_TYPE_X86_64,
|
||||
CPU_SUBTYPE_X86_64_ALL,
|
||||
NX_LittleEndian,
|
||||
"Intel x86-64"
|
||||
},
|
||||
{
|
||||
"arm",
|
||||
CPU_TYPE_ARM,
|
||||
CPU_SUBTYPE_ARM_ALL,
|
||||
NX_LittleEndian,
|
||||
"ARM"
|
||||
},
|
||||
{
|
||||
"arm64",
|
||||
CPU_TYPE_ARM64,
|
||||
CPU_SUBTYPE_ARM64_ALL,
|
||||
NX_LittleEndian,
|
||||
"ARM64"
|
||||
},
|
||||
{
|
||||
"ppc",
|
||||
CPU_TYPE_POWERPC,
|
||||
CPU_SUBTYPE_POWERPC_ALL,
|
||||
NX_BigEndian,
|
||||
"PowerPC"
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
const NXArchInfo *NXGetLocalArchInfo(void) {
|
||||
Architecture arch;
|
||||
#if defined(__i386__)
|
||||
arch = kArch_i386;
|
||||
#elif defined(__x86_64__)
|
||||
arch = kArch_x86_64;
|
||||
#elif defined(__arm64)
|
||||
arch = kArch_arm64;
|
||||
#elif defined(__arm__)
|
||||
arch = kArch_arm;
|
||||
#elif defined(__powerpc__)
|
||||
arch = kArch_ppc;
|
||||
#else
|
||||
#error "Unsupported CPU architecture"
|
||||
#endif
|
||||
return &kKnownArchitectures[arch];
|
||||
}
|
||||
|
||||
const NXArchInfo *NXGetArchInfoFromName(const char *name) {
|
||||
for (int arch = 0; arch < kNumArchitectures; ++arch) {
|
||||
if (strcmp(name, kKnownArchitectures[arch].name)) {
|
||||
return &kKnownArchitectures[arch];
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
const NXArchInfo *NXGetArchInfoFromCpuType(cpu_type_t cputype,
|
||||
cpu_subtype_t cpusubtype) {
|
||||
for (int arch = 0; arch < kNumArchitectures; ++arch) {
|
||||
if (kKnownArchitectures[arch].cputype == cputype) {
|
||||
return &kKnownArchitectures[arch];
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct fat_arch *NXFindBestFatArch(cpu_type_t cputype,
|
||||
cpu_subtype_t cpusubtype,
|
||||
struct fat_arch *fat_archs,
|
||||
uint32_t nfat_archs) {
|
||||
for (uint32_t f = 0; f < nfat_archs; ++f) {
|
||||
if (fat_archs[f].cputype == cputype) {
|
||||
return &fat_archs[f];
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
#endif // !__APPLE__
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#ifndef COMMON_MAC_BYTESWAP_H_
|
||||
#define COMMON_MAC_BYTESWAP_H_
|
||||
|
||||
#ifdef __APPLE__
|
||||
#include <libkern/OSByteOrder.h>
|
||||
|
||||
static inline uint16_t ByteSwap(uint16_t v) { return OSSwapInt16(v); }
|
||||
|
@ -45,4 +46,28 @@ static inline int16_t ByteSwap(int16_t v) { return OSSwapInt16(v); }
|
|||
static inline int32_t ByteSwap(int32_t v) { return OSSwapInt32(v); }
|
||||
static inline int64_t ByteSwap(int64_t v) { return OSSwapInt64(v); }
|
||||
|
||||
#elif defined(__linux__)
|
||||
// For NXByteOrder
|
||||
#include <architecture/byte_order.h>
|
||||
#include <stdint.h>
|
||||
#include <endian.h>
|
||||
#include_next <byteswap.h>
|
||||
|
||||
static inline uint16_t ByteSwap(uint16_t v) { return bswap_16(v); }
|
||||
static inline uint32_t ByteSwap(uint32_t v) { return bswap_32(v); }
|
||||
static inline uint64_t ByteSwap(uint64_t v) { return bswap_64(v); }
|
||||
static inline int16_t ByteSwap(int16_t v) { return bswap_16(v); }
|
||||
static inline int32_t ByteSwap(int32_t v) { return bswap_32(v); }
|
||||
static inline int64_t ByteSwap(int64_t v) { return bswap_64(v); }
|
||||
|
||||
static inline NXByteOrder NXHostByteOrder() {
|
||||
#ifdef __LITTLE_ENDIAN
|
||||
return NX_LittleEndian;
|
||||
#else
|
||||
return NX_BigEndian;
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif // __APPLE__
|
||||
|
||||
#endif // COMMON_MAC_BYTESWAP_H_
|
||||
|
|
|
@ -36,10 +36,15 @@
|
|||
#include "common/mac/dump_syms.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <Foundation/Foundation.h>
|
||||
#include <dirent.h>
|
||||
#include <errno.h>
|
||||
#include <libgen.h>
|
||||
#include <mach-o/arch.h>
|
||||
#include <mach-o/fat.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <ostream>
|
||||
#include <string>
|
||||
|
@ -83,89 +88,105 @@ using std::pair;
|
|||
using std::string;
|
||||
using std::vector;
|
||||
|
||||
namespace {
|
||||
// Return a vector<string> with absolute paths to all the entries
|
||||
// in directory (excluding . and ..).
|
||||
vector<string> list_directory(const string& directory) {
|
||||
vector<string> entries;
|
||||
DIR* dir = opendir(directory.c_str());
|
||||
if (!dir) {
|
||||
return entries;
|
||||
}
|
||||
|
||||
string path = directory;
|
||||
if (path[path.length() - 1] != '/') {
|
||||
path += '/';
|
||||
}
|
||||
|
||||
struct dirent* entry = NULL;
|
||||
while ((entry = readdir(dir))) {
|
||||
if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0) {
|
||||
entries.push_back(path + entry->d_name);
|
||||
}
|
||||
}
|
||||
|
||||
closedir(dir);
|
||||
return entries;
|
||||
}
|
||||
}
|
||||
|
||||
namespace google_breakpad {
|
||||
|
||||
bool DumpSymbols::Read(NSString *filename) {
|
||||
if (![[NSFileManager defaultManager] fileExistsAtPath:filename]) {
|
||||
fprintf(stderr, "Object file does not exist: %s\n",
|
||||
[filename fileSystemRepresentation]);
|
||||
bool DumpSymbols::Read(const string &filename) {
|
||||
struct stat st;
|
||||
if (stat(filename.c_str(), &st) == -1) {
|
||||
fprintf(stderr, "Could not access object file %s: %s\n",
|
||||
filename.c_str(), strerror(errno));
|
||||
return false;
|
||||
}
|
||||
|
||||
input_pathname_ = [filename retain];
|
||||
input_pathname_ = filename;
|
||||
|
||||
// Does this filename refer to a dSYM bundle?
|
||||
NSBundle *bundle = [NSBundle bundleWithPath:input_pathname_];
|
||||
string contents_path = input_pathname_ + "/Contents/Resources/DWARF";
|
||||
if (S_ISDIR(st.st_mode) &&
|
||||
access(contents_path.c_str(), F_OK) == 0) {
|
||||
// If there's one file under Contents/Resources/DWARF then use that,
|
||||
// otherwise bail out.
|
||||
const vector<string> entries = list_directory(contents_path);
|
||||
if (entries.size() == 0) {
|
||||
fprintf(stderr, "Unable to find DWARF-bearing file in bundle: %s\n",
|
||||
input_pathname_.c_str());
|
||||
return false;
|
||||
}
|
||||
if (entries.size() > 1) {
|
||||
fprintf(stderr, "Too many DWARF files in bundle: %s\n",
|
||||
input_pathname_.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
if (bundle) {
|
||||
// Filenames referring to bundles usually have names of the form
|
||||
// "<basename>.dSYM"; however, if the user has specified a wrapper
|
||||
// suffix (the WRAPPER_SUFFIX and WRAPPER_EXTENSION build settings),
|
||||
// then the name may have the form "<basename>.<extension>.dSYM". In
|
||||
// either case, the resource name for the file containing the DWARF
|
||||
// info within the bundle is <basename>.
|
||||
//
|
||||
// Since there's no way to tell how much to strip off, remove one
|
||||
// extension at a time, and use the first one that
|
||||
// pathForResource:ofType:inDirectory likes.
|
||||
NSString *base_name = [input_pathname_ lastPathComponent];
|
||||
NSString *dwarf_resource;
|
||||
|
||||
do {
|
||||
NSString *new_base_name = [base_name stringByDeletingPathExtension];
|
||||
|
||||
// If stringByDeletingPathExtension returned the name unchanged, then
|
||||
// there's nothing more for us to strip off --- lose.
|
||||
if ([new_base_name isEqualToString:base_name]) {
|
||||
fprintf(stderr, "Unable to find DWARF-bearing file in bundle: %s\n",
|
||||
[input_pathname_ fileSystemRepresentation]);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Take the shortened result as our new base_name.
|
||||
base_name = new_base_name;
|
||||
|
||||
// Try to find a DWARF resource in the bundle under the new base_name.
|
||||
dwarf_resource = [bundle pathForResource:base_name
|
||||
ofType:nil inDirectory:@"DWARF"];
|
||||
} while (!dwarf_resource);
|
||||
|
||||
object_filename_ = [dwarf_resource retain];
|
||||
object_filename_ = entries[0];
|
||||
} else {
|
||||
object_filename_ = [input_pathname_ retain];
|
||||
object_filename_ = input_pathname_;
|
||||
}
|
||||
|
||||
// Read the file's contents into memory.
|
||||
//
|
||||
// The documentation for dataWithContentsOfMappedFile says:
|
||||
//
|
||||
// Because of file mapping restrictions, this method should only be
|
||||
// used if the file is guaranteed to exist for the duration of the
|
||||
// data object’s existence. It is generally safer to use the
|
||||
// dataWithContentsOfFile: method.
|
||||
//
|
||||
// I gather this means that OS X doesn't have (or at least, that method
|
||||
// doesn't use) a form of mapping like Linux's MAP_PRIVATE, where the
|
||||
// process appears to get its own copy of the data, and changes to the
|
||||
// file don't affect memory and vice versa).
|
||||
NSError *error;
|
||||
contents_ = [NSData dataWithContentsOfFile:object_filename_
|
||||
options:0
|
||||
error:&error];
|
||||
if (!contents_) {
|
||||
bool read_ok = true;
|
||||
string error;
|
||||
if (stat(object_filename_.c_str(), &st) != -1) {
|
||||
FILE* f = fopen(object_filename_.c_str(), "rb");
|
||||
if (f) {
|
||||
contents_.reset(new uint8_t[st.st_size]);
|
||||
off_t total = 0;
|
||||
while (total < st.st_size && !feof(f)) {
|
||||
size_t read = fread(&contents_[0] + total, 1, st.st_size - total, f);
|
||||
if (read == 0) {
|
||||
if (ferror(f)) {
|
||||
read_ok = false;
|
||||
error = strerror(errno);
|
||||
}
|
||||
break;
|
||||
}
|
||||
total += read;
|
||||
}
|
||||
fclose(f);
|
||||
} else {
|
||||
error = strerror(errno);
|
||||
}
|
||||
}
|
||||
|
||||
if (!read_ok) {
|
||||
fprintf(stderr, "Error reading object file: %s: %s\n",
|
||||
[object_filename_ fileSystemRepresentation],
|
||||
[[error localizedDescription] UTF8String]);
|
||||
object_filename_.c_str(),
|
||||
error.c_str());
|
||||
return false;
|
||||
}
|
||||
[contents_ retain];
|
||||
|
||||
// Get the list of object files present in the file.
|
||||
FatReader::Reporter fat_reporter([object_filename_
|
||||
fileSystemRepresentation]);
|
||||
FatReader::Reporter fat_reporter(object_filename_);
|
||||
FatReader fat_reader(&fat_reporter);
|
||||
if (!fat_reader.Read(reinterpret_cast<const uint8_t *>([contents_ bytes]),
|
||||
[contents_ length])) {
|
||||
if (!fat_reader.Read(&contents_[0],
|
||||
st.st_size)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -175,7 +196,7 @@ bool DumpSymbols::Read(NSString *filename) {
|
|||
fat_reader.object_files(&object_files_count);
|
||||
if (object_files_count == 0) {
|
||||
fprintf(stderr, "Fat binary file contains *no* architectures: %s\n",
|
||||
[object_filename_ fileSystemRepresentation]);
|
||||
object_filename_.c_str());
|
||||
return false;
|
||||
}
|
||||
object_files_.resize(object_files_count);
|
||||
|
@ -243,7 +264,8 @@ SuperFatArch* DumpSymbols::FindBestMatchForArchitecture(
|
|||
for (vector<SuperFatArch>::iterator it = object_files_.begin();
|
||||
it != object_files_.end();
|
||||
++it) {
|
||||
if (it->cputype == cpu_type && it->cpusubtype == cpu_subtype)
|
||||
if (static_cast<cpu_type_t>(it->cputype) == cpu_type &&
|
||||
static_cast<cpu_subtype_t>(it->cpusubtype) == cpu_subtype)
|
||||
return &*it;
|
||||
}
|
||||
|
||||
|
@ -258,13 +280,13 @@ SuperFatArch* DumpSymbols::FindBestMatchForArchitecture(
|
|||
}
|
||||
|
||||
string DumpSymbols::Identifier() {
|
||||
FileID file_id([object_filename_ fileSystemRepresentation]);
|
||||
FileID file_id(object_filename_.c_str());
|
||||
unsigned char identifier_bytes[16];
|
||||
cpu_type_t cpu_type = selected_object_file_->cputype;
|
||||
cpu_subtype_t cpu_subtype = selected_object_file_->cpusubtype;
|
||||
if (!file_id.MachoIdentifier(cpu_type, cpu_subtype, identifier_bytes)) {
|
||||
fprintf(stderr, "Unable to calculate UUID of mach-o binary %s!\n",
|
||||
[object_filename_ fileSystemRepresentation]);
|
||||
object_filename_.c_str());
|
||||
return "";
|
||||
}
|
||||
|
||||
|
@ -526,7 +548,7 @@ bool DumpSymbols::ReadSymbolData(Module** out_module) {
|
|||
" architecture, none of which match the current"
|
||||
" architecture; specify an architecture explicitly"
|
||||
" with '-a ARCH' to resolve the ambiguity\n",
|
||||
[object_filename_ fileSystemRepresentation]);
|
||||
object_filename_.c_str());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -546,14 +568,15 @@ bool DumpSymbols::ReadSymbolData(Module** out_module) {
|
|||
|
||||
// Produce a name to use in error messages that includes the
|
||||
// filename, and the architecture, if there is more than one.
|
||||
selected_object_name_ = [object_filename_ UTF8String];
|
||||
selected_object_name_ = object_filename_;
|
||||
if (object_files_.size() > 1) {
|
||||
selected_object_name_ += ", architecture ";
|
||||
selected_object_name_ + selected_arch_name;
|
||||
}
|
||||
|
||||
// Compute a module name, to appear in the MODULE record.
|
||||
NSString *module_name = [object_filename_ lastPathComponent];
|
||||
string module_name = object_filename_;
|
||||
module_name = basename(&module_name[0]);
|
||||
|
||||
// Choose an identifier string, to appear in the MODULE record.
|
||||
string identifier = Identifier();
|
||||
|
@ -562,7 +585,7 @@ bool DumpSymbols::ReadSymbolData(Module** out_module) {
|
|||
identifier += "0";
|
||||
|
||||
// Create a module to hold the debugging information.
|
||||
scoped_ptr<Module> module(new Module([module_name UTF8String],
|
||||
scoped_ptr<Module> module(new Module(module_name,
|
||||
"mac",
|
||||
selected_arch_name,
|
||||
identifier));
|
||||
|
@ -570,7 +593,7 @@ bool DumpSymbols::ReadSymbolData(Module** out_module) {
|
|||
// Parse the selected object file.
|
||||
mach_o::Reader::Reporter reporter(selected_object_name_);
|
||||
mach_o::Reader reader(&reporter);
|
||||
if (!reader.Read(reinterpret_cast<const uint8_t *>([contents_ bytes])
|
||||
if (!reader.Read(&contents_[0]
|
||||
+ selected_object_file_->offset,
|
||||
selected_object_file_->size,
|
||||
selected_object_file_->cputype,
|
|
@ -35,7 +35,6 @@
|
|||
// reading debugging information from Mach-O files and writing it out as a
|
||||
// Breakpad symbol file.
|
||||
|
||||
#include <Foundation/Foundation.h>
|
||||
#include <mach-o/loader.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -48,6 +47,7 @@
|
|||
#include "common/mac/macho_reader.h"
|
||||
#include "common/mac/super_fat_arch.h"
|
||||
#include "common/module.h"
|
||||
#include "common/scoped_ptr.h"
|
||||
#include "common/symbol_data.h"
|
||||
|
||||
namespace google_breakpad {
|
||||
|
@ -64,20 +64,13 @@ class DumpSymbols {
|
|||
selected_object_file_(),
|
||||
selected_object_name_() { }
|
||||
~DumpSymbols() {
|
||||
[input_pathname_ release];
|
||||
[object_filename_ release];
|
||||
[contents_ release];
|
||||
}
|
||||
|
||||
// Prepare to read debugging information from |filename|. |filename| may be
|
||||
// the name of a universal binary, a Mach-O file, or a dSYM bundle
|
||||
// containing either of the above. On success, return true; if there is a
|
||||
// problem reading |filename|, report it and return false.
|
||||
//
|
||||
// (This class uses NSString for filenames and related values,
|
||||
// because the Mac Foundation framework seems to support
|
||||
// filename-related operations more fully on NSString values.)
|
||||
bool Read(NSString *filename);
|
||||
bool Read(const std::string &filename);
|
||||
|
||||
// If this dumper's file includes an object file for |cpu_type| and
|
||||
// |cpu_subtype|, then select that object file for dumping, and return
|
||||
|
@ -163,16 +156,16 @@ class DumpSymbols {
|
|||
|
||||
// The name of the file or bundle whose symbols this will dump.
|
||||
// This is the path given to Read, for use in error messages.
|
||||
NSString *input_pathname_;
|
||||
std::string input_pathname_;
|
||||
|
||||
// The name of the file this DumpSymbols will actually read debugging
|
||||
// information from. Normally, this is the same as input_pathname_, but if
|
||||
// filename refers to a dSYM bundle, then this is the resource file
|
||||
// within that bundle.
|
||||
NSString *object_filename_;
|
||||
std::string object_filename_;
|
||||
|
||||
// The complete contents of object_filename_, mapped into memory.
|
||||
NSData *contents_;
|
||||
scoped_array<uint8_t> contents_;
|
||||
|
||||
// A vector of SuperFatArch structures describing the object files
|
||||
// object_filename_ contains. If object_filename_ refers to a fat binary,
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
// Author: Dan Waylonis
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
|
@ -45,7 +46,7 @@ using MacFileUtilities::MachoID;
|
|||
namespace google_breakpad {
|
||||
|
||||
FileID::FileID(const char *path) {
|
||||
strlcpy(path_, path, sizeof(path_));
|
||||
snprintf(path_, sizeof(path_), "%s", path);
|
||||
}
|
||||
|
||||
bool FileID::FileIdentifier(unsigned char identifier[16]) {
|
||||
|
|
|
@ -33,17 +33,15 @@
|
|||
//
|
||||
// Author: Dan Waylonis
|
||||
|
||||
extern "C" { // necessary for Leopard
|
||||
#include <fcntl.h>
|
||||
#include <mach-o/loader.h>
|
||||
#include <mach-o/swap.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
}
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <mach-o/loader.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "common/mac/macho_id.h"
|
||||
#include "common/mac/macho_walker.h"
|
||||
|
@ -61,7 +59,7 @@ MachoID::MachoID(const char *path)
|
|||
crc_(0),
|
||||
md5_context_(),
|
||||
update_function_(NULL) {
|
||||
strlcpy(path_, path, sizeof(path_));
|
||||
snprintf(path_, sizeof(path_), "%s", path);
|
||||
}
|
||||
|
||||
MachoID::MachoID(const char *path, void *memory, size_t size)
|
||||
|
@ -70,7 +68,7 @@ MachoID::MachoID(const char *path, void *memory, size_t size)
|
|||
crc_(0),
|
||||
md5_context_(),
|
||||
update_function_(NULL) {
|
||||
strlcpy(path_, path, sizeof(path_));
|
||||
snprintf(path_, sizeof(path_), "%s", path);
|
||||
}
|
||||
|
||||
MachoID::~MachoID() {
|
||||
|
@ -261,7 +259,7 @@ bool MachoID::WalkerCB(MachoWalker *walker, load_command *cmd, off_t offset,
|
|||
return false;
|
||||
|
||||
if (swap)
|
||||
swap_segment_command(&seg, NXHostByteOrder());
|
||||
breakpad_swap_segment_command(&seg);
|
||||
|
||||
struct mach_header_64 header;
|
||||
off_t header_offset;
|
||||
|
@ -278,7 +276,7 @@ bool MachoID::WalkerCB(MachoWalker *walker, load_command *cmd, off_t offset,
|
|||
return false;
|
||||
|
||||
if (swap)
|
||||
swap_section(&sec, 1, NXHostByteOrder());
|
||||
breakpad_swap_section(&sec, 1);
|
||||
|
||||
// sections of type S_ZEROFILL are "virtual" and contain no data
|
||||
// in the file itself
|
||||
|
@ -294,7 +292,7 @@ bool MachoID::WalkerCB(MachoWalker *walker, load_command *cmd, off_t offset,
|
|||
return false;
|
||||
|
||||
if (swap)
|
||||
breakpad_swap_segment_command_64(&seg64, NXHostByteOrder());
|
||||
breakpad_swap_segment_command_64(&seg64);
|
||||
|
||||
struct mach_header_64 header;
|
||||
off_t header_offset;
|
||||
|
@ -311,7 +309,7 @@ bool MachoID::WalkerCB(MachoWalker *walker, load_command *cmd, off_t offset,
|
|||
return false;
|
||||
|
||||
if (swap)
|
||||
breakpad_swap_section_64(&sec64, 1, NXHostByteOrder());
|
||||
breakpad_swap_section_64(&sec64, 1);
|
||||
|
||||
// sections of type S_ZEROFILL are "virtual" and contain no data
|
||||
// in the file itself
|
||||
|
@ -340,7 +338,7 @@ bool MachoID::UUIDWalkerCB(MachoWalker *walker, load_command *cmd, off_t offset,
|
|||
return false;
|
||||
|
||||
if (swap)
|
||||
breakpad_swap_uuid_command(uuid_cmd, NXHostByteOrder());
|
||||
breakpad_swap_uuid_command(uuid_cmd);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -359,7 +357,7 @@ bool MachoID::IDWalkerCB(MachoWalker *walker, load_command *cmd, off_t offset,
|
|||
return false;
|
||||
|
||||
if (swap)
|
||||
swap_dylib_command(dylib_cmd, NXHostByteOrder());
|
||||
breakpad_swap_dylib_command(dylib_cmd);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -196,7 +196,7 @@ struct FatReaderFixture {
|
|||
FatReaderFixture()
|
||||
: fat(kBigEndian),
|
||||
reporter("reporter filename"),
|
||||
reader(&reporter), object_files(), object_files_size() {
|
||||
reader(&reporter), object_files() {
|
||||
EXPECT_CALL(reporter, BadHeader()).Times(0);
|
||||
EXPECT_CALL(reporter, TooShort()).Times(0);
|
||||
|
||||
|
@ -224,7 +224,12 @@ struct FatReaderFixture {
|
|||
fat_bytes = reinterpret_cast<const uint8_t *>(contents.data());
|
||||
if (expect_parse_success) {
|
||||
EXPECT_TRUE(reader.Read(fat_bytes, contents.size()));
|
||||
object_files = reader.object_files(&object_files_size);
|
||||
size_t fat_files_count;
|
||||
const SuperFatArch* fat_files = reader.object_files(&fat_files_count);
|
||||
object_files.resize(fat_files_count);
|
||||
for (size_t i = 0; i < fat_files_count; ++i) {
|
||||
EXPECT_TRUE(fat_files[i].ConvertToFatArch(&object_files[i]));
|
||||
}
|
||||
}
|
||||
else
|
||||
EXPECT_FALSE(reader.Read(fat_bytes, contents.size()));
|
||||
|
@ -234,8 +239,7 @@ struct FatReaderFixture {
|
|||
FatReader reader;
|
||||
string contents;
|
||||
const uint8_t *fat_bytes;
|
||||
const struct fat_arch *object_files;
|
||||
size_t object_files_size;
|
||||
vector<struct fat_arch> object_files;
|
||||
};
|
||||
|
||||
class FatReaderTest: public FatReaderFixture, public Test { };
|
||||
|
@ -289,7 +293,7 @@ TEST_F(FatReaderTest, NoObjectFiles) {
|
|||
.B32(0xcafebabe) // magic number
|
||||
.B32(0); // number of architectures
|
||||
ReadFat();
|
||||
EXPECT_EQ(0U, object_files_size);
|
||||
EXPECT_EQ(0U, object_files.size());
|
||||
}
|
||||
|
||||
TEST_F(FatReaderTest, OneObjectFile) {
|
||||
|
@ -304,7 +308,7 @@ TEST_F(FatReaderTest, OneObjectFile) {
|
|||
.Mark(&obj1_offset)
|
||||
.Append(0x42, '*'); // dummy contents
|
||||
ReadFat();
|
||||
ASSERT_EQ(1U, object_files_size);
|
||||
ASSERT_EQ(1U, object_files.size());
|
||||
EXPECT_EQ(0x5e3a6e91, object_files[0].cputype);
|
||||
EXPECT_EQ(0x52ccd852, object_files[0].cpusubtype);
|
||||
EXPECT_EQ(obj1_offset.Value(), object_files[0].offset);
|
||||
|
@ -334,7 +338,7 @@ TEST_F(FatReaderTest, ThreeObjectFiles) {
|
|||
|
||||
ReadFat();
|
||||
|
||||
ASSERT_EQ(3U, object_files_size);
|
||||
ASSERT_EQ(3U, object_files.size());
|
||||
|
||||
// First object file.
|
||||
EXPECT_EQ(0x0cb92c30, object_files[0].cputype);
|
||||
|
@ -373,7 +377,7 @@ TEST_F(FatReaderTest, BigEndianMachO32) {
|
|||
|
||||
// FatReader should treat a Mach-O file as if it were a fat binary file
|
||||
// containing one object file --- the whole thing.
|
||||
ASSERT_EQ(1U, object_files_size);
|
||||
ASSERT_EQ(1U, object_files.size());
|
||||
EXPECT_EQ(0x1a9d0518, object_files[0].cputype);
|
||||
EXPECT_EQ(0x1b779357, object_files[0].cpusubtype);
|
||||
EXPECT_EQ(0U, object_files[0].offset);
|
||||
|
@ -395,7 +399,7 @@ TEST_F(FatReaderTest, BigEndianMachO64) {
|
|||
|
||||
// FatReader should treat a Mach-O file as if it were a fat binary file
|
||||
// containing one object file --- the whole thing.
|
||||
ASSERT_EQ(1U, object_files_size);
|
||||
ASSERT_EQ(1U, object_files.size());
|
||||
EXPECT_EQ(0x5aff8487, object_files[0].cputype);
|
||||
EXPECT_EQ(0x4c6a57f7, object_files[0].cpusubtype);
|
||||
EXPECT_EQ(0U, object_files[0].offset);
|
||||
|
@ -417,7 +421,7 @@ TEST_F(FatReaderTest, LittleEndianMachO32) {
|
|||
|
||||
// FatReader should treat a Mach-O file as if it were a fat binary file
|
||||
// containing one object file --- the whole thing.
|
||||
ASSERT_EQ(1U, object_files_size);
|
||||
ASSERT_EQ(1U, object_files.size());
|
||||
EXPECT_EQ(0x1a9d0518, object_files[0].cputype);
|
||||
EXPECT_EQ(0x1b779357, object_files[0].cpusubtype);
|
||||
EXPECT_EQ(0U, object_files[0].offset);
|
||||
|
@ -439,7 +443,7 @@ TEST_F(FatReaderTest, LittleEndianMachO64) {
|
|||
|
||||
// FatReader should treat a Mach-O file as if it were a fat binary file
|
||||
// containing one object file --- the whole thing.
|
||||
ASSERT_EQ(1U, object_files_size);
|
||||
ASSERT_EQ(1U, object_files.size());
|
||||
EXPECT_EQ(0x5aff8487, object_files[0].cputype);
|
||||
EXPECT_EQ(0x4c6a57f7, object_files[0].cpusubtype);
|
||||
EXPECT_EQ(0U, object_files[0].offset);
|
||||
|
|
|
@ -34,16 +34,44 @@
|
|||
#include "common/mac/byteswap.h"
|
||||
#include "common/mac/macho_utilities.h"
|
||||
|
||||
void breakpad_swap_uuid_command(struct breakpad_uuid_command *uc,
|
||||
enum NXByteOrder target_byte_order)
|
||||
{
|
||||
#include <mach-o/fat.h>
|
||||
#include <mach-o/loader.h>
|
||||
|
||||
void breakpad_swap_uuid_command(struct breakpad_uuid_command *uc) {
|
||||
uc->cmd = ByteSwap(uc->cmd);
|
||||
uc->cmdsize = ByteSwap(uc->cmdsize);
|
||||
}
|
||||
|
||||
void breakpad_swap_segment_command_64(struct segment_command_64 *sg,
|
||||
enum NXByteOrder target_byte_order)
|
||||
{
|
||||
void breakpad_swap_load_command(struct load_command *lc) {
|
||||
lc->cmd = ByteSwap(lc->cmd);
|
||||
lc->cmdsize = ByteSwap(lc->cmdsize);
|
||||
}
|
||||
|
||||
void breakpad_swap_dylib_command(struct dylib_command *dc) {
|
||||
dc->cmd = ByteSwap(dc->cmd);
|
||||
dc->cmdsize = ByteSwap(dc->cmdsize);
|
||||
|
||||
dc->dylib.name.offset = ByteSwap(dc->dylib.name.offset);
|
||||
dc->dylib.timestamp = ByteSwap(dc->dylib.timestamp);
|
||||
dc->dylib.current_version = ByteSwap(dc->dylib.current_version);
|
||||
dc->dylib.compatibility_version = ByteSwap(dc->dylib.compatibility_version);
|
||||
}
|
||||
|
||||
void breakpad_swap_segment_command(struct segment_command *sc) {
|
||||
sc->cmd = ByteSwap(sc->cmd);
|
||||
sc->cmdsize = ByteSwap(sc->cmdsize);
|
||||
|
||||
sc->vmaddr = ByteSwap(sc->vmaddr);
|
||||
sc->vmsize = ByteSwap(sc->vmsize);
|
||||
sc->fileoff = ByteSwap(sc->fileoff);
|
||||
sc->filesize = ByteSwap(sc->filesize);
|
||||
sc->maxprot = ByteSwap(sc->maxprot);
|
||||
sc->initprot = ByteSwap(sc->initprot);
|
||||
sc->nsects = ByteSwap(sc->nsects);
|
||||
sc->flags = ByteSwap(sc->flags);
|
||||
}
|
||||
|
||||
void breakpad_swap_segment_command_64(struct segment_command_64 *sg) {
|
||||
sg->cmd = ByteSwap(sg->cmd);
|
||||
sg->cmdsize = ByteSwap(sg->cmdsize);
|
||||
|
||||
|
@ -58,9 +86,32 @@ void breakpad_swap_segment_command_64(struct segment_command_64 *sg,
|
|||
sg->flags = ByteSwap(sg->flags);
|
||||
}
|
||||
|
||||
void breakpad_swap_mach_header_64(struct mach_header_64 *mh,
|
||||
enum NXByteOrder target_byte_order)
|
||||
{
|
||||
void breakpad_swap_fat_header(struct fat_header *fh) {
|
||||
fh->magic = ByteSwap(fh->magic);
|
||||
fh->nfat_arch = ByteSwap(fh->nfat_arch);
|
||||
}
|
||||
|
||||
void breakpad_swap_fat_arch(struct fat_arch *fa, uint32_t narchs) {
|
||||
for (uint32_t i = 0; i < narchs; ++i) {
|
||||
fa[i].cputype = ByteSwap(fa[i].cputype);
|
||||
fa[i].cpusubtype = ByteSwap(fa[i].cpusubtype);
|
||||
fa[i].offset = ByteSwap(fa[i].offset);
|
||||
fa[i].size = ByteSwap(fa[i].size);
|
||||
fa[i].align = ByteSwap(fa[i].align);
|
||||
}
|
||||
}
|
||||
|
||||
void breakpad_swap_mach_header(struct mach_header *mh) {
|
||||
mh->magic = ByteSwap(mh->magic);
|
||||
mh->cputype = ByteSwap(mh->cputype);
|
||||
mh->cpusubtype = ByteSwap(mh->cpusubtype);
|
||||
mh->filetype = ByteSwap(mh->filetype);
|
||||
mh->ncmds = ByteSwap(mh->ncmds);
|
||||
mh->sizeofcmds = ByteSwap(mh->sizeofcmds);
|
||||
mh->flags = ByteSwap(mh->flags);
|
||||
}
|
||||
|
||||
void breakpad_swap_mach_header_64(struct mach_header_64 *mh) {
|
||||
mh->magic = ByteSwap(mh->magic);
|
||||
mh->cputype = ByteSwap(mh->cputype);
|
||||
mh->cpusubtype = ByteSwap(mh->cpusubtype);
|
||||
|
@ -71,10 +122,24 @@ void breakpad_swap_mach_header_64(struct mach_header_64 *mh,
|
|||
mh->reserved = ByteSwap(mh->reserved);
|
||||
}
|
||||
|
||||
void breakpad_swap_section_64(struct section_64 *s,
|
||||
uint32_t nsects,
|
||||
enum NXByteOrder target_byte_order)
|
||||
{
|
||||
void breakpad_swap_section(struct section *s,
|
||||
uint32_t nsects) {
|
||||
for (uint32_t i = 0; i < nsects; i++) {
|
||||
s[i].addr = ByteSwap(s[i].addr);
|
||||
s[i].size = ByteSwap(s[i].size);
|
||||
|
||||
s[i].offset = ByteSwap(s[i].offset);
|
||||
s[i].align = ByteSwap(s[i].align);
|
||||
s[i].reloff = ByteSwap(s[i].reloff);
|
||||
s[i].nreloc = ByteSwap(s[i].nreloc);
|
||||
s[i].flags = ByteSwap(s[i].flags);
|
||||
s[i].reserved1 = ByteSwap(s[i].reserved1);
|
||||
s[i].reserved2 = ByteSwap(s[i].reserved2);
|
||||
}
|
||||
}
|
||||
|
||||
void breakpad_swap_section_64(struct section_64 *s,
|
||||
uint32_t nsects) {
|
||||
for (uint32_t i = 0; i < nsects; i++) {
|
||||
s[i].addr = ByteSwap(s[i].addr);
|
||||
s[i].size = ByteSwap(s[i].size);
|
||||
|
|
|
@ -62,23 +62,34 @@ struct breakpad_uuid_command {
|
|||
uint8_t uuid[16]; /* the 128-bit uuid */
|
||||
};
|
||||
|
||||
void breakpad_swap_uuid_command(struct breakpad_uuid_command *uc,
|
||||
enum NXByteOrder target_byte_order);
|
||||
void breakpad_swap_uuid_command(struct breakpad_uuid_command *uc);
|
||||
|
||||
void breakpad_swap_load_command(struct load_command *lc);
|
||||
|
||||
void breakpad_swap_dylib_command(struct dylib_command *dc);
|
||||
|
||||
// Older SDKs defines thread_state_data_t as an int[] instead
|
||||
// of the natural_t[] it should be.
|
||||
typedef natural_t breakpad_thread_state_data_t[THREAD_STATE_MAX];
|
||||
|
||||
void breakpad_swap_segment_command(struct segment_command *sc);
|
||||
|
||||
// The 64-bit swap routines were added during the 10.4 series, their
|
||||
// presence isn't guaranteed.
|
||||
void breakpad_swap_segment_command_64(struct segment_command_64 *sg,
|
||||
enum NXByteOrder target_byte_order);
|
||||
void breakpad_swap_segment_command_64(struct segment_command_64 *sg);
|
||||
|
||||
void breakpad_swap_mach_header_64(struct mach_header_64 *mh,
|
||||
enum NXByteOrder target_byte_order);
|
||||
void breakpad_swap_fat_header(struct fat_header *fh);
|
||||
|
||||
void breakpad_swap_fat_arch(struct fat_arch *fa, uint32_t narchs);
|
||||
|
||||
void breakpad_swap_mach_header(struct mach_header *mh);
|
||||
|
||||
void breakpad_swap_mach_header_64(struct mach_header_64 *mh);
|
||||
|
||||
void breakpad_swap_section(struct section *s,
|
||||
uint32_t nsects);
|
||||
|
||||
void breakpad_swap_section_64(struct section_64 *s,
|
||||
uint32_t nsects,
|
||||
enum NXByteOrder target_byte_order);
|
||||
uint32_t nsects);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -33,15 +33,13 @@
|
|||
//
|
||||
// Author: Dan Waylonis
|
||||
|
||||
extern "C" { // necessary for Leopard
|
||||
#include <assert.h>
|
||||
#include <fcntl.h>
|
||||
#include <mach-o/arch.h>
|
||||
#include <mach-o/loader.h>
|
||||
#include <mach-o/swap.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
}
|
||||
#include <assert.h>
|
||||
#include <fcntl.h>
|
||||
#include <mach-o/arch.h>
|
||||
#include <mach-o/fat.h>
|
||||
#include <mach-o/loader.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "common/mac/byteswap.h"
|
||||
#include "common/mac/macho_walker.h"
|
||||
|
@ -156,7 +154,7 @@ bool MachoWalker::FindHeader(cpu_type_t cpu_type,
|
|||
return false;
|
||||
|
||||
if (magic == MH_CIGAM || magic == MH_CIGAM_64)
|
||||
swap_mach_header(&header, NXHostByteOrder());
|
||||
breakpad_swap_mach_header(&header);
|
||||
|
||||
if (cpu_type != header.cputype ||
|
||||
(cpu_subtype != CPU_SUBTYPE_MULTIPLE &&
|
||||
|
@ -174,7 +172,7 @@ bool MachoWalker::FindHeader(cpu_type_t cpu_type,
|
|||
return false;
|
||||
|
||||
if (NXHostByteOrder() != NX_BigEndian)
|
||||
swap_fat_header(&fat, NXHostByteOrder());
|
||||
breakpad_swap_fat_header(&fat);
|
||||
|
||||
offset += sizeof(fat);
|
||||
|
||||
|
@ -185,7 +183,7 @@ bool MachoWalker::FindHeader(cpu_type_t cpu_type,
|
|||
return false;
|
||||
|
||||
if (NXHostByteOrder() != NX_BigEndian)
|
||||
swap_fat_arch(&arch, 1, NXHostByteOrder());
|
||||
breakpad_swap_fat_arch(&arch, 1);
|
||||
|
||||
if (arch.cputype == cpu_type &&
|
||||
(cpu_subtype == CPU_SUBTYPE_MULTIPLE ||
|
||||
|
@ -208,7 +206,7 @@ bool MachoWalker::WalkHeaderAtOffset(off_t offset) {
|
|||
|
||||
bool swap = (header.magic == MH_CIGAM);
|
||||
if (swap)
|
||||
swap_mach_header(&header, NXHostByteOrder());
|
||||
breakpad_swap_mach_header(&header);
|
||||
|
||||
// Copy the data into the mach_header_64 structure. Since the 32-bit and
|
||||
// 64-bit only differ in the last field (reserved), this is safe to do.
|
||||
|
@ -234,7 +232,7 @@ bool MachoWalker::WalkHeader64AtOffset(off_t offset) {
|
|||
|
||||
bool swap = (header.magic == MH_CIGAM_64);
|
||||
if (swap)
|
||||
breakpad_swap_mach_header_64(&header, NXHostByteOrder());
|
||||
breakpad_swap_mach_header_64(&header);
|
||||
|
||||
current_header_ = &header;
|
||||
current_header_size_ = sizeof(header);
|
||||
|
@ -255,7 +253,7 @@ bool MachoWalker::WalkHeaderCore(off_t offset, uint32_t number_of_commands,
|
|||
return false;
|
||||
|
||||
if (swap)
|
||||
swap_load_command(&cmd, NXHostByteOrder());
|
||||
breakpad_swap_load_command(&cmd);
|
||||
|
||||
// Call the user callback
|
||||
if (callback_ && !callback_(this, &cmd, offset, swap, callback_context_))
|
||||
|
|
|
@ -53,11 +53,10 @@
|
|||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_A_OUT_H
|
||||
#include <a.out.h>
|
||||
#endif
|
||||
#ifdef HAVE_MACH_O_NLIST_H
|
||||
#include <mach-o/nlist.h>
|
||||
#elif defined(HAVE_A_OUT_H)
|
||||
#include <a.out.h>
|
||||
#endif
|
||||
|
||||
#include <string>
|
||||
|
|
2
src/third_party/mac_headers/README
vendored
Normal file
2
src/third_party/mac_headers/README
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
These headers were copied from the Mac OS X 10.7 SDK to enable building
|
||||
the Mac dump_syms code that processes Mach-O files on Linux.
|
45
src/third_party/mac_headers/architecture/byte_order.h
vendored
Normal file
45
src/third_party/mac_headers/architecture/byte_order.h
vendored
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Copyright (c) 1999-2008 Apple Computer, Inc. All rights reserved.
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_START@
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this
|
||||
* file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_END@
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 1992 NeXT Computer, Inc.
|
||||
*
|
||||
* Byte ordering conversion.
|
||||
*
|
||||
*/
|
||||
/* This file mostly left blank */
|
||||
|
||||
#ifndef _ARCHITECTURE_BYTE_ORDER_H_
|
||||
#define _ARCHITECTURE_BYTE_ORDER_H_
|
||||
|
||||
/*
|
||||
* Identify the byte order
|
||||
* of the current host.
|
||||
*/
|
||||
|
||||
enum NXByteOrder {
|
||||
NX_UnknownByteOrder,
|
||||
NX_LittleEndian,
|
||||
NX_BigEndian
|
||||
};
|
||||
|
||||
#endif /* _ARCHITECTURE_BYTE_ORDER_H_ */
|
34
src/third_party/mac_headers/i386/_types.h
vendored
Normal file
34
src/third_party/mac_headers/i386/_types.h
vendored
Normal file
|
@ -0,0 +1,34 @@
|
|||
/*
|
||||
* Copyright (c) 2000-2003 Apple Computer, Inc. All rights reserved.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. The rights granted to you under the License
|
||||
* may not be used to create, or enable the creation or redistribution of,
|
||||
* unlawful or unlicensed copies of an Apple operating system, or to
|
||||
* circumvent, violate, or enable the circumvention or violation of, any
|
||||
* terms of an Apple operating system software license agreement.
|
||||
*
|
||||
* Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@
|
||||
*/
|
||||
#ifndef _BSD_I386__TYPES_H_
|
||||
#define _BSD_I386__TYPES_H_
|
||||
|
||||
typedef long __darwin_intptr_t;
|
||||
typedef unsigned int __darwin_natural_t;
|
||||
|
||||
#endif /* _BSD_I386__TYPES_H_ */
|
105
src/third_party/mac_headers/mach-o/arch.h
vendored
Normal file
105
src/third_party/mac_headers/mach-o/arch.h
vendored
Normal file
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
* Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_START@
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this
|
||||
* file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_END@
|
||||
*/
|
||||
#ifndef _MACH_O_ARCH_H_
|
||||
#define _MACH_O_ARCH_H_
|
||||
/*
|
||||
* Copyright (c) 1997 Apple Computer, Inc.
|
||||
*
|
||||
* Functions that deal with information about architectures.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <mach/machine.h>
|
||||
#include <architecture/byte_order.h>
|
||||
|
||||
/* The NXArchInfo structs contain the architectures symbolic name
|
||||
* (such as "ppc"), its CPU type and CPU subtype as defined in
|
||||
* mach/machine.h, the byte order for the architecture, and a
|
||||
* describing string (such as "PowerPC").
|
||||
* There will both be entries for specific CPUs (such as ppc604e) as
|
||||
* well as generic "family" entries (such as ppc).
|
||||
*/
|
||||
typedef struct {
|
||||
const char *name;
|
||||
cpu_type_t cputype;
|
||||
cpu_subtype_t cpusubtype;
|
||||
enum NXByteOrder byteorder;
|
||||
const char *description;
|
||||
} NXArchInfo;
|
||||
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/* NXGetAllArchInfos() returns a pointer to an array of all known
|
||||
* NXArchInfo structures. The last NXArchInfo is marked by a NULL name.
|
||||
*/
|
||||
extern const NXArchInfo *NXGetAllArchInfos(void);
|
||||
|
||||
/* NXGetLocalArchInfo() returns the NXArchInfo for the local host, or NULL
|
||||
* if none is known.
|
||||
*/
|
||||
extern const NXArchInfo *NXGetLocalArchInfo(void);
|
||||
|
||||
/* NXGetArchInfoFromName() and NXGetArchInfoFromCpuType() return the
|
||||
* NXArchInfo from the architecture's name or cputype/cpusubtype
|
||||
* combination. A cpusubtype of CPU_SUBTYPE_MULTIPLE can be used
|
||||
* to request the most general NXArchInfo known for the given cputype.
|
||||
* NULL is returned if no matching NXArchInfo can be found.
|
||||
*/
|
||||
extern const NXArchInfo *NXGetArchInfoFromName(const char *name);
|
||||
extern const NXArchInfo *NXGetArchInfoFromCpuType(cpu_type_t cputype,
|
||||
cpu_subtype_t cpusubtype);
|
||||
|
||||
/* NXFindBestFatArch() is passed a cputype and cpusubtype and a set of
|
||||
* fat_arch structs and selects the best one that matches (if any) and returns
|
||||
* a pointer to that fat_arch struct (or NULL). The fat_arch structs must be
|
||||
* in the host byte order and correct such that the fat_archs really points to
|
||||
* enough memory for nfat_arch structs. It is possible that this routine could
|
||||
* fail if new cputypes or cpusubtypes are added and an old version of this
|
||||
* routine is used. But if there is an exact match between the cputype and
|
||||
* cpusubtype and one of the fat_arch structs this routine will always succeed.
|
||||
*/
|
||||
extern struct fat_arch *NXFindBestFatArch(cpu_type_t cputype,
|
||||
cpu_subtype_t cpusubtype,
|
||||
struct fat_arch *fat_archs,
|
||||
uint32_t nfat_archs);
|
||||
|
||||
/* NXCombineCpuSubtypes() returns the resulting cpusubtype when combining two
|
||||
* different cpusubtypes for the specified cputype. If the two cpusubtypes
|
||||
* can't be combined (the specific subtypes are mutually exclusive) -1 is
|
||||
* returned indicating it is an error to combine them. This can also fail and
|
||||
* return -1 if new cputypes or cpusubtypes are added and an old version of
|
||||
* this routine is used. But if the cpusubtypes are the same they can always
|
||||
* be combined and this routine will return the cpusubtype pass in.
|
||||
*/
|
||||
extern cpu_subtype_t NXCombineCpuSubtypes(cpu_type_t cputype,
|
||||
cpu_subtype_t cpusubtype1,
|
||||
cpu_subtype_t cpusubtype2);
|
||||
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
#endif /* _MACH_O_ARCH_H_ */
|
64
src/third_party/mac_headers/mach-o/fat.h
vendored
Normal file
64
src/third_party/mac_headers/mach-o/fat.h
vendored
Normal file
|
@ -0,0 +1,64 @@
|
|||
/*
|
||||
* Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_START@
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this
|
||||
* file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_END@
|
||||
*/
|
||||
#ifndef _MACH_O_FAT_H_
|
||||
#define _MACH_O_FAT_H_
|
||||
/*
|
||||
* This header file describes the structures of the file format for "fat"
|
||||
* architecture specific file (wrapper design). At the begining of the file
|
||||
* there is one fat_header structure followed by a number of fat_arch
|
||||
* structures. For each architecture in the file, specified by a pair of
|
||||
* cputype and cpusubtype, the fat_header describes the file offset, file
|
||||
* size and alignment in the file of the architecture specific member.
|
||||
* The padded bytes in the file to place each member on it's specific alignment
|
||||
* are defined to be read as zeros and can be left as "holes" if the file system
|
||||
* can support them as long as they read as zeros.
|
||||
*
|
||||
* All structures defined here are always written and read to/from disk
|
||||
* in big-endian order.
|
||||
*/
|
||||
|
||||
/*
|
||||
* <mach/machine.h> is needed here for the cpu_type_t and cpu_subtype_t types
|
||||
* and contains the constants for the possible values of these types.
|
||||
*/
|
||||
#include <stdint.h>
|
||||
#include <mach/machine.h>
|
||||
#include <architecture/byte_order.h>
|
||||
|
||||
#define FAT_MAGIC 0xcafebabe
|
||||
#define FAT_CIGAM 0xbebafeca /* NXSwapLong(FAT_MAGIC) */
|
||||
|
||||
struct fat_header {
|
||||
uint32_t magic; /* FAT_MAGIC */
|
||||
uint32_t nfat_arch; /* number of structs that follow */
|
||||
};
|
||||
|
||||
struct fat_arch {
|
||||
cpu_type_t cputype; /* cpu specifier (int) */
|
||||
cpu_subtype_t cpusubtype; /* machine specifier (int) */
|
||||
uint32_t offset; /* file offset to this object file */
|
||||
uint32_t size; /* size of this object file */
|
||||
uint32_t align; /* alignment as a power of 2 */
|
||||
};
|
||||
|
||||
#endif /* _MACH_O_FAT_H_ */
|
1402
src/third_party/mac_headers/mach-o/loader.h
vendored
Normal file
1402
src/third_party/mac_headers/mach-o/loader.h
vendored
Normal file
File diff suppressed because it is too large
Load diff
312
src/third_party/mac_headers/mach-o/nlist.h
vendored
Normal file
312
src/third_party/mac_headers/mach-o/nlist.h
vendored
Normal file
|
@ -0,0 +1,312 @@
|
|||
/*
|
||||
* Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_START@
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this
|
||||
* file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_END@
|
||||
*/
|
||||
#ifndef _MACHO_NLIST_H_
|
||||
#define _MACHO_NLIST_H_
|
||||
/* $NetBSD: nlist.h,v 1.5 1994/10/26 00:56:11 cgd Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1991, 1993
|
||||
* The Regents of the University of California. All rights reserved.
|
||||
* (c) UNIX System Laboratories, Inc.
|
||||
* All or some portions of this file are derived from material licensed
|
||||
* to the University of California by American Telephone and Telegraph
|
||||
* Co. or Unix System Laboratories, Inc. and are reproduced herein with
|
||||
* the permission of UNIX System Laboratories, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* 3. All advertising materials mentioning features or use of this software
|
||||
* must display the following acknowledgement:
|
||||
* This product includes software developed by the University of
|
||||
* California, Berkeley and its contributors.
|
||||
* 4. Neither the name of the University nor the names of its contributors
|
||||
* may be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)nlist.h 8.2 (Berkeley) 1/21/94
|
||||
*/
|
||||
#include <stdint.h>
|
||||
|
||||
/*
|
||||
* Format of a symbol table entry of a Mach-O file for 32-bit architectures.
|
||||
* Modified from the BSD format. The modifications from the original format
|
||||
* were changing n_other (an unused field) to n_sect and the addition of the
|
||||
* N_SECT type. These modifications are required to support symbols in a larger
|
||||
* number of sections not just the three sections (text, data and bss) in a BSD
|
||||
* file.
|
||||
*/
|
||||
struct nlist {
|
||||
union {
|
||||
#ifndef __LP64__
|
||||
char *n_name; /* for use when in-core */
|
||||
#endif
|
||||
int32_t n_strx; /* index into the string table */
|
||||
} n_un;
|
||||
uint8_t n_type; /* type flag, see below */
|
||||
uint8_t n_sect; /* section number or NO_SECT */
|
||||
int16_t n_desc; /* see <mach-o/stab.h> */
|
||||
uint32_t n_value; /* value of this symbol (or stab offset) */
|
||||
};
|
||||
|
||||
/*
|
||||
* This is the symbol table entry structure for 64-bit architectures.
|
||||
*/
|
||||
struct nlist_64 {
|
||||
union {
|
||||
uint32_t n_strx; /* index into the string table */
|
||||
} n_un;
|
||||
uint8_t n_type; /* type flag, see below */
|
||||
uint8_t n_sect; /* section number or NO_SECT */
|
||||
uint16_t n_desc; /* see <mach-o/stab.h> */
|
||||
uint64_t n_value; /* value of this symbol (or stab offset) */
|
||||
};
|
||||
|
||||
/*
|
||||
* Symbols with a index into the string table of zero (n_un.n_strx == 0) are
|
||||
* defined to have a null, "", name. Therefore all string indexes to non null
|
||||
* names must not have a zero string index. This is bit historical information
|
||||
* that has never been well documented.
|
||||
*/
|
||||
|
||||
/*
|
||||
* The n_type field really contains four fields:
|
||||
* unsigned char N_STAB:3,
|
||||
* N_PEXT:1,
|
||||
* N_TYPE:3,
|
||||
* N_EXT:1;
|
||||
* which are used via the following masks.
|
||||
*/
|
||||
#define N_STAB 0xe0 /* if any of these bits set, a symbolic debugging entry */
|
||||
#define N_PEXT 0x10 /* private external symbol bit */
|
||||
#define N_TYPE 0x0e /* mask for the type bits */
|
||||
#define N_EXT 0x01 /* external symbol bit, set for external symbols */
|
||||
|
||||
/*
|
||||
* Only symbolic debugging entries have some of the N_STAB bits set and if any
|
||||
* of these bits are set then it is a symbolic debugging entry (a stab). In
|
||||
* which case then the values of the n_type field (the entire field) are given
|
||||
* in <mach-o/stab.h>
|
||||
*/
|
||||
|
||||
/*
|
||||
* Values for N_TYPE bits of the n_type field.
|
||||
*/
|
||||
#define N_UNDF 0x0 /* undefined, n_sect == NO_SECT */
|
||||
#define N_ABS 0x2 /* absolute, n_sect == NO_SECT */
|
||||
#define N_SECT 0xe /* defined in section number n_sect */
|
||||
#define N_PBUD 0xc /* prebound undefined (defined in a dylib) */
|
||||
#define N_INDR 0xa /* indirect */
|
||||
|
||||
/*
|
||||
* If the type is N_INDR then the symbol is defined to be the same as another
|
||||
* symbol. In this case the n_value field is an index into the string table
|
||||
* of the other symbol's name. When the other symbol is defined then they both
|
||||
* take on the defined type and value.
|
||||
*/
|
||||
|
||||
/*
|
||||
* If the type is N_SECT then the n_sect field contains an ordinal of the
|
||||
* section the symbol is defined in. The sections are numbered from 1 and
|
||||
* refer to sections in order they appear in the load commands for the file
|
||||
* they are in. This means the same ordinal may very well refer to different
|
||||
* sections in different files.
|
||||
*
|
||||
* The n_value field for all symbol table entries (including N_STAB's) gets
|
||||
* updated by the link editor based on the value of it's n_sect field and where
|
||||
* the section n_sect references gets relocated. If the value of the n_sect
|
||||
* field is NO_SECT then it's n_value field is not changed by the link editor.
|
||||
*/
|
||||
#define NO_SECT 0 /* symbol is not in any section */
|
||||
#define MAX_SECT 255 /* 1 thru 255 inclusive */
|
||||
|
||||
/*
|
||||
* Common symbols are represented by undefined (N_UNDF) external (N_EXT) types
|
||||
* who's values (n_value) are non-zero. In which case the value of the n_value
|
||||
* field is the size (in bytes) of the common symbol. The n_sect field is set
|
||||
* to NO_SECT. The alignment of a common symbol may be set as a power of 2
|
||||
* between 2^1 and 2^15 as part of the n_desc field using the macros below. If
|
||||
* the alignment is not set (a value of zero) then natural alignment based on
|
||||
* the size is used.
|
||||
*/
|
||||
#define GET_COMM_ALIGN(n_desc) (((n_desc) >> 8) & 0x0f)
|
||||
#define SET_COMM_ALIGN(n_desc,align) \
|
||||
(n_desc) = (((n_desc) & 0xf0ff) | (((align) & 0x0f) << 8))
|
||||
|
||||
/*
|
||||
* To support the lazy binding of undefined symbols in the dynamic link-editor,
|
||||
* the undefined symbols in the symbol table (the nlist structures) are marked
|
||||
* with the indication if the undefined reference is a lazy reference or
|
||||
* non-lazy reference. If both a non-lazy reference and a lazy reference is
|
||||
* made to the same symbol the non-lazy reference takes precedence. A reference
|
||||
* is lazy only when all references to that symbol are made through a symbol
|
||||
* pointer in a lazy symbol pointer section.
|
||||
*
|
||||
* The implementation of marking nlist structures in the symbol table for
|
||||
* undefined symbols will be to use some of the bits of the n_desc field as a
|
||||
* reference type. The mask REFERENCE_TYPE will be applied to the n_desc field
|
||||
* of an nlist structure for an undefined symbol to determine the type of
|
||||
* undefined reference (lazy or non-lazy).
|
||||
*
|
||||
* The constants for the REFERENCE FLAGS are propagated to the reference table
|
||||
* in a shared library file. In that case the constant for a defined symbol,
|
||||
* REFERENCE_FLAG_DEFINED, is also used.
|
||||
*/
|
||||
/* Reference type bits of the n_desc field of undefined symbols */
|
||||
#define REFERENCE_TYPE 0x7
|
||||
/* types of references */
|
||||
#define REFERENCE_FLAG_UNDEFINED_NON_LAZY 0
|
||||
#define REFERENCE_FLAG_UNDEFINED_LAZY 1
|
||||
#define REFERENCE_FLAG_DEFINED 2
|
||||
#define REFERENCE_FLAG_PRIVATE_DEFINED 3
|
||||
#define REFERENCE_FLAG_PRIVATE_UNDEFINED_NON_LAZY 4
|
||||
#define REFERENCE_FLAG_PRIVATE_UNDEFINED_LAZY 5
|
||||
|
||||
/*
|
||||
* To simplify stripping of objects that use are used with the dynamic link
|
||||
* editor, the static link editor marks the symbols defined an object that are
|
||||
* referenced by a dynamicly bound object (dynamic shared libraries, bundles).
|
||||
* With this marking strip knows not to strip these symbols.
|
||||
*/
|
||||
#define REFERENCED_DYNAMICALLY 0x0010
|
||||
|
||||
/*
|
||||
* For images created by the static link editor with the -twolevel_namespace
|
||||
* option in effect the flags field of the mach header is marked with
|
||||
* MH_TWOLEVEL. And the binding of the undefined references of the image are
|
||||
* determined by the static link editor. Which library an undefined symbol is
|
||||
* bound to is recorded by the static linker in the high 8 bits of the n_desc
|
||||
* field using the SET_LIBRARY_ORDINAL macro below. The ordinal recorded
|
||||
* references the libraries listed in the Mach-O's LC_LOAD_DYLIB,
|
||||
* LC_LOAD_WEAK_DYLIB, LC_REEXPORT_DYLIB, LC_LOAD_UPWARD_DYLIB, and
|
||||
* LC_LAZY_LOAD_DYLIB, etc. load commands in the order they appear in the
|
||||
* headers. The library ordinals start from 1.
|
||||
* For a dynamic library that is built as a two-level namespace image the
|
||||
* undefined references from module defined in another use the same nlist struct
|
||||
* an in that case SELF_LIBRARY_ORDINAL is used as the library ordinal. For
|
||||
* defined symbols in all images they also must have the library ordinal set to
|
||||
* SELF_LIBRARY_ORDINAL. The EXECUTABLE_ORDINAL refers to the executable
|
||||
* image for references from plugins that refer to the executable that loads
|
||||
* them.
|
||||
*
|
||||
* The DYNAMIC_LOOKUP_ORDINAL is for undefined symbols in a two-level namespace
|
||||
* image that are looked up by the dynamic linker with flat namespace semantics.
|
||||
* This ordinal was added as a feature in Mac OS X 10.3 by reducing the
|
||||
* value of MAX_LIBRARY_ORDINAL by one. So it is legal for existing binaries
|
||||
* or binaries built with older tools to have 0xfe (254) dynamic libraries. In
|
||||
* this case the ordinal value 0xfe (254) must be treated as a library ordinal
|
||||
* for compatibility.
|
||||
*/
|
||||
#define GET_LIBRARY_ORDINAL(n_desc) (((n_desc) >> 8) & 0xff)
|
||||
#define SET_LIBRARY_ORDINAL(n_desc,ordinal) \
|
||||
(n_desc) = (((n_desc) & 0x00ff) | (((ordinal) & 0xff) << 8))
|
||||
#define SELF_LIBRARY_ORDINAL 0x0
|
||||
#define MAX_LIBRARY_ORDINAL 0xfd
|
||||
#define DYNAMIC_LOOKUP_ORDINAL 0xfe
|
||||
#define EXECUTABLE_ORDINAL 0xff
|
||||
|
||||
/*
|
||||
* The bit 0x0020 of the n_desc field is used for two non-overlapping purposes
|
||||
* and has two different symbolic names, N_NO_DEAD_STRIP and N_DESC_DISCARDED.
|
||||
*/
|
||||
|
||||
/*
|
||||
* The N_NO_DEAD_STRIP bit of the n_desc field only ever appears in a
|
||||
* relocatable .o file (MH_OBJECT filetype). And is used to indicate to the
|
||||
* static link editor it is never to dead strip the symbol.
|
||||
*/
|
||||
#define N_NO_DEAD_STRIP 0x0020 /* symbol is not to be dead stripped */
|
||||
|
||||
/*
|
||||
* The N_DESC_DISCARDED bit of the n_desc field never appears in linked image.
|
||||
* But is used in very rare cases by the dynamic link editor to mark an in
|
||||
* memory symbol as discared and longer used for linking.
|
||||
*/
|
||||
#define N_DESC_DISCARDED 0x0020 /* symbol is discarded */
|
||||
|
||||
/*
|
||||
* The N_WEAK_REF bit of the n_desc field indicates to the dynamic linker that
|
||||
* the undefined symbol is allowed to be missing and is to have the address of
|
||||
* zero when missing.
|
||||
*/
|
||||
#define N_WEAK_REF 0x0040 /* symbol is weak referenced */
|
||||
|
||||
/*
|
||||
* The N_WEAK_DEF bit of the n_desc field indicates to the static and dynamic
|
||||
* linkers that the symbol definition is weak, allowing a non-weak symbol to
|
||||
* also be used which causes the weak definition to be discared. Currently this
|
||||
* is only supported for symbols in coalesed sections.
|
||||
*/
|
||||
#define N_WEAK_DEF 0x0080 /* coalesed symbol is a weak definition */
|
||||
|
||||
/*
|
||||
* The N_REF_TO_WEAK bit of the n_desc field indicates to the dynamic linker
|
||||
* that the undefined symbol should be resolved using flat namespace searching.
|
||||
*/
|
||||
#define N_REF_TO_WEAK 0x0080 /* reference to a weak symbol */
|
||||
|
||||
/*
|
||||
* The N_ARM_THUMB_DEF bit of the n_desc field indicates that the symbol is
|
||||
* a defintion of a Thumb function.
|
||||
*/
|
||||
#define N_ARM_THUMB_DEF 0x0008 /* symbol is a Thumb function (ARM) */
|
||||
|
||||
/*
|
||||
* The N_SYMBOL_RESOLVER bit of the n_desc field indicates that the
|
||||
* that the function is actually a resolver function and should
|
||||
* be called to get the address of the real function to use.
|
||||
* This bit is only available in .o files (MH_OBJECT filetype)
|
||||
*/
|
||||
#define N_SYMBOL_RESOLVER 0x0100
|
||||
|
||||
#ifndef __STRICT_BSD__
|
||||
#if __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
/*
|
||||
* The function nlist(3) from the C library.
|
||||
*/
|
||||
extern int nlist (const char *filename, struct nlist *list);
|
||||
#if __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
#endif /* __STRICT_BSD__ */
|
||||
|
||||
#endif /* _MACHO_LIST_H_ */
|
88
src/third_party/mac_headers/mach/boolean.h
vendored
Normal file
88
src/third_party/mac_headers/mach/boolean.h
vendored
Normal file
|
@ -0,0 +1,88 @@
|
|||
/*
|
||||
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. The rights granted to you under the License
|
||||
* may not be used to create, or enable the creation or redistribution of,
|
||||
* unlawful or unlicensed copies of an Apple operating system, or to
|
||||
* circumvent, violate, or enable the circumvention or violation of, any
|
||||
* terms of an Apple operating system software license agreement.
|
||||
*
|
||||
* Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@
|
||||
*/
|
||||
/*
|
||||
* @OSF_COPYRIGHT@
|
||||
*/
|
||||
/*
|
||||
* Mach Operating System
|
||||
* Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and its
|
||||
* documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
|
||||
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie Mellon
|
||||
* the rights to redistribute these changes.
|
||||
*/
|
||||
/*
|
||||
*/
|
||||
/*
|
||||
* File: mach/boolean.h
|
||||
*
|
||||
* Boolean data type.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _MACH_BOOLEAN_H_
|
||||
#define _MACH_BOOLEAN_H_
|
||||
|
||||
/*
|
||||
* Pick up "boolean_t" type definition
|
||||
*/
|
||||
|
||||
#ifndef ASSEMBLER
|
||||
#include <mach/machine/boolean.h>
|
||||
#endif /* ASSEMBLER */
|
||||
|
||||
/*
|
||||
* Define TRUE and FALSE if not defined.
|
||||
*/
|
||||
|
||||
#ifndef TRUE
|
||||
#define TRUE 1
|
||||
#endif /* TRUE */
|
||||
|
||||
#ifndef FALSE
|
||||
#define FALSE 0
|
||||
#endif /* FALSE */
|
||||
|
||||
#endif /* _MACH_BOOLEAN_H_ */
|
74
src/third_party/mac_headers/mach/i386/boolean.h
vendored
Normal file
74
src/third_party/mac_headers/mach/i386/boolean.h
vendored
Normal file
|
@ -0,0 +1,74 @@
|
|||
/*
|
||||
* Copyright (c) 2000-2006 Apple Computer, Inc. All rights reserved.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. The rights granted to you under the License
|
||||
* may not be used to create, or enable the creation or redistribution of,
|
||||
* unlawful or unlicensed copies of an Apple operating system, or to
|
||||
* circumvent, violate, or enable the circumvention or violation of, any
|
||||
* terms of an Apple operating system software license agreement.
|
||||
*
|
||||
* Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@
|
||||
*/
|
||||
/*
|
||||
* @OSF_COPYRIGHT@
|
||||
*/
|
||||
/*
|
||||
* Mach Operating System
|
||||
* Copyright (c) 1991,1990,1989 Carnegie Mellon University
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and its
|
||||
* documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
|
||||
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie Mellon
|
||||
* the rights to redistribute these changes.
|
||||
*/
|
||||
/*
|
||||
*/
|
||||
|
||||
/*
|
||||
* File: boolean.h
|
||||
*
|
||||
* Boolean type, for I386.
|
||||
*/
|
||||
|
||||
#ifndef _MACH_I386_BOOLEAN_H_
|
||||
#define _MACH_I386_BOOLEAN_H_
|
||||
|
||||
#if defined(__x86_64__) && !defined(KERNEL)
|
||||
typedef unsigned int boolean_t;
|
||||
#else
|
||||
typedef int boolean_t;
|
||||
#endif
|
||||
|
||||
#endif /* _MACH_I386_BOOLEAN_H_ */
|
157
src/third_party/mac_headers/mach/i386/vm_param.h
vendored
Normal file
157
src/third_party/mac_headers/mach/i386/vm_param.h
vendored
Normal file
|
@ -0,0 +1,157 @@
|
|||
/*
|
||||
* Copyright (c) 2000-2006 Apple Computer, Inc. All rights reserved.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. The rights granted to you under the License
|
||||
* may not be used to create, or enable the creation or redistribution of,
|
||||
* unlawful or unlicensed copies of an Apple operating system, or to
|
||||
* circumvent, violate, or enable the circumvention or violation of, any
|
||||
* terms of an Apple operating system software license agreement.
|
||||
*
|
||||
* Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@
|
||||
*/
|
||||
/*
|
||||
* @OSF_COPYRIGHT@
|
||||
*/
|
||||
/*
|
||||
* Mach Operating System
|
||||
* Copyright (c) 1991,1990,1989,1988 Carnegie Mellon University
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and its
|
||||
* documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
|
||||
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie Mellon
|
||||
* the rights to redistribute these changes.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994 The University of Utah and
|
||||
* the Computer Systems Laboratory at the University of Utah (CSL).
|
||||
* All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software is hereby
|
||||
* granted provided that (1) source code retains these copyright, permission,
|
||||
* and disclaimer notices, and (2) redistributions including binaries
|
||||
* reproduce the notices in supporting documentation, and (3) all advertising
|
||||
* materials mentioning features or use of this software display the following
|
||||
* acknowledgement: ``This product includes software developed by the
|
||||
* Computer Systems Laboratory at the University of Utah.''
|
||||
*
|
||||
* THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS
|
||||
* IS" CONDITION. THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF
|
||||
* ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* CSL requests users of this software to return to csl-dist@cs.utah.edu any
|
||||
* improvements that they make and grant CSL redistribution rights.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* File: vm_param.h
|
||||
* Author: Avadis Tevanian, Jr.
|
||||
* Date: 1985
|
||||
*
|
||||
* I386 machine dependent virtual memory parameters.
|
||||
* Most of the declarations are preceeded by I386_ (or i386_)
|
||||
* which is OK because only I386 specific code will be using
|
||||
* them.
|
||||
*/
|
||||
|
||||
#ifndef _MACH_I386_VM_PARAM_H_
|
||||
#define _MACH_I386_VM_PARAM_H_
|
||||
|
||||
#define BYTE_SIZE 8 /* byte size in bits */
|
||||
|
||||
#define I386_PGBYTES 4096 /* bytes per 80386 page */
|
||||
#define I386_PGSHIFT 12 /* bitshift for pages */
|
||||
|
||||
#define PAGE_SIZE I386_PGBYTES
|
||||
#define PAGE_SHIFT I386_PGSHIFT
|
||||
#define PAGE_MASK (PAGE_SIZE - 1)
|
||||
|
||||
#define I386_LPGBYTES 2*1024*1024 /* bytes per large page */
|
||||
#define I386_LPGSHIFT 21 /* bitshift for large pages */
|
||||
#define I386_LPGMASK (I386_LPGBYTES-1)
|
||||
|
||||
/*
|
||||
* Convert bytes to pages and convert pages to bytes.
|
||||
* No rounding is used.
|
||||
*/
|
||||
|
||||
#define i386_btop(x) ((ppnum_t)((x) >> I386_PGSHIFT))
|
||||
#define machine_btop(x) i386_btop(x)
|
||||
#define i386_ptob(x) (((pmap_paddr_t)(x)) << I386_PGSHIFT)
|
||||
|
||||
/*
|
||||
* Round off or truncate to the nearest page. These will work
|
||||
* for either addresses or counts. (i.e. 1 byte rounds to 1 page
|
||||
* bytes.
|
||||
*/
|
||||
|
||||
#define i386_round_page(x) ((((pmap_paddr_t)(x)) + I386_PGBYTES - 1) & \
|
||||
~(I386_PGBYTES-1))
|
||||
#define i386_trunc_page(x) (((pmap_paddr_t)(x)) & ~(I386_PGBYTES-1))
|
||||
|
||||
|
||||
|
||||
#define VM_MIN_ADDRESS64 ((user_addr_t) 0x0000000000000000ULL)
|
||||
/*
|
||||
* default top of user stack... it grows down from here
|
||||
*/
|
||||
#define VM_USRSTACK64 ((user_addr_t) 0x00007FFF5FC00000ULL)
|
||||
#define VM_DYLD64 ((user_addr_t) 0x00007FFF5FC00000ULL)
|
||||
#define VM_LIB64_SHR_DATA ((user_addr_t) 0x00007FFF60000000ULL)
|
||||
#define VM_LIB64_SHR_TEXT ((user_addr_t) 0x00007FFF80000000ULL)
|
||||
/*
|
||||
* the end of the usable user address space , for now about 47 bits.
|
||||
* the 64 bit commpage is past the end of this
|
||||
*/
|
||||
#define VM_MAX_PAGE_ADDRESS ((user_addr_t) 0x00007FFFFFE00000ULL)
|
||||
/*
|
||||
* canonical end of user address space for limits checking
|
||||
*/
|
||||
#define VM_MAX_USER_PAGE_ADDRESS ((user_addr_t)0x00007FFFFFFFF000ULL)
|
||||
|
||||
|
||||
/* system-wide values */
|
||||
#define MACH_VM_MIN_ADDRESS ((mach_vm_offset_t) 0)
|
||||
#define MACH_VM_MAX_ADDRESS ((mach_vm_offset_t) VM_MAX_PAGE_ADDRESS)
|
||||
|
||||
/* process-relative values (all 32-bit legacy only for now) */
|
||||
#define VM_MIN_ADDRESS ((vm_offset_t) 0)
|
||||
#define VM_USRSTACK32 ((vm_offset_t) 0xC0000000)
|
||||
#define VM_MAX_ADDRESS ((vm_offset_t) 0xFFE00000)
|
||||
|
||||
|
||||
|
||||
#endif /* _MACH_I386_VM_PARAM_H_ */
|
140
src/third_party/mac_headers/mach/i386/vm_types.h
vendored
Normal file
140
src/third_party/mac_headers/mach/i386/vm_types.h
vendored
Normal file
|
@ -0,0 +1,140 @@
|
|||
/*
|
||||
* Copyright (c) 2000-2006 Apple Computer, Inc. All rights reserved.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. The rights granted to you under the License
|
||||
* may not be used to create, or enable the creation or redistribution of,
|
||||
* unlawful or unlicensed copies of an Apple operating system, or to
|
||||
* circumvent, violate, or enable the circumvention or violation of, any
|
||||
* terms of an Apple operating system software license agreement.
|
||||
*
|
||||
* Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@
|
||||
*/
|
||||
/*
|
||||
* @OSF_COPYRIGHT@
|
||||
*/
|
||||
/*
|
||||
* Mach Operating System
|
||||
* Copyright (c) 1991,1990,1989,1988 Carnegie Mellon University
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and its
|
||||
* documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
|
||||
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie Mellon
|
||||
* the rights to redistribute these changes.
|
||||
*/
|
||||
/*
|
||||
*/
|
||||
|
||||
/*
|
||||
* File: vm_types.h
|
||||
* Author: Avadis Tevanian, Jr.
|
||||
* Date: 1985
|
||||
*
|
||||
* Header file for VM data types. I386 version.
|
||||
*/
|
||||
|
||||
#ifndef _MACH_I386_VM_TYPES_H_
|
||||
#define _MACH_I386_VM_TYPES_H_
|
||||
|
||||
#ifndef ASSEMBLER
|
||||
|
||||
#include <i386/_types.h>
|
||||
#include <mach/i386/vm_param.h>
|
||||
#include <stdint.h>
|
||||
|
||||
/*
|
||||
* natural_t and integer_t are Mach's legacy types for machine-
|
||||
* independent integer types (unsigned, and signed, respectively).
|
||||
* Their original purpose was to define other types in a machine/
|
||||
* compiler independent way.
|
||||
*
|
||||
* They also had an implicit "same size as pointer" characteristic
|
||||
* to them (i.e. Mach's traditional types are very ILP32 or ILP64
|
||||
* centric). We support x86 ABIs that do not follow either of
|
||||
* these models (specifically LP64). Therefore, we had to make a
|
||||
* choice between making these types scale with pointers or stay
|
||||
* tied to integers. Because their use is predominantly tied to
|
||||
* to the size of an integer, we are keeping that association and
|
||||
* breaking free from pointer size guarantees.
|
||||
*
|
||||
* New use of these types is discouraged.
|
||||
*/
|
||||
typedef __darwin_natural_t natural_t;
|
||||
typedef int integer_t;
|
||||
|
||||
/*
|
||||
* A vm_offset_t is a type-neutral pointer,
|
||||
* e.g. an offset into a virtual memory space.
|
||||
*/
|
||||
#ifdef __LP64__
|
||||
typedef uintptr_t vm_offset_t;
|
||||
#else /* __LP64__ */
|
||||
typedef natural_t vm_offset_t;
|
||||
#endif /* __LP64__ */
|
||||
|
||||
/*
|
||||
* A vm_size_t is the proper type for e.g.
|
||||
* expressing the difference between two
|
||||
* vm_offset_t entities.
|
||||
*/
|
||||
#ifdef __LP64__
|
||||
typedef uintptr_t vm_size_t;
|
||||
#else /* __LP64__ */
|
||||
typedef natural_t vm_size_t;
|
||||
#endif /* __LP64__ */
|
||||
|
||||
/*
|
||||
* This new type is independent of a particular vm map's
|
||||
* implementation size - and represents appropriate types
|
||||
* for all possible maps. This is used for interfaces
|
||||
* where the size of the map is not known - or we don't
|
||||
* want to have to distinguish.
|
||||
*/
|
||||
typedef uint64_t mach_vm_address_t;
|
||||
typedef uint64_t mach_vm_offset_t;
|
||||
typedef uint64_t mach_vm_size_t;
|
||||
|
||||
typedef uint64_t vm_map_offset_t;
|
||||
typedef uint64_t vm_map_address_t;
|
||||
typedef uint64_t vm_map_size_t;
|
||||
|
||||
|
||||
#endif /* ASSEMBLER */
|
||||
|
||||
/*
|
||||
* If composing messages by hand (please do not)
|
||||
*/
|
||||
#define MACH_MSG_TYPE_INTEGER_T MACH_MSG_TYPE_INTEGER_32
|
||||
|
||||
#endif /* _MACH_I386_VM_TYPES_H_ */
|
346
src/third_party/mac_headers/mach/machine.h
vendored
Normal file
346
src/third_party/mac_headers/mach/machine.h
vendored
Normal file
|
@ -0,0 +1,346 @@
|
|||
/*
|
||||
* Copyright (c) 2000-2007 Apple Computer, Inc. All rights reserved.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. The rights granted to you under the License
|
||||
* may not be used to create, or enable the creation or redistribution of,
|
||||
* unlawful or unlicensed copies of an Apple operating system, or to
|
||||
* circumvent, violate, or enable the circumvention or violation of, any
|
||||
* terms of an Apple operating system software license agreement.
|
||||
*
|
||||
* Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@
|
||||
*/
|
||||
/*
|
||||
* Mach Operating System
|
||||
* Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and its
|
||||
* documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
|
||||
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie Mellon
|
||||
* the rights to redistribute these changes.
|
||||
*/
|
||||
/* File: machine.h
|
||||
* Author: Avadis Tevanian, Jr.
|
||||
* Date: 1986
|
||||
*
|
||||
* Machine independent machine abstraction.
|
||||
*/
|
||||
|
||||
#ifndef _MACH_MACHINE_H_
|
||||
#define _MACH_MACHINE_H_
|
||||
|
||||
#include <stdint.h>
|
||||
#include <mach/machine/vm_types.h>
|
||||
#include <mach/boolean.h>
|
||||
|
||||
typedef integer_t cpu_type_t;
|
||||
typedef integer_t cpu_subtype_t;
|
||||
typedef integer_t cpu_threadtype_t;
|
||||
|
||||
#define CPU_STATE_MAX 4
|
||||
|
||||
#define CPU_STATE_USER 0
|
||||
#define CPU_STATE_SYSTEM 1
|
||||
#define CPU_STATE_IDLE 2
|
||||
#define CPU_STATE_NICE 3
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Capability bits used in the definition of cpu_type.
|
||||
*/
|
||||
#define CPU_ARCH_MASK 0xff000000 /* mask for architecture bits */
|
||||
#define CPU_ARCH_ABI64 0x01000000 /* 64 bit ABI */
|
||||
|
||||
/*
|
||||
* Machine types known by all.
|
||||
*/
|
||||
|
||||
#define CPU_TYPE_ANY ((cpu_type_t) -1)
|
||||
|
||||
#define CPU_TYPE_VAX ((cpu_type_t) 1)
|
||||
/* skip ((cpu_type_t) 2) */
|
||||
/* skip ((cpu_type_t) 3) */
|
||||
/* skip ((cpu_type_t) 4) */
|
||||
/* skip ((cpu_type_t) 5) */
|
||||
#define CPU_TYPE_MC680x0 ((cpu_type_t) 6)
|
||||
#define CPU_TYPE_X86 ((cpu_type_t) 7)
|
||||
#define CPU_TYPE_I386 CPU_TYPE_X86 /* compatibility */
|
||||
#define CPU_TYPE_X86_64 (CPU_TYPE_X86 | CPU_ARCH_ABI64)
|
||||
|
||||
/* skip CPU_TYPE_MIPS ((cpu_type_t) 8) */
|
||||
/* skip ((cpu_type_t) 9) */
|
||||
#define CPU_TYPE_MC98000 ((cpu_type_t) 10)
|
||||
#define CPU_TYPE_HPPA ((cpu_type_t) 11)
|
||||
#define CPU_TYPE_ARM ((cpu_type_t) 12)
|
||||
#define CPU_TYPE_MC88000 ((cpu_type_t) 13)
|
||||
#define CPU_TYPE_SPARC ((cpu_type_t) 14)
|
||||
#define CPU_TYPE_I860 ((cpu_type_t) 15)
|
||||
/* skip CPU_TYPE_ALPHA ((cpu_type_t) 16) */
|
||||
/* skip ((cpu_type_t) 17) */
|
||||
#define CPU_TYPE_POWERPC ((cpu_type_t) 18)
|
||||
#define CPU_TYPE_POWERPC64 (CPU_TYPE_POWERPC | CPU_ARCH_ABI64)
|
||||
|
||||
/*
|
||||
* Machine subtypes (these are defined here, instead of in a machine
|
||||
* dependent directory, so that any program can get all definitions
|
||||
* regardless of where is it compiled).
|
||||
*/
|
||||
|
||||
/*
|
||||
* Capability bits used in the definition of cpu_subtype.
|
||||
*/
|
||||
#define CPU_SUBTYPE_MASK 0xff000000 /* mask for feature flags */
|
||||
#define CPU_SUBTYPE_LIB64 0x80000000 /* 64 bit libraries */
|
||||
|
||||
|
||||
/*
|
||||
* Object files that are hand-crafted to run on any
|
||||
* implementation of an architecture are tagged with
|
||||
* CPU_SUBTYPE_MULTIPLE. This functions essentially the same as
|
||||
* the "ALL" subtype of an architecture except that it allows us
|
||||
* to easily find object files that may need to be modified
|
||||
* whenever a new implementation of an architecture comes out.
|
||||
*
|
||||
* It is the responsibility of the implementor to make sure the
|
||||
* software handles unsupported implementations elegantly.
|
||||
*/
|
||||
#define CPU_SUBTYPE_MULTIPLE ((cpu_subtype_t) -1)
|
||||
#define CPU_SUBTYPE_LITTLE_ENDIAN ((cpu_subtype_t) 0)
|
||||
#define CPU_SUBTYPE_BIG_ENDIAN ((cpu_subtype_t) 1)
|
||||
|
||||
/*
|
||||
* Machine threadtypes.
|
||||
* This is none - not defined - for most machine types/subtypes.
|
||||
*/
|
||||
#define CPU_THREADTYPE_NONE ((cpu_threadtype_t) 0)
|
||||
|
||||
/*
|
||||
* VAX subtypes (these do *not* necessary conform to the actual cpu
|
||||
* ID assigned by DEC available via the SID register).
|
||||
*/
|
||||
|
||||
#define CPU_SUBTYPE_VAX_ALL ((cpu_subtype_t) 0)
|
||||
#define CPU_SUBTYPE_VAX780 ((cpu_subtype_t) 1)
|
||||
#define CPU_SUBTYPE_VAX785 ((cpu_subtype_t) 2)
|
||||
#define CPU_SUBTYPE_VAX750 ((cpu_subtype_t) 3)
|
||||
#define CPU_SUBTYPE_VAX730 ((cpu_subtype_t) 4)
|
||||
#define CPU_SUBTYPE_UVAXI ((cpu_subtype_t) 5)
|
||||
#define CPU_SUBTYPE_UVAXII ((cpu_subtype_t) 6)
|
||||
#define CPU_SUBTYPE_VAX8200 ((cpu_subtype_t) 7)
|
||||
#define CPU_SUBTYPE_VAX8500 ((cpu_subtype_t) 8)
|
||||
#define CPU_SUBTYPE_VAX8600 ((cpu_subtype_t) 9)
|
||||
#define CPU_SUBTYPE_VAX8650 ((cpu_subtype_t) 10)
|
||||
#define CPU_SUBTYPE_VAX8800 ((cpu_subtype_t) 11)
|
||||
#define CPU_SUBTYPE_UVAXIII ((cpu_subtype_t) 12)
|
||||
|
||||
/*
|
||||
* 680x0 subtypes
|
||||
*
|
||||
* The subtype definitions here are unusual for historical reasons.
|
||||
* NeXT used to consider 68030 code as generic 68000 code. For
|
||||
* backwards compatability:
|
||||
*
|
||||
* CPU_SUBTYPE_MC68030 symbol has been preserved for source code
|
||||
* compatability.
|
||||
*
|
||||
* CPU_SUBTYPE_MC680x0_ALL has been defined to be the same
|
||||
* subtype as CPU_SUBTYPE_MC68030 for binary comatability.
|
||||
*
|
||||
* CPU_SUBTYPE_MC68030_ONLY has been added to allow new object
|
||||
* files to be tagged as containing 68030-specific instructions.
|
||||
*/
|
||||
|
||||
#define CPU_SUBTYPE_MC680x0_ALL ((cpu_subtype_t) 1)
|
||||
#define CPU_SUBTYPE_MC68030 ((cpu_subtype_t) 1) /* compat */
|
||||
#define CPU_SUBTYPE_MC68040 ((cpu_subtype_t) 2)
|
||||
#define CPU_SUBTYPE_MC68030_ONLY ((cpu_subtype_t) 3)
|
||||
|
||||
/*
|
||||
* I386 subtypes
|
||||
*/
|
||||
|
||||
#define CPU_SUBTYPE_INTEL(f, m) ((cpu_subtype_t) (f) + ((m) << 4))
|
||||
|
||||
#define CPU_SUBTYPE_I386_ALL CPU_SUBTYPE_INTEL(3, 0)
|
||||
#define CPU_SUBTYPE_386 CPU_SUBTYPE_INTEL(3, 0)
|
||||
#define CPU_SUBTYPE_486 CPU_SUBTYPE_INTEL(4, 0)
|
||||
#define CPU_SUBTYPE_486SX CPU_SUBTYPE_INTEL(4, 8) // 8 << 4 = 128
|
||||
#define CPU_SUBTYPE_586 CPU_SUBTYPE_INTEL(5, 0)
|
||||
#define CPU_SUBTYPE_PENT CPU_SUBTYPE_INTEL(5, 0)
|
||||
#define CPU_SUBTYPE_PENTPRO CPU_SUBTYPE_INTEL(6, 1)
|
||||
#define CPU_SUBTYPE_PENTII_M3 CPU_SUBTYPE_INTEL(6, 3)
|
||||
#define CPU_SUBTYPE_PENTII_M5 CPU_SUBTYPE_INTEL(6, 5)
|
||||
#define CPU_SUBTYPE_CELERON CPU_SUBTYPE_INTEL(7, 6)
|
||||
#define CPU_SUBTYPE_CELERON_MOBILE CPU_SUBTYPE_INTEL(7, 7)
|
||||
#define CPU_SUBTYPE_PENTIUM_3 CPU_SUBTYPE_INTEL(8, 0)
|
||||
#define CPU_SUBTYPE_PENTIUM_3_M CPU_SUBTYPE_INTEL(8, 1)
|
||||
#define CPU_SUBTYPE_PENTIUM_3_XEON CPU_SUBTYPE_INTEL(8, 2)
|
||||
#define CPU_SUBTYPE_PENTIUM_M CPU_SUBTYPE_INTEL(9, 0)
|
||||
#define CPU_SUBTYPE_PENTIUM_4 CPU_SUBTYPE_INTEL(10, 0)
|
||||
#define CPU_SUBTYPE_PENTIUM_4_M CPU_SUBTYPE_INTEL(10, 1)
|
||||
#define CPU_SUBTYPE_ITANIUM CPU_SUBTYPE_INTEL(11, 0)
|
||||
#define CPU_SUBTYPE_ITANIUM_2 CPU_SUBTYPE_INTEL(11, 1)
|
||||
#define CPU_SUBTYPE_XEON CPU_SUBTYPE_INTEL(12, 0)
|
||||
#define CPU_SUBTYPE_XEON_MP CPU_SUBTYPE_INTEL(12, 1)
|
||||
|
||||
#define CPU_SUBTYPE_INTEL_FAMILY(x) ((x) & 15)
|
||||
#define CPU_SUBTYPE_INTEL_FAMILY_MAX 15
|
||||
|
||||
#define CPU_SUBTYPE_INTEL_MODEL(x) ((x) >> 4)
|
||||
#define CPU_SUBTYPE_INTEL_MODEL_ALL 0
|
||||
|
||||
/*
|
||||
* X86 subtypes.
|
||||
*/
|
||||
|
||||
#define CPU_SUBTYPE_X86_ALL ((cpu_subtype_t)3)
|
||||
#define CPU_SUBTYPE_X86_64_ALL ((cpu_subtype_t)3)
|
||||
#define CPU_SUBTYPE_X86_ARCH1 ((cpu_subtype_t)4)
|
||||
|
||||
|
||||
#define CPU_THREADTYPE_INTEL_HTT ((cpu_threadtype_t) 1)
|
||||
|
||||
/*
|
||||
* Mips subtypes.
|
||||
*/
|
||||
|
||||
#define CPU_SUBTYPE_MIPS_ALL ((cpu_subtype_t) 0)
|
||||
#define CPU_SUBTYPE_MIPS_R2300 ((cpu_subtype_t) 1)
|
||||
#define CPU_SUBTYPE_MIPS_R2600 ((cpu_subtype_t) 2)
|
||||
#define CPU_SUBTYPE_MIPS_R2800 ((cpu_subtype_t) 3)
|
||||
#define CPU_SUBTYPE_MIPS_R2000a ((cpu_subtype_t) 4) /* pmax */
|
||||
#define CPU_SUBTYPE_MIPS_R2000 ((cpu_subtype_t) 5)
|
||||
#define CPU_SUBTYPE_MIPS_R3000a ((cpu_subtype_t) 6) /* 3max */
|
||||
#define CPU_SUBTYPE_MIPS_R3000 ((cpu_subtype_t) 7)
|
||||
|
||||
/*
|
||||
* MC98000 (PowerPC) subtypes
|
||||
*/
|
||||
#define CPU_SUBTYPE_MC98000_ALL ((cpu_subtype_t) 0)
|
||||
#define CPU_SUBTYPE_MC98601 ((cpu_subtype_t) 1)
|
||||
|
||||
/*
|
||||
* HPPA subtypes for Hewlett-Packard HP-PA family of
|
||||
* risc processors. Port by NeXT to 700 series.
|
||||
*/
|
||||
|
||||
#define CPU_SUBTYPE_HPPA_ALL ((cpu_subtype_t) 0)
|
||||
#define CPU_SUBTYPE_HPPA_7100 ((cpu_subtype_t) 0) /* compat */
|
||||
#define CPU_SUBTYPE_HPPA_7100LC ((cpu_subtype_t) 1)
|
||||
|
||||
/*
|
||||
* MC88000 subtypes.
|
||||
*/
|
||||
#define CPU_SUBTYPE_MC88000_ALL ((cpu_subtype_t) 0)
|
||||
#define CPU_SUBTYPE_MC88100 ((cpu_subtype_t) 1)
|
||||
#define CPU_SUBTYPE_MC88110 ((cpu_subtype_t) 2)
|
||||
|
||||
/*
|
||||
* SPARC subtypes
|
||||
*/
|
||||
#define CPU_SUBTYPE_SPARC_ALL ((cpu_subtype_t) 0)
|
||||
|
||||
/*
|
||||
* I860 subtypes
|
||||
*/
|
||||
#define CPU_SUBTYPE_I860_ALL ((cpu_subtype_t) 0)
|
||||
#define CPU_SUBTYPE_I860_860 ((cpu_subtype_t) 1)
|
||||
|
||||
/*
|
||||
* PowerPC subtypes
|
||||
*/
|
||||
#define CPU_SUBTYPE_POWERPC_ALL ((cpu_subtype_t) 0)
|
||||
#define CPU_SUBTYPE_POWERPC_601 ((cpu_subtype_t) 1)
|
||||
#define CPU_SUBTYPE_POWERPC_602 ((cpu_subtype_t) 2)
|
||||
#define CPU_SUBTYPE_POWERPC_603 ((cpu_subtype_t) 3)
|
||||
#define CPU_SUBTYPE_POWERPC_603e ((cpu_subtype_t) 4)
|
||||
#define CPU_SUBTYPE_POWERPC_603ev ((cpu_subtype_t) 5)
|
||||
#define CPU_SUBTYPE_POWERPC_604 ((cpu_subtype_t) 6)
|
||||
#define CPU_SUBTYPE_POWERPC_604e ((cpu_subtype_t) 7)
|
||||
#define CPU_SUBTYPE_POWERPC_620 ((cpu_subtype_t) 8)
|
||||
#define CPU_SUBTYPE_POWERPC_750 ((cpu_subtype_t) 9)
|
||||
#define CPU_SUBTYPE_POWERPC_7400 ((cpu_subtype_t) 10)
|
||||
#define CPU_SUBTYPE_POWERPC_7450 ((cpu_subtype_t) 11)
|
||||
#define CPU_SUBTYPE_POWERPC_970 ((cpu_subtype_t) 100)
|
||||
|
||||
/*
|
||||
* ARM subtypes
|
||||
*/
|
||||
#define CPU_SUBTYPE_ARM_ALL ((cpu_subtype_t) 0)
|
||||
#define CPU_SUBTYPE_ARM_V4T ((cpu_subtype_t) 5)
|
||||
#define CPU_SUBTYPE_ARM_V6 ((cpu_subtype_t) 6)
|
||||
#define CPU_SUBTYPE_ARM_V5TEJ ((cpu_subtype_t) 7)
|
||||
#define CPU_SUBTYPE_ARM_XSCALE ((cpu_subtype_t) 8)
|
||||
#define CPU_SUBTYPE_ARM_V7 ((cpu_subtype_t) 9)
|
||||
|
||||
/*
|
||||
* CPU families (sysctl hw.cpufamily)
|
||||
*
|
||||
* These are meant to identify the CPU's marketing name - an
|
||||
* application can map these to (possibly) localized strings.
|
||||
* NB: the encodings of the CPU families are intentionally arbitrary.
|
||||
* There is no ordering, and you should never try to deduce whether
|
||||
* or not some feature is available based on the family.
|
||||
* Use feature flags (eg, hw.optional.altivec) to test for optional
|
||||
* functionality.
|
||||
*/
|
||||
#define CPUFAMILY_UNKNOWN 0
|
||||
#define CPUFAMILY_POWERPC_G3 0xcee41549
|
||||
#define CPUFAMILY_POWERPC_G4 0x77c184ae
|
||||
#define CPUFAMILY_POWERPC_G5 0xed76d8aa
|
||||
#define CPUFAMILY_INTEL_6_13 0xaa33392b
|
||||
#define CPUFAMILY_INTEL_YONAH 0x73d67300
|
||||
#define CPUFAMILY_INTEL_MEROM 0x426f69ef
|
||||
#define CPUFAMILY_INTEL_PENRYN 0x78ea4fbc
|
||||
#define CPUFAMILY_INTEL_NEHALEM 0x6b5a4cd2
|
||||
#define CPUFAMILY_INTEL_WESTMERE 0x573b5eec
|
||||
#define CPUFAMILY_INTEL_SANDYBRIDGE 0x5490b78c
|
||||
#define CPUFAMILY_ARM_9 0xe73283ae
|
||||
#define CPUFAMILY_ARM_11 0x8ff620d8
|
||||
#define CPUFAMILY_ARM_XSCALE 0x53b005f5
|
||||
#define CPUFAMILY_ARM_13 0x0cc90e64
|
||||
#define CPUFAMILY_ARM_14 0x96077ef1
|
||||
|
||||
/* The following synonyms are deprecated: */
|
||||
#define CPUFAMILY_INTEL_6_14 CPUFAMILY_INTEL_YONAH
|
||||
#define CPUFAMILY_INTEL_6_15 CPUFAMILY_INTEL_MEROM
|
||||
#define CPUFAMILY_INTEL_6_23 CPUFAMILY_INTEL_PENRYN
|
||||
#define CPUFAMILY_INTEL_6_26 CPUFAMILY_INTEL_NEHALEM
|
||||
|
||||
#define CPUFAMILY_INTEL_CORE CPUFAMILY_INTEL_YONAH
|
||||
#define CPUFAMILY_INTEL_CORE2 CPUFAMILY_INTEL_MEROM
|
||||
|
||||
|
||||
#endif /* _MACH_MACHINE_H_ */
|
40
src/third_party/mac_headers/mach/machine/boolean.h
vendored
Normal file
40
src/third_party/mac_headers/mach/machine/boolean.h
vendored
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* Copyright (c) 2000-2007 Apple Inc. All rights reserved.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. The rights granted to you under the License
|
||||
* may not be used to create, or enable the creation or redistribution of,
|
||||
* unlawful or unlicensed copies of an Apple operating system, or to
|
||||
* circumvent, violate, or enable the circumvention or violation of, any
|
||||
* terms of an Apple operating system software license agreement.
|
||||
*
|
||||
* Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@
|
||||
*/
|
||||
|
||||
#ifndef _MACH_MACHINE_BOOLEAN_H_
|
||||
#define _MACH_MACHINE_BOOLEAN_H_
|
||||
|
||||
#if defined (__i386__) || defined(__x86_64__)
|
||||
#include "mach/i386/boolean.h"
|
||||
#elif defined (__arm__)
|
||||
#include "mach/arm/boolean.h"
|
||||
#else
|
||||
#error architecture not supported
|
||||
#endif
|
||||
|
||||
#endif /* _MACH_MACHINE_BOOLEAN_H_ */
|
9
src/third_party/mac_headers/mach/machine/thread_state.h
vendored
Normal file
9
src/third_party/mac_headers/mach/machine/thread_state.h
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
/*
|
||||
* This file is a stub with the bare minimum needed to make things work.
|
||||
*/
|
||||
#ifndef _MACH_MACHINE_THREAD_STATE_H_
|
||||
#define _MACH_MACHINE_THREAD_STATE_H_
|
||||
|
||||
#define THREAD_STATE_MAX 1
|
||||
|
||||
#endif /* _MACH_MACHINE_THREAD_STATE_H_ */
|
1
src/third_party/mac_headers/mach/machine/thread_status.h
vendored
Normal file
1
src/third_party/mac_headers/mach/machine/thread_status.h
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
/* This file intentionally left blank */
|
40
src/third_party/mac_headers/mach/machine/vm_types.h
vendored
Normal file
40
src/third_party/mac_headers/mach/machine/vm_types.h
vendored
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* Copyright (c) 2000-2007 Apple Inc. All rights reserved.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. The rights granted to you under the License
|
||||
* may not be used to create, or enable the creation or redistribution of,
|
||||
* unlawful or unlicensed copies of an Apple operating system, or to
|
||||
* circumvent, violate, or enable the circumvention or violation of, any
|
||||
* terms of an Apple operating system software license agreement.
|
||||
*
|
||||
* Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@
|
||||
*/
|
||||
|
||||
#ifndef _MACH_MACHINE_VM_TYPES_H_
|
||||
#define _MACH_MACHINE_VM_TYPES_H_
|
||||
|
||||
#if defined (__i386__) || defined(__x86_64__)
|
||||
#include "mach/i386/vm_types.h"
|
||||
#elif defined (__arm__)
|
||||
#include "mach/arm/vm_types.h"
|
||||
#else
|
||||
#error architecture not supported
|
||||
#endif
|
||||
|
||||
#endif /* _MACH_MACHINE_VM_TYPES_H_ */
|
94
src/third_party/mac_headers/mach/thread_status.h
vendored
Normal file
94
src/third_party/mac_headers/mach/thread_status.h
vendored
Normal file
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. The rights granted to you under the License
|
||||
* may not be used to create, or enable the creation or redistribution of,
|
||||
* unlawful or unlicensed copies of an Apple operating system, or to
|
||||
* circumvent, violate, or enable the circumvention or violation of, any
|
||||
* terms of an Apple operating system software license agreement.
|
||||
*
|
||||
* Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@
|
||||
*/
|
||||
/*
|
||||
* @OSF_COPYRIGHT@
|
||||
*/
|
||||
/*
|
||||
* Mach Operating System
|
||||
* Copyright (c) 1991,1990,1989,1988 Carnegie Mellon University
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and its
|
||||
* documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
|
||||
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie Mellon
|
||||
* the rights to redistribute these changes.
|
||||
*/
|
||||
/*
|
||||
*/
|
||||
/*
|
||||
* File: mach/thread_status.h
|
||||
* Author: Avadis Tevanian, Jr.
|
||||
*
|
||||
* This file contains the structure definitions for the user-visible
|
||||
* thread state. This thread state is examined with the thread_get_state
|
||||
* kernel call and may be changed with the thread_set_state kernel call.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _MACH_THREAD_STATUS_H_
|
||||
#define _MACH_THREAD_STATUS_H_
|
||||
|
||||
/*
|
||||
* The actual structure that comprises the thread state is defined
|
||||
* in the machine dependent module.
|
||||
*/
|
||||
#include <mach/machine/vm_types.h>
|
||||
#include <mach/machine/thread_status.h>
|
||||
#include <mach/machine/thread_state.h>
|
||||
|
||||
/*
|
||||
* Generic definition for machine-dependent thread status.
|
||||
*/
|
||||
|
||||
typedef natural_t *thread_state_t; /* Variable-length array */
|
||||
|
||||
/* THREAD_STATE_MAX is now defined in <mach/machine/thread_state.h> */
|
||||
typedef natural_t thread_state_data_t[THREAD_STATE_MAX];
|
||||
|
||||
#define THREAD_STATE_FLAVOR_LIST 0 /* List of valid flavors */
|
||||
#define THREAD_STATE_FLAVOR_LIST_NEW 128
|
||||
|
||||
typedef int thread_state_flavor_t;
|
||||
typedef thread_state_flavor_t *thread_state_flavor_array_t;
|
||||
|
||||
#endif /* _MACH_THREAD_STATUS_H_ */
|
140
src/third_party/mac_headers/mach/vm_prot.h
vendored
Normal file
140
src/third_party/mac_headers/mach/vm_prot.h
vendored
Normal file
|
@ -0,0 +1,140 @@
|
|||
/*
|
||||
* Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. The rights granted to you under the License
|
||||
* may not be used to create, or enable the creation or redistribution of,
|
||||
* unlawful or unlicensed copies of an Apple operating system, or to
|
||||
* circumvent, violate, or enable the circumvention or violation of, any
|
||||
* terms of an Apple operating system software license agreement.
|
||||
*
|
||||
* Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_OSREFERENCE_LICENSE_HEADER_END@
|
||||
*/
|
||||
/*
|
||||
* @OSF_COPYRIGHT@
|
||||
*/
|
||||
/*
|
||||
* Mach Operating System
|
||||
* Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission to use, copy, modify and distribute this software and its
|
||||
* documentation is hereby granted, provided that both the copyright
|
||||
* notice and this permission notice appear in all copies of the
|
||||
* software, derivative works or modified versions, and any portions
|
||||
* thereof, and that both notices appear in supporting documentation.
|
||||
*
|
||||
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||||
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
|
||||
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||||
*
|
||||
* Carnegie Mellon requests users of this software to return to
|
||||
*
|
||||
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||||
* School of Computer Science
|
||||
* Carnegie Mellon University
|
||||
* Pittsburgh PA 15213-3890
|
||||
*
|
||||
* any improvements or extensions that they make and grant Carnegie Mellon
|
||||
* the rights to redistribute these changes.
|
||||
*/
|
||||
/*
|
||||
*/
|
||||
/*
|
||||
* File: mach/vm_prot.h
|
||||
* Author: Avadis Tevanian, Jr., Michael Wayne Young
|
||||
*
|
||||
* Virtual memory protection definitions.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _MACH_VM_PROT_H_
|
||||
#define _MACH_VM_PROT_H_
|
||||
|
||||
/*
|
||||
* Types defined:
|
||||
*
|
||||
* vm_prot_t VM protection values.
|
||||
*/
|
||||
|
||||
typedef int vm_prot_t;
|
||||
|
||||
/*
|
||||
* Protection values, defined as bits within the vm_prot_t type
|
||||
*/
|
||||
|
||||
#define VM_PROT_NONE ((vm_prot_t) 0x00)
|
||||
|
||||
#define VM_PROT_READ ((vm_prot_t) 0x01) /* read permission */
|
||||
#define VM_PROT_WRITE ((vm_prot_t) 0x02) /* write permission */
|
||||
#define VM_PROT_EXECUTE ((vm_prot_t) 0x04) /* execute permission */
|
||||
|
||||
/*
|
||||
* The default protection for newly-created virtual memory
|
||||
*/
|
||||
|
||||
#define VM_PROT_DEFAULT (VM_PROT_READ|VM_PROT_WRITE)
|
||||
|
||||
/*
|
||||
* The maximum privileges possible, for parameter checking.
|
||||
*/
|
||||
|
||||
#define VM_PROT_ALL (VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE)
|
||||
|
||||
/*
|
||||
* An invalid protection value.
|
||||
* Used only by memory_object_lock_request to indicate no change
|
||||
* to page locks. Using -1 here is a bad idea because it
|
||||
* looks like VM_PROT_ALL and then some.
|
||||
*/
|
||||
|
||||
#define VM_PROT_NO_CHANGE ((vm_prot_t) 0x08)
|
||||
|
||||
/*
|
||||
* When a caller finds that he cannot obtain write permission on a
|
||||
* mapped entry, the following flag can be used. The entry will
|
||||
* be made "needs copy" effectively copying the object (using COW),
|
||||
* and write permission will be added to the maximum protections
|
||||
* for the associated entry.
|
||||
*/
|
||||
|
||||
#define VM_PROT_COPY ((vm_prot_t) 0x10)
|
||||
|
||||
|
||||
/*
|
||||
* Another invalid protection value.
|
||||
* Used only by memory_object_data_request upon an object
|
||||
* which has specified a copy_call copy strategy. It is used
|
||||
* when the kernel wants a page belonging to a copy of the
|
||||
* object, and is only asking the object as a result of
|
||||
* following a shadow chain. This solves the race between pages
|
||||
* being pushed up by the memory manager and the kernel
|
||||
* walking down the shadow chain.
|
||||
*/
|
||||
|
||||
#define VM_PROT_WANTS_COPY ((vm_prot_t) 0x10)
|
||||
|
||||
|
||||
/*
|
||||
* Another invalid protection value.
|
||||
* Indicates that the other protection bits are to be applied as a mask
|
||||
* against the actual protection bits of the map entry.
|
||||
*/
|
||||
#define VM_PROT_IS_MASK ((vm_prot_t) 0x40)
|
||||
|
||||
#endif /* _MACH_VM_PROT_H_ */
|
|
@ -97,8 +97,8 @@
|
|||
B8C5B51A1166534700D34F4E /* file_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650410B52F6D800611104 /* file_id.cc */; };
|
||||
B8C5B51B1166534700D34F4E /* macho_id.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650430B52F6D800611104 /* macho_id.cc */; };
|
||||
B8C5B51C1166534700D34F4E /* macho_walker.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BE650450B52F6D800611104 /* macho_walker.cc */; };
|
||||
B8C5B51D1166534700D34F4E /* dump_syms.mm in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* dump_syms.mm */; };
|
||||
B8C5B51E1166534700D34F4E /* dump_syms_tool.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF186E0B1BB43700F8391B /* dump_syms_tool.mm */; };
|
||||
B8C5B51D1166534700D34F4E /* dump_syms.cc in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* dump_syms.cc */; };
|
||||
B8C5B51E1166534700D34F4E /* dump_syms_tool.cc in Sources */ = {isa = PBXBuildFile; fileRef = 9BDF186E0B1BB43700F8391B /* dump_syms_tool.cc */; };
|
||||
B8C5B523116653BA00D34F4E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08FB779EFE84155DC02AAC07 /* Foundation.framework */; };
|
||||
D21F97D711CBA12300239E38 /* test_assembler_unittest.cc in Sources */ = {isa = PBXBuildFile; fileRef = B88FB0D9116CEC0600407530 /* test_assembler_unittest.cc */; };
|
||||
D21F97D811CBA13D00239E38 /* libgtestmockall.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B88FB024116BDFFF00407530 /* libgtestmockall.a */; };
|
||||
|
@ -270,7 +270,7 @@
|
|||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
08FB7796FE84155DC02AAC07 /* dump_syms.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = dump_syms.mm; path = ../../../common/mac/dump_syms.mm; sourceTree = "<group>"; };
|
||||
08FB7796FE84155DC02AAC07 /* dump_syms.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = dump_syms.cc; path = ../../../common/mac/dump_syms.cc; sourceTree = "<group>"; };
|
||||
08FB779EFE84155DC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
162F64F8161C591500CD68D5 /* arch_utilities.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = arch_utilities.cc; path = ../../../common/mac/arch_utilities.cc; sourceTree = "<group>"; };
|
||||
162F64F9161C591500CD68D5 /* arch_utilities.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = arch_utilities.h; path = ../../../common/mac/arch_utilities.h; sourceTree = "<group>"; };
|
||||
|
@ -281,7 +281,7 @@
|
|||
8B3102D411F0D60300FCF3E4 /* BreakpadDebug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadDebug.xcconfig; path = ../../../common/mac/BreakpadDebug.xcconfig; sourceTree = SOURCE_ROOT; };
|
||||
8B3102D511F0D60300FCF3E4 /* BreakpadRelease.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = BreakpadRelease.xcconfig; path = ../../../common/mac/BreakpadRelease.xcconfig; sourceTree = SOURCE_ROOT; };
|
||||
9BDF186D0B1BB43700F8391B /* dump_syms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dump_syms.h; path = ../../../common/mac/dump_syms.h; sourceTree = "<group>"; };
|
||||
9BDF186E0B1BB43700F8391B /* dump_syms_tool.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = dump_syms_tool.mm; sourceTree = "<group>"; };
|
||||
9BDF186E0B1BB43700F8391B /* dump_syms_tool.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = dump_syms_tool.cc; sourceTree = "<group>"; };
|
||||
9BE650410B52F6D800611104 /* file_id.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = file_id.cc; path = ../../../common/mac/file_id.cc; sourceTree = SOURCE_ROOT; };
|
||||
9BE650420B52F6D800611104 /* file_id.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = file_id.h; path = ../../../common/mac/file_id.h; sourceTree = SOURCE_ROOT; };
|
||||
9BE650430B52F6D800611104 /* macho_id.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = macho_id.cc; path = ../../../common/mac/macho_id.cc; sourceTree = SOURCE_ROOT; };
|
||||
|
@ -493,8 +493,8 @@
|
|||
9BE650410B52F6D800611104 /* file_id.cc */,
|
||||
9BE650420B52F6D800611104 /* file_id.h */,
|
||||
9BDF186D0B1BB43700F8391B /* dump_syms.h */,
|
||||
08FB7796FE84155DC02AAC07 /* dump_syms.mm */,
|
||||
9BDF186E0B1BB43700F8391B /* dump_syms_tool.mm */,
|
||||
08FB7796FE84155DC02AAC07 /* dump_syms.cc */,
|
||||
9BDF186E0B1BB43700F8391B /* dump_syms_tool.cc */,
|
||||
B89E0E701166573700DD08C9 /* macho_dump.cc */,
|
||||
4D72CAF413DFBAC2006CABE3 /* md5.cc */,
|
||||
08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */,
|
||||
|
@ -1077,8 +1077,8 @@
|
|||
B8C5B51A1166534700D34F4E /* file_id.cc in Sources */,
|
||||
B8C5B51B1166534700D34F4E /* macho_id.cc in Sources */,
|
||||
B8C5B51C1166534700D34F4E /* macho_walker.cc in Sources */,
|
||||
B8C5B51D1166534700D34F4E /* dump_syms.mm in Sources */,
|
||||
B8C5B51E1166534700D34F4E /* dump_syms_tool.mm in Sources */,
|
||||
B8C5B51D1166534700D34F4E /* dump_syms.cc in Sources */,
|
||||
B8C5B51E1166534700D34F4E /* dump_syms_tool.cc in Sources */,
|
||||
B88FAE1911665FE400407530 /* dwarf2diehandler.cc in Sources */,
|
||||
B88FAE261166603300407530 /* dwarf_cu_to_module.cc in Sources */,
|
||||
B88FAE271166603300407530 /* dwarf_line_to_module.cc in Sources */,
|
||||
|
|
|
@ -29,12 +29,13 @@
|
|||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
// dump_syms_tool.mm: Command line tool that uses the DumpSymbols class.
|
||||
// dump_syms_tool.cc: Command line tool that uses the DumpSymbols class.
|
||||
// TODO(waylonis): accept stdin
|
||||
|
||||
#include <mach-o/arch.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
|
@ -51,8 +52,9 @@ using std::vector;
|
|||
struct Options {
|
||||
Options()
|
||||
: srcPath(), dsymPath(), arch(), cfi(true), handle_inter_cu_refs(true) {}
|
||||
NSString *srcPath;
|
||||
NSString *dsymPath;
|
||||
|
||||
string srcPath;
|
||||
string dsymPath;
|
||||
const NXArchInfo *arch;
|
||||
bool cfi;
|
||||
bool handle_inter_cu_refs;
|
||||
|
@ -114,8 +116,10 @@ static bool Start(const Options &options) {
|
|||
// requested, then consider the Module as "split" and dump all the debug data
|
||||
// from the primary debug info file, the dSYM, and then dump additional CFI
|
||||
// data from the source Mach-O file.
|
||||
bool split_module = options.dsymPath && options.srcPath && options.cfi;
|
||||
NSString* primary_file = split_module ? options.dsymPath : options.srcPath;
|
||||
bool split_module =
|
||||
!options.dsymPath.empty() && !options.srcPath.empty() && options.cfi;
|
||||
const string& primary_file =
|
||||
split_module ? options.dsymPath : options.srcPath;
|
||||
|
||||
if (!dump_symbols.Read(primary_file))
|
||||
return false;
|
||||
|
@ -124,7 +128,7 @@ static bool Start(const Options &options) {
|
|||
if (!dump_symbols.SetArchitecture(options.arch->cputype,
|
||||
options.arch->cpusubtype)) {
|
||||
fprintf(stderr, "%s: no architecture '%s' is present in file.\n",
|
||||
[primary_file fileSystemRepresentation], options.arch->name);
|
||||
primary_file.c_str(), options.arch->name);
|
||||
size_t available_size;
|
||||
const SuperFatArch *available =
|
||||
dump_symbols.AvailableArchitectures(&available_size);
|
||||
|
@ -214,8 +218,7 @@ static void SetupOptions(int argc, const char *argv[], Options *options) {
|
|||
break;
|
||||
}
|
||||
case 'g':
|
||||
options->dsymPath = [[NSFileManager defaultManager]
|
||||
stringWithFileSystemRepresentation:optarg length:strlen(optarg)];
|
||||
options->dsymPath = optarg;
|
||||
break;
|
||||
case 'c':
|
||||
options->cfi = false;
|
||||
|
@ -237,21 +240,16 @@ static void SetupOptions(int argc, const char *argv[], Options *options) {
|
|||
exit(1);
|
||||
}
|
||||
|
||||
options->srcPath = [[NSFileManager defaultManager]
|
||||
stringWithFileSystemRepresentation:argv[optind]
|
||||
length:strlen(argv[optind])];
|
||||
options->srcPath = argv[optind];
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
int main (int argc, const char * argv[]) {
|
||||
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||
Options options;
|
||||
bool result;
|
||||
|
||||
SetupOptions(argc, argv, &options);
|
||||
result = Start(options);
|
||||
|
||||
[pool release];
|
||||
|
||||
return !result;
|
||||
}
|
|
@ -55,7 +55,7 @@
|
|||
'target_name': 'dump_syms',
|
||||
'type': 'executable',
|
||||
'sources': [
|
||||
'dump_syms/dump_syms_tool.mm',
|
||||
'dump_syms/dump_syms_tool.cc',
|
||||
],
|
||||
'link_settings': {
|
||||
'libraries': [
|
||||
|
|
Loading…
Reference in a new issue