Re: [PATCH] trace-cmd: libtracecmd: Rename private functions to fix static building

Metin Kaya <[email protected]> Thu, 31 Oct 2024 09:48:32 +0000
Newsgroups org.kernel.vger.linux-trace-devel
Message-ID <[email protected]>
On 31/10/2024 12:47 am, Steven Rostedt wrote:
> On Mon, 28 Oct 2024 12:22:47 +0000
> Metin Kaya <[email protected]> wrote:
> 
>> Building trace-cmd statically fails because of duplicated symbols for
>> strstrip() function which is also implemented in libtracefs. The
>> __hidden attribute does not resolve these conflicts for static builds
>> due to the lack of namespacing support in C. Refer to the associated
>> Bugzilla page [1] for further details.
>>
>> Although only strstrip() breaks the static build as of now, we should
>> fix the underlying issue comprehensively across the libtraceevent,
>> libtracefs, and trace-cmd packages. The recommendation on [1] is
>> prepending package name (e.g., "tracecmd_") to private functions (tagged
>> with __hidden attribute).
>>
>> Thus:
>> 1. Retain private functions which already start with "tracecmd_".
>> 2. If a private function starts with "trace_", then just change its
>>     prefix to "tracecmd_".
>> 3. If prepending "tracecmd_" prefix to a private function's name clashes
>>     with an existing one, rename one of the functions per its context
>>     (e.g., rename trace_load_plugins() to
>>     tracecmd_load_plugins_from_handle() and trace_append_options() to
>>     tracecmd_append_options_to_file()).
>> 4. Prepend "tracecmd_" prefix to all remaining "__hidden" functions.
>>
>> Future __hidden functions should follow this prefixing schemed to avoid
>> new naming conflicts.
> 
> I'm not against the change to make the hidden functions with a unique
> name, but I rather come up with something other than "tracecmd_". That
> prefix was to be used for functions that will eventually become public.
> 
> Would "tcmd_" work?
> 
> Same goes for the other libraries. The "tracefs_" is for functions that
> should be exported. Perhaps rename it to "tfs_"?

Hi Steve,

Ah, you are right. Those prefixes conflict with public ones. Perhaps I 
misread the discussion on Bugzilla page. I've no objection to using 
"tcmd_", "tfs_" and "tep_" prefixes. Will update all three patches 
accordingly.

> 
> As for libtraceevent, it doesn't need a separate prefix for local
> variables compared to exported ones, but that prefix is "tep_" and not
> "traceevent_".

I believe I did not rename any variables in the libtraceevent patch [1].
However, I made the following changes in the libtracefs patch [2]:

-extern const struct tep_format_field common_stacktrace;
+extern const struct tep_format_field tracefs_common_stacktrace;

-extern pthread_mutex_t toplevel_lock;
+extern pthread_mutex_t tracefs_toplevel_lock;

Do you recommend keeping them as is or using "tfs_" prefix?

[1] 
https://lore.kernel.org/linux-trace-devel/[email protected]
[2] 
https://lore.kernel.org/linux-trace-devel/[email protected]

Thanks,