Hi Jakub, i will fix all the issues and i will use the script on the website. On Mon, Mar 14, 2022 at 6:23 PM Jakub Jelinek <ja...@redhat.com> wrote:
> Hi! > > Sorry for the delay, GCC is currently in stage 4, which means a lot of us > concentrate on fixing GCC 12 so that it can be released soon and projects > that are clearly GCC 13 material are much lower priority. > Never mind, thank you anyway. > > On Wed, Feb 16, 2022 at 11:04:13PM +0200, Mohamed Atef via Gcc-patches > wrote: > > --- a/libgomp/ChangeLog > > +++ b/libgomp/ChangeLog > > @@ -1,3 +1,30 @@ > > ChangeLog entries should be posted in the patches and eventually should be > in the commit message, but the patch shouldn't change ChangeLog files > directly, we have nightly scripts that handle that. > > > +2022-02-16 Mohamed Atef <mohamedatef1...@gmail.com> > > + > > + * Makefile.am (toolexeclib_LTLIBRARIES): Add libgompd.la. > > For ChangeLog entries, https://gcc.gnu.org/contribute.html specifies > how it should be formatted. > E.g. there should be a tab instead of 8 spaces at the start of the lines > (except for the date/name/email line), the above has spaces. > > > + (libgompd_la_LDFLAGS, libgompd_la_DEPENDENCIES, > libgompd_la_LINK, > > + libgompd_la_SOURCES, libgompd_version_dep, > libgompd_version_script, > > + libgompd.ver-sun, libgompd.ver, libgompd_version_info): > Defined. > > No trailing whitespace. I think it would be better to use : New. > > > + * Makefile.in: Regenerate. > > + * aclocal.m4: Regenerate. > > + * config/darwin/plugin-suffix.h: Removed (). > > + * config/hpux/plugin-suffix.h: Removed (). > > + * config/posix/plugin-suffix.h: Removed (). > > These don't say what has changed, and the tense is wrong. So should be > like: > * config/posix/plugin-suffix.h (SONAME_SUFFIX): Remove ()s. > or so. > > > + * configure: Regenerate. > > + * env.c: (#include "ompd-support.h") : Added. > > The above correctly mentions just the filename and not a particular thing > in it for the added include, but the rest is incorreclty formatted. > Should be: > * env.c: Include ompd-support.h > or so. > > > + (initialize_env) : Call ompd_load(). > > There should be no space in between ) and :. Just say > (initialize_env): Call ompd_load. > No need for the ()s in there. > > > + * parallel.c:(#include "ompd-support.h"): Added. > > See above. > > > + (GOMP_parallel) : Call ompd_bp_parallel_begin and > ompd_bp_parallel_end. > > + * libgomp.map: Add OMP_5.0.3 symobl versions. > > + * libgompd.map: New file. > > + * omp-tools.h.in : New file. > > + * omp-types.h.in : New file. > > + * ompd-support.h : New file. > > + * ompd-support.c : New file. > > + * ompd-helper.h : New file. > > See above for the superfluous spaces before :. > > > + * ompd-helper.c: New file. > > + * ompd-init.c: New file. > > + * testsuite/Makfile.in: Regenerate. > > Typo, Makefile.in instead of Makfile.in (the checking script would prevent > commit because of this). > > > --- a/libgomp/Makefile.am > > +++ b/libgomp/Makefile.am > ... > > +libgompd_version_info = -version-info $(libtool_VERSION) > > libgomp_la_LDFLAGS = $(libgomp_version_info) $(libgomp_version_script) \ > > $(lt_host_flags) > > +libgompd_la_LDFLAGS = $(libgompd_version_info) > $(libgompd_version_script) \ > > + $(lt_host_flags) > > libgomp_la_DEPENDENCIES = $(libgomp_version_dep) > > +libgompd_la_DEPENDENCIES = $(libgompd_version_dep) > > libgomp_la_LINK = $(LINK) $(libgomp_la_LDFLAGS) > > - > > +libgompd_la_LINK = $(LINK) $(libgompd_la_LDFLAGS) > > Please preserve the empty line above libgomp_la_SOURCES. > > > --- a/libgomp/Makefile.in > > +++ b/libgomp/Makefile.in > > @@ -1,7 +1,7 @@ > > -# Makefile.in generated by automake 1.15.1 from Makefile.am. > > +# Makefile.in generated by automake 1.16.1 from Makefile.am. > > Please make sure you regenerate files with the exact autoconf/automake > versions as used previously, we don't want the generated files > jump backwards/forwards whenever somebody regenerates them. > You can e.g. build automake 1.15.1 and autoconf 2.69 if you don't have > those, make install DESTDIR=/your/home/automake-1.15.1 etc. > and then just regenerate with those in $PATH. > done. > > --- a/libgomp/env.c > > +++ b/libgomp/env.c > > @@ -1483,6 +1484,8 @@ initialize_env (void) > > = thread_limit_var > INT_MAX ? UINT_MAX : thread_limit_var; > > } > > parse_int_secure ("GOMP_DEBUG", &gomp_debug_var, true); > > + if(gomp_debug_var) > > + ompd_load(); > > Formatting. Again, https://gcc.gnu.org/contribute.html contains > the rules or just watch how does surrounding code look like. > The errors are: > 1) space in between if and ( is missing > 2) ompd_load should be indented 2 further columns from if (and > any consecutive 8 spaces at the start of lines replaced with > tab in *.c/*.C files) > 3) space between ompd_load and ( is missing > > do macros also should have a space between the name and the '(' > > #ifndef HAVE_SYNC_BUILTINS > > gomp_mutex_init (&gomp_managed_threads_lock); > > #endif > > diff --git a/libgomp/libgomp.map b/libgomp/libgomp.map > > index 2ac58094169..5c57b1a2d08 100644 > > --- a/libgomp/libgomp.map > > +++ b/libgomp/libgomp.map > > @@ -226,6 +226,16 @@ OMP_5.1 { > > omp_get_teams_thread_limit_; > > } OMP_5.0.2; > > > > +OMP_5.0.3 { > > + global: > > + ompd_dll_locations; > > + ompd_dll_locations_valid; > > + ompd_bp_parallel_begin; > > + ompd_bp_parallel_end; > > + local: > > + *; > > +}OMP_5.0.2; > > Again, please watch how the surrounding code looks like. > The first 2 added lines are correct, the next 4 have 2 spaces > followed by tab when they should start with just tab, local: *; lines > shouldn't be there, that is just in the very first symver and nowhere else. > And there should be a space between } and OMP_5.0.2; > > > --- /dev/null > > +++ b/libgomp/libgompd.map > > @@ -0,0 +1,12 @@ > > +OMPD_5.1 { > > + global: > > + ompd_initialize; > > + ompd_get_api_version; > > + ompd_get_version_string; > > + ompd_process_initialize; > > + ompd_device_initialize; > > + ompd_rel_address_space_handle; > > + ompd_finalize; > > + local: > > + *; > > +}; > > The *; local has incorrect indentation, the rest is ok. > > > --- /dev/null > > +++ b/libgomp/omp-tools.h.in > > > +void ompd_dll_locations_valid(void); > > Space before (. > > + > > +typedef __UINT64_TYPE__ ompd_size_t; > > +typedef __UINT64_TYPE__ ompd_wait_id_t; > > + > > +typedef __UINT64_TYPE__ ompd_addr_t; > > +typedef __INT64_TYPE__ ompd_word_t; > > +typedef __UINT64_TYPE__ ompd_seg_t; > > + > > +typedef struct ompd_address_t > > +{ > > + ompd_seg_t segment; > > + ompd_addr_t address; > > These should be indented by 2 spaces instead of a tab. > > +} ompd_address_t; > > + > > +typedef struct ompd_frame_info_t > > +{ > > + ompd_address_t frame_address; > > + ompd_word_t frame_flag; > > Ditto. > > > +typedef struct _ompd_task_handle ompd_task_handle_t; > > + > > +typedef enum ompd_scope_t > > +{ > > + ompd_scope_global = 1, > > + ompd_scope_address_space = 2, > > + ompd_scope_thread = 3, > > + ompd_scope_parallel = 4, > > + ompd_scope_implicit_task = 5, > > + ompd_scope_task = 6 > > Likewise. And just space = space before the values. > Several times in the file. > > > + > > +typedef ompd_rc_t > (*ompd_callback_get_thread_context_for_thread_id_fn_t) > > No trailing whitespace. > > > + (ompd_address_space_context_t *, ompd_thread_id_t, > > + ompd_size_t, const void *, ompd_thread_context_t **); > > I'd indent the ( just by 2 spaces, and ompd_size_t should be indented > below ompd_address_space_context_t, i.e. not below (. > Again many times. > > + > > +#endif /* _OMP_TOOLS_H */ > > \ No newline at end of file > > Please make sure newly added files are newline terminated. > > > diff --git a/libgomp/ompd-helper.c b/libgomp/ompd-helper.c > > new file mode 100644 > > index 00000000000..033990073a5 > > --- /dev/null > > +++ b/libgomp/ompd-helper.c > > @@ -0,0 +1,47 @@ > > +/* Copyright (C) 2021 Free Software Foundation, Inc. > > It is 2022 now. > > > + <http://www.gnu.org/licenses/>. */ > > + > > + > > + > > + > > + > > Please avoid the excessive vertical whitespace, 2 lines is ok, > more than that is not. > > > +#include "ompd-helper.h" > > + > > +ompd_device_type_sizes_t target_sizes; > > + > > +ompd_rc_t > > +get_sizes(ompd_address_space_context_t *context) > > Space before ( etc., incorrect indentation, what I said above. > > > +{ > > + if(context == NULL) > > + return ompd_rc_bad_input; > > > + static int inited = 0; > > Just use bool and false (and include <stdbool.h> somewhere). > Also, can that be called in parallel by multiple threads? > If so, such inited checking is racy. > > from OpenMP specs. "The OMPD library does not need to be reentrant. The tool must ensure that only one thread enters the OMPD library at a time. The OMPD library must not install signal handlers or otherwise interfere with the tool’s signal configuration." > > +/*This file contains the implementation of functions defined in > > + section 5.5.1, 5.5.2. */ > > Space after /* missing, and section should be below This. > > > +ompd_rc_t > > +ompd_initialize(ompd_word_t api_version, > > + const ompd_callbacks_t *callbacks_table) > > Space before ( and const ompd_ should be below ompd_word_t. > > > + static const char tmp_string[] = > > = should be on the next line already. > > > + "GNU OpenMP runtime implementing OMPD version " > > + stringize(VERSION) " Debugging library."; > > stringize (VERSION) should be below that first ", i.e. > static const char tmp_string[] > = "GNU OpenMP runtime implementing OMPD version " > stringize (VERSION) " Debugging library"; > The . at the end makes no sense, it isn't a sentence. > > > + //naive way to read from memory > > We use just C comments in libgomp, missing capital at the start > and . at the end, so > /* Native way to read from memory. */ > > > + ret = callbacks->symbol_addr_lookup(context, NULL, "ompd_state", > > + &symbol_addr, NULL); > > Arguments on next line should be below arguments on the first line, so > one column after (. > > + > > + ret = callbacks->read_memory(context, NULL, &symbol_addr, > > + target_sizes.sizeof_long_long, &ompd_state); > > + > > + ret = callbacks->device_to_host(context, &ompd_state, > > + target_sizes.sizeof_long_long, 1, &ompd_state); > > + > > + ret = callbacks->alloc_memory(sizeof(ompd_address_space_handle_t), > > + (void **)(handle)); > > Space between )(. Also, shouldn't ret != ompd_rc_ok be checked after > every call? Otherwise you only checkit from the last one. > > + > > + > > + if(ret != ompd_rc_ok) > > + return ret; > > + > > + if(handle == NULL) > > + return ompd_rc_error; > > + > > + (*handle)->context = context; > > + (*handle)->kind = OMPD_DEVICE_KIND_HOST; > > + return ret; > > +} > > + > > + > > + > > +/*OMPD will not support GPUs for now. */ > > + > > +ompd_rc_t > > +ompd_device_initialize(ompd_address_space_handle_t *process_handle, > > + ompd_address_space_context_t *device_context, ompd_device_t kind, > > + ompd_size_t sizeof_id, void *id, > > + ompd_address_space_handle_t **device_handle) > > + > > +{ > > + if(device_context == NULL) > > + return ompd_rc_bad_input; > > + > > + return ompd_rc_unsupported; > > +} > > + > > + > > + > > +ompd_rc_t > > +ompd_rel_address_space_handle(ompd_address_space_handle_t *handle) > > +{ > > + if(handle == NULL) > > + return ompd_rc_stale_handle; > > + > > + ompd_rc_t ret = callbacks->free_memory((void *)handle); > > + return ret; > > +} > > diff --git a/libgomp/ompd-support.c b/libgomp/ompd-support.c > > new file mode 100644 > > index 00000000000..8458e1f5d5f > > --- /dev/null > > +++ b/libgomp/ompd-support.c > > @@ -0,0 +1,108 @@ > > +/* Copyright (C) 2021 Free Software Foundation, Inc. > > + Contributed by Mohamed Atef <mohamedatef1...@gmail.com>. > > + This file is part of the GNU Offloading and Multi Processing Library > > + (libgomp). > > + Libgomp is free software; you can redistribute it and/or modify it > > + under the terms of the GNU General Public License as published by > > + the Free Software Foundation; either version 3, or (at your option) > > + any later version. > > + Libgomp is distributed in the hope that it will be useful, but > WITHOUT ANY > > + WARRANTY; without even the implied warranty of MERCHANTABILITY or > FITNESS > > + FOR A PARTICULAR PURPOSE. See the GNU General Public License for > > + more details. > > + Under Section 7 of GPL version 3, you are granted additional > > + permissions described in the GCC Runtime Library Exception, version > > + 3.1, as published by the Free Software Foundation. > > + You should have received a copy of the GNU General Public License and > > + a copy of the GCC Runtime Library Exception along with this program; > > + see the files COPYING3 and COPYING.RUNTIME respectively. If not, see > > + <http://www.gnu.org/licenses/>. */ > > + > > +#include "ompd-support.h" > > + > > + > > + > > +const char **ompd_dll_locations = NULL; > > +__UINT64_TYPE__ ompd_state; > > + > > +void > > +ompd_load() > > +{ > > + static int ompd_initialized = 0; > > + if(ompd_initialized) > > + return; > > + fprintf(stderr, "OMP OMPD active\n"); > > I think you don't want such printouts, perhaps use gomp_debug so that > it is only printed if user asks for it. > Also, ompd_load is not a symbol specified in the standard, so we should > call it differently, the omp_* and ompd_* prefixes should be reserved > for symbols from the standard. > And, now I see you call ompd_load guarded with gomp_debug_var, shouldn't > that be guarded with a var set from parsing "OMP_DEBUG" env var rather > than the implementation specific "GOMP_DEBUG" which means something > completely else? > I didn't find OMP_DEBUG in the list of environment variables. but fixed. > Why do you need that ompd_initialized stuff? env.c calls it just once. > > > + static const char *tmp_ompd_dll_locations[2] > > + = {"libgompd" SONAME_SUFFIX(1) , NULL}; > > No space before , and = should be 2 columns to the right from static > which should be 2 columns to the right from { (this is everywhere in the > patch). > > > + ompd_state |= OMPD_ENABLED; > > + ompd_initialized = 1; > > + ompd_dll_locations = (const char **)malloc(2 * sizeof(const char > *)); > > If you'd need to actually allocate something, you'd want to use > gomp_malloc and similar APIs that will fail miserably if memory can't be > allocated. But another option is just to have a static 2 elements array > that holds it and just set ompd_dll_locations to the address of that > array's > first element. After all, you clearly have one like that, > just don't call it tmp_ompd_dll_locations but say ompd_dll_locations_array > or something similar. If you for whatever reason need to allocate it > from heap, on the other side don't make that array static, we really want > as few dynamic relocations in the binary and as small .data and .rodata > as possible. > > > +void __attribute__ ((noinline)) > > +ompd_dll_locations_valid() > > +{ > > I'd strongly prefer these not to be separate functions at least > on the common platforms. At least when they are called just once > instead of multiple times. > So have in the headers some macros that depending on e.g. whether > it is __ELF__ define those as: > #ifdef __ELF__ > #define ompd_dll_locations_valid() \ > __asm__ __volatile__ (".globl ompd_dll_locations_valid\n\t" > "ompd_dll_locations_valid:"); > #else > extern void ompd_dll_locations_valid (void); > #endif > So should I remove them from the omp-tools.h file? > and use these out of line functions only if the macros aren't defined. > > @@ -173,10 +174,14 @@ GOMP_parallel (void (*fn) (void *), void *data, > unsigned num_threads, > > unsigned int flags) > > { > > num_threads = gomp_resolve_num_threads (num_threads, 0); > > + if(ompd_state) > > + ompd_bp_parallel_begin(); > > This shouldn't be conditional on anything (especially if it is just asm > volatile with a label rather than a function call, because it doesn't cost > anything in that case except for the (required) .dynsym entry). > > But, I think this spot is also not the best one, because it isn't the only > one invoked for #pragma omp parallel. GOMP_parallel_loop_static_start, > GOMP_parallel_loop_nonmonotonic_guided etc., there are many. > Better to stick it into gomp_team_start and gomp_team_end. > > done, what about ompd_thread_bp_begin, and ompd_thread_bp_end : where should i put them? > Please adjust your other patch with all the issues raised above too. > > Jakub > >