blob: cf2904cc585e3f3462d9a71048884dd61cef5d6f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
/*
* SPDX license identifier: MPL-2.0
*
* Copyright (C) 2011-2015, BMW AG
*
* This file is part of GENIVI Project DLT - Diagnostic Log and Trace.
*
* This Source Code Form is subject to the terms of the
* Mozilla Public License (MPL), v. 2.0.
* If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/.
*
* For further information see http://www.genivi.org/.
*/
/*!
* \author Magneti Marelli http://www.magnetimarelli.com
* \author Lutz Helwing <lutz_helwing@mentor.com>
*
* \copyright Copyright © 2011-2015 BMW AG. \n
* License MPL-2.0: Mozilla Public License version 2.0 http://mozilla.org/MPL/2.0/.
*
* \file dlt_cdh.h
*/
#ifndef DLT_CDH_H
#define DLT_CDH_H
#include <unistd.h>
#include <stdint.h>
#include <elf.h>
#include <sys/procfs.h>
#include <sys/user.h>
#include "dlt_cdh_streamer.h"
#define CORE_DIRECTORY "/var/core"
#define CORE_TMP_DIRECTORY "/var/core_tmp"
#define CORE_LOCK_DIRECTORY "/tmp/.core_locks"
#define CORE_MAX_FILENAME_LENGTH 255
#define MAX_PROC_NAME_LENGTH 32
#define CRASH_ID_LEN 8
#define CRASHID_FILE "/tmp/.crashid" /* the file where the white screen app will read the crashid */
#define CORE_FILE_PATTERN "%s/core.%d.%s.%d.gz"
#define CONTEXT_FILE_PATTERN "%s/context.%d.%s.%d.txt"
#define ELF_Ehdr Elf32_Ehdr
#define ELF_Phdr Elf32_Phdr
#define ELF_Shdr Elf32_Shdr
#define ELF_Nhdr Elf32_Nhdr
typedef struct
{
uint64_t pc;
uint64_t ip;
uint64_t lr;
} cdh_registers_t;
typedef struct
{
char name[MAX_PROC_NAME_LENGTH];
char threadname[MAX_PROC_NAME_LENGTH];
pid_t pid;
uint32_t timestamp;
int signal;
int can_create_coredump;
file_streamer_t streamer;
/* coredump content, for crash id generation */
ELF_Ehdr m_Ehdr;
ELF_Phdr *m_pPhdr;
char *m_Nhdr; /* buffer with all NOTE pages */
unsigned int m_note_page_size;
cdh_registers_t m_registers;
pid_t m_crashed_pid;
uint64_t m_crashid_phase1;
unsigned char m_crashid[CRASH_ID_LEN];
} proc_info_t;
cdh_status_t get_exec_name(unsigned int p_pid_str, char *p_exec_name, int p_exec_name_maxsize);
cdh_status_t write_proc_context(const proc_info_t *);
cdh_status_t treat_coredump(proc_info_t *p_proc);
cdh_status_t treat_crash_data(proc_info_t *p_proc);
cdh_status_t move_to_core_directory(proc_info_t *p_proc);
cdh_status_t check_core_directory();
#endif /* #ifndef DLT_CDH_H */
|