1#include "libgcc_tm.h"
2
3/* This shim is special, it needs to be built for Mac OSX 10.6
4   regardless of the current system version.
5   We must also build it to use the unwinder layout that was
6   present for 10.6 (and not update that).
7   So we copy the referenced structures from unwind-dw2-fde.h
8   to avoid pulling in newer system headers and/or changed
9   layouts.  */
10struct dwarf_eh_bases
11{
12  void *tbase;
13  void *dbase;
14  void *func;
15};
16
17typedef          int  sword __attribute__ ((mode (SI)));
18typedef unsigned int  uword __attribute__ ((mode (SI)));
19
20/* The first few fields of an FDE.  */
21struct dwarf_fde
22{
23  uword length;
24  sword CIE_delta;
25  unsigned char pc_begin[];
26} __attribute__ ((packed, aligned (__alignof__ (void *))));
27
28typedef struct dwarf_fde fde;
29
30extern const fde * _Unwind_Find_FDE (void *, struct dwarf_eh_bases *);
31
32void *
33_darwin10_Unwind_FindEnclosingFunction (void *pc)
34{
35  struct dwarf_eh_bases bases;
36  const struct dwarf_fde *fde = _Unwind_Find_FDE (pc-1, &bases);
37  if (fde)
38    return bases.func;
39  return (void *) 0;
40}
41