[bootlin/training-materials updates] master: debugging: labs: rename png to png_convert and add commands to compile (a78f19d6)

Clément Léger clement.leger at bootlin.com
Thu Nov 17 14:40:53 CET 2022


Repository : https://github.com/bootlin/training-materials
On branch  : master
Link       : https://github.com/bootlin/training-materials/commit/a78f19d6fb1c3fbd6a176a15920afde335b9c2ec

>---------------------------------------------------------------

commit a78f19d6fb1c3fbd6a176a15920afde335b9c2ec
Author: Clément Léger <clement.leger at bootlin.com>
Date:   Thu Nov 17 14:40:53 2022 +0100

    debugging: labs: rename png to png_convert and add commands to compile
    
    Signed-off-by: Clément Léger <clement.leger at bootlin.com>


>---------------------------------------------------------------

a78f19d6fb1c3fbd6a176a15920afde335b9c2ec
 .../debugging/nfsroot/root/app_profile/Makefile    |   4 -
 lab-data/debugging/nfsroot/root/app_profile/png.c  | 179 ---------------------
 .../debugging/nfsroot/root/app_profile/tux.png     | Bin 477436 -> 0 bytes
 .../debugging/nfsroot/root/app_profiling/Makefile  |   4 +
 .../nfsroot/root/app_profiling/png_convert.c       | 179 +++++++++++++++++++++
 .../debugging/nfsroot/root/app_profiling/tux.png   | Bin 0 -> 477436 bytes
 .../debugging-application-profiling.tex            |  10 +-
 7 files changed, 191 insertions(+), 185 deletions(-)

