From d507cdbeb574392ec1bd06a7b4334e54dca513b4 Mon Sep 17 00:00:00 2001
From: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Date: Mon, 31 Mar 2025 08:48:31 +0200
Subject: [PATCH 2/2] tools/source2c: Avoid indirection and relocations

Don't use non-const pointers to string literals (which entails
a relocation and an indirection); instead use an ordinary
const char[].

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
---
 libavcodec/ffv1enc_vulkan.c   | 24 ++++++++++++------------
 libavcodec/vulkan/Makefile    |  2 +-
 libavcodec/vulkan_ffv1.c      | 16 ++++++++--------
 libavfilter/Makefile          |  2 +-
 libavfilter/opencl_source.h   | 28 ++++++++++++++--------------
 libavfilter/vf_bwdif_vulkan.c |  2 +-
 libavfilter/vulkan/Makefile   |  2 +-
 tools/source2c                |  2 +-
 8 files changed, 39 insertions(+), 39 deletions(-)

diff --git a/libavcodec/ffv1enc_vulkan.c b/libavcodec/ffv1enc_vulkan.c
index 5409927589..d1a30b0dd7 100644
--- a/libavcodec/ffv1enc_vulkan.c
+++ b/libavcodec/ffv1enc_vulkan.c
@@ -109,18 +109,18 @@ typedef struct VulkanEncodeFFv1Context {
     int chunks;
 } VulkanEncodeFFv1Context;
 
