~ubuntu-branches/ubuntu/trusty/tomahawk/trusty-proposed

« back to all changes in this revision

Viewing changes to thirdparty/breakpad/google_breakpad/common/minidump_cpu_ppc64.h

  • Committer: Package Import Robot
  • Author(s): Harald Sitter
  • Date: 2013-03-07 21:50:13 UTC
  • Revision ID: package-import@ubuntu.com-20130307215013-6gdjkdds7i9uenvs
Tags: upstream-0.6.0+dfsg
ImportĀ upstreamĀ versionĀ 0.6.0+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Copyright (c) 2008, Google Inc.
 
2
 * All rights reserved.
 
3
 *
 
4
 * Redistribution and use in source and binary forms, with or without
 
5
 * modification, are permitted provided that the following conditions are
 
6
 * met:
 
7
 *
 
8
 *     * Redistributions of source code must retain the above copyright
 
9
 * notice, this list of conditions and the following disclaimer.
 
10
 *     * Redistributions in binary form must reproduce the above
 
11
 * copyright notice, this list of conditions and the following disclaimer
 
12
 * in the documentation and/or other materials provided with the
 
13
 * distribution.
 
14
 *     * Neither the name of Google Inc. nor the names of its
 
15
 * contributors may be used to endorse or promote products derived from
 
16
 * this software without specific prior written permission.
 
17
 *
 
18
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 
19
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 
20
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 
21
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 
22
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 
23
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 
24
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 
25
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 
26
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 
27
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 
28
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
 
29
 
 
30
/* minidump_format.h: A cross-platform reimplementation of minidump-related
 
31
 * portions of DbgHelp.h from the Windows Platform SDK.
 
32
 *
 
33
 * (This is C99 source, please don't corrupt it with C++.)
 
34
 *
 
35
 * This file contains the necessary definitions to read minidump files
 
36
 * produced on ppc64.  These files may be read on any platform provided
 
37
 * that the alignments of these structures on the processing system are
 
38
 * identical to the alignments of these structures on the producing system.
 
39
 * For this reason, precise-sized types are used.  The structures defined
 
40
 * by this file have been laid out to minimize alignment problems by ensuring
 
41
 * ensuring that all members are aligned on their natural boundaries.  In
 
42
 * In some cases, tail-padding may be significant when different ABIs specify
 
43
 * different tail-padding behaviors.  To avoid problems when reading or
 
44
 * writing affected structures, MD_*_SIZE macros are provided where needed,
 
45
 * containing the useful size of the structures without padding.
 
46
 *
 
47
 * Structures that are defined by Microsoft to contain a zero-length array
 
48
 * are instead defined here to contain an array with one element, as
 
49
 * zero-length arrays are forbidden by standard C and C++.  In these cases,
 
50
 * *_minsize constants are provided to be used in place of sizeof.  For a
 
51
 * cleaner interface to these sizes when using C++, see minidump_size.h.
 
52
 *
 
53
 * These structures are also sufficient to populate minidump files.
 
54
 *
 
55
 * These definitions may be extended to support handling minidump files
 
56
 * for other CPUs and other operating systems.
 
57
 *
 
58
 * Because precise data type sizes are crucial for this implementation to
 
59
 * function properly and portably in terms of interoperability with minidumps
 
60
 * produced by DbgHelp on Windows, a set of primitive types with known sizes
 
61
 * are used as the basis of each structure defined by this file.  DbgHelp
 
62
 * on Windows is assumed to be the reference implementation; this file
 
63
 * seeks to provide a cross-platform compatible implementation.  To avoid
 
64
 * collisions with the types and values defined and used by DbgHelp in the
 
65
 * event that this implementation is used on Windows, each type and value
 
66
 * defined here is given a new name, beginning with "MD".  Names of the
 
67
 * equivalent types and values in the Windows Platform SDK are given in
 
68
 * comments.
 
69
 *
 
70
 * Author: Neal Sidhwaney */
 
71
 
 
72
 
 
73
/*
 
74
 * Breakpad minidump extension for PPC64 support.  Based on Darwin/Mac OS X'
 
75
 * mach/ppc/_types.h
 
76
 */
 
77
 
 
78
#ifndef GOOGLE_BREAKPAD_COMMON_MINIDUMP_CPU_PPC64_H__
 
79
#define GOOGLE_BREAKPAD_COMMON_MINIDUMP_CPU_PPC64_H__
 
80
 
 
81
#include "minidump_cpu_ppc.h"
 
82
 
 
83
// these types are the same in ppc64 & ppc
 
84
typedef MDFloatingSaveAreaPPC MDFloatingSaveAreaPPC64;
 
85
typedef MDVectorSaveAreaPPC MDVectorSaveAreaPPC64;
 
86
 
 
87
#define MD_CONTEXT_PPC64_GPR_COUNT MD_CONTEXT_PPC_GPR_COUNT
 
88
 
 
89
typedef struct {
 
90
  /* context_flags is not present in ppc_thread_state, but it aids
 
91
   * identification of MDRawContextPPC among other raw context types,
 
92
   * and it guarantees alignment when we get to float_save. */
 
93
  u_int64_t             context_flags;
 
94
 
 
95
  u_int64_t             srr0;    /* Machine status save/restore: stores pc
 
96
                                  * (instruction) */
 
97
  u_int64_t             srr1;    /* Machine status save/restore: stores msr
 
98
                                  * (ps, program/machine state) */
 
99
  /* ppc_thread_state contains 32 fields, r0 .. r31.  Here, an array is
 
100
   * used for brevity. */
 
101
  u_int64_t             gpr[MD_CONTEXT_PPC64_GPR_COUNT];
 
102
  u_int64_t             cr;      /* Condition */
 
103
  u_int64_t             xer;     /* Integer (fiXed-point) exception */
 
104
  u_int64_t             lr;      /* Link */
 
105
  u_int64_t             ctr;     /* Count */
 
106
  u_int64_t             vrsave;  /* Vector save */
 
107
 
 
108
  /* float_save and vector_save aren't present in ppc_thread_state, but
 
109
   * are represented in separate structures that still define a thread's
 
110
   * context. */
 
111
  MDFloatingSaveAreaPPC float_save;
 
112
  MDVectorSaveAreaPPC   vector_save;
 
113
} MDRawContextPPC64;  /* Based on ppc_thread_state */
 
114
 
 
115
/* For (MDRawContextPPC).context_flags.  These values indicate the type of
 
116
 * context stored in the structure.  MD_CONTEXT_PPC is Breakpad-defined.  Its
 
117
 * value was chosen to avoid likely conflicts with MD_CONTEXT_* for other
 
118
 * CPUs. */
 
119
#define MD_CONTEXT_PPC                0x20000000
 
120
#define MD_CONTEXT_PPC_BASE           (MD_CONTEXT_PPC | 0x00000001)
 
121
#define MD_CONTEXT_PPC_FLOATING_POINT (MD_CONTEXT_PPC | 0x00000008)
 
122
#define MD_CONTEXT_PPC_VECTOR         (MD_CONTEXT_PPC | 0x00000020)
 
123
 
 
124
#define MD_CONTEXT_PPC_FULL           MD_CONTEXT_PPC_BASE
 
125
#define MD_CONTEXT_PPC_ALL            (MD_CONTEXT_PPC_FULL | \
 
126
                                       MD_CONTEXT_PPC_FLOATING_POINT | \
 
127
                                       MD_CONTEXT_PPC_VECTOR)
 
128
 
 
129
#endif /* GOOGLE_BREAKPAD_COMMON_MINIDUMP_CPU_PPC64_H__ */