diff --git a/lab-data/debugging/nfsroot/root/app_profile/Makefile b/lab-data/debugging/nfsroot/root/app_profile/Makefile
deleted file mode 100644
index 1da2470e..00000000
--- a/lab-data/debugging/nfsroot/root/app_profile/Makefile
+++ /dev/null
@@ -1,4 +0,0 @@
-CC=${CROSS_COMPILE}gcc
-
-png: png.c
-	${CC} $< -g3 -lpng -o $@
diff --git a/lab-data/debugging/nfsroot/root/app_profile/png.c b/lab-data/debugging/nfsroot/root/app_profile/png.c
deleted file mode 100644
index 68a6b35f..00000000
--- a/lab-data/debugging/nfsroot/root/app_profile/png.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright 2002-2010 Guillaume Cottenceau.
- *
- * This software may be freely redistributed under the terms
- * of the X11 license.
- *
- */
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-
-#define PNG_DEBUG 3
-#include <png.h>
-
-void abort_(const char *s, ...)
-{
-	va_list args;
-	va_start(args, s);
-	vfprintf(stderr, s, args);
-	fprintf(stderr, "\n");
-	va_end(args);
-	abort();
-}
-
-int x, y;
-
-int width, height;
-png_byte color_type;
-png_byte bit_depth;
-
-png_structp png_ptr;
-png_infop info_ptr;
-int number_of_passes;
-png_bytep *row_pointers;
-
-void read_png_file(char *file_name)
-{
-	char header[8]; // 8 is the maximum size that can be checked
-
-	/* open file and test for it being a png */
-	FILE *fp = fopen(file_name, "rb");
-	if (!fp)
-		abort_("[read_png_file] File %s could not be opened for reading", file_name);
-	fread(header, 1, 8, fp);
-	if (png_sig_cmp(header, 0, 8))
-		abort_("[read_png_file] File %s is not recognized as a PNG file", file_name);
-
-	/* initialize stuff */
-	png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-
-	if (!png_ptr)
-		abort_("[read_png_file] png_create_read_struct failed");
-
-	info_ptr = png_create_info_struct(png_ptr);
-	if (!info_ptr)
-		abort_("[read_png_file] png_create_info_struct failed");
-
-	if (setjmp(png_jmpbuf(png_ptr)))
-		abort_("[read_png_file] Error during init_io");
-
-	png_init_io(png_ptr, fp);
-	png_set_sig_bytes(png_ptr, 8);
-
-	png_read_info(png_ptr, info_ptr);
-
-	width = png_get_image_width(png_ptr, info_ptr);
-	height = png_get_image_height(png_ptr, info_ptr);
-	color_type = png_get_color_type(png_ptr, info_ptr);
-	bit_depth = png_get_bit_depth(png_ptr, info_ptr);
-
-	number_of_passes = png_set_interlace_handling(png_ptr);
-	png_read_update_info(png_ptr, info_ptr);
-
-	/* read file */
-	if (setjmp(png_jmpbuf(png_ptr)))
-		abort_("[read_png_file] Error during read_image");
-
-	row_pointers = (png_bytep *)malloc(sizeof(png_bytep) * height);
-	for (y = 0; y < height; y++)
-		row_pointers[y] = (png_byte *)malloc(png_get_rowbytes(png_ptr, info_ptr));
-
-	png_read_image(png_ptr, row_pointers);
-
-	fclose(fp);
-}
-
-void write_png_file(char *file_name)
-{
-	/* create file */
-	FILE *fp = fopen(file_name, "wb");
-	if (!fp)
-		abort_("[write_png_file] File %s could not be opened for writing", file_name);
-
-	/* initialize stuff */
-	png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-
-	if (!png_ptr)
-		abort_("[write_png_file] png_create_write_struct failed");
-
-	info_ptr = png_create_info_struct(png_ptr);
-	if (!info_ptr)
-		abort_("[write_png_file] png_create_info_struct failed");
-
-	if (setjmp(png_jmpbuf(png_ptr)))
-		abort_("[write_png_file] Error during init_io");
-
-	png_init_io(png_ptr, fp);
-
-	/* write header */
-	if (setjmp(png_jmpbuf(png_ptr)))
-		abort_("[write_png_file] Error during writing header");
-
-	png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, color_type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE,
-		     PNG_FILTER_TYPE_BASE);
-
-	png_write_info(png_ptr, info_ptr);
-
-	/* write bytes */
-	if (setjmp(png_jmpbuf(png_ptr)))
-		abort_("[write_png_file] Error during writing bytes");
-
-	png_write_image(png_ptr, row_pointers);
-
-	/* end write */
-	if (setjmp(png_jmpbuf(png_ptr)))
-		abort_("[write_png_file] Error during end of write");
-
-	png_write_end(png_ptr, NULL);
-
-	/* cleanup heap allocation */
-	for (y = 0; y < height; y++)
-		free(row_pointers[y]);
-	free(row_pointers);
-
-	fclose(fp);
-}
-
-static void swap_colors(void)
-{
-	for (x = 0; x < width; x++) {
-		for (y = 0; y < height; y++) {
-			png_byte *row = row_pointers[y];
-			png_byte *ptr = &(row[x * 4]);
-
-			/* set red value to 0 and green value to the blue one */
-			ptr[0] = 0;
-			ptr[1] = ptr[2];
-		}
-	}
-}
-
-
-static void process_file(void)
-{
-	if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB)
-		abort_("[process_file] input file is PNG_COLOR_TYPE_RGB but must be PNG_COLOR_TYPE_RGBA "
-		       "(lacks the alpha channel)");
-
-	if (png_get_color_type(png_ptr, info_ptr) != PNG_COLOR_TYPE_RGBA)
-		abort_("[process_file] color_type of input file must be PNG_COLOR_TYPE_RGBA (%d) (is %d)", PNG_COLOR_TYPE_RGBA,
-		       png_get_color_type(png_ptr, info_ptr));
-
-	swap_colors();
-}
-
-int main(int argc, char **argv)
-{
-	if (argc != 3)
-		abort_("Usage: program_name <file_in> <file_out>");
-
-	read_png_file(argv[1]);
-	process_file();
-	write_png_file(argv[2]);
-
-	return 0;
-}
diff --git a/lab-data/debugging/nfsroot/root/app_profile/tux.png b/lab-data/debugging/nfsroot/root/app_profile/tux.png
deleted file mode 100644
index d609663f..00000000
Binary files a/lab-data/debugging/nfsroot/root/app_profile/tux.png and /dev/null differ
diff --git a/lab-data/debugging/nfsroot/root/app_profiling/Makefile b/lab-data/debugging/nfsroot/root/app_profiling/Makefile
new file mode 100644
index 00000000..91e8bfcc
--- /dev/null
+++ b/lab-data/debugging/nfsroot/root/app_profiling/Makefile
@@ -0,0 +1,4 @@
+CC=${CROSS_COMPILE}gcc
+
+png_convert: png_convert.c
+	${CC} $< -g3 -lpng -o $@
diff --git a/lab-data/debugging/nfsroot/root/app_profiling/png_convert.c b/lab-data/debugging/nfsroot/root/app_profiling/png_convert.c
new file mode 100644
index 00000000..68a6b35f
--- /dev/null
+++ b/lab-data/debugging/nfsroot/root/app_profiling/png_convert.c
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2002-2010 Guillaume Cottenceau.
+ *
+ * This software may be freely redistributed under the terms
+ * of the X11 license.
+ *
+ */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdarg.h>
+
+#define PNG_DEBUG 3
+#include <png.h>
+
+void abort_(const char *s, ...)
+{
+	va_list args;
+	va_start(args, s);
+	vfprintf(stderr, s, args);
+	fprintf(stderr, "\n");
+	va_end(args);
+	abort();
+}
+
+int x, y;
+
+int width, height;
+png_byte color_type;
+png_byte bit_depth;
+
+png_structp png_ptr;
+png_infop info_ptr;
+int number_of_passes;
+png_bytep *row_pointers;
+
+void read_png_file(char *file_name)
+{
+	char header[8]; // 8 is the maximum size that can be checked
+
+	/* open file and test for it being a png */
+	FILE *fp = fopen(file_name, "rb");
+	if (!fp)
+		abort_("[read_png_file] File %s could not be opened for reading", file_name);
+	fread(header, 1, 8, fp);
+	if (png_sig_cmp(header, 0, 8))
+		abort_("[read_png_file] File %s is not recognized as a PNG file", file_name);
+
+	/* initialize stuff */
+	png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+
+	if (!png_ptr)
+		abort_("[read_png_file] png_create_read_struct failed");
+
+	info_ptr = png_create_info_struct(png_ptr);
+	if (!info_ptr)
+		abort_("[read_png_file] png_create_info_struct failed");
+
+	if (setjmp(png_jmpbuf(png_ptr)))
+		abort_("[read_png_file] Error during init_io");
+
+	png_init_io(png_ptr, fp);
+	png_set_sig_bytes(png_ptr, 8);
+
+	png_read_info(png_ptr, info_ptr);
+
+	width = png_get_image_width(png_ptr, info_ptr);
+	height = png_get_image_height(png_ptr, info_ptr);
+	color_type = png_get_color_type(png_ptr, info_ptr);
+	bit_depth = png_get_bit_depth(png_ptr, info_ptr);
+
+	number_of_passes = png_set_interlace_handling(png_ptr);
+	png_read_update_info(png_ptr, info_ptr);
+
+	/* read file */
+	if (setjmp(png_jmpbuf(png_ptr)))
+		abort_("[read_png_file] Error during read_image");
+
+	row_pointers = (png_bytep *)malloc(sizeof(png_bytep) * height);
+	for (y = 0; y < height; y++)
+		row_pointers[y] = (png_byte *)malloc(png_get_rowbytes(png_ptr, info_ptr));
+
+	png_read_image(png_ptr, row_pointers);
+
+	fclose(fp);
+}
+
+void write_png_file(char *file_name)
+{
+	/* create file */
+	FILE *fp = fopen(file_name, "wb");
+	if (!fp)
+		abort_("[write_png_file] File %s could not be opened for writing", file_name);
+
+	/* initialize stuff */
+	png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+
+	if (!png_ptr)
+		abort_("[write_png_file] png_create_write_struct failed");
+
+	info_ptr = png_create_info_struct(png_ptr);
+	if (!info_ptr)
+		abort_("[write_png_file] png_create_info_struct failed");
+
+	if (setjmp(png_jmpbuf(png_ptr)))
+		abort_("[write_png_file] Error during init_io");
+
+	png_init_io(png_ptr, fp);
+
+	/* write header */
+	if (setjmp(png_jmpbuf(png_ptr)))
+		abort_("[write_png_file] Error during writing header");
+
+	png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, color_type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE,
+		     PNG_FILTER_TYPE_BASE);
+
+	png_write_info(png_ptr, info_ptr);
+
+	/* write bytes */
+	if (setjmp(png_jmpbuf(png_ptr)))
+		abort_("[write_png_file] Error during writing bytes");
+
+	png_write_image(png_ptr, row_pointers);
+
+	/* end write */
+	if (setjmp(png_jmpbuf(png_ptr)))
+		abort_("[write_png_file] Error during end of write");
+
+	png_write_end(png_ptr, NULL);
+
+	/* cleanup heap allocation */
+	for (y = 0; y < height; y++)
+		free(row_pointers[y]);
+	free(row_pointers);
+
+	fclose(fp);
+}
+
+static void swap_colors(void)
+{
+	for (x = 0; x < width; x++) {
+		for (y = 0; y < height; y++) {
+			png_byte *row = row_pointers[y];
+			png_byte *ptr = &(row[x * 4]);
+
+			/* set red value to 0 and green value to the blue one */
+			ptr[0] = 0;
+			ptr[1] = ptr[2];
+		}
+	}
+}
+
+
+static void process_file(void)
+{
+	if (png_get_color_type(png_ptr, info_ptr) == PNG_COLOR_TYPE_RGB)
+		abort_("[process_file] input file is PNG_COLOR_TYPE_RGB but must be PNG_COLOR_TYPE_RGBA "
+		       "(lacks the alpha channel)");
+
+	if (png_get_color_type(png_ptr, info_ptr) != PNG_COLOR_TYPE_RGBA)
+		abort_("[process_file] color_type of input file must be PNG_COLOR_TYPE_RGBA (%d) (is %d)", PNG_COLOR_TYPE_RGBA,
+		       png_get_color_type(png_ptr, info_ptr));
+
+	swap_colors();
+}
+
+int main(int argc, char **argv)
+{
+	if (argc != 3)
+		abort_("Usage: program_name <file_in> <file_out>");
+
+	read_png_file(argv[1]);
+	process_file();
+	write_png_file(argv[2]);
+
+	return 0;
+}
diff --git a/lab-data/debugging/nfsroot/root/app_profiling/tux.png b/lab-data/debugging/nfsroot/root/app_profiling/tux.png
new file mode 100644
index 00000000..d609663f
Binary files /dev/null and b/lab-data/debugging/nfsroot/root/app_profiling/tux.png differ
diff --git a/labs/debugging-application-profiling/debugging-application-profiling.tex b/labs/debugging-application-profiling/debugging-application-profiling.tex
index 307bad23..4db1ce7e 100644
--- a/labs/debugging-application-profiling/debugging-application-profiling.tex
+++ b/labs/debugging-application-profiling/debugging-application-profiling.tex
@@ -52,9 +52,15 @@ tools.
 
 In order to profile the application using the \code{callgrind} tool. Our program
 takes two parameters, an input png and an output one. We provided a
-\code{tux.png} which can be used as an input file.
+\code{tux.png} which can be used as an input file. First let's compile it using
+the following commands:
 
-We are going to profile cache usage using Cachegrind with the following command
+\begin{bashinput}
+$ cd /home/<user>/debugging-labs/nfsroot/root/app_profiling
+$ make
+\end{bashinput}
+
+We are going to profile cache usage using Cachegrind with the following command:
 
 \begin{bashinput}
 $ valgrind --tool=cachegrind ./png_convert tux.png out.png




More information about the training-materials-updates mailing list