-extern const char *ff_source_common_comp;
-extern const char *ff_source_rangecoder_comp;
-extern const char *ff_source_ffv1_vlc_comp;
-extern const char *ff_source_ffv1_common_comp;
-extern const char *ff_source_ffv1_reset_comp;
-extern const char *ff_source_ffv1_enc_common_comp;
-extern const char *ff_source_ffv1_enc_rct_comp;
-extern const char *ff_source_ffv1_enc_vlc_comp;
-extern const char *ff_source_ffv1_enc_ac_comp;
-extern const char *ff_source_ffv1_enc_setup_comp;
-extern const char *ff_source_ffv1_enc_comp;
-extern const char *ff_source_ffv1_enc_rgb_comp;
+extern const char ff_source_common_comp[];
+extern const char ff_source_rangecoder_comp[];
+extern const char ff_source_ffv1_vlc_comp[];
+extern const char ff_source_ffv1_common_comp[];
+extern const char ff_source_ffv1_reset_comp[];
+extern const char ff_source_ffv1_enc_common_comp[];
+extern const char ff_source_ffv1_enc_rct_comp[];
+extern const char ff_source_ffv1_enc_vlc_comp[];
+extern const char ff_source_ffv1_enc_ac_comp[];
+extern const char ff_source_ffv1_enc_setup_comp[];
+extern const char ff_source_ffv1_enc_comp[];
+extern const char ff_source_ffv1_enc_rgb_comp[];
 
 typedef struct FFv1VkParameters {
     VkDeviceAddress slice_state;
diff --git a/libavcodec/vulkan/Makefile b/libavcodec/vulkan/Makefile
index e6bad486bd..655df11f4a 100644
--- a/libavcodec/vulkan/Makefile
+++ b/libavcodec/vulkan/Makefile
@@ -20,5 +20,5 @@ OBJS-$(CONFIG_FFV1_VULKAN_HWACCEL)  +=  vulkan/common.o \
 VULKAN = $(subst $(SRC_PATH)/,,$(wildcard $(SRC_PATH)/libavcodec/vulkan/*.comp))
 .SECONDARY: $(VULKAN:.comp=.c)
 libavcodec/vulkan/%.c: TAG = VULKAN
-libavcodec/vulkan/%.c: $(SRC_PATH)/libavcodec/vulkan/%.comp
+libavcodec/vulkan/%.c: $(SRC_PATH)/libavcodec/vulkan/%.comp $(SRC_PATH)/tools/source2c
 	$(M)$(SRC_PATH)/tools/source2c $< $@
diff --git a/libavcodec/vulkan_ffv1.c b/libavcodec/vulkan_ffv1.c
index 17bfc943d4..2a28db2e7c 100644
--- a/libavcodec/vulkan_ffv1.c
+++ b/libavcodec/vulkan_ffv1.c
@@ -26,14 +26,14 @@
 #include "libavutil/vulkan_spirv.h"
 #include "libavutil/mem.h"
 
-extern const char *ff_source_common_comp;
-extern const char *ff_source_rangecoder_comp;
-extern const char *ff_source_ffv1_vlc_comp;
-extern const char *ff_source_ffv1_common_comp;
-extern const char *ff_source_ffv1_dec_setup_comp;
-extern const char *ff_source_ffv1_reset_comp;
-extern const char *ff_source_ffv1_dec_comp;
-extern const char *ff_source_ffv1_dec_rct_comp;
+extern const char ff_source_common_comp[];
+extern const char ff_source_rangecoder_comp[];
+extern const char ff_source_ffv1_vlc_comp[];
+extern const char ff_source_ffv1_common_comp[];
+extern const char ff_source_ffv1_dec_setup_comp[];
+extern const char ff_source_ffv1_reset_comp[];
+extern const char ff_source_ffv1_dec_comp[];
+extern const char ff_source_ffv1_dec_rct_comp[];
 
 const FFVulkanDecodeDescriptor ff_vk_dec_ffv1_desc = {
     .codec_id         = AV_CODEC_ID_FFV1,
diff --git a/libavfilter/Makefile b/libavfilter/Makefile
index 7c0d879ec9..2376e11bc7 100644
--- a/libavfilter/Makefile
+++ b/libavfilter/Makefile
@@ -683,5 +683,5 @@ clean::
 OPENCL = $(subst $(SRC_PATH)/,,$(wildcard $(SRC_PATH)/libavfilter/opencl/*.cl))
 .SECONDARY: $(OPENCL:.cl=.c)
 libavfilter/opencl/%.c: TAG = OPENCL
-libavfilter/opencl/%.c: $(SRC_PATH)/libavfilter/opencl/%.cl
+libavfilter/opencl/%.c: $(SRC_PATH)/libavfilter/opencl/%.cl $(SRC_PATH)/tools/source2c
 	$(M)$(SRC_PATH)/tools/source2c $< $@
diff --git a/libavfilter/opencl_source.h b/libavfilter/opencl_source.h
index b6930fb686..a1c89c4cbf 100644
--- a/libavfilter/opencl_source.h
+++ b/libavfilter/opencl_source.h
@@ -19,19 +19,19 @@
 #ifndef AVFILTER_OPENCL_SOURCE_H
 #define AVFILTER_OPENCL_SOURCE_H
 
-extern const char *ff_source_avgblur_cl;
-extern const char *ff_source_colorkey_cl;
-extern const char *ff_source_colorspace_common_cl;
-extern const char *ff_source_convolution_cl;
-extern const char *ff_source_deshake_cl;
-extern const char *ff_source_neighbor_cl;
-extern const char *ff_source_nlmeans_cl;
-extern const char *ff_source_overlay_cl;
-extern const char *ff_source_pad_cl;
-extern const char *ff_source_remap_cl;
-extern const char *ff_source_tonemap_cl;
-extern const char *ff_source_transpose_cl;
-extern const char *ff_source_unsharp_cl;
-extern const char *ff_source_xfade_cl;
+extern const char ff_source_avgblur_cl[];
+extern const char ff_source_colorkey_cl[];
+extern const char ff_source_colorspace_common_cl[];
+extern const char ff_source_convolution_cl[];
+extern const char ff_source_deshake_cl[];
+extern const char ff_source_neighbor_cl[];
+extern const char ff_source_nlmeans_cl[];
+extern const char ff_source_overlay_cl[];
+extern const char ff_source_pad_cl[];
+extern const char ff_source_remap_cl[];
+extern const char ff_source_tonemap_cl[];
+extern const char ff_source_transpose_cl[];
+extern const char ff_source_unsharp_cl[];
+extern const char ff_source_xfade_cl[];
 
 #endif /* AVFILTER_OPENCL_SOURCE_H */
diff --git a/libavfilter/vf_bwdif_vulkan.c b/libavfilter/vf_bwdif_vulkan.c
index 549e814886..981bf76711 100644
--- a/libavfilter/vf_bwdif_vulkan.c
+++ b/libavfilter/vf_bwdif_vulkan.c
@@ -43,7 +43,7 @@ typedef struct BWDIFParameters {
     int current_field;
 } BWDIFParameters;
 
-extern const char *ff_source_bwdif_comp;
+extern const char ff_source_bwdif_comp[];
 
 static av_cold int init_filter(AVFilterContext *ctx)
 {
diff --git a/libavfilter/vulkan/Makefile b/libavfilter/vulkan/Makefile
index 573eee32c7..b64e687224 100644
--- a/libavfilter/vulkan/Makefile
+++ b/libavfilter/vulkan/Makefile
@@ -8,5 +8,5 @@ OBJS-$(CONFIG_BWDIF_VULKAN_FILTER) += vulkan/bwdif.o
 VULKAN = $(subst $(SRC_PATH)/,,$(wildcard $(SRC_PATH)/libavfilter/vulkan/*.comp))
 .SECONDARY: $(VULKAN:.comp=.c)
 libavfilter/vulkan/%.c: TAG = VULKAN
-libavfilter/vulkan/%.c: $(SRC_PATH)/libavfilter/vulkan/%.comp
+libavfilter/vulkan/%.c: $(SRC_PATH)/libavfilter/vulkan/%.comp $(SRC_PATH)/tools/source2c
 	$(M)$(SRC_PATH)/tools/source2c $< $@
diff --git a/tools/source2c b/tools/source2c
index 6e5f123144..05a69bbbff 100755
--- a/tools/source2c
+++ b/tools/source2c
@@ -25,7 +25,7 @@ name=$(basename "$input" | sed 's/\./_/')
 
 cat >$output <<EOF
 // Generated from $input
-const char *ff_source_$name =
+const char ff_source_$name[] =
 EOF
 
 # Convert \ to \\ and " to \", then add " to the start and end of the line.
-- 
2.45.2