~ubuntu-branches/ubuntu/trusty/enigmail/trusty-security

« back to all changes in this revision

Viewing changes to mfbt/Assertions.cpp

  • Committer: Package Import Robot
  • Author(s): Chris Coulson
  • Date: 2012-11-12 16:36:01 UTC
  • mfrom: (0.12.15)
  • Revision ID: package-import@ubuntu.com-20121112163601-q983hiwz8s1bp10x
Tags: 2:1.4.6-0ubuntu1
* New upstream release v1.4.6
* Drop unneeded patches
  - remove debian/patches/correct-version-number.diff
  - remove debian/patches/dont_register_cids_multiple_times.diff
  - update debian/patches/series
* Support building in an objdir
  - update debian/rules

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2
 
 * vim: set ts=8 sw=4 et tw=99 ft=cpp:
3
 
 *
4
 
 * ***** BEGIN LICENSE BLOCK *****
5
 
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
6
 
 *
7
 
 * The contents of this file are subject to the Mozilla Public License Version
8
 
 * 1.1 (the "License"); you may not use this file except in compliance with
9
 
 * the License. You may obtain a copy of the License at:
10
 
 * http://www.mozilla.org/MPL/
11
 
 *
12
 
 * Software distributed under the License is distributed on an "AS IS" basis,
13
 
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
14
 
 * for the specific language governing rights and limitations under the
15
 
 * License.
16
 
 *
17
 
 * The Original Code is Mozilla Code.
18
 
 *
19
 
 * The Initial Developer of the Original Code is
20
 
 *   The Mozilla Foundation
21
 
 * Portions created by the Initial Developer are Copyright (C) 2012
22
 
 * the Initial Developer. All Rights Reserved.
23
 
 *
24
 
 * Contributor(s):
25
 
 *   Mike Hommey <mh@glandium.org>
26
 
 *
27
 
 * Alternatively, the contents of this file may be used under the terms of
28
 
 * either the GNU General Public License Version 2 or later (the "GPL"), or
29
 
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
30
 
 * in which case the provisions of the GPL or the LGPL are applicable instead
31
 
 * of those above. If you wish to allow use of your version of this file only
32
 
 * under the terms of either the GPL or the LGPL, and not to allow others to
33
 
 * use your version of this file under the terms of the MPL, indicate your
34
 
 * decision by deleting the provisions above and replace them with the notice
35
 
 * and other provisions required by the GPL or the LGPL. If you do not delete
36
 
 * the provisions above, a recipient may use your version of this file under
37
 
 * the terms of any one of the MPL, the GPL or the LGPL.
38
 
 *
39
 
 * ***** END LICENSE BLOCK ***** */
40
 
 
41
 
#include "mozilla/Attributes.h"
42
 
#include "mozilla/Types.h"
43
 
 
44
 
#include <cstdio>
45
 
#include <cstdlib>
46
 
#ifndef WIN32
47
 
#include <signal.h>
48
 
#endif
49
 
 
50
 
/* Implementations of runtime and static assertion macros for C and C++. */
51
 
 
52
 
extern "C" {
53
 
 
54
 
MOZ_EXPORT_API(void)
55
 
MOZ_Crash()
56
 
{
57
 
  /*
58
 
   * We write 123 here so that the machine code for this function is
59
 
   * unique. Otherwise the linker, trying to be smart, might use the
60
 
   * same code for MOZ_Crash and for some other function. That
61
 
   * messes up the signature in minidumps.
62
 
   */
63
 
 
64
 
#if defined(WIN32)
65
 
  /*
66
 
   * We used to call DebugBreak() on Windows, but amazingly, it causes
67
 
   * the MSVS 2010 debugger not to be able to recover a call stack.
68
 
   */
69
 
  *((volatile int *) NULL) = 123;
70
 
  exit(3);
71
 
#elif defined(__APPLE__)
72
 
  /*
73
 
   * On Mac OS X, Breakpad ignores signals. Only real Mach exceptions are
74
 
   * trapped.
75
 
   */
76
 
  *((volatile int *) NULL) = 123;  /* To continue from here in GDB: "return" then "continue". */
77
 
  raise(SIGABRT);  /* In case above statement gets nixed by the optimizer. */
78
 
#else
79
 
  raise(SIGABRT);  /* To continue from here in GDB: "signal 0". */
80
 
#endif
81
 
}
82
 
 
83
 
MOZ_EXPORT_API(void)
84
 
MOZ_Assert(const char* s, const char* file, int ln)
85
 
{
86
 
  fprintf(stderr, "Assertion failure: %s, at %s:%d\n", s, file, ln);
87
 
  fflush(stderr);
88
 
  MOZ_Crash();
89
 
}
90
 
 
91
 
}