Home | History | Annotate | Download | only in libunwind
      1 //
      2 // Copyright (C) 2014 The Android Open Source Project
      3 //
      4 // Licensed under the Apache License, Version 2.0 (the "License");
      5 // you may not use this file except in compliance with the License.
      6 // You may obtain a copy of the License at
      7 //
      8 //      http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unless required by applicable law or agreed to in writing, software
     11 // distributed under the License is distributed on an "AS IS" BASIS,
     12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 // See the License for the specific language governing permissions and
     14 // limitations under the License.
     15 //
     16 
     17 // Set to true to enable a debug build of the libraries.
     18 // To control what is logged, set the environment variable UNW_DEBUG_LEVEL=x,
     19 // where x controls the verbosity (from 1 to 20).
     20 libunwind_debug = ["false"]
     21 
     22 libunwind_common_cppflags = [
     23     "-Wno-old-style-cast",
     24 ]
     25 
     26 libunwind_common_cflags = [
     27     "-Wno-unused-parameter",
     28     "-Werror",
     29 ]
     30 
     31 // gcc 4.8 appears to be overeager declaring that a variable is uninitialized,
     32 // under certain circumstances. Turn off this warning only for target so that
     33 // coverage is still present for the host code. When the entire build system
     34 // is switched to 4.9, then this can be removed.
     35 libunwind_common_cflags_target = ["-Wno-maybe-uninitialized"]
     36 
     37 // src/mi/backtrace.c is misdetected as a bogus header guard by clang 3.5
     38 // src/x86_64/Gstash_frame.c has unnecessary calls to labs.
     39 libunwind_common_clang_cflags = [
     40     "-Wno-header-guard",
     41     "-Wno-absolute-value",
     42     // The latest clang (r230699) does not allow SP/PC to be declared in inline asm lists.
     43     "-Wno-inline-asm",
     44 ]
     45 
     46 libunwind_common_cflags += [
     47     "-DHAVE_CONFIG_H",
     48     "-D_GNU_SOURCE",
     49     "-DNDEBUG",
     50 ]
     51 
     52 libunwind_common_debug_cflags = [
     53     "-UNDEBUG",
     54     "-DDEBUG",
     55     "-U_FORTIFY_SOURCE",
     56 ]
     57 
     58 libunwind_common_c_local_includes = [
     59     "src",
     60     "include",
     61 ]
     62 
     63 libunwind_common_arch_includes = {
     64     arm: {
     65         local_include_dirs: ["include/tdep-arm"],
     66     },
     67     arm64: {
     68         local_include_dirs: ["include/tdep-aarch64"],
     69     },
     70     mips: {
     71         local_include_dirs: ["include/tdep-mips"],
     72     },
     73     mips64: {
     74         local_include_dirs: ["include/tdep-mips"],
     75     },
     76     x86: {
     77         local_include_dirs: ["include/tdep-x86"],
     78     },
     79     x86_64: {
     80         local_include_dirs: ["include/tdep-x86_64"],
     81     },
     82 }
     83 
     84 //-----------------------------------------------------------------------
     85 // libunwind shared and static library
     86 //-----------------------------------------------------------------------
     87 
     88 cc_library {
     89     name: "libunwind",
     90     host_supported: true,
     91     srcs: [
     92         "src/mi/init.c",
     93         "src/mi/flush_cache.c",
     94         "src/mi/mempool.c",
     95         "src/mi/strerror.c",
     96         "src/mi/backtrace.c",
     97         "src/mi/dyn-cancel.c",
     98         "src/mi/dyn-info-list.c",
     99         "src/mi/dyn-register.c",
    100         "src/mi/map.c",
    101         "src/mi/Lmap.c",
    102         "src/mi/Ldyn-extract.c",
    103         "src/mi/Lfind_dynamic_proc_info.c",
    104         "src/mi/Lget_proc_info_by_ip.c",
    105         "src/mi/Lget_proc_name.c",
    106         "src/mi/Lput_dynamic_unwind_info.c",
    107         "src/mi/Ldestroy_addr_space.c",
    108         "src/mi/Lget_reg.c",
    109         "src/mi/Lset_reg.c",
    110         "src/mi/Lget_fpreg.c",
    111         "src/mi/Lset_fpreg.c",
    112         "src/mi/Lset_caching_policy.c",
    113         "src/mi/Gdyn-extract.c",
    114         "src/mi/Gdyn-remote.c",
    115         "src/mi/Gfind_dynamic_proc_info.c",
    116         "src/mi/Gget_accessors.c",
    117         "src/mi/Gget_proc_info_by_ip.c",
    118         "src/mi/Gget_proc_name.c",
    119         "src/mi/Gput_dynamic_unwind_info.c",
    120         "src/mi/Gdestroy_addr_space.c",
    121         "src/mi/Gget_reg.c",
    122         "src/mi/Gset_reg.c",
    123         "src/mi/Gget_fpreg.c",
    124         "src/mi/Gset_fpreg.c",
    125         "src/mi/Gset_caching_policy.c",
    126         "src/dwarf/Lexpr.c",
    127         "src/dwarf/Lfde.c",
    128         "src/dwarf/Lparser.c",
    129         "src/dwarf/Lpe.c",
    130         "src/dwarf/Lstep_dwarf.c",
    131         "src/dwarf/Lfind_proc_info-lsb.c",
    132         "src/dwarf/Lfind_unwind_table.c",
    133         "src/dwarf/Gexpr.c",
    134         "src/dwarf/Gfde.c",
    135         "src/dwarf/Gfind_proc_info-lsb.c",
    136         "src/dwarf/Gfind_unwind_table.c",
    137         "src/dwarf/Gparser.c",
    138         "src/dwarf/Gpe.c",
    139         "src/dwarf/Gstep_dwarf.c",
    140         "src/dwarf/global.c",
    141         "src/os-common.c",
    142         "src/os-linux.c",
    143         "src/Los-common.c",
    144 
    145         // ptrace files for remote unwinding.
    146         "src/ptrace/_UPT_accessors.c",
    147         "src/ptrace/_UPT_access_fpreg.c",
    148         "src/ptrace/_UPT_access_mem.c",
    149         "src/ptrace/_UPT_access_reg.c",
    150         "src/ptrace/_UPT_create.c",
    151         "src/ptrace/_UPT_destroy.c",
    152         "src/ptrace/_UPT_find_proc_info.c",
    153         "src/ptrace/_UPT_get_dyn_info_list_addr.c",
    154         "src/ptrace/_UPT_put_unwind_info.c",
    155         "src/ptrace/_UPT_get_proc_name.c",
    156         "src/ptrace/_UPT_reg_offset.c",
    157         "src/ptrace/_UPT_resume.c",
    158      ],
    159 
    160     cflags: libunwind_common_cflags,
    161     clang_cflags: libunwind_common_clang_cflags,
    162     local_include_dirs: libunwind_common_c_local_includes,
    163 
    164     arch: {
    165         arm: {
    166             srcs: [
    167                 "src/arm/is_fpreg.c",
    168                 "src/arm/regname.c",
    169                 "src/arm/Gcreate_addr_space.c",
    170                 "src/arm/Gget_proc_info.c",
    171                 "src/arm/Gget_save_loc.c",
    172                 "src/arm/Gglobal.c",
    173                 "src/arm/Ginit.c",
    174                 "src/arm/Ginit_local.c",
    175                 "src/arm/Ginit_remote.c",
    176                 "src/arm/Gregs.c",
    177                 "src/arm/Gresume.c",
    178                 "src/arm/Gstep.c",
    179                 "src/arm/Lcreate_addr_space.c",
    180                 "src/arm/Lget_proc_info.c",
    181                 "src/arm/Lget_save_loc.c",
    182                 "src/arm/Lglobal.c",
    183                 "src/arm/Linit.c",
    184                 "src/arm/Linit_local.c",
    185                 "src/arm/Linit_remote.c",
    186                 "src/arm/Lregs.c",
    187                 "src/arm/Lresume.c",
    188                 "src/arm/Lstep.c",
    189 
    190                 "src/arm/getcontext.S",
    191                 "src/arm/Gis_signal_frame.c",
    192                 "src/arm/Gex_tables.c",
    193                 "src/arm/Lis_signal_frame.c",
    194                 "src/arm/Lex_tables.c",
    195             ],
    196         },
    197         arm64: {
    198             srcs: [
    199                 "src/aarch64/is_fpreg.c",
    200                 "src/aarch64/regname.c",
    201                 "src/aarch64/Gcreate_addr_space.c",
    202                 "src/aarch64/Gget_proc_info.c",
    203                 "src/aarch64/Gget_save_loc.c",
    204                 "src/aarch64/Gglobal.c",
    205                 "src/aarch64/Ginit.c",
    206                 "src/aarch64/Ginit_local.c",
    207                 "src/aarch64/Ginit_remote.c",
    208                 "src/aarch64/Gregs.c",
    209                 "src/aarch64/Gresume.c",
    210                 "src/aarch64/Gstep.c",
    211                 "src/aarch64/Lcreate_addr_space.c",
    212                 "src/aarch64/Lget_proc_info.c",
    213                 "src/aarch64/Lget_save_loc.c",
    214                 "src/aarch64/Lglobal.c",
    215                 "src/aarch64/Linit.c",
    216                 "src/aarch64/Linit_local.c",
    217                 "src/aarch64/Linit_remote.c",
    218                 "src/aarch64/Lregs.c",
    219                 "src/aarch64/Lresume.c",
    220                 "src/aarch64/Lstep.c",
    221 
    222                 "src/aarch64/Gis_signal_frame.c",
    223                 "src/aarch64/Lis_signal_frame.c",
    224             ],
    225         },
    226         mips: {
    227             srcs: [
    228                 "src/mips/is_fpreg.c",
    229                 "src/mips/regname.c",
    230                 "src/mips/Gcreate_addr_space.c",
    231                 "src/mips/Gget_proc_info.c",
    232                 "src/mips/Gget_save_loc.c",
    233                 "src/mips/Gglobal.c",
    234                 "src/mips/Ginit.c",
    235                 "src/mips/Ginit_local.c",
    236                 "src/mips/Ginit_remote.c",
    237                 "src/mips/Gregs.c",
    238                 "src/mips/Gresume.c",
    239                 "src/mips/Gstep.c",
    240                 "src/mips/Lcreate_addr_space.c",
    241                 "src/mips/Lget_proc_info.c",
    242                 "src/mips/Lget_save_loc.c",
    243                 "src/mips/Lglobal.c",
    244                 "src/mips/Linit.c",
    245                 "src/mips/Linit_local.c",
    246                 "src/mips/Linit_remote.c",
    247                 "src/mips/Lregs.c",
    248                 "src/mips/Lresume.c",
    249                 "src/mips/Lstep.c",
    250 
    251                 "src/mips/getcontext-android.S",
    252                 "src/mips/Gis_signal_frame.c",
    253                 "src/mips/Lis_signal_frame.c",
    254             ],
    255         },
    256         // mips and mips64 use the same sources but define _MIP_SIM differently
    257         // to change the behavior.
    258         //   mips uses o32 abi (_MIPS_SIM == _ABIO32).
    259         //   mips64 uses n64 abi (_MIPS_SIM == _ABI64).
    260         mips64: {
    261             srcs: [
    262                 "src/mips/is_fpreg.c",
    263                 "src/mips/regname.c",
    264                 "src/mips/Gcreate_addr_space.c",
    265                 "src/mips/Gget_proc_info.c",
    266                 "src/mips/Gget_save_loc.c",
    267                 "src/mips/Gglobal.c",
    268                 "src/mips/Ginit.c",
    269                 "src/mips/Ginit_local.c",
    270                 "src/mips/Ginit_remote.c",
    271                 "src/mips/Gregs.c",
    272                 "src/mips/Gresume.c",
    273                 "src/mips/Gstep.c",
    274                 "src/mips/Lcreate_addr_space.c",
    275                 "src/mips/Lget_proc_info.c",
    276                 "src/mips/Lget_save_loc.c",
    277                 "src/mips/Lglobal.c",
    278                 "src/mips/Linit.c",
    279                 "src/mips/Linit_local.c",
    280                 "src/mips/Linit_remote.c",
    281                 "src/mips/Lregs.c",
    282                 "src/mips/Lresume.c",
    283                 "src/mips/Lstep.c",
    284 
    285                 "src/mips/getcontext-android.S",
    286                 "src/mips/Gis_signal_frame.c",
    287                 "src/mips/Lis_signal_frame.c",
    288             ],
    289         },
    290         x86: {
    291             srcs: [
    292                 "src/x86/is_fpreg.c",
    293                 "src/x86/regname.c",
    294                 "src/x86/Gcreate_addr_space.c",
    295                 "src/x86/Gget_proc_info.c",
    296                 "src/x86/Gget_save_loc.c",
    297                 "src/x86/Gglobal.c",
    298                 "src/x86/Ginit.c",
    299                 "src/x86/Ginit_local.c",
    300                 "src/x86/Ginit_remote.c",
    301                 "src/x86/Gregs.c",
    302                 "src/x86/Gresume.c",
    303                 "src/x86/Gstep.c",
    304                 "src/x86/Lcreate_addr_space.c",
    305                 "src/x86/Lget_proc_info.c",
    306                 "src/x86/Lget_save_loc.c",
    307                 "src/x86/Lglobal.c",
    308                 "src/x86/Linit.c",
    309                 "src/x86/Linit_local.c",
    310                 "src/x86/Linit_remote.c",
    311                 "src/x86/Lregs.c",
    312                 "src/x86/Lresume.c",
    313                 "src/x86/Lstep.c",
    314 
    315                 "src/x86/getcontext-linux.S",
    316                 "src/x86/Gos-linux.c",
    317                 "src/x86/Los-linux.c",
    318             ],
    319         },
    320         x86_64: {
    321             srcs: [
    322                 "src/x86_64/is_fpreg.c",
    323                 "src/x86_64/regname.c",
    324                 "src/x86_64/Gcreate_addr_space.c",
    325                 "src/x86_64/Gget_proc_info.c",
    326                 "src/x86_64/Gget_save_loc.c",
    327                 "src/x86_64/Gglobal.c",
    328                 "src/x86_64/Ginit.c",
    329                 "src/x86_64/Ginit_local.c",
    330                 "src/x86_64/Ginit_remote.c",
    331                 "src/x86_64/Gregs.c",
    332                 "src/x86_64/Gresume.c",
    333                 "src/x86_64/Gstep.c",
    334                 "src/x86_64/Lcreate_addr_space.c",
    335                 "src/x86_64/Lget_proc_info.c",
    336                 "src/x86_64/Lget_save_loc.c",
    337                 "src/x86_64/Lglobal.c",
    338                 "src/x86_64/Linit.c",
    339                 "src/x86_64/Linit_local.c",
    340                 "src/x86_64/Linit_remote.c",
    341                 "src/x86_64/Lregs.c",
    342                 "src/x86_64/Lresume.c",
    343                 "src/x86_64/Lstep.c",
    344 
    345                 "src/x86_64/getcontext.S",
    346                 "src/x86_64/Gstash_frame.c",
    347                 "src/x86_64/Gtrace.c",
    348                 "src/x86_64/Gos-linux.c",
    349                 "src/x86_64/Lstash_frame.c",
    350                 "src/x86_64/Ltrace.c",
    351                 "src/x86_64/Los-linux.c",
    352                 "src/x86_64/setcontext.S",
    353             ],
    354         },
    355     } + libunwind_common_arch_includes,
    356 
    357     multilib: {
    358         lib32: {
    359             srcs: ["src/elf32.c"],
    360         },
    361         lib64: {
    362             srcs: ["src/elf64.c"],
    363         },
    364     },
    365 
    366     target: {
    367         android: {
    368             shared_libs: ["libdl"],
    369             cflags: libunwind_common_cflags_target,
    370         },
    371         host: {
    372             ldflags: ["-nostdlib"],
    373             host_ldlibs: [
    374                 "-lc",
    375                 "-lpthread",
    376             ],
    377         },
    378         darwin: {
    379             enabled: false,
    380         },
    381     },
    382 
    383     export_include_dirs: ["include"],
    384     stl: "none",
    385 
    386     shared_libs: ["liblzma"],
    387 
    388     /*debug: {
    389     shared_libs: ["liblog"],
    390     cflags: libunwind_common_debug_cflags,
    391     },*/
    392 }
    393 
    394 //-----------------------------------------------------------------------
    395 // libunwindbacktrace static library
    396 //-----------------------------------------------------------------------
    397 cc_library_static {
    398     name: "libunwindbacktrace",
    399     host_supported: true,
    400     srcs: [
    401         "src/unwind/BacktraceWrapper.c",
    402         "src/unwind/DeleteException.c",
    403         "src/unwind/FindEnclosingFunction.c",
    404         "src/unwind/ForcedUnwind.c",
    405         "src/unwind/GetBSP.c",
    406         "src/unwind/GetCFA.c",
    407         "src/unwind/GetDataRelBase.c",
    408         "src/unwind/GetGR.c",
    409         "src/unwind/GetIP.c",
    410         "src/unwind/GetIPInfo.c",
    411         "src/unwind/GetLanguageSpecificData.c",
    412         "src/unwind/GetRegionStart.c",
    413         "src/unwind/GetTextRelBase.c",
    414         "src/unwind/RaiseException.c",
    415         "src/unwind/Resume.c",
    416         "src/unwind/Resume_or_Rethrow.c",
    417         "src/unwind/SetGR.c",
    418         "src/unwind/SetIP.c",
    419     ],
    420 
    421     cflags: libunwind_common_cflags + [
    422         "-Wno-old-style-declaration",
    423         "-fvisibility=hidden",
    424     ],
    425 
    426     clang_cflags: libunwind_common_clang_cflags,
    427     local_include_dirs: libunwind_common_c_local_includes,
    428 
    429     arch: libunwind_common_arch_includes,
    430 
    431     target: {
    432         android: {
    433             cflags: libunwind_common_cflags_target,
    434         },
    435         darwin: {
    436             enabled: false,
    437         },
    438     },
    439 
    440     whole_static_libs: ["libunwind"],
    441     stl: "none",
    442 }
    443 
    444 /*
    445 //-----------------------------------------------------------------------
    446 // libunwind testing
    447 //-----------------------------------------------------------------------
    448 libunwind-unit-tests_cflags = [
    449 "-fno-builtin",
    450 "-O0",
    451 "-g",
    452 ]
    453 
    454 libunwind-unit-tests_c_local_includes = ["include"]
    455 
    456 libunwind-unit-tests_src_files = ["android/tests/local_test.cpp"]
    457 
    458 libunwind-unit-tests_shared_libraries = ["libunwind"]
    459 
    460 libunwind-unit-tests_multilib = ["both"]
    461 module = ["libunwind-unit-tests"]
    462 module_tag = ["optional"]
    463 build_type = ["target"]
    464 build_target = ["NATIVE_TEST"]
    465 // ANDROIDMK TRANSLATION ERROR: unsupported include
    466 // include $(LOCAL_PATH)/Android.build.mk
    467 build_type = ["host"]
    468 // ANDROIDMK TRANSLATION ERROR: unsupported include
    469 // include $(LOCAL_PATH)/Android.build.mk
    470 // Run the unit tests built for x86 or x86_64.
    471 // ANDROIDMK TRANSLATION ERROR: unsupported conditional
    472 // ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64))
    473 // ANDROIDMK TRANSLATION ERROR: unsupported conditional
    474 // ifneq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86))
    475 LINKER = ["linker64"]
    476 TEST_SUFFIX = ["64"]
    477 // ANDROIDMK TRANSLATION ERROR: else from unsupported contitional
    478 // else
    479 LINKER = ["linker"]
    480 TEST_SUFFIX = ["32"]
    481 // ANDROIDMK TRANSLATION ERROR: endif from unsupported contitional
    482 // endif
    483 
    484 // ANDROIDMK TRANSLATION ERROR: endif from unsupported contitional
    485 // endif
    486 */
    487