diff options
author | Richard Henderson <rth@redhat.com> | 2010-10-13 11:57:31 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2010-10-13 11:57:31 -0700 |
commit | bde8a146a602d86483dff9a5b0a9f34419ab3d32 (patch) | |
tree | 3c1d073f5371ed3d1591b0a5f61b529b6c5b86af /gcc/expr.c | |
parent | d1655e0b38cecbdeed551818b2406fcb39919ba7 (diff) | |
download | gcc-bde8a146a602d86483dff9a5b0a9f34419ab3d32.zip gcc-bde8a146a602d86483dff9a5b0a9f34419ab3d32.tar.gz gcc-bde8a146a602d86483dff9a5b0a9f34419ab3d32.tar.bz2 |
Centralize knowledge of eh personality routines.
From-SVN: r165433
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 24 |
1 files changed, 21 insertions, 3 deletions
@@ -10255,13 +10255,31 @@ const_vector_from_tree (tree exp) return gen_rtx_CONST_VECTOR (mode, v); } - -/* Build a decl for a EH personality function named NAME. */ +/* Build a decl for a personality function given a language prefix. */ tree -build_personality_function (const char *name) +build_personality_function (const char *lang) { + const char *unwind_and_version; tree decl, type; + char *name; + + switch (targetm.except_unwind_info ()) + { + case UI_NONE: + return NULL; + case UI_SJLJ: + unwind_and_version = "_sj0"; + break; + case UI_DWARF2: + case UI_TARGET: + unwind_and_version = "_v0"; + break; + default: + gcc_unreachable (); + } + + name = ACONCAT (("__", lang, "_personality", unwind_and_version, NULL)); type = build_function_type_list (integer_type_node, integer_type_node, long_long_unsigned_type_node, |