Changeset View
Changeset View
Standalone View
Standalone View
head/contrib/elftoolchain/addr2line/addr2line.c
Show All 19 Lines | |||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
* SUCH DAMAGE. | * SUCH DAMAGE. | ||||
*/ | */ | ||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <capsicum_helpers.h> | |||||
#include <dwarf.h> | #include <dwarf.h> | ||||
#include <err.h> | #include <err.h> | ||||
#include <fcntl.h> | #include <fcntl.h> | ||||
#include <gelf.h> | #include <gelf.h> | ||||
#include <getopt.h> | #include <getopt.h> | ||||
#include <libdwarf.h> | #include <libdwarf.h> | ||||
#include <libelftc.h> | #include <libelftc.h> | ||||
#include <libgen.h> | #include <libgen.h> | ||||
▲ Show 20 Lines • Show All 608 Lines • ▼ Show 20 Lines | if (elferr != 0) | ||||
warnx("elf_nextscn failed: %s", elf_errmsg(elferr)); | warnx("elf_nextscn failed: %s", elf_errmsg(elferr)); | ||||
errx(EXIT_FAILURE, "%s: cannot find section %s", exe, section); | errx(EXIT_FAILURE, "%s: cannot find section %s", exe, section); | ||||
} | } | ||||
int | int | ||||
main(int argc, char **argv) | main(int argc, char **argv) | ||||
{ | { | ||||
cap_rights_t rights; | |||||
Elf *e; | Elf *e; | ||||
Dwarf_Debug dbg; | Dwarf_Debug dbg; | ||||
Dwarf_Error de; | Dwarf_Error de; | ||||
const char *exe, *section; | const char *exe, *section; | ||||
char line[1024]; | char line[1024]; | ||||
int fd, i, opt; | int fd, i, opt; | ||||
exe = NULL; | exe = NULL; | ||||
Show All 40 Lines | main(int argc, char **argv) | ||||
argv += optind; | argv += optind; | ||||
argc -= optind; | argc -= optind; | ||||
if (exe == NULL) | if (exe == NULL) | ||||
exe = "a.out"; | exe = "a.out"; | ||||
if ((fd = open(exe, O_RDONLY)) < 0) | if ((fd = open(exe, O_RDONLY)) < 0) | ||||
err(EXIT_FAILURE, "%s", exe); | err(EXIT_FAILURE, "%s", exe); | ||||
if (caph_rights_limit(fd, cap_rights_init(&rights, CAP_FSTAT, | |||||
CAP_MMAP_R)) < 0) | |||||
errx(EXIT_FAILURE, "caph_rights_limit"); | |||||
caph_cache_catpages(); | |||||
if (caph_limit_stdio() < 0) | |||||
errx(EXIT_FAILURE, "failed to limit stdio rights"); | |||||
if (caph_enter() < 0) | |||||
errx(EXIT_FAILURE, "failed to enter capability mode"); | |||||
if (dwarf_init(fd, DW_DLC_READ, NULL, NULL, &dbg, &de)) | if (dwarf_init(fd, DW_DLC_READ, NULL, NULL, &dbg, &de)) | ||||
errx(EXIT_FAILURE, "dwarf_init: %s", dwarf_errmsg(de)); | errx(EXIT_FAILURE, "dwarf_init: %s", dwarf_errmsg(de)); | ||||
if (dwarf_get_elf(dbg, &e, &de) != DW_DLV_OK) | if (dwarf_get_elf(dbg, &e, &de) != DW_DLV_OK) | ||||
errx(EXIT_FAILURE, "dwarf_get_elf: %s", dwarf_errmsg(de)); | errx(EXIT_FAILURE, "dwarf_get_elf: %s", dwarf_errmsg(de)); | ||||
if (section) | if (section) | ||||
Show All 19 Lines |