blob: dd6d05e721d4118179ff8662dc0020a75caed525 [file] [log] [blame]
# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
executable("dash") {
if (is_fuchsia) {
fdio_config = [ "//build/config/fuchsia:fdio_config" ]
if (configs + fdio_config - fdio_config != configs) {
configs -= fdio_config
}
}
output_name = "sh"
sources = [
"src/alias.c",
"src/arith_yacc.c",
"src/arith_yylex.c",
"src/bltin/printf.c",
"src/bltin/test.c",
"src/bltin/times.c",
"src/bltin/zircon.c",
"src/builtins.c",
"src/cd.c",
"src/error.c",
"src/eval.c",
"src/exec.c",
"src/expand.c",
"src/init.c",
"src/input.c",
"src/jobs.c",
"src/main.c",
"src/memalloc.c",
"src/miscbltin.c",
"src/mystring.c",
"src/nodes.c",
"src/options.c",
"src/output.c",
"src/output.h",
"src/parser.c",
"src/process.c",
"src/pty_fuchsia.cc",
"src/redir.c",
"src/show.c",
"src/signames.c",
"src/syntax.c",
"src/system.c",
"src/tab.c",
"src/trap.c",
"src/var.c",
]
configs += [
":config",
"//build/config/fuchsia:static_cpp_standard_library",
]
deps = [
"//sdk/fidl/fuchsia.device.manager:fuchsia.device.manager_c",
"//sdk/fidl/fuchsia.hardware.power.statecontrol:fuchsia.hardware.power.statecontrol_c",
"//sdk/fidl/fuchsia.hardware.pty:fuchsia.hardware.pty_c",
"//sdk/fidl/fuchsia.hardware.pty:fuchsia.hardware.pty_llcpp",
"//sdk/fidl/fuchsia.kernel:fuchsia.kernel_c",
"//sdk/lib/fdio",
"//src/lib/ddk:ddk-device-headers",
"//zircon/system/ulib/fidl",
"//zircon/system/ulib/fidl:fidl_base",
"//zircon/system/ulib/pretty",
"//zircon/system/ulib/zircon-internal",
"//zircon/third_party/ulib/linenoise",
]
# TODO(fxbug.dev/97323): Remove this after fixing the leak.
deps += [ "//build/config/sanitizers:suppress-lsan.DO-NOT-USE-THIS" ]
# TODO(https://fxbug.dev/41901): Resolve this UB and remove.
#
# ../../zircon/third_party/uapp/dash/src/memalloc.c:229:23: runtime error: index 1856 out of bounds for type 'char [504]'
# #0 0x0000426934205b10 in growstackblock() ../../zircon/third_party/uapp/dash/src/memalloc.c:229 <<application>>+0x58b10
# #1.2 0x000040a519a6f3c0 in ubsan_GetStackTrace() compiler-rt/lib/ubsan/ubsan_diag.cpp:43 <libclang_rt.asan.so>+0x363c0
# #1.1 0x000040a519a6f3c0 in MaybePrintStackTrace() compiler-rt/lib/ubsan/ubsan_diag.cpp:53 <libclang_rt.asan.so>+0x363c0
# #1 0x000040a519a6f3c0 in ~ScopedReport() compiler-rt/lib/ubsan/ubsan_diag.cpp:389 <libclang_rt.asan.so>+0x363c0
# #2 0x000040a519a71048 in handleOutOfBoundsImpl() compiler-rt/lib/ubsan/ubsan_handlers.cpp:394 <libclang_rt.asan.so>+0x38048
# #3 0x000040a519a70f40 in compiler-rt/lib/ubsan/ubsan_handlers.cpp:399 <libclang_rt.asan.so>+0x37f40
# #4 0x0000426934205b10 in growstackblock() ../../zircon/third_party/uapp/dash/src/memalloc.c:229 <<application>>+0x58b10
# #5 0x0000426934205be4 in makestrspace(size_t, char*) ../../zircon/third_party/uapp/dash/src/memalloc.c:285 <<application>>+0x58be4
# #6 0x0000426934215940 in readtoken1(int, const char*, char*, int) ../../zircon/third_party/uapp/dash/src/parser.c:909 <<application>>+0x68940
# #7 0x000042693421daa0 in xxreadtoken() ../../zircon/third_party/uapp/dash/src/parser.c:827 <<application>>+0x70aa0
# #8 0x00004269342196c0 in readtoken() ../../zircon/third_party/uapp/dash/src/parser.c:688 <<application>>+0x6c6c0
# #9.1 0x000042693421a430 in simplecmd() ../../zircon/third_party/uapp/dash/src/parser.c:507 <<application>>+0x6d430
# #9 0x000042693421a430 in command() ../../zircon/third_party/uapp/dash/src/parser.c:456 <<application>>+0x6d430
# #10 0x0000426934219d30 in pipeline() ../../zircon/third_party/uapp/dash/src/parser.c:258 <<application>>+0x6cd30
# #11 0x00004269342140b0 in list(int) ../../zircon/third_party/uapp/dash/src/parser.c:169 <<application>>+0x670b0
# #12 0x0000426934213fa4 in parsecmd(int) ../../zircon/third_party/uapp/dash/src/parser.c:141 <<application>>+0x66fa4
# #13 0x00004269341e5c2c in evalstring(char*, int) ../../zircon/third_party/uapp/dash/src/eval.c:169 <<application>>+0x38c2c
# #14 0x0000426934203b84 in main(int, char**) ../../zircon/third_party/uapp/dash/src/main.c:182 <<application>>+0x56b84
# #15 0x000080e04466b654 in start_main(const start_params*) ../../zircon/third_party/ulib/musl/src/env/__libc_start_main.c:139 <libc.so>+0xcc654
# #16 0x000080e04466bf24 in __libc_start_main(zx_handle_t, int (*)(int, char**, char**)) ../../zircon/third_party/ulib/musl/src/env/__libc_start_main.c:256 <libc.so>+0xccf24
# #17 0x000042693422b7c0 in _start(zx_handle_t) ../../zircon/system/ulib/c/Scrt1.cc:7 <<application>>+0x7e7c0
#
# TODO(https://fxbug.dev/84060): Resolve this UB and remove.
#
# ../../zircon/third_party/uapp/dash/src/jobs.c:808:34:runtime error: applying zero offset to null pointer
# #0.1 0x000021e48df762ad in growjobtab() ../../zircon/third_party/uapp/dash/src/jobs.c:808 <<application>>+0x5c2ad
# #0 0x000021e48df762ad in makejob(node*, int) ../../zircon/third_party/uapp/dash/src/jobs.c:758 <<application>>+0x5c2ad
# #1.2 0x0000211daf853e37 in ubsan_GetStackTrace() compiler-rt/lib/ubsan/ubsan_diag.cpp:55 <libclang_rt.asan.so>+0x3be37
# #1.1 0x0000211daf853e37 in MaybePrintStackTrace() compiler-rt/lib/ubsan/ubsan_diag.cpp:53 <libclang_rt.asan.so>+0x3be37
# #1 0x0000211daf853e37 in ~ScopedReport() compiler-rt/lib/ubsan/ubsan_diag.cpp:389 <libclang_rt.asan.so>+0x3be37
# #2 0x0000211daf8581fb in handlePointerOverflowImpl() compiler-rt/lib/ubsan/ubsan_handlers.cpp:809 <libclang_rt.asan.so>+0x401fb
# #3 0x0000211daf857d6d in compiler-rt/lib/ubsan/ubsan_handlers.cpp:815 <libclang_rt.asan.so>+0x3fd6d
# #4.1 0x000021e48df762ad in growjobtab() ../../zircon/third_party/uapp/dash/src/jobs.c:808 <<application>>+0x5c2ad
# #4 0x000021e48df762ad in makejob(node*, int) ../../zircon/third_party/uapp/dash/src/jobs.c:758 <<application>>+0x5c2ad
# #5 0x000021e48df5a316 in evalpipe(node*, int) ../../zircon/third_party/uapp/dash/src/eval.c:572 <<application>>+0x40316
# #6 0x000021e48df55a66 in evaltree(node*, int) ../../zircon/third_party/uapp/dash/src/eval.c:280 <<application>>+0x3ba66
# #7 0x000021e48df77d49 in cmdloop(int) ../../zircon/third_party/uapp/dash/src/main.c:271 <<application>>+0x5dd49
# #8 0x000021e48df7727e in main(int, char**) ../../zircon/third_party/uapp/dash/src/main.c:186 <<application>>+0x5d27e
# #9 0x0000418883488f89 in start_main(const start_params*) ../../zircon/third_party/ulib/musl/src/env/__libc_start_main.c:139 <libc.so>+0xd2f89
# #10 0x0000418883489991 in __libc_start_main(zx_handle_t, int (*)(int, char**, char**)) ../../zircon/third_party/ulib/musl/src/env/__libc_start_main.c:214 <libc.so>+0xd3991
# #11 0x000021e48dfa3590 in _start(zx_handle_t) ../../zircon/system/ulib/c/Scrt1.cc:7 <<application>>+0x89590
#
# At the time of writing, our dash import dates to 2016. Perhaps this has been fixed upstream? We should try updating it.
configs += [ "//build/config/sanitizers:suppress-ubsan.DO-NOT-USE-THIS" ]
# Suppress warnings the dash code doesn't comply with.
configs += [ "//build/config:Wno-conversion" ]
configs += [ "//build/config:Wno-implicit-fallthrough" ]
configs += [ "//build/config:Wno-unused-function" ]
configs += [ "//build/config:Wno-unused-but-set-variable" ]
configs += [ "//build/config:Wno-unused-but-set-parameter" ]
# TODO(fxbug.dev/69585): This target uses raw zx::channel with LLCPP which is deprecated.
# Please migrate to typed channel APIs (fidl::ClientEnd<T>, fidl::ServerEnd<T>).
# See linked bug for details.
configs += [ "//build/cpp:fidl-llcpp-deprecated-raw-channels" ]
# TODO(fxbug.dev/95833): This target uses the deprecated C bindings.
# Consider switching to the C++ bindings. See linked bug for details.
configs += [ "//build/c:fidl-deprecated-c-bindings" ]
}
source_set("output_h") {
public = [ "src/output.h" ]
}
config("config") {
visibility = [ ":*" ]
defines = [
"BSD",
"DEBUG",
"FLUSHERR",
"IFS_BROKEN",
"JOBS=0",
"SHELL",
"USE_GLIBC_STDIO",
"USE_LINENOISE",
"_GNU_SOURCE",
]
include_dirs = [ "src" ]
cflags = [
"-include",
rebase_path("config.h", root_build_dir),
]
# TODO: Fix Warnings
cflags_c = [
"-Wno-strict-prototypes",
"-Wno-sign-compare",
"-Wno-logical-not-parentheses",
]
if (false) { # is_gcc
cflags_c += [ "-Wno-discarded-qualifiers" ]
} else {
cflags_c += [
"-Wno-incompatible-pointer-types-discards-qualifiers",
"-Wno-gnu-designator",
"-Wno-format-security",
"-Wno-string-plus-int",
]
}
}