Skip to content

Commit

Permalink
feat: patch to fix ag build with gcc >=10 (#1999)
Browse files Browse the repository at this point in the history
  • Loading branch information
thebaptiste authored Nov 28, 2024
1 parent 1f9cfa9 commit c6d7c9b
Show file tree
Hide file tree
Showing 2 changed files with 211 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
From 21eaa1c4160b868b0c5bbf59da17974429f30055 Mon Sep 17 00:00:00 2001
From: Shlomi Fish <shlomif@shlomifish.org>
Date: Wed, 15 Apr 2020 20:23:52 +0300
Subject: [PATCH] Fix multiple global symbols definitions.

See the use of extern here:

* https://www.geeksforgeeks.org/understanding-extern-keyword-in-c/

* https://en.wikipedia.org/wiki/External_variable

*
https://stackoverflow.com/questions/496448/how-to-correctly-use-the-extern-keyword-in-c
---
src/ignore.c | 2 ++
src/ignore.h | 2 +-
src/log.c | 1 +
src/log.h | 2 +-
src/options.c | 2 ++
src/options.h | 2 +-
src/search.c | 13 +++++++++++++
src/search.h | 20 ++++++++++----------
src/util.c | 2 ++
src/util.h | 4 ++--
10 files changed, 35 insertions(+), 15 deletions(-)

diff --git a/src/ignore.c b/src/ignore.c
index 7ae83f3..88036ef 100644
--- a/src/ignore.c
+++ b/src/ignore.c
@@ -20,6 +20,8 @@
const int fnmatch_flags = FNM_PATHNAME;
#endif

+ignores *root_ignores;
+
/* TODO: build a huge-ass list of files we want to ignore by default (build cache stuff, pyc files, etc) */

const char *evil_hardcoded_ignore_files[] = {
diff --git a/src/ignore.h b/src/ignore.h
index 20d5a6a..8db0f37 100644
--- a/src/ignore.h
+++ b/src/ignore.h
@@ -29,7 +29,7 @@ struct ignores {
};
typedef struct ignores ignores;

-ignores *root_ignores;
+extern ignores *root_ignores;

extern const char *evil_hardcoded_ignore_files[];
extern const char *ignore_pattern_files[];
diff --git a/src/log.c b/src/log.c
index 1481b6d..f6f4e9a 100644
--- a/src/log.c
+++ b/src/log.c
@@ -4,6 +4,7 @@
#include "log.h"
#include "util.h"

+pthread_mutex_t print_mtx = PTHREAD_MUTEX_INITIALIZER;
static enum log_level log_threshold = LOG_LEVEL_ERR;

void set_log_level(enum log_level threshold) {
diff --git a/src/log.h b/src/log.h
index 85847ee..318622c 100644
--- a/src/log.h
+++ b/src/log.h
@@ -9,7 +9,7 @@
#include <pthread.h>
#endif

-pthread_mutex_t print_mtx;
+extern pthread_mutex_t print_mtx;

enum log_level {
LOG_LEVEL_DEBUG = 10,
diff --git a/src/options.c b/src/options.c
index 4abf4dc..6995301 100644
--- a/src/options.c
+++ b/src/options.c
@@ -20,6 +20,8 @@ const char *color_line_number = "\033[1;33m"; /* bold yellow */
const char *color_match = "\033[30;43m"; /* black with yellow background */
const char *color_path = "\033[1;32m"; /* bold green */

+cli_options opts;
+
/* TODO: try to obey out_fd? */
void usage(void) {
printf("\n");
diff --git a/src/options.h b/src/options.h
index aae9309..0d85216 100644
--- a/src/options.h
+++ b/src/options.h
@@ -92,7 +92,7 @@ typedef struct {
} cli_options;

/* global options. parse_options gives it sane values, everything else reads from it */
-cli_options opts;
+extern cli_options opts;

typedef struct option option_t;

diff --git a/src/search.c b/src/search.c
index 0f4ae21..0dad3c0 100644
--- a/src/search.c
+++ b/src/search.c
@@ -2,6 +2,19 @@
#include "print.h"
#include "scandir.h"

+size_t alpha_skip_lookup[256];
+size_t *find_skip_lookup;
+uint8_t h_table[H_SIZE] __attribute__((aligned(64)));
+
+work_queue_t *work_queue = NULL;
+work_queue_t *work_queue_tail = NULL;
+int done_adding_files = 0;
+pthread_cond_t files_ready = PTHREAD_COND_INITIALIZER;
+pthread_mutex_t stats_mtx = PTHREAD_MUTEX_INITIALIZER;
+pthread_mutex_t work_queue_mtx = PTHREAD_MUTEX_INITIALIZER;
+
+symdir_t *symhash = NULL;
+
void search_buf(const char *buf, const size_t buf_len,
const char *dir_full_path) {
int binary = -1; /* 1 = yes, 0 = no, -1 = don't know */
diff --git a/src/search.h b/src/search.h
index 6bac420..00aa018 100644
--- a/src/search.h
+++ b/src/search.h
@@ -31,9 +31,9 @@
#include "uthash.h"
#include "util.h"

-size_t alpha_skip_lookup[256];
-size_t *find_skip_lookup;
-uint8_t h_table[H_SIZE] __attribute__((aligned(64)));
+extern size_t alpha_skip_lookup[256];
+extern size_t *find_skip_lookup;
+extern uint8_t h_table[H_SIZE] __attribute__((aligned(64)));

struct work_queue_t {
char *path;
@@ -41,12 +41,12 @@ struct work_queue_t {
};
typedef struct work_queue_t work_queue_t;

-work_queue_t *work_queue;
-work_queue_t *work_queue_tail;
-int done_adding_files;
-pthread_cond_t files_ready;
-pthread_mutex_t stats_mtx;
-pthread_mutex_t work_queue_mtx;
+extern work_queue_t *work_queue;
+extern work_queue_t *work_queue_tail;
+extern int done_adding_files;
+extern pthread_cond_t files_ready;
+extern pthread_mutex_t stats_mtx;
+extern pthread_mutex_t work_queue_mtx;


/* For symlink loop detection */
@@ -64,7 +64,7 @@ typedef struct {
UT_hash_handle hh;
} symdir_t;

-symdir_t *symhash;
+extern symdir_t *symhash;

ssize_t search_buf(const char *buf, const size_t buf_len,
const char *dir_full_path);
diff --git a/src/util.c b/src/util.c
index 3949477..90ffb6f 100644
--- a/src/util.c
+++ b/src/util.c
@@ -21,6 +21,8 @@
} \
return ptr;

+FILE *out_fd = NULL;
+ag_stats stats;
void *ag_malloc(size_t size) {
void *ptr = malloc(size);
CHECK_AND_RETURN(ptr)
diff --git a/src/util.h b/src/util.h
index 0c9b9b1..338b05f 100644
--- a/src/util.h
+++ b/src/util.h
@@ -12,7 +12,7 @@
#include "log.h"
#include "options.h"

-FILE *out_fd;
+extern FILE *out_fd;

#ifndef TRUE
#define TRUE 1
@@ -51,7 +51,7 @@ typedef struct {
} ag_stats;


-ag_stats stats;
+extern ag_stats stats;

/* Union to translate between chars and words without violating strict aliasing */
typedef union {
--
2.43.0
2 changes: 2 additions & 0 deletions layers/layer7_devtools/0030_the_silver_searcher/patches
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
#Patch to build without lzma
no_lzma.patch
#Fix build with gcc>=10
Fix-multiple-global-symbols-definitions.patch

0 comments on commit c6d7c9b

Please sign in to comment.