1c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov//===-- asan_interface_internal.h -------------------------------*- C++ -*-===//
2c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov//
3c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov//                     The LLVM Compiler Infrastructure
4c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov//
5c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov// This file is distributed under the University of Illinois Open Source
6c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov// License. See LICENSE.TXT for details.
7c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov//
8c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov//===----------------------------------------------------------------------===//
9c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov//
10c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov// This file is a part of AddressSanitizer, an address sanity checker.
11c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov//
1286277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// This header declares the AddressSanitizer runtime interface functions.
1386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// The runtime library has to define these functions so the instrumented program
1486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// could call them.
1586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines//
1686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines// See also include/sanitizer/asan_interface.h
17c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov//===----------------------------------------------------------------------===//
18c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov#ifndef ASAN_INTERFACE_INTERNAL_H
19c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov#define ASAN_INTERFACE_INTERNAL_H
20c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
21c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov#include "sanitizer_common/sanitizer_internal_defs.h"
22c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
236a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#include "asan_init_version.h"
246a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines
25c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonovusing __sanitizer::uptr;
26c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
27c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonovextern "C" {
286d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  // This function should be called at the very beginning of the process,
296d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  // before any instrumented code is executed and before any call to malloc.
306d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  // Please note that __asan_init is a macro that is replaced with
316d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  // __asan_init_vXXX at compile-time.
326d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE void __asan_init();
336d1862363c88c183b0ed7740fca876342cf0474bStephen Hines
346a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  // This structure is used to describe the source location of a place where
356a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  // global was defined.
366a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  struct __asan_global_source_location {
376a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    const char *filename;
386a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    int line_no;
396a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    int column_no;
406a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  };
41c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
42c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov  // This structure describes an instrumented global variable.
43c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov  struct __asan_global {
44c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov    uptr beg;                // The address of the global.
45c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov    uptr size;               // The original size of the global.
46c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov    uptr size_with_redzone;  // The size with the redzone.
47c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov    const char *name;        // Name as a C string.
4805e16a028d26503153a8fe512a500676cad66031Alexey Samsonov    const char *module_name; // Module name as a C string. This pointer is a
4905e16a028d26503153a8fe512a500676cad66031Alexey Samsonov                             // unique identifier of a module.
50c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov    uptr has_dynamic_init;   // Non-zero if the global has dynamic initializer.
516a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines    __asan_global_source_location *location;  // Source location of a global,
526a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines                                              // or NULL if it is unknown.
53c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov  };
54c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
55c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov  // These two functions should be called by the instrumented code.
56c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov  // 'globals' is an array of structures describing 'n' globals.
573c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE
583c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  void __asan_register_globals(__asan_global *globals, uptr n);
593c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE
603c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  void __asan_unregister_globals(__asan_global *globals, uptr n);
61c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
62c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov  // These two functions should be called before and after dynamic initializers
6305e16a028d26503153a8fe512a500676cad66031Alexey Samsonov  // of a single module run, respectively.
643c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE
653c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  void __asan_before_dynamic_init(const char *module_name);
663c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE
673c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  void __asan_after_dynamic_init();
68c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
69c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov  // These two functions are used by instrumented code in the
70c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov  // use-after-scope mode. They mark memory for local variables as
71c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov  // unaddressable when they leave scope and addressable before the
72c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov  // function exits.
733c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE
743c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  void __asan_poison_stack_memory(uptr addr, uptr size);
753c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE
763c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  void __asan_unpoison_stack_memory(uptr addr, uptr size);
77c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
78c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov  // Performs cleanup before a NoReturn function. Must be called before things
79c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov  // like _exit and execl to avoid false positives on stack.
803c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE void __asan_handle_no_return();
81c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
823c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE
833c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  void __asan_poison_memory_region(void const volatile *addr, uptr size);
843c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE
853c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  void __asan_unpoison_memory_region(void const volatile *addr, uptr size);
86c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
873c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE
882d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  int __asan_address_is_poisoned(void const volatile *addr);
89c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
903c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE
913c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  uptr __asan_region_is_poisoned(uptr beg, uptr size);
92c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
933c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE
943c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  void __asan_describe_address(uptr addr);
95c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
963c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE
976d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  int __asan_report_present();
986d1862363c88c183b0ed7740fca876342cf0474bStephen Hines
996d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1006d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  uptr __asan_get_report_pc();
1016d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1026d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  uptr __asan_get_report_bp();
1036d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1046d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  uptr __asan_get_report_sp();
1056d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1066d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  uptr __asan_get_report_address();
1076d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1086d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  int __asan_get_report_access_type();
1096d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1106d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  uptr __asan_get_report_access_size();
1116d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1126d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  const char * __asan_get_report_description();
1136d1862363c88c183b0ed7740fca876342cf0474bStephen Hines
1146d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1156d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  const char * __asan_locate_address(uptr addr, char *name, uptr name_size,
1166d1862363c88c183b0ed7740fca876342cf0474bStephen Hines                                     uptr *region_address, uptr *region_size);
1176d1862363c88c183b0ed7740fca876342cf0474bStephen Hines
1186d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1196d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  uptr __asan_get_alloc_stack(uptr addr, uptr *trace, uptr size,
1206d1862363c88c183b0ed7740fca876342cf0474bStephen Hines                              u32 *thread_id);
1216d1862363c88c183b0ed7740fca876342cf0474bStephen Hines
1226d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1236d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  uptr __asan_get_free_stack(uptr addr, uptr *trace, uptr size,
1246d1862363c88c183b0ed7740fca876342cf0474bStephen Hines                             u32 *thread_id);
1256d1862363c88c183b0ed7740fca876342cf0474bStephen Hines
1266d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1276d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  void __asan_get_shadow_mapping(uptr *shadow_scale, uptr *shadow_offset);
1286d1862363c88c183b0ed7740fca876342cf0474bStephen Hines
1296d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
130c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov  void __asan_report_error(uptr pc, uptr bp, uptr sp,
1317c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar                           uptr addr, int is_write, uptr access_size, u32 exp);
132c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
1333c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE
1343c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  int __asan_set_error_exit_code(int exit_code);
1353c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE
1363c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  void __asan_set_death_callback(void (*callback)(void));
1373c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE
1383c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  void __asan_set_error_report_callback(void (*callback)(const char*));
139c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
1403c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
1413c80c6c574850106481f82b9e23d1c728458d4a9Timur Iskhodzhanov  /* OPTIONAL */ void __asan_on_error();
142c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
1436a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE void __asan_print_accumulated_stats();
1446a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines
1456a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
1466a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines  /* OPTIONAL */ const char* __asan_default_options();
147230e52f4e91b53f05ce19dbbf11047f4a0113483Kostya Serebryany
148230e52f4e91b53f05ce19dbbf11047f4a0113483Kostya Serebryany  // Global flag, copy of ASAN_OPTIONS=detect_stack_use_after_return
149230e52f4e91b53f05ce19dbbf11047f4a0113483Kostya Serebryany  SANITIZER_INTERFACE_ATTRIBUTE
150230e52f4e91b53f05ce19dbbf11047f4a0113483Kostya Serebryany  extern int __asan_option_detect_stack_use_after_return;
1512d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
1522d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1532d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  extern uptr *__asan_test_only_reported_buggy_pointer;
1542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
1552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE void __asan_load1(uptr p);
1562d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE void __asan_load2(uptr p);
1572d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE void __asan_load4(uptr p);
1582d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE void __asan_load8(uptr p);
1592d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE void __asan_load16(uptr p);
1602d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE void __asan_store1(uptr p);
1612d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE void __asan_store2(uptr p);
1622d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE void __asan_store4(uptr p);
1632d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE void __asan_store8(uptr p);
1642d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE void __asan_store16(uptr p);
1652d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE void __asan_loadN(uptr p, uptr size);
1662d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE void __asan_storeN(uptr p, uptr size);
1672d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
1687c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_load1(uptr p, u32 exp);
1697c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_load2(uptr p, u32 exp);
1707c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_load4(uptr p, u32 exp);
1717c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_load8(uptr p, u32 exp);
1727c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_load16(uptr p, u32 exp);
1737c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_store1(uptr p, u32 exp);
1747c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_store2(uptr p, u32 exp);
1757c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_store4(uptr p, u32 exp);
1767c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_store8(uptr p, u32 exp);
1777c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_store16(uptr p, u32 exp);
1787c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_loadN(uptr p, uptr size,
1797c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar                                                      u32 exp);
1807c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar  SANITIZER_INTERFACE_ATTRIBUTE void __asan_exp_storeN(uptr p, uptr size,
1817c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar                                                       u32 exp);
1827c9150579ed0278492f51cc8434b1d63a44b9bd1Pirama Arumuga Nainar
1832d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1842d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      void* __asan_memcpy(void *dst, const void *src, uptr size);
1852d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1862d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      void* __asan_memset(void *s, int c, uptr n);
1872d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1882d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      void* __asan_memmove(void* dest, const void* src, uptr n);
1896d1862363c88c183b0ed7740fca876342cf0474bStephen Hines
1906d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1916d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  void __asan_poison_cxx_array_cookie(uptr p);
1926d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1936d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  uptr __asan_load_cxx_array_cookie(uptr *p);
1946d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1956d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  void __asan_poison_intra_object_redzone(uptr p, uptr size);
1966d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  SANITIZER_INTERFACE_ATTRIBUTE
1976d1862363c88c183b0ed7740fca876342cf0474bStephen Hines  void __asan_unpoison_intra_object_redzone(uptr p, uptr size);
198c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov}  // extern "C"
199c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov
200c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov#endif  // ASAN_INTERFACE_INTERNAL_H
201