File: common.h

package info (click to toggle)
llvm-toolchain-16 1%3A16.0.6-15~deb11u2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,634,820 kB
  • sloc: cpp: 6,179,261; ansic: 1,216,205; asm: 741,319; python: 196,614; objc: 75,325; f90: 49,640; lisp: 32,396; pascal: 12,286; sh: 9,394; perl: 7,442; ml: 5,494; awk: 3,523; makefile: 2,723; javascript: 1,206; xml: 886; fortran: 581; cs: 573
file content (75 lines) | stat: -rw-r--r-- 2,232 bytes parent folder | download | duplicates (2)
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
#include <assert.h>
#include <stdint.h>
#include <stdio.h>

int main() { printf("main\n"); }

typedef unsigned long uptr;

#define FN(X)                                                                  \
  if (pc == reinterpret_cast<uptr>(X))                                         \
  return #X

const char *symbolize(uptr pc) {
  FUNCTIONS;
  return nullptr;
}

template <typename T> T consume(const char *&pos, const char *end) {
  T v = *reinterpret_cast<const T *>(pos);
  pos += sizeof(T);
  assert(pos <= end);
  return v;
}

uint32_t meta_version;
const char *meta_start;
const char *meta_end;

extern "C" {
void __sanitizer_metadata_covered_add(uint32_t version, const char *start,
                                      const char *end) {
  printf("metadata add version %u\n", version);
  for (const char *pos = start; pos < end;) {
    const uptr base = reinterpret_cast<uptr>(pos);
    const long offset = (version & (1 << 16)) ? consume<long>(pos, end)
                                              : consume<int>(pos, end);
    const uint32_t size = consume<uint32_t>(pos, end);
    const uint32_t features = consume<uint32_t>(pos, end);
    uint32_t stack_args = 0;
    if (features & (1 << 1))
      stack_args = consume<uint32_t>(pos, end);
    if (const char *name = symbolize(base + offset))
      printf("%s: features=%x stack_args=%u\n", name, features, stack_args);
  }
  meta_version = version;
  meta_start = start;
  meta_end = end;
}

void __sanitizer_metadata_covered_del(uint32_t version, const char *start,
                                      const char *end) {
  assert(version == meta_version);
  assert(start == meta_start);
  assert(end == meta_end);
}

const char *atomics_start;
const char *atomics_end;

void __sanitizer_metadata_atomics_add(uint32_t version, const char *start,
                                      const char *end) {
  assert(version == meta_version);
  assert(start);
  assert(end >= end);
  atomics_start = start;
  atomics_end = end;
}

void __sanitizer_metadata_atomics_del(uint32_t version, const char *start,
                                      const char *end) {
  assert(version == meta_version);
  assert(atomics_start == start);
  assert(atomics_end == end);
}
}