History

Undo part of incr_offset patch.

The incr_offset offset code was not working with bounds checking. So I reverted part of tccgen.c. See new test code 132. Also added some debugging code that prints location of bounds checking calls. Needed this to find the problem. See lib/bcheck.c, lib/bt-dll.c, lib/bt-exe.c, lib/bt-log.c, tccrun.c

herman ten brugge committed 3 years ago

Commit 598134f1 parent d1c10778 files · +96 −5Browse files

Showing the changes to lib (4 of 8 files). Show all

Unified · Split

4 files
  1. lib/bcheck.c +9 −1
  2. lib/bt-dll.c +1 −0
  3. lib/bt-exe.c +2 −0
  4. lib/bt-log.c +10 −0
lib/bcheck.c+9−1
@@ -41,7 +41,7 @@ · 40 unmodified lines
41#define BOUND_STATISTIC (1)41#define BOUND_STATISTIC (1)
42 42
43#if BOUND_DEBUG43#if BOUND_DEBUG
44 #define dprintf(a...) if (print_calls) fprintf(a)44 #define dprintf(a...) if (print_calls) { bounds_loc; fprintf(a); }
45#else45#else
46 #define dprintf(a...)46 #define dprintf(a...)
47#endif47#endif
@@ -446,6 +446,7 @@ static unsigned long long bound_splay_delete; · 398 unmodified lines
446#endif446#endif
447 447
448int tcc_backtrace(const char *fmt, ...);448int tcc_backtrace(const char *fmt, ...);
449void tcc_location(const char *fmt);
449 450
450/* print a bound error message */451/* print a bound error message */
451#define bound_warning(...) \452#define bound_warning(...) \
@@ -462,6 +463,13 @@ int tcc_backtrace(const char *fmt, ...); · 10 unmodified lines
462 exit(255); \463 exit(255); \
463 } while (0)464 } while (0)
464 465
466#define bounds_loc \
467 do { \
468 WAIT_SEM (); \
469 tcc_location("^bcheck.c^"); \
470 POST_SEM (); \
471 } while (0)
472
465static void bound_alloc_error(const char *s)473static void bound_alloc_error(const char *s)
466{474{
467 fprintf(stderr,"FATAL: %s\n",s);475 fprintf(stderr,"FATAL: %s\n",s);
lib/bt-dll.c+1−0
@@ -8,6 +8,7 @@ · 7 unmodified lines
8 REDIR(__bt_init) \8 REDIR(__bt_init) \
9 REDIR(__bt_exit) \9 REDIR(__bt_exit) \
10 REDIR(tcc_backtrace) \10 REDIR(tcc_backtrace) \
11 REDIR(tcc_location) \
11 \12 \
12 REDIR(__bound_ptr_add) \13 REDIR(__bound_ptr_add) \
13 REDIR(__bound_ptr_indir1) \14 REDIR(__bound_ptr_indir1) \
lib/bt-exe.c+2−0
@@ -8,6 +8,7 @@ · 7 unmodified lines
8#include "../tccrun.c"8#include "../tccrun.c"
9 9
10int (*__rt_error)(void*, void*, const char *, va_list);10int (*__rt_error)(void*, void*, const char *, va_list);
11void (*__rt_location)(void*, void*, const char *);
11__attribute__((weak)) void __bound_checking_lock(void);12__attribute__((weak)) void __bound_checking_lock(void);
12__attribute__((weak)) void __bound_checking_unlock(void);13__attribute__((weak)) void __bound_checking_unlock(void);
13 14
@@ -33,6 +34,7 @@ void __bt_init(rt_context *p, int num_callers) · 19 unmodified lines
33 rc->num_callers = num_callers - 1;34 rc->num_callers = num_callers - 1;
34 rc->top_func = main;35 rc->top_func = main;
35 __rt_error = _rt_error;36 __rt_error = _rt_error;
37 __rt_location = _rt_location;
36 set_exception_handler();38 set_exception_handler();
37 } else {39 } else {
38 p->next = rc->next, rc->next = p;40 p->next = rc->next, rc->next = p;
lib/bt-log.c+10−0
@@ -6,6 +6,7 @@ · 5 unmodified lines
6#include <string.h>6#include <string.h>
7 7
8int (*__rt_error)(void*, void*, const char *, va_list);8int (*__rt_error)(void*, void*, const char *, va_list);
9void (*__rt_location)(void*, void*, const char *);
9 10
10#ifdef _WIN3211#ifdef _WIN32
11# define DLL_EXPORT __declspec(dllexport)12# define DLL_EXPORT __declspec(dllexport)
@@ -42,6 +43,15 @@ DLL_EXPORT int tcc_backtrace(const char *fmt, ...) · 30 unmodified lines
42 return ret;43 return ret;
43}44}
44 45
46DLL_EXPORT void tcc_location(const char *fmt)
47{
48 if (__rt_location) {
49 void *fp = __builtin_frame_address(1);
50 void *ip = __builtin_return_address(0);
51 __rt_location(fp, ip, fmt);
52 }
53}
54
45#if (defined(__GNUC__) && (__GNUC__ >= 6)) || defined(__clang__)55#if (defined(__GNUC__) && (__GNUC__ >= 6)) || defined(__clang__)
46#pragma GCC diagnostic pop56#pragma GCC diagnostic pop
47#endif57#endif

